2010-05-18  Jaime Yap  <jaimeyap@google.com>

        Reviewed by Pavel Feldman.

        Removes public callLocation API and utility context from ScriptCallStack.
        Adds ability to grab the top 5 JavaScript stack frames for each timeline
        record using new fast V8 stack trace API.
        https://bugs.webkit.org/show_bug.cgi?id=37502

        * bindings/js/ScriptCallStack.cpp:
        (WebCore::ScriptCallStack::stackTrace):
        * bindings/js/ScriptCallStack.h:
        * bindings/v8/ScriptArray.h:
        (WebCore::ScriptArray::ScriptArray):
        * bindings/v8/ScriptCallStack.cpp:
        (WebCore::ScriptCallStack::callLocation):
        (WebCore::ScriptCallStack::stackTrace):
        * bindings/v8/ScriptCallStack.h:
        * inspector/TimelineRecordFactory.cpp:
        (WebCore::TimelineRecordFactory::createGenericRecord):
        * inspector/front-end/TimelinePanel.js:
        (WebInspector.TimelinePanel.FormattedRecord):
        (WebInspector.TimelinePanel.FormattedRecord.prototype._generatePopupContent):
        (WebInspector.TimelinePanel.FormattedRecord.prototype._getRecordDetails):

2010-05-24  Anders Carlsson  <andersca@apple.com>

        Try to fix build.

        * plugins/npapi.cpp:
        (NPN_ReloadPlugins):

2010-05-24  Anders Carlsson  <andersca@apple.com>

        Reviewed by Sam Weinig.

        Get rid of PlugInInfoStore.
        https://bugs.webkit.org/show_bug.cgi?id=39608

        * WebCore.gyp/WebCore.gyp:
        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * platform/android/TemporaryLinkStubs.cpp:
        * plugins/PluginInfoStore.cpp: Removed.
        * plugins/PluginInfoStore.h: Removed.
        * plugins/npapi.cpp:

2010-05-24  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r60068.
        http://trac.webkit.org/changeset/60068
        https://bugs.webkit.org/show_bug.cgi?id=39600

        "Causes fast/repaint/search-field-cancel to fail." (Requested
        by jparent on #webkit).

        * rendering/RenderObject.h:
        (WebCore::objectIsRelayoutBoundary):

2010-05-24  Jeremy Orlow  <jorlow@chromium.org>

        Unreviewed.  Checked in merge error.  :-(

        * CMakeLists.txt:

2010-05-24  Steve Block  <steveblock@google.com>

        Reviewed by Darin Adler.

        Geolocation causes DOMWindow to leak if position requests are in progress when the page is navigated away
        https://bugs.webkit.org/show_bug.cgi?id=39288

        Test: fast/dom/Geolocation/ongoing-request-leak.html

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::stopLoading): Stop all Geolocation instances. This call is made after the unload event has fired, so no new Geolocation activity is possible.
        * page/Geolocation.cpp:
        (WebCore::Geolocation::stop): Removes all ongoing requests and stops the service.
        (WebCore::Geolocation::disconnectFrame): Removed calls to stopUpdating() and stopTimers(), as this will already have been done in stop();
        * page/Geolocation.h: Added stop() method.

2010-05-24  MORITA Hajime  <morrita@google.com>

        Reviewed by Kent Tamura.

        Textarea shouldn't grow when you type.
        https://bugs.webkit.org/show_bug.cgi?id=32077

        <textarea> with percent-specified, height-related properties did
        cause partial-layout rooted from the renderer, that resulted
        different box height between full-layout and partial-layout. This
        is because calcHeight() assumes that the layout calculation of the
        RenderBlock's parent is ongoing. But this assumption is violated
        when the RenderBlock is root of the layout calculation. 
        
        So we prevent such <textarea>'s RenderObjects from being layout
        root.

        Test: fast/forms/textarea-percentage-dimensions.html

        * rendering/RenderObject.h:
        (WebCore::objectIsRelayoutBoundary):

2010-05-20  Jeremy Orlow  <jorlow@chromium.org>

        Reviewed by Alexey Proskuryakov.

        Add DOMStringList idl, needed for IndexedDB and for HTML5 drag & drop
        https://bugs.webkit.org/show_bug.cgi?id=39429

        IndexedDB depends on DOMStringList.
        http://dev.w3.org/2006/webapi/WebSimpleDB/#idl-def-IDBDatabase
        It's currently specced here:
        http://www.w3.org/TR/DOM-Level-3-Core/core.html#DOMStringList

        Existing tests cover the constructor.  IndexedDB will also use this
        soon (and thus add test coverage).

        * Android.mk:
        * Android.derived.jscbindings.mk:
        * Android.derived.v8bindings.mk:
        * CMakeLists.txt:
        * DerivedSources.cpp:
        * DerivedSources.make:
        * GNUmakefile.am:
        * WebCore.gypi:
        * WebCore.pri:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/scripts/CodeGeneratorJS.pm:
        * dom/DOMStringList.h: Added.
        (WebCore::DOMStringList::create):
        (WebCore::DOMStringList::length):
        (WebCore::DOMStringList::item):
        (WebCore::DOMStringList::isEmpty):
        (WebCore::DOMStringList::clear):
        (WebCore::DOMStringList::append):
        (WebCore::DOMStringList::DOMStringList):
        * dom/DOMStringList.idl: Added.
        * page/DOMWIndow.idl: Re-enabled constructor

2010-05-23  Shinichiro Hamaji  <hamaji@chromium.org>

        Reviewed by Alexey Proskuryakov.

        0x5C of EUC-JP is not Yen Sign but U+005C
        https://bugs.webkit.org/show_bug.cgi?id=24906

        Tests: editing/selection/find-yensign-and-backslash-with-japanese-fonts.html
               fast/text/backslash-to-yen-sign-dynamic.html
               fast/text/backslash-to-yen-sign.html

        * GNUmakefile.am:
        * WebCore.gyp/WebCore.gyp:
        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.vcproj/WebCoreCommon.vsprops:
        * WebCore.xcodeproj/project.pbxproj:
        * platform/graphics/Font.cpp:
        (WebCore::Font::Font):
        (WebCore::Font::operator=):
        * platform/graphics/Font.h:
        (WebCore::Font::needsTranscoding):
        * platform/text/CharacterNames.h:
        * platform/text/transcoder/FontTranscoder.cpp: Added.
        (WebCore::FontTranscoder::FontTranscoder):
        (WebCore::FontTranscoder::converterType):
        (WebCore::FontTranscoder::convert):
        (WebCore::FontTranscoder::needsTranscoding):
        (WebCore::fontTranscoder):
        * platform/text/transcoder/FontTranscoder.h: Added.
        (WebCore::FontTranscoder::):
        * rendering/RenderText.cpp:
        (WebCore::RenderText::updateNeedsTranscoding):
        (WebCore::RenderText::styleDidChange):
        (WebCore::RenderText::setTextInternal):

2010-05-23  MORITA Hajime  <morrita@google.com>

        Unreviewed, rolling out r60060.
        http://trac.webkit.org/changeset/60060
        https://bugs.webkit.org/show_bug.cgi?id=32077

        breaks chromium test

        * rendering/RenderObject.h:
        (WebCore::objectIsRelayoutBoundary):

2010-05-23  Justin Schuh  <jschuh@chromium.org>

        Reviewed by Shinichiro Hamaji.

        Style cleanup for r56288
        https://bugs.webkit.org/show_bug.cgi?id=39554

        Cleaning up style from a previous patch. No tests needed because no
        logic is changed. 

        * svg/SVGFEMorphologyElement.cpp:
        (WebCore::SVGFEMorphologyElement::build):

2010-05-23  MORITA Hajime  <morrita@google.com>

        Reviewed by Kent Tamura.

        Textarea shouldn't grow when you type.
        https://bugs.webkit.org/show_bug.cgi?id=32077

        <textarea> with percent-specified, height-related properties did
        cause partial-layout rooted from the renderer, that resulted
        different box height between full-layout and partial-layout. This
        is because calcHeight() assumes that the layout calculation of the
        RenderBlock's parent is ongoing. But this assumption is violated
        when the RenderBlock is root of the layout calculation. 
        
        So we prevent such <textarea>'s RenderObjects from being layout
        root.

        Test: fast/forms/textarea-percentage-dimensions.html

        * rendering/RenderObject.h:
        (WebCore::objectIsRelayoutBoundary):

2010-05-23  Sam Weinig  <sam@webkit.org>

        Reviewed by Oliver Hunt.

        Fix for https://bugs.webkit.org/show_bug.cgi?id=39575
        Make JS DOMObject inherit from JSObjectWithGlobalObject instead of JSObject

        - Changes JSDOMWindowShell to inherit from JSObject instead of
          DOMObject since it doesn't ever go into any DOMObject tables.
          In a separate change, we may want to make this inherit from 
          JSObjectWithGlobalObject since JSDOMWindowShell does store a
          global object pointer.
        - Change DOMObject to inherit from JSObjectWithGlobalObject
          instead of JSObject. In this change I am keeping around
          DOMObjectWithGlobalPointer, which now just uses the capabilities
          of JSObjectWithGlobalObject instead of implementing them
          itself.  DOMObjectWithGlobalPointer will go away in a subsequent
          patch.

        * bindings/js/JSDOMBinding.h:
        (WebCore::DOMObjectWithGlobalPointer::globalObject):
        (WebCore::DOMObjectWithGlobalPointer::DOMObjectWithGlobalPointer):
        * bindings/js/JSDOMWindowShell.h:
        * bindings/js/JSDOMWrapper.h:
        (WebCore::DOMObject::DOMObject):

2010-05-23  Eric Seidel  <eric@webkit.org>

        Unreviewed, just being a copy/paste monkey.  Oook, eeek.

        Add new HTML5TreeBuilder class to hold the tree builder section of the HTML5 parsing spec
        https://bugs.webkit.org/show_bug.cgi?id=39572

        Add HTML5TreeBuilder.* to each of WebKit's 85,324 build systems.

        * Android.mk:
        * CMakeLists.txt:
        * GNUmakefile.am:
        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:

2010-05-23  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        Add new HTML5TreeBuilder class to hold the tree builder section of the HTML5 parsing spec
        https://bugs.webkit.org/show_bug.cgi?id=39572

        We've been working on the tokenization (lexing) section of the HTML5
        spec until now and leaning on the old HTMLParser for tree building.
        We need to start writing more of the tree building sections of the spec,
        but to do that we need a place to put the new code.

        This patch moves our old-to-new conversion hacks out of HTML5Tokenizer
        (our Tokenizer.h implementation) and into HTML5TreeBuilder.
        Follow-up patches will add new HTML5 tree building code to this file
        and will allow us to switch between old and new parser/treebuilder
        implementations.

        No change in behavior, thus no new tests.

        * WebCore.xcodeproj/project.pbxproj:
        * html/HTML5Tokenizer.cpp:
        (WebCore::HTML5Tokenizer::HTML5Tokenizer):
        (WebCore::HTML5Tokenizer::write):
         - Call the new HTML5TreeBuilder code.
        * html/HTML5Tokenizer.h:
        * html/HTML5TreeBuilder.cpp: Added.
        * html/HTML5TreeBuilder.h: Added.

2010-05-23  Sam Weinig  <sam@webkit.org>

        Reviewed by Oliver Hunt.

        Fix for https://bugs.webkit.org/show_bug.cgi?id=39574
        Complete the merge of NamedMappedAttrMap into NamedNodeMap.

        * Android.mk:
        * CMakeLists.txt:
        * GNUmakefile.am:
        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::canShareStyleWithElement):
        (WebCore::CSSStyleSelector::styleForElement):
        * dom/Element.cpp:
        (WebCore::Element::createAttributeMap):
        * dom/NamedMappedAttrMap.cpp: Removed.
        * dom/NamedMappedAttrMap.h: Removed.
        * dom/NamedNodeMap.cpp:
        (WebCore::NamedNodeMap::setClass):
        (WebCore::NamedNodeMap::declCount):
        (WebCore::NamedNodeMap::mapsEquivalent):
        (WebCore::NamedNodeMap::mappedMapsEquivalent):
        * dom/NamedNodeMap.h:
        (WebCore::NamedNodeMap::create):
        (WebCore::NamedNodeMap::clearClass):
        (WebCore::NamedNodeMap::classNames):
        (WebCore::NamedNodeMap::hasMappedAttributes):
        (WebCore::NamedNodeMap::declRemoved):
        (WebCore::NamedNodeMap::declAdded):
        (WebCore::NamedNodeMap::NamedNodeMap):
        * dom/StyledElement.h:
        (WebCore::StyledElement::mappedAttributes):
        * html/HTML5Token.h:
        * html/HTML5Tokenizer.cpp:
        (WebCore::convertToOldStyle):
        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::setInputType):
        * html/HTMLParser.cpp:
        (WebCore::HTMLParser::handleIsindex):
        * html/HTMLTokenizer.cpp:
        (WebCore::Token::addAttribute):
        (WebCore::HTMLTokenizer::processToken):
        * html/HTMLTokenizer.h:
        * html/HTMLViewSourceDocument.cpp:
        (WebCore::HTMLViewSourceDocument::createContainingTable):
        (WebCore::HTMLViewSourceDocument::addSpanWithClassName):
        (WebCore::HTMLViewSourceDocument::addLine):
        (WebCore::HTMLViewSourceDocument::addLink):

2010-05-23  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        Teach HTML5 parser how to lex comments correctly
        https://bugs.webkit.org/show_bug.cgi?id=39537

        Implement the non-bogus comment states for the lexer.  There's more
        work to do in some of these states (e.g., to handle doctype tokens and
        bogus comments), but I'm trying to keep the patches small.

        Tests: comments01.dat

        * html/HTML5Lexer.cpp:
        (WebCore::HTML5Lexer::nextToken):
        * html/HTML5Lexer.h:
        * html/HTML5Token.h:
        (WebCore::HTML5Token::beginComment):
        (WebCore::HTML5Token::appendToComment):
        (WebCore::HTML5Token::data):
        * html/HTML5Tokenizer.cpp:
        (WebCore::convertToOldStyle):
        * platform/text/SegmentedString.h:
        (WebCore::SegmentedString::):
        (WebCore::SegmentedString::peek):
            - Occationally, the HTML5 parsing algorithm looks ahead in the
              input stream.  The implementation here is incomplete, but its
              enough to run the current HTML5 parsing tests.  I'll eventually
              need to implement the slow case here.

2010-05-23  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        Make the html5lib parser tests run using the HTML5 parser
        https://bugs.webkit.org/show_bug.cgi?id=39533

        Turns out we're just one small tweak away from running the html5lib
        tests.  After this patch lands, we should be able to introduce tests
        for every change to the HTML5 parser.

        Test: html5lib/webkit-runner.html

        * html/HTML5Lexer.cpp:
        (WebCore::HTML5Lexer::nextToken):

2010-05-23  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        Make HTML5 parser parse <script>alert("<hi>");</script>
        https://bugs.webkit.org/show_bug.cgi?id=39525

        More progress towards getting the html5lib test harness running.  We
        need to parse script data in the ScriptDataState.  The spec says the
        parser should set the lexer's state to ScriptDataState, but we want to
        keep using the existing parser for a while so I've added some temporary
        logic to HTML5Tokenizer to set the state in the lexer.

        To get this case running, I needed to flesh out a bunch of the
        ScriptDataState logic.  There's a bunch more to do, but this is a
        start.

        I'm not 100% happy with this patch, but it lets us execute a simplified
        version of the test harness up to the point where it starts running the
        first test.

        * html/HTML5Lexer.cpp:
        (WebCore::HTML5Lexer::nextToken):
        (WebCore::HTML5Lexer::isAppropriateEndTag):
        (WebCore::HTML5Lexer::emitCurrentTagToken):
        * html/HTML5Lexer.h:
        (WebCore::HTML5Lexer::setState):
        * html/HTML5Token.h:
        (WebCore::HTML5Token::beginEndTag):
        (WebCore::HTML5Token::appendToCharacter):
        (WebCore::HTML5Token::name):
        * html/HTML5Tokenizer.cpp:
        (WebCore::HTML5Tokenizer::write):

2010-05-23  Chris Marrin  <cmarrin@apple.com>

        Reviewed by Simon Fraser.

        Limit the number of tiles created for large tiled layers
        https://bugs.webkit.org/show_bug.cgi?id=39522
        
        I added an algorithm to limit the number of tiles created to 512.
        It tried to limit them in only one dimension and if that's not
        possible it limits them in both dimensions according to the
        ratio of width to height. This has the effect of rendering
        tiles starting from the upper-left, which is often the part
        that is visible. So it both prevents crashing and tried to do
        the best job it can of displaying what the author intended.

        The test LayoutTests/compositing/geometry/huge-layers.html was
        crashing before this fix. Now it works correctly.

        * platform/graphics/win/WebTiledLayer.cpp:
        (WebCore::WebTiledLayer::WebTiledLayer):
        (WebCore::WebTiledLayer::setBounds):
        (WebCore::WebTiledLayer::constrainedSize):
        (WebCore::WebTiledLayer::updateTiles):
        * platform/graphics/win/WebTiledLayer.h:

2010-05-23  Noam Rosenthal  <noam.rosenthal@nokia.com>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] Using Accelerated Composing the rocket back animation on http://www.the-art-of-web.com/css/css-animation/ works differently as when not using AC.
        https://bugs.webkit.org/show_bug.cgi?id=39513

        The value of GraphicsLayer->transform() needs to be changed during the animation, regardless of m_fillsForward.
        m_fillsForward should only apply at the end of the animation. Based on previous patch by Kenneth Christiansen.

        * platform/graphics/qt/GraphicsLayerQt.cpp:
        (WebCore::TransformAnimationQt::applyFrame):
        (WebCore::OpacityAnimationQt::applyFrame):

2010-05-23  Kenneth Rohde Christiansen  <kenneth@webkit.org>

        Reviewed by Eric Seidel.

        [Qt] GraphicsLayerQt: Coding style and comment fixes.

        * platform/graphics/qt/GraphicsLayerQt.cpp:
        (WebCore::MaskEffectQt::MaskEffectQt):
        (WebCore::MaskEffectQt::draw):
        (WebCore::GraphicsLayerQtImpl::ContentData::ContentData):
        (WebCore::GraphicsLayerQtImpl::State::State):
        (WebCore::GraphicsLayerQtImpl::GraphicsLayerQtImpl):
        (WebCore::GraphicsLayerQtImpl::~GraphicsLayerQtImpl):
        (WebCore::GraphicsLayerQtImpl::rootLayer):
        (WebCore::GraphicsLayerQtImpl::recache):
        (WebCore::GraphicsLayerQtImpl::updateTransform):
        (WebCore::GraphicsLayerQtImpl::opaqueArea):
        (WebCore::GraphicsLayerQtImpl::flushChanges):
        (WebCore::GraphicsLayerQtImpl::notifyAnimationStarted):
        (WebCore::GraphicsLayerQt::setNeedsDisplayInRect):
        (WebCore::GraphicsLayerQt::setContentsToImage):
        (WebCore::applyTimingFunction):
        (WebCore::AnimationQtBase::updateState):
        (WebCore::AnimationQt::AnimationQt):
        (WebCore::AnimationQt::updateCurrentTime):
        (WebCore::TransformAnimationQt::applyFrame):
        (WebCore::TransformAnimationQt::updateState):
        (WebCore::OpacityAnimationQt::OpacityAnimationQt):
        (WebCore::OpacityAnimationQt::applyFrame):
        (WebCore::GraphicsLayerQt::addAnimation):
        (WebCore::GraphicsLayerQt::removeAnimationsForProperty):
        (WebCore::GraphicsLayerQt::removeAnimationsForKeyframes):
        (WebCore::GraphicsLayerQt::pauseAnimation):
        (WebCore::GraphicsLayerQt::suspendAnimations):
        (WebCore::GraphicsLayerQt::resumeAnimations):
        * platform/graphics/qt/GraphicsLayerQt.h:

2010-05-23  Justin Schuh  <jschuh@chromium.org>

        Reviewed by Darin Adler.

        Remove custom binding for Attr.value
        https://bugs.webkit.org/show_bug.cgi?id=39499

        Custom bindings are no longer needed because origin checks were moved
        out of the bindings by: http://trac.webkit.org/changeset/59866

        * Android.v8bindings.mk:
        * WebCore.gypi:
        * bindings/js/JSAttrCustom.cpp:
        * bindings/v8/custom/V8AttrCustom.cpp: Removed.
        * dom/Attr.idl:

2010-05-23  Grace Kloba  <klobag@gmail.com>

        Reviewed by Nate Chapin.

        Match the call of scheduleLocationChange() to its correct signature.
        Fixes <http://webkit.org/b/39452>

        The call of scheduleLocationChange() in generic and v8 bindings assuming the
        fourth parameter is "usergesture". But it is actually the fifth parameter.

        No new features. No new tests.

        * bindings/generic/BindingDOMWindow.h:
        (WebCore::::createWindow):
        * bindings/v8/custom/V8DOMWindowCustom.cpp:
        (WebCore::V8DOMWindow::openCallback):

2010-05-23  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        Reduce copy/paste code in HTMLParser using some template functions
        https://bugs.webkit.org/show_bug.cgi?id=39471

        No functional changes, thus no tests.

        * html/HTMLParser.cpp:
        (WebCore::addTags):
         - New function which takes a set an an array of QualifiedNames
           and adds the localName().impl() to the set for each QualifiedName.
        (WebCore::isTablePart):
        (WebCore::isScopingTag):
        (WebCore::mapTagToFunc):
        (WebCore::mapTagsToFunc):
         - New functions which take QualifiedNames and a function and map from the
           localName().impl() to the function.
        (WebCore::HTMLParser::getNode):
        (WebCore::HTMLParser::isHeadingTag):
        (WebCore::HTMLParser::isResidualStyleTag):
        (WebCore::HTMLParser::isAffectedByResidualStyle):

2010-05-22  Julie Parent  <jparent@chromium.org>

        Reviewed by Adam Barth.

        REGRESSION: xssAuditor tests failing in Chromium.
        https://bugs.webkit.org/show_bug.cgi?id=39560

        Follow up to r0014. Make if statement in V8 bindings match the one from jsc version.

        * bindings/v8/ScriptController.cpp:
        (WebCore::ScriptController::evaluate):

2010-05-22  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Mark Rowe.

        REGRESSION(r59977): platform/mac/fast/AppleScript/001.html failure
        https://bugs.webkit.org/show_bug.cgi?id=39531

        Revert r59977 and r59943. These changes caused some exceptions to no longer be
        reported in the inspector; I can't tell what they were originally trying to fix
        so I am not sure how to fix them other than by reverting.

        Covered by existing test platform/mac/fast/AppleScript/001.html, and
        also added fast/dom/nested-script-exceptions.html to demonstrate the wider
        consequences of the original change.
        
        * bindings/js/ScriptController.cpp:
        (WebCore::ScriptController::ScriptController):
        (WebCore::ScriptController::evaluateInWorld):
        * bindings/js/ScriptController.h:

2010-05-22  Kwang Yul Seo  <skyul@company100.net>

        Reviewed by Eric Seidel.

        [BREWMP] Add DragData
        https://bugs.webkit.org/show_bug.cgi?id=39469

        As BREW MP does not support dragging, add dummy implementation of DragData.

        * platform/DragData.h:
        * platform/brew/DragDataBrew.cpp: Added.
        (WebCore::DragData::canSmartReplace):
        (WebCore::DragData::containsColor):
        (WebCore::DragData::containsPlainText):
        (WebCore::DragData::asPlainText):
        (WebCore::DragData::asColor):
        (WebCore::DragData::createClipboard):
        (WebCore::DragData::containsCompatibleContent):
        (WebCore::DragData::containsURL):
        (WebCore::DragData::asURL):
        (WebCore::DragData::asFragment):
        (WebCore::DragData::asFilenames):
        (WebCore::DragData::containsFiles):

2010-05-22  Kwang Yul Seo  <skyul@company100.net>

        Reviewed by Eric Seidel.

        [BREWMP] Add dummy Icon
        https://bugs.webkit.org/show_bug.cgi?id=39468

        Add dummy implementation of Icon.

        * platform/graphics/brew/IconBrew.cpp: Added.
        (WebCore::Icon::~Icon):
        (WebCore::Icon::createIconForFiles):
        (WebCore::Icon::paint):

2010-05-22  Justin Schuh  <jschuh@chromium.org>

        Reviewed by Nate Chapin.

        Remove and simplify custom bindings for Node
        https://bugs.webkit.org/show_bug.cgi?id=39467

        Custom bindings for nodeValue and textContent are no longer needed, 
        and child manipulators are simplified because origin checks were moved 
        out of the bindings by: http://trac.webkit.org/changeset/59866

        * bindings/js/JSNodeCustom.cpp:
        (WebCore::JSNode::insertBefore):
        (WebCore::JSNode::replaceChild):
        (WebCore::JSNode::removeChild):
        (WebCore::JSNode::appendChild):
        * bindings/v8/custom/V8NodeCustom.cpp:
        (WebCore::V8Node::insertBeforeCallback):
        (WebCore::V8Node::replaceChildCallback):
        (WebCore::V8Node::removeChildCallback):
        (WebCore::V8Node::appendChildCallback):
        * dom/Node.idl:

2010-05-22  Justin Schuh  <jschuh@chromium.org>

        Reviewed by Nate Chapin.

        Remove custom bindings for NamedNodeMap.setNamedItem and .setNamedItemNS
        https://bugs.webkit.org/show_bug.cgi?id=39462

        Custom bindings are no longer needed because origin checks were moved
        out of the bindings by: http://trac.webkit.org/changeset/59866

        Behavior isn't changed and is covered by existing tests.

        * bindings/js/JSNamedNodeMapCustom.cpp:
        * bindings/v8/custom/V8NamedNodeMapCustom.cpp:
        * dom/NamedNodeMap.idl:

2010-05-22  Daniel Bates  <dbates@rim.com>

        No review, rolling out 60017.
        http://trac.webkit.org/changeset/60017
        https://bugs.webkit.org/show_bug.cgi?id=39339

        Rolling out since this broke the build on the Windows and Qt bots.
        Need to look into this some more.

        * GNUmakefile.am:
        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/ScriptControllerBase.h: Removed.
        * bindings/js/ScriptController.h:
        (WebCore::):
        * bindings/v8/ScriptController.h:
        (WebCore::):

2010-05-22  Daniel Bates  <dbates@rim.com>

        Reviewed by Darin Adler.

        Move enum ReasonForCallingCanExecuteScripts to header ScriptControllerBase.h
        https://bugs.webkit.org/show_bug.cgi?id=39339

        Moved the enum ReasonForCallingCanExecuteScripts and ShouldAllowXSS, which
        was defined in both the JSC and V8 ScriptController.h file, into a shared
        file called ScriptControllerBase.h.

        No functionality was changed, so no new tests.

        * GNUmakefile.am: Added file bindings/ScriptControllerBase.h.
        * WebCore.gypi: Ditto.
        * WebCore.pro: Ditto.
        * WebCore.vcproj/WebCore.vcproj: Ditto.
        * WebCore.xcodeproj/project.pbxproj: Ditto.
        * bindings/ScriptControllerBase.h: Added.
        (WebCore::):
        * bindings/js/ScriptController.h: #include ScriptControllerBase.h
        * bindings/v8/ScriptController.h: Ditto.

2010-05-22  Yong Li  <yoli@rim.com>

        Reviewed by Darin Adler.

        Fix a crash when XHTMLMP is enabled. The frame pointer in Document
        ctor can be null.
        https://bugs.webkit.org/show_bug.cgi?id=39448

        No new tests because it is obvious and it must be reproduced with
        XHTMLMP enabled.

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

2010-05-22  Daniel Bates  <dbates@rim.com>

        Reviewed by Adam Barth.

        REGRESSION (r56295): Can't create a new wave on Google Wave
        https://bugs.webkit.org/show_bug.cgi?id=39249

        Instead of just using the source code portion of a JavaScript URL to
        detect an XSS attack, we now include the JavaScript URL schema. This
        reduces the chance of a false positive by providing additional context.

        Test: http/tests/security/xssAuditor/javascript-link-safe.html

        * WebCore.base.exp: Updated exported symbols as necessary.
        * bindings/ScriptControllerBase.cpp:
        (WebCore::ScriptController::executeScript): Added parameter shouldAllowXSS.
        (WebCore::ScriptController::executeIfJavaScriptURL): Ditto.
        * bindings/js/ScriptController.cpp:
        (WebCore::ScriptController::evaluateInWorld): Ditto.
        (WebCore::ScriptController::evaluate): Ditto.
        (WebCore::ScriptController::executeScriptInWorld): Ditto.
        * bindings/js/ScriptController.h: Added enum ShouldAllowXSS.
        (WebCore::):
        * bindings/v8/ScriptController.cpp:
        (WebCore::ScriptController::evaluate): Added parameter shouldAllowXSS.
        * bindings/v8/ScriptController.h: Added enum ShouldAllowXSS.
        (WebCore::):

2010-05-22  Jeremy Moskovich  <jeremy@chromium.org>

        Reviewed by Eric Seidel.

        Document RenderObject::m_hasOverflowClip.

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

        No new functionality, so no new tests.

        * rendering/RenderObject.h:

2010-05-22  Kwang Yul Seo  <skyul@company100.net>

        Reviewed by Eric Seidel.

        [BREWMP] Add DragController
        https://bugs.webkit.org/show_bug.cgi?id=39400

        Add DragController for BREW MP.

        * page/brew/DragControllerBrew.cpp: Added.
        (WebCore::DragController::isCopyKeyDown):
        (WebCore::DragController::dragOperation):
        (WebCore::DragController::maxDragImageSize):
        (WebCore::DragController::cleanupAfterSystemDrag):

2010-05-22  Leandro Pereira  <leandro@profusion.mobi>

        Reviewed by Eric Seidel.

        [EFL] Build fix (update source code lists).
        http://webkit.org/b/39235

        * CMakeLists.txt:

2010-05-22  Martin Robinson  <mrobinson@igalia.com>

        Reviewed by Xan Lopez.

        [GTK] webkit_web_view_drag_end should call EventHandler::dragSourceEndedAt
        https://bugs.webkit.org/show_bug.cgi?id=39465

        Added a helper function for converting a GDK action bitmask into a DragOperation bitmask.

        No new tests as behavior has not changed.

        * platform/gtk/ClipboardUtilitiesGtk.cpp:
        (WebCore::gdkDragActionToDragOperation): Added.
        * platform/gtk/ClipboardUtilitiesGtk.h:

2010-05-22  Patrick Gansterer  <paroga@paroga.com>

        Reviewed by Eric Seidel.

        [Qt] Cleanup SharedBuffer::createWithContentsOfFile
        https://bugs.webkit.org/show_bug.cgi?id=38917

        * platform/qt/SharedBufferQt.cpp:
        (WebCore::SharedBuffer::createWithContentsOfFile):

2010-05-22  Martin Robinson  <mrobinson@igalia.com>

        Reviewed by Xan Lopez.

        [GTK] WebKit/gtk/WebCoreSupport/DragClientGtk::startDrag should use the Clipboard::sourceOperation
        https://bugs.webkit.org/show_bug.cgi?id=39459

        Add ClipboardUtilitiesGtk, a container for GTK+/WebCore clipboard utility functions.
        Initially add a function which converts a WebCore::DragOperation to a bitmask of
        GdkDragActions.

        No new tests, because behavior has not changed.

        * GNUmakefile.am:
        * platform/gtk/ClipboardUtilitiesGtk.cpp: Added.
        (WebCore::dragOperationToGdkDragActions): Added.
        * platform/gtk/ClipboardUtilitiesGtk.h: Added.

2010-05-21  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        Parse attributes with HTML5 lexer
        https://bugs.webkit.org/show_bug.cgi?id=39520

        This patch lets the HTML5 lexer parse attributes, as in
        <div attr="foo"></div>.  This patch is on the critical path to running
        the html5lib tests.

        * html/HTML5Lexer.cpp:
        (WebCore::HTML5Lexer::nextToken):
        * html/HTML5Lexer.h:
        * html/HTML5Token.h:
        (WebCore::HTML5Token::beginStartTag):
        (WebCore::HTML5Token::beginEndTag):
        (WebCore::HTML5Token::addNewAttribute):
        (WebCore::HTML5Token::appendToAttributeName):
        (WebCore::HTML5Token::appendToAttributeValue):
        (WebCore::HTML5Token::attributes):
        * html/HTML5Tokenizer.cpp:
        (WebCore::convertToOldStyle):

2010-05-21  Mark Rowe  <mrowe@apple.com>

        60,000!

        * ChangeLog: Point out revision 60,000.

2010-05-21  David Hyatt  <hyatt@apple.com>

        Reviewed by Dan Bernstein.

        Preparation for support of column-span, which will be implemented using continuations.  When a block splits an inline, a
        continuation chain is created of the form inline -> anonymous block -> inline.  The middle block is always anonymous.  When a column-span
        splits the blocks in a multi-column block, it will create a similar chain: block -> anonymous block -> block. Enclosing split elements
        directly connect to their continuations, so their chains will look like inline -> inline or block -> block.
        
        This patch changes the member variable in RenderBlock, m_inlineContinuation, to simply be m_continuation and loosens up the type on it
        to RenderBoxModelObject.  This reflects the fact that the continuation of the block can now be another block and isn't always simply an inline.
        
        Some renames have been done for cleanup:
            isInlineContinuation -> isInlineElementContinuation to emphasize that this is a split non-anonymous element.
            inlineContinuation -> inlineElementContinuation, again to emphasize that the inline is not anonymous.
            
        Some new methods have been added:
            isBlockElementContinuation - just like isInlineElementContinuation but for split block elements.
            blockElementContinuation - just like inlineElementContinuation but for split block elements.
            virtualContinuation - A way to just walk an entire continuation chain of mixed types (blocks and inlines) using their common base class.
            isAnonymousBlockContinuation - A method for asking if a RenderBlock is an anonymous block in the continuation chain (the guy in the middle).
            
        Code that was specific to the anonymous blocks in a continuation chain has been patched to ask isAnonymousBlockContinuation, so that it won't
        incorrectly apply to non-anonymous blocks in the future.  Where possible, code that really didn't care about being an inline vs. a block has
        been broadened so that it will work with block continuations as well.

        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::lastChildConsideringContinuation):
        (WebCore::startOfContinuations):
        (WebCore::endOfContinuations):
        (WebCore::childBeforeConsideringContinuations):
        (WebCore::firstChildIsInlineContinuation):
        (WebCore::AccessibilityRenderObject::nextSibling):
        (WebCore::AccessibilityRenderObject::anchorElement):
        * rendering/InlineFlowBox.cpp:
        (WebCore::InlineFlowBox::determineSpacingForFlowBoxes):
        (WebCore::InlineFlowBox::paint):
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::RenderBlock):
        (WebCore::RenderBlock::destroy):
        (WebCore::RenderBlock::removeLeftoverAnonymousBlock):
        (WebCore::RenderBlock::removeChild):
        (WebCore::RenderBlock::paintObject):
        (WebCore::RenderBlock::inlineElementContinuation):
        (WebCore::RenderBlock::blockElementContinuation):
        (WebCore::RenderBlock::addContinuationWithOutline):
        (WebCore::RenderBlock::absoluteRects):
        (WebCore::RenderBlock::absoluteQuads):
        (WebCore::RenderBlock::rectWithOutlineForRepaint):
        (WebCore::RenderBlock::hoverAncestor):
        (WebCore::RenderBlock::updateDragState):
        (WebCore::RenderBlock::outlineStyleForRepaint):
        (WebCore::RenderBlock::updateHitTestResult):
        (WebCore::RenderBlock::addFocusRingRects):
        * rendering/RenderBlock.h:
        (WebCore::RenderBlock::continuation):
        (WebCore::RenderBlock::setContinuation):
        (WebCore::RenderBlock::virtualContinuation):
        (WebCore::RenderBlock::isAnonymousBlockContinuation):
        * rendering/RenderInline.cpp:
        (WebCore::RenderInline::inlineElementContinuation):
        (WebCore::RenderInline::styleDidChange):
        (WebCore::nextContinuation):
        (WebCore::RenderInline::splitInlines):
        (WebCore::RenderInline::positionForPoint):
        (WebCore::RenderInline::updateHitTestResult):
        * rendering/RenderInline.h:
        (WebCore::RenderInline::setContinuation):
        (WebCore::RenderInline::virtualContinuation):
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::getTextDecorationColors):
        * rendering/RenderObject.h:
        (WebCore::RenderObject::isElementContinuation):
        (WebCore::RenderObject::isInlineElementContinuation):
        (WebCore::RenderObject::isBlockElementContinuation):
        (WebCore::RenderObject::virtualContinuation):
        * rendering/RenderObjectChildList.cpp:
        (WebCore::RenderObjectChildList::updateBeforeAfterContent):
        * rendering/RenderRubyBase.cpp:
        (WebCore::RenderRubyBase::moveBlockChildren):

2010-05-21  Mark Rowe  <mrowe@apple.com>

        Reviewed by Oliver Hunt.

        Teach WebKit2 to build in the Production configuration.

        * Configurations/WebCore.xcconfig: Pass -allowable_client to the linker in all configurations.

2010-05-21  Chris Marrin  <cmarrin@apple.com>

        Reviewed by Simon Fraser.

        Implement tiled compositing layers on Windows
        https://bugs.webkit.org/show_bug.cgi?id=39461
        
        This adds a tiling implementation similar (from a GraphicsLayer standpoint)
        to the one for Mac. But where Mac uses the existing CATiledLayer, I've had
        to implement one. If a layer is greater then 2k x 2k, I split it into an
        array of 512 x 512 tiles. These tiles are positioned in the correct place 
        for the TiledLayer's content. When setNeedsDisplay is called on the TiledLayer
        the tiles' setNeedDisplay methods are called. Each tile clips and positions the
        CGContext appropriately and then renders the layer.
        
        I also got rid of all frame()/setFrame() API to reduce the number of calls to
        override for tiling.
        
        Much optimization is possible. Most significantly right now all tiles are
        rendered whether visible or not. We need to only render tiles that are 
        currently visible.

        Tests: compositing/huge-layer-add-remove-child.html
               compositing/huge-layer-resize.html
               compositing/huge-layer-with-layer-children-resize.html
               compositing/huge-layer-with-layer-children.html
               compositing/huge-layer.html

        * WebCore.vcproj/WebCore.vcproj:
        * platform/graphics/win/GraphicsLayerCACF.cpp: Added tiling code similar to GraphicsLayerCA
        (WebCore::GraphicsLayerCACF::requiresTiledLayer):
        (WebCore::GraphicsLayerCACF::swapFromOrToTiledLayer):
        (WebCore::GraphicsLayerCACF::updateLayerSize):
        (WebCore::GraphicsLayerCACF::updateLayerDrawsContent):
        * platform/graphics/win/GraphicsLayerCACF.h:
        * platform/graphics/win/WKCACFLayer.cpp: Made some methods virtual so WebTiledLayer can override.
                                                 Also added sublayer setting and manipulation methods needed for tiling
        (WebCore::WKCACFLayer::addSublayer):
        (WebCore::WKCACFLayer::internalInsertSublayer):
        (WebCore::WKCACFLayer::insertSublayerAboveLayer):
        (WebCore::WKCACFLayer::insertSublayerBelowLayer):
        (WebCore::WKCACFLayer::replaceSublayer):
        (WebCore::WKCACFLayer::internalSublayerCount):
        (WebCore::WKCACFLayer::adoptSublayers):
        (WebCore::WKCACFLayer::internalSublayerAtIndex):
        (WebCore::WKCACFLayer::internalIndexOfSublayer):
        (WebCore::WKCACFLayer::internalRemoveAllSublayers):
        (WebCore::WKCACFLayer::internalSetSublayers):
        (WebCore::WKCACFLayer::internalSetNeedsDisplay):
        (WebCore::WKCACFLayer::printLayer):
        * platform/graphics/win/WKCACFLayer.h:
        (WebCore::WKCACFLayer::setNeedsDisplay):
        (WebCore::WKCACFLayer::removeAllSublayers):
        (WebCore::WKCACFLayer::setSublayers):
        (WebCore::WKCACFLayer::insertSublayer):
        (WebCore::WKCACFLayer::sublayerCount):
        * platform/graphics/win/WKCACFLayerRenderer.cpp: Fix a crash exposed when tiling code is active
        (WebCore::WKCACFLayerRenderer::createRenderer):
        (WebCore::WKCACFLayerRenderer::destroyRenderer):
        (WebCore::WKCACFLayerRenderer::resize):
        * platform/graphics/win/WebLayer.cpp: Added. Split this out from GraphicsLayerCACF so it could be subclassed by WebTiledLayer
        (WebCore::WebLayer::internalSetNeedsDisplay):
        (WebCore::WebLayer::drawInContext):
        * platform/graphics/win/WebLayer.h: Added.
        (WebCore::WebLayer::create):
        (WebCore::WebLayer::WebLayer):
        * platform/graphics/win/WebTiledLayer.cpp: Added. Where all the tile construction and rendering is done
        (WebCore::WebTiledLayer::tileDisplayCallback):
        (WebCore::WebTiledLayer::create):
        (WebCore::WebTiledLayer::WebTiledLayer):
        (WebCore::WebTiledLayer::~WebTiledLayer):
        (WebCore::WebTiledLayer::setBounds):
        (WebCore::WebTiledLayer::internalSetNeedsDisplay):
        (WebCore::WebTiledLayer::internalSublayerCount):
        (WebCore::WebTiledLayer::internalRemoveAllSublayers):
        (WebCore::WebTiledLayer::internalSetSublayers):
        (WebCore::WebTiledLayer::internalInsertSublayer):
        (WebCore::WebTiledLayer::internalSublayerAtIndex):
        (WebCore::WebTiledLayer::internalIndexOfSublayer):
        (WebCore::WebTiledLayer::addTile):
        (WebCore::WebTiledLayer::removeTile):
        (WebCore::WebTiledLayer::tileAtIndex):
        (WebCore::WebTiledLayer::tileCount):
        (WebCore::WebTiledLayer::updateTiles):
        (WebCore::WebTiledLayer::drawTile):
        * platform/graphics/win/WebTiledLayer.h: Added.

2010-05-21  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Darin Adler.

        Fixed a typo in my last commit: Reset m_inEvaluateInWorld to
        wasInEvaluateInWorld, rather than false, to avoid stomping the old value
        when it's true.
        https://bugs.webkit.org/show_bug.cgi?id=39518

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

2010-05-21  David Hyatt  <hyatt@apple.com>

        Reviewed by Dan Bernstein.

        https://bugs.webkit.org/show_bug.cgi?id=39516, back end support for column-span property.

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::):
        (WebCore::CSSComputedStyleDeclaration::getPropertyCSSValue):
        * css/CSSParser.cpp:
        (WebCore::CSSParser::parseValue):
        * css/CSSPropertyNames.in:
        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::applyProperty):
        * rendering/style/RenderStyle.h:
        (WebCore::InheritedFlags::columnSpan):
        (WebCore::InheritedFlags::setColumnSpan):
        (WebCore::InheritedFlags::initialColumnSpan):
        * rendering/style/StyleMultiColData.cpp:
        (WebCore::StyleMultiColData::StyleMultiColData):
        (WebCore::StyleMultiColData::operator==):
        * rendering/style/StyleMultiColData.h:

2010-05-21  Jer Noble  <jer.noble@apple.com>

        Reviewed by Anders Carlsson.

        Disable full-screen video on Windows
        https://bugs.webkit.org/show_bug.cgi?id=39506
        rdar://problem/8012516
        
        Disable full-screen video through MediaPlayerPrivateVisualContext since
        we no longer use GWorlds and QuickTime's built in full-screen support.
        
        Media layout tests updated with new expected results.        
        
        * platform/graphics/win/MediaPlayerPrivateQuickTimeVisualContext.cpp:
        (WebCore::MediaPlayerPrivateQuickTimeVisualContext::supportsFullscreen):

2010-05-21  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Dan Bernstein.

        Avoid creating huge tiled layers with accelerated compositing
        https://bugs.webkit.org/show_bug.cgi?id=39515
        
        Constrain the size of huge composited layers, to avoid bad behavior. We only
        need to do this if we detect that we need a tiled layer, since we'll make tiled
        layers for elements over a certain size that need to draw already.
        
        Constrain the size by attempting to shrink the longer dimension first.

        Test: compositing/geometry/huge-layer.html

        * platform/graphics/mac/GraphicsLayerCA.h:
        * platform/graphics/mac/GraphicsLayerCA.mm:
        (WebCore::GraphicsLayerCA::updateLayerPosition):
        (WebCore::GraphicsLayerCA::updateLayerSize):
        (WebCore::GraphicsLayerCA::constrainedSize):

2010-05-21  David Hyatt  <hyatt@apple.com>

        Reviewed by Dan Bernstein.

        https://bugs.webkit.org/show_bug.cgi?id=39420, :visited not working with background-color.

        Make the RenderStyle color accessors private.  This forces callers to use visitedDependentColor
        instead (or to make the decision to become friends of the RenderStyle class in order to get access
        to the real style information).

        Modified history/self-is-visited.html to also test background colors.

        * WebCore.base.exp:
        * accessibility/AccessibilityTable.cpp:
        (WebCore::AccessibilityTable::isTableExposableThroughAccessibility):
        * accessibility/mac/AccessibilityObjectWrapper.mm:
        (AXAttributeStringSetStyle):
        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::CSSComputedStyleDeclaration::currentColorOrValidColor):
        * css/CSSComputedStyleDeclaration.h:
        * css/SVGCSSStyleSelector.cpp:
        (WebCore::colorFromSVGColorCSSValue):
        * editing/ApplyStyleCommand.cpp:
        (WebCore::ApplyStyleCommand::editingStyleAtPosition):
        (WebCore::prepareEditingStyleToApplyAt):
        (WebCore::removeStylesAddedByNode):
        (WebCore::fontColorChangesComputedStyle):
        (WebCore::ApplyStyleCommand::addInlineStyleIfNeeded):
        * editing/ApplyStyleCommand.h:
        (WebCore::):
        * editing/CompositeEditCommand.cpp:
        (WebCore::CompositeEditCommand::moveParagraphs):
        (WebCore::CompositeEditCommand::breakOutOfEmptyListItem):
        * editing/DeleteButtonController.cpp:
        (WebCore::isDeletableElement):
        * editing/DeleteSelectionCommand.cpp:
        (WebCore::DeleteSelectionCommand::saveTypingStyleState):
        * editing/InsertParagraphSeparatorCommand.cpp:
        (WebCore::InsertParagraphSeparatorCommand::calculateStyleBeforeInsertion):
        * editing/RemoveFormatCommand.cpp:
        (WebCore::RemoveFormatCommand::doApply):
        * editing/ReplaceSelectionCommand.cpp:
        (WebCore::handleStyleSpansBeforeInsertion):
        (WebCore::ReplaceSelectionCommand::handleStyleSpans):
        (WebCore::ReplaceSelectionCommand::doApply):
        * editing/SelectionController.cpp:
        (WebCore::SelectionController::paintCaret):
        * editing/markup.cpp:
        (WebCore::createMarkup):
        * page/animation/AnimationBase.cpp:
        (WebCore::AnimationBase::ensurePropertyMap):
        * page/animation/AnimationBase.h:
        * page/mac/FrameMac.mm:
        (WebCore::Frame::fontAttributesForSelectionStart):
        * rendering/EllipsisBox.cpp:
        (WebCore::EllipsisBox::paint):
        (WebCore::EllipsisBox::paintSelection):
        * rendering/InlineTextBox.cpp:
        (WebCore::InlineTextBox::paint):
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::styleDidChange):
        (WebCore::RenderBox::paintRootBoxDecorations):
        (WebCore::RenderBox::paintBoxDecorationsWithSize):
        * rendering/RenderBoxModelObject.cpp:
        (WebCore::RenderBoxModelObject::paintBoxShadow):
        * rendering/RenderFieldset.cpp:
        (WebCore::RenderFieldset::paintBoxDecorations):
        * rendering/RenderFileUploadControl.cpp:
        (WebCore::RenderFileUploadControl::paintObject):
        * rendering/RenderFrameSet.cpp:
        (WebCore::RenderFrameSet::paintColumnBorder):
        (WebCore::RenderFrameSet::paintRowBorder):
        * rendering/RenderImage.cpp:
        (WebCore::RenderImage::paintReplaced):
        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::rendererBackgroundColor):
        * rendering/RenderLayerBacking.h:
        * rendering/RenderListBox.cpp:
        (WebCore::RenderListBox::paintItemForeground):
        (WebCore::RenderListBox::paintItemBackground):
        * rendering/RenderListMarker.cpp:
        (WebCore::RenderListMarker::paint):
        * rendering/RenderMenuList.cpp:
        (WebCore::RenderMenuList::itemStyle):
        (WebCore::RenderMenuList::itemBackgroundColor):
        (WebCore::RenderMenuList::menuStyle):
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::selectionBackgroundColor):
        (WebCore::RenderObject::selectionForegroundColor):
        * rendering/RenderSVGResource.cpp:
        (WebCore::RenderSVGResource::adjustColorForPseudoRules):
        (WebCore::RenderSVGResource::fillPaintingResource):
        (WebCore::RenderSVGResource::strokePaintingResource):
        * rendering/RenderSVGResource.h:
        * rendering/RenderTable.cpp:
        (WebCore::RenderTable::paintBoxDecorations):
        * rendering/RenderTable.h:
        (WebCore::RenderTable::bgColor):
        * rendering/RenderTableCell.cpp:
        (WebCore::RenderTableCell::paintBackgroundsBehindCell):
        * rendering/RenderTextControl.cpp:
        (WebCore::RenderTextControl::adjustInnerTextStyle):
        * rendering/RenderTextControlSingleLine.cpp:
        (WebCore::RenderTextControlSingleLine::menuStyle):
        * rendering/RenderTheme.cpp:
        (WebCore::RenderTheme::isControlStyled):
        * rendering/RenderThemeMac.mm:
        (WebCore::RenderThemeMac::paintMenuListButton):
        * rendering/RenderTreeAsText.cpp:
        (WebCore::RenderTreeAsText::writeRenderObject):
        (WebCore::write):
        * rendering/RenderTreeAsText.h:
        * rendering/SVGInlineTextBox.cpp:
        (WebCore::SVGInlineTextBox::paintSelection):
        * rendering/SVGRenderTreeAsText.cpp:
        (WebCore::writeRenderSVGTextBox):
        * rendering/style/RenderStyle.cpp:
        (WebCore::RenderStyle::colorIncludingFallback):
        (WebCore::RenderStyle::visitedDependentColor):
        * rendering/style/RenderStyle.h:
        (WebCore::):
        (WebCore::InheritedFlags::hasBackground):
        (WebCore::InheritedFlags::borderLeftStyle):
        (WebCore::InheritedFlags::borderRightStyle):
        (WebCore::InheritedFlags::borderTopStyle):
        (WebCore::InheritedFlags::borderBottomStyle):
        (WebCore::InheritedFlags::textShadow):
        (WebCore::InheritedFlags::textStrokeWidth):
        (WebCore::InheritedFlags::hasNormalColumnGap):
        (WebCore::InheritedFlags::borderLeftColor):
        (WebCore::InheritedFlags::borderRightColor):
        (WebCore::InheritedFlags::borderTopColor):
        (WebCore::InheritedFlags::borderBottomColor):
        (WebCore::InheritedFlags::backgroundColor):
        (WebCore::InheritedFlags::color):
        (WebCore::InheritedFlags::columnRuleColor):
        (WebCore::InheritedFlags::outlineColor):
        (WebCore::InheritedFlags::textFillColor):
        (WebCore::InheritedFlags::textStrokeColor):
        * svg/SVGAnimationElement.cpp:
        (WebCore::adjustForCurrentColor):

2010-05-21  Beth Dakin  <bdakin@apple.com>

        Reviewed by Darin Adler.

        Fix for <rdar://problem/8009118> Crash in WebCore::toAlphabetic() 
        while running MangleMe
        -and corresponding-
        https://bugs.webkit.org/show_bug.cgi?id=39508

        The math was slightly off here, and we wound up trying to access an 
        array at index -1 in some cases. We need to decrement numberShadow 
        rather than subtracting one from the result of the modulo 
        operation.

        * rendering/RenderListMarker.cpp:
        (WebCore::toAlphabeticOrNumeric):

2010-05-21  Oliver Hunt  <oliver@apple.com>

        Qt buildfix #2

        * bridge/qt/qt_runtime.cpp:
        (JSC::Bindings::convertQVariantToValue):
        (JSC::Bindings::QtRuntimeMethod::QtRuntimeMethod):

2010-05-21  Oliver Hunt  <oliver@apple.com>

        Qt buildfix #1

        * bridge/qt/qt_instance.cpp:
        (JSC::Bindings::QtRuntimeObject::QtRuntimeObject):
        (JSC::Bindings::QtInstance::newRuntimeObject):
        (JSC::Bindings::QtInstance::getMethod):
        * bridge/qt/qt_pixmapruntime.cpp:
        (JSC::Bindings::QtPixmapRuntimeObject::QtPixmapRuntimeObject):
        (JSC::Bindings::QtPixmapInstance::getMethod):
        (JSC::Bindings::QtPixmapInstance::createRuntimeObject):

2010-05-21  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Oliver Hunt.

        Fixed failure seen on buildbot (due to flaky test).
        
        Don't report an exception in a nested script evaluation -- just pass the
        exception on to our caller. Our caller can decide to report the exception,
        if it fully propagates -- but we don't want to report an exception that's
        going to get caught.

        * bindings/js/ScriptController.cpp:
        (WebCore::ScriptController::ScriptController):
        (WebCore::ScriptController::evaluateInWorld):
        * bindings/js/ScriptController.h:

2010-05-21  Oliver Hunt  <oliver@apple.com>

        Reviewed by Geoffrey Garen.

        All callable objects should have a global object reference
        https://bugs.webkit.org/show_bug.cgi?id=39495

        Update the bindings generator to give prototype objects a
        global object.  Update all the manually written JSObject
        subclasses to pass a global object.

        * ForwardingHeaders/runtime/JSObjectWithGlobalObject.h: Added.
        * WebCore.PluginHostProcess.exp:
        * bindings/js/JSDOMBinding.cpp:
        (WebCore::objectToStringFunctionGetter):
        * bindings/js/JSDOMWindowCustom.cpp:
        (WebCore::nonCachingStaticFunctionGetter):
        * bindings/js/JSDOMWindowShell.cpp:
        (WebCore::JSDOMWindowShell::setWindow):
        * bindings/js/JSHistoryCustom.cpp:
        (WebCore::nonCachingStaticBackFunctionGetter):
        (WebCore::nonCachingStaticForwardFunctionGetter):
        (WebCore::nonCachingStaticGoFunctionGetter):
        * bindings/js/JSLocationCustom.cpp:
        (WebCore::nonCachingStaticReplaceFunctionGetter):
        (WebCore::nonCachingStaticReloadFunctionGetter):
        (WebCore::nonCachingStaticAssignFunctionGetter):
        * bindings/js/WorkerScriptController.cpp:
        (WebCore::WorkerScriptController::initScript):
        * bindings/scripts/CodeGeneratorJS.pm:
        * bridge/c/CRuntimeObject.cpp:
        (JSC::Bindings::CRuntimeObject::CRuntimeObject):
        * bridge/c/CRuntimeObject.h:
        * bridge/c/c_instance.cpp:
        (JSC::Bindings::CInstance::newRuntimeObject):
        (JSC::Bindings::CRuntimeMethod::CRuntimeMethod):
        (JSC::Bindings::CInstance::getMethod):
        * bridge/jni/jsc/JavaInstanceJSC.cpp:
        (JavaInstance::newRuntimeObject):
        (JavaRuntimeMethod::JavaRuntimeMethod):
        (JavaInstance::getMethod):
        * bridge/jni/jsc/JavaRuntimeObject.cpp:
        (JSC::Bindings::JavaRuntimeObject::JavaRuntimeObject):
        * bridge/jni/jsc/JavaRuntimeObject.h:
        * bridge/jsc/BridgeJSC.cpp:
        (JSC::Bindings::Instance::newRuntimeObject):
        * bridge/objc/ObjCRuntimeObject.h:
        * bridge/objc/ObjCRuntimeObject.mm:
        (JSC::Bindings::ObjCRuntimeObject::ObjCRuntimeObject):
        * bridge/objc/objc_class.mm:
        (JSC::Bindings::ObjcClass::fallbackObject):
        * bridge/objc/objc_instance.mm:
        (ObjcInstance::newRuntimeObject):
        (ObjCRuntimeMethod::ObjCRuntimeMethod):
        (ObjcInstance::getMethod):
        * bridge/objc/objc_runtime.h:
        * bridge/objc/objc_runtime.mm:
        (JSC::Bindings::ObjcFallbackObjectImp::ObjcFallbackObjectImp):
        * bridge/runtime_method.cpp:
        (JSC::RuntimeMethod::RuntimeMethod):
        * bridge/runtime_method.h:
        * bridge/runtime_object.cpp:
        (JSC::Bindings::RuntimeObject::RuntimeObject):
        * bridge/runtime_object.h:

2010-05-21  Steve Block  <steveblock@google.com>

        Reviewed by Jeremy Orlow.

        Add DeviceOrientation and DeviceOrientationClient
        https://bugs.webkit.org/show_bug.cgi?id=39479

        The page owns a DeviceOrientation object, which has a pointer to a
        DeviceOrientationClient object provided by the embedder. The
        DeviceOrientation object forwards requests to start listening to
        orientation to the client, and when updates are available, fires a
        DeviceOrientationEvent on the window object.

        No new tests are possible at this time as the implementation is
        incomplete. Future patches will add LayoutTestController methods
        to provide mock orientation events to test this.

        * Android.mk:
        * CMakeLists.txt:
        * GNUmakefile.am:
        * WebCore.base.exp:
        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj
        * WebCore.xcodeproj/project.pbxproj:
        * dom/DeviceOrientation.cpp: Added.
        (WebCore::DeviceOrientation::DeviceOrientation):
        (WebCore::DeviceOrientation::onDeviceOrientationChange):
        * dom/DeviceOrientation.h: Added.
        * dom/DeviceOrientationClient.h: Added.
        (WebCore::DeviceOrientationClient::~DeviceOrientationClient):
        * page/Page.cpp:
        (WebCore::Page::Page):
        * page/Page.h:
        (WebCore::Page::deviceOrientation):
        * svg/graphics/SVGImage.cpp:
        (WebCore::SVGImage::dataChanged):

2010-05-21  Tasuku Suzuki  <tasuku.suzuki@nokia.com>

        Reviewed by Simon Hausmann.

        [Qt] Fix compilation with QT_NO_GRAPHICSEFFECT
        https://bugs.webkit.org/show_bug.cgi?id=38324

        * platform/graphics/qt/GraphicsLayerQt.cpp:
        (WebCore::GraphicsLayerQtImpl::flushChanges):

2010-05-21  Jedrzej Nowacki  <jedrzej.nowacki@nokia.com>

        Reviewed by Darin Fisher.

        Fix the HistoryController::pushState.

        It should be possible to call the pushState method from
        the first page in a window.

        history.pushState doesn't work for the first page in a window.
        https://bugs.webkit.org/show_bug.cgi?id=39418

        * loader/HistoryController.cpp:
        (WebCore::HistoryController::pushState):

2010-05-21  Victoria Kirst  <vrk@google.com>

        Reviewed by David Levin.

        [chromium] Fix slider status when buffering
        https://bugs.webkit.org/show_bug.cgi?id=39370
        Adjusts the buffering bar to be aligned with the slider thumb.

        No new tests. (Covered by existing layout tests.)

        * rendering/RenderMediaControlsChromium.cpp:
        (WebCore::paintMediaSlider):
        Added logic to align the buffering bar with the thumb. Half of the
        thumb image is transparent, so the buffer bar is adjusted to fill in
        this gap.

2010-05-21  Jesus Sanchez-Palencia  <jesus@webkit.org>

        Reviewed by Eric Seidel.

        Extra processesArguments() calls in Document::processViewport
        https://bugs.webkit.org/show_bug.cgi?id=39358

        The viewport arguments are only needed when there is a frame->page(),
        therefore we don't need to always call processArguments().

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

2010-05-17  Philippe Normand  <pnormand@igalia.com>

        Reviewed by Eric Carlson.

        [GStreamer] video painting support on mac port
        https://bugs.webkit.org/show_bug.cgi?id=39206

        ImageGStreamer support for mac port. A CG Image is created using
        the GstBuffer data. It can then be painted by the gstreamer player.

        * platform/graphics/gstreamer/ImageGStreamer.h:
        * platform/graphics/gstreamer/ImageGStreamerCG.mm: Added.
        (ImageGStreamer::createImage):
        (ImageGStreamer::ImageGStreamer):
        (ImageGStreamer::~ImageGStreamer):

2010-05-21  Robin Cao  <robin.cao@torchmobile.com.cn>

        Reviewed by Eric Seidel.

        animateTransform does not work on gradientTransform
        https://bugs.webkit.org/show_bug.cgi?id=38115

        Tests: svg/animations/animate-gradient-transform.html

        * svg/SVGAnimateTransformElement.cpp:
        (WebCore::SVGAnimateTransformElement::hasValidTarget): Check if the target element is gradient.
        (WebCore::transformListFor): Ditto.
        (WebCore::SVGAnimateTransformElement::resetToBaseValue): Ditto.
        (WebCore::SVGAnimateTransformElement::applyResultsToTarget): Ditto.

2010-05-21  Young Han Lee  <joybro@company100.net>

        Reviewed by Eric Seidel.

        Fix guard around DatabaseSync
        https://bugs.webkit.org/show_bug.cgi?id=38897

        * storage/DatabaseSync.cpp:

2010-05-21  Simon Hausmann  <simon.hausmann@nokia.com>

        [Qt] Prospective Qt/Mac build fix

        My cpp is paranoid and doesn't like #if Q_WS_MAC:
        error: #if with no expression

        * page/qt/EventHandlerQt.cpp:

2010-05-21  Lucas De Marchi  <lucas.demarchi@profusion.mobi>

        Reviewed by Eric Seidel.

        [EFL] Update Localized Strings. Remove markers from strings
        since we are not using them and they are only polluting output.
        https://bugs.webkit.org/show_bug.cgi?id=39371

        No new tests required.

        * platform/efl/LocalizedStringsEfl.cpp:
        (WebCore::contextMenuItemTagOpenLinkInNewWindow):
        (WebCore::contextMenuItemTagDownloadLinkToDisk):
        (WebCore::contextMenuItemTagCopyLinkToClipboard):
        (WebCore::contextMenuItemTagOpenImageInNewWindow):
        (WebCore::contextMenuItemTagDownloadImageToDisk):
        (WebCore::contextMenuItemTagCopyImageToClipboard):
        (WebCore::contextMenuItemTagOpenFrameInNewWindow):
        (WebCore::contextMenuItemTagSelectAll):
        (WebCore::contextMenuItemTagUnicode):
        (WebCore::contextMenuItemTagInputMethods):
        (WebCore::contextMenuItemTagGoBack):
        (WebCore::contextMenuItemTagGoForward):
        (WebCore::contextMenuItemTagReload):
        (WebCore::contextMenuItemTagIgnoreSpelling):
        (WebCore::contextMenuItemTagLearnSpelling):
        (WebCore::contextMenuItemTagSearchWeb):
        (WebCore::contextMenuItemTagLookUpInDictionary):
        (WebCore::contextMenuItemTagOpenLink):
        (WebCore::contextMenuItemTagIgnoreGrammar):
        (WebCore::contextMenuItemTagSpellingMenu):
        (WebCore::contextMenuItemTagCheckSpelling):
        (WebCore::contextMenuItemTagCheckGrammarWithSpelling):
        (WebCore::contextMenuItemTagFontMenu):
        (WebCore::contextMenuItemTagOutline):
        (WebCore::contextMenuItemTagInspectElement):
        (WebCore::searchMenuClearRecentSearchesText):
        (WebCore::missingPluginText): Add missing message.
        (WebCore::multipleFileUploadText):
        (WebCore::crashedPluginText):

2010-05-21  Lucas De Marchi  <lucas.demarchi@profusion.mobi>

        Reviewed by Eric Seidel.

        [EF] Fix support for focus ring.
        https://bugs.webkit.org/show_bug.cgi?id=39387

        No new tests required.

        * html/HTMLAnchorElement.cpp: Add EFL to #ifdef
        (WebCore::HTMLAnchorElement::isMouseFocusable):

2010-05-21  Kwang Yul Seo  <skyul@company100.net>

        Reviewed by Eric Seidel.

        [BREWMP] Add missing localized string symbols.
        https://bugs.webkit.org/show_bug.cgi?id=39394

        Add missingPluginText and crashedPluginText.

        * platform/brew/LocalizedStringsBrew.cpp:
        (WebCore::missingPluginText):
        (WebCore::crashedPluginText):

2010-05-21  Steve Block  <steveblock@google.com>

        Reviewed by Alexey Proskuryakov.

        Calls to CallJNIMethodIDA() in JavaInstance::invokeMethod() are required on Android
        https://bugs.webkit.org/show_bug.cgi?id=39426

        This code path has always been used by Android, but was guarded with
        BUILDING_ON_TIGER in http://trac.webkit.org/changeset/55054, thus
        breaking the Android build.

        No new tests, build fix only.

        * bridge/jni/jsc/JavaInstanceJSC.cpp:
        (JavaInstance::invokeMethod):

2010-05-20  Tony Chang  <tony@chromium.org>

        Reviewed by Kent Tamura.

        escape link text when copying or dragging links on win or chromium
        https://bugs.webkit.org/show_bug.cgi?id=39413

        * editing/markup.cpp:
        (WebCore::urlToMarkup):
        * editing/markup.h:
        * platform/chromium/ClipboardUtilitiesChromium.cpp:
        * platform/chromium/ClipboardUtilitiesChromium.h:
        * platform/win/ClipboardUtilitiesWin.cpp:
        * platform/win/ClipboardUtilitiesWin.h:

2010-05-18  Philippe Normand  <pnormand@igalia.com>

        Reviewed by Eric Carlson.

        [GStreamer] PlatformMedia support
        https://bugs.webkit.org/show_bug.cgi?id=39300

        Basic support for PlatformMedia in the gst player. The
        PlatformMedia object contains a GStreamerGWorld object. That
        object is empty for now. XOverlay features will be added later
        on for easy review sake.

        * GNUmakefile.am:
        * platform/graphics/MediaPlayer.h:
        (WebCore::PlatformMedia::):
        * platform/graphics/gstreamer/GStreamerGWorld.cpp: Added.
        (WebCore::GStreamerGWorld::createGWorld):
        (WebCore::GStreamerGWorld::GStreamerGWorld):
        (WebCore::GStreamerGWorld::~GStreamerGWorld):
        * platform/graphics/gstreamer/GStreamerGWorld.h: Added.
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:
        (WebCore::MediaPlayerPrivateGStreamer::platformMedia):
        (WebCore::MediaPlayerPrivateGStreamer::createGSTPlayBin):
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.h:

2010-05-20  Kwang Yul Seo  <skyul@company100.net>

        Reviewed by Eric Seidel.

        [BREWMP] Add dummy SSLKeyGenerator
        https://bugs.webkit.org/show_bug.cgi?id=39403

        Add dummy implementation of SSLKeyGenerator.

        * platform/brew/SSLKeyGeneratorBrew.cpp: Added.
        (WebCore::WebCore::getSupportedKeySizes):
        (WebCore::WebCore::signedPublicKeyAndChallengeString):

2010-05-20  Mark Rowe  <mrowe@apple.com>

        Rubber-stamped by Dan Bernstein.

        <rdar://problem/7848154> Remove the dependency on Foundation's private __COCOA_FORMAL_PROTOCOLS_2__ define.

        * platform/mac/EmptyProtocolDefinitions.h:

2010-05-20  Kwang Yul Seo  <skyul@company100.net>

        Reviewed by Eric Seidel.

        [BREWMP] Add Editor
        https://bugs.webkit.org/show_bug.cgi?id=39404

        Implement Editor::newGeneralClipboard.

        * editing/brew/EditorBrew.cpp: Added.
        (WebCore::Editor::newGeneralClipboard):

2010-05-20  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Adam Roben.

        Avoid flushing CA layers when a layout is pending
        https://bugs.webkit.org/show_bug.cgi?id=39463
        <rdar://problem/7999463>

        Avoid rendering the compositing layers to the screen if there's a layout pending,
        since the layer tree not in a state that should be presented to the user.
        
        This fixes flashes in some types of content that dynamically add and remove layers.

        Do this by adding a WKCACFLayerRendererClient for WKCACFLayerRenderer, which it can
        call through to ask whether now is a good time to render. If not, it schedules
        another render soon.
        
        * platform/graphics/win/WKCACFLayerRenderer.h:
        (WebCore::WKCACFLayerRendererClient::~WKCACFLayerRendererClient):
        * platform/graphics/win/WKCACFLayerRenderer.cpp:
        (WebCore::WKCACFLayerRenderer::acceleratedCompositingAvailable):
        (WebCore::WKCACFLayerRenderer::create):
        (WebCore::WKCACFLayerRenderer::WKCACFLayerRenderer):
        (WebCore::WKCACFLayerRenderer::render):

2010-05-20  Kwang Yul Seo  <skyul@company100.net>

        Reviewed by Eric Seidel.

        [BREWMP] Don't include CoreFoundation.h when building for BREW MP
        https://bugs.webkit.org/show_bug.cgi?id=39405

        Add !defined(BUILDING_BREWMP__) guard for CoreFoundation.h.

        * WebCorePrefix.h:

2010-05-20  Kwang Yul Seo  <skyul@company100.net>

        Reviewed by Eric Seidel.

        [BREWMP] Add ScrollTheme
        https://bugs.webkit.org/show_bug.cgi?id=39406

        As BREW MP always uses frame flattening, there is no need to render scorllbars.
        Use the default scrollbar theme with thickness 0.

        * platform/brew/ScrollbarThemeBrew.cpp: Added.
        (WebCore::ScrollbarTheme::nativeTheme):
        (WebCore::ScrollbarThemeBrew::~ScrollbarThemeBrew):
        * platform/brew/ScrollbarThemeBrew.h: Added.

2010-05-20  Jon Honeycutt  <jhoneycutt@apple.com>

        REGRESSION(r53637): DivX plug-in fails to start until window is resized
        https://bugs.webkit.org/show_bug.cgi?id=39457
        <rdar://problem/8006102>

        Before r53637, we called Widget::move() (which caused us to call
        NPP_SetWindow) before painting a plug-in. r53637 removed the call to
        Widget::move(), and we end up never calling NPP_SetWindow for plug-ins
        with the "DeferFirstSetWindowCall" quirk, including the DivX plug-in.

        Reviewed by Simon Fraser.

        * manual-tests/divx-plugin-fails-to-draw.html: Added.

        * plugins/PluginView.cpp:
        (WebCore::PluginView::PluginView):
        Initialize new member to false.

        * plugins/PluginView.h:
        Added new member.

        * plugins/win/PluginViewWin.cpp:
        (WebCore::PluginView::paint):
        Call setNPWindowRect() before painting to ensure that NPP_SetWindow gets
        called.
        (WebCore::PluginView::setNPWindowRect):
        Set m_haveCalledSetWindow.

2010-05-20  Fumitoshi Ukai  <ukai@chromium.org>

        Reviewed by Alexey Proskuryakov.

        WebSocket handshake incompatible change in draft-hixie-thewebsocketprotocol-76
        https://bugs.webkit.org/show_bug.cgi?id=35572

        WebSocket opening handshake is changed.  New protocol draft could be found at http://www.whatwg.org/specs/web-socket-protocol/
        It requires https://bugs.webkit.org/show_bug.cgi?id=38034 to pass websocket tests.

        * websockets/WebSocketHandshake.cpp:
        (WebCore::extractResponseCode):
        add lineLength parameter to return length of status line.
        (WebCore::hostName): Added.
        (WebCore::generateSecWebSocketKey): Added.
        (WebCore::generateKey3): Added.
        (WebCore::setChallengeNumber): Added.
        (WebCore::generateChallengeResponseExpected): Added.
        (WebCore::WebSocketHandshake::WebSocketHandshake):
         generate challenge response key and expected data.
        (WebCore::WebSocketHandshake::clientLocation):
         use hostName.
        (WebCore::WebSocketHandshake::clientHandshakeMessage):
         changed for draft 76 spec.
        (WebCore::WebSocketHandshake::clientHandshakeRequest):
        (WebCore::WebSocketHandshake::readServerHandshake):
         changed for draft 76 spec.
         m_mode is managed in this method.
        (WebCore::WebSocketHandshake::readHTTPHeaders):
         change error log messages.
        (WebCore::WebSocketHandshake::processHeaders):
         chagned for draft 76 spec.
        (WebCore::WebSocketHandshake::checkResponseHeaders):
         return boolean whether response header is ok or not and not change m_mode in it.
        * websockets/WebSocketHandshake.h:

2010-05-20  Adam Roben  <aroben@apple.com>

        Stop leaking all CACFContexts

        Fixes <http://webkit.org/b/39466> <rdar://problem/8007141>.

        Reviewed by Simon Fraser.

        * platform/graphics/win/WKCACFContextFlusher.cpp:
        (WebCore::WKCACFContextFlusher::addContext): Only retain the context
        when we first add it to the m_contexts set. Otherwise we'll retain the
        same context multiple times, causing it to leak.

2010-05-20  Young Han Lee  <joybro@company100.net>

        Reviewed by Darin Adler.

        Create filenameFromString for all ports except GTK and EFL.
        https://bugs.webkit.org/show_bug.cgi?id=39348

        * platform/FileSystem.cpp: Added.
        (WebCore::filenameFromString):
        * platform/FileSystem.h:

2010-05-20  Young Han Lee  <joybro@company100.net>

        Reviewed by Darin Adler.

        Port SharedBuffer to POSIX.
        https://bugs.webkit.org/show_bug.cgi?id=39283

        * platform/posix/SharedBufferPOSIX.cpp: Added.
        (WebCore::SharedBuffer::createWithContentsOfFile):

2010-05-20  Zhenyao Mo  <zmo@google.com>

        Reviewed by Dimitri Glazkov.

        Map RGBA4/RGB5_A1 to RGBA and RGB565 to RGB in RenderbufferStorage
        https://bugs.webkit.org/show_bug.cgi?id=39077

        * platform/graphics/mac/GraphicsContext3DMac.cpp:
        (WebCore::GraphicsContext3D::renderbufferStorage): Mapping the enums.

2010-05-20  Dan Bernstein  <mitz@apple.com>

        Reviewed by Dave Hyatt.

        <rdar://problem/8007953> Textarea using custom font appears blank

        Test: fast/css/font-face-in-shadow-DOM.html

        When a remote font is loaded, CSSFontSelector forces a style recalc, which replaces all
        RenderSyles that have FontFallbackLists referencing the placeholder font with fresh
        RenderStyles. However, it does not descend into shadow DOM trees, so those may end up with
        styles that still reference the placeholder font.

        The fix is to add RenderObject::requiresForcedStyleRecalcPropagation() and have it return
        true from renderers that maintain shadow DOM trees or otherwise keep their own RenderStyles.

        * dom/Element.cpp:
        (WebCore::Element::recalcStyle): Check if forced style recalc needs to propagated.
        * rendering/RenderButton.h:
        (WebCore::RenderButton::requiresForcedStyleRecalcPropagation):
        * rendering/RenderDataGrid.h:
        (WebCore::RenderDataGrid::requiresForcedStyleRecalcPropagation):
        * rendering/RenderFileUploadControl.h:
        (WebCore::RenderFileUploadControl::requiresForcedStyleRecalcPropagation):
        * rendering/RenderListItem.h:
        (WebCore::RenderListItem::requiresForcedStyleRecalcPropagation):
        * rendering/RenderMedia.h:
        (WebCore::RenderMedia::requiresForcedStyleRecalcPropagation):
        * rendering/RenderMenuList.h:
        (WebCore::RenderMenuList::RenderMenuList::requiresForcedStyleRecalcPropagation):
        * rendering/RenderObject.h:
        (WebCore::RenderObject::requiresForcedStyleRecalcPropagation):
        * rendering/RenderProgress.h:
        (WebCore::RenderProgress::requiresForcedStyleRecalcPropagation):
        * rendering/RenderSlider.h:
        (WebCore::RenderSlider::requiresForcedStyleRecalcPropagation):
        * rendering/RenderTextControl.h:
        (WebCore::RenderTextControl::requiresForcedStyleRecalcPropagation):

2010-05-20  Jer Noble  <jer.noble@apple.com>

        No review; build fix only.

        When WTF_USE_ACCELERATED_COMPOSITING is turned off, MediaPlayerPrivateQuickTimeVisualContext.cpp
        must include CoreGraphics/CGContext.h.

        * platform/graphics/win/MediaPlayerPrivateQuickTimeVisualContext.cpp:

2010-05-20  Jer Noble  <jer.noble@apple.com>

        Reviewed by Sam Weinig.

        Video elements show no video on Windows machines that do not support accelerated compositing
        https://bugs.webkit.org/show_bug.cgi?id=39446
        rdar://problem/7999794

        Implement the paint() method in MediaPlayerPrivateQuickTimeVisualContext.  The visual context should
        be set up in load() and torn down in the destructor (as opposed to setUpVideoRendering and 
        tearDownVideoRendering, which won't get called in a non-accelerated compositing case).
        
        * platform/graphics/win/MediaPlayerPrivateQuickTimeVisualContext.cpp:
        (WebCore::MediaPlayerPrivateQuickTimeVisualContext::~MediaPlayerPrivateQuickTimeVisualContext):
        (WebCore::MediaPlayerPrivateQuickTimeVisualContext::load):
        (WebCore::MediaPlayerPrivateQuickTimeVisualContext::paint):
        (WebCore::MediaPlayerPrivateQuickTimeVisualContext::visualContextTimerFired):
        (WebCore::MediaPlayerPrivateQuickTimeVisualContext::retrieveCurrentImage):
        (WebCore::MediaPlayerPrivateQuickTimeVisualContext::setUpVideoRendering):
        (WebCore::MediaPlayerPrivateQuickTimeVisualContext::tearDownVideoRendering):

2010-05-20  Abhishek Arya  <inferno@chromium.org>

        Reviewed by Adam Barth.

        Added a method to check if the security origin can access
        password manager.
        https://bugs.webkit.org/show_bug.cgi?id=38916

        * page/SecurityOrigin.h:
        (WebCore::SecurityOrigin::canAccessPasswordManager):

2010-05-20  Darin Adler  <darin@apple.com>

        Reviewed by Eric Seidel.

        Fix warnings seen on the buildbots today
        https://bugs.webkit.org/show_bug.cgi?id=39368

        * loader/icon/IconDatabase.cpp:
        (WebCore::IconDatabase::pruneUnretainedIcons): Use the type "long long" for
        things being printed with "%lli". There is no guaranteed that int64_t is the
        same thing as long long.

        * page/EventHandler.cpp:
        (WebCore::EventHandler::handleMousePressEvent): Added parentheses as suggested
        by warnings in newer versions of GCC.

        * platform/ContextMenu.cpp: Fix #if around the functions to match the #if
        around the call sites to avoid unused function warning.

        * platform/graphics/gtk/ImageGtk.cpp:
        (WebCore::Image::loadPlatformResource): Use NULL to end a variable argument list
        rather than 0. This is a case where the WebKit "use 0 instead of NULL" guideline
        is incorrect and won't work properly.

        * platform/win/SystemTimeWin.cpp:
        (WebCore::userIdleTime): Removed unnecessary initialization of LASTINPUTINFO.

        * platform/win/WebCoreInstanceHandle.h: Added property svn:eol-style.
        Made functions inline instead of static. It's not correct to have functions with
        internal linkage in a header file. Marking them inline makes more sense.

        * plugins/win/PluginMessageThrottlerWin.cpp:
        (WebCore::PluginMessageThrottlerWin::PluginMessageThrottlerWin): Reordered the
        initializers to match the order of the data members from the class definition.

        * plugins/win/PluginViewWin.cpp:
        (WebCore::PluginView::paintIntoTransformedContext): Initialized all the fields
        of WINDOWPOS. I know this goes against the traditions of Windows programming,
        but it's correct and silences the warning. Also removed the unneeded separate
        code path for non-WinCE platforms that translates only the corner of the window
        rectangle; the WinCE version is correct for normal Windows as well. Not sure
        why this wasn't caught when the code was originally checked in.

2010-05-20  Justin Schuh  <jschuh@chromium.org>

        Reviewed by Adam Barth.

        Moving frame.src checks out of the bindings
        https://bugs.webkit.org/show_bug.cgi?id=37815

        Moved JavaScript frame.src checks out of bindings and into
        HTMLFrameElementBase. Added main thread state stack to JavaScriptCore
        so ExecState is available inside core DOM. Updated affected bindings
        (except for GObject, which will need to be updated to avoid origin
        failures inside native code).

        * Android.jscbindings.mk:
        * CMakeLists.txt:
        * GNUmakefile.am:
        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSBindingsAllInOne.cpp:
        * bindings/js/JSCallbackData.cpp:
        (WebCore::JSCallbackData::invokeCallback):
        * bindings/js/JSEventListener.cpp:
        (WebCore::JSEventListener::handleEvent):
        * bindings/js/JSInjectedScriptHostCustom.cpp:
        (WebCore::InjectedScriptHost::createInjectedScript):
        * bindings/js/JSMainThreadExecState.cpp: Added.
        * bindings/js/JSMainThreadExecState.h: Added.
        (WebCore::JSMainThreadExecState::currentState):
        (WebCore::JSMainThreadExecState::call):
        (WebCore::JSMainThreadExecState::evaluate):
        (WebCore::JSMainThreadExecState::JSMainThreadExecState):
        (WebCore::JSMainThreadExecState::~JSMainThreadExecState):
        (WebCore::JSMainThreadNullState::JSMainThreadNullState):
        * bindings/js/ScheduledAction.cpp:
        (WebCore::ScheduledAction::executeFunctionInContext):
        (WebCore::ScheduledAction::execute):
        * bindings/js/ScheduledAction.h:
        * bindings/js/ScriptController.cpp:
        (WebCore::ScriptController::evaluateInWorld):
        (WebCore::ScriptController::canAccessFromCurrentOrigin):
        * bindings/js/ScriptController.h:
        * bindings/js/ScriptFunctionCall.cpp:
        (WebCore::ScriptFunctionCall::call):
        * bindings/objc/ObjCEventListener.mm:
        * bindings/objc/WebScriptObject.mm:
        (-[WebScriptObject callWebScriptMethod:withArguments:]):
        (-[WebScriptObject evaluateWebScript:]):
        * bindings/scripts/CodeGeneratorObjC.pm:
        * bindings/scripts/test/ObjC/DOMTestCallback.mm:
        (-[DOMTestCallback callbackWithClass1Param:]):
        (-[DOMTestCallback callbackWithClass2Param:strArg:]):
        (-[DOMTestCallback callbackWithNonBoolReturnType:]):
        (-[DOMTestCallback customCallback:class6Param:]):
        * bindings/scripts/test/ObjC/DOMTestInterface.mm:
        * bindings/scripts/test/ObjC/DOMTestObj.mm:
        (-[DOMTestObj readOnlyIntAttr]):
        (-[DOMTestObj readOnlyStringAttr]):
        (-[DOMTestObj readOnlyTestObjAttr]):
        (-[DOMTestObj intAttr]):
        (-[DOMTestObj setIntAttr:]):
        (-[DOMTestObj longLongAttr]):
        (-[DOMTestObj setLongLongAttr:]):
        (-[DOMTestObj unsignedLongLongAttr]):
        (-[DOMTestObj setUnsignedLongLongAttr:]):
        (-[DOMTestObj stringAttr]):
        (-[DOMTestObj setStringAttr:]):
        (-[DOMTestObj testObjAttr]):
        (-[DOMTestObj setTestObjAttr:]):
        (-[DOMTestObj attrWithException]):
        (-[DOMTestObj setAttrWithException:]):
        (-[DOMTestObj attrWithSetterException]):
        (-[DOMTestObj setAttrWithSetterException:]):
        (-[DOMTestObj attrWithGetterException]):
        (-[DOMTestObj setAttrWithGetterException:]):
        (-[DOMTestObj customAttr]):
        (-[DOMTestObj setCustomAttr:]):
        (-[DOMTestObj scriptStringAttr]):
        (-[DOMTestObj voidMethod]):
        (-[DOMTestObj voidMethodWithArgs:strArg:objArg:]):
        (-[DOMTestObj intMethod]):
        (-[DOMTestObj intMethodWithArgs:strArg:objArg:]):
        (-[DOMTestObj objMethod]):
        (-[DOMTestObj objMethodWithArgs:strArg:objArg:]):
        (-[DOMTestObj methodThatRequiresAllArgs:objArg:]):
        (-[DOMTestObj methodThatRequiresAllArgsAndThrows:objArg:]):
        (-[DOMTestObj serializedValue:]):
        (-[DOMTestObj methodWithException]):
        (-[DOMTestObj customMethod]):
        (-[DOMTestObj customMethodWithArgs:strArg:objArg:]):
        (-[DOMTestObj customArgsAndException:]):
        (-[DOMTestObj addEventListener:listener:useCapture:]):
        (-[DOMTestObj removeEventListener:listener:useCapture:]):
        (-[DOMTestObj withDynamicFrame]):
        (-[DOMTestObj withDynamicFrameAndArg:]):
        (-[DOMTestObj withDynamicFrameAndOptionalArg:optionalArg:]):
        (-[DOMTestObj withDynamicFrameAndUserGesture:]):
        (-[DOMTestObj withDynamicFrameAndUserGestureASAD:optionalArg:]):
        (-[DOMTestObj withScriptStateVoid]):
        (-[DOMTestObj withScriptStateObj]):
        (-[DOMTestObj withScriptStateVoidException]):
        (-[DOMTestObj withScriptStateObjException]):
        (-[DOMTestObj methodWithOptionalArg:]):
        (-[DOMTestObj methodWithNonOptionalArgAndOptionalArg:opt:]):
        (-[DOMTestObj methodWithNonOptionalArgAndTwoOptionalArgs:opt1:opt2:]):
        * bindings/v8/ScriptController.cpp:
        (WebCore::ScriptController::canAccessFromCurrentOrigin):
        * bindings/v8/ScriptController.h:
        * html/HTMLFrameElementBase.cpp:
        (WebCore::HTMLFrameElementBase::isURLAllowed):

2010-05-20  Adam Roben  <aroben@apple.com>

        Fix an HRGN leak in WKCACFLayerRenderer

        Fixes <http://webkit.org/b/39312> <rdar://problem/7998728> REGRESSION
        (r53686-r55990): Graphics corruption when watching video (affects
        youtube.com)

        Reviewed by Darin Adler.

        * platform/graphics/win/WKCACFLayerRenderer.cpp:
        (WebCore::getDirtyRects): Use an OwnPtr to hold the HRGN we allocate.
        That way we don't have to remember to destroy it (as we were
        forgetting to do) when we bail out of this function early.

2010-05-20  Darin Fisher  <darin@chromium.org>

        Reviewed by Nate Chapin.

        [chromium] Provide a way to catch exceptions thrown while interacting
        with a NPObject via WebBindings methods.
        https://bugs.webkit.org/show_bug.cgi?id=39378

        This change also includes a small bit of cleanup in V8NPObject and
        friends.  I moved code into the WebCore namespace where appropriate.
        
        In _NPN_Invoke, I also moved the call to _NPN_Evaluate outside of the
        context scope.  I did this to avoid having nested ExceptionCatcher
        objects, which is not strictly necessary, but it seemed cleaner.
        _NPN_Evaluate already takes care of creating a context scope.

        * bindings/v8/NPV8Object.cpp:
        (WebCore::v8ObjectToNPObject):
        (WebCore::npCreateV8ScriptObject):
        (_NPN_Invoke):
        (_NPN_InvokeDefault):
        (_NPN_Evaluate):
        (_NPN_EvaluateHelper):
        (_NPN_GetProperty):
        (_NPN_SetProperty):
        (_NPN_RemoveProperty):
        (_NPN_HasProperty):
        (_NPN_HasMethod):
        (_NPN_SetException):
        (_NPN_Enumerate):
        (_NPN_Construct):
        * bindings/v8/NPV8Object.h:
        * bindings/v8/V8NPObject.cpp:
        * bindings/v8/V8NPObject.h:
        * bindings/v8/V8NPUtils.cpp:
        (WebCore::convertV8ObjectToNPVariant):
        (WebCore::pushExceptionHandler):
        (WebCore::popExceptionHandler):
        (WebCore::ExceptionCatcher::ExceptionCatcher):
        (WebCore::ExceptionCatcher::~ExceptionCatcher):
        * bindings/v8/V8NPUtils.h:
        * bindings/v8/npruntime.cpp:

2010-05-20  Marcus Bulach  <bulach@chromium.org>

        Reviewed by Steve Block.

        Ensure timers are stopped on Geolocation::disconnectFrame()
        https://bugs.webkit.org/show_bug.cgi?id=39388

        fast/dom/Geolocation/notimer-after-unload.html, plus it should be possible to re-enable Gtk LayoutTests.

        * page/Geolocation.cpp:
        (WebCore::Geolocation::disconnectFrame):

2010-05-20  James Robinson  <jamesr@chromium.org>

        Reviewed by Eric Seidel.

        Ensures styles are up-to-date before determining selection
        https://bugs.webkit.org/show_bug.cgi?id=39389

        This adds a call to document::updateStyleIfNeeded() to
        Frame::notifyRendererOfSelectionChange(). Without this call, if there
        is a pending style update that will detach part of the DOM and the
        the selection is within that part of the DOM when
        notifyRendererOfSeletionChange is called, the rootEditableElement
        algorithm ends up walking through detached parts of the render tree.

        Test: editing/selection/focus-and-display-none.html

        * page/Frame.cpp:
        (WebCore::Frame::notifyRendererOfSelectionChange):

2010-05-20  Adam Roben  <aroben@apple.com>

        Remove code that fetched, but did nothing useful with, a CFDictionary
        in MediaPlayerPrivateQuickTimeVisualContext

        I also removed the code in QTPixelBuffer that vended the dictionary.

        Fixes <http://webkit.org/b/39435> <rdar://problem/8009278>
        QTPixelBuffer passes CFDictionaries across the DLL boundary, which can
        lead to crashes

        Reviewed by Darin Adler.

        * platform/graphics/win/MediaPlayerPrivateQuickTimeVisualContext.cpp:
        (WebCore::MediaPlayerPrivateQuickTimeVisualContext::retrieveCurrentImage):
        Deleted code that fetched the attachments dictionary, which was never
        used other than to pass it to CFRetain/CFRelease, which could be
        enough to cause a crash due to incompatible copies of
        CoreFoundation.dll.

        * platform/graphics/win/QTMovieVisualContext.h: Added a now-needed
        forward declaration.

        * platform/graphics/win/QTPixelBuffer.cpp:
        * platform/graphics/win/QTPixelBuffer.h:
        Removed the now-unused attachments function.

2010-05-20  Adam Roben  <aroben@apple.com>

        Fix a CFData leak in MediaPlayerPrivateQuickTimeVisualContext

        Fixes <http://webkit.org/b/39432> <rdar://problem/8008992>

        Reviewed by Ada Chan

        * platform/graphics/win/MediaPlayerPrivateQuickTimeVisualContext.cpp:
        (WebCore::QTCFDictionaryCreateWithDataCallback): Use a RetainPtr to
        hold the CFData we allocate so it will get released when this function
        is exited. Also pass kCFAllocatorNull as the bytes deallocator to
        CFDataCreateWithBytesNoCopy so that CF doesn't try to deallocate the
        bytes we pass to it.

2010-05-20  Jian Li  <jianli@chromium.org>

        Reviewed by David Levin.

        Rename GenericTask* to CrossThreadTask* in CrossThreadTask.h.
        https://bugs.webkit.org/show_bug.cgi?id=39437

        * dom/CrossThreadTask.h:
        (WebCore::):
        (WebCore::CrossThreadTask1::create):
        (WebCore::CrossThreadTask1::CrossThreadTask1):
        (WebCore::CrossThreadTask2::create):
        (WebCore::CrossThreadTask2::CrossThreadTask2):
        (WebCore::CrossThreadTask3::create):
        (WebCore::CrossThreadTask3::CrossThreadTask3):
        (WebCore::CrossThreadTask4::create):
        (WebCore::CrossThreadTask4::CrossThreadTask4):
        (WebCore::CrossThreadTask5::create):
        (WebCore::CrossThreadTask5::CrossThreadTask5):
        (WebCore::CrossThreadTask6::create):
        (WebCore::CrossThreadTask6::CrossThreadTask6):
        (WebCore::CrossThreadTask7::create):
        (WebCore::CrossThreadTask7::CrossThreadTask7):
        (WebCore::CrossThreadTask8::create):
        (WebCore::CrossThreadTask8::CrossThreadTask8):
        (WebCore::createCallbackTask):

2010-05-20  Jian Li  <jianli@chromium.org>

        Reviewed by David Levin.

        Rename GenericWorkerTask.h to CrossThreadTask.h and move it to dom directory.
        https://bugs.webkit.org/show_bug.cgi?id=39135

        * GNUmakefile.am:
        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * dom/CrossThreadTask.h: Renamed from WebCore/workers/GenericWorkerTask.h.
        * html/FileStreamProxy.cpp:
        * loader/WorkerThreadableLoader.cpp:
        * websockets/WorkerThreadableWebSocketChannel.cpp:
        * workers/DefaultSharedWorkerRepository.cpp:
        * workers/WorkerMessagingProxy.cpp:
        * workers/WorkerScriptLoader.cpp:

2010-05-20  Adele Peterson  <adele@apple.com>

        Reviewed by Mark Rowe.

        Remove the Safari welcome page site-specific quirk, since its no longer needed.

        * css/CSSStyleSheet.cpp: (WebCore::CSSStyleSheet::cssRules):

2010-05-20  Steve Block  <steveblock@google.com>

        Reviewed by Jeremy Orlow.

        Provide bindings for DeviceOrientation
        https://bugs.webkit.org/show_bug.cgi?id=39210

        Tests: fast/dom/DeviceOrientation/window-property.html
               fast/dom/Window/window-properties-on-device-orientation.html

        Adds bindings for DeviceOrientation as defined in
        http://dev.w3.org/geo/api/spec-source-orientation.html
        This is guarded by ENABLE(DEVICE_ORIENTATION) which is currently disabled on
        all platforms but Android.

        * Android.derived.jscbindings.mk:
        * Android.derived.v8bindings.mk:
        * Android.mk:
        * Configurations/FeatureDefines.xcconfig:
        * DerivedSources.cpp:
        * DerivedSources.make:
        * GNUmakefile.am:
        * WebCore.gypi:
        * WebCore.pri:
        * WebCore.pro:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSEventCustom.cpp:
        (WebCore::toJS):
        * bindings/v8/custom/V8EventCustom.cpp:
        (WebCore::toV8):
        * dom/DeviceOrientationEvent.cpp: Added.
        (WebCore::DeviceOrientationEvent::DeviceOrientationEvent):
        (WebCore::DeviceOrientationEvent::initDeviceOrientationEvent):
        * dom/DeviceOrientationEvent.h: Added.
        (WebCore::DeviceOrientationEvent::create):
        (WebCore::DeviceOrientationEvent::alpha):
        (WebCore::DeviceOrientationEvent::beta):
        (WebCore::DeviceOrientationEvent::gamma):
        (WebCore::DeviceOrientationEvent::isDeviceOrientationEvent):
        * dom/DeviceOrientationEvent.idl: Added.
        * dom/Event.cpp:
        (WebCore::Event::isDeviceOrientationEvent):
        * dom/Event.h:
        * dom/EventNames.h:
        * page/DOMWindow.h:
        * page/DOMWindow.idl:

2010-05-20  Kenneth Rohde Christiansen  <kenneth.christiansen@openbossa.org>

        Rubberstamped by Antti Koivisto.

        Use 0.15 as text drag delay when Q_WS_MAC is defined, which is
        consistent with the Mac OS X platform.

        * page/qt/EventHandlerQt.cpp:

2010-05-19  Kenneth Rohde Christiansen  <kenneth@webkit.org>

        Reviewed by Simon Hausmann.

        Fix painting when using clipToImageBuffer()

        When we apply the transform of the parent painter to the painter of
        the transparency layer, we adopt its coordinate system, thus offset
        should not be in page coordinates, but in the coordinate system of
        the parent painter.

        * platform/graphics/qt/GraphicsContextQt.cpp:
        (WebCore::TransparencyLayer::TransparencyLayer):

2010-05-20  Adam Langley  <agl@chromium.org>

        Reviewed by David Levin.

        [chromium] Avoid crash when msttcorefonts aren't provided

        https://bugs.webkit.org/show_bug.cgi?id=39015
        http://code.google.com/p/chromium/issues/detail?id=43831

        * platform/graphics/chromium/FontCacheLinux.cpp:
        (WebCore::FontCache::createFontPlatformData):

2010-05-20  Zoltan Herczeg  <zherczeg@webkit.org>

        Reviewed by Dirk Schulze.

        Fix a crash caused by feLigthing::apply()
        https://bugs.webkit.org/show_bug.cgi?id=39004

        Make FELighting::apply() similar to other filters' applies
        to avoid an assertion fail in putUnmultipliedImageData(),
        when effectDrawingRect has negative location (x or y is less than 0).

        Test: svg/filters/feLighting-crash.svg

        * svg/graphics/filters/SVGFELighting.cpp:
        (WebCore::FELighting::apply):

2010-05-20  Chris Jerdonek  <cjerdonek@webkit.org>

        Reviewed by Eric Seidel.

        Modified FrameLoader::urlSelected() to accept a KURL instead of a
        ResourceRequest.

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

        Since ResourceRequest has non-explicit single-parameter constructors for
        String and KURL, urlSelected() previously accepted any of String, KURL,
        and ResourceRequest.  This revision changes urlSelected() to accept only
        a KURL to make the API tighter and easier to refactor.

        No new functionality, so no new tests.

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::urlSelected):
          - Changed the public overload to accept a KURL instead of a ResourceRequest.
        * loader/FrameLoader.h:
          - Changed the public overload to accept a KURL instead of a ResourceRequest.
        * wml/WMLAElement.cpp:
        (WebCore::WMLAElement::defaultEventHandler):
          - Updated the call to urlSelected().

2010-05-20  MORITA Hajime  <morrita@google.com>

        Reviewed by Kent Tamura.

        2x execCommand ReadAV@NULL
        https://bugs.webkit.org/show_bug.cgi?id=35791

        In applyBlockStyle(), a node which is referred from
        nextParagraphStart sometimes removed from the document and goes
        orphan, and that causes an assertion failed. This is because
        moveParagraphs() replaces the node with a new one with some new
        styles applied. So we re-compute nextParagraphStart in that case.

        Test: editing/execCommand/35791.html

        * dom/Position.h:
        (WebCore::Position::isOrphan):
        * editing/ApplyStyleCommand.cpp:
        (WebCore::ApplyStyleCommand::applyBlockStyle):
        * editing/VisiblePosition.h:
        (WebCore::VisiblePosition::isOrphan):

2010-05-20  Steve Block  <steveblock@google.com>

        Reviewed by Eric Seidel.

        PluginView contains JSC-specific code
        https://bugs.webkit.org/show_bug.cgi?id=38907

        Build fix only, no new tests.

        * plugins/PluginView.cpp:
        (WebCore::PluginView::start):
        (WebCore::PluginView::stop):
        (WebCore::PluginView::performRequest):
        * plugins/PluginView.h:

2010-05-17  Philippe Normand  <pnormand@igalia.com>

        Reviewed by Eric Seidel.

        [GStreamer] enable gst support if USE_GSTREAMER macro is defined
        https://bugs.webkit.org/show_bug.cgi?id=39205

        Include gstreamer private player in the build when the
        USE_GSTREAMER macro is enabled.

        * platform/graphics/MediaPlayer.cpp:
        (WebCore::installedMediaEngines):

2010-05-19  Vangelis Kokkevis  <vangelis@chromium.org>

        Reviewed by Darin Fisher.

        Implementing hardware accelerated compositing of layers for Chromium.
        Completely removed the existing software compositing path to replace
        it with code implemented using OpenGL.
        https://bugs.webkit.org/show_bug.cgi?id=38783

        Tests: Covered by existing compositing tests.

        * WebCore.gyp/WebCore.gyp:
        * platform/graphics/chromium/GraphicsLayerChromium.cpp:
        (WebCore::GraphicsLayerChromium::~GraphicsLayerChromium):
        (WebCore::GraphicsLayerChromium::updateLayerDrawsContent):
        (WebCore::GraphicsLayerChromium::updateContentsRect):
        * platform/graphics/chromium/LayerChromium.cpp:
        (WebCore::LayerChromium::LayerChromium):
        (WebCore::LayerChromium::~LayerChromium):
        (WebCore::LayerChromium::updateGraphicsContext):
        (WebCore::LayerChromium::drawsContentUpdated):
        (WebCore::LayerChromium::updateContents):
        (WebCore::LayerChromium::setContents):
        (WebCore::LayerChromium::setBackingStoreSize):
        (WebCore::LayerChromium::setBounds):
        (WebCore::LayerChromium::setNeedsDisplay):
        * platform/graphics/chromium/LayerChromium.h:
        (WebCore::LayerChromium::contentsDirty):
        (WebCore::LayerChromium::drawsContent):
        * platform/graphics/chromium/LayerRendererChromium.cpp:
        (WebCore::):
        (WebCore::checkGLError):
        (WebCore::loadShader):
        (WebCore::loadShaderProgram):
        (WebCore::toGLMatrix):
        (WebCore::orthoMatrix):
        (WebCore::createLayerTexture):
        (WebCore::LayerRendererChromium::create):
        (WebCore::LayerRendererChromium::LayerRendererChromium):
        (WebCore::LayerRendererChromium::~LayerRendererChromium):
        (WebCore::LayerRendererChromium::drawTexturedQuad):
        (WebCore::LayerRendererChromium::drawLayers):
        (WebCore::LayerRendererChromium::getTextureId):
        (WebCore::LayerRendererChromium::assignTextureForLayer):
        (WebCore::LayerRendererChromium::freeLayerTexture):
        (WebCore::LayerRendererChromium::drawDebugBorder):
        (WebCore::LayerRendererChromium::isLayerVisible):
        (WebCore::LayerRendererChromium::compositeLayersRecursive):
        (WebCore::LayerRendererChromium::makeContextCurrent):
        (WebCore::LayerRendererChromium::initGL):
        (WebCore::LayerRendererChromium::bindCommonAttribLocation):
        (WebCore::LayerRendererChromium::initializeSharedGLObjects):
        * platform/graphics/chromium/LayerRendererChromium.h:
        (WebCore::LayerRendererChromium::):

2010-05-19  Andrey Kosyakov  <caseq@chromium.org>

        Reviewed by Timothy Hatcher.

        Maintain focus on help screen while it's active.
        https://bugs.webkit.org/show_bug.cgi?id=39237

        * inspector/front-end/HelpScreen.js:
        (WebInspector.HelpScreen):
        (WebInspector.HelpScreen.prototype.show):
        (WebInspector.HelpScreen.prototype._hide):
        (WebInspector.HelpScreen.prototype._onBlur):

2010-05-19  Jedrzej Nowacki  <jedrzej.nowacki@nokia.com>

        Reviewed by Kenneth Rohde Christiansen.

        Crash fix in the HistoryController.

        The problem was casued by a documented feature of the QWebFrame::setHtml().
        The method doesn't affect a browsing history (doesn't create a HistoryItem instance), so
        m_currentItem and m_previousItem are not set.

        A null check was added.

        [Qt] The QWebPage crashes on history.pushState().
        https://bugs.webkit.org/show_bug.cgi?id=38840

        * loader/HistoryController.cpp:
        (WebCore::HistoryController::pushState):
        (WebCore::HistoryController::replaceState):

2010-05-19  Darin Fisher  <darin@chromium.org>

        Revert r59790 due to failing Chromium npruntime tests.

        * bindings/v8/NPV8Object.cpp:
        (v8ObjectToNPObject):
        (npCreateV8ScriptObject):
        (_NPN_Invoke):
        (_NPN_InvokeDefault):
        (_NPN_Evaluate):
        (_NPN_EvaluateHelper):
        (_NPN_GetProperty):
        (_NPN_SetProperty):
        (_NPN_RemoveProperty):
        (_NPN_HasProperty):
        (_NPN_HasMethod):
        (_NPN_SetException):
        (_NPN_Enumerate):
        (_NPN_Construct):
        * bindings/v8/NPV8Object.h:
        * bindings/v8/V8NPObject.cpp:
        (forgetV8ObjectForNPObject):
        * bindings/v8/V8NPObject.h:
        * bindings/v8/V8NPUtils.cpp:
        (convertV8ObjectToNPVariant):
        (getStringIdentifier):
        * bindings/v8/V8NPUtils.h:
        * bindings/v8/npruntime.cpp:

2010-05-19  Gavin Barraclough  <barraclough@apple.com>

        Rubber Stamped by Sam Weinig.

        JSFunctions are no longer a subclass of InternalFunction.

        * bindings/js/ScriptCallStack.cpp:
        (WebCore::ScriptCallStack::ScriptCallStack):
        (WebCore::ScriptCallStack::initialize):
        * bindings/js/ScriptCallStack.h:

2010-05-19  Jian Li  <jianli@chromium.org>

        Reviewed by Alexey Proskuryakov.

        Refactor text encoding detection logic in FileReader.
        https://bugs.webkit.org/show_bug.cgi?id=39131

        Changed FileReader::convertToText to call TextResourceDecoder::decode to
        detect the encoding from BOM and decode the text. Though the File API
        spec says that the supplied encoding should be used if it is valid, we
        choose to ignore this requirement in order to be consistent with how
        WebKit decodes the web content: always has the BOM override the provided
        encoding.

        * html/FileReader.cpp:
        (WebCore::FileReader::convertToText):
        * html/FileReader.h:

2010-05-19  Abhishek Arya  <inferno@chromium.org>

        Reviewed by David Hyatt.

        Check that the node is a text node before doing a static cast
        to a Text class pointer.
        https://bugs.webkit.org/show_bug.cgi?id=38626    

        Test: fast/text/text-transform-nontext-node-crash.xhtml

        * rendering/RenderText.cpp:
        (WebCore::RenderText::originalText):
        * rendering/RenderTextFragment.cpp:
        (WebCore::RenderTextFragment::originalText):
        (WebCore::RenderTextFragment::previousCharacter):

2010-05-19  Yaar Schnitman  <yaar@chromium.org>

        Reviewed by Eric Seidel.

        Fixed warnings by JSC overloads changes. Also updated the binding reference files for JSC.
        https://bugs.webkit.org/show_bug.cgi?id=39390

        * bindings/scripts/CodeGeneratorJS.pm:
        * bindings/scripts/test/JS/JSTestInterface.cpp:
        (WebCore::):
        * bindings/scripts/test/JS/JSTestObj.cpp:
        (WebCore::):

2010-05-19  Darin Fisher  <darin@chromium.org>

        Reviewed by Nate Chapin.

        [chromium] Provide a way to catch exceptions thrown while interacting
        with a NPObject via WebBindings methods.
        https://bugs.webkit.org/show_bug.cgi?id=39378

        This change also includes a small bit of cleanup in V8NPObject and
        friends.  I moved code into the WebCore namespace where appropriate.
        
        In _NPN_Invoke, I also moved the call to _NPN_Evaluate outside of the
        context scope.  I did this to avoid having nested ExceptionCatcher
        objects, which is not strictly necessary, but it seemed cleaner.
        _NPN_Evaluate already takes care of creating a context scope.

        * bindings/v8/NPV8Object.cpp:
        (WebCore::v8ObjectToNPObject):
        (WebCore::npCreateV8ScriptObject):
        (_NPN_Invoke):
        (_NPN_InvokeDefault):
        (_NPN_Evaluate):
        (_NPN_EvaluateHelper):
        (_NPN_GetProperty):
        (_NPN_SetProperty):
        (_NPN_RemoveProperty):
        (_NPN_HasProperty):
        (_NPN_HasMethod):
        (_NPN_SetException):
        (_NPN_Enumerate):
        (_NPN_Construct):
        * bindings/v8/NPV8Object.h:
        * bindings/v8/V8NPObject.cpp:
        * bindings/v8/V8NPObject.h:
        * bindings/v8/V8NPUtils.cpp:
        (WebCore::convertV8ObjectToNPVariant):
        (WebCore::pushExceptionHandler):
        (WebCore::popExceptionHandler):
        (WebCore::ExceptionCatcher::~ExceptionCatcher):
        * bindings/v8/V8NPUtils.h:
        * bindings/v8/npruntime.cpp:

2010-05-19  Yaar Schnitman  <yaar@chromium.org>

        Unreviewed, rolling out r59769.
        http://trac.webkit.org/changeset/59769
        https://bugs.webkit.org/show_bug.cgi?id=37815

        Broke GTK again

        * Android.jscbindings.mk:
        * CMakeLists.txt:
        * GNUmakefile.am:
        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSBindingsAllInOne.cpp:
        * bindings/js/JSCallbackData.cpp:
        (WebCore::JSCallbackData::invokeCallback):
        * bindings/js/JSEventListener.cpp:
        (WebCore::JSEventListener::handleEvent):
        * bindings/js/JSInjectedScriptHostCustom.cpp:
        (WebCore::InjectedScriptHost::createInjectedScript):
        * bindings/js/JSMainThreadExecState.cpp: Removed.
        * bindings/js/JSMainThreadExecState.h: Removed.
        * bindings/js/ScheduledAction.cpp:
        (WebCore::ScheduledAction::executeFunctionInContext):
        (WebCore::ScheduledAction::execute):
        * bindings/js/ScheduledAction.h:
        * bindings/js/ScriptController.cpp:
        (WebCore::ScriptController::evaluateInWorld):
        * bindings/js/ScriptController.h:
        * bindings/js/ScriptFunctionCall.cpp:
        (WebCore::ScriptFunctionCall::call):
        * bindings/objc/ObjCEventListener.mm:
        * bindings/objc/WebScriptObject.mm:
        (-[WebScriptObject callWebScriptMethod:withArguments:]):
        (-[WebScriptObject evaluateWebScript:]):
        * bindings/scripts/CodeGeneratorObjC.pm:
        * bindings/scripts/test/ObjC/DOMTestCallback.mm:
        (-[DOMTestCallback callbackWithClass1Param:]):
        (-[DOMTestCallback callbackWithClass2Param:strArg:]):
        (-[DOMTestCallback callbackWithNonBoolReturnType:]):
        (-[DOMTestCallback customCallback:class6Param:]):
        * bindings/scripts/test/ObjC/DOMTestInterface.mm:
        * bindings/scripts/test/ObjC/DOMTestObj.mm:
        (-[DOMTestObj readOnlyIntAttr]):
        (-[DOMTestObj readOnlyStringAttr]):
        (-[DOMTestObj readOnlyTestObjAttr]):
        (-[DOMTestObj intAttr]):
        (-[DOMTestObj setIntAttr:]):
        (-[DOMTestObj longLongAttr]):
        (-[DOMTestObj setLongLongAttr:]):
        (-[DOMTestObj unsignedLongLongAttr]):
        (-[DOMTestObj setUnsignedLongLongAttr:]):
        (-[DOMTestObj stringAttr]):
        (-[DOMTestObj setStringAttr:]):
        (-[DOMTestObj testObjAttr]):
        (-[DOMTestObj setTestObjAttr:]):
        (-[DOMTestObj attrWithException]):
        (-[DOMTestObj setAttrWithException:]):
        (-[DOMTestObj attrWithSetterException]):
        (-[DOMTestObj setAttrWithSetterException:]):
        (-[DOMTestObj attrWithGetterException]):
        (-[DOMTestObj setAttrWithGetterException:]):
        (-[DOMTestObj customAttr]):
        (-[DOMTestObj setCustomAttr:]):
        (-[DOMTestObj scriptStringAttr]):
        (-[DOMTestObj voidMethod]):
        (-[DOMTestObj voidMethodWithArgs:strArg:objArg:]):
        (-[DOMTestObj intMethod]):
        (-[DOMTestObj intMethodWithArgs:strArg:objArg:]):
        (-[DOMTestObj objMethod]):
        (-[DOMTestObj objMethodWithArgs:strArg:objArg:]):
        (-[DOMTestObj methodThatRequiresAllArgs:objArg:]):
        (-[DOMTestObj methodThatRequiresAllArgsAndThrows:objArg:]):
        (-[DOMTestObj serializedValue:]):
        (-[DOMTestObj methodWithException]):
        (-[DOMTestObj customMethod]):
        (-[DOMTestObj customMethodWithArgs:strArg:objArg:]):
        (-[DOMTestObj customArgsAndException:]):
        (-[DOMTestObj addEventListener:listener:useCapture:]):
        (-[DOMTestObj removeEventListener:listener:useCapture:]):
        (-[DOMTestObj withDynamicFrame]):
        (-[DOMTestObj withDynamicFrameAndArg:]):
        (-[DOMTestObj withDynamicFrameAndOptionalArg:optionalArg:]):
        (-[DOMTestObj withDynamicFrameAndUserGesture:]):
        (-[DOMTestObj withDynamicFrameAndUserGestureASAD:optionalArg:]):
        (-[DOMTestObj withScriptStateVoid]):
        (-[DOMTestObj withScriptStateObj]):
        (-[DOMTestObj withScriptStateVoidException]):
        (-[DOMTestObj withScriptStateObjException]):
        (-[DOMTestObj methodWithOptionalArg:]):
        (-[DOMTestObj methodWithNonOptionalArgAndOptionalArg:opt:]):
        (-[DOMTestObj methodWithNonOptionalArgAndTwoOptionalArgs:opt1:opt2:]):
        * bindings/v8/ScriptController.cpp:
        * bindings/v8/ScriptController.h:
        * html/HTMLFrameElementBase.cpp:
        (WebCore::HTMLFrameElementBase::isURLAllowed):

2010-05-19  Dirk Pranke  <dpranke@chromium.org>

        Try again to roll out r58675.

        * notifications/Notification.h:
        * notifications/Notification.idl:

2010-05-19  Enrica Casucci  <enrica@apple.com>

        Reviewed by Dave Hyatt.

        REGRESSION (r59385) crash destroying inline renderers
        https://bugs.webkit.org/show_bug.cgi?id=39143
        <rdar://problem/8003662>
        
        The goal of r59385 was to make sure that the layout of block after all its children had been removed produced the identical result
        as the one of a newly created empty block. In order to do so, we had to make sure that the m_inlineChildren flag was reset to true when
        the block had no children (as it is upon creation).
        I discovered that, by doing that for anonymous blocks it leads removeChild to conclude that the anonymous children can be removed,
        without considering that the anonymous block could be part of a continuation chain. For this reason, when RenderInline::destroy()
        tries to remove the continuations we are effectively deleting a renderer that had been deleted already.
        
        Test: fast/inline-block/anonymous-block-crash.html

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::layoutBlock): resetting the flag m_inlineChildren only for non anonymous blocks otherwise we incurr in
        a double deletion of the renderer that causes the crash.

2010-05-19  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r59782.
        http://trac.webkit.org/changeset/59782
        https://bugs.webkit.org/show_bug.cgi?id=39379

        broke DRT build (Requested by dpranke on #webkit).

        * notifications/Notification.h:
        (WebCore::Notification::dir):
        (WebCore::Notification::setDir):
        (WebCore::Notification::replaceId):
        (WebCore::Notification::setReplaceId):
        * notifications/Notification.idl:

2010-05-18  David Hyatt  <hyatt@apple.com>

        Reviewed by Oliver Hunt.

        https://bugs.webkit.org/show_bug.cgi?id=21049, opacity and position:relative fail in multi-column layouts.
        
        Make layers split painting across columns just as normal flow content does.  This is actually very
        challenging, since intermediate multicol layers can exist between a child that has to be split and
        its enclosing stacking context.
        
        In order to properly paginate layers, a bit is set on all pagination roots, i.e., layers that will get
        split and thus split any descendant layers that they are also responsible for painting.  For a paginated
        root, we walk up the layer hierarchy and collect all intermediate multicol blocks between the child
        and the enclosing stacking context.
        
        We then recur from the outside in, applying clipping and translation as we break up the layer into strips.
        
        Composited layers remain unsplittable and have a hacked offset still in order to be placed in the right
        column.
        
        Painting and hit testing of columns has been simplified in all of the functions to use the x position of
        the column rect instead of trying to increment an x offset by adding in widths and column gaps.  This
        makes those functions directionality-independent (and the LTR/RTL code paths are now the same).
        
        Fix repainting of columns as well to make sure rects are split across columns only after relative position
        and transforms have been applied.
        
        Added fast/multicol/layers-split-across-columns.html

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::paintColumnContents):
        (WebCore::RenderBlock::adjustRectForColumns):
        (WebCore::RenderBlock::adjustForColumns):
        * rendering/RenderBlock.h:
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::computeRectForRepaint):
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::RenderLayer):
        (WebCore::RenderLayer::updateLayerPositions):
        (WebCore::RenderLayer::updatePagination):
        (WebCore::RenderLayer::updateLayerPosition):
        (WebCore::RenderLayer::paintLayer):
        (WebCore::RenderLayer::paintList):
        (WebCore::RenderLayer::paintPaginatedChildLayer):
        (WebCore::RenderLayer::paintChildLayerIntoColumns):
        (WebCore::RenderLayer::hitTestLayer):
        (WebCore::RenderLayer::hitTestList):
        (WebCore::RenderLayer::hitTestPaginatedChildLayer):
        (WebCore::RenderLayer::hitTestChildLayerColumns):
        * rendering/RenderLayer.h:
        (WebCore::RenderLayer::):
        (WebCore::RenderLayer::isPaginated):

2010-05-18  Dirk Pranke  <dpranke@chromium.org>

        Reviewed by Dimitri Glazkov.

        Attempt to revert r58765 to see if it was causing a performance
        regression.

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

        * notifications/Notification.h:
        * notifications/Notification.idl:

2010-05-19  Kevin Watters  <kevinwatters@gmail.com>

        Reviewed by Kevin Ollivier.

        [wx] Ensure m_nsFont is initialized properly, and tweak fallback font handling
        to handle more cases.
        https://bugs.webkit.org/show_bug.cgi?id=39365
        
        * platform/graphics/wx/FontCacheWx.cpp:
        (WebCore::FontCache::getFontDataForCharacters):
        (WebCore::FontCache::getSimilarFontPlatformData):
        (WebCore::FontCache::getLastResortFallbackFont):
        * platform/graphics/wx/FontPlatformDataWx.cpp:
        (WebCore::FontPlatformData::FontPlatformData):

2010-05-19  Marcus Bulach  <bulach@chromium.org>

        Reviewed by Eric Seidel.

        Fixes Windows Qt Release post r59772.
        https://bugs.webkit.org/show_bug.cgi?id=39369

        * platform/GeolocationService.cpp:

2010-05-19  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        Add support for handling basic <script> tags in the HTML5 Parser
        https://bugs.webkit.org/show_bug.cgi?id=39350

        WebKit currently executes scripts from HTMLTokenizer in one giagantic
        hack.  HTML 5 requires that we execute scripts from the tree-builders/parser.

        It will take me a while to re-factor enough of HTMLTokenizer to be able to
        move the script execution logic without breaking things.  In the interest
        of allowing Adam to continue improving the HTML 5 lexer I've added this
        very basic (and very incomplete) <script> support to the HTML 5 parser code
        path so the he can run the HTML5 parser test suite.

        <script> support is tested by most of the layout tests.

        * dom/ScriptElement.cpp:
        (WebCore::useHTML5Parser):
        (WebCore::ScriptElement::finishParsingChildren):

2010-05-19  Anders Carlsson  <andersca@apple.com>

        Reviewed by Sam Weinig.

        Move member variables from NamedMappedAttrMap to its base class NamedNodeMap
        https://bugs.webkit.org/show_bug.cgi?id=39367
        <rdar://problem/8003304>

        This lets us get rid of the vtable pointer in NamedNodeMap which saves 8 bytes, and also allows us to
        fit the m_mappedAttributeCount unsigned int in the RefCounted padding (in 64-bit).
        
        The net result is that we shrink the NamedMappedAttrMap size by 16 bytes, while keeping the size of NamedNodeMap the same.

        * dom/Element.cpp:
        (WebCore::Element::createAttributeMap):
        * dom/Element.h:
        * dom/NamedMappedAttrMap.cpp:
        * dom/NamedMappedAttrMap.h:
        (WebCore::NamedMappedAttrMap::NamedMappedAttrMap):
        * dom/NamedNodeMap.cpp:
        (WebCore::NamedNodeMap::clearAttributes):
        * dom/NamedNodeMap.h:
        (WebCore::NamedNodeMap::NamedNodeMap):
        * dom/Node.cpp:
        (WebCore::Node::dumpStatistics):
        * dom/StyledElement.cpp:
        * dom/StyledElement.h:

2010-05-19  Sam Weinig  <sam@webkit.org>

        Reviewed by Anders Carlsson.

        Use ASSERT_UNUSED instead of UNUSED_PARAM.

        * dom/Attribute.cpp:
        (WebCore::Attribute::unbindAttr):

2010-05-19  Sam Weinig  <sam@webkit.org>

        Rubber-stamped by Anders Carlsson.

        Complete the merge of MappedAttribute and Attribute.

        Files elided for brevity.

2010-05-19  Marcus Bulach  <bulach@chromium.org>

        Reviewed by Steve Block.

        [chromium] Adds supports for layout tests using GeolocationServiceMock.
        https://bugs.webkit.org/show_bug.cgi?id=39081

        Allows injection of GeolocationServiceMock factory.

        Tests: existing fast/dom/Geolocation/*

        * platform/GeolocationService.cpp:
        (WebCore::GeolocationService::useMock):
        (WebCore::GeolocationService::useMockFactory):
        * platform/GeolocationService.h:
        * platform/chromium/GeolocationServiceChromium.cpp:
        (WebCore::GeolocationServiceChromium::GeolocationServiceChromium):

2010-05-19  Justin Schuh  <jschuh@chromium.org>

        Reviewed by Adam Barth.

        Moving frame.src checks out of the bindings
        https://bugs.webkit.org/show_bug.cgi?id=37815

        Moved JavaScript frame.src checks out of bindings and into
        HTMLFrameElementBase. Added main thread state stack to JavaScriptCore
        so ExecState is available inside core DOM. Updated affected bindings
        (except for GObject, which will need to be updated to avoid origin
        failures inside native code).

        * Android.jscbindings.mk:
        * CMakeLists.txt:
        * GNUmakefile.am:
        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSBindingsAllInOne.cpp:
        * bindings/js/JSCallbackData.cpp:
        (WebCore::JSCallbackData::invokeCallback):
        * bindings/js/JSEventListener.cpp:
        (WebCore::JSEventListener::handleEvent):
        * bindings/js/JSInjectedScriptHostCustom.cpp:
        (WebCore::InjectedScriptHost::createInjectedScript):
        * bindings/js/JSMainThreadExecState.cpp: Added.
        * bindings/js/JSMainThreadExecState.h: Added.
        (WebCore::JSMainThreadExecState::currentState):
        (WebCore::JSMainThreadExecState::call):
        (WebCore::JSMainThreadExecState::evaluate):
        (WebCore::JSMainThreadExecState::JSMainThreadExecState):
        (WebCore::JSMainThreadExecState::~JSMainThreadExecState):
        (WebCore::JSMainThreadNullState::JSMainThreadNullState):
        * bindings/js/ScheduledAction.cpp:
        (WebCore::ScheduledAction::executeFunctionInContext):
        (WebCore::ScheduledAction::execute):
        * bindings/js/ScheduledAction.h:
        * bindings/js/ScriptController.cpp:
        (WebCore::ScriptController::evaluateInWorld):
        (WebCore::ScriptController::canAccessFromCurrentOrigin):
        * bindings/js/ScriptController.h:
        * bindings/js/ScriptFunctionCall.cpp:
        (WebCore::ScriptFunctionCall::call):
        * bindings/objc/ObjCEventListener.mm:
        * bindings/objc/WebScriptObject.mm:
        (-[WebScriptObject callWebScriptMethod:withArguments:]):
        (-[WebScriptObject evaluateWebScript:]):
        * bindings/scripts/CodeGeneratorObjC.pm:
        * bindings/scripts/test/ObjC/DOMTestCallback.mm:
        (-[DOMTestCallback callbackWithClass1Param:]):
        (-[DOMTestCallback callbackWithClass2Param:strArg:]):
        (-[DOMTestCallback callbackWithNonBoolReturnType:]):
        (-[DOMTestCallback customCallback:class6Param:]):
        * bindings/scripts/test/ObjC/DOMTestInterface.mm:
        * bindings/scripts/test/ObjC/DOMTestObj.mm:
        (-[DOMTestObj readOnlyIntAttr]):
        (-[DOMTestObj readOnlyStringAttr]):
        (-[DOMTestObj readOnlyTestObjAttr]):
        (-[DOMTestObj intAttr]):
        (-[DOMTestObj setIntAttr:]):
        (-[DOMTestObj longLongAttr]):
        (-[DOMTestObj setLongLongAttr:]):
        (-[DOMTestObj unsignedLongLongAttr]):
        (-[DOMTestObj setUnsignedLongLongAttr:]):
        (-[DOMTestObj stringAttr]):
        (-[DOMTestObj setStringAttr:]):
        (-[DOMTestObj testObjAttr]):
        (-[DOMTestObj setTestObjAttr:]):
        (-[DOMTestObj attrWithException]):
        (-[DOMTestObj setAttrWithException:]):
        (-[DOMTestObj attrWithSetterException]):
        (-[DOMTestObj setAttrWithSetterException:]):
        (-[DOMTestObj attrWithGetterException]):
        (-[DOMTestObj setAttrWithGetterException:]):
        (-[DOMTestObj customAttr]):
        (-[DOMTestObj setCustomAttr:]):
        (-[DOMTestObj scriptStringAttr]):
        (-[DOMTestObj voidMethod]):
        (-[DOMTestObj voidMethodWithArgs:strArg:objArg:]):
        (-[DOMTestObj intMethod]):
        (-[DOMTestObj intMethodWithArgs:strArg:objArg:]):
        (-[DOMTestObj objMethod]):
        (-[DOMTestObj objMethodWithArgs:strArg:objArg:]):
        (-[DOMTestObj methodThatRequiresAllArgs:objArg:]):
        (-[DOMTestObj methodThatRequiresAllArgsAndThrows:objArg:]):
        (-[DOMTestObj serializedValue:]):
        (-[DOMTestObj methodWithException]):
        (-[DOMTestObj customMethod]):
        (-[DOMTestObj customMethodWithArgs:strArg:objArg:]):
        (-[DOMTestObj customArgsAndException:]):
        (-[DOMTestObj addEventListener:listener:useCapture:]):
        (-[DOMTestObj removeEventListener:listener:useCapture:]):
        (-[DOMTestObj withDynamicFrame]):
        (-[DOMTestObj withDynamicFrameAndArg:]):
        (-[DOMTestObj withDynamicFrameAndOptionalArg:optionalArg:]):
        (-[DOMTestObj withDynamicFrameAndUserGesture:]):
        (-[DOMTestObj withDynamicFrameAndUserGestureASAD:optionalArg:]):
        (-[DOMTestObj withScriptStateVoid]):
        (-[DOMTestObj withScriptStateObj]):
        (-[DOMTestObj withScriptStateVoidException]):
        (-[DOMTestObj withScriptStateObjException]):
        (-[DOMTestObj methodWithOptionalArg:]):
        (-[DOMTestObj methodWithNonOptionalArgAndOptionalArg:opt:]):
        (-[DOMTestObj methodWithNonOptionalArgAndTwoOptionalArgs:opt1:opt2:]):
        * bindings/v8/ScriptController.cpp:
        (WebCore::ScriptController::canAccessFromCurrentOrigin):
        * bindings/v8/ScriptController.h:
        * html/HTMLFrameElementBase.cpp:
        (WebCore::HTMLFrameElementBase::isURLAllowed):

2010-05-19  Andreas Kling  <andreas.kling@nokia.com>

        Reviewed by Darin Adler.

        CanvasRenderingContext2D's property getters that return colors should
        serialize them in accordance with the HTML5 spec (4.8.11.1.4)
        Setters should ignore invalid colors.

        Also, shadowColor should initially be transparent black (4.8.11.1.6)

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

        Refactored CanvasStyle to store an RGBA32 instead of RGBA components and/or the color string.

        Spec links:
        http://www.whatwg.org/specs/web-apps/current-work/#serialization-of-a-color
        http://www.whatwg.org/specs/web-apps/current-work/#dom-context-2d-shadowcolor

        * html/canvas/CanvasRenderingContext2D.cpp:
        (WebCore::CanvasRenderingContext2D::State::State):
        (WebCore::CanvasRenderingContext2D::shadowColor):
        (WebCore::CanvasRenderingContext2D::setShadowColor):
        (WebCore::CanvasRenderingContext2D::setShadow):
        (WebCore::CanvasRenderingContext2D::clearShadow):
        (WebCore::CanvasRenderingContext2D::applyShadow):
        * html/canvas/CanvasRenderingContext2D.h:
        * html/canvas/CanvasStyle.cpp:
        (WebCore::CanvasStyle::CanvasStyle):
        (WebCore::CanvasStyle::create):
        (WebCore::CanvasStyle::applyStrokeColor):
        (WebCore::CanvasStyle::applyFillColor):
        * html/canvas/CanvasStyle.h:
        (WebCore::CanvasStyle::create):
        (WebCore::CanvasStyle::color):
        (WebCore::CanvasStyle::):
        (WebCore::CanvasStyle::CMYKAValues::CMYKAValues):
        * platform/graphics/Color.cpp:
        (WebCore::Color::serialized):
        * platform/graphics/Color.h:

2010-05-19  Andreas Kling  <andreas.kling@nokia.com>

        Reviewed by Simon Hausmann.

        [Qt] REGRESSION: CoolClock isn't rendered properly

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

        CanvasRenderingContext2D's arc() should connect to the previous point
        with a straight line (HTML5 spec 4.8.11.1.8), but if the path is empty
        to begin with, we don't want a line back to (0,0)
        This also fixes the rendering artifact discussed in bug 36226.

        Spec link:
        http://www.whatwg.org/specs/web-apps/current-work/#dom-context-2d-arc

        Test: fast/canvas/canvas-arc-connecting-line.html

        * platform/graphics/qt/PathQt.cpp:
        (WebCore::Path::addArc):

2010-05-19  Alexander Pavlov  <apavlov@chromium.org>

        Reviewed by Jeremy Orlow.

        Fix whitespace for the bug 38906
        https://bugs.webkit.org/show_bug.cgi?id=39351

        No new tests required (no code change).

        * css/CSSParser.cpp:
        (WebCore::CSSParser::~CSSParser):
        (WebCore::CSSParser::setupParser):
        (WebCore::CSSParser::parseSheet):
        (WebCore::CSSParser::parseValue):
        (WebCore::CSSParser::parseSelector):
        (WebCore::unitFromString):
        (WebCore::CSSParser::checkForOrphanedUnits):
        (WebCore::CSSParser::parseWCSSInputProperty):
        (WebCore::CSSParser::parseFillShorthand):
        (WebCore::CSSParser::parseAnimationShorthand):
        (WebCore::CSSParser::parseTransitionShorthand):
        (WebCore::CSSParser::parseShorthand):
        (WebCore::CSSParser::parse4Values):
        (WebCore::CSSParser::parseAttr):
        (WebCore::CSSParser::parseFillPositionXY):
        (WebCore::CSSParser::parseFillPosition):
        (WebCore::CSSParser::parseFillRepeat):
        (WebCore::CSSParser::parseFillProperty):
        (WebCore::CSSParser::parseAnimationTimingFunction):
        (WebCore::CSSParser::parseAnimationProperty):
        (WebCore::CSSParser::parseDashboardRegions):
        (WebCore::CSSParser::parseCounterContent):
        (WebCore::CSSParser::parseShape):
        (WebCore::CSSParser::parseFont):
        (WebCore::CSSParser::parseFontFamily):
        (WebCore::CSSParser::parseFontFaceSrc):
        (WebCore::parseInt):
        (WebCore::CSSParser::parseColor):
        (WebCore::CSSParser::parseShadow):
        (WebCore::CSSParser::parseReflect):
        (WebCore::BorderImageParseContext::commitNumber):
        (WebCore::BorderImageParseContext::commitBorderImage):
        (WebCore::CSSParser::parseBorderImage):
        (WebCore::CSSParser::parseCounter):
        (WebCore::parseGradientPoint):
        (WebCore::parseGradientColorStop):
        (WebCore::CSSParser::parseGradient):
        (WebCore::CSSParser::parseCanvas):
        (WebCore::CSSParser::parseTransform):
        (WebCore::CSSParser::parseTransformOrigin):
        (WebCore::CSSParser::parsePerspectiveOrigin):
        (WebCore::CSSParser::text):
        (WebCore::CSSParser::createRuleList):
        (WebCore::CSSParser::createVariablesRule):
        (WebCore::CSSParser::parseVariable):
        (WebCore::CSSParser::parsePropertyWithResolvedVariables):
        (WebCore::CSSParser::checkForVariables):
        (WebCore::CSSParser::createKeyframeRule):
        * css/CSSParser.h:
        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::setFrontend):
        (WebCore::InspectorController::show):
        (WebCore::InspectorController::unbindAllResources):
        (WebCore::InspectorController::didCommitLoad):
        (WebCore::InspectorController::scriptImported):
        (WebCore::InspectorController::getCurrentUserInitiatedProfileName):
        (WebCore::InspectorController::removeBreakpoint):
        (WebCore::drawOutlinedQuad):
        (WebCore::InspectorController::stopTiming):
        * inspector/InspectorDOMAgent.cpp:
        (WebCore::InspectorDOMAgent::didRemoveDOMNode):
        (WebCore::InspectorDOMAgent::getStyles):
        (WebCore::InspectorDOMAgent::applyStyleText):

2010-05-19  Steve Block  <steveblock@google.com>

        Reviewed by Nate Chapin.

        V8 code generator does not add ENABLE guards around attribute getters and setters
        https://bugs.webkit.org/show_bug.cgi?id=39222

        No new tests, build fix only.

        * bindings/scripts/CodeGeneratorV8.pm:

2010-05-19  Jeremy Orlow  <jorlow@chromium.org>

        Unreviewed build fix for Chromium.

        * storage/IndexedDatabaseImpl.cpp:

2010-05-17  Jeremy Orlow  <jorlow@chromium.org>

        Reviewed by Darin Fisher.

        Hook Chromium's WebIndexedDatabaseImpl up to IndexedDatabaseImpl
        https://bugs.webkit.org/show_bug.cgi?id=39216

        All of these functions are supposed to be passing around the origin since
        the caller of IndexedDatabaseImpl might not be able to pass in a Frame*
        object.  I tried to fix this in an ealier patch, but obviously messed up.

        Also change passing security origin strings to passing SecurityOrigin
        objects.

        No behavior change because Chromium was emulating the old behavior before
        even though the code wasn't properly hooked up.

        * storage/IndexedDatabase.h:
        * storage/IndexedDatabaseImpl.cpp:
        (WebCore::IndexedDatabaseImpl::open):
        * storage/IndexedDatabaseImpl.h:
        * storage/IndexedDatabaseRequest.cpp:
        (WebCore::IndexedDatabaseRequest::open):

2010-05-19  Ben Murdoch  <benm@google.com>

        Reviewed by Darin Adler.

        Touch events are marked DontEnum in DOMWindow.idl
        https://bugs.webkit.org/show_bug.cgi?id=39118

        Touch events are the only attribute event listeners on the
        window object that are marked DontEnum. For consistency allow
        them to be enumerated.

        * page/DOMWindow.idl: Remove DontEnum from touchcancel, touchend,
            touchstart and touchmove attributes.

2010-05-19  Simon Hausmann  <simon.hausmann@nokia.com>

        [Qt] Fix build warning

        NamedAttrMap.h has been renamed to NamedNodeMap.h

        * WebCore.pro:

2010-05-19  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        Add an HTML parsing benchmark
        https://bugs.webkit.org/show_bug.cgi?id=39338

        This benchmark parses the HTML5 specification 10 times and
        reports how long it takes.  It does this 21 times, discarding
        the first warm-up run, and then prints the average time and
        standard deviation.

        Sharking the benchmark correctly shows over 60% of the time spent under HTMLTokenizer::write().
        The numbers from the benchmark are rather consistent.  On my
        Mac Book Pro, I consistently see standard deviations < 2% of total time.

        * benchmarks/parser/html-parser.html: Added.
        * benchmarks/parser/resources/html5.html: Added.

2010-05-18  Yuzo Fujishima  <yuzo@google.com>

        Reviewed by Shinichiro Hamaji.

        Make CSS Parser properly handle only-for-pages pseudo-classes.

        A new Match category, PagePseudoClass, is introduced to distinguish
        only-for-pages pseudo-classes from others. A new symbol, pseudo_page,
        is introduced to handle them separately.

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

        * css/CSSGrammar.y:
        * css/CSSParser.cpp:
        (WebCore::CSSParser::createMarginAtRule):
        * css/CSSParser.h:
        * css/CSSSelector.cpp:
        (WebCore::CSSSelector::extractPseudoType):
        (WebCore::CSSSelector::selectorText):
        * css/CSSSelector.h:
        (WebCore::CSSSelector::):
        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::SelectorChecker::checkOneSelector):

2010-05-19  Adam Barth  <abarth@webkit.org>

        Reviewed by David Hyatt.

        Change the API of nextToken to distinguish between emitting a token and just running out of input
        https://bugs.webkit.org/show_bug.cgi?id=39349

        I'm not sure there's a functional difference with this patch yet, but
        as discussed with Eric, we need this to handle attributes.

        * html/HTML5Lexer.cpp:
        (WebCore::HTML5Lexer::reset):
        (WebCore::HTML5Lexer::nextToken):
        * html/HTML5Lexer.h:
        * html/HTML5Token.h:
        (WebCore::HTML5Token::HTML5Token):
        (WebCore::HTML5Token::clear):
        (WebCore::HTML5Token::beginStartTag):
        (WebCore::HTML5Token::beginEndTag):
        (WebCore::HTML5Token::beginCharacter):
        * html/HTML5Tokenizer.cpp:
        (WebCore::HTML5Tokenizer::write):

2010-05-18  Eric Seidel  <eric@webkit.org>

        Reviewed by Maciej Stachowiak.

        Refactor HTMLTokenizer::write to make it more readable and split out the lexer bits from flow control bits
        https://bugs.webkit.org/show_bug.cgi?id=39318

        No functional changes, only moving code into smaller functions.

        This code is already covered by numerous layout tests.

        HTML parsing benchmark shows this to be a wash.

        * dom/Tokenizer.h:
        * html/HTMLTokenizer.cpp:
        (WebCore::HTMLTokenizer::advance):
         - New funtion to encapulate code which will move into HTMLLexer eventually.
         - Use ALWAYS_INLINE to make sure compilers inline this large
           function (otherwise this patch is a regression).
        (WebCore::HTMLTokenizer::willWriteHTML):
         - New function to handle calling any pre-write delegates.
        (WebCore::HTMLTokenizer::didWriteHTML):
         - New function to handle calling any post-write delegates.
        (WebCore::HTMLTokenizer::write):
         - Call the new functions.
        * html/HTMLTokenizer.h:

2010-05-18  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        Make the HTML5 parser correctly parse <div>Hello</div>
        https://bugs.webkit.org/show_bug.cgi?id=39345

        Again, this patch is covered by a large number of LayoutTests.

        * html/HTML5Lexer.cpp:
        (WebCore::HTML5Lexer::HTML5Lexer):
        (WebCore::HTML5Lexer::reset):
        (WebCore::HTML5Lexer::nextToken):
        (WebCore::HTML5Lexer::emitCommentToken):
        (WebCore::HTML5Lexer::emitCharacter):
        (WebCore::HTML5Lexer::emitCurrentTagToken):
        * html/HTML5Lexer.h:
        * html/HTML5Token.h:
        (WebCore::HTML5Token::beginCharacter):
        (WebCore::HTML5Token::appendToCharacter):
        (WebCore::HTML5Token::characters):
        * html/HTML5Tokenizer.cpp:
        (WebCore::convertToOldStyle):

2010-05-18  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        Make the HTML5 parser actually parse <div></div>
        https://bugs.webkit.org/show_bug.cgi?id=39342

        This patch is covered by every LayoutTest.  Yes.  All of them.  :)

        * html/HTML5Lexer.cpp:
        (WebCore::toLowerCase):
        (WebCore::HTML5Lexer::HTML5Lexer):
        (WebCore::HTML5Lexer::nextToken):
        (WebCore::HTML5Lexer::emitCharacter):
        * html/HTML5Lexer.h:
        * html/HTML5Token.h:
        (WebCore::HTML5Token::HTML5Token):
        (WebCore::HTML5Token::beginStartTag):
        (WebCore::HTML5Token::beginEndTag):
        (WebCore::HTML5Token::appendToName):
        (WebCore::HTML5Token::type):
        (WebCore::HTML5Token::name):
        (WebCore::HTML5Token::selfClosing):
        (WebCore::HTML5Token::attrs):
        * html/HTML5Tokenizer.cpp:
        (WebCore::convertToOldStyle):
        (WebCore::HTML5Tokenizer::write):

2010-05-18  Tony Chang  <tony@chromium.org>

        Reviewed by Ojan Vafai.

        REGRESSION: crash in WebCore::CompositeEditCommand::splitTreeToNode when indenting in an empty li
        https://bugs.webkit.org/show_bug.cgi?id=38232

        Test: editing/execCommand/crash-indenting-list-item.html

        * editing/IndentOutdentCommand.cpp:
        (WebCore::IndentOutdentCommand::tryIndentingAsListItem):
        (WebCore::IndentOutdentCommand::indentIntoBlockquote):

2010-05-18  Kent Tamura  <tkent@chromium.org>

        Reviewed by Darin Adler.

        ':optional' pseudo selector should not be applied to <keygen> and <progress>
        https://bugs.webkit.org/show_bug.cgi?id=39292

        Test: fast/css/pseudo-required-optional-unapplied.html

        * html/HTMLKeygenElement.h:
        (WebCore::HTMLKeygenElement::isOptionalFormControl):
          Add isOptionalFormControl() returning false.
          HTMLKeygenElement inherits HTMLSelectElement, which should return true
          for isOptionalFormControl(). However, <keygen> is not :optional
          according to the standard.
        * html/HTMLProgressElement.h:
          Remove isOptionalFormControl().

2010-05-18  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        Implement the DOCTYPE states for the HTML5 lexer
        https://bugs.webkit.org/show_bug.cgi?id=39335

        * html/HTML5Lexer.cpp:
        (WebCore::HTML5Lexer::nextToken):
        (WebCore::emitCurrentDoctypeToken):
        * html/HTML5Lexer.h:

2010-05-18  Tony Chang  <tony@chromium.org>

        Reviewed by Ojan Vafai.

        [chromium] ignore IME events if the keydown event was prevented
        https://bugs.webkit.org/show_bug.cgi?id=37692

        A manual test to verify the IME behavior since the existing methods of
        textInputController test at a lower level than the fix.

        * manual-tests/ime-keydown-preventdefault.html: Added.

2010-05-18  Sam Weinig  <sam@webkit.org>

        Fix the build for platforms that don't always include UnusedParam.h

        * dom/Attribute.cpp:

2010-05-18  MORITA Hajime  <morrita@google.com>

        Reviewed by Kent Tamura.

        [Chromium] Windows: Determinate progress bar should have glossy overlay
        https://bugs.webkit.org/show_bug.cgi?id=39269
        
        - Moved animation code from RenderThemeChromiumWin to chromium tree
          because it should be behind the theme implementation, which lives
          in chromium tree.
        - Passed current time to the bridge, which will be used to compute
          the state of the theme animation.
        
        No new tests, animation effect can be confirmed only manually.
        
        * platform/chromium/ChromiumBridge.h:
        * rendering/RenderProgress.h:
        (WebCore::RenderProgress::animationStartTime): Added.
        * rendering/RenderThemeChromiumWin.cpp:
        (WebCore::RenderThemeChromiumWin::animationDurationForProgressBar):
        (WebCore::RenderThemeChromiumWin::paintProgressBar):

2010-05-18  Sam Weinig  <sam@webkit.org>

        Fix release build.

        * dom/Attribute.cpp:
        (WebCore::Attribute::unbindAttr):

2010-05-18  Sam Weinig  <sam@webkit.org>

        Reviewed by Maciej Stachowiak.

        Move Attr pointer from Attribute to a global HashMap.
        https://bugs.webkit.org/show_bug.cgi?id=39337
        <rdar://problem/8001168>

        Shaves another word off of Attribute.

        * dom/Attr.cpp:
        (WebCore::Attr::Attr):
        (WebCore::Attr::~Attr):
        * dom/Attribute.cpp:
        (WebCore::attributeAttrMap):
        (WebCore::Attribute::attr):
        (WebCore::Attribute::createAttrIfNeeded):
        (WebCore::Attribute::bindAttr):
        (WebCore::Attribute::unbindAttr):
        * dom/Attribute.h:
        (WebCore::Attribute::Attribute):

2010-05-18  Jakob Petsovits  <jpetsovits@rim.com>

        Unreviewed, forgot to svn add source file in r59619.
        http://trac.webkit.org/changeset/59619

        * platform/image-decoders/openvg: Added.
        * platform/image-decoders/openvg/ImageDecoderOpenVG.cpp: Added.
        (WebCore::RGBA32Buffer::asNewNativeImage):

2010-05-18  Yaar Schnitman  <yaar@chromium.org>

        Unreviewed, rolling out r59693.
        http://trac.webkit.org/changeset/59693
        https://bugs.webkit.org/show_bug.cgi?id=37815

        Broke GTK Release

        * Android.jscbindings.mk:
        * CMakeLists.txt:
        * GNUmakefile.am:
        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSBindingsAllInOne.cpp:
        * bindings/js/JSCallbackData.cpp:
        (WebCore::JSCallbackData::invokeCallback):
        * bindings/js/JSEventListener.cpp:
        (WebCore::JSEventListener::handleEvent):
        * bindings/js/JSInjectedScriptHostCustom.cpp:
        (WebCore::InjectedScriptHost::createInjectedScript):
        * bindings/js/JSMainThreadExecState.cpp: Removed.
        * bindings/js/JSMainThreadExecState.h: Removed.
        * bindings/js/ScheduledAction.cpp:
        (WebCore::ScheduledAction::executeFunctionInContext):
        (WebCore::ScheduledAction::execute):
        * bindings/js/ScheduledAction.h:
        * bindings/js/ScriptController.cpp:
        (WebCore::ScriptController::evaluateInWorld):
        * bindings/js/ScriptController.h:
        * bindings/js/ScriptFunctionCall.cpp:
        (WebCore::ScriptFunctionCall::call):
        * bindings/objc/ObjCEventListener.mm:
        * bindings/objc/WebScriptObject.mm:
        (-[WebScriptObject callWebScriptMethod:withArguments:]):
        (-[WebScriptObject evaluateWebScript:]):
        * bindings/scripts/CodeGeneratorObjC.pm:
        * bindings/scripts/test/ObjC/DOMTestCallback.mm:
        (-[DOMTestCallback callbackWithClass1Param:]):
        (-[DOMTestCallback callbackWithClass2Param:strArg:]):
        (-[DOMTestCallback callbackWithNonBoolReturnType:]):
        (-[DOMTestCallback customCallback:class6Param:]):
        * bindings/scripts/test/ObjC/DOMTestInterface.mm:
        * bindings/scripts/test/ObjC/DOMTestObj.mm:
        (-[DOMTestObj readOnlyIntAttr]):
        (-[DOMTestObj readOnlyStringAttr]):
        (-[DOMTestObj readOnlyTestObjAttr]):
        (-[DOMTestObj intAttr]):
        (-[DOMTestObj setIntAttr:]):
        (-[DOMTestObj longLongAttr]):
        (-[DOMTestObj setLongLongAttr:]):
        (-[DOMTestObj unsignedLongLongAttr]):
        (-[DOMTestObj setUnsignedLongLongAttr:]):
        (-[DOMTestObj stringAttr]):
        (-[DOMTestObj setStringAttr:]):
        (-[DOMTestObj testObjAttr]):
        (-[DOMTestObj setTestObjAttr:]):
        (-[DOMTestObj attrWithException]):
        (-[DOMTestObj setAttrWithException:]):
        (-[DOMTestObj attrWithSetterException]):
        (-[DOMTestObj setAttrWithSetterException:]):
        (-[DOMTestObj attrWithGetterException]):
        (-[DOMTestObj setAttrWithGetterException:]):
        (-[DOMTestObj customAttr]):
        (-[DOMTestObj setCustomAttr:]):
        (-[DOMTestObj scriptStringAttr]):
        (-[DOMTestObj voidMethod]):
        (-[DOMTestObj voidMethodWithArgs:strArg:objArg:]):
        (-[DOMTestObj intMethod]):
        (-[DOMTestObj intMethodWithArgs:strArg:objArg:]):
        (-[DOMTestObj objMethod]):
        (-[DOMTestObj objMethodWithArgs:strArg:objArg:]):
        (-[DOMTestObj methodThatRequiresAllArgs:objArg:]):
        (-[DOMTestObj methodThatRequiresAllArgsAndThrows:objArg:]):
        (-[DOMTestObj serializedValue:]):
        (-[DOMTestObj methodWithException]):
        (-[DOMTestObj customMethod]):
        (-[DOMTestObj customMethodWithArgs:strArg:objArg:]):
        (-[DOMTestObj customArgsAndException:]):
        (-[DOMTestObj addEventListener:listener:useCapture:]):
        (-[DOMTestObj removeEventListener:listener:useCapture:]):
        (-[DOMTestObj withDynamicFrame]):
        (-[DOMTestObj withDynamicFrameAndArg:]):
        (-[DOMTestObj withDynamicFrameAndOptionalArg:optionalArg:]):
        (-[DOMTestObj withDynamicFrameAndUserGesture:]):
        (-[DOMTestObj withDynamicFrameAndUserGestureASAD:optionalArg:]):
        (-[DOMTestObj withScriptStateVoid]):
        (-[DOMTestObj withScriptStateObj]):
        (-[DOMTestObj withScriptStateVoidException]):
        (-[DOMTestObj withScriptStateObjException]):
        (-[DOMTestObj methodWithOptionalArg:]):
        (-[DOMTestObj methodWithNonOptionalArgAndOptionalArg:opt:]):
        (-[DOMTestObj methodWithNonOptionalArgAndTwoOptionalArgs:opt1:opt2:]):
        * bindings/v8/ScriptController.cpp:
        * bindings/v8/ScriptController.h:
        * html/HTMLFrameElementBase.cpp:
        (WebCore::HTMLFrameElementBase::isURLAllowed):

2010-05-18  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        Implement comment states for HTML5 lexer
        https://bugs.webkit.org/show_bug.cgi?id=39334

        * html/HTML5Lexer.cpp:
        (WebCore::HTML5Lexer::nextToken):

2010-05-18  Anders Carlsson  <andersca@apple.com>

        Reviewed by Sam Weinig.

        Move all member variables from MappedAttribute to Attribute.
        https://bugs.webkit.org/show_bug.cgi?id=39336
        <rdar://problem/8000853>

        This saves one word because we no longer have any virtual member functions in Attribute, and
        thus no vtable pointer.
        
        I plan to remove MappedAttribute altogether in a subsequent commit.

        * Android.mk:
        * GNUmakefile.am:
        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::styleForElement):
        * dom/Attribute.cpp:
        (WebCore::Attribute::clone):
        * dom/Attribute.h:
        (WebCore::Attribute::create):
        (WebCore::Attribute::style):
        (WebCore::Attribute::decl):
        (WebCore::Attribute::setDecl):
        (WebCore::Attribute::isMappedAttribute):
        (WebCore::Attribute::Attribute):
        * dom/MappedAttribute.cpp: Removed.
        * dom/MappedAttribute.h:
        (WebCore::MappedAttribute::create):
        (WebCore::MappedAttribute::MappedAttribute):
        (WebCore::toMappedAttribute):
        * dom/NamedMappedAttrMap.cpp:
        (WebCore::NamedMappedAttrMap::declCount):
        (WebCore::NamedMappedAttrMap::mapsEquivalent):
        * dom/StyledElement.cpp:
        (WebCore::StyledElement::attributeChanged):
        * svg/SVGSVGElement.cpp:
        (WebCore::updateCSSForAttribute):
        * svg/SVGStyledElement.cpp:
        (WebCore::SVGStyledElement::getPresentationAttribute):

2010-05-18  Tony Chang  <tony@chromium.org>

        Reviewed by Darin Adler.

        https://bugs.webkit.org/show_bug.cgi?id=24943
        Command-B and Command-I do not generate keydown events in contentEditable regions.

        * manual-tests/style-keypress-events.html: Added.

2010-05-18  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        Add more state to the HTML5 lexer
        https://bugs.webkit.org/show_bug.cgi?id=39333

        This code is just transliteration from the spec.

        * html/HTML5Lexer.cpp:
        (WebCore::HTML5Lexer::HTML5Lexer):
        (WebCore::HTML5Lexer::nextToken):
        * html/HTML5Lexer.h:

2010-05-18  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        Implement two more lexer states
        https://bugs.webkit.org/show_bug.cgi?id=39298

        No tests because Eric is still working on wiring up the lexer to the
        test harness.

        * html/HTML5Lexer.cpp:
        (WebCore::HTML5Lexer::nextToken):
        (WebCore::HTML5Lexer::emitParseError):
        (WebCore::HTML5Lexer::emitCurrentTagToken):
        * html/HTML5Lexer.h:

2010-05-18  Brady Eidson  <beidson@apple.com>

        Reviewed by Maciej Stachowiak.

        Repro crash with many Google image search results
        <rdar://problem/7685669> and https://bugs.webkit.org/show_bug.cgi?id=39323

        When an iframe has a plugin resource as its src, that case bypassed the plugin sandboxing checks and continued to load
        the data for the plugin resource. It handed that data off to a nonexistent Widget, causing a null deref and the crash.

        By replacing PluginDocuments in sandboxes iframes with a new "SinkDocument" that just acts as a data sink, we prevent the
        crash and also prevent actually loading the plugin binaries.

        I filed https://bugs.webkit.org/show_bug.cgi?id=39330 to follow up and let us cancel the load as soon as we know we should.

        Test: fast/loader/sandboxed-plugin-crash.html

        * CMakeLists.txt:
        * GNUmakefile.am:
        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:

        * loader/DocumentWriter.cpp:
        (WebCore::DocumentWriter::begin): If the created document is a PluginDocument and the plugin sandbox flag is set,
          replace it with a SinkDocument.

        * loader/PluginDocument.h:
        (WebCore::PluginDocument::isPluginDocument): Make public (it was already public at the Document.h level).

        Add a simple document/tokenizer pair that simply presents a blank HTML document and acts as a data sink for whatever
        data is handed to it:
        * loader/SinkDocument.cpp: Added.
        (WebCore::SinkTokenizer::SinkTokenizer):
        (WebCore::SinkTokenizer::write):
        (WebCore::SinkTokenizer::isWaitingForScripts):
        (WebCore::SinkTokenizer::wantsRawData):
        (WebCore::SinkTokenizer::writeRawData):
        (WebCore::SinkTokenizer::stopParsing):
        (WebCore::SinkTokenizer::finish):
        (WebCore::SinkDocument::SinkDocument):
        (WebCore::SinkDocument::createTokenizer):
        * loader/SinkDocument.h: Added.
        (WebCore::SinkDocument::create):

2010-05-18  Sam Weinig  <sam@webkit.org>

        Reviewed by Anders Carlsson.

        https://bugs.webkit.org/show_bug.cgi?id=39321
        Reduce the size of ListHashSets used by Document
        <rdar://problem/7999388>

        Reduce Membuster peak memory usage by ~450K by reducing the pool sizes
        of the ListHashSets used by Document.

        * dom/Document.cpp:
        (WebCore::Document::addStyleSheetCandidateNode):
        (WebCore::Document::recalcStyleSelector):
        * dom/Document.h:

2010-05-18  Kenneth Rohde Christiansen  <kenneth@webkit.org>

        Rubberstamped by Simon Hausmann.

        Return null when creating an ImageBuffer failed, due to for
        instance a nulled pixmap.

        * platform/graphics/qt/ImageBufferQt.cpp:
        (WebCore::ImageBufferData::ImageBufferData):
        (WebCore::ImageBuffer::ImageBuffer):

2010-05-18  Jian Li  <jianli@chromium.org>

        Reviewed by Dmitry Titov.

        Fix bug 39285: fast/files/file-reader.html is timing out on all mac bots.
        https://bugs.webkit.org/show_bug.cgi?id=39285

        The timeout is caused by 59659 that changed the GC timer to 0 and thus
        triggered a bug in FileReader code. The fix is to add more states so
        that hasPendingActivity() can do the check correctly.

        * html/FileReader.cpp:
        (WebCore::FileReader::FileReader):
        (WebCore::FileReader::hasPendingActivity):
        (WebCore::FileReader::readInternal):
        (WebCore::FileReader::terminate):
        (WebCore::FileReader::didStart):
        (WebCore::FileReader::didGetSize):
        (WebCore::FileReader::didRead):
        (WebCore::FileReader::didFinish):
        (WebCore::FileReader::didFail):
        (WebCore::FileReader::readyState):
        (WebCore::FileReader::result):
        * html/FileReader.h:
        (WebCore::FileReader::):

2010-05-18  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Darin Adler.

        Clean up GraphicsLayer naming code
        https://bugs.webkit.org/show_bug.cgi?id=39316

        Move code that generates a name for the GraphicsLayer (used in debug builds only) into
        a new nameForLayer() method. Use it when naming the foreground layer.

        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::createGraphicsLayer):
        (WebCore::RenderLayerBacking::updateForegroundLayer):
        (WebCore::RenderLayerBacking::nameForLayer):
        * rendering/RenderLayerBacking.h:

2010-05-18  Justin Schuh  <jschuh@chromium.org>

        Reviewed by Adam Barth.

        Moving frame.src checks out of the bindings
        https://bugs.webkit.org/show_bug.cgi?id=37815

        Moved JavaScript frame.src checks out of bindings and into
        HTMLFrameElementBase. Added main thread state stack to JavaScriptCore
        so ExecState is available inside core DOM. Updated affected bindings
        (except for GObject, which will need to be updated to avoid origin
        failures inside native code).

        * Android.jscbindings.mk:
        * CMakeLists.txt:
        * GNUmakefile.am:
        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSBindingsAllInOne.cpp:
        * bindings/js/JSCallbackData.cpp:
        (WebCore::JSCallbackData::invokeCallback):
        * bindings/js/JSEventListener.cpp:
        (WebCore::JSEventListener::handleEvent):
        * bindings/js/JSInjectedScriptHostCustom.cpp:
        (WebCore::InjectedScriptHost::createInjectedScript):
        * bindings/js/JSMainThreadExecState.cpp: Added.
        * bindings/js/JSMainThreadExecState.h: Added.
        (WebCore::JSMainThreadExecState::currentState):
        (WebCore::JSMainThreadExecState::call):
        (WebCore::JSMainThreadExecState::evaluate):
        (WebCore::JSMainThreadExecState::JSMainThreadExecState):
        (WebCore::JSMainThreadExecState::~JSMainThreadExecState):
        (WebCore::JSMainThreadNullState::JSMainThreadNullState):
        * bindings/js/ScheduledAction.cpp:
        (WebCore::ScheduledAction::executeFunctionInContext):
        (WebCore::ScheduledAction::execute):
        * bindings/js/ScheduledAction.h:
        * bindings/js/ScriptController.cpp:
        (WebCore::ScriptController::evaluateInWorld):
        (WebCore::ScriptController::canAccessFromCurrentOrigin):
        * bindings/js/ScriptController.h:
        * bindings/js/ScriptFunctionCall.cpp:
        (WebCore::ScriptFunctionCall::call):
        * bindings/objc/ObjCEventListener.mm:
        * bindings/objc/WebScriptObject.mm:
        (-[WebScriptObject callWebScriptMethod:withArguments:]):
        (-[WebScriptObject evaluateWebScript:]):
        * bindings/scripts/CodeGeneratorObjC.pm:
        * bindings/scripts/test/ObjC/DOMTestCallback.mm:
        (-[DOMTestCallback callbackWithClass1Param:]):
        (-[DOMTestCallback callbackWithClass2Param:strArg:]):
        (-[DOMTestCallback callbackWithNonBoolReturnType:]):
        (-[DOMTestCallback customCallback:class6Param:]):
        * bindings/scripts/test/ObjC/DOMTestInterface.mm:
        * bindings/scripts/test/ObjC/DOMTestObj.mm:
        (-[DOMTestObj readOnlyIntAttr]):
        (-[DOMTestObj readOnlyStringAttr]):
        (-[DOMTestObj readOnlyTestObjAttr]):
        (-[DOMTestObj intAttr]):
        (-[DOMTestObj setIntAttr:]):
        (-[DOMTestObj longLongAttr]):
        (-[DOMTestObj setLongLongAttr:]):
        (-[DOMTestObj unsignedLongLongAttr]):
        (-[DOMTestObj setUnsignedLongLongAttr:]):
        (-[DOMTestObj stringAttr]):
        (-[DOMTestObj setStringAttr:]):
        (-[DOMTestObj testObjAttr]):
        (-[DOMTestObj setTestObjAttr:]):
        (-[DOMTestObj attrWithException]):
        (-[DOMTestObj setAttrWithException:]):
        (-[DOMTestObj attrWithSetterException]):
        (-[DOMTestObj setAttrWithSetterException:]):
        (-[DOMTestObj attrWithGetterException]):
        (-[DOMTestObj setAttrWithGetterException:]):
        (-[DOMTestObj customAttr]):
        (-[DOMTestObj setCustomAttr:]):
        (-[DOMTestObj scriptStringAttr]):
        (-[DOMTestObj voidMethod]):
        (-[DOMTestObj voidMethodWithArgs:strArg:objArg:]):
        (-[DOMTestObj intMethod]):
        (-[DOMTestObj intMethodWithArgs:strArg:objArg:]):
        (-[DOMTestObj objMethod]):
        (-[DOMTestObj objMethodWithArgs:strArg:objArg:]):
        (-[DOMTestObj methodThatRequiresAllArgs:objArg:]):
        (-[DOMTestObj methodThatRequiresAllArgsAndThrows:objArg:]):
        (-[DOMTestObj serializedValue:]):
        (-[DOMTestObj methodWithException]):
        (-[DOMTestObj customMethod]):
        (-[DOMTestObj customMethodWithArgs:strArg:objArg:]):
        (-[DOMTestObj customArgsAndException:]):
        (-[DOMTestObj addEventListener:listener:useCapture:]):
        (-[DOMTestObj removeEventListener:listener:useCapture:]):
        (-[DOMTestObj withDynamicFrame]):
        (-[DOMTestObj withDynamicFrameAndArg:]):
        (-[DOMTestObj withDynamicFrameAndOptionalArg:optionalArg:]):
        (-[DOMTestObj withDynamicFrameAndUserGesture:]):
        (-[DOMTestObj withDynamicFrameAndUserGestureASAD:optionalArg:]):
        (-[DOMTestObj withScriptStateVoid]):
        (-[DOMTestObj withScriptStateObj]):
        (-[DOMTestObj withScriptStateVoidException]):
        (-[DOMTestObj withScriptStateObjException]):
        (-[DOMTestObj methodWithOptionalArg:]):
        (-[DOMTestObj methodWithNonOptionalArgAndOptionalArg:opt:]):
        (-[DOMTestObj methodWithNonOptionalArgAndTwoOptionalArgs:opt1:opt2:]):
        * bindings/v8/ScriptController.cpp:
        (WebCore::ScriptController::canAccessFromCurrentOrigin):
        * bindings/v8/ScriptController.h:
        * html/HTMLFrameElementBase.cpp:
        (WebCore::HTMLFrameElementBase::isURLAllowed):

2010-05-18  Drew Wilson  <atwilson@chromium.org>

        Unreviewed: Speculative build fix for Chromium win.

        * platform/graphics/skia/SkiaFontWin.cpp: Properly set inlineCapacity.

2010-05-18  Drew Wilson  <atwilson@chromium.org>

        Unreviewed fix for Chromium build break.

        * platform/graphics/skia/SkiaFontWin.cpp: Now set inlineCapacity param.

2010-05-18  Daniel Cheng  <dcheng@chromium.org>

        Reviewed by Darin Adler, Jian Li.

        DragData::asURL() shouldn't do file validity checks
        https://bugs.webkit.org/show_bug.cgi?id=38711

        There's no point to trying to make sure the file is valid in
        DragData::asURL(). It's better to ask for forgiveness than to ask for
        permission, since asking for permission is prone to race conditions
        and results in unnecessary I/O.  Consumers of this function either:
        - need to verify the file exists themselves (e.g. the loader)
        - don't care about file validity (rich text drag-and-drop)

        * platform/chromium/DragDataChromium.cpp:
        (WebCore::DragData::asURL):

2010-05-18  Timothy Hatcher  <timothy@apple.com>

        Fix a handful of various localization issues in the Web Inspector.

        * Localize strings that where not localized.
        * Make WebInspector.UIString work without bind.
        * Always pass WebInspector.UIString to Number.secondsToString and Number.bytesToString.
        * Never pass a variable to WebInspector.UIString, since that prevents auto-generation.
        * Use an ellipsis instead of three periods.

        https://webkit.org/b/39303
        rdar://problem/7997101

        Reviewed by Adam Roben.

        * English.lproj/localizedStrings.js:
        * inspector/front-end/AuditRules.js:
        (WebInspector.AuditRules.GzipRule.prototype.doRun):
        (WebInspector.AuditRules.CookieSizeRule.prototype.processCookies):
        (WebInspector.AuditRules.StaticCookielessRule.prototype.processCookies):
        * inspector/front-end/ConsoleView.js:
        (WebInspector.ConsoleView):
        * inspector/front-end/ImageView.js:
        (WebInspector.ImageView.prototype.contentTabSelected):
        * inspector/front-end/ProfileDataGridTree.js:
        (WebInspector.ProfileDataGridNode.prototype.get data.formatMilliseconds):
        (WebInspector.ProfileDataGridNode.prototype.get data):
        * inspector/front-end/ResourcesPanel.js:
        (WebInspector.ResourceTimeCalculator.prototype.formatValue):
        (WebInspector.ResourceTransferTimeCalculator.prototype.formatValue):
        (WebInspector.ResourceTransferDurationCalculator.prototype.formatValue):
        (WebInspector.ResourceTransferSizeCalculator.prototype.formatValue):
        * inspector/front-end/ScriptsPanel.js:
        (WebInspector.ScriptsPanel.prototype._registerShortcuts):
        * inspector/front-end/SourceFrame.js:
        (WebInspector.SourceFrame.prototype._contextMenu):
        * inspector/front-end/TimelineOverviewPane.js:
        (WebInspector.TimelineOverviewCalculator):
        (WebInspector.TimelineOverviewCalculator.prototype.formatValue):
        * inspector/front-end/TimelinePanel.js:
        (WebInspector.TimelinePanel):
        (WebInspector.TimelineCalculator):
        (WebInspector.TimelineCalculator.prototype.formatValue):
        (WebInspector.TimelinePanel.FormattedRecord.prototype._generateAggregatedInfo):
        (WebInspector.TimelinePanel.FormattedRecord.prototype._generatePopupContent):
        (WebInspector.TimelinePanel.FormattedRecord.prototype._getRecordDetails):
        (WebInspector.TimelinePanel.PopupContentHelper.prototype._appendTextRow):
        (WebInspector.TimelinePanel.PopupContentHelper.prototype._appendElementRow):
        * inspector/front-end/inspector.js:
        (WebInspector.loaded):
        (WebInspector.setRecordingProfile):
        (WebInspector.UIString):

2010-05-18  Sam Weinig  <sam@webkit.org>

        Another attempt to fix the build.

        * css/CSSCursorImageValue.cpp:

2010-05-18  Adam Roben  <aroben@apple.com>

        Make accelerated compositing work on machines that don't support
        hardware vertex processing

        Fixes <http://webkit.org/b/39299> <rdar://problem/7997692> Accelerated
        compositing on Windows doesn't work on machines that don't support
        hardware vertex processing, but should

        Reviewed by Eric Carlson.

        * platform/graphics/win/WKCACFLayerRenderer.cpp:
        (WebCore::WKCACFLayerRenderer::createRenderer): Query the device
        capabilities to decide whether to request hardware or software vertex
        processing.

2010-05-18  Adam Roben  <aroben@apple.com>

        Make WKCACFLayerRenderer robust against temporary failure of
        Direct3DCreate9 and IDirect3D9::CreateDevice

        For a short time after waking from sleep, Direct3DCreate9() will
        return an IDirect3D9 for which IDirect3D9::CreateDevice will always
        fail. Also during this time period, IDirect3D9::CreateDevice
        will fail even for non-bad IDirect3D9s. (It will later start
        succeeding.) WKCACFLayerRenderer now works around this behavior by
        detecting when it might be in this situation and calling these
        functions again later.

        Fixes <http://webkit.org/b/39297> <rdar://problem/7997431> WebView
        doesn't repaint until page reloads when page using hardware
        acceleration loads just after waking from sleep

        Reviewed by John Sullivan.

        * manual-tests/crash-and-no-repaint-after-wake-from-sleep.html:
        Renamed from WebCore/manual-tests/crash-after-wake-from-sleep.html.
        Modified to also include instructions for reproducing this bug.

        * platform/graphics/win/WKCACFLayerRenderer.cpp:
        (WebCore::WKCACFLayerRenderer::WKCACFLayerRenderer): Replaced
        m_triedToCreateD3DRenderer with m_mightBeAbleToCreateDeviceLater. The
        new member is initialized to true, since we haven't even tried to
        create a device once yet.
        (WebCore::WKCACFLayerRenderer::createRenderer): If we already have a
        D3D device, or we don't have one and are sure that we won't be able to
        create one later, just return the previously-created device, if any.
        We assume that we won't be able to create a device later if this
        function fails, unless the function fails due to CreateDevice failing.
        As noted above, CreateDevice will sometimes temporarily fail and then
        later start working again. When CreateDevice fails, we also assume
        that we might have a bad IDirect3D9, so we get rid of the one we have
        so a new (and hopefully non-bad) one will be allocated later.
        (WebCore::WKCACFLayerRenderer::destroyRenderer): Reset
        m_mightBeAbleToCreateDeviceLater to true, since we no longer have a
        device.
        (WebCore::WKCACFLayerRenderer::paint): Before trying to paint, try to
        create our D3D device and renderer. If this fails, we bail out, but if
        we think we might be able to create a device later we schedule another
        paint (via renderSoon()) so that we'll try again soon.

        * platform/graphics/win/WKCACFLayerRenderer.h: Replaced
        m_triedToCreateD3DRenderer with m_mightBeAbleToCreateDeviceLater.

2010-05-18  Adam Roben  <aroben@apple.com>

        Fix a crash when a page that uses accelerated compositing loads soon
        after the computer wakes from sleep

        The set-up:

        For a short time after waking from sleep, IDirect3D9::CreateDevice
        will fail. This caused WKCACFLayerRenderer::createRenderer to fail,
        and meant that WKCACFLayerRenderer never allocated a root layer.
        WebView wouldn't notice that createRenderer failed, and would go ahead
        and try to use the root layer anyway, resulting in a crash.

        The fix:

        We now allocate the root layer (and all the other members of
        WKCACFLayerRenderer that aren't dependent on having an
        IDirect3DDevice9) in WKCACFLayerRenderer's constructor. This way the
        layers will always be present, even when creating the D3D device
        fails.

        There are two remaining problems:
          1) This results in slightly more memory usage in the case where
             CreateDevice fails.
          2) Once we get into this bad state, the WebView doesn't repaint
             until we navigate somewhere else.

        (2) is covered by
        <http://webkit.org/b/39297>/<rdar://problem/7997431>. We'll fix it by
        retrying CreateDevice later in hopes that it will succeed after more
        time has passed. This will in turn fix (1). (We should never end up in
        a case where CreateDevice fails forever because we already did some
        preliminary checks in acceleratedCompositingAvailable().)

        Fixes <http://webkit.org/b/39295> <rdar://problem/7971319> Crash
        (preceded by assertion) in WKCACFLayerRenderer::setNeedsDisplay when
        computer wakes from sleep on particular page

        Reviewed by John Sullivan.

        * manual-tests/crash-after-wake-from-sleep.html: Added. This
        is the Poster Circle demo from webkit.org/blog, but modified to
        automatically reload every 5 seconds and with instructions to put the
        computer to sleep and wake it up again.

        * platform/graphics/win/WKCACFLayerRenderer.cpp:
        (WebCore::WKCACFLayerRenderer::WKCACFLayerRenderer): Moved code to
        initialize m_context, m_renderContext, and m_*Layer here...
        (WebCore::WKCACFLayerRenderer::createRenderer): ...from here.

2010-05-18  Adam Roben  <aroben@apple.com>

        Remove an unused member variable from WKCACFLayerRenderer

        Rubber-stamped by Ada Chan.

        * platform/graphics/win/WKCACFLayerRenderer.h: Removed m_viewLayer,
        which is unused.

2010-05-18  Anders Carlsson  <andersca@apple.com>

        Reviewed by Sam Weinig.

        Allocate the m_preloads list hash set dynamically and free it when done.
        https://bugs.webkit.org/show_bug.cgi?id=39309
        <rdar://problem/7998495>

        This saves about 6000 bytes on a fully loaded document.

        * loader/DocLoader.cpp:
        (WebCore::DocLoader::requestPreload):
        (WebCore::DocLoader::clearPreloads):
        * loader/DocLoader.h:

2010-05-18  Anders Carlsson  <andersca@apple.com>

        Revert unintended indentation and unnecessary nested name specifier.

        * rendering/RenderBlock.cpp:
        (WebCore::clipOutPositionedObjects):
        (WebCore::RenderBlock::insertPositionedObject):

2010-05-18  Anders Carlsson  <andersca@apple.com>

        Reviewed by Sam Weinig.

        Add an inlineCapacity template parameter to ListHashSet and use it to shrink the positioned object list hash set.
        https://bugs.webkit.org/show_bug.cgi?id=39304
        <rdar://problem/7998366>

        Set the inlineCapacity for the positionedObjects ListHashSet to 4 instead of 256. Since a RenderBlock usually has 
        few positioned objects, this saves memory.

        * WebCore.base.exp:
        * rendering/RenderBlock.cpp:
        (WebCore::clipOutPositionedObjects):
        (WebCore::RenderBlock::insertPositionedObject):
        * rendering/RenderBlock.h:
        (WebCore::RenderBlock::positionedObjects):

2010-05-17  Sam Weinig  <sam@webkit.org>

        Reviewed by Darin Adler.

        https://bugs.webkit.org/show_bug.cgi?id=39258
        Remove NamedAttrMap residual gunk

        Replace NamedAttrMap.h/cpp with NamedNodeMap.h/cpp which was the class
        it contained.

        * CMakeLists.txt:
        * GNUmakefile.am:
        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/v8/custom/V8NamedNodesCollection.cpp:
        * dom/NamedAttrMap.cpp: Removed.
        * dom/NamedAttrMap.h: Removed.
        * dom/NamedNodeMap.cpp: Copied from dom/NamedAttrMap.cpp.
        * dom/NamedNodeMap.h: Replaced with dom/NamedAttrMap.h.
        * editing/ReplaceNodeWithSpanCommand.cpp:
        * platform/chromium/ClipboardChromium.cpp:

2010-05-18  Brady Eidson  <beidson@apple.com>

        Reviewed by Eric Carlson.

        <rdar://problem/7993468> REGRESSION (r58586): Audio doesn't play on first click of play button at NPR.org

        NPR swallows the first mouse click on the play button, calls load() on the element, then waits for the
        canplay event to come in before calling play itself.

        After the site specific hack added in r58586, we disallowed play() from within the canplay event handler.
        By tracking whether a load() was triggered by a user gesture, we can differentiate between the original
        canplay event that we meant to ignore and the one resulting from the first mouse click which we want to honor.
        
        No new tests. (Currently no way to test such site specific hack behavior)

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::HTMLMediaElement):
        (WebCore::HTMLMediaElement::load): Set the m_loadInitiatedByUserGesture flag
        (WebCore::HTMLMediaElement::play): Only apply the site specific hack if the load wasn't initiated by a user gesture.
        * html/HTMLMediaElement.h:

2010-05-18  Jakob Petsovits  <jpetsovits@rim.com>

        Reviewed by Dirk Schulze.

        [OpenVG] Fix stupid build errors from the OpenVG Path commit
        https://bugs.webkit.org/show_bug.cgi?id=39228

        * platform/graphics/openvg/PainterOpenVG.cpp:
        (WebCore::PainterOpenVG::clipPath):
        * platform/graphics/openvg/PathOpenVG.cpp:
        (WebCore::Path::transform):

2010-05-18  Chris Jerdonek  <cjerdonek@webkit.org>

        Reviewed by Darin Adler.

        Refactored FrameLoader::isDocumentSandboxed() from a private member function
        to a static, non-member, non-friend function.

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

        Making this function non-private lets us make FrameLoader::createWindow()
        a non-member function in a subsequent patch.  We also made it non-member
        rather than member to increase encapsulation and limit the number of
        public functions with access to private FrameLoader data.

        No new functionality, so no new tests.

        * loader/FrameLoader.cpp:
        (WebCore::isDocumentSandboxed):
          - Moved this function from a private member function of FrameLoader
            to a static, non-member, non-friend function.
        (WebCore::FrameLoader::createWindow):
          - Updated the call to isDocumentSandboxed().
        (WebCore::FrameLoader::submitForm):
          - Updated the call to isDocumentSandboxed().
        (WebCore::FrameLoader::requestObject):
          - Updated the call to isDocumentSandboxed().
        (WebCore::FrameLoader::shouldAllowNavigation):
          - Updated the call to isDocumentSandboxed().
        * loader/FrameLoader.h:
          - Removed isDocumentSandboxed() and added a FIXME to move
            createWindow() out of the FrameLoader class.

2010-05-08  Robert Hogan  <robert@roberthogan.net>

        Reviewed by Simon Hausmann.

        [Qt] Fix http/tests/xmlhttprequest/cross-origin-no-authorization.html
             and http/tests/xmlhttprequest/cross-origin-authorization.html

        QHttpNetworkRequest adds Authorization and Cookie headers to XHRs
        without knowing if this is valid behaviour or not. In order to allow
        Qt to decide whether Cookie/Authorization headers should be added
        to an XHR QtWebKit needs to use an attribute added to QNetworkRequest.
        These new attributes are: QNetworkRequest::CookieLoadControlAttribute,
        QNetworkRequest::CookieSaveControlAttribute,and
        QNetworkRequest::AuthenticationReuseControlAttribute.

        QtWebKit will set QNetworkRequest::AuthenticationReuseControlAttribute to false
        unless withCredentials is set to true in the XHR.

        QtWebkit will set CookieLoad/SaveControlAttribute to false unless withCredentials
        is set to true in the XHR.

        Qt will pass the values onto QHttpNetworkRequest and this will permit
        the Qt network access processing to decide whether or not to add either
        or both of the Cookie/Authorisation headers, and whether to save cookies
        returned from such requests. By default the attribute
        will always be true so unless QtWebKit sets it to false normal
        header processing is unaffected.

        The Qt part of these changes was merged at: http://gitorious.org/qt/qt/merge_requests/592

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

        * platform/network/qt/ResourceRequestQt.cpp:
        (WebCore::ResourceRequest::toNetworkRequest):

2010-05-18  Zoltan Herczeg  <zherczeg@webkit.org>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] Implementing clipToImageBuffer for Qt port.
        https://bugs.webkit.org/show_bug.cgi?id=24289

        The implementation combines pixmap layers and destinationIn
        composition mode.

        * platform/graphics/qt/GraphicsContextQt.cpp:
        (WebCore::TransparencyLayer::TransparencyLayer):
        (WebCore::GraphicsContextPlatformPrivate::GraphicsContextPlatformPrivate):
        (WebCore::GraphicsContext::savePlatformState):
        (WebCore::GraphicsContext::restorePlatformState):
        (WebCore::GraphicsContext::inTransparencyLayer):
        (WebCore::GraphicsContext::beginTransparencyLayer):
        (WebCore::GraphicsContext::endTransparencyLayer):
        (WebCore::GraphicsContext::clipToImageBuffer):

2010-05-18  Eric Seidel  <eric@webkit.org>

        Unreviewed build fix.

        Make it possible to enable the new HTML5Tokenizer for testing
        https://bugs.webkit.org/show_bug.cgi?id=39275

        * WebCore.gypi:
         - Fix HTMLLexer.* -> HTML5Lexer.*
        * WebCore.vcproj/WebCore.vcproj:
         - Add HTML5Lexer and HTML5Tokenizer to project.

2010-05-18  Eric Seidel  <eric@webkit.org>

        Unreviewed build fix.

        Make it possible to enable the new HTML5Tokenizer for testing
        https://bugs.webkit.org/show_bug.cgi?id=39275

        * dom/NamedAttrMap.cpp:
        (WebCore::NamedNodeMap::setNamedItemNS):
         - Move this to the .cpp file so as to avoid needing to include "Node.h" in the header.
        * dom/NamedAttrMap.h:
        * html/HTML5Token.h:
         - Remove #include "String.h" which was wrong.  Adam meant "PlatformString.h"
         - Remove unneeded #include "Node.h", it was only needed because
           NamedAttrMap.h was incorrectly depending on Node.h but not
           including it.  It didn't actually need Node.h except for one
           inlined method setNamedItemNS, so I moved setNamedItemNS into
           the .cpp to get rid of the Node.h requirement.

2010-05-18  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        Make it possible to enable the new HTML5Tokenizer for testing
        https://bugs.webkit.org/show_bug.cgi?id=39275

        I added html5ParserEnabled to Settings so that we can enable/disable
        the HTML5 parser for testing.

        I also ripped out a bunch of dead code from HTML5Lexer.

        I had to add HTML5Lexer/HTML5Tokenizer to all build systems so that
        the build wouldn't fail now that we reference these classes from HTMLDocument.

        * Android.mk:
        * CMakeLists.txt:
        * GNUmakefile.am:
        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.xcodeproj/project.pbxproj:
        * html/HTML5Lexer.cpp:
        (WebCore::HTML5Lexer::reset):
        (WebCore::isWhitespace):
        (WebCore::HTML5Lexer::nextToken):
        * html/HTML5Lexer.h:
        * html/HTML5Tokenizer.cpp: Added.
        (WebCore::HTML5Tokenizer::HTML5Tokenizer):
        (WebCore::HTML5Tokenizer::~HTML5Tokenizer):
        (WebCore::HTML5Tokenizer::begin):
        (WebCore::HTML5Tokenizer::write):
        (WebCore::HTML5Tokenizer::end):
        (WebCore::HTML5Tokenizer::finish):
        (WebCore::HTML5Tokenizer::isWaitingForScripts):
        * html/HTML5Tokenizer.h: Added.
        * html/HTMLDocument.cpp:
        (WebCore::HTMLDocument::createTokenizer):
        * html/HTMLTokenizer.h:
        * html/HTMLViewSourceDocument.cpp:
        (WebCore::HTMLViewSourceDocument::createTokenizer):
        * page/Settings.cpp:
        (WebCore::Settings::Settings):
        * page/Settings.h:
        (WebCore::Settings::setHTML5ParserEnabled):
        (WebCore::Settings::html5ParserEnabled):

2010-05-18  Maciej Stachowiak  <mjs@apple.com>

        Not reviewed, build fix.

        Attempt to fix build for v8 bindings (untested).

        * bindings/v8/ScriptController.cpp:
        (WebCore::ScriptController::clearWindowShell):
        * bindings/v8/ScriptController.h:

2010-05-17  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Oliver Hunt.

        GC more promptly when navigating to a new inner window, but not at all when it went in the page cache
        https://bugs.webkit.org/show_bug.cgi?id=39254
        <rdar://problem/7996370>

        ~1% PLT speedup
        ~4% iBench HTML speedup

        * bindings/js/GCController.cpp:
        (WebCore::GCController::garbageCollectSoon): Change back to a 0 delay timer instead of
        0.5 second.
        * bindings/js/ScriptController.cpp:
        (WebCore::ScriptController::clearWindowShell): Add a new boolean parameter. Don't
        garbageColectSoon if the page is going into the page cache.
        * bindings/js/ScriptController.h: Prototype change for above.
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::clear): Indicate when the page is going into the page cache.

2010-05-18  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        Add an HTML5Token
        https://bugs.webkit.org/show_bug.cgi?id=39274

        The token object is an ugly fake union, but I'm sure sure there's a
        better way...  Eric needs this to provide output for the test harness.

        * WebCore.xcodeproj/project.pbxproj:
        * html/HTML5Lexer.cpp:
        (WebCore::HTML5Lexer::HTML5Lexer):
        (WebCore::HTML5Lexer::write):
        (WebCore::HTML5Lexer::emitCharacter):
        * html/HTML5Lexer.h:
        * html/HTML5Token.h: Added.
        (WebCore::HTML5Token::):
        (WebCore::HTML5Token::HTML5Token):
        (WebCore::HTML5Token::setToCharacter):

2010-05-18  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        Implement ScriptData states for HTML5Lexer
        https://bugs.webkit.org/show_bug.cgi?id=39273

        This patch implements more of the lexer states according to the HTML5
        specification.  Currently, this code is compiled by not tested.  We're
        working on bringing up a test harness in parallel with transliterating
        the spec into code.

        * html/HTML5Lexer.cpp:
        (WebCore::HTML5Lexer::tokenize):
        (WebCore::HTML5Lexer::temporaryBufferIs):
        * html/HTML5Lexer.h:
        (WebCore::HTML5Lexer::):

2010-05-17  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        Rename HTML5Tokenzier to HTML5Lexer so that we can add a new HTML5Tokenizer which implements Tokenizer
        https://bugs.webkit.org/show_bug.cgi?id=39272

        Strictly a rename, no functionality change.

        * WebCore.xcodeproj/project.pbxproj:
        * html/HTML5Lexer.cpp: Added.
        * html/HTML5Lexer.h: Added.
        * html/HTML5Tokenizer.cpp: Removed.
        * html/HTML5Tokenizer.h: Removed.

2010-05-17  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r59652.
        http://trac.webkit.org/changeset/59652
        https://bugs.webkit.org/show_bug.cgi?id=39268

        file-input-files-access test is broken on Mac (Requested by
        dcheng on #webkit).

        * platform/chromium/DragDataChromium.cpp:
        (WebCore::DragData::asURL):

2010-05-17  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        Implement RAWTEXT tokenizer states
        https://bugs.webkit.org/show_bug.cgi?id=39267

        More tokenizer states.  There's a bunch of functionality notImplemented
        that we'll come back to.

        * html/HTML5Tokenizer.cpp:
        (WebCore::HTML5Tokenizer::tokenize):
        * html/HTML5Tokenizer.h:

2010-05-17  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        Implement more parser states in HTML5Tokenizer
        https://bugs.webkit.org/show_bug.cgi?id=39265

        This patch implements some easy states.  I'll come back and do the
        harder states later.

        * html/HTML5Tokenizer.cpp:
        (WebCore::HTML5Tokenizer::tokenize):
        (WebCore::HTML5Tokenizer::emitParseError):
        * html/HTML5Tokenizer.h:

2010-05-17  Daniel Cheng  <dcheng@chromium.org>

        Reviewed by Darin Adler.

        DragData::asURL() shouldn't do file validity checks
        https://bugs.webkit.org/show_bug.cgi?id=38711

        There's no point to trying to make sure the file is valid in
        DragData::asURL(). It's better to ask for forgiveness than to ask for
        permission, since asking for permission is prone to race conditions
        and results in unnecessary I/O.  Consumers of this function either:
        - need to verify the file exists themselves (e.g. the loader)
        - don't care about file validity (rich text drag-and-drop)

        * platform/chromium/DragDataChromium.cpp:
        (WebCore::DragData::asURL):

2010-05-17  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        Update states in HTML5Tokenizer to match HTML5 spec
        https://bugs.webkit.org/show_bug.cgi?id=39264

        I've also implemented the DataState.  More states to follow.

        * html/HTML5Tokenizer.cpp:
        (WebCore::HTML5Tokenizer::reset):
        (WebCore::HTML5Tokenizer::tokenize):
        * html/HTML5Tokenizer.h:
        (WebCore::HTML5Tokenizer::):

2010-05-17  Kent Tamura  <tkent@chromium.org>

        Reviewed by Darin Adler.

        ':valid' CSS selector should not be applied to some form controls
        https://bugs.webkit.org/show_bug.cgi?id=39162

        * html/HTMLElement.cpp:
        (WebCore::inlineTagList): Always includes progressTag. This change is
        needed in a case of no ENABLE_PROGRESS_TAG. Without this change and
        ENABLE_PROGRESS_TAG, <progress> tags disappear.
        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::recalcWillValidate):
          Return false for SUBMIT and IMAGE.
        * html/HTMLProgressElement.h:
        (WebCore::HTMLProgressElement::recalcWillValidate):
          Return false. This change is needed in a case of ENABLE_PROGRESS_TAG.

2010-05-17  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        Remove load-related code from HTML5Tokenizer
        https://bugs.webkit.org/show_bug.cgi?id=39263

        This code is related to reloading resources and not to tokenizing.  In
        the PreloadScanner, these concerns are coupled, but we want to decouple
        them.

        * html/HTML5Tokenizer.cpp:
        (WebCore::HTML5Tokenizer::HTML5Tokenizer):
        (WebCore::HTML5Tokenizer::~HTML5Tokenizer):
        (WebCore::HTML5Tokenizer::begin):
        (WebCore::HTML5Tokenizer::end):
        (WebCore::HTML5Tokenizer::reset):
        (WebCore::HTML5Tokenizer::write):
        (WebCore::HTML5Tokenizer::consumeEntity):
        (WebCore::HTML5Tokenizer::tokenize):
        (WebCore::HTML5Tokenizer::processAttribute):
        (WebCore::HTML5Tokenizer::emitCharacter):
        (WebCore::HTML5Tokenizer::emitTag):
        * html/HTML5Tokenizer.h:

2010-05-17  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        Add HTML5Tokenizer to the build system on Mac
        https://bugs.webkit.org/show_bug.cgi?id=39262

        This file will be easier to work with if we're actually compiling it.
        Hopefully we'll get this wired into the PreloadScanner soon.  Once we
        start actually calling the code, we'll add it to the build system on
        other platforms.

        * WebCore.xcodeproj/project.pbxproj:

2010-05-17  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        Copy PreloadScanner.* to HTML5Tokenizer.* to start work on the new HTML5 Tokenizer
        https://bugs.webkit.org/show_bug.cgi?id=39261

        * html/HTML5Tokenizer.cpp: Rename PreloadScanner to HTML5Tokenizer.
        * html/HTML5Tokenizer.h: ditto.

2010-05-17  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        Copy PreloadScanner.* to HTML5Tokenizer.* to start work on the new HTML5 Tokenizer
        https://bugs.webkit.org/show_bug.cgi?id=39261

        This time copy the cpp from the right file.

        * html/HTML5Tokenizer.cpp: Copied from WebCore/html/PreloadScanner.cpp.

2010-05-17  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        Copy PreloadScanner.* to HTML5Tokenizer.* to start work on the new HTML5 Tokenizer
        https://bugs.webkit.org/show_bug.cgi?id=39261

        * html/HTML5Tokenizer.cpp: Copied from WebCore/html/PreloadScanner.h.
        * html/HTML5Tokenizer.h: Copied from WebCore/html/PreloadScanner.h.

2010-05-17  MORITA Hajime  <morrita@google.com>

        Reviewed by Kent Tamura.

        [Chromium] Windows: Speed of indeterminate progress bar should be constant
        https://bugs.webkit.org/show_bug.cgi?id=39211

        No new tests, animation effect can be confirmed only manually.

        * rendering/RenderThemeChromiumWin.cpp:
        (WebCore::RenderThemeChromiumWin::animationDurationForProgressBar):
        (WebCore::RenderThemeChromiumWin::paintProgressBar):

2010-05-17  Drew Wilson  <atwilson@chromium.org>

        Unreviewed build fix for Qt and Chromium.

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

        * page/Frame.h: Now includes CSSMutableStyleDeclaration.h.

2010-05-17  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Darin Adler.

        Remove unused member member from Document
        https://bugs.webkit.org/show_bug.cgi?id=39251

        Remove m_associatedHistoryItems from Document; it is never used.

        * dom/Document.h:

2010-05-17  Darin Adler  <darin@apple.com>

        Fix Qt build.

        * page/Frame.cpp:
        (WebCore::Frame::setTypingStyle): Move back to make non-inline.
        * page/Frame.h: Removed inline version of setTypingStyle.

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

        Reviewed by Brady Eidson.

        Frame has many trivial member functions that should be inlined
        https://bugs.webkit.org/show_bug.cgi?id=39147

        * WebCore.base.exp: Export the functions that are now inlined.

        * page/Frame.cpp:
        (WebCore::Frame::removeEditingStyleFromBodyElement):
        Removed the body of this function.

        * page/Frame.h:
        (WebCore::Frame::init): Moved here from .cpp.
        (WebCore::Frame::loader): Ditto.
        (WebCore::Frame::redirectScheduler): Ditto.
        (WebCore::Frame::view): Ditto.
        (WebCore::Frame::script): Ditto.
        (WebCore::Frame::document): Ditto.
        (WebCore::Frame::selection): Ditto.
        (WebCore::Frame::editor): Ditto.
        (WebCore::Frame::animation): Ditto.
        (WebCore::Frame::mark): Ditto.
        (WebCore::Frame::setMark): Ditto.
        (WebCore::Frame::zoomFactor): Ditto.
        (WebCore::Frame::jsStatusBarText): Ditto.
        (WebCore::Frame::jsDefaultStatusBarText): Ditto.
        (WebCore::Frame::needsReapplyStyles): Ditto.
        (WebCore::Frame::typingStyle): Ditto.
        (WebCore::Frame::setTypingStyle): Ditto.
        (WebCore::Frame::clearTypingStyle): Ditto.
        (WebCore::Frame::ownerElement): Ditto.
        (WebCore::Frame::isDisconnected): Ditto.
        (WebCore::Frame::setIsDisconnected): Ditto.
        (WebCore::Frame::excludeFromTextSearch): Ditto.
        (WebCore::Frame::setExcludeFromTextSearch): Ditto.
        (WebCore::Frame::inViewSourceMode): Ditto.
        (WebCore::Frame::setInViewSourceMode): Ditto.
        (WebCore::Frame::markedTextMatchesAreHighlighted): Ditto.
        (WebCore::Frame::tree): Ditto.
        (WebCore::Frame::page): Ditto.
        (WebCore::Frame::detachFromPage): Ditto.
        (WebCore::Frame::eventHandler): Ditto.
        (WebCore::Frame::shouldClose): Ditto.

2010-05-17  Anders Carlsson  <andersca@apple.com>

        Reviewed by Sam Weinig.

        https://bugs.webkit.org/show_bug.cgi?id=39247
        <rdar://problem/7994707>
        Move rarely used data members to the rare structures, thus saving memory.

        Move rarely used member variables from StyleInheritedData and StyleVisualData to
        StyleRareInheritedData and StyleRareNonInheritedData, namely:

        indent, cursorData, m_effectiveZoom, widows and orphans move from StyleInheritedData to StyleRareInheritedData.
        m_counterIncrement and m_counterReset move from StyleVisualData to StyleRareNonInheritedData.

        * rendering/style/RenderStyle.cpp:
        (WebCore::RenderStyle::diff):
        (WebCore::RenderStyle::addCursor):
        (WebCore::RenderStyle::setCursorList):
        (WebCore::RenderStyle::clearCursorList):
        * rendering/style/RenderStyle.h:
        (WebCore::InheritedFlags::textIndent):
        (WebCore::InheritedFlags::effectiveZoom):
        (WebCore::InheritedFlags::counterIncrement):
        (WebCore::InheritedFlags::counterReset):
        (WebCore::InheritedFlags::cursors):
        (WebCore::InheritedFlags::widows):
        (WebCore::InheritedFlags::orphans):
        (WebCore::InheritedFlags::setTextIndent):
        (WebCore::InheritedFlags::setEffectiveZoom):
        (WebCore::InheritedFlags::setCounterIncrement):
        (WebCore::InheritedFlags::setCounterReset):
        (WebCore::InheritedFlags::setWidows):
        (WebCore::InheritedFlags::setOrphans):
        * rendering/style/StyleInheritedData.cpp:
        (WebCore::StyleInheritedData::StyleInheritedData):
        (WebCore::StyleInheritedData::operator==):
        * rendering/style/StyleInheritedData.h:
        * rendering/style/StyleRareInheritedData.cpp:
        (WebCore::StyleRareInheritedData::StyleRareInheritedData):
        (WebCore::cursorDataEquivalent):
        (WebCore::StyleRareInheritedData::operator==):
        * rendering/style/StyleRareInheritedData.h:
        * rendering/style/StyleRareNonInheritedData.cpp:
        (WebCore::StyleRareNonInheritedData::StyleRareNonInheritedData):
        (WebCore::StyleRareNonInheritedData::operator==):
        * rendering/style/StyleRareNonInheritedData.h:
        * rendering/style/StyleVisualData.cpp:
        (WebCore::StyleVisualData::StyleVisualData):
        * rendering/style/StyleVisualData.h:
        (WebCore::StyleVisualData::operator==):

2010-05-17  Robert Hogan  <robert@webkit.org>

        Rubber-stamped by Eric Seidel.

        Fix --no-svg build.

        I have no idea where the SVG-dependent include of this file is hidden, but
        it is probably better to include it explicitly anyway like V8WorkerContextCustom.cpp.

        * bindings/js/JSWorkerContextCustom.cpp:

2010-05-17  David Hyatt  <hyatt@apple.com>

        Reviewed by Dan Bernstein.

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

        Fix failures in the RTL portion of fast/multicol/layers-in-multicol.html.  Make sure block children of RTL blocks are positioned using
        the reduced column width instead of the total content width.

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::determineHorizontalPosition):
        (WebCore::RenderBlock::nodeAtPoint):
        (WebCore::RenderBlock::hitTestContents):
        (WebCore::RenderBlock::adjustForColumns):

2010-05-17  Jakob Petsovits  <jpetsovits@rim.com>

        Reviewed by George Staikos.

        [OpenVG] Add support for decoding and drawing images
        https://bugs.webkit.org/show_bug.cgi?id=36072

        OpenVG has a maximum image size (how large is
        specific to the OpenVG implementation), so this
        requires us to store them as separate image tiles.

        Image decoding and initial drawing code by
        Adam Treat <atreat@rim.com>. Image decoder
        downsampling support by Yong Li <yoli@rim.com>.

        * platform/graphics/ImageSource.h:
        * platform/graphics/openvg/ImageOpenVG.cpp: Added.
        (WebCore::FrameData::clear):
        (WebCore::BitmapImage::BitmapImage):
        (WebCore::BitmapImage::checkForSolidColor):
        (WebCore::BitmapImage::initPlatformData):
        (WebCore::BitmapImage::invalidatePlatformData):
        (WebCore::adjustSourceRectForDownSampling):
        (WebCore::BitmapImage::draw):
        (WebCore::Image::drawPattern):
        (WebCore::Image::loadPlatformResource):
        * platform/graphics/openvg/PainterOpenVG.cpp:
        (WebCore::PainterOpenVG::drawImage):
        (WebCore::PainterOpenVG::asNewNativeImage):
        * platform/graphics/openvg/PainterOpenVG.h:
        * platform/graphics/openvg/TiledImageOpenVG.cpp: Added.
        (WebCore::TiledImageOpenVG::TiledImageOpenVG):
        (WebCore::TiledImageOpenVG::operator=):
        (WebCore::TiledImageOpenVG::~TiledImageOpenVG):
        (WebCore::TiledImageOpenVG::numTiles):
        (WebCore::TiledImageOpenVG::numColumns):
        (WebCore::TiledImageOpenVG::numRows):
        (WebCore::TiledImageOpenVG::setTile):
        (WebCore::TiledImageOpenVG::tilesInRect):
        (WebCore::TiledImageOpenVG::tile):
        (WebCore::TiledImageOpenVG::tileRect):
        (WebCore::TiledImageOpenVG::detachTiles):
        (WebCore::TiledImageOpenVG::destroyTiles):
        * platform/graphics/openvg/TiledImageOpenVG.h: Added.
        (WebCore::TiledImageOpenVG::size):
        (WebCore::TiledImageOpenVG::maxTileSize):
        * platform/graphics/openvg/VGUtils.cpp:
        (WebCore::VGUtils::bytesForImage):
        (WebCore::VGUtils::bytesForImageScanline):
        (WebCore::VGUtils::imageFormatBitsPerPixel):
        (WebCore::VGUtils::endianAwareImageFormat):
        * platform/graphics/openvg/VGUtils.h:
        * platform/image-decoders/openvg/ImageDecoderOpenVG.cpp: Added.
        (WebCore::RGBA32Buffer::asNewNativeImage):

2010-05-17  Yaar Schnitman  <yaar@chromium.org>

        Reviewed by Darin Adler.

        Fix JSC's generation of 'Optional' arguments. When a single 'Optional' extended attribute precedes multiple method arguments, all of these arguments are optional as a group (either all or non must be specified). This fix, which makes JSC compliant with V8 and with the Web IDL specs, is pretty harmless, since Optional is currently not being used anywhere in JSC, but it blocks further work on overloads.
        https://bugs.webkit.org/show_bug.cgi?id=39227

        * bindings/scripts/CodeGeneratorJS.pm:
        * bindings/scripts/test/JS/JSTestObj.cpp:
        (WebCore::jsTestObjPrototypeFunctionMethodWithNonOptionalArgAndTwoOptionalArgs):

2010-05-16  Sam Weinig  <sam@webkit.org>

        Reviewed by Adam Barth.

        https://bugs.webkit.org/show_bug.cgi?id=39192
        Remove unused PERFECT_HASH code CodeGeneratorJS.

        * bindings/scripts/CodeGeneratorJS.pm:

2010-05-17  Jeremy Moskovich  <jeremy@chromium.org>

        Reviewed by Jeremy Orlow.

        Remove debug code that was introduced to help narrow down the
        source of a crash.
        https://bugs.webkit.org/show_bug.cgi?id=36426

        No change in behavior, so no new tests.

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::finishedLoadingDocument):

2010-05-17  Andreas Kling  <andreas.kling@nokia.com>

        Reviewed by Kenneth Rohde Christiansen.

        Bring CanvasRenderingContext2D's createImageData() in line with HTML5 spec
        Added createImageData(ImageData) which returns a new ImageData with the same size as the one passed.
        Changed createImageData(width, height) to use the absolute values of width and height.

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

        Spec link:
        http://www.whatwg.org/specs/web-apps/current-work/#dom-context-2d-createimagedata

        Test: fast/canvas/canvas-createImageData.html

        * bindings/js/JSCanvasRenderingContext2DCustom.cpp:
        (WebCore::JSCanvasRenderingContext2D::createImageData):
        * html/canvas/CanvasRenderingContext2D.cpp:
        (WebCore::CanvasRenderingContext2D::createImageData):
        * html/canvas/CanvasRenderingContext2D.h:
        * html/canvas/CanvasRenderingContext2D.idl:

2010-05-17  Antti Koivisto  <koivisto@iki.fi>

        This was missing from previous commit.

        * platform/qt/QWebPageClient.h:
        (QWebPageClient::graphicsItemVisibleRect):

2010-05-17  Antti Koivisto  <koivisto@iki.fi>

        Reviewed by Kenneth Rohde Christiansen.

        https://bugs.webkit.org/show_bug.cgi?id=39218
        [Qt] Tiled backing store tiles sometimes flicker when exiting a zoom animation
        
        Tiles sometimes flicker when exiting a zoom animation. This happens as a result
        of the visible rectangle being momentarily out of sync.
        
        Instead of updating the visible rect by explicitly setting it, pull it through
        the client and recompute in the WebKit level.

        * page/ChromeClient.h:
        (WebCore::ChromeClient::visibleRectForTiledBackingStore):
        * page/Frame.cpp:
        (WebCore::Frame::tiledBackingStoreVisibleRect):
        * page/Frame.h:
        * platform/graphics/TiledBackingStore.cpp:
        (WebCore::TiledBackingStore::checkVisibleRectChanged):
        (WebCore::TiledBackingStore::createTiles):
        * platform/graphics/TiledBackingStore.h:
        * platform/graphics/TiledBackingStoreClient.h:

2010-05-15  Adam Roben  <aroben@apple.com>

        Periodically try to reset a lost IDirect3DDevice9 until we succeed

        This is how MSDN says we must respond to a lost device (see
        <http://msdn.microsoft.com/en-us/library/bb174714(v=VS.85).aspx>).

        Only testable by a manual test, unfortunately.

        Fixes <rdar://problem/7986906> <http://webkit.org/b/39139> Pages that
        use hardware acceleration don't repaint after waking computer from
        sleep

        Reviewed by John Sullivan.

        * manual-tests/no-repaint-after-wake-from-sleep.html: Added. This is
        the Poster Circle demo from webkit.org/blog, but with instructions for
        putting the computer to sleep and waking it up again.

        * platform/graphics/win/WKCACFLayerRenderer.cpp:
        (WebCore::WKCACFLayerRenderer::WKCACFLayerRenderer): Initialize new
        member that tells us whether we need to try to reset the device before
        rendering.
        (WebCore::WKCACFLayerRenderer::resize): Changed to tell resetDevice
        the reason why the device needs to be reset (which is because the
        window's size has changed).
        (WebCore::WKCACFLayerRenderer::render): Before we do anything else,
        check if we need to reset the device before rendering. If we do, try
        to reset it. If that fails, bail out and set a timer to try again
        later. If we discover that the device is lost when calling
        IDirect3DDevice9::Present and resetting the device fails, bail out and
        set a timer to try again later.
        (WebCore::WKCACFLayerRenderer::resetDevice): Changed to return a
        boolean indicating whether resetting succeeded or not. Added a
        ResetReason parameter so callers can specify whey the device needs to
        be reset. Before trying to do anything, we call
        IDirect3DDevice9::TestCooperativeLevel to find out whether the device
        can be reset currently. If it can't, we set a flag to tell ourselves
        that the device must be reset before we next render, and indicate to
        the caller that the reset failed. If we thought the device was lost
        but it turns out not to be, we don't have to do anything and can tell
        the caller that the reset succeeded. Otherwise we go ahead and reset
        the device as before, and indicate to the caller that the reset
        succeeded.

        * platform/graphics/win/WKCACFLayerRenderer.h: Changed resetDevice to
        return a boolean and take a ResetReason parameter. Added a comment
        about when and why this function should be called. And added
        m_mustResetLostDeviceBeforeRendering.

2010-05-15  Adam Roben  <aroben@apple.com>

        Call CARenderOGLPurge whenever we call IDirect3DDevice9::Reset

        MSDN says that all resoures allocated with D3DPOOL_DEFAULT must be
        destroyed before calling IDirect3DDevice9::Reset. The only way to
        guarantee this with Core Animation is to call CARenderOGLPurge.

        Unfortunately this isn't testable at the moment, as we don't use any
        features of Core Animation (e.g., mask layers) that actually make this
        required. But it seems like a good idea to fix the code now so that
        if/when we do start using those features we won't run into problems.

        Fixes <http://webkit.org/b/39159> WKCACFLayerRenderer::resetDevice
        might fail due to failing to destroy all D3DPOOL_DEFAULT resources

        Reviewed by John Sullivan.

        * platform/graphics/win/WKCACFLayerRenderer.cpp:
        (WebCore::WKCACFLayerRenderer::render): Moved the call to
        CARenderOGLPurge from here...
        (WebCore::WKCACFLayerRenderer::resetDevice): ...to here, so that it
        will be called whenever we reset the device (e.g., when resizing the
        window).

2010-05-17  Gustavo Noronha Silva  <gustavo.noronha@collabora.co.uk>

        Rubber-stamped by Xan Lopez.

        Build fix. Remove bashism from build system.

        * GNUmakefile.am:

2010-05-17  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r59483.
        http://trac.webkit.org/changeset/59483
        https://bugs.webkit.org/show_bug.cgi?id=39215

        "page_cycler_intl1 regression on Linux" (Requested by yurys on
        #webkit).

        * platform/chromium/ChromiumBridge.h:
        * platform/graphics/chromium/FontCacheLinux.cpp:
        (WebCore::FontCache::getFontDataForCharacters):

2010-05-17  Kenneth Rohde Christiansen  <kenneth@webkit.org>

        Reviewed by Laszlo Gombos.

        REGRESSION(59563): [Qt] JSValue QtClass::fallbackObject can be optimized

        Patch declared a variable index, which shadowed an earlier declared
        variable.

        * bridge/qt/qt_class.cpp:
        (JSC::Bindings::QtClass::fallbackObject):

2010-05-14  Andrei Popescu  <andreip@google.com>

        Reviewed by Jeremy Orlow.

        IDBRequest is not a proper ActiveDomObject
        https://bugs.webkit.org/show_bug.cgi?id=39001

        Add IDBRequest interface to the IsActiveDomType
        routine of the CodeGeneratorV8.pm.

        Rename IDBRequest::m_stopped to m_suspended and reset
        the flag when resume() is called.

        No new tests, Indexed Database isn't yet testable.

        * bindings/scripts/CodeGeneratorV8.pm:
        * storage/IDBRequest.cpp:
        (WebCore::IDBRequest::suspend):
        (WebCore::IDBRequest::resume):
        (WebCore::IDBRequest::timerFired):
        (WebCore::IDBRequest::onEventCommon):
        * storage/IDBRequest.h:

2010-05-17  Xan Lopez  <xlopez@igalia.com>

        Do not include the indexed database headers if the feature is not
        enabled. Should fix the build in GTK+.

        * bindings/js/JSEventCustom.cpp:

2010-05-17  Xan Lopez  <xlopez@igalia.com>

        Try to fix GTK+ build.

        * GNUmakefile.am:

2010-05-14  Jeremy Orlow  <jorlow@chromium.org>

        Reviewed by Nate Chapin.

        Finish up IndexedDB events
        https://bugs.webkit.org/show_bug.cgi?id=39117

        Implement the indexed database event interfaces as proposed by Mozilla.
        Refactor the run time type detection code that was in IDBRequest into its own
        class named IDBAny.  Use this new class within the new event classes and
        IDBResults.

        Test: storage/indexeddb/basics.html

        * DerivedSources.cpp:
        * DerivedSources.make:
        * GNUmakefile.am:
        * WebCore.gyp/WebCore.gyp:
        * WebCore.gypi:
        * WebCore.pri:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSEventCustom.cpp:
        (WebCore::toJS):
        * bindings/js/JSEventTarget.cpp:
        (WebCore::toJS):
        * bindings/js/JSIDBAnyCustom.cpp: Added.
        (WebCore::toJS):
        * bindings/js/JSIDBRequestCustom.cpp: Removed.
        * bindings/v8/custom/V8EventCustom.cpp:
        (WebCore::toV8):
        * bindings/v8/custom/V8IDBAnyCustom.cpp: Added.
        (WebCore::toV8):
        * bindings/v8/custom/V8IDBRequestCustom.cpp: Removed.
        * dom/Event.cpp:
        (WebCore::Event::isIDBErrorEvent):
        (WebCore::Event::isIDBSuccessEvent):
        * dom/Event.h:
        * storage/IDBAny.cpp: Added.
        (WebCore::IDBAny::create):
        (WebCore::IDBAny::IDBAny):
        (WebCore::IDBAny::~IDBAny):
        (WebCore::IDBAny::idbDatabaseRequest):
        (WebCore::IDBAny::indexedDatabaseRequest):
        (WebCore::IDBAny::serializedScriptValue):
        (WebCore::IDBAny::set):
        * storage/IDBAny.h: Added.
        (WebCore::IDBAny::):
        (WebCore::IDBAny::type):
        * storage/IDBAny.idl: Added.
        * storage/IDBErrorEvent.cpp: Added.
        (WebCore::IDBErrorEvent::create):
        (WebCore::IDBErrorEvent::IDBErrorEvent):
        (WebCore::IDBErrorEvent::~IDBErrorEvent):
        * storage/IDBErrorEvent.h: Added.
        (WebCore::IDBErrorEvent::code):
        (WebCore::IDBErrorEvent::message):
        (WebCore::IDBErrorEvent::isIDBErrorEvent):
        * storage/IDBErrorEvent.idl: Added.
        * storage/IDBEvent.cpp: Added.
        (WebCore::IDBEvent::IDBEvent):
        (WebCore::IDBEvent::~IDBEvent):
        (WebCore::IDBEvent::source):
        * storage/IDBEvent.h: Added.
        * storage/IDBEvent.idl: Added.
        * storage/IDBRequest.cpp:
        (WebCore::IDBRequest::IDBRequest):
        (WebCore::IDBRequest::onSuccess):
        (WebCore::IDBRequest::timerFired):
        (WebCore::IDBRequest::onEventCommon):
        * storage/IDBRequest.h:
        (WebCore::IDBRequest::create):
        (WebCore::IDBRequest::result):
        * storage/IDBRequest.idl:
        * storage/IDBSuccessEvent.cpp: Added.
        (WebCore::IDBSuccessEvent::create):
        (WebCore::IDBSuccessEvent::IDBSuccessEvent):
        (WebCore::IDBSuccessEvent::~IDBSuccessEvent):
        (WebCore::IDBSuccessEvent::result):
        * storage/IDBSuccessEvent.h: Added.
        (WebCore::IDBSuccessEvent::isIDBSuccessEvent):
        * storage/IDBSuccessEvent.idl: Added.
        * storage/IndexedDatabaseImpl.cpp:
        (WebCore::IndexedDatabaseImpl::open):
        * storage/IndexedDatabaseRequest.cpp:
        (WebCore::IndexedDatabaseRequest::IndexedDatabaseRequest):
        (WebCore::IndexedDatabaseRequest::open):
        * storage/IndexedDatabaseRequest.h:

2010-05-16  Chris Jerdonek  <cjerdonek@webkit.org>

        Unreviewed.

        Removed the stray equals sign from the reviewer's name in the
        "Reviewed by" line of the ChangeLog entry for r59596:

        http://trac.webkit.org/changeset/59596

2010-05-16  Chris Jerdonek  <cjerdonek@webkit.org>

        Reviewed by Adam Barth.

        Refactored FrameLoader::changeLocation() and urlSelected() to share more code.

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

        No change in behavior, so no new tests.

        * bindings/ScriptControllerBase.cpp:
        (WebCore::ScriptController::executeIfJavaScriptURL):
          - Changed a parameter from boolean to the ShouldReplaceDocumentIfJavaScriptURL enum.
        * bindings/js/ScriptController.h:
          - Changed a parameter from boolean to the ShouldReplaceDocumentIfJavaScriptURL enum.
        * bindings/v8/ScriptController.h:
          - Changed a parameter from boolean to the ShouldReplaceDocumentIfJavaScriptURL enum.
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::changeLocation):
          - Changed to call the new private overload of urlSelected().
        (WebCore::FrameLoader::urlSelected):
          - Added a private overload of urlSelected().
          - Changed the public urlSelected() to call the private overload.
        (WebCore::FrameLoader::submitForm):
        * loader/FrameLoader.h:
          - Added a private overload of urlSelected().
        * loader/FrameLoaderTypes.h:
          - Added a ShouldReplaceDocumentIfJavaScriptURL enum.

2010-05-16  Daniel Bates  <dbates@rim.com>

        Reviewed by David Hyatt.

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

        Rollout changeset 59274 <http://trac.webkit.org/changeset/59274>.

        Prepared on behalf of David Hyatt.

        "Not worth the memory use." Just roll this out.

        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * editing/visible_units.cpp:
        (WebCore::previousLinePosition):
        (WebCore::nextLinePosition):
        * rendering/EllipsisBox.cpp:
        (WebCore::EllipsisBox::paint):
        (WebCore::EllipsisBox::selectionRect):
        (WebCore::EllipsisBox::paintSelection):
        (WebCore::EllipsisBox::nodeAtPoint):
        * rendering/EllipsisBox.h:
        (WebCore::EllipsisBox::EllipsisBox):
        (WebCore::EllipsisBox::height):
        * rendering/InlineBox.cpp:
        (WebCore::InlineBox::height):
        (WebCore::InlineBox::adjustPosition):
        (WebCore::InlineBox::canAccommodateEllipsis):
        * rendering/InlineBox.h:
        (WebCore::InlineBox::InlineBox):
        (WebCore::InlineBox::isInlineBox):
        (WebCore::InlineBox::hasVirtualHeight):
        (WebCore::InlineBox::setHasVirtualHeight):
        (WebCore::InlineBox::virtualHeight):
        (WebCore::InlineBox::setWidth):
        (WebCore::InlineBox::width):
        (WebCore::InlineBox::setX):
        (WebCore::InlineBox::x):
        (WebCore::InlineBox::setY):
        (WebCore::InlineBox::y):
        (WebCore::InlineBox::baselinePosition):
        (WebCore::InlineBox::lineHeight):
        * rendering/InlineFlowBox.cpp:
        (WebCore::InlineFlowBox::placeBoxesVertically):
        (WebCore::InlineFlowBox::computeVerticalOverflow):
        (WebCore::InlineFlowBox::nodeAtPoint):
        (WebCore::InlineFlowBox::paintBoxDecorations):
        (WebCore::InlineFlowBox::paintMask):
        (WebCore::InlineFlowBox::paintTextDecorations):
        * rendering/InlineFlowBox.h:
        (WebCore::InlineFlowBox::visibleOverflowRect):
        (WebCore::InlineFlowBox::topLayoutOverflow):
        (WebCore::InlineFlowBox::bottomLayoutOverflow):
        (WebCore::InlineFlowBox::leftLayoutOverflow):
        (WebCore::InlineFlowBox::rightLayoutOverflow):
        (WebCore::InlineFlowBox::layoutOverflowRect):
        (WebCore::InlineFlowBox::topVisualOverflow):
        (WebCore::InlineFlowBox::bottomVisualOverflow):
        (WebCore::InlineFlowBox::leftVisualOverflow):
        (WebCore::InlineFlowBox::rightVisualOverflow):
        (WebCore::InlineFlowBox::visualOverflowRect):
        (WebCore::InlineFlowBox::setHorizontalOverflowPositions):
        (WebCore::InlineFlowBox::setVerticalOverflowPositions):
        * rendering/InlineTextBox.cpp:
        (WebCore::InlineTextBox::selectionRect):
        (WebCore::InlineTextBox::placeEllipsisBox):
        (WebCore::InlineTextBox::nodeAtPoint):
        (WebCore::InlineTextBox::paint):
        (WebCore::InlineTextBox::paintSelection):
        (WebCore::InlineTextBox::paintCompositionBackground):
        (WebCore::InlineTextBox::paintDecoration):
        (WebCore::InlineTextBox::paintSpellingOrGrammarMarker):
        (WebCore::InlineTextBox::paintTextMatchMarker):
        (WebCore::InlineTextBox::computeRectForReplacementMarker):
        (WebCore::InlineTextBox::paintCompositionUnderline):
        (WebCore::InlineTextBox::offsetForPosition):
        (WebCore::InlineTextBox::positionForOffset):
        * rendering/InlineTextBox.h:
        (WebCore::InlineTextBox::setSpaceAdd):
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::positionForPointWithInlineChildren):
        * rendering/RenderBlockLineLayout.cpp:
        (WebCore::RenderBlock::computeVerticalPositionsForLine):
        (WebCore::RenderBlock::layoutInlineChildren):
        * rendering/RenderSVGInline.cpp:
        (WebCore::RenderSVGInline::createInlineFlowBox):
        * rendering/RenderSVGInlineText.cpp:
        (WebCore::RenderSVGInlineText::createTextBox):
        * rendering/RenderSVGText.cpp:
        (WebCore::RenderSVGText::createRootInlineBox):
        * rendering/RenderText.cpp:
        (WebCore::RenderText::positionForPoint):
        (WebCore::RenderText::firstRunX):
        (WebCore::RenderText::firstRunY):
        * rendering/RenderTreeAsText.cpp:
        (WebCore::writeTextRun):
        * rendering/RootInlineBox.cpp:
        (WebCore::RootInlineBox::placeEllipsis):
        (WebCore::RootInlineBox::addHighlightOverflow):
        (WebCore::RootInlineBox::closestLeafChildForXPos):
        * rendering/SVGInlineFlowBox.h:
        (WebCore::SVGInlineFlowBox::SVGInlineFlowBox):
        (WebCore::SVGInlineFlowBox::virtualHeight):
        (WebCore::SVGInlineFlowBox::setHeight):
        * rendering/SVGInlineTextBox.h:
        (WebCore::SVGInlineTextBox::virtualHeight):
        (WebCore::SVGInlineTextBox::setHeight):
        (WebCore::SVGInlineTextBox::selectionTop):
        (WebCore::SVGInlineTextBox::selectionHeight):
        * rendering/SVGRootInlineBox.h:
        (WebCore::SVGRootInlineBox::SVGRootInlineBox):
        (WebCore::SVGRootInlineBox::virtualHeight):
        (WebCore::SVGRootInlineBox::setHeight):
        * rendering/TrailingFloatsRootInlineBox.h: Added.
        (WebCore::TrailingFloatsRootInlineBox::TrailingFloatsRootInlineBox):
        (WebCore::TrailingFloatsRootInlineBox::virtualHeight):

2010-05-13  Tony Chang  <tony@chromium.org>

        Reviewed by Darin Adler.

        REGRESSION: Crash by pasting to a textarea with white-space:nowrap
        https://bugs.webkit.org/show_bug.cgi?id=38992

        Test: editing/pasteboard/paste-plaintext-nowrap.html

        * editing/InsertParagraphSeparatorCommand.cpp:
        (WebCore::highestVisuallyEquivalentDivBelowRoot):
        (WebCore::InsertParagraphSeparatorCommand::doApply):

2010-05-16  David Hyatt  <hyatt@apple.com>

        Reviewed by Dan Bernstein.

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

        Fix all of the multi-column painting and hit testing functions to properly account for RTL directionality.

        Added fast/multicol/column-count-with-rules.html

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::paintColumnRules):
        (WebCore::RenderBlock::paintColumnContents):
        (WebCore::RenderBlock::hitTestColumns):
        (WebCore::RenderBlock::adjustRectForColumns):

2010-05-16  Dan Bernstein  <mitz@apple.com>

        Reviewed by Dave Hyatt.

        Fix SVG test failures after r59588.

        Updated SVG InlineBox virtual method overrides to match HTML ones. Removed
        SVGInlineFlowBox::verticallyAlignBoxes() since InlineFlowBox no longer declares
        verticallyAlignBoxes().

        * rendering/SVGInlineFlowBox.cpp:
        (WebCore::SVGInlineFlowBox::placeBoxesHorizontally):
        * rendering/SVGInlineFlowBox.h:
        * rendering/SVGRootInlineBox.cpp:
        (WebCore::SVGRootInlineBox::placeBoxesHorizontally):
        (WebCore::SVGRootInlineBox::verticallyAlignBoxes):
        * rendering/SVGRootInlineBox.h:

2010-05-16  Dan Bernstein  <mitz@apple.com>

        Reviewed by Darin Adler.

        Move transient glyph overflow and fallback font data from a global to the stack
        https://bugs.webkit.org/show_bug.cgi?id=39050

        * rendering/InlineFlowBox.cpp:
        (WebCore::InlineFlowBox::placeBoxesHorizontally): Added a GlyphOverflowAndFallbackFontsMap
        parameter. Read glyph overflow from the map.
        (WebCore::InlineFlowBox::computeLogicalBoxHeights): Added a GlyphOverflowAndFallbackFontsMap
        parameter. Read fallback fonts from the map.
        (WebCore::InlineFlowBox::computeVerticalOverflow): Added a GlyphOverflowAndFallbackFontsMap
        parameter. Read glyph overflow from the map.
        * rendering/InlineFlowBox.h:
        * rendering/InlineTextBox.cpp: Removed setFallbackFonts(), fallbackFonts(), setGlyphOverflow(),
        and glyphOverflow(). Removed s_glyphOverflowAndFallbackFontsMap.
        * rendering/InlineTextBox.h:
        * rendering/RenderBlock.h:
        * rendering/RenderBlockLineLayout.cpp:
        (WebCore::RenderBlock::computeHorizontalPositionsForLine): Added a GlyphOverflowAndFallbackFontsMap
        parameter. Write fallback fonts and glyph overflow into the map.
        (WebCore::RenderBlock::computeVerticalPositionsForLine): Added a GlyphOverflowAndFallbackFontsMap
        parameter. Pass it down to verticallyAlignBoxes().
        (WebCore::RenderBlock::layoutInlineChildren): Create a GlyphOverflowAndFallbackFontsMap on the
        stack and pass it down to computeHorizontalPositionsForLine(), computeVerticalPositionsForLine(),
        and verticallyAlignBoxes().
        * rendering/RootInlineBox.cpp:
        (WebCore::RootInlineBox::verticallyAlignBoxes): Added a GlyphOverflowAndFallbackFontsMap parameter.
        Pass it down to computeLogicalBoxHeights() and computeVerticalOverflow().
        * rendering/RootInlineBox.h:
        * rendering/SVGRootInlineBox.cpp:
        (WebCore::SVGRootInlineBox::layoutInlineBoxes): Updated.

2010-05-12  Tony Chang  <tony@chromium.org>

        Reviewed by Darin Adler.

        Spellcheck disabling does not disable context menu
        https://bugs.webkit.org/show_bug.cgi?id=25639

        Test: editing/spelling/context-menu-suggestions.html

        * platform/ContextMenu.cpp:
        (WebCore::ContextMenu::populate):

2010-05-16  Sam Weinig  <sam@webkit.org>

        Reviewed by Dan Bernstein.

        https://bugs.webkit.org/show_bug.cgi?id=39190
        Shave a word off of GlyphPageTreeNode
        <rdar://problem/7990428>

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

2010-05-16  Andreas Kling  <andreas.kling@nokia.com>

        Reviewed by Kenneth Rohde Christiansen.

        Properly handle invalid arguments to CanvasRenderingContext2D's getImageData() and putImageData().
        Both should throw NOT_SUPPORTED_ERR when called with nonfinite arguments.
        getImageData() should throw INDEX_SIZE_ERR if either width or height is 0.

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

        Spec link:
        http://www.whatwg.org/specs/web-apps/current-work/#pixel-manipulation

        Test: fast/canvas/canvas-getImageData-invalid.html

        * html/canvas/CanvasRenderingContext2D.cpp:
        (WebCore::CanvasRenderingContext2D::createImageData):
        (WebCore::CanvasRenderingContext2D::getImageData):
        (WebCore::CanvasRenderingContext2D::putImageData):

2010-05-16  Andreas Kling  <andreas.kling@nokia.com>

        Reviewed by Kenneth Rohde Christiansen.

        Canvas's toDataURL() should be case insensitive wrt the mimeType argument.
        https://bugs.webkit.org/show_bug.cgi?id=39153

        Spec link:
        http://www.whatwg.org/specs/web-apps/current-work/#dom-canvas-todataurl

        Test: fast/canvas/canvas-toDataURL-case-insensitive-mimetype.html

        * dom/CanvasSurface.cpp:
        (WebCore::CanvasSurface::toDataURL):

2010-05-16  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Anders Carlsson.

        Shrink SimpleFontData
        https://bugs.webkit.org/show_bug.cgi?id=39179

        Change SimpleFontData to have a pointer to the m_glyphToBoundsMap, 
        and to allocate this lazily. This reduces the size of the class from
        5632 to 1536 bytes.

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

2010-05-15  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Maciej Stachowiak.

        Reduce the size of CachedResource
        https://bugs.webkit.org/show_bug.cgi?id=39171

        Make protected data members of CachedResource private, to allow for
        easier rearrangement, and hide the fact that enums are in bitfields.
        
        Rearrange the data members of CachedResource to save 32 bytes per instance
        in 64-bit. Also modernized the constructor code.

        * loader/CachedCSSStyleSheet.cpp:
        (WebCore::CachedCSSStyleSheet::didAddClient):
        (WebCore::CachedCSSStyleSheet::data):
        (WebCore::CachedCSSStyleSheet::checkNotify):
        (WebCore::CachedCSSStyleSheet::error):
        * loader/CachedFont.cpp:
        (WebCore::CachedFont::load):
        (WebCore::CachedFont::didAddClient):
        (WebCore::CachedFont::data):
        (WebCore::CachedFont::ensureCustomFontData):
        (WebCore::CachedFont::ensureSVGFontData):
        (WebCore::CachedFont::checkNotify):
        (WebCore::CachedFont::error):
        * loader/CachedImage.cpp:
        (WebCore::CachedImage::CachedImage):
        (WebCore::CachedImage::load):
        (WebCore::CachedImage::didAddClient):
        (WebCore::CachedImage::allClientsRemoved):
        (WebCore::CachedImage::image):
        (WebCore::CachedImage::data):
        (WebCore::CachedImage::error):
        (WebCore::CachedImage::checkNotify):
        (WebCore::CachedImage::destroyDecodedData):
        * loader/CachedImage.h:
        (WebCore::CachedImage::stillNeedsLoad):
        * loader/CachedResource.cpp:
        (WebCore::CachedResource::CachedResource):
        * loader/CachedResource.h:
        (WebCore::CachedResource::type):
        (WebCore::CachedResource::preloadResult):
        (WebCore::CachedResource::status):
        (WebCore::CachedResource::setStatus):
        (WebCore::CachedResource::isLoaded):
        (WebCore::CachedResource::isLoading):
        (WebCore::CachedResource::setErrorOccurred):
        * loader/CachedScript.cpp:
        (WebCore::CachedScript::didAddClient):
        (WebCore::CachedScript::data):
        (WebCore::CachedScript::checkNotify):
        (WebCore::CachedScript::error):
        * loader/CachedXSLStyleSheet.cpp:
        (WebCore::CachedXSLStyleSheet::didAddClient):
        (WebCore::CachedXSLStyleSheet::data):
        (WebCore::CachedXSLStyleSheet::checkNotify):
        (WebCore::CachedXSLStyleSheet::error):

2010-05-16  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r59574.
        http://trac.webkit.org/changeset/59574
        https://bugs.webkit.org/show_bug.cgi?id=39176

        Supposedly broke cr-win, but the errors seems somewhat
        unrelated (Requested by abarth on #webkit).

        * platform/network/chromium/ResourceResponse.h:
        (WebCore::ResourceResponse::ResourceResponse):
        (WebCore::ResourceResponse::setSecurityInfo):
        (WebCore::ResourceResponse::isContentFiltered):
        (WebCore::ResourceResponse::setIsContentFiltered):
        (WebCore::ResourceResponse::setAppCacheID):
        (WebCore::ResourceResponse::setAppCacheManifestURL):
        (WebCore::ResourceResponse::setWasFetchedViaSPDY):
        (WebCore::ResourceResponse::setIsMultipartPayload):
        (WebCore::ResourceResponse::setResponseTime):

2010-05-16  Dan Bernstein  <mitz@apple.com>

        Reviewed by Darin Adler.

        Scalar types allocated on the heap due to misuse of DEFINE_STATIC_LOCAL
        https://bugs.webkit.org/show_bug.cgi?id=39086

        Use global variables directly.

        * bindings/v8/ScriptCallStack.cpp:
        (WebCore::ScriptCallStack::createUtilityContext):
        * platform/ScrollView.cpp:
        (WebCore::ScrollView::wheelEvent):
        * platform/graphics/mac/ComplexTextController.cpp:
        (WebCore::shouldUseATSUIAPI):

2010-05-16  Andreas Kling  <andreas.kling@nokia.com>

        Reviewed by Kenneth Rohde Christiansen.

        Canvas's getContext() must return null when called with an invalid/unsupported parameter.
        (HTML5 spec 4.8.11): http://www.whatwg.org/specs/web-apps/current-work/multipage/the-canvas-element.html#dom-canvas-getcontext

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

        Test: fast/canvas/canvas-getContext-invalid.html

        * bindings/js/JSHTMLCanvasElementCustom.cpp:
        (WebCore::JSHTMLCanvasElement::getContext):
        * bindings/v8/custom/V8HTMLCanvasElementCustom.cpp:
        (WebCore::V8HTMLCanvasElement::getContextCallback):

2010-05-15  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r59565.
        http://trac.webkit.org/changeset/59565
        https://bugs.webkit.org/show_bug.cgi?id=39173

        Broke GTK (Requested by abarth on #webkit).

        * dom/CanvasSurface.cpp:
        (WebCore::CanvasSurface::toDataURL):

2010-05-15  Andreas Kling  <andreas.kling@nokia.com>

        Reviewed by Kenneth Rohde Christiansen.

        Canvas's toDataURL() should be case insensitive wrt the mimeType argument.
        https://bugs.webkit.org/show_bug.cgi?id=39153

        Spec link:
        http://www.whatwg.org/specs/web-apps/current-work/#dom-canvas-todataurl

        Test: fast/canvas/canvas-toDataURL-case-insensitive-mimetype.html

        * dom/CanvasSurface.cpp:
        (WebCore::CanvasSurface::toDataURL):

2010-05-15  Anders Bakken  <agbakken@gmail.com>

        Reviewed by Kenneth Rohde Christiansen.

        QObject::objectName() returns a QString and QtField::name()
        creates a temporary QByteArray object and returns constData() from it.
        This is not safe.

        This patch changes the signature of the function to return a
        QByteArray instead of const char *.

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

        * bridge/qt/qt_instance.cpp:
        (JSC::Bindings::QtInstance::getPropertyNames):
        (JSC::Bindings::QtField::name):
        * bridge/qt/qt_runtime.h:

2010-05-15  Anders Bakken  <agbakken@gmail.com>

        Reviewed by Kenneth Rohde Christiansen.

        Don't unnecessarily copy data when searching for methods in QtClass.

        [Qt] JSValue QtClass::fallbackObject can be optimized
        https://bugs.webkit.org/show_bug.cgi?id=37684

        * bridge/qt/qt_class.cpp:
        (JSC::Bindings::QtClass::fallbackObject):

2010-05-15  Anders Bakken  <agbakken@gmail.com>

        Reviewed by Kenneth Rohde Christiansen.

        Identifier::ascii() is not threadsafe and shouldn't be used for
        converting to and from QString/QByteArray.

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

        * bridge/qt/qt_class.cpp:
        (JSC::Bindings::QtClass::fallbackObject):
        (JSC::Bindings::QtClass::fieldNamed):

2010-05-15  Chang Shu  <chang.shu@nokia.com>

        Reviewed by Kenneth Rohde Christiansen.

        Based on the spec and Philip Taylor's test suite, createImageData() should throw
        an INDEX_SIZE_ERR exception if either the sw or sh arguments are zero.
        The link to the spec:
        http://philip.html5.org/tests/canvas/suite/tests/spec.html#testrefs.2d.imageData.getcreate.zero

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

        The complete test suite is in the process of checking in.
        https://bugs.webkit.org/show_bug.cgi?id=20553

        * html/canvas/CanvasRenderingContext2D.cpp:
        (WebCore::CanvasRenderingContext2D::createImageData):

2010-05-15  Adam Barth  <abarth@webkit.org>

        Reviewed by Darin Adler.

        XMLHttpRequest.getResponseHeader doesn't need to be custom
        https://bugs.webkit.org/show_bug.cgi?id=39125

        I don't see any reason this method needs to be custom.  No new tests
        because there's no behavior change.

        * bindings/js/JSXMLHttpRequestCustom.cpp:
        * bindings/v8/custom/V8XMLHttpRequestCustom.cpp:
        * xml/XMLHttpRequest.idl:

2010-05-15  Adam Barth  <abarth@webkit.org>

        Reviewed by Darin Adler.

        XMLHttpRequest.setRequestHeader shouldn't be custom
        https://bugs.webkit.org/show_bug.cgi?id=39124

        I don't see any reason why this method needs to be custom.  No tests
        because no behavior change.

        * bindings/js/JSXMLHttpRequestCustom.cpp:
        * bindings/scripts/CodeGeneratorJS.pm:
        * bindings/scripts/CodeGeneratorV8.pm:
        * bindings/scripts/test/GObject/WebKitDOMTestObj.cpp:
        (webkit_dom_test_obj_method_that_requires_all_args):
        (webkit_dom_test_obj_method_that_requires_all_args_and_throws):
        * bindings/scripts/test/GObject/WebKitDOMTestObj.h:
        * bindings/scripts/test/JS/JSTestObj.cpp:
        (WebCore::):
        (WebCore::jsTestObjPrototypeFunctionMethodThatRequiresAllArgs):
        (WebCore::jsTestObjPrototypeFunctionMethodThatRequiresAllArgsAndThrows):
        * bindings/scripts/test/JS/JSTestObj.h:
        * bindings/scripts/test/ObjC/DOMTestObj.h:
        * bindings/scripts/test/ObjC/DOMTestObj.mm:
        (-[DOMTestObj methodThatRequiresAllArgs:objArg:]):
        (-[DOMTestObj methodThatRequiresAllArgsAndThrows:objArg:]):
        * bindings/scripts/test/TestObj.idl:
        * bindings/scripts/test/V8/V8TestObj.cpp:
        (WebCore::TestObjInternal::methodThatRequiresAllArgsCallback):
        (WebCore::TestObjInternal::methodThatRequiresAllArgsAndThrowsCallback):
        (WebCore::ConfigureV8TestObjTemplate):
        * bindings/v8/custom/V8XMLHttpRequestCustom.cpp:
        * xml/XMLHttpRequest.idl:

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

        Reviewed by Darin Adler.

        https://bugs.webkit.org/show_bug.cgi?id=39048
        <rdar://problem/7978384> REGRESSION (r55802): XML errors on Google maps ("Entity 'nbsp' not
        defined") with JavaScript disabled

        Google Maps goes into mobile mode if JavaScript is disabled for some reason, and sends XHTML
        content with XHTML Mobile DOCTYPE. We want to handle it whether XHTMLMP is enabled or not.

        Test: fast/doctypes/xhtml-with-xhtmlmp-doctype.xhtml

        * dom/XMLTokenizerLibxml2.cpp: (WebCore::externalSubsetHandler): Restore pre-55802 behavior
        for builds that don't have XHTMLMP enabled. Given that r55802 negated the condition without
        breaking XHTMLMP, this line is actually always needed.

2010-05-15  Vangelis Kokkevis  <vangelis@chromium.org>

        Reviewed by Darin Fisher.

        Fixing LayerChromium hierarchy updates where due to mixed ownership
        handling, sublayer updates didn't always properly update parent-to-child
        and child-to-parent pointers in sync.
        https://bugs.webkit.org/show_bug.cgi?id=39138

        * platform/graphics/chromium/LayerChromium.cpp:
        (WebCore::LayerChromium::~LayerChromium):
        (WebCore::LayerChromium::setNeedsCommit): Typo fix.
        (WebCore::LayerChromium::insertSublayer):
        (WebCore::LayerChromium::removeFromSuperlayer):
        (WebCore::LayerChromium::removeSublayer):
        (WebCore::LayerChromium::replaceSublayer):
        (WebCore::LayerChromium::removeAllSublayers):
        (WebCore::LayerChromium::setSublayers):
        * platform/graphics/chromium/LayerChromium.h:
        (WebCore::LayerChromium::setSuperlayer):

2010-05-15  Andrey Kosyakov  <caseq@chromium.org>

        Reviewed by Timothy Hatcher.

        Got rid of absolute positioning in favor of flex boxes where possible.
        Added shadow for help window.
        Changed window style names to more comprehensible.
        https://bugs.webkit.org/show_bug.cgi?id=39120
 
        * inspector/front-end/HelpScreen.js:
        (WebInspector.HelpScreen):
        * inspector/front-end/helpScreen.css:
        (.help-window-outer):
        (body.attached .help-window-outer):
        (.help-window-main):
        (body.attached .help-window-main):
        (.help-window-caption):
        (body.attached .help-window-caption):
        (.help-window-title):
        (.help-scrollable):
        (.help-close-button):
        (body.platform-mac .help-close-button):
        (body:not(.platform-mac) .help-close-button):

2010-05-15  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r59549.
        http://trac.webkit.org/changeset/59549
        https://bugs.webkit.org/show_bug.cgi?id=39167

        Broke Chromium build (Requested by abarth on #webkit).

        * bindings/scripts/CodeGeneratorV8.pm:
        * storage/IDBRequest.cpp:
        (WebCore::IDBRequest::suspend):
        (WebCore::IDBRequest::resume):
        (WebCore::IDBRequest::timerFired):
        (WebCore::IDBRequest::onEventCommon):
        * storage/IDBRequest.h:

2010-05-15  Vangelis Kokkevis  <vangelis@chromium.org>

        Reviewed by Darin Fisher.

        Adding code path for composited layers (LayerChromium) containing only
        an Image element.
        https://bugs.webkit.org/show_bug.cgi?id=39142

        No new tests, covered under the existing tests for composited layers.

        * platform/graphics/chromium/GraphicsLayerChromium.cpp:
        (WebCore::GraphicsLayerChromium::setContentsToImage):
        (WebCore::GraphicsLayerChromium::updateContentsImage):
        * platform/graphics/chromium/GraphicsLayerChromium.h:
        * platform/graphics/chromium/LayerChromium.cpp:
        (WebCore::LayerChromium::LayerChromium):
        (WebCore::LayerChromium::setContents):
        * platform/graphics/chromium/LayerChromium.h:
        (WebCore::LayerChromium::contents):

2010-05-15  Andrei Popescu  <andreip@google.com>

        Reviewed by Jeremy Orlow.

        IDBRequest is not a proper ActiveDomObject
        https://bugs.webkit.org/show_bug.cgi?id=39001

        Add IDBRequest interface to the IsActiveDomType
        routine of the CodeGeneratorV8.pm.

        Rename IDBRequest::m_stopped to m_suspended and reset
        the flag when resume() is called.

        No new tests, Indexed Database isn't yet testable.

        * bindings/scripts/CodeGeneratorV8.pm:
        * storage/IDBRequest.cpp:
        (WebCore::IDBRequest::suspend):
        (WebCore::IDBRequest::resume):
        (WebCore::IDBRequest::timerFired):
        (WebCore::IDBRequest::onEventCommon):
        * storage/IDBRequest.h:

2010-05-15  Andrei Bucur  <abucur@adobe.com>

        Reviewed by Gustavo Noronha Silva.

        Functions using the cairo_pattern_t object returned by
        Pattern::createPlatformPattern sould destroy it after the painting
        operation. Failing to do so causes memory leaks.

        Test: No test was added because the patch adds no new functionality.
        It just completes the normal life cycle of a cairo_pattern_t object.

        * platform/graphics/cairo/FontCairo.cpp:
        (WebCore::Font::drawGlyphs):
        * platform/graphics/cairo/GraphicsContextCairo.cpp:
        (WebCore::setPlatformFill):
        (WebCore::setPlatformStroke):

2010-05-15  Yael Aharon  <yael.aharon@nokia.com>

        Reviewed by Kent Tamura.

        Initial support for HTMLMeterElement
        https://bugs.webkit.org/show_bug.cgi?id=38140

        This patch adds support for HTMLMeterElement, including default rendering
        of the meter element. That is because some platforms do not have a native gauge.
        The feature is turned on only for the Qt platform.

        Tests: fast/dom/HTMLMeterElement/meter-element.html
               fast/dom/HTMLMeterElement/set-meter-properties.html

        * DerivedSources.cpp:
        * DerivedSources.make:
        * GNUmakefile.am:
        * WebCore.gypi:
        * WebCore.pri:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * css/CSSPrimitiveValueMappings.h:
        (WebCore::CSSPrimitiveValue::CSSPrimitiveValue):
        * css/CSSValueKeywords.in:
        * css/html.css:
        (meter):
        (meter::-webkit-meter):
        * html/HTMLAttributeNames.in:
        * html/HTMLElement.cpp:
        (WebCore::inlineTagList):
        * html/HTMLElementsAllInOne.cpp:
        * html/HTMLMeterElement.cpp: Added.
        (WebCore::HTMLMeterElement::HTMLMeterElement):
        (WebCore::HTMLMeterElement::create):
        (WebCore::HTMLMeterElement::createRenderer):
        (WebCore::HTMLMeterElement::formControlType):
        (WebCore::HTMLMeterElement::parseMappedAttribute):
        (WebCore::HTMLMeterElement::min):
        (WebCore::HTMLMeterElement::setMin):
        (WebCore::HTMLMeterElement::max):
        (WebCore::HTMLMeterElement::setMax):
        (WebCore::HTMLMeterElement::value):
        (WebCore::HTMLMeterElement::setValue):
        (WebCore::HTMLMeterElement::low):
        (WebCore::HTMLMeterElement::setLow):
        (WebCore::HTMLMeterElement::high):
        (WebCore::HTMLMeterElement::setHigh):
        (WebCore::HTMLMeterElement::optimum):
        (WebCore::HTMLMeterElement::setOptimum):
        * html/HTMLMeterElement.h: Added.
        (WebCore::HTMLMeterElement::recalcWillValidate):
        * html/HTMLMeterElement.idl: Added.
        * html/HTMLTagNames.in:
        * page/DOMWindow.idl:
        * platform/ThemeTypes.h:
        * rendering/RenderMeter.cpp: Added.
        (WebCore::RenderMeter::RenderMeter):
        (WebCore::RenderMeter::layout):
        (WebCore::RenderMeter::updateFromElement):
        * rendering/RenderMeter.h: Added.
        (WebCore::RenderMeter::renderName):
        (WebCore::RenderMeter::isMeter):
        (WebCore::toRenderMeter):
        * rendering/RenderObject.h:
        (WebCore::RenderObject::isMeter):
        * rendering/RenderTheme.cpp:
        (WebCore::RenderTheme::adjustStyle):
        (WebCore::RenderTheme::paint):
        (WebCore::RenderTheme::paintBorderOnly):
        (WebCore::RenderTheme::paintDecorations):
        (WebCore::RenderTheme::adjustMeterStyle):
        (WebCore::RenderTheme::paintMeter):
        * rendering/RenderTheme.h:

2010-05-15  Eric Uhrhane  <ericu@chromium.org>

        Reviewed by Dmitry Titov.

        Add bindings for async DB API in Workers.
        https://bugs.webkit.org/show_bug.cgi?id=34992

        Tests: storage/change-version-handle-reuse-worker.html
               storage/execute-sql-args-worker.html

        * bindings/js/JSWorkerContextCustom.cpp: Add openDatabase binding.
        (WebCore::JSWorkerContext::openDatabase):

        * bindings/v8/custom/V8WorkerContextCustom.cpp: Add openDatabase stub; Chromium will need work both in V8 and in the browser process before we can turn this on there.
        (WebCore::V8WorkerContext::openDatabaseCallback):

        Add NoStaticTables flags to all objects now shared with workers.
        * storage/Database.idl:
        * storage/SQLError.idl:
        * storage/SQLResultSet.idl:
        * storage/SQLResultSetRowList.idl:
        * storage/SQLTransaction.idl:
        
        * workers/WorkerContext.h: Add databaseExceededQuota.
        * workers/WorkerContext.cpp:
        (WebCore::WorkerContext::databaseExceededQuota): Add stub implementation for testing; you just get 5MB for now.
        (WebCore::WorkerContext::openDatabase): Remove invalid assertion.

        Add the IDL for the call to openDatabase.
        * workers/WorkerContext.idl:

2010-05-15  Leandro Pereira  <leandro@profusion.mobi>

        Reviewed by Adam Treat.

        [EFL] Add build system for the EFL port.
        http://webkit.org/b/37945

        * CMakeLists.txt: Added.
        * CMakeListsEfl.txt: Added.
        * config.h: Add conditional to look for cmakeconfig.h.

2010-05-15  Adam Barth  <abarth@webkit.org>

        Reviewed by Darin Adler.

        Clipboard.setData doesn't need to be custom
        https://bugs.webkit.org/show_bug.cgi?id=39133

        The implementation of the custom binding for this function was a bit
        different than its declaration in the IDL file.  I've updated the IDL
        to match the implementation, but we probably should check whether our
        behavior is correct with respect to the specification.

        No tests because I've maintained our current behavior.

        * bindings/js/JSClipboardCustom.cpp:
        * bindings/v8/custom/V8ClipboardCustom.cpp:
        * dom/Clipboard.idl:

2010-05-15  Yaar Schnitman  <yaar@chromium.org>

        Reviewed by Adam Barth.

        V8 overload support ported to JSC. Unforking of overloaded declarations in WebGL & Canvas will be done in subsequent patches.
        https://bugs.webkit.org/show_bug.cgi?id=38920

        Note that JSTestCallback.cpp/h include minor irrelevant changes too since somebody forgot to update them after changing the JS generator.

        * bindings/scripts/CodeGenerator.pm:
        * bindings/scripts/CodeGeneratorJS.pm:
        * bindings/scripts/CodeGeneratorV8.pm:
        * bindings/scripts/test/JS/JSTestCallback.cpp:
        (WebCore::JSTestCallback::JSTestCallback):
        (WebCore::JSTestCallback::~JSTestCallback):
        * bindings/scripts/test/JS/JSTestCallback.h: 
        * bindings/scripts/test/JS/JSTestObj.cpp:
        (WebCore::):
        (WebCore::jsTestObjPrototypeFunctionOverloadedMethod1):
        (WebCore::jsTestObjPrototypeFunctionOverloadedMethod2):
        (WebCore::jsTestObjPrototypeFunctionOverloadedMethod3):
        (WebCore::jsTestObjPrototypeFunctionOverloadedMethod4):
        (WebCore::testObjPrototypeFunctionOverloadedMethod):
        * bindings/scripts/test/JS/JSTestObj.h:
        * bindings/scripts/test/TestObj.idl:

2010-05-15  Joanmarie Diggs  <joanmarie.diggs@gmail.com>

        Reviewed by Xan Lopez.

        https://bugs.webkit.org/show_bug.cgi?id=30500
        [Gtk] Find a way for WebKit to "announce" itself so that ATs can readily distinguish it from true Gtk/Gail

        The "announcement" is now made in the form of an object attribute
        associated with the AtkObject.

        * accessibility/gtk/AccessibilityObjectWrapperAtk.cpp:
        (webkit_accessible_get_attributes):

2010-05-15  Adam Barth  <abarth@webkit.org>

        Reviewed by Darin Adler.

        Show a console message when X-Frame-Options blocks a load
        https://bugs.webkit.org/show_bug.cgi?id=39087

        The blank page confuses people when X-Frame-Options blocks a load.  The
        console message should at least give them a hint as to what's going on.

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

2010-05-15  Ilya Tikhonovsky  <loislo@chromium.org>

        Reviewed by Geoffrey Garen.

        WebInspector: JSC Should provide heap size info for Timeline panel.
        https://bugs.webkit.org/show_bug.cgi?id=38420

        * GNUmakefile.am:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/ScriptGCEvent.cpp: Added.
        (WebCore::ScriptGCEvent::getHeapSize):
        * bindings/js/ScriptGCEvent.h:

2010-05-15  Dave Tapuska  <dtapuska@rim.com>

        Reviewed by Darin Adler.

        Fix alignment faults on ARMv5TE architectures.

        In debug mode the RenderAreaDebugHeader was 12 bytes which
        caused an alignment failure for RenderObjects because they
        would start on a 4 byte boundary. Align the RenderArenaDebugHeader
        using the ARENA_ALIGN macro.

        In NDEBUG mode the RenderArena objects come from a pool which
        has 4 byte alignment. Allow the alignment to be based on the
        AllocAlignmentInteger. This define will be activated for ARMv5TE.

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

2010-05-14  Adam Barth  <abarth@webkit.org>

        Reviewed by Darin Adler.

        XMLHttpRequest.overrideMimeType doesn't need to be custom
        https://bugs.webkit.org/show_bug.cgi?id=39127

        I don't see any reason why this method should be custom.  No tests
        because no behavior change.

        * bindings/js/JSXMLHttpRequestCustom.cpp:
        * bindings/v8/custom/V8XMLHttpRequestCustom.cpp:
        * xml/XMLHttpRequest.idl:

2010-05-14  Adele Peterson  <adele@apple.com>

        Reviewed by Dave Hyatt.

        Fix for https://bugs.webkit.org/show_bug.cgi?id=39095 
        <rdar://problem/7984158> REGRESSION (r53085): Infinite recursion in Position::getInlineBoxAndOffset when changing writing direction to right-to-left

        Test: editing/selection/applystyle-to-inline-inside-block.html

        * dom/Position.cpp: (WebCore::Position::getInlineBoxAndOffset): Now that this function correctly goes in and out of editable areas by calling
        downstreamIgnoringEditingBoundaries and upstreamIgnoringEditingBoundaries for blocks (added in r58665), we no longer need a special case to 
        jump out to the parent when we hit an inline (which was added in r53085 when this issue was introduced).

2010-05-14  Brian Weinstein  <bweinstein@apple.com>

        Reviewed by Mark Rowe.

        Hopefully a last fix for the build. Call -mkdir instead of mkdir, so we don't bail if the mkdir call fails. Additionally,
        use the %Env% syntax instead of $(Env), which is what we need if we are referring to Windows environment variables instead
        of nmake variables.
        
        * WebCore.vcproj/WebCore.make:

2010-05-14  Stephanie Lewis  <slewis@apple.com>

        Rubber-stamped by Mark Rowe.

        Update order files.

        * WebCore.order:

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

        Reviewed by Simon Fraser.

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

        Make RenderLayers position properly inside multicolumn layout.
        
        (1) Create RenderLayers when column properties are specified.  This allows descendant layers to easily
        know they are inside a multicolumn layout when positioning.
        
        (2) Patch updateLayerPosition to offset the layer into the first column that contains the layer.  Splitting
        of a layer across columns still does not work, but the layer will now at least appear in the first column in
        which it occurs.
        
        (3) Fix pagination bugs caused by the fact that visual overflow doesn't propagate up the line box tree when layers
        are involved.  Make sure to use lineTop and lineBottom in this case (it's not perfect, but it gets most cases
        working properly).  With this change elements like <video> will paginate properly and not get split across pages.

        (4) Make column repainting and layer positioning work with RTL columns by fixing adjustForColumns to
        account for RTL.
        
        (5) Fix RTL pagination by making sure the column pagination rects are the content width of the whole block and not just
        the width of one column.

        Added fast/multicol/layers-in-multicol.html

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::layoutColumns):
        (WebCore::RenderBlock::adjustForColumns):
        * rendering/RenderBox.h:
        (WebCore::RenderBox::locationOffset):
        * rendering/RenderBoxModelObject.h:
        (WebCore::RenderBoxModelObject::requiresLayer):
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::updateLayerPosition):
        (WebCore::RenderLayer::convertToLayerCoords):
        (WebCore::RenderLayer::shouldBeNormalFlowOnly):
        * rendering/RenderLineBoxList.cpp:
        (WebCore::RenderLineBoxList::paint):
        * rendering/RenderView.cpp:
        (WebCore::RenderView::RenderView):
        * rendering/RenderView.h:
        (WebCore::RenderView::requiresLayer):
        * rendering/style/RenderStyle.h:
        (WebCore::InheritedFlags::specifiesColumns):

2010-05-14  Leon Clarke  <leonclarke@google.com>

        Reviewed by Steve Block.

        Refactor signature of tokenizeRelAttribute and the variables it refers to so that new features don't keep changing the signature, and make m_disabledState into an enum.
        https://bugs.webkit.org/show_bug.cgi?id=38900

        No new tests. Refactoring only.

        * html/HTMLLinkElement.cpp:
        (WebCore::HTMLLinkElement::HTMLLinkElement):
        (WebCore::HTMLLinkElement::setDisabledState):
        (WebCore::HTMLLinkElement::parseMappedAttribute):
        (WebCore::HTMLLinkElement::tokenizeRelAttribute):
        (WebCore::HTMLLinkElement::process):
        (WebCore::HTMLLinkElement::addSubresourceAttributeURLs):
        * html/HTMLLinkElement.h:
        (WebCore::HTMLLinkElement::RelAttribute::RelAttribute):
        (WebCore::HTMLLinkElement::isAlternate):
        (WebCore::HTMLLinkElement::isDisabled):
        (WebCore::HTMLLinkElement::isEnabledViaScript):
        (WebCore::HTMLLinkElement::isIcon):
        (WebCore::HTMLLinkElement::):
        * html/PreloadScanner.cpp:
        (WebCore::PreloadScanner::processAttribute):

2010-05-14  Noam Rosenthal  <noam.rosenthal@nokia.com>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] GraphicsLayer caches directly composited images
        https://bugs.webkit.org/show_bug.cgi?id=38444

        Directly-composited images and solid fills shouldn't be cached, as that cache
        is never used (see GraphicsLayerQtImpl::paint). Cache is only relevant for HTML content,
        but we were missing that test.
        The fix makes sure we only cache HTML content.

        No new tests: this is a minor optimization.

        * platform/graphics/qt/GraphicsLayerQt.cpp:
        (WebCore::GraphicsLayerQtImpl::flushChanges):

2010-05-14  Brian Weinstein  <bweinstein@apple.com>

        Reviewed by Mark Rowe.

        Build fix. Had the environment variables wrong for source and destination of the copy operation
        that was added.

        * WebCore.vcproj/WebCore.make:

2010-05-14  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        Remove custom bindings for HTMLInputElement
        https://bugs.webkit.org/show_bug.cgi?id=38344

        Fix a bug in the TestObj.idl file and update expected results.  This
        was originally part of a larger change reviewed by Eric, but I'm
        landing it separately to help me understand the more interesting bits
        of the patch clearly.

        * bindings/scripts/test/GObject/WebKitDOMTestObj.cpp:
        (webkit_dom_test_obj_get_attr_with_setter_exception):
        (webkit_dom_test_obj_set_attr_with_setter_exception):
        (webkit_dom_test_obj_set_attr_with_getter_exception):
        (webkit_dom_test_obj_set_property):
        (webkit_dom_test_obj_get_property):
        * bindings/scripts/test/GObject/WebKitDOMTestObj.h:
        * bindings/scripts/test/JS/JSTestObj.cpp:
        (WebCore::jsTestObjAttrWithSetterException):
        (WebCore::setJSTestObjAttrWithSetterException):
        (WebCore::setJSTestObjAttrWithGetterException):
        * bindings/scripts/test/ObjC/DOMTestObj.mm:
        (-[DOMTestObj attrWithSetterException]):
        (-[DOMTestObj setAttrWithSetterException:]):
        (-[DOMTestObj setAttrWithGetterException:]):
        * bindings/scripts/test/TestObj.idl:
        * bindings/scripts/test/V8/V8TestObj.cpp:
        (WebCore::TestObjInternal::attrWithSetterExceptionAttrGetter):
        (WebCore::TestObjInternal::attrWithSetterExceptionAttrSetter):
        (WebCore::TestObjInternal::attrWithGetterExceptionAttrSetter):

2010-05-14  Kenneth Russell  <kbr@google.com>

        Reviewed by Darin Adler.

        Rename WebGLArray types to TypedArray types
        https://bugs.webkit.org/show_bug.cgi?id=39091

        Extended functionality of do-webcore-rename script and used it to
        rename the WebGLArray types to the TypedArray naming convention.
        The only source files which were touched by hand, and which are
        being manually reviewed, are:
            WebCore/page/DOMWindow.idl
            WebCore/bindings/generic/RuntimeEnabledFeatures.h (script's changes undone)
            WebKit/WebCore/bindings/js/JSDOMWindowCustom.cpp
            WebKit/WebCore/bindings/v8/custom/V8DOMWindowCustom.cpp
        These only needed to be touched to update the aliases between the
        WebGLArray and TypedArray names introduced in bug 39036. (It was
        not feasible to have do-webcore-rename handle this as it would
        introduce circular renamings.) These aliases will be removed in
        roughly a month once existing WebGL content has been updated.

        No new tests; covered under existing WebGL tests. Updated
        constructed-objects-prototypes and prototype-inheritance-2 tests.
        Ran all layout tests in Safari and all WebGL tests in Chromium.

        * DerivedSources.make:
        * GNUmakefile.am:
        * WebCore.gypi:
        * WebCore.pri:
        * WebCore.pro:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSArrayBufferConstructor.cpp: Copied from WebCore/bindings/js/JSWebGLArrayBufferConstructor.cpp.
        (WebCore::):
        (WebCore::JSArrayBufferConstructor::JSArrayBufferConstructor):
        (WebCore::constructCanvasArrayBuffer):
        (WebCore::JSArrayBufferConstructor::getConstructData):
        * bindings/js/JSArrayBufferConstructor.h: Copied from WebCore/bindings/js/JSWebGLArrayBufferConstructor.h.
        (WebCore::construct):
        * bindings/js/JSArrayBufferViewCustom.cpp: Copied from WebCore/bindings/js/JSWebGLArrayCustom.cpp.
        (WebCore::toJS):
        (WebCore::JSArrayBufferView::slice):
        * bindings/js/JSArrayBufferViewHelper.h: Copied from WebCore/bindings/js/JSWebGLArrayHelper.h.
        * bindings/js/JSDOMWindowCustom.cpp:
        (WebCore::JSDOMWindow::arrayBuffer):
        (WebCore::JSDOMWindow::int8Array):
        (WebCore::JSDOMWindow::uint8Array):
        (WebCore::JSDOMWindow::int32Array):
        (WebCore::JSDOMWindow::uint32Array):
        (WebCore::JSDOMWindow::int16Array):
        (WebCore::JSDOMWindow::uint16Array):
        (WebCore::JSDOMWindow::floatArray):
        (WebCore::JSDOMWindow::webGLArrayBuffer):
        (WebCore::JSDOMWindow::webGLByteArray):
        (WebCore::JSDOMWindow::webGLUnsignedByteArray):
        (WebCore::JSDOMWindow::webGLIntArray):
        (WebCore::JSDOMWindow::webGLUnsignedIntArray):
        (WebCore::JSDOMWindow::webGLShortArray):
        (WebCore::JSDOMWindow::webGLUnsignedShortArray):
        (WebCore::JSDOMWindow::webGLFloatArray):
        * bindings/js/JSFloatArrayConstructor.cpp: Copied from WebCore/bindings/js/JSWebGLFloatArrayConstructor.cpp.
        (WebCore::):
        (WebCore::JSFloatArrayConstructor::JSFloatArrayConstructor):
        (WebCore::constructCanvasFloatArray):
        (WebCore::JSFloatArrayConstructor::getConstructData):
        * bindings/js/JSFloatArrayConstructor.h: Copied from WebCore/bindings/js/JSWebGLFloatArrayConstructor.h.
        * bindings/js/JSFloatArrayCustom.cpp: Copied from WebCore/bindings/js/JSWebGLFloatArrayCustom.cpp.
        (WebCore::JSFloatArray::indexSetter):
        (WebCore::toJS):
        (WebCore::JSFloatArray::set):
        * bindings/js/JSInt16ArrayConstructor.cpp: Copied from WebCore/bindings/js/JSWebGLShortArrayConstructor.cpp.
        (WebCore::):
        (WebCore::JSInt16ArrayConstructor::JSInt16ArrayConstructor):
        (WebCore::constructCanvasShortArray):
        (WebCore::JSInt16ArrayConstructor::getConstructData):
        * bindings/js/JSInt16ArrayConstructor.h: Copied from WebCore/bindings/js/JSWebGLShortArrayConstructor.h.
        * bindings/js/JSInt16ArrayCustom.cpp: Copied from WebCore/bindings/js/JSWebGLShortArrayCustom.cpp.
        (WebCore::JSInt16Array::indexSetter):
        (WebCore::toJS):
        (WebCore::JSInt16Array::set):
        * bindings/js/JSInt32ArrayConstructor.cpp: Copied from WebCore/bindings/js/JSWebGLIntArrayConstructor.cpp.
        (WebCore::):
        (WebCore::JSInt32ArrayConstructor::JSInt32ArrayConstructor):
        (WebCore::constructCanvasIntArray):
        (WebCore::JSInt32ArrayConstructor::getConstructData):
        * bindings/js/JSInt32ArrayConstructor.h: Copied from WebCore/bindings/js/JSWebGLIntArrayConstructor.h.
        * bindings/js/JSInt32ArrayCustom.cpp: Copied from WebCore/bindings/js/JSWebGLIntArrayCustom.cpp.
        (WebCore::JSInt32Array::indexSetter):
        (WebCore::toJS):
        (WebCore::JSInt32Array::set):
        * bindings/js/JSInt8ArrayConstructor.cpp: Copied from WebCore/bindings/js/JSWebGLByteArrayConstructor.cpp.
        (WebCore::):
        (WebCore::JSInt8ArrayConstructor::JSInt8ArrayConstructor):
        (WebCore::constructCanvasByteArray):
        (WebCore::JSInt8ArrayConstructor::getConstructData):
        * bindings/js/JSInt8ArrayConstructor.h: Copied from WebCore/bindings/js/JSWebGLByteArrayConstructor.h.
        * bindings/js/JSInt8ArrayCustom.cpp: Copied from WebCore/bindings/js/JSWebGLByteArrayCustom.cpp.
        (WebCore::JSInt8Array::indexSetter):
        (WebCore::toJS):
        (WebCore::JSInt8Array::set):
        * bindings/js/JSUint16ArrayConstructor.cpp: Copied from WebCore/bindings/js/JSWebGLUnsignedShortArrayConstructor.cpp.
        (WebCore::):
        (WebCore::JSUint16ArrayConstructor::JSUint16ArrayConstructor):
        (WebCore::constructCanvasUnsignedShortArray):
        (WebCore::JSUint16ArrayConstructor::getConstructData):
        * bindings/js/JSUint16ArrayConstructor.h: Copied from WebCore/bindings/js/JSWebGLUnsignedShortArrayConstructor.h.
        * bindings/js/JSUint16ArrayCustom.cpp: Copied from WebCore/bindings/js/JSWebGLUnsignedShortArrayCustom.cpp.
        (WebCore::JSUint16Array::indexSetter):
        (WebCore::toJS):
        (WebCore::JSUint16Array::set):
        * bindings/js/JSUint32ArrayConstructor.cpp: Copied from WebCore/bindings/js/JSWebGLUnsignedIntArrayConstructor.cpp.
        (WebCore::):
        (WebCore::JSUint32ArrayConstructor::JSUint32ArrayConstructor):
        (WebCore::constructCanvasUnsignedIntArray):
        (WebCore::JSUint32ArrayConstructor::getConstructData):
        * bindings/js/JSUint32ArrayConstructor.h: Copied from WebCore/bindings/js/JSWebGLUnsignedIntArrayConstructor.h.
        * bindings/js/JSUint32ArrayCustom.cpp: Copied from WebCore/bindings/js/JSWebGLUnsignedIntArrayCustom.cpp.
        (WebCore::JSUint32Array::indexSetter):
        (WebCore::toJS):
        (WebCore::JSUint32Array::set):
        * bindings/js/JSUint8ArrayConstructor.cpp: Copied from WebCore/bindings/js/JSWebGLUnsignedByteArrayConstructor.cpp.
        (WebCore::):
        (WebCore::JSUint8ArrayConstructor::JSUint8ArrayConstructor):
        (WebCore::constructCanvasUnsignedByteArray):
        (WebCore::JSUint8ArrayConstructor::getConstructData):
        * bindings/js/JSUint8ArrayConstructor.h: Copied from WebCore/bindings/js/JSWebGLUnsignedByteArrayConstructor.h.
        * bindings/js/JSUint8ArrayCustom.cpp: Copied from WebCore/bindings/js/JSWebGLUnsignedByteArrayCustom.cpp.
        (WebCore::JSUint8Array::indexSetter):
        (WebCore::toJS):
        (WebCore::JSUint8Array::set):
        * bindings/js/JSWebGLArrayBufferConstructor.cpp: Removed.
        * bindings/js/JSWebGLArrayBufferConstructor.h: Removed.
        * bindings/js/JSWebGLArrayCustom.cpp: Removed.
        * bindings/js/JSWebGLArrayHelper.h: Removed.
        * bindings/js/JSWebGLByteArrayConstructor.cpp: Removed.
        * bindings/js/JSWebGLByteArrayConstructor.h: Removed.
        * bindings/js/JSWebGLByteArrayCustom.cpp: Removed.
        * bindings/js/JSWebGLFloatArrayConstructor.cpp: Removed.
        * bindings/js/JSWebGLFloatArrayConstructor.h: Removed.
        * bindings/js/JSWebGLFloatArrayCustom.cpp: Removed.
        * bindings/js/JSWebGLIntArrayConstructor.cpp: Removed.
        * bindings/js/JSWebGLIntArrayConstructor.h: Removed.
        * bindings/js/JSWebGLIntArrayCustom.cpp: Removed.
        * bindings/js/JSWebGLRenderingContextCustom.cpp:
        (WebCore::JSWebGLRenderingContext::bufferData):
        (WebCore::JSWebGLRenderingContext::bufferSubData):
        (WebCore::JSWebGLRenderingContext::texImage2D):
        (WebCore::JSWebGLRenderingContext::texSubImage2D):
        (WebCore::dataFunctionf):
        (WebCore::dataFunctioni):
        (WebCore::dataFunctionMatrix):
        * bindings/js/JSWebGLShortArrayConstructor.cpp: Removed.
        * bindings/js/JSWebGLShortArrayConstructor.h: Removed.
        * bindings/js/JSWebGLShortArrayCustom.cpp: Removed.
        * bindings/js/JSWebGLUnsignedByteArrayConstructor.cpp: Removed.
        * bindings/js/JSWebGLUnsignedByteArrayConstructor.h: Removed.
        * bindings/js/JSWebGLUnsignedByteArrayCustom.cpp: Removed.
        * bindings/js/JSWebGLUnsignedIntArrayConstructor.cpp: Removed.
        * bindings/js/JSWebGLUnsignedIntArrayConstructor.h: Removed.
        * bindings/js/JSWebGLUnsignedIntArrayCustom.cpp: Removed.
        * bindings/js/JSWebGLUnsignedShortArrayConstructor.cpp: Removed.
        * bindings/js/JSWebGLUnsignedShortArrayConstructor.h: Removed.
        * bindings/js/JSWebGLUnsignedShortArrayCustom.cpp: Removed.
        * bindings/v8/V8DOMWrapper.cpp:
        * bindings/v8/custom/V8ArrayBufferCustom.cpp: Copied from WebCore/bindings/v8/custom/V8WebGLArrayBufferCustom.cpp.
        (WebCore::V8ArrayBuffer::constructorCallback):
        * bindings/v8/custom/V8ArrayBufferViewCustom.cpp: Copied from WebCore/bindings/v8/custom/V8WebGLArrayCustom.cpp.
        (WebCore::toV8):
        (WebCore::V8ArrayBufferView::sliceCallback):
        * bindings/v8/custom/V8ArrayBufferViewCustom.h: Copied from WebCore/bindings/v8/custom/V8WebGLArrayCustom.h.
        (WebCore::constructWebGLArray):
        * bindings/v8/custom/V8DOMWindowCustom.cpp:
        (WebCore::V8DOMWindow::WebGLArrayBufferAccessorGetter):
        (WebCore::V8DOMWindow::WebGLByteArrayAccessorGetter):
        (WebCore::V8DOMWindow::WebGLUnsignedByteArrayAccessorGetter):
        (WebCore::V8DOMWindow::WebGLShortArrayAccessorGetter):
        (WebCore::V8DOMWindow::WebGLUnsignedShortArrayAccessorGetter):
        (WebCore::V8DOMWindow::WebGLIntArrayAccessorGetter):
        (WebCore::V8DOMWindow::WebGLUnsignedIntArrayAccessorGetter):
        (WebCore::V8DOMWindow::WebGLFloatArrayAccessorGetter):
        * bindings/v8/custom/V8FloatArrayCustom.cpp: Copied from WebCore/bindings/v8/custom/V8WebGLFloatArrayCustom.cpp.
        (WebCore::V8FloatArray::constructorCallback):
        (WebCore::V8FloatArray::setCallback):
        (WebCore::toV8):
        * bindings/v8/custom/V8Int16ArrayCustom.cpp: Copied from WebCore/bindings/v8/custom/V8WebGLShortArrayCustom.cpp.
        (WebCore::V8Int16Array::constructorCallback):
        (WebCore::V8Int16Array::setCallback):
        (WebCore::toV8):
        * bindings/v8/custom/V8Int32ArrayCustom.cpp: Copied from WebCore/bindings/v8/custom/V8WebGLIntArrayCustom.cpp.
        (WebCore::V8Int32Array::constructorCallback):
        (WebCore::V8Int32Array::setCallback):
        (WebCore::toV8):
        * bindings/v8/custom/V8Int8ArrayCustom.cpp: Copied from WebCore/bindings/v8/custom/V8WebGLByteArrayCustom.cpp.
        (WebCore::V8Int8Array::constructorCallback):
        (WebCore::V8Int8Array::setCallback):
        (WebCore::toV8):
        * bindings/v8/custom/V8Uint16ArrayCustom.cpp: Copied from WebCore/bindings/v8/custom/V8WebGLUnsignedShortArrayCustom.cpp.
        (WebCore::V8Uint16Array::constructorCallback):
        (WebCore::V8Uint16Array::setCallback):
        (WebCore::toV8):
        * bindings/v8/custom/V8Uint32ArrayCustom.cpp: Copied from WebCore/bindings/v8/custom/V8WebGLUnsignedIntArrayCustom.cpp.
        (WebCore::V8Uint32Array::constructorCallback):
        (WebCore::V8Uint32Array::setCallback):
        (WebCore::toV8):
        * bindings/v8/custom/V8Uint8ArrayCustom.cpp: Copied from WebCore/bindings/v8/custom/V8WebGLUnsignedByteArrayCustom.cpp.
        (WebCore::V8Uint8Array::constructorCallback):
        (WebCore::V8Uint8Array::setCallback):
        (WebCore::toV8):
        * bindings/v8/custom/V8WebGLArrayBufferCustom.cpp: Removed.
        * bindings/v8/custom/V8WebGLArrayCustom.cpp: Removed.
        * bindings/v8/custom/V8WebGLArrayCustom.h: Removed.
        * bindings/v8/custom/V8WebGLByteArrayCustom.cpp: Removed.
        * bindings/v8/custom/V8WebGLFloatArrayCustom.cpp: Removed.
        * bindings/v8/custom/V8WebGLIntArrayCustom.cpp: Removed.
        * bindings/v8/custom/V8WebGLRenderingContextCustom.cpp:
        (WebCore::vertexAttribAndUniformHelperf):
        (WebCore::uniformHelperi):
        (WebCore::uniformMatrixHelper):
        * bindings/v8/custom/V8WebGLShortArrayCustom.cpp: Removed.
        * bindings/v8/custom/V8WebGLUnsignedByteArrayCustom.cpp: Removed.
        * bindings/v8/custom/V8WebGLUnsignedIntArrayCustom.cpp: Removed.
        * bindings/v8/custom/V8WebGLUnsignedShortArrayCustom.cpp: Removed.
        * html/canvas/ArrayBuffer.cpp: Copied from WebCore/html/canvas/WebGLArrayBuffer.cpp.
        (WebCore::ArrayBuffer::create):
        (WebCore::ArrayBuffer::ArrayBuffer):
        (WebCore::ArrayBuffer::data):
        (WebCore::ArrayBuffer::byteLength):
        (WebCore::ArrayBuffer::~ArrayBuffer):
        (WebCore::ArrayBuffer::tryAllocate):
        * html/canvas/ArrayBuffer.h: Copied from WebCore/html/canvas/WebGLArrayBuffer.h.
        * html/canvas/ArrayBuffer.idl: Copied from WebCore/html/canvas/WebGLArrayBuffer.idl.
        * html/canvas/ArrayBufferView.cpp: Copied from WebCore/html/canvas/WebGLArray.cpp.
        (WebCore::ArrayBufferView::ArrayBufferView):
        (WebCore::ArrayBufferView::~ArrayBufferView):
        (WebCore::ArrayBufferView::setImpl):
        (WebCore::ArrayBufferView::calculateOffsetAndLength):
        * html/canvas/ArrayBufferView.h: Copied from WebCore/html/canvas/WebGLArray.h.
        (WebCore::ArrayBufferView::buffer):
        (WebCore::ArrayBufferView::verifySubRange):
        (WebCore::ArrayBufferView::clampOffsetAndNumElements):
        * html/canvas/ArrayBufferView.idl: Copied from WebCore/html/canvas/WebGLArray.idl.
        * html/canvas/FloatArray.cpp: Copied from WebCore/html/canvas/WebGLFloatArray.cpp.
        (WebCore::FloatArray::create):
        (WebCore::FloatArray::FloatArray):
        (WebCore::FloatArray::slice):
        * html/canvas/FloatArray.h: Copied from WebCore/html/canvas/WebGLFloatArray.h.
        (WebCore::FloatArray::set):
        (WebCore::FloatArray::item):
        * html/canvas/FloatArray.idl: Copied from WebCore/html/canvas/WebGLFloatArray.idl.
        * html/canvas/Int16Array.cpp: Copied from WebCore/html/canvas/WebGLShortArray.cpp.
        (WebCore::Int16Array::create):
        (WebCore::Int16Array::Int16Array):
        (WebCore::Int16Array::slice):
        * html/canvas/Int16Array.h: Copied from WebCore/html/canvas/WebGLShortArray.h.
        * html/canvas/Int16Array.idl: Copied from WebCore/html/canvas/WebGLShortArray.idl.
        * html/canvas/Int32Array.cpp: Copied from WebCore/html/canvas/WebGLIntArray.cpp.
        (WebCore::Int32Array::create):
        (WebCore::Int32Array::Int32Array):
        (WebCore::Int32Array::slice):
        * html/canvas/Int32Array.h: Copied from WebCore/html/canvas/WebGLIntArray.h.
        * html/canvas/Int32Array.idl: Copied from WebCore/html/canvas/WebGLIntArray.idl.
        * html/canvas/Int8Array.cpp: Copied from WebCore/html/canvas/WebGLByteArray.cpp.
        (WebCore::Int8Array::create):
        (WebCore::Int8Array::Int8Array):
        (WebCore::Int8Array::slice):
        * html/canvas/Int8Array.h: Copied from WebCore/html/canvas/WebGLByteArray.h.
        * html/canvas/Int8Array.idl: Copied from WebCore/html/canvas/WebGLByteArray.idl.
        * html/canvas/IntegralTypedArrayBase.h: Copied from WebCore/html/canvas/WebGLIntegralTypedArrayBase.h.
        (WebCore::IntegralTypedArrayBase::set):
        (WebCore::IntegralTypedArrayBase::item):
        (WebCore::IntegralTypedArrayBase::IntegralTypedArrayBase):
        * html/canvas/TypedArrayBase.h: Copied from WebCore/html/canvas/WebGLTypedArrayBase.h.
        (WebCore::TypedArrayBase::set):
        (WebCore::TypedArrayBase::TypedArrayBase):
        (WebCore::TypedArrayBase::create):
        * html/canvas/Uint16Array.cpp: Copied from WebCore/html/canvas/WebGLUnsignedShortArray.cpp.
        (WebCore::Uint16Array::create):
        (WebCore::Uint16Array::Uint16Array):
        (WebCore::Uint16Array::slice):
        * html/canvas/Uint16Array.h: Copied from WebCore/html/canvas/WebGLUnsignedShortArray.h.
        * html/canvas/Uint16Array.idl: Copied from WebCore/html/canvas/WebGLUnsignedShortArray.idl.
        * html/canvas/Uint32Array.cpp: Copied from WebCore/html/canvas/WebGLUnsignedIntArray.cpp.
        (WebCore::Uint32Array::create):
        (WebCore::Uint32Array::Uint32Array):
        (WebCore::Uint32Array::slice):
        * html/canvas/Uint32Array.h: Copied from WebCore/html/canvas/WebGLUnsignedIntArray.h.
        * html/canvas/Uint32Array.idl: Copied from WebCore/html/canvas/WebGLUnsignedIntArray.idl.
        * html/canvas/Uint8Array.cpp: Copied from WebCore/html/canvas/WebGLUnsignedByteArray.cpp.
        (WebCore::Uint8Array::create):
        (WebCore::Uint8Array::Uint8Array):
        (WebCore::Uint8Array::slice):
        * html/canvas/Uint8Array.h: Copied from WebCore/html/canvas/WebGLUnsignedByteArray.h.
        * html/canvas/Uint8Array.idl: Copied from WebCore/html/canvas/WebGLUnsignedByteArray.idl.
        * html/canvas/WebGLArray.cpp: Removed.
        * html/canvas/WebGLArray.h: Removed.
        * html/canvas/WebGLArray.idl: Removed.
        * html/canvas/WebGLArrayBuffer.cpp: Removed.
        * html/canvas/WebGLArrayBuffer.h: Removed.
        * html/canvas/WebGLArrayBuffer.idl: Removed.
        * html/canvas/WebGLBuffer.cpp:
        (WebCore::WebGLBuffer::associateBufferData):
        (WebCore::WebGLBuffer::associateBufferSubData):
        * html/canvas/WebGLBuffer.h:
        (WebCore::WebGLBuffer::elementArrayBuffer):
        * html/canvas/WebGLByteArray.cpp: Removed.
        * html/canvas/WebGLByteArray.h: Removed.
        * html/canvas/WebGLByteArray.idl: Removed.
        * html/canvas/WebGLFloatArray.cpp: Removed.
        * html/canvas/WebGLFloatArray.h: Removed.
        * html/canvas/WebGLFloatArray.idl: Removed.
        * html/canvas/WebGLGetInfo.cpp:
        (WebCore::WebGLGetInfo::WebGLGetInfo):
        (WebCore::WebGLGetInfo::getWebGLFloatArray):
        (WebCore::WebGLGetInfo::getWebGLIntArray):
        (WebCore::WebGLGetInfo::getWebGLUnsignedByteArray):
        * html/canvas/WebGLGetInfo.h:
        * html/canvas/WebGLIntArray.cpp: Removed.
        * html/canvas/WebGLIntArray.h: Removed.
        * html/canvas/WebGLIntArray.idl: Removed.
        * html/canvas/WebGLIntegralTypedArrayBase.h: Removed.
        * html/canvas/WebGLRenderingContext.cpp:
        (WebCore::WebGLRenderingContext::bufferData):
        (WebCore::WebGLRenderingContext::bufferSubData):
        (WebCore::WebGLRenderingContext::getUniform):
        (WebCore::WebGLRenderingContext::getVertexAttrib):
        (WebCore::WebGLRenderingContext::readPixels):
        (WebCore::WebGLRenderingContext::texImage2D):
        (WebCore::WebGLRenderingContext::texSubImage2D):
        (WebCore::WebGLRenderingContext::uniform1fv):
        (WebCore::WebGLRenderingContext::uniform1iv):
        (WebCore::WebGLRenderingContext::uniform2fv):
        (WebCore::WebGLRenderingContext::uniform2iv):
        (WebCore::WebGLRenderingContext::uniform3fv):
        (WebCore::WebGLRenderingContext::uniform3iv):
        (WebCore::WebGLRenderingContext::uniform4fv):
        (WebCore::WebGLRenderingContext::uniform4iv):
        (WebCore::WebGLRenderingContext::uniformMatrix2fv):
        (WebCore::WebGLRenderingContext::uniformMatrix3fv):
        (WebCore::WebGLRenderingContext::uniformMatrix4fv):
        (WebCore::WebGLRenderingContext::vertexAttrib1fv):
        (WebCore::WebGLRenderingContext::vertexAttrib2fv):
        (WebCore::WebGLRenderingContext::vertexAttrib3fv):
        (WebCore::WebGLRenderingContext::vertexAttrib4fv):
        (WebCore::WebGLRenderingContext::getWebGLFloatArrayParameter):
        (WebCore::WebGLRenderingContext::getWebGLIntArrayParameter):
        (WebCore::WebGLRenderingContext::getWebGLUnsignedByteArrayParameter):
        * html/canvas/WebGLRenderingContext.h:
        * html/canvas/WebGLRenderingContext.idl:
        * html/canvas/WebGLShortArray.cpp: Removed.
        * html/canvas/WebGLShortArray.h: Removed.
        * html/canvas/WebGLShortArray.idl: Removed.
        * html/canvas/WebGLTypedArrayBase.h: Removed.
        * html/canvas/WebGLUnsignedByteArray.cpp: Removed.
        * html/canvas/WebGLUnsignedByteArray.h: Removed.
        * html/canvas/WebGLUnsignedByteArray.idl: Removed.
        * html/canvas/WebGLUnsignedIntArray.cpp: Removed.
        * html/canvas/WebGLUnsignedIntArray.h: Removed.
        * html/canvas/WebGLUnsignedIntArray.idl: Removed.
        * html/canvas/WebGLUnsignedShortArray.cpp: Removed.
        * html/canvas/WebGLUnsignedShortArray.h: Removed.
        * html/canvas/WebGLUnsignedShortArray.idl: Removed.
        * page/DOMWindow.idl:
        * platform/graphics/GraphicsContext3D.h:
        * platform/graphics/mac/GraphicsContext3DMac.cpp:
        (WebCore::GraphicsContext3D::bufferData):
        (WebCore::GraphicsContext3D::bufferSubData):
        * platform/graphics/qt/GraphicsContext3DQt.cpp:
        (WebCore::GraphicsContext3D::bufferData):
        (WebCore::GraphicsContext3D::bufferSubData):

2010-05-14  Steve Falkenburg  <sfalken@apple.com>

        Reviewed by Sam Weinig.

        <rdar://problem/7985864> Connection properties dictionary should use standard callbacks for keys, values
        https://bugs.webkit.org/show_bug.cgi?id=39132

        * platform/network/cf/ResourceHandleCFNet.cpp:
        (WebCore::createConnectionProperties):

2010-05-14  Abhishek Arya  <inferno@chromium.org>

        Reviewed by David Hyatt.

        Move the m_width(Length) and m_columns(RenderTable::ColumnStruct)
        vector out-of-bounds check out of the ASSERT into the main code.
        https://bugs.webkit.org/show_bug.cgi?id=38261

        Test: fast/table/fixed-table-layout-large-colspan-crash.html

        * rendering/FixedTableLayout.cpp:
        (WebCore::FixedTableLayout::calcWidthArray):

2010-05-14  Eric Seidel  <eric@webkit.org>

        Unreviewed, rolling out r59489.
        http://trac.webkit.org/changeset/59489
        https://bugs.webkit.org/show_bug.cgi?id=37815

        abarth broke the known universe and then some.

        * Android.jscbindings.mk:
        * GNUmakefile.am:
        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSBindingsAllInOne.cpp:
        * bindings/js/JSCallbackData.cpp:
        (WebCore::JSCallbackData::invokeCallback):
        * bindings/js/JSEventListener.cpp:
        (WebCore::JSEventListener::handleEvent):
        * bindings/js/JSInjectedScriptHostCustom.cpp:
        (WebCore::InjectedScriptHost::createInjectedScript):
        * bindings/js/ScheduledAction.cpp:
        (WebCore::ScheduledAction::executeFunctionInContext):
        (WebCore::ScheduledAction::execute):
        * bindings/js/ScheduledAction.h:
        * bindings/js/ScriptController.cpp:
        (WebCore::ScriptController::evaluateInWorld):
        * bindings/js/ScriptController.h:
        * bindings/js/ScriptFunctionCall.cpp:
        (WebCore::ScriptFunctionCall::call):
        * bindings/objc/ObjCEventListener.mm:
        (WebCore::ObjCEventListener::handleEvent):
        * bindings/objc/WebScriptObject.mm:
        (-[WebScriptObject callWebScriptMethod:withArguments:]):
        (-[WebScriptObject evaluateWebScript:]):
        * bindings/scripts/CodeGeneratorObjC.pm:
        * bindings/scripts/test/ObjC/DOMTestCallback.mm:
        (-[DOMTestCallback callbackWithClass1Param:]):
        (-[DOMTestCallback callbackWithClass2Param:strArg:]):
        (-[DOMTestCallback callbackWithNonBoolReturnType:]):
        (-[DOMTestCallback customCallback:class6Param:]):
        * bindings/scripts/test/ObjC/DOMTestInterface.mm:
        * bindings/scripts/test/ObjC/DOMTestObj.mm:
        (-[DOMTestObj readOnlyIntAttr]):
        (-[DOMTestObj readOnlyStringAttr]):
        (-[DOMTestObj readOnlyTestObjAttr]):
        (-[DOMTestObj intAttr]):
        (-[DOMTestObj setIntAttr:]):
        (-[DOMTestObj longLongAttr]):
        (-[DOMTestObj setLongLongAttr:]):
        (-[DOMTestObj unsignedLongLongAttr]):
        (-[DOMTestObj setUnsignedLongLongAttr:]):
        (-[DOMTestObj stringAttr]):
        (-[DOMTestObj setStringAttr:]):
        (-[DOMTestObj testObjAttr]):
        (-[DOMTestObj setTestObjAttr:]):
        (-[DOMTestObj attrWithException]):
        (-[DOMTestObj setAttrWithException:]):
        (-[DOMTestObj attrWithSetterException]):
        (-[DOMTestObj setAttrWithSetterException:]):
        (-[DOMTestObj attrWithGetterException]):
        (-[DOMTestObj setAttrWithGetterException:]):
        (-[DOMTestObj customAttr]):
        (-[DOMTestObj setCustomAttr:]):
        (-[DOMTestObj scriptStringAttr]):
        (-[DOMTestObj voidMethod]):
        (-[DOMTestObj voidMethodWithArgs:strArg:objArg:]):
        (-[DOMTestObj intMethod]):
        (-[DOMTestObj intMethodWithArgs:strArg:objArg:]):
        (-[DOMTestObj objMethod]):
        (-[DOMTestObj objMethodWithArgs:strArg:objArg:]):
        (-[DOMTestObj serializedValue:]):
        (-[DOMTestObj methodWithException]):
        (-[DOMTestObj customMethod]):
        (-[DOMTestObj customMethodWithArgs:strArg:objArg:]):
        (-[DOMTestObj customArgsAndException:]):
        (-[DOMTestObj addEventListener:listener:useCapture:]):
        (-[DOMTestObj removeEventListener:listener:useCapture:]):
        (-[DOMTestObj withDynamicFrame]):
        (-[DOMTestObj withDynamicFrameAndArg:]):
        (-[DOMTestObj withDynamicFrameAndOptionalArg:optionalArg:]):
        (-[DOMTestObj withDynamicFrameAndUserGesture:]):
        (-[DOMTestObj withDynamicFrameAndUserGestureASAD:optionalArg:]):
        (-[DOMTestObj withScriptStateVoid]):
        (-[DOMTestObj withScriptStateObj]):
        (-[DOMTestObj withScriptStateVoidException]):
        (-[DOMTestObj withScriptStateObjException]):
        (-[DOMTestObj methodWithOptionalArg:]):
        (-[DOMTestObj methodWithNonOptionalArgAndOptionalArg:opt:]):
        (-[DOMTestObj methodWithNonOptionalArgAndTwoOptionalArgs:opt1:opt2:]):
        * bindings/v8/ScriptController.cpp:
        * bindings/v8/ScriptController.h:
        * html/HTMLFrameElementBase.cpp:
        (WebCore::HTMLFrameElementBase::isURLAllowed):

2010-05-14  Justin Schuh  <jschuh@chromium.org>

        Reviewed by Adam Barth.

        Moving frame.src checks out of the bindings
        https://bugs.webkit.org/show_bug.cgi?id=37815

        Moved JavaScript frame.src checks out of bindings and into
        HTMLFrameElementBase. Added main thread state stack to JavaScriptCore
        so ExecState is available inside core DOM. Updated affected bindings
        (except for GObject, which will need to be updated to avoid origin
        failures inside native code).

        * Android.jscbindings.mk:
        * GNUmakefile.am:
        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSBindingsAllInOne.cpp:
        * bindings/js/JSCallbackData.cpp:
        (WebCore::JSCallbackData::invokeCallback):
        * bindings/js/JSEventListener.cpp:
        (WebCore::JSEventListener::handleEvent):
        * bindings/js/JSInjectedScriptHostCustom.cpp:
        (WebCore::InjectedScriptHost::createInjectedScript):
        * bindings/js/ScheduledAction.cpp:
        (WebCore::ScheduledAction::executeFunctionInContext):
        (WebCore::ScheduledAction::execute):
        * bindings/js/ScheduledAction.h:
        * bindings/js/ScriptController.cpp:
        (WebCore::ScriptController::evaluateInWorld):
        (WebCore::ScriptController::canAccessFromCurrentOrigin):
        * bindings/js/ScriptController.h:
        * bindings/js/ScriptFunctionCall.cpp:
        (WebCore::ScriptFunctionCall::call):
        * bindings/objc/ObjCEventListener.mm:
        (WebCore::ObjCEventListener::handleEvent):
        * bindings/objc/WebScriptObject.mm:
        (-[WebScriptObject callWebScriptMethod:withArguments:]):
        (-[WebScriptObject evaluateWebScript:]):
        * bindings/scripts/CodeGeneratorObjC.pm:
        * bindings/scripts/test/ObjC/DOMTestCallback.mm:
        (-[DOMTestCallback callbackWithClass1Param:]):
        (-[DOMTestCallback callbackWithClass2Param:strArg:]):
        (-[DOMTestCallback callbackWithNonBoolReturnType:]):
        (-[DOMTestCallback customCallback:class6Param:]):
        * bindings/scripts/test/ObjC/DOMTestInterface.mm:
        * bindings/scripts/test/ObjC/DOMTestObj.mm:
        (-[DOMTestObj readOnlyIntAttr]):
        (-[DOMTestObj readOnlyStringAttr]):
        (-[DOMTestObj readOnlyTestObjAttr]):
        (-[DOMTestObj intAttr]):
        (-[DOMTestObj setIntAttr:]):
        (-[DOMTestObj longLongAttr]):
        (-[DOMTestObj setLongLongAttr:]):
        (-[DOMTestObj unsignedLongLongAttr]):
        (-[DOMTestObj setUnsignedLongLongAttr:]):
        (-[DOMTestObj stringAttr]):
        (-[DOMTestObj setStringAttr:]):
        (-[DOMTestObj testObjAttr]):
        (-[DOMTestObj setTestObjAttr:]):
        (-[DOMTestObj attrWithException]):
        (-[DOMTestObj setAttrWithException:]):
        (-[DOMTestObj attrWithSetterException]):
        (-[DOMTestObj setAttrWithSetterException:]):
        (-[DOMTestObj attrWithGetterException]):
        (-[DOMTestObj setAttrWithGetterException:]):
        (-[DOMTestObj customAttr]):
        (-[DOMTestObj setCustomAttr:]):
        (-[DOMTestObj scriptStringAttr]):
        (-[DOMTestObj voidMethod]):
        (-[DOMTestObj voidMethodWithArgs:strArg:objArg:]):
        (-[DOMTestObj intMethod]):
        (-[DOMTestObj intMethodWithArgs:strArg:objArg:]):
        (-[DOMTestObj objMethod]):
        (-[DOMTestObj objMethodWithArgs:strArg:objArg:]):
        (-[DOMTestObj serializedValue:]):
        (-[DOMTestObj methodWithException]):
        (-[DOMTestObj customMethod]):
        (-[DOMTestObj customMethodWithArgs:strArg:objArg:]):
        (-[DOMTestObj customArgsAndException:]):
        (-[DOMTestObj addEventListener:listener:useCapture:]):
        (-[DOMTestObj removeEventListener:listener:useCapture:]):
        (-[DOMTestObj withDynamicFrame]):
        (-[DOMTestObj withDynamicFrameAndArg:]):
        (-[DOMTestObj withDynamicFrameAndOptionalArg:optionalArg:]):
        (-[DOMTestObj withDynamicFrameAndUserGesture:]):
        (-[DOMTestObj withDynamicFrameAndUserGestureASAD:optionalArg:]):
        (-[DOMTestObj withScriptStateVoid]):
        (-[DOMTestObj withScriptStateObj]):
        (-[DOMTestObj withScriptStateVoidException]):
        (-[DOMTestObj withScriptStateObjException]):
        (-[DOMTestObj methodWithOptionalArg:]):
        (-[DOMTestObj methodWithNonOptionalArgAndOptionalArg:opt:]):
        (-[DOMTestObj methodWithNonOptionalArgAndTwoOptionalArgs:opt1:opt2:]):
        * bindings/v8/ScriptController.cpp:
        (WebCore::ScriptController::canAccessFromCurrentOrigin):
        * bindings/v8/ScriptController.h:
        * html/HTMLFrameElementBase.cpp:
        (WebCore::HTMLFrameElementBase::isURLAllowed):

2010-05-14  Sergey Ulanov  <sergeyu@chromium.org>

        Reviewed by Dmitry Titov and Brett Wilson.

        Adding resized image caching for Skia.
        https://bugs.webkit.org/show_bug.cgi?id=39085

        Tests: HTML5 video on YouTube.

        * platform/graphics/skia/ImageSkia.cpp:
        (WebCore::Image::drawPattern): Use bitmap->resizedBitmap() to cache resized image when possible.

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

        Reviewed by Brady Eidson.

        https://bugs.webkit.org/show_bug.cgi?id=39008
        <rdar://problem/7976142> REGRESSION (r58950): Webkit crashes on clicking back button when in Hotmail

        Test: fast/parser/tokenizer-close-during-document-write.html

        * dom/Document.cpp: (WebCore::Document::write): Check that the tokenizer is still around
        after calling write(). It can become null (as it happens in regression test), and I don't
        see any guarantee that it would never be replaced with a different one (but I can't make a
        test for that).

2010-05-14  Jian Li  <jianli@chromium.org>

        Rubber-stamped by Dmitry Titov.

        Fix the code indentation inside a namespace to be consistent with the
        style guide.

        * workers/GenericWorkerTask.h:

2010-05-14  Jian Li  <jianli@chromium.org>

        Reviewed by Dmitry Titov.

        Remove the ENABLE(WORKERS) guard from GenericWorkerTask.h and rename
        all occurrences of GenericWorkerTask* to GenericTask* in this file.
        https://bugs.webkit.org/show_bug.cgi?id=39129

        I will have another patch to rename the file and move it to the right
        place.

        * workers/GenericWorkerTask.h:
        (WebCore::):
        (WebCore::GenericTask1::create):
        (WebCore::GenericTask1::GenericTask1):
        (WebCore::GenericTask2::create):
        (WebCore::GenericTask2::GenericTask2):
        (WebCore::GenericTask3::create):
        (WebCore::GenericTask3::GenericTask3):
        (WebCore::GenericTask4::create):
        (WebCore::GenericTask4::GenericTask4):
        (WebCore::GenericTask5::create):
        (WebCore::GenericTask5::GenericTask5):
        (WebCore::GenericTask6::create):
        (WebCore::GenericTask6::GenericTask6):
        (WebCore::GenericTask7::create):
        (WebCore::GenericTask7::GenericTask7):
        (WebCore::GenericTask8::create):
        (WebCore::GenericTask8::GenericTask8):
        (WebCore::createCallbackTask):

2010-05-14  Evan Martin  <evan@chromium.org>

        Reviewed by David Levin.

        [chromium] don't call fontconfig twice in complex text path
        https://bugs.webkit.org/show_bug.cgi?id=38701

        Previously getFontDataForCharacters would call fontconfig once to
        resolve a font name, then pass that name to getCachedFontPlatformData
        to load the font.  This would be two trips through fontconfig (including
        IPCs).  With this change, we completely load the font in the first pass.

        This patch is actually the same code as in r58341, which was reverted
        because of a performance problem; a performance improvement has now
        been committed, and with that change in place this change improves
        the Chromium intl2 page cycler performance by another 5%.

        See also https://bugs.webkit.org/show_bug.cgi?id=37904 .

        Test: fast/text/international/bold-bengali.html
        (Was checked in as part of the first attempt at this change, continues
        to pass after this change.)

        * platform/chromium/ChromiumBridge.h:
        * platform/graphics/chromium/FontCacheLinux.cpp:
        (WebCore::FontCache::getFontDataForCharacters):

2010-05-14  Young Han Lee  <joybro@company100.net>

        Reviewed by Darin Adler.

        Don't include RetainPtr.h unless PLATFORM(CF) is set.
        The RetainPtr is only used for CF platform in this class. 
        https://bugs.webkit.org/show_bug.cgi?id=39043

        No new tests, there is no new functionality.

        * platform/network/curl/ResourceHandleManager.cpp:

2010-05-14  Brian Weinstein  <bweinstein@apple.com>

        Reviewed by Adam Roben.

        Build fix, we need to copy over the files in $(WebKitOutputDir)/include/JavaScriptCore/private before
        WebCore builds. This is because we are building a couple WTF files in WebCore and JavaScriptCore.

        * WebCore.vcproj/WebCore.make: 

2010-05-14  Shinichiro Hamaji  <hamaji@chromium.org>

        Unreviewed.  Attempt to fix chromium's memory bot error.

        More :visited link optimizations to reduce memory usage
        https://bugs.webkit.org/show_bug.cgi?id=39084

        The original change (r59386) adds check for m_element in initElement.
        As don't initialize m_element in the constructor of CSSStyleSelector,
        valgrind complains.

        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::CSSStyleSelector):

2010-05-14  Andreas Kling  <andreas.kling@nokia.com>

        Reviewed by Darin Adler.

        CSSParser::parseColor() shouldn't alter 'color' unless passed a valid color string.
        https://bugs.webkit.org/show_bug.cgi?id=39031

        * css/CSSParser.cpp:
        (WebCore::CSSParser::parseColor):
        * editing/ApplyStyleCommand.cpp:
        (WebCore::StyleChange::extractTextStyles): Don't depend on old behavior.
        * html/canvas/CanvasRenderingContext2D.cpp:
        (WebCore::CanvasRenderingContext2D::setShadow): Remove dead code.

2010-05-14  Jens Alfke  <snej@chromium.org>

        Reviewed by John Sullivan.

        Don't clear yellow autofill highlight from text fields until the user edits them.
        https://bugs.webkit.org/show_bug.cgi?id=39032
        No new tests (Couldn't find any autofill tests. The flag doesn't seem to be exposed to JS.)

        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::handleFocusEvent):  Don't clear the autofilled flag.
        (WebCore::HTMLInputElement::setValueFromRenderer):  Clear the autofilled flag.

2010-05-14  Zhenyao Mo  <zmo@google.com>

        Reviewed by Dimitri Glazkov.

        Must implement OpenGL ES 2.0 semantics for NPOT textures
        https://bugs.webkit.org/show_bug.cgi?id=33805

        Test: fast/canvas/webgl/texture-npot.html

        * html/canvas/WebGLRenderingContext.cpp:
        (WebCore::WebGLRenderingContext::WebGLRenderingContext): Create black 1x1 textures.
        (WebCore::WebGLRenderingContext::bindTexture): Set texture dimensionality.
        (WebCore::WebGLRenderingContext::copyTexImage2D): Error check, set texture size.
        (WebCore::WebGLRenderingContext::drawArrays): Bind to black textures if needed.
        (WebCore::WebGLRenderingContext::drawElements): Bind to black textures if needed.
        (WebCore::WebGLRenderingContext::generateMipmap): Error check.
        (WebCore::WebGLRenderingContext::texImage2DBase): Error check, set texture size.
        (WebCore::WebGLRenderingContext::texParameterf): Set texture parameter.
        (WebCore::WebGLRenderingContext::texParameteri): Ditto.
        (WebCore::WebGLRenderingContext::handleNPOTTextures): Bind to black textures if needed before draw, and bind back to original textures after draw.
        * html/canvas/WebGLRenderingContext.h: Add black 1x1 textures.
        * html/canvas/WebGLTexture.cpp: Add support to track NPOT textures.
        (WebCore::WebGLTexture::createBlackTexture1x1): Create a black 1x1 texture.
        (WebCore::WebGLTexture::WebGLTexture): Initialize parameters and states.
        (WebCore::WebGLTexture::setDimensionality): Set dimensionality.
        (WebCore::WebGLTexture::setParameteri): Set parameter.
        (WebCore::WebGLTexture::setParameterf): Ditto.
        (WebCore::WebGLTexture::setSize): Set level 0 texture size.
        (WebCore::WebGLTexture::isNPOT): Whether the texture is NPOT.
        (WebCore::WebGLTexture::updateNPOTStates): Calculate NPOT and NeedToUseBlackTexture states.
        * html/canvas/WebGLTexture.h: Add support to track NPOT textures.
        (WebCore::WebGLTexture::isNPOT):
        (WebCore::WebGLTexture::needToUseBlackTexture):

2010-05-14  Andrey Kosyakov  <caseq@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: add help on keyboard shortcuts (take 2).

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

        * English.lproj/localizedStrings.js:
        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * inspector/front-end/CallStackSidebarPane.js:
        (WebInspector.CallStackSidebarPane):
        (WebInspector.CallStackSidebarPane.prototype._placardSelected):
        (WebInspector.CallStackSidebarPane.prototype.registerShortcuts):
        * inspector/front-end/ConsoleView.js:
        (WebInspector.ConsoleView):
        (WebInspector.ConsoleView.prototype._registerShortcuts):
        * inspector/front-end/ElementsPanel.js:
        (WebInspector.ElementsPanel):
        (WebInspector.ElementsPanel.prototype._registerShortcuts):
        * inspector/front-end/ElementsTreeOutline.js:
        (WebInspector.ElementsTreeOutline.prototype._keyDown):
        * inspector/front-end/HelpScreen.js: Added.
        * inspector/front-end/KeyboardShortcut.js:
        * inspector/front-end/ScriptsPanel.js:
        (WebInspector.ScriptsPanel.prototype.elementsToRestoreScrollPositionsFor):
        (WebInspector.ScriptsPanel.prototype._registerShortcuts):
        * inspector/front-end/ShortcutsHelp.js: Added.
        * inspector/front-end/SidebarPane.js:
        (WebInspector.SidebarPane.prototype._onTitleKeyDown):
        * inspector/front-end/StylesSidebarPane.js:
        (WebInspector.StylesSidebarPane.prototype.removeSection):
        (WebInspector.StylesSidebarPane.prototype.registerShortcuts):
        * inspector/front-end/TextViewer.js:
        (WebInspector.TextViewer.prototype._handleKeyDown):
        * inspector/front-end/WebKit.qrc:
        * inspector/front-end/helpScreen.css: Added.

2010-05-14  Tony Gentilcore  <tonyg@chromium.org>

        Reviewed by Darin Fisher.

        [chromium] Update chromium port to send/receive cached metadata
        https://bugs.webkit.org/show_bug.cgi?id=38665

        No new tests because no new functionality.

        * platform/chromium/ChromiumBridge.h:
        * platform/network/chromium/ResourceResponse.h:
        (WebCore::ResourceResponse::ResourceResponse):
        (WebCore::ResourceResponse::responseTime):
        (WebCore::ResourceResponse::setResponseTime):

2010-05-14  Chris Evans  <cevans@chromium.org>

        Reviewed by Adam Barth.

        Chromium-specific fix to prevent zombie infobars.

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

        * bindings/v8/ScriptController.cpp
        (WebCore::ScriptController::processingUserGesture):
          Require a more definite "no" signal.
        * loader/RedirectScheduler.cpp:
        (WebCore::ScheduledFormSubmission::fire):
          Use a very strong yes / no signal; no need for "possible" here.
        * dom/UserGestureIndicator.h:
        * dom/UserGestureIndicator.cpp:
          Adapt to tri-state: definitely yes; definitely no; not sure.

2010-05-14  Aaron Kennedy  <tffeeb@gmail.com>

        Reviewed by Simon Hausmann.

        [Qt] JavaScript unable to invoke methods declared in QML
        https://bugs.webkit.org/show_bug.cgi?id=38949

        JavaScript code executed by webkit cannot call into QML declared
        methods, as it does not check for dynamic meta objects.

        * bridge/qt/qt_instance.cpp:
        (JSC::Bindings::QtInstance::stringValue): Use QMetaObject::metacall.
        * bridge/qt/qt_runtime.cpp:
        (JSC::Bindings::QtRuntimeMetaMethod::call): Ditto.

2010-05-14  Ben Murdoch  <benm@google.com>

        Reviewed by Darin Fisher.

        Touch events are disabled by default when using V8.
        https://bugs.webkit.org/show_bug.cgi?id=38990

        Touch events are protected by a compile time guard, so it's safe to
        assume that the runtime flag  should be enabled by default when this
        guard is present.

        No new tests, build fix for Android.

        * bindings/generic/RuntimeEnabledFeatures.cpp: enable touch events by default.

2010-05-14  George Wright  <gwright@rim.com>

        Reviewed by George Staikos.

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

        Update JSDataGridColumnListCustom.cpp to call identifierToAtomicString()
        on the property name.

        * bindings/js/JSDataGridColumnListCustom.cpp:
        (WebCore::JSDataGridColumnList::canGetItemsForName):
        (WebCore::JSDataGridColumnList::nameGetter):

2010-05-14  Andreas Kling  <andreas.kling@nokia.com>

        Reviewed by Darin Adler.

        Ignore invalid values for various CanvasRenderingContext2D properties
        (lineWidth, miterLimit, shadowOffsetX, shadowOffsetY and shadowBlur)

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

        Test: fast/canvas/canvas-invalid-values.html

        * html/canvas/CanvasRenderingContext2D.cpp:
        (WebCore::CanvasRenderingContext2D::setLineWidth):
        (WebCore::CanvasRenderingContext2D::setMiterLimit):
        (WebCore::CanvasRenderingContext2D::setShadowOffsetX):
        (WebCore::CanvasRenderingContext2D::setShadowOffsetY):
        (WebCore::CanvasRenderingContext2D::setShadowBlur):

2010-05-13  Timothy Hatcher  <timothy@apple.com>

        Expose WebCore::reportException and WebCore::toJSDOMWindow symbols.

        Reviewed by Sam Weinig.

        * WebCore.base.exp: Expose reportException and toJSDOMWindow.

2010-05-13  Joseph Pecoraro  <joepeck@webkit.org>

        Reviewed by Timothy Hatcher.

        Web Inspector: Clearing Breakpoints Too Often
        https://bugs.webkit.org/show_bug.cgi?id=39094

        Minor resets should preserve both workers and breakpoints.

        * inspector/front-end/ScriptsPanel.js:
        (WebInspector.ScriptsPanel.prototype.reset):

2010-05-13  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Dan Bernstein.

        iframes in compositing layers don't redraw correctly on scrolling
        https://bugs.webkit.org/show_bug.cgi?id=39096
        
        When an iframe ends up in a compositing layer (that is painting to its backing store), we need
        to turn off blitting on scrolling. RenderView::paintBoxDecorations() already has code to do this
        for transformed frames, so do the same thing when the frame is enclosed in a compositing layer.

        Test: compositing/iframes/iframe-copy-on-scroll.html

        * rendering/RenderView.cpp:
        (WebCore::RenderView::paintBoxDecorations):

2010-05-13  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Dave Hyatt.

        Fix scrolling in composited iframes
        https://bugs.webkit.org/show_bug.cgi?id=39088
        <rdar://problem/7980099>
        
        When propagating compositing out of iframes, we have to update the position of the iframe content
        layers on scrolling.

        Test: compositing/iframes/scrolling-iframe.html

        * page/FrameView.cpp:
        (WebCore::FrameView::scrollPositionChanged): Call updateContentLayerScrollPosition() when scrolling.

        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::updateGraphicsLayerGeometry): Renamed setRootPlatformLayerClippingBox() to updateContentLayerOffset().

        * rendering/RenderLayerCompositor.h:
        * rendering/RenderLayerCompositor.cpp: Rename m_clippingLayer to m_clipLayer to go better with m_scrollLayer.
        (WebCore::RenderLayerCompositor::updateContentLayerOffset): Renamed from setRootPlatformLayerClippingBox().
            Set the size of the clipping layer from the FrameView now, so that scrollbars are not clipped out.
            Update the scroll layer position too.
        (WebCore::RenderLayerCompositor::updateContentLayerScrollPosition): Set the position of the scroll layer
            when the ScrollView is scrolled.
        (WebCore::RenderLayerCompositor::rootPlatformLayer): m_clippingLayer rename.
        (WebCore::RenderLayerCompositor::ensureRootPlatformLayer): m_clippingLayer rename. Also create m_scrollLayer at
            the same time as the clip layer, and clean it up as necessary.
        (WebCore::RenderLayerCompositor::destroyRootPlatformLayer): m_clippingLayer rename, and clean up the m_scrollLayer too.
        (WebCore::RenderLayerCompositor::detachRootPlatformLayer): m_clippingLayer rename

2010-05-13  Sam Weinig  <sam@webkit.org>

        Reviewed by Anders Carlsson.

        Follow up to:
        Fix for https://bugs.webkit.org/show_bug.cgi?id=38221
        Memory issues due to the changes in 36556 (increased CSSPrimitiveValue size).
        Part of <rdar://problem/7921275>

        Fix failing tests on Leopard.

        Initialize m_hasCachedCSSText in CSSPrimitiveValue::init methods.

        * css/CSSPrimitiveValue.cpp:
        (WebCore::CSSPrimitiveValue::init):
        (WebCore::CSSPrimitiveValue::cssText): Add extra assertion.

2010-05-13  Kent Tamura  <tkent@chromium.org>

        Reviewed by Darin Adler.

        Can't submit a form with <input type=checkbox required>
        https://bugs.webkit.org/show_bug.cgi?id=39065

        Test: fast/forms/interactive-validation-required-checkbox.html

        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::setChecked):
          Update the validity cache when a checkbox state is changed.

2010-05-13  Kenneth Russell  <kbr@google.com>

        Reviewed by Dimitri Glazkov.

        Alias WebGLArray type names to TypedArray type names
        https://bugs.webkit.org/show_bug.cgi?id=39036

        Exposed the existing WebGL<T>Array constructor functions on the
        DOMWindow under the naming convention in the TypedArray spec. The
        implementations will be renamed in a subsequent bug, and the
        aliases to the WebGL<T>Array type names eventually removed. Ran
        all layout tests (including WebGL) in Safari, and WebGL tests in
        Chromium.

        Test: revised array-unit-tests.html to test both type names.
        Revised global prototype and constructor tests to ignore new types.

        * bindings/generic/RuntimeEnabledFeatures.h:
        (WebCore::RuntimeEnabledFeatures::arrayBufferEnabled):
        (WebCore::RuntimeEnabledFeatures::int8ArrayEnabled):
        (WebCore::RuntimeEnabledFeatures::uint8ArrayEnabled):
        (WebCore::RuntimeEnabledFeatures::int16ArrayEnabled):
        (WebCore::RuntimeEnabledFeatures::uint16ArrayEnabled):
        (WebCore::RuntimeEnabledFeatures::int32ArrayEnabled):
        (WebCore::RuntimeEnabledFeatures::uint32ArrayEnabled):
        (WebCore::RuntimeEnabledFeatures::floatArrayEnabled):
        * bindings/js/JSDOMWindowCustom.cpp:
        (WebCore::JSDOMWindow::arrayBuffer):
        (WebCore::JSDOMWindow::int8Array):
        (WebCore::JSDOMWindow::uint8Array):
        (WebCore::JSDOMWindow::int32Array):
        (WebCore::JSDOMWindow::uint32Array):
        (WebCore::JSDOMWindow::int16Array):
        (WebCore::JSDOMWindow::uint16Array):
        (WebCore::JSDOMWindow::floatArray):
        * bindings/v8/custom/V8DOMWindowCustom.cpp:
        (WebCore::V8DOMWindow::ArrayBufferAccessorGetter):
        (WebCore::V8DOMWindow::Int8ArrayAccessorGetter):
        (WebCore::V8DOMWindow::Uint8ArrayAccessorGetter):
        (WebCore::V8DOMWindow::Int16ArrayAccessorGetter):
        (WebCore::V8DOMWindow::Uint16ArrayAccessorGetter):
        (WebCore::V8DOMWindow::Int32ArrayAccessorGetter):
        (WebCore::V8DOMWindow::Uint32ArrayAccessorGetter):
        (WebCore::V8DOMWindow::FloatArrayAccessorGetter):
        * page/DOMWindow.idl:

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

        Reviewed by Anders Carlsson.

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

        Improve :visited style resolution to reduce its memory footprint and to make some speed adjustments and
        simplifications.

        (1) Tie the caching of link state on CSSStyleSelector to the element.  Just clear out the element when
        style resolution finishes for the unvisited case to avoid caching across external calls.  The internal
        calls share the cache just fine by doing this.

        (2) Delete the RenderStyle if the link is unvisited.  This shouldn't take long enough to make us vulnerable
        to timing attacks, and it makes sure the overall footprint stays the way it used to be for unvisited links.

        (3) Limit the set of properties that can be applied to :visited links to only the colors it supports.  This
        stops images from being loadable from :visited rules.

        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::init):
        (WebCore::CSSStyleSelector::SelectorChecker::determineLinkState):
        (WebCore::CSSStyleSelector::initElement):
        (WebCore::CSSStyleSelector::canShareStyleWithElement):
        (WebCore::CSSStyleSelector::styleForElement):
        (WebCore::CSSStyleSelector::pseudoStyleForElement):
        (WebCore::isValidVisitedLinkProperty):
        (WebCore::CSSStyleSelector::applyProperty):
        * css/CSSStyleSelector.h:
        * rendering/style/RenderStyle.cpp:
        (WebCore::colorIncludingFallback):

2010-05-13  Sam Weinig  <sam@webkit.org>

        Reviewed by Darin Adler.

        Fix for https://bugs.webkit.org/show_bug.cgi?id=38221
        Memory issues due to the changes in 36556 (increased CSSPrimitiveValue size).
        Part of <rdar://problem/7921275>

        - Use an external cache to speedup cssText for CSSPrimitiveValue instead
          of an extra member variable.

        * css/CSSPrimitiveValue.cpp:
        (WebCore::cssTextCache):
        (WebCore::CSSPrimitiveValue::CSSPrimitiveValue):
        (WebCore::CSSPrimitiveValue::cleanup):
        (WebCore::CSSPrimitiveValue::cssText):
        * css/CSSPrimitiveValue.h:
        (WebCore::CSSPrimitiveValue::):
        * css/CSSPrimitiveValueMappings.h:
        (WebCore::CSSPrimitiveValue::CSSPrimitiveValue):

2010-05-13  Enrica Casucci  <enrica@apple.com>

        Reviewed by Dave Hyatt.

        Adding block elements to a block and removing them changes the height of the element.
        https://bugs.webkit.org/show_bug.cgi?id=38874

        The initial height of an empty editable block is different from the height of the same block after we add block elements
        and remove them.
        
        Test: editing/deleting/delete-block-contents-004.html

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::layoutBlock): resetting m_childrenInline flag to true when layout a block with no children.

2010-05-13  Brady Eidson  <beidson@apple.com>

        Reviewed by Darin Adler.

        Repro crash at www.sears.com (infinite recursion in beforeunload handler)
        <rdar://problem/7965182> and https://bugs.webkit.org/show_bug.cgi?id=38928

        Test: fast/loader/recursive-before-unload-crash.html

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::shouldClose): Copied from Frame, with the pageDismissal flag set.
        * loader/FrameLoader.h:

        * page/Frame.cpp:
        (WebCore::Frame::shouldClose): Forward to the new FrameLoader::shouldClose().
        * page/Frame.h:
        (WebCore::Frame::existingDOMWindow):

2010-05-13  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r59376.
        http://trac.webkit.org/changeset/59376
        https://bugs.webkit.org/show_bug.cgi?id=39080

        Broke window prototype tests (Requested by jamesr on #webkit).

        * bindings/generic/RuntimeEnabledFeatures.h:
        * bindings/js/JSDOMWindowCustom.cpp:
        (WebCore::JSDOMWindow::webGLFloatArray):
        * bindings/v8/custom/V8DOMWindowCustom.cpp:
        * page/DOMWindow.idl:

2010-05-13  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Yury Semikhatsky.

        Web Inspector: A disabled style property cannot be deleted.

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

        * inspector/InspectorDOMAgent.cpp:
        (WebCore::InspectorDOMAgent::applyStyleText):

2010-05-12  Kenneth Russell  <kbr@google.com>

        Reviewed by Dimitri Glazkov.

        Alias WebGLArray type names to TypedArray type names
        https://bugs.webkit.org/show_bug.cgi?id=39036

        Exposed the existing WebGL<T>Array constructor functions on the
        DOMWindow under the naming convention in the TypedArray spec. The
        implementations will be renamed in a subsequent bug, and the
        aliases to the WebGL<T>Array type names eventually removed. Ran
        all WebGL layout tests in Safari and Chromium.

        Test: revised array-unit-tests.html to test both type names.

        * bindings/generic/RuntimeEnabledFeatures.h:
        (WebCore::RuntimeEnabledFeatures::arrayBufferEnabled):
        (WebCore::RuntimeEnabledFeatures::int8ArrayEnabled):
        (WebCore::RuntimeEnabledFeatures::uint8ArrayEnabled):
        (WebCore::RuntimeEnabledFeatures::int16ArrayEnabled):
        (WebCore::RuntimeEnabledFeatures::uint16ArrayEnabled):
        (WebCore::RuntimeEnabledFeatures::int32ArrayEnabled):
        (WebCore::RuntimeEnabledFeatures::uint32ArrayEnabled):
        (WebCore::RuntimeEnabledFeatures::floatArrayEnabled):
        * bindings/js/JSDOMWindowCustom.cpp:
        (WebCore::JSDOMWindow::arrayBuffer):
        (WebCore::JSDOMWindow::int8Array):
        (WebCore::JSDOMWindow::uint8Array):
        (WebCore::JSDOMWindow::int32Array):
        (WebCore::JSDOMWindow::uint32Array):
        (WebCore::JSDOMWindow::int16Array):
        (WebCore::JSDOMWindow::uint16Array):
        (WebCore::JSDOMWindow::floatArray):
        * bindings/v8/custom/V8DOMWindowCustom.cpp:
        (WebCore::V8DOMWindow::ArrayBufferAccessorGetter):
        (WebCore::V8DOMWindow::Int8ArrayAccessorGetter):
        (WebCore::V8DOMWindow::Uint8ArrayAccessorGetter):
        (WebCore::V8DOMWindow::Int16ArrayAccessorGetter):
        (WebCore::V8DOMWindow::Uint16ArrayAccessorGetter):
        (WebCore::V8DOMWindow::Int32ArrayAccessorGetter):
        (WebCore::V8DOMWindow::Uint32ArrayAccessorGetter):
        (WebCore::V8DOMWindow::FloatArrayAccessorGetter):
        * page/DOMWindow.idl:

2010-05-13  Brady Eidson  <beidson@apple.com>

        Reviewed by John Sullivan.

        Part of <rdar://problem/7965182> and https://bugs.webkit.org/show_bug.cgi?id=38928

        No new tests. (No change in behavior)

        m_unloadEventBeingDispatched was already overloaded to include both unload and pagehide events.
        In general, these are "page dismissal" events, and might also include beforeunload, so let's rename
        the flag!

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::FrameLoader):
        (WebCore::FrameLoader::stopLoading):
        (WebCore::FrameLoader::loadURL):
        (WebCore::FrameLoader::loadWithDocumentLoader):
        (WebCore::FrameLoader::stopAllLoaders):
        (WebCore::FrameLoader::continueLoadAfterNavigationPolicy):
        (WebCore::FrameLoader::pageHidden):
        * loader/FrameLoader.h:

2010-05-13  Joseph Pecoraro  <joepeck@webkit.org>

        Reviewed by Pavel Feldman.

        Web Inspector: Event Markers should be hidden in Resource's "Size" Graph
        https://bugs.webkit.org/show_bug.cgi?id=39074

        Added Show / Hide event dividers functionality to the timeline grid,
        and included delegation functions in AbstractTimelinePanel.

        * inspector/front-end/AbstractTimelinePanel.js: delegate to the inner grid
        (WebInspector.AbstractTimelinePanel.prototype.hideEventDividers):
        (WebInspector.AbstractTimelinePanel.prototype.showEventDividers):
        * inspector/front-end/ResourcesPanel.js:
        (WebInspector.ResourcesPanel.prototype.populateSidebar): save a reference to the size graph item to know when its selected
        (WebInspector.ResourcesPanel.prototype._graphSelected): if the size graph is selected hide the dividers, otherwise show them
        * inspector/front-end/TimelineGrid.js:
        (WebInspector.TimelineGrid.prototype.hideEventDividers): set the container to display: none
        (WebInspector.TimelineGrid.prototype.showEventDividers): set the container to display: block

2010-05-13  Chang Shu  <chang.shu@nokia.com>

        Reviewed by Kenneth Rohde Christiansen.

        Based on the spec and Philip Taylor's test suite, strokeStyle and fillStyle attributes
        must initially have the string value #000000.
        The link to the spec:
        http://philip.html5.org/tests/canvas/suite/tests/spec.html#testrefs.2d.colours.default

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

        The complete test suite is in the process of checking in.
        https://bugs.webkit.org/show_bug.cgi?id=20553

        * html/canvas/CanvasRenderingContext2D.cpp:
        (WebCore::CanvasRenderingContext2D::State::State):

2010-05-13  Yury Semikhatsky  <yurys@chromium.org>

        Unreviewed, rolling out r59360.
        http://trac.webkit.org/changeset/59360
        https://bugs.webkit.org/show_bug.cgi?id=38667

        It broke Chromium Win build

        * English.lproj/localizedStrings.js:
        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * inspector/front-end/CallStackSidebarPane.js:
        (WebInspector.CallStackSidebarPane):
        (WebInspector.CallStackSidebarPane.prototype._placardSelected):
        * inspector/front-end/ConsoleView.js:
        (WebInspector.ConsoleView):
        * inspector/front-end/ElementsPanel.js:
        (WebInspector.ElementsPanel):
        * inspector/front-end/ElementsTreeOutline.js:
        (WebInspector.ElementsTreeOutline.prototype._keyDown):
        * inspector/front-end/HelpScreen.js: Removed.
        * inspector/front-end/KeyboardShortcut.js:
        (WebInspector.KeyboardShortcut._makeKeyFromCodeAndModifiers):
        * inspector/front-end/ScriptsPanel.js:
        (WebInspector.ScriptsPanel):
        (WebInspector.ScriptsPanel.prototype.elementsToRestoreScrollPositionsFor):
        * inspector/front-end/ShortcutsHelp.js: Removed.
        * inspector/front-end/SidebarPane.js:
        (WebInspector.SidebarPane.prototype._onTitleKeyDown):
        * inspector/front-end/StylesSidebarPane.js:
        (WebInspector.StylesSidebarPane.prototype.removeSection):
        * inspector/front-end/TextViewer.js:
        (WebInspector.TextViewer.prototype._handleKeyDown):
        * inspector/front-end/WebKit.qrc:
        * inspector/front-end/helpScreen.css: Removed.
        * inspector/front-end/inspector.html:
        * inspector/front-end/inspector.js:
        (WebInspector.loaded):
        (WebInspector.documentKeyDown):
        (WebInspector._searchKeyDown):
        (WebInspector.startEditing.keyDownEventListener):
        (WebInspector.startEditing):
        * inspector/front-end/utilities.js:

2010-05-13  Antti Koivisto  <koivisto@iki.fi>

        Reviewed by Kenneth Rohde Christiansen.

        https://bugs.webkit.org/show_bug.cgi?id=39063
        [Qt] Tiled backing store checker pattern does not paint correctly when scaling factor is not 1

        Use the dirty rect that has been adjusted for scaling instead of the original one.

        * platform/graphics/TiledBackingStore.cpp:
        (WebCore::TiledBackingStore::paint):

2010-05-13  Chang Shu  <chang.shu@nokia.com>

        Reviewed by Kenneth Rohde Christiansen.

        Based on Philip Taylor's test suite, resetting the canvas
        state resets the current path.
        https://bugs.webkit.org/show_bug.cgi?id=38934

        The complete test suite is in the process of checking in.
        https://bugs.webkit.org/show_bug.cgi?id=20553

        * html/canvas/CanvasRenderingContext2D.cpp:
        (WebCore::CanvasRenderingContext2D::reset):

2010-05-13  Andrey Kosyakov  <caseq@chromium.org>

        Reviewed by Pavel Feldman.

        Added help screen with keyboard shortcuts.
        https://bugs.webkit.org/show_bug.cgi?id=38667

        * English.lproj/localizedStrings.js:
        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * inspector/front-end/CallStackSidebarPane.js:
        (WebInspector.CallStackSidebarPane):
        (WebInspector.CallStackSidebarPane.prototype._placardSelected):
        (WebInspector.CallStackSidebarPane.prototype.registerShortcuts):
        * inspector/front-end/ConsoleView.js:
        (WebInspector.ConsoleView):
        (WebInspector.ConsoleView.prototype._registerShortcuts):
        * inspector/front-end/ElementsPanel.js:
        (WebInspector.ElementsPanel):
        (WebInspector.ElementsPanel.prototype._registerShortcuts):
        * inspector/front-end/HelpScreen.js: Added.
        * inspector/front-end/KeyboardShortcut.js:
        (WebInspector.KeyboardShortcut.makeDescriptor):
        (WebInspector.KeyboardShortcut.shortcutToString):
        (WebInspector.KeyboardShortcut._modifiersToString):
        * inspector/front-end/ScriptsPanel.js:
        (WebInspector.ScriptsPanel):
        (WebInspector.ScriptsPanel.prototype.elementsToRestoreScrollPositionsFor):
        (WebInspector.ScriptsPanel.prototype._registerShortcuts):
        * inspector/front-end/ShortcutsHelp.js: Added.
        * inspector/front-end/StylesSidebarPane.js:
        (WebInspector.StylesSidebarPane.prototype.removeSection):
        (WebInspector.StylesSidebarPane.prototype.registerShortcuts):
        * inspector/front-end/WebKit.qrc:
        * inspector/front-end/helpScreen.css: Added.

2010-05-13  Yoshiki Hayashi  <yhayashi@google.com>

        Reviewed by Darin Adler.

        Fix a bug in handleRunInChild where only the first child run-in block
        is inserted because removeChildNode clears next sibling.
        https://bugs.webkit.org/show_bug.cgi?id=25047

        Test: fast/css/run-in-children.html

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

2010-05-13  Alejandro G. Castro  <alex@igalia.com>

        Reviewed by Xan Lopez.

        In case there is no expose event we render the theme in a pixmap
        and copy it to the cairo context. This is slow but it is used just
        in case we are printing nowadays.

        [GTK] Theme does not render when printing
        https://bugs.webkit.org/show_bug.cgi?id=38896

        * platform/gtk/RenderThemeGtk.cpp:
        (WebCore::paintMozillaGtkWidget):

2010-05-12  Yuzo Fujishima  <yuzo@google.com>

        Reviewed by Darin Adler.

        Fix Bug 35014 - Modifying UA rules from page JS crashes
        Added a NULL check.
        https://bugs.webkit.org/show_bug.cgi?id=35014

        Test: fast/css/modify-ua-rules-from-javascript.html

        * css/CSSMutableStyleDeclaration.cpp:
        (WebCore::CSSMutableStyleDeclaration::setNeedsStyleRecalc):

2010-05-12  Dumitru Daniliuc  <dumi@chromium.org>

        Reviewed by Adam Barth.

        Add the parent class for Database and DatabaseSync.
        https://bugs.webkit.org/show_bug.cgi?id=39041

        * GNUmakefile.am:
        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * storage/AbstractDatabase.cpp: Added.
        * storage/AbstractDatabase.h: Added.

2010-05-12  Noam Rosenthal  <noam.rosenthal@nokia.com>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] GraphicsLayer: depth-test causes flicker in certain situations

        This patch removes the simplistic 2D depth test as it leads to flickering side effects.
        https://bugs.webkit.org/show_bug.cgi?id=38370

        Tested by http://webkit.org/blog-files/3d-transforms/morphing-cubes.html

        * platform/graphics/qt/GraphicsLayerQt.cpp:
        (WebCore::GraphicsLayerQtImpl::updateTransform):

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

        Reviewed by Mark Rowe.

        Fix layer dump to avoid spurious platform differences
        https://bugs.webkit.org/show_bug.cgi?id=39045
        
        Only dump the children transform on layers that are not the root layer.
        The children transform on the root layer is used on Leopard to implement
        geometry flipping, so avoid this supurious difference in test output.

        * platform/graphics/GraphicsLayer.cpp:
        (WebCore::GraphicsLayer::dumpProperties):

2010-05-12  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r59270.
        http://trac.webkit.org/changeset/59270
        https://bugs.webkit.org/show_bug.cgi?id=39044

        Caused a crash on some pages - bug 39042 (Requested by smfr on
        #webkit).

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

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

        Reviewed by David Hyatt.

        Composited plug-ins can cause missed painting
        https://bugs.webkit.org/show_bug.cgi?id=39033
        <rdar://problem/7972478>

        Fixed missed painting (and assertions in debug builds) related to compositing
        propagating out of iframes that contain plug-ins.
        
        When an iframe enters or leaves compositing mode, RenderLayerCompositor uses
        setNeedsStyleRecalc(SyntheticStyleChange) to trigger the parent document to re-evaluate
        whether the iframe itself should be composited. However, for iframes containing plug-ins,
        this can happen at inappropriate times. For example, when a browser tab is brought frontmost,
        plug-ins are instantiated for the first time (via -viewDidMoveToWindow), which triggers a 
        setNeedsStyleRecalc() on the object element. Soon after, the -viewWillDraw machinery
        does layout from the top down. During layout of the iframe, the iframe enters compositing mode,
        and does a setNeedsStyleRecalc() on the iframe element in its parent document. This leaves the
        FrameView as needsLayout(), so the FrameView::paintContents() asserts and bails.
        
        The fix is to avoid doing a setNeedsStyleRecalc() on the root while inside a recalcStyle on
        the iframe. We do this by switching the iframe into compositing mode eagerly as soon as we know
        the plug-in needs it.
        
        A secondary fix is to ensure that if a document has composited iframes, when that document becomes
        composited, we connect compositing layers between the iframes and the parent document.

        Tests: compositing/iframes/connect-compositing-iframe-delayed.html
               compositing/iframes/iframe-src-change.html

        * WebCore.base.exp: Export FrameView::enterCompositingMode()

        * page/FrameView.h: New method, enterCompositingMode(), that we can call from WebKit plug-in code.
        * page/FrameView.cpp:
        (WebCore::FrameView::enterCompositingMode):

        * rendering/RenderLayerCompositor.h:
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::enableCompositingMode): When we switch into compositing mode, we
            force a style recaclc on any iframes to get them into compositing layers, so they can hook up
            with their content layers if necessary.
        (WebCore::RenderLayerCompositor::didMoveOnscreen): Only call attachRootPlatformLayer() if we really need to.
        (WebCore::RenderLayerCompositor::willMoveOffscreen): Only call detachRootPlatformLayer() if we really need to.
        (WebCore::RenderLayerCompositor::detachRootPlatformLayer): Whitespace.
        (WebCore::RenderLayerCompositor::notifyIFramesOfCompositingChange): Fetch iframe elements, and send a 
            synthetic style recalc on them.

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

        Reviewed by Simon Fraser.

        Shrink the size of FillLayer by moving a member variable.
        https://bugs.webkit.org/show_bug.cgi?id=39035

        * rendering/style/FillLayer.cpp:
        (WebCore::FillLayer::FillLayer):
        * rendering/style/FillLayer.h:

2010-05-12  Sam Weinig  <sam@webkit.org>

        Reviewed by Anders Carlsson.

        A bunch of nice micro-optimizations for ~1% speedup on PLT.
        - Add fastGetAttribute. The same as getAttribute except can only be
          called when it is known not to be style attribute or one of the SVG
          animatable attributes.
        - Inline some functions from Font.
        - Return the same string from deprecatedParseURL if there is nothing
          to strip.
        - Use a member variable instead of a virtual function to determine 
          whether a ScheduledNavigation is a location change.

        * WebCore.base.exp:
        * css/CSSHelper.cpp:
        (WebCore::deprecatedParseURL):
        * css/CSSStyleSelector.cpp:
        (WebCore::linkAttribute):
        (WebCore::CSSStyleSelector::canShareStyleWithElement):
        (WebCore::CSSStyleSelector::SelectorChecker::checkOneSelector):
        * dom/Element.cpp:
        (WebCore::Element::getAttribute):
        * dom/Element.h:
        (WebCore::Element::fastHasAttribute):
        (WebCore::Element::fastGetAttribute):
        * html/HTMLFormControlElement.cpp:
        (WebCore::HTMLFormControlElement::formControlName):
        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::value):
        * loader/RedirectScheduler.cpp:
        (WebCore::ScheduledNavigation::ScheduledNavigation):
        (WebCore::ScheduledNavigation::isLocationChange):
        (WebCore::ScheduledURLNavigation::ScheduledURLNavigation):
        (WebCore::ScheduledRedirect::ScheduledRedirect):
        (WebCore::ScheduledLocationChange::ScheduledLocationChange):
        (WebCore::ScheduledRefresh::ScheduledRefresh):
        (WebCore::ScheduledHistoryNavigation::ScheduledHistoryNavigation):
        (WebCore::ScheduledFormSubmission::ScheduledFormSubmission):
        (WebCore::RedirectScheduler::locationChangePending):
        * platform/graphics/Font.cpp:
        * platform/graphics/Font.h:
        (WebCore::Font::~Font):
        (WebCore::Font::primaryFont):
        (WebCore::Font::fontDataAt):
        (WebCore::Font::fontDataForCharacters):
        (WebCore::Font::isFixedPitch):
        (WebCore::Font::fontSelector):
        * platform/graphics/FontFallbackList.h:
        * rendering/RenderImage.cpp:
        (WebCore::RenderImage::imageMap):

2010-05-12  David Hyatt  <hyatt@apple.com>

        Reviewed by Sam Weinig.

        Make InlineBoxes use an IntRect for dimensions, and eliminate the dynamic computation of height() every time.

        * WebCore.xcodeproj/project.pbxproj:
        * editing/visible_units.cpp:
        (WebCore::previousLinePosition):
        (WebCore::nextLinePosition):
        * rendering/EllipsisBox.cpp:
        (WebCore::EllipsisBox::paint):
        (WebCore::EllipsisBox::selectionRect):
        (WebCore::EllipsisBox::paintSelection):
        (WebCore::EllipsisBox::nodeAtPoint):
        * rendering/EllipsisBox.h:
        (WebCore::EllipsisBox::EllipsisBox):
        * rendering/InlineBox.cpp:
        (WebCore::InlineBox::adjustPosition):
        (WebCore::InlineBox::canAccommodateEllipsis):
        * rendering/InlineBox.h:
        (WebCore::InlineBox::InlineBox):
        (WebCore::InlineBox::isSVGRootInlineBox):
        (WebCore::InlineBox::x):
        (WebCore::InlineBox::y):
        (WebCore::InlineBox::width):
        (WebCore::InlineBox::height):
        (WebCore::InlineBox::bottom):
        (WebCore::InlineBox::right):
        (WebCore::InlineBox::setX):
        (WebCore::InlineBox::setY):
        (WebCore::InlineBox::setWidth):
        (WebCore::InlineBox::setHeight):
        (WebCore::InlineBox::location):
        (WebCore::InlineBox::size):
        (WebCore::InlineBox::setLocation):
        (WebCore::InlineBox::setSize):
        (WebCore::InlineBox::move):
        (WebCore::InlineBox::frameRect):
        (WebCore::InlineBox::setFrameRect):
        (WebCore::InlineBox::baselinePosition):
        (WebCore::InlineBox::lineHeight):
        * rendering/InlineFlowBox.cpp:
        (WebCore::InlineFlowBox::placeBoxesVertically):
        (WebCore::InlineFlowBox::computeVerticalOverflow):
        (WebCore::InlineFlowBox::nodeAtPoint):
        (WebCore::InlineFlowBox::paintBoxDecorations):
        (WebCore::InlineFlowBox::paintMask):
        (WebCore::InlineFlowBox::paintTextDecorations):
        * rendering/InlineFlowBox.h:
        (WebCore::InlineFlowBox::visibleOverflowRect):
        (WebCore::InlineFlowBox::topLayoutOverflow):
        (WebCore::InlineFlowBox::bottomLayoutOverflow):
        (WebCore::InlineFlowBox::leftLayoutOverflow):
        (WebCore::InlineFlowBox::rightLayoutOverflow):
        (WebCore::InlineFlowBox::layoutOverflowRect):
        (WebCore::InlineFlowBox::topVisualOverflow):
        (WebCore::InlineFlowBox::bottomVisualOverflow):
        (WebCore::InlineFlowBox::leftVisualOverflow):
        (WebCore::InlineFlowBox::rightVisualOverflow):
        (WebCore::InlineFlowBox::visualOverflowRect):
        (WebCore::InlineFlowBox::setHorizontalOverflowPositions):
        (WebCore::InlineFlowBox::setVerticalOverflowPositions):
        * rendering/InlineTextBox.cpp:
        (WebCore::InlineTextBox::selectionRect):
        (WebCore::InlineTextBox::placeEllipsisBox):
        (WebCore::InlineTextBox::nodeAtPoint):
        (WebCore::InlineTextBox::paint):
        (WebCore::InlineTextBox::paintSelection):
        (WebCore::InlineTextBox::paintCompositionBackground):
        (WebCore::InlineTextBox::paintDecoration):
        (WebCore::InlineTextBox::paintSpellingOrGrammarMarker):
        (WebCore::InlineTextBox::paintTextMatchMarker):
        (WebCore::InlineTextBox::computeRectForReplacementMarker):
        (WebCore::InlineTextBox::paintCompositionUnderline):
        (WebCore::InlineTextBox::offsetForPosition):
        (WebCore::InlineTextBox::positionForOffset):
        * rendering/InlineTextBox.h:
        (WebCore::InlineTextBox::setSpaceAdd):
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::positionForPointWithInlineChildren):
        * rendering/RenderBlockLineLayout.cpp:
        (WebCore::RenderBlock::computeVerticalPositionsForLine):
        (WebCore::RenderBlock::layoutInlineChildren):
        * rendering/RenderSVGInline.cpp:
        (WebCore::RenderSVGInline::createInlineFlowBox):
        * rendering/RenderSVGInlineText.cpp:
        (WebCore::RenderSVGInlineText::createTextBox):
        * rendering/RenderSVGText.cpp:
        (WebCore::RenderSVGText::createRootInlineBox):
        * rendering/RenderText.cpp:
        (WebCore::RenderText::positionForPoint):
        (WebCore::RenderText::firstRunX):
        (WebCore::RenderText::firstRunY):
        * rendering/RenderTreeAsText.cpp:
        (WebCore::writeTextRun):
        * rendering/RootInlineBox.cpp:
        (WebCore::RootInlineBox::placeEllipsis):
        (WebCore::RootInlineBox::addHighlightOverflow):
        (WebCore::RootInlineBox::closestLeafChildForXPos):
        * rendering/SVGInlineFlowBox.h:
        (WebCore::SVGInlineFlowBox::SVGInlineFlowBox):
        * rendering/SVGInlineTextBox.h:
        (WebCore::SVGInlineTextBox::selectionTop):
        (WebCore::SVGInlineTextBox::selectionHeight):
        * rendering/SVGRootInlineBox.h:
        (WebCore::SVGRootInlineBox::SVGRootInlineBox):
        (WebCore::SVGRootInlineBox::isSVGRootInlineBox):
        * rendering/TrailingFloatsRootInlineBox.h: Removed.

2010-05-12  Dumitru Daniliuc  <dumi@chromium.org>

        Reviewed by Dimitri Glazkov.

        Removing the unnecessary dirfd parameter.
        https://bugs.webkit.org/show_bug.cgi?id=38869

        * platform/chromium/ChromiumBridge.h:
        * platform/sql/chromium/SQLiteFileSystemChromiumPosix.cpp:

2010-05-12  Enrica Casucci  <enrica@apple.com>

        Reviewed by Dave Hyatt.

        Adding block elements to a block and removing them changes the height of the element.
        https://bugs.webkit.org/show_bug.cgi?id=38874

        The initial height of an empty editable block is different from the height of the same block after we add block elements
        and remove them.
        
        Test: editing/deleting/delete-block-contents-004.html

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::removeChild): m_childrenInline was set to true only when the Renderer is created
        and never reset to true when all the block elements contained are removed.

2010-05-11  Dumitru Daniliuc  <dumi@chromium.org>

        Reviewed by Dimitri Glazkov.

        Do not check if a database needs to be vacuumed after a read-only transaction.
        https://bugs.webkit.org/show_bug.cgi?id=38972

        * storage/SQLTransaction.cpp:
        (WebCore::SQLTransaction::postflightAndCommit):

2010-05-12  Laszlo Gombos  <laszlo.1.gombos@nokia.com>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] Detect debug mode consistently
        https://bugs.webkit.org/show_bug.cgi?id=38863

        No new tests as there is no new functionality.

        * WebCore.pro:

2010-05-12  James Robinson  <jamesr@chromium.org>

        Patch by Dan Bernstein.

        Reviewed by David Hyatt.

        Fix marking the layout root's parent as needing layout
        https://bugs.webkit.org/show_bug.cgi?id=37760

        If an element gets marked as needing layout due to the recalcStyle()
        call in FrameView::layout(), the m_layoutSchedulingEnabled flag will
        be set to false.  It's possible at this point that a parent of the
        existing FrameView::m_layoutRoot will be marked as needing layout.

        This patch updates FrameView::scheduleRelayoutOfSubtree to account
        for this case.

        Manual test only due to subtle timing issues.

        * manual-tests/layoutroot_detach.xml: Added.
        * page/FrameView.cpp:
        (WebCore::FrameView::scheduleRelayoutOfSubtree):

2010-05-12  Eric Seidel  <eric@webkit.org>

        Unreviewed, rolling out r59245.
        http://trac.webkit.org/changeset/59245
        https://bugs.webkit.org/show_bug.cgi?id=38874

        Broke at least one test on multiple platforms

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

2010-05-12  Alexey Proskuryakov  <ap@apple.com>

        Reviewed by Darin Adler.

        https://bugs.webkit.org/show_bug.cgi?id=38752
        Strange behaviour after js insertion into a page pointing directly to an object (image, swf, etc)

        Test: fast/images/extra-image-in-image-document.html

        * loader/ImageLoader.cpp: (WebCore::ImageLoader::updateFromElement): Reset setAutoLoadImages
        after manually feeding an image - there may be more coming.

2010-05-12  yael aharon  <yael.aharon@nokia.com>

        Reviewed by Dan Bernstein.

        HTMLLabelElement::control() should return HTMLFormControlElement, not HTMLElement
        https://bugs.webkit.org/show_bug.cgi?id=38991

        No new tests since no new functionality was introduced.

        * html/HTMLLabelElement.cpp:
        (WebCore::HTMLLabelElement::control):
        * html/HTMLLabelElement.h:

2010-05-12  David Hyatt  <hyatt@apple.com>

        Reviewed by Darin Adler.

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

        First-letter had a number of bugs that were exposed by my attempt to optimize the setting of styles when updating first-letter.
        The code that drills down to find the first-letter child stopped if it hit an element that didn't need layout.  This means it could
        return random incorrect results (and cause the first-letter object to not be found).

        In addition when the first-letter was floated/positioned, the text child was not correctly returned, but the container itself was
        returned instead.

        Finally, the updating code was leaving the box that wrapped the first letter text with a stale style.  The old code happened to work because
        it made new styles for the text elements instead of using the enclosing box style.  The regression was caused by my change to make the
        text children simply share style with their parent (thus making the bug that the parent had the wrong style become more prominent).

        No new tests, since there's a timing component to reproducing the issue.

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

2010-05-12  Enrica Casucci  <enrica@apple.com>

        Reviewed by Dave Hyatt.

        Adding block elements to a block and removing them changes the height of the element.
        https://bugs.webkit.org/show_bug.cgi?id=38874

        The initial height of an empty editable block is different from the height of the same block after we add block elements
        and remove them.
        
        Test: editing/deleting/delete-block-contents-004.html

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::removeChild): m_childrenInline was set to true only when the Renderer is created
        and never reset to true when all the block elements contained are removed.

2010-05-12  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Timothy Hatcher.

        Web Inspector: disabling style property on container breaks styles inspection for given node.

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

        Tests: inspector/styles-disable-inherited.html
               inspector/styles-disable-then-enable.html

        * inspector/front-end/StylesSidebarPane.js:
        (WebInspector.StylesSidebarPane.prototype._containsInherited):
        (WebInspector.StylesSidebarPane.prototype._arrayContainsInheritedProperty):

2010-05-12  Abhishek Arya  <inferno@chromium.org>

        Reviewed by Darin Adler.

        HTML Entity Escape the contents of a textarea node when accessed
        via the innerHTML and outerHTML node properties.
        https://bugs.webkit.org/show_bug.cgi?id=38922

        Test: fast/innerHTML/innerHTML-special-elements.html

        * editing/markup.cpp:
        (WebCore::appendStartMarkup):

2010-05-12  Beth Dakin  <bdakin@apple.com>

        Reviewed by Darin Adler.

        Fix for https://bugs.webkit.org/show_bug.cgi?id=38871 REGRESSION: 
        Crash clicking background NPR tab after few minutes of sitting idle
        -and corresponding-
        <rdar://problem/7941504>

        Move m_mediaCanStartListeners HashSet to Document away from Page.
        * dom/Document.cpp:
        (WebCore::Document::Document):
        (WebCore::Document::addMediaCanStartListener):
        (WebCore::Document::removeMediaCanStartListener):
        (WebCore::Document::takeAnyMediaCanStartListener):
        * dom/Document.h:
        * page/Page.cpp:
        (WebCore::Page::takeAnyMediaCanStartListener):
        * page/Page.h:
        (WebCore::Page::canStartMedia):

2010-05-11  Ilya Tikhonovsky  <loislo@chromium.org>

        Reviewed by Pavel Feldman.

        WebInspector: Sometimes ResourceRequest records aren't connected to the initiator.
        https://bugs.webkit.org/show_bug.cgi?id=38925

        * inspector/InspectorTimelineAgent.cpp:
        (WebCore::InspectorTimelineAgent::didScheduleResourceRequest):
        * inspector/InspectorTimelineAgent.h:
        (WebCore::):
        * inspector/TimelineRecordFactory.cpp:
        (WebCore::TimelineRecordFactory::createScheduleResourceRequestData):
        * inspector/TimelineRecordFactory.h:
        * inspector/front-end/TimelineAgent.js:
        * inspector/front-end/TimelinePanel.js:
        (WebInspector.TimelinePanel):
        (WebInspector.TimelinePanel.prototype.get _recordStyles):
        (WebInspector.TimelinePanel.prototype._findParentRecord):
        (WebInspector.TimelinePanel.prototype._innerAddRecordToTimeline):
        (WebInspector.TimelinePanel.prototype._clearPanel):
        (WebInspector.TimelinePanel.FormattedRecord):
        (WebInspector.TimelinePanel.FormattedRecord.prototype._generatePopupContent):
        (WebInspector.TimelinePanel.FormattedRecord.prototype._getRecordDetails):
        * loader/loader.cpp:
        (WebCore::Loader::load):

2010-05-12  Kent Tamura  <tkent@chromium.org>

        Reviewed by Darin Adler.

        placeholder text should be stripped from line breaks
        https://bugs.webkit.org/show_bug.cgi?id=36291

        According to http://dev.w3.org/html5/spec/forms.html#attr-input-placeholder ,
        we need to remove CR and LF from the placeholder attribute values.
        Introduce HTMLTextFormControlElement::strippedPlaceholder(), which
        returns stripped value, and replace getAttribute(placeholderAttr) with it.

        Test: fast/forms/placeholder-stripped.html

        * html/HTMLFormControlElement.cpp:
        (WebCore::HTMLTextFormControlElement::strippedPlaceholder):
        (WebCore::HTMLTextFormControlElement::isPlaceholderEmpty):
        (WebCore::HTMLTextFormControlElement::placeholderShouldBeVisible):
          Use strippedPlaceholder().
        * html/HTMLFormControlElement.h:
        * platform/text/CharacterNames.h: Add carriageReturn.
        * rendering/RenderTextControlMultiLine.cpp:
        (WebCore::RenderTextControlMultiLine::updateFromElement):
          Use strippedPlaceholder().
        * rendering/RenderTextControlSingleLine.cpp:
        (WebCore::RenderTextControlSingleLine::updateFromElement):
          Use strippedPlaceholder().

2010-05-10  Rodrigo Belem  <rodrigo.belem@openbossa.org>

        Reviewed by Kenneth Christiansen , Simon Hausmann and Gustavo Noronha.

        [Qt, Gtk] Allows build-webkit script to receive an install prefix as parameter
        https://bugs.webkit.org/show_bug.cgi?id=26224

        This patch adds the ability, in the QtWebkit build system, to change
        the installation path.

        * WebCore.pro:

2010-05-12  Jer Noble  <jer.noble@apple.com>

        Reviewed by Darin Adler.
        
        Bug 38689: #34005 will break fullscreen video playback
        https://bugs.webkit.org/show_bug.cgi?id=38689
        
        The PlatformMedia struct now contains a type field indicating which type
        it contains.  The struct now contains a union of all possible return types,
        allowing the type of media returned by MediaPlayerPrivate instances to be
        determined at runtime.

        * platform/graphics/MediaPlayer.h:
        (WebCore::PlatformMedia::):
        (WebCore::):
        * platform/graphics/mac/MediaPlayerPrivateQTKit.mm:
        (WebCore::MediaPlayerPrivate::platformMedia):
        * platform/graphics/win/MediaPlayerPrivateQuickTimeVisualContext.cpp:
        (WebCore::MediaPlayerPrivateQuickTimeVisualContext::platformMedia):
        * platform/graphics/win/MediaPlayerPrivateQuickTimeWin.cpp:
        (WebCore::MediaPlayerPrivate::platformMedia):

2010-05-12  Young Han Lee  <joybro@company100.net>

        Reviewed by Darin Adler.

        Add missing ENABLE(SVG) guards.
        https://bugs.webkit.org/show_bug.cgi?id=38892

        * rendering/RenderSVGResourceClipper.cpp:
        * rendering/RenderSVGResourceMarker.cpp:
        * rendering/RenderSVGResourceMasker.cpp:

2010-05-12  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Yury Semikhatsky.

        Web Inspector: align sidebar checkboxes on windows.

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

        * inspector/front-end/StylesSidebarPane.js:
        * inspector/front-end/inspector.css:
        (.sidebar-pane-subtitle):
        (body.platform-windows .sidebar-pane-subtitle):

2010-05-10  yael aharon  <yael.aharon@nokia.com>

        Reviewed by Darin Adler.

        Support control attribute of HTMLLabelElement
        https://bugs.webkit.org/show_bug.cgi?id=38688

        Added support for the control attribute of HTMLLabelElement and changed the logic of determining
        which control is associated with the label to conform to HTML5 spec.
        Added a manual test for testing the logic of selecting the control to get focused, activated or hovered
        when the label gets focused, activated or is hovered.

        Test: fast/dom/HTMLLabelElement/click-label.html
        Test: fast/dom/HTMLLabelElement/focus-label.html
        Test: fast/dom/HTMLLabelElement/label-control.html

        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::labelForElement):
        (WebCore::AccessibilityRenderObject::correspondingControlForLabelElement):
        * html/HTMLFormControlElement.cpp:
        (WebCore::HTMLFormControlElement::isLabelable):
        * html/HTMLFormControlElement.h:
        * html/HTMLLabelElement.cpp:
        (WebCore::nodeAsLabelableFormControl):
        (WebCore::HTMLLabelElement::control):
        (WebCore::HTMLLabelElement::setActive):
        (WebCore::HTMLLabelElement::setHovered):
        (WebCore::HTMLLabelElement::defaultEventHandler):
        (WebCore::HTMLLabelElement::focus):
        (WebCore::HTMLLabelElement::accessKeyAction):
        * html/HTMLLabelElement.h:
        * html/HTMLLabelElement.idl:
        * manual-tests/dom/form-control-for-label.html: Added.

2010-05-12  Steve Block  <steveblock@google.com>

        Reviewed by David Levin.

        Android's writeToFile() is buggy
        https://bugs.webkit.org/show_bug.cgi?id=38908

        No new tests, build fix only.

        * platform/android/FileSystemAndroid.cpp: Remove Android's version of writeToFile().
        * platform/posix/FileSystemPOSIX.cpp: Use POSIX version of writeToFile() on Android.
        (WebCore::writeToFile):

2010-05-10  Philippe Normand  <pnormand@igalia.com>

        Reviewed by David Levin.

        [GStreamer] incoherent #ifdef in GOwnPtrGStreamer.h
        https://bugs.webkit.org/show_bug.cgi?id=38839

        Fixed #ifdef/curly braces coherence.

        * platform/graphics/gstreamer/GOwnPtrGStreamer.cpp:
        (WTF::GstElement):

2010-05-10  Philippe Normand  <pnormand@igalia.com>

        Reviewed by Dirk Schulze.

        [GStreamer] un-needed cairo.h include
        https://bugs.webkit.org/show_bug.cgi?id=38837

        Cairo not used in the sink anymore. So it's not needed to include
        the header.

        * platform/graphics/gstreamer/VideoSinkGStreamer.h:

2010-05-12  Zoltan Herczeg  <zherczeg@webkit.org>

        Reviewed by Nikolas Zimmermann.

        Build fix for Windows and Chromium builds.

        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * svg/graphics/filters/SVGFELighting.cpp:
        (WebCore::FELighting::LightingData::upLeftPixelValue):
        (WebCore::FELighting::LightingData::upPixelValue):
        (WebCore::FELighting::LightingData::upRightPixelValue):
        (WebCore::FELighting::LightingData::leftPixelValue):
        (WebCore::FELighting::LightingData::centerPixelValue):
        (WebCore::FELighting::LightingData::rightPixelValue):
        (WebCore::FELighting::LightingData::downLeftPixelValue):
        (WebCore::FELighting::LightingData::downPixelValue):
        (WebCore::FELighting::LightingData::downRightPixelValue):
        (WebCore::FELighting::setPixel):

2010-05-12  Zoltan Herczeg  <zherczeg@webkit.org>

        Reviewed by Nikolas Zimmermann.

        Implementing SVG filters: feDiffuseLighting and feSpecularLighting
        https://bugs.webkit.org/show_bug.cgi?id=32197
        https://bugs.webkit.org/show_bug.cgi?id=32199

        The patch implements the SVG filters feDiffuseLighting and
        feSpecularLighting including the impementation of their possible
        light sources according to the Scalable Vector Graphics (SVG)
        1.1 Specification. Only two features are missing: supporting images
        with height or width set to 1, and kernelUnitLength other than (1,1).
        Since the two lighting filters have a similar body, a common base
        class called FELighting is introduced, and contains the code for
        both filters. The implementation employs single precision floating
        point arithmetic (fixed precision integer arithmetic seemed too difficult).

        Indentation is removed of the modified header files in svg/graphics/filters

        * GNUmakefile.am:
        * WebCore.pro:
        * WebCore.xcodeproj/project.pbxproj:
        * platform/graphics/FloatPoint3D.cpp:
        * platform/graphics/FloatPoint3D.h:
        (WebCore::FloatPoint3D::FloatPoint3D): constructors changed to inline
        (WebCore::operator*): dot product
        * svg/SVGFESpotLightElement.cpp:
        (WebCore::SVGFESpotLightElement::lightSource):
        * svg/graphics/filters/SVGDistantLightSource.h:
        (WebCore::DistantLightSource::create):
        (WebCore::DistantLightSource::azimuth):
        (WebCore::DistantLightSource::elevation):
        (WebCore::DistantLightSource::DistantLightSource):
        * svg/graphics/filters/SVGFEDiffuseLighting.cpp:
        (WebCore::FEDiffuseLighting::FEDiffuseLighting):
        (WebCore::FEDiffuseLighting::create):
        * svg/graphics/filters/SVGFEDiffuseLighting.h:
        * svg/graphics/filters/SVGFELighting.cpp: Added.
        (WebCore::FELighting::FELighting):
        (WebCore::FELighting::LightingData::upLeftPixelValue):
        (WebCore::FELighting::LightingData::upPixelValue):
        (WebCore::FELighting::LightingData::upRightPixelValue):
        (WebCore::FELighting::LightingData::leftPixelValue):
        (WebCore::FELighting::LightingData::centerPixelValue):
        (WebCore::FELighting::LightingData::rightPixelValue):
        (WebCore::FELighting::LightingData::downLeftPixelValue):
        (WebCore::FELighting::LightingData::downPixelValue):
        (WebCore::FELighting::LightingData::downRightPixelValue):
        (WebCore::FELighting::setPixel):
        (WebCore::FELighting::drawLighting):
        (WebCore::FELighting::apply):
        * svg/graphics/filters/SVGFELighting.h: Added.
        (WebCore::FELighting::uniteChildEffectSubregions):
        (WebCore::FELighting::):
        * svg/graphics/filters/SVGFESpecularLighting.cpp:
        (WebCore::FESpecularLighting::FESpecularLighting):
        (WebCore::FESpecularLighting::create):
        * svg/graphics/filters/SVGFESpecularLighting.h:
        * svg/graphics/filters/SVGLightSource.cpp:
        (WebCore::PointLightSource::initPaintingData):
        (WebCore::PointLightSource::updatePaintingData):
        (WebCore::SpotLightSource::initPaintingData):
        (WebCore::SpotLightSource::updatePaintingData):
        (WebCore::DistantLightSource::initPaintingData):
        (WebCore::DistantLightSource::updatePaintingData):
        * svg/graphics/filters/SVGLightSource.h:
        (WebCore::):
        (WebCore::LightSource::LightSource):
        (WebCore::LightSource::~LightSource):
        (WebCore::LightSource::type):
        * svg/graphics/filters/SVGPointLightSource.h:
        (WebCore::PointLightSource::create):
        (WebCore::PointLightSource::position):
        (WebCore::PointLightSource::PointLightSource):
        * svg/graphics/filters/SVGSpotLightSource.h:
        (WebCore::SpotLightSource::create):
        (WebCore::SpotLightSource::position):
        (WebCore::SpotLightSource::direction):
        (WebCore::SpotLightSource::specularExponent):
        (WebCore::SpotLightSource::limitingConeAngle):
        (WebCore::SpotLightSource::SpotLightSource):

2010-05-12  Xan Lopez  <xlopez@igalia.com>

        Reviewed by Nikolas Zimmermann.

        Add missing AM_V_GEN directives to generation rules so that they
        remain silent when requested.

        * GNUmakefile.am:

2010-05-12  Lucas De Marchi  <lucas.demarchi@profusion.mobi>

        Reviewed by Jeremy Orlow.

        [EFL] It does not make sense to use ScrollbarEfl::ScrollbarEfl, so
        use ScrollbarEfl (GCC 4.5 seems to be pickier about this). Revision 59030
        fixed cases for RenderThemeEfl, but missed this for ScrollbarEfl.
        http://webkit.org/b/38904

        No new tests required.

        * platform/efl/ScrollbarEfl.cpp:
        (scrollbarEflEdjeMessage):

2010-05-12  MORITA Hajime  <morrita@google.com>

        Reviewed by Kent Tamura.

        [Chromium] Support HTML5 <progress> element on Windows.
        https://bugs.webkit.org/show_bug.cgi?id=37308

        Extended ChromiumBridge to handle progress bar painting,
        and added delegations to it.
        
        No new tests. Test cases should be shared with existing ones for
        progress element.  Expectaions will be added after PROGRESS_TAG is
        enabled on Chromium tree.

        * platform/chromium/ChromiumBridge.h:
        * rendering/RenderProgress.cpp:
        (WebCore::RenderProgress::animationProgress):
        (WebCore::RenderProgress::isDeterminate):
        * rendering/RenderProgress.h:
        (WebCore::RenderProgress::position):
        * rendering/RenderThemeChromiumWin.cpp:
        (WebCore::RenderThemeChromiumWin::animationRepeatIntervalForProgressBar):
        (WebCore::RenderThemeChromiumWin::animationDurationForProgressBar):
        (WebCore::RenderThemeChromiumWin::adjustProgressBarStyle):
        (WebCore::RenderThemeChromiumWin::paintProgressBar):
        * rendering/RenderThemeChromiumWin.h:

2010-05-12  Marcus Bulach  <bulach@chromium.org>

        Reviewed by Steve Block.

        Removes Geolocation::setPosition and uses positionChanged() to capture lastPosition().
        This brings CLIENT_BASED_GEOLOCATION more inline with the non-client based.
        https://bugs.webkit.org/show_bug.cgi?id=38195

        * page/Geolocation.cpp:
        (WebCore::Geolocation::lastPosition):
        (WebCore::Geolocation::requestPermission):
        (WebCore::Geolocation::positionChangedInternal):
        (WebCore::Geolocation::positionChanged):
        (WebCore::Geolocation::geolocationServicePositionChanged):
        * page/Geolocation.h:
        * page/GeolocationController.cpp:
        (WebCore::GeolocationController::positionChanged):
        (WebCore::GeolocationController::lastPosition):
        * page/GeolocationController.h:

2010-05-12  Marcus Bulach  <bulach@chromium.org>

        Reviewed by Steve Block.

        Attaches the geolocation bridge later on startUpdating().
        This prevents a page requesting permission when it has just accessed navigator.geolocation (without calling navigator.geolocation.getCurrentPosition/watchPosition).
        Note: when Geolocation::haveSuitableCachedPosition(), WebGeolocationServiceBridgeImpl::startUpdating() is not called,
        so we attach the bridge if needed at requestGeolocationPermissionForFrame().
        https://bugs.webkit.org/show_bug.cgi?id=38323
        http://crbug.com/42789

        * platform/chromium/GeolocationServiceChromium.h:

2010-05-12  Robin Qiu  <robin.qiu@torchmobile.com.cn>

        Reviewed by Dirk Schulze.

        Fix a bug in SVGPathSegList::getPathSegAtLength().
        This bug is just a misktake: almost all of the code is OK, but the
        parameter is not used at all, therefore, this function always returns
        "1".
        And make a modification to return the last path segment if the distance
        exceeds the actual path length.
        https://bugs.webkit.org/show_bug.cgi?id=37515

        Test: svg/dom/svgpath-getPathSegAtLength.html

        * svg/SVGPathSegList.cpp:
        (WebCore::SVGPathSegList::getPathSegAtLength):

2010-05-11  David Hyatt  <hyatt@apple.com>

        Reviewed by Maciej Stachowiak.

        https://bugs.webkit.org/show_bug.cgi?id=38976, fast/css/pseudo-cache-stale.html has incorrect results.

        Make sure to trigger a relayout of any objects whose first-line styles change dynamically.

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

2010-05-11  Joseph Pecoraro  <joepeck@webkit.org>

        Reviewed by Timothy Hatcher.

        Web Inspector: Shorthand Properties Getting Deleted When Editing
        https://bugs.webkit.org/show_bug.cgi?id=38958

        * inspector/front-end/DOMAgent.js:
        (WebInspector.CSSStyleDeclaration.prototype.styleTextWithShorthands): was getting regular values instead of shorthand values

2010-05-11  Tony Chang  <tony@chromium.org>

        Reviewed by Darin Fisher.

        [chromium] Remove subframe scrollbar routing (r58937)
        https://bugs.webkit.org/show_bug.cgi?id=38894

        * page/chromium/EventHandlerChromium.cpp:
        (WebCore::EventHandler::passMousePressEventToSubframe):

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

        Reviewed by Maciej Stachowiak.

        Body not redrawn, and filled with garbage on some composited pages
        https://bugs.webkit.org/show_bug.cgi?id=38951
        <rdar://problem/7891548>
        
        When the root layer becomes composited (for example, because a negative z-index
        descendant in its stacking context becomes composited), then it has to be made
        large enough to fill the viewport, because the page background draws into it.

        Test: compositing/geometry/composited-html-size.html

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

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

        Reviewed by Mark Rowe.

        https://bugs.webkit.org/show_bug.cgi?id=38961
        Move some member variables around to reduce class sizes.

        If a class inherits (directly or indirectly) from FastAllocBase, we don't want the first member variable
        of that class to also inherit (directly or indirectly) from FastAllocBase as this will add padding to the class
        and thus increasing its size.

        * css/CSSParserValues.h:
        * css/CSSSelector.h:
        (WebCore::CSSSelector::CSSSelector):
        (WebCore::CSSSelector::RareData::RareData):
        * platform/graphics/FontCache.cpp:
        (WebCore::FontPlatformDataCacheKey::FontPlatformDataCacheKey):

2010-05-11  Dumitru Daniliuc  <dumi@chromium.org>

        Reviewed by Adam Barth.

        Adding a function needed by the V8 code generator to turn on/off
        the binding for WorkerContext::openDatabaseSync().
        https://bugs.webkit.org/show_bug.cgi?id=38960

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

2010-05-11  MORITA Hajime  <morrita@google.com>

        Reviewed by Dirk Schulze.

        CSS SVG font doesn't recognize URL without element reference
        https://bugs.webkit.org/show_bug.cgi?id=37144

        CachedFont::getSVGFontById() did assume that element reference (ID) is given.
        So fixed to handle an empty or missing element reference. In which case, 
        the first font element is returned if available.
        
        Test: svg/custom/svg-fonts-with-no-element-reference.html

        * loader/CachedFont.cpp:
        (WebCore::CachedFont::getSVGFontById):

2010-05-11  Jer Noble  <jer.noble@apple.com>

        No Review.
        
        Fix the Windows Debug Build: the correct VCProj variable to use when linking against
        JavaScriptCore is $(WebKitDLLConfigSuffix), not $(WebKitConfigSuffix), which expands
        to an empty string rather than "_debug".
        
        * WebCore.vcproj/QTMovieWin.vcproj:

2010-05-11  Jer Noble  <jer.noble@apple.com>

        19 media tests are crashing on Windows Release
        https://bugs.webkit.org/show_bug.cgi?id=38950
        rdar://problem/7971658

        Reviewed by Darin Adler.

        Link against JavaScriptCore.lib instead of WTF.lib, so the free and malloc used by 
        QTMovieWin is always the free and malloc in JavaScriptCore.dll.
        
        * WebCore.vcproj/QTMovieWin.vcproj:

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

        Reviewed by Beth Dakin.

        Another refactoring patch in preparation for a fix to
        https://bugs.webkit.org/show_bug.cgi?id=38871
        REGRESSION: Crash clicking background NPR tab after few minutes of sitting idle

        * dom/Document.cpp:
        (WebCore::Document::addMediaCanStartListener): Added.
        (WebCore::Document::removeMediaCanStartListener): Added.

        * dom/Document.h: Added add/removeMediaCanStartListener.

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::~HTMLMediaElement): Call removeMediaCanStartListener
        on the document instead of the page.
        (WebCore::HTMLMediaElement::willMoveToNewOwnerDocument): Call
        removeMediaCanStartListener on the current document.
        (WebCore::HTMLMediaElement::didMoveToNewOwnerDocument): Call
        addMediaCanStartListener on the new document.
        (WebCore::HTMLMediaElement::loadInternal): Call addMediaCanStartListener
        on the document instead of the page.

        * plugins/PluginView.cpp:
        (WebCore::PluginView::startOrAddToUnstartedList): Call addMediaCanStartListener
        on the document instead of the page.
        (WebCore::PluginView::~PluginView): Call removeMediaCanStartListener
        on the document instead of the page, and do it in line instead of calling
        a function.

        * plugins/PluginView.h: Removed unused removeFromUnstartedListIfNecessary.

2010-05-11  Brian Weinstein  <bweinstein@apple.com>

        Reviewed by Steve Falkenburg and Jon Honeycutt.
        Patch by Gavin Barraclough.

        REGRESSION (r57900-57919): 3% PLT Regression from moving strings into WTF.
        https://bugs.webkit.org/show_bug.cgi?id=38930
        <rdar://problem/7937188>
        
        Add the WTF strings into the WebCore vcproj, from their copied location in $(WebKitOutputDir).

        No new tests because no change in behavior.

        * WebCore.vcproj/WebCore.vcproj:

2010-05-11  Beth Dakin  <bdakin@apple.com>

        Reviewed by Darin Adler.

        Small re-factoring patch in preparation for fixing https://
        bugs.webkit.org/show_bug.cgi?id=38871 REGRESSION: Crash clicking 
        background NPR tab after few minutes of sitting idle

        * page/Page.cpp:
        (WebCore::Page::takeAnyMediaCanStartListener):
        (WebCore::Page::setCanStartMedia):
        * page/Page.h:

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

        Reviewed by Brady Eidson.

        https://bugs.webkit.org/show_bug.cgi?id=37989
        Safari (still) doesn't always send basic credentials preemptively

        Test: http/tests/xmlhttprequest/basic-auth-default.html

        After fetching credentials from WebCore storage, put them back right away. This will add
        default credentials for the directory, since this may be the first time we learn about its
        associated protection space.

        * platform/network/cf/ResourceHandleCFNet.cpp:
        (WebCore::ResourceHandle::didReceiveAuthenticationChallenge):
        (WebCore::WebCoreSynchronousLoader::didReceiveChallenge):
        * platform/network/mac/ResourceHandleMac.mm:
        (WebCore::ResourceHandle::didReceiveAuthenticationChallenge):
        (-[WebCoreSynchronousLoader connection:didReceiveAuthenticationChallenge:]):

2010-05-11  Kevin Watters  <kevinwatters@gmail.com>

        Reviewed by Kevin Ollivier.

        [wx] Create an NSFont on Mac builds that do not have built-in methods to do so.
        https://bugs.webkit.org/show_bug.cgi?id=38931

        * platform/graphics/wx/FontPlatformData.h:
        (WebCore::FontPlatformData::nsFont):
        * platform/graphics/wx/FontPlatformDataWxMac.mm:
        (DegToRad):
        (OSXCreateNSFont):
        (WebCore::FontPlatformData::cacheNSFont):
        * platform/graphics/wx/SimpleFontDataWx.cpp:
        (WebCore::SimpleFontData::platformWidthForGlyph):

2010-05-11  Avi Drissman  <avi@chromium.org>

        Reviewed by Darin Fisher.

        [Chromium] Pipe RTL info into WebPopupMenuInfo
        https://bugs.webkit.org/show_bug.cgi?id=38749

        * platform/chromium/PopupMenuChromium.cpp:
        (WebCore::PopupContainer::menuStyle):
        * platform/chromium/PopupMenuChromium.h:

2010-05-11  Mark Rowe  <mrowe@apple.com>

        Fix the world.

        In r59162 a change was made to WebCore's FeatureDefines.xcconfig that enabled FILE_READER and FILE_WRITER.
        The author and reviewer of that patch ignored the carefully-worded warning at the top of that file asking
        that changes to the file be kept in sync across JavaScriptCore, WebCore and WebKit, as well as being kept
        in sync with build-webkit.  This led to WebCore and WebKit having different views of Document's vtable
        and results in crashes in Safari shortly after launch when virtual function calls resulted in the wrong
        function in WebCore being called.

        We fix this by bringing the FeatureDefines.xcconfig files in to sync.  Based on the ChangeLog message and
        other changes in r59162 it appears that enabling FILE_WRITER was unintentional so that particular change
        has been reverted.

        * Configurations/FeatureDefines.xcconfig:

2010-05-11  Dimitri Glazkov  <dglazkov@chromium.org>

        Reviewed by Darin Adler.

        REGRESSION(r58520): Implicit submission on forms with button type="submit" no longer works
        https://bugs.webkit.org/show_bug.cgi?id=38913

        * Widened the check for a successful submit button to include all HTMLFormControlElements.
        * Clarified implicit submission code by:
            - introducing HTMLFormControlElement::canTriggerImplicitSubmission flag,
            - getting rid of static casting and checking for tag names.

        * html/HTMLFormControlElement.h:
        (WebCore::HTMLFormControlElement::canTriggerImplicitSubmission): Added.
        * html/HTMLFormElement.cpp:
        (WebCore::HTMLFormElement::submitImplicitly): Renamed parameters for clarity, refactored code
            to use canTriggerImplicitSubmission.
        * html/HTMLFormElement.h: Renamed parameter for clarity.
        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::defaultEventHandler):  Used canTriggerImplicitSubmission()
            instead of isTextField() for clarity.
        * html/HTMLInputElement.h:
        (WebCore::HTMLInputElement::canTriggerImplicitSubmission): Added.
        * html/HTMLIsIndexElement.h:
        (WebCore::HTMLIsIndexElement::canTriggerImplicitSubmission): Added.

2010-05-11  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r59171.
        http://trac.webkit.org/changeset/59171
        https://bugs.webkit.org/show_bug.cgi?id=38933

        "Broke the world" (Requested by bweinstein on #webkit).

        * WebCore.vcproj/WebCore.vcproj:

2010-05-11  Brian Weinstein  <bweinstein@apple.com>

        Reviewed by Steve Falkenburg.
        Patch by Gavin Barraclough.

        REGRESSION (r57900-57919): 3% PLT Regression from moving strings into WTF.
        https://bugs.webkit.org/show_bug.cgi?id=38930
        <rdar://problem/7937188>
        
        Add the WTF strings into the WebCore vcproj, from their copied location in $(WebKitOutputDir).

        No new tests because no change in behavior.

        * WebCore.vcproj/WebCore.vcproj:

2010-05-11  Jian Li  <jianli@chromium.org>

        Unreviewed. Fix compiling erron on snow leopard.

        * html/FileThreadTask.h:
        (WebCore::createFileThreadTask):

2010-05-11  Jian Li  <jianli@chromium.org>

        Reviewed by Dmitry Titov.

        Expose FileReader interface.
        https://bugs.webkit.org/show_bug.cgi?id=38609

        Test: fast/files/file-reader.html

        * Configurations/FeatureDefines.xcconfig:
        * DerivedSources.cpp:
        * DerivedSources.make:
        * GNUmakefile.am:
        * WebCore.gypi:
        * WebCore.pri:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSEventTarget.cpp:
        (WebCore::toJS):
        * bindings/v8/V8DOMWrapper.cpp:
        (WebCore::V8DOMWrapper::convertEventTargetToV8Object):
        * html/FileError.idl:
        * html/FileReader.idl: Added.
        * page/DOMWindow.idl:

2010-05-11  Xan Lopez  <xlopez@igalia.com>

        Reviewed by Gustavo Noronha.

        [gtk] critical warning in soup_message_set_first_party() when cancelling a navigation
        https://bugs.webkit.org/show_bug.cgi?id=38653

        Check if willSendRequest cancelled the request before setting the
        first party for the cookies in the message, otherwise we'll get a
        critical warning.

        * platform/network/soup/ResourceHandleSoup.cpp:
        (WebCore::restartedCallback):

2010-05-11  Jer Noble  <jer.noble@apple.com>

        Reviewed by Adele Peterson.

        REGRESSION (r59001): 11 media tests are failing on Windows (38847)
        rdar://problem/7962997
        https://bugs.webkit.org/show_bug.cgi?id=38847
        
        QTMovieWin was too much refactored; the cacheMovieScale() function should have
        been left in QTMovie (instead of being moved into QTMovieGWorld).  This fixes the
        video-size-intrinsic-scale test.
        
        QTMovieTask::updateTaskTimer() was ignoring the maxInterval parameter unless 
        QTGetTimeUntilNextTask() returned an error, which caused the next timer to be
        scheduled for extremely far in the future, breaking some of the layout tests.
        
        QTMovieTask::fireTaskClients() now makes a local copy of the task list before 
        calling clients, in case one of them removes themselves from the task list and
        invalidates our iterating pointer.
        
        * platform/graphics/win/QTMovie.cpp:
        (QTMoviePrivate::task):
        (QTMoviePrivate::createMovieController):
        (QTMoviePrivate::cacheMovieScale):
        * platform/graphics/win/QTMovieGWorld.cpp:
        (QTMovieGWorldPrivate::movieLoadStateChanged):
        * platform/graphics/win/QTMovieTask.cpp:
        (QTMovieTask::updateTaskTimer):
        (QTMovieTask::fireTaskClients):

2010-05-11  Patrick Gansterer  <paroga@paroga.com>

        Reviewed by Adam Roben.

        Port SharedBuffer to WinCE.
        https://bugs.webkit.org/show_bug.cgi?id=37222

        Use only functions which are available on Win32 and WinCE.

        * platform/win/SharedBufferWin.cpp:
        (WebCore::SharedBuffer::createWithContentsOfFile):

2010-05-11  Benjamin Poulain  <benjamin.poulain@nokia.com>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] fast/text/find-hidden-text.html
        https://bugs.webkit.org/show_bug.cgi?id=32922

        Use the real page step for populating the QStyleOption otherwhise
        the size can be negative, which can break the QStyle used.

        * platform/qt/ScrollbarThemeQt.cpp:
        (WebCore::styleOptionSlider):

2010-05-11  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Yury Semikhatsky.

        Web Inspector: make styles rendering more user-friendly.

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

        * inspector/front-end/ElementsPanel.js:
        (WebInspector.ElementsPanel):
        * inspector/front-end/StylesSidebarPane.js:
        (WebInspector.StylesSidebarPane.prototype._update):
        (WebInspector.StylesSidebarPane.prototype._rebuildSectionsForStyleRules):
        (WebInspector.ComputedStyleSidebarPane):
        (WebInspector.StylePropertiesSection):
        (WebInspector.StylePropertiesSection.prototype.collapse):
        (WebInspector.StylePropertiesSection.prototype.startEditingSelector):
        * inspector/front-end/inspector.css:
        (#elements-content):
        (#elements-sidebar):
        (.styles-sidebar-separator):
        (.styles-section):
        (.styles-section .header):
        (.styles-section .header .title):
        (.styles-section .header .subtitle):
        (.styles-section .header .subtitle a):
        (.styles-section .properties):
        (.styles-section.no-affect .properties li):
        (.styles-section.no-affect .properties li.editing):
        (.styles-section.expanded .properties):
        (.styles-section .properties li):
        (.styles-section .properties li.parent):
        (.styles-section .properties ol):
        (.styles-section .properties ol.expanded):
        (.styles-section .properties li.parent::before):
        (.styles-section .properties li.parent.expanded::before):
        (.styles-section .properties li .info):
        (.styles-section:hover .properties .enabled-button):
        (.styles-section .properties li.disabled .enabled-button):
        (.styles-section .properties .enabled-button):
        (.styles-section .properties .overloaded, .styles-section .properties .disabled):
        (.styles-section.computed-style .properties .disabled):
        (.styles-section .properties .implicit, .styles-section .properties .inherited):
        (.styles-section .properties .inherited):
        (.styles-section.show-inherited .properties .inherited):

2010-05-11  Nikolas Zimmermann  <nzimmermann@rim.com>

        Reviewed by Dirk Schulze.

        Move buildLayoutInformationForTextBox() from SVGRootInlineBox in SVGInlineTextBox where it belongs
        https://bugs.webkit.org/show_bug.cgi?id=38799

        Cleanup SVGRootInlineBox/SVGInlineTextBox. Move buildLayoutInformationForTextBox to SVGInlineTextBox.
        Move lots of helper methods into new SVGTextLayoutUtilities class. Adapted all callsites.

        Fixed bug in kerning handling, hkern was applyable to vertical text as well. Covered by two new tests.

        Tests: svg/text/text-hkern-on-vertical-text.svg
               svg/text/text-vkern-on-horizontal-text.svg

        * Android.mk: Add SVGTextLayoutUtilities.cpp/h to build.
        * GNUmakefile.am: Ditto.
        * WebCore.gypi: Ditto.
        * WebCore.pro: Ditto.
        * WebCore.vcproj/WebCore.vcproj: Ditto.
        * WebCore.xcodeproj/project.pbxproj: Ditto.
        * rendering/SVGInlineTextBox.cpp:
        (WebCore::SVGInlineTextBox::calculateGlyphWidth): Use textRenderer()->characters() instead of textRenderer()->text()->characters() as shortcut.
        (WebCore::SVGInlineTextBox::svgCharacterHitsPosition): Fix style issue, no else if after a return branch.
        (WebCore::SVGInlineTextBox::paintSelection): Use !color.alpha() instead of color.alpha() == 0.
        (WebCore::SVGInlineTextBox::buildLayoutInformation): Moved from SVGRootInlineBox::buildLayoutInformationForTextBox.
        * rendering/SVGInlineTextBox.h: Fix indention.
        (WebCore::SVGInlineTextBox::selectionTop): Inlined.
        (WebCore::SVGInlineTextBox::selectionHeight): Inlined.
        * rendering/SVGRenderTreeAsText.cpp: Include SVGTextLayoutUtilities.h
        * rendering/SVGRootInlineBox.cpp: Move almost all static text layout helper functions in SVGTextLayoutUtilities
        (WebCore::calculateTextLengthCorrectionForTextChunk): Fixed style issue in long if conditions spanning multiple lines.
        (WebCore::SVGRootInlineBox::computePerCharacterLayoutInformation): Use different topLeftPositionOfCharacterRange() taking start/end iterators.
        (WebCore::SVGRootInlineBox::buildLayoutInformation): Use the moved SVGInlineTextBox::buildLayoutInformation() method.
        (WebCore::SVGRootInlineBox::buildTextChunks): Fixed small style issue, remove unneeded parenthesis.
        (WebCore::SVGRootInlineBox::layoutTextChunks): Fix style issue in debugging code.
        * rendering/SVGRootInlineBox.h: Rename 'LastGlyphInfo' to 'SVGLastGlyphInfo' and move to SVGTextLayoutUtilities.
        (WebCore::SVGRootInlineBox::svgTextChunks): Inlined for speed.
        * rendering/SVGTextLayoutUtilities.cpp: Added.
        (WebCore::isVerticalWritingMode):
        (WebCore::dominantBaselineToShift):
        (WebCore::alignmentBaselineToShift):
        (WebCore::glyphOrientationToAngle):
        (WebCore::glyphOrientationIsMultiplyOf180Degrees):
        (WebCore::applyGlyphAdvanceAndShiftRespectingOrientation):
        (WebCore::topLeftPositionOfCharacterRange):
        (WebCore::cummulatedWidthOfInlineBoxCharacterRange):
        (WebCore::cummulatedHeightOfInlineBoxCharacterRange):
        (WebCore::svgTextRunForInlineTextBox):
        (WebCore::calculateCSSKerning):
        (WebCore::applySVGKerning):
        * rendering/SVGTextLayoutUtilities.h: Added.
        (WebCore::):
        (WebCore::SVGTextPaintInfo::SVGTextPaintInfo):
        (WebCore::SVGLastGlyphInfo::SVGLastGlyphInfo):

2010-05-11  Zoltan Herczeg  <zherczeg@webkit.org>

        Reviewed by Dirk Schulze.

        RenderSVGImage::imageChanged should invalidate the SVG filter cache
        https://bugs.webkit.org/show_bug.cgi?id=38838

        Test: svg/filters/filteredImage.svg

        * rendering/RenderSVGImage.cpp:
        (WebCore::RenderSVGImage::imageChanged):

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

        Fix asserting GTK build.

        r59137 changed the behavior of RenderObject::repaintUsingContainer(). I mistakenly
        thought that non-compositing builds would always pass a 0 repaintContainer, but
        actually the RenderView is passed in this case. So use this to repaint if 
        ACCELERATED_COMPOSITING is turned off.

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

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

        Fix warning on Windows about unreachable code.

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

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

        Reviewed by Anders Carlsson

        Allow compositing layers to be connected across iframe boundaries on Mac
        https://bugs.webkit.org/show_bug.cgi?id=38856
        
        RenderObject::repaintUsingContainer() incorrectly did a view-based
        repaint if the repaint container was the RenderView. Instead, we need
        to check to see if the RenderView's layer is composited, and, if so,
        whether it's painting into the window or not. This can occur when iframes
        are composited.

        The bug is timing-sensitive, involving compositing in iframes, and I was not able to
        concoct a good testcase.

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

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

        Reviewed by Anders Carlsson

        Allow compositing layers to be connected across iframe boundaries on Mac
        https://bugs.webkit.org/show_bug.cgi?id=38856

        Changes to allow compositing layers for iframes to switch between being hosted
        by the iframe's layer-backed NSView, and parented in the GraphicsLayer tree of the
        enclosing document.

        Tests: compositing/iframes/connect-compositing-iframe.html
               compositing/iframes/connect-compositing-iframe2.html
               compositing/iframes/connect-compositing-iframe3.html

        * page/FrameView.h:
        * page/FrameView.cpp:
        (WebCore::FrameView::hasCompositedContent): New convenience method.
        (WebCore::FrameView::setIsOverlapped): If we're composited, poke the owner document in case it
            wants to re-evaluate compositing decisions.
        (WebCore::FrameView::isOverlapped): Just expose the existing flag.

        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::shouldBeNormalFlowOnly):
        (WebCore::RenderLayer::isSelfPaintingLayer):

        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::updateGraphicsLayerConfiguration): If this is an iframe, we need
            to ensure that the layers for the iframe content are hooked up.
        (WebCore::RenderLayerBacking::updateDrawsContent): When an iframe toggles between different
            attachments, the 'drawsContent' behavior of its root layer changes, so needs to be updated.

        * rendering/RenderLayerCompositor.h:
        (WebCore::RenderLayerCompositor::updateCompositingLayers): Call destroyRootPlatformLayer()
            instead of detachRootPlatformLayer() and manually zeroing out the OwnPtrs.
        (WebCore::RenderLayerCompositor::updateBacking): If a RenderIFrame changes compositing mode,
            we need to ensure that its content compositor attachment is updated.
        (WebCore::RenderLayerCompositor::repaintOnCompositingChange): The existing code had a bug
            that caused repaints for RenderViews (which have no parent) to bail. We only want to bail
            for non-RenderViews that are not attached.
        (WebCore::RenderLayerCompositor::rebuildCompositingLayerTree): Factored the iframe-connecting
            code into a new method, parentIFrameContentLayers().
        (WebCore::RenderLayerCompositor::parentIFrameContentLayers): New method to share the code that hooks
            up the iframe's compositing layers to the parent.
        (WebCore::RenderLayerCompositor::shouldPropagateCompositingToEnclosingIFrame): Add logic to propagate
            compositing out of iframes on Mac in two situations: 1) when the FrameView is overlapped, and 2)
            if the parent document is already composited.
        (WebCore::RenderLayerCompositor::ensureRootPlatformLayer): Clean up the logic here to better deal
            with dynamic changes of the attachment type.
        (WebCore::RenderLayerCompositor::destroyRootPlatformLayer): Clean up and null out the clipping layer here.
        (WebCore::RenderLayerCompositor::attachRootPlatformLayer): Call rootLayerAttachmentChanged().
        (WebCore::RenderLayerCompositor::detachRootPlatformLayer): Ditto. Also unparent the clipping and platform layers.
        (WebCore::RenderLayerCompositor::updateRootLayerAttachment): Call ensureRootPlatformLayer() to re-evaluate
            the layer attachment.
        (WebCore::RenderLayerCompositor::rootLayerAttachmentChanged): We need to update the drawsContent() status
            of the RenderView's layer's backing, because it changes depending on the attachment.

        * rendering/RenderWidget.cpp:
        (WebCore::RenderWidget::paint): Do overlap testing if the frameView can do fast repaints (as before),
            but also now when the frameView has composited content.

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

        Reviewed by Anders Carlsson

        Allow compositing layers to be connected across iframe boundaries on Mac
        https://bugs.webkit.org/show_bug.cgi?id=38856

        Rename the static shouldPropagateCompositingToIFrameParent() to shouldPropagateCompositingToEnclosingIFrame(),
        to pave the way for runtime switches in the propagation behavior. We have to make sure we call it on
        the correct RenderLayerCompositor (that belonging to the iframe's content document).
        
        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::paintingGoesToWindow): Now that we know the root layer attachment, we
        can simplify this method.

        * rendering/RenderLayerCompositor.h:
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::enableCompositingMode): No need for the setNeedsStyleRecalc()
        here, because the ensureRootPlatformLayer() or destroyRootPlatformLayer() will have already done it.

        (WebCore::RenderLayerCompositor::rebuildCompositingLayerTree): Use the root layer attachment to determine
        whether to parent the iframe's layers.
        
        (WebCore::RenderLayerCompositor::didMoveOnscreen): Method name change.
        (WebCore::RenderLayerCompositor::shouldPropagateCompositingToEnclosingIFrame): Name change.
        (WebCore::RenderLayerCompositor::requiresCompositingForIFrame): We need to consult the iframe contents
        document's compositor to ask whether propagation is appropriate.
        (WebCore::RenderLayerCompositor::ensureRootPlatformLayer): Name change.

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

        Reviewed by Anders Carlsson

        Allow compositing layers to be connected across iframe boundaries on Mac
        https://bugs.webkit.org/show_bug.cgi?id=38856
        
        Use an enum for the type of root layer attachment on a RenderLayerCompositor, so we can
        determine if the attachment is via the ChromeClient, via an enclosing iframe, or unattached.

        * rendering/RenderLayerCompositor.h: New RootLayerAttachment enum.
        (WebCore::RenderLayerCompositor::rootLayerAttachment): getter for the current attachment.

        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::RenderLayerCompositor): Init m_rootLayerAttachment.
        (WebCore::RenderLayerCompositor::~RenderLayerCompositor): Assert that is unattached.
        (WebCore::RenderLayerCompositor::updateCompositingLayers): Call destroyRootPlatformLayer instead of willMoveOffscreen,
        when there are no layers left. Also clear out the clipping layer.
        (WebCore::RenderLayerCompositor::didMoveOnscreen): Call attachRootPlatformLayer.
        (WebCore::RenderLayerCompositor::willMoveOffscreen): Call ensureRootPlatformLayer with the appropriate attachment.
        (WebCore::RenderLayerCompositor::ensureRootPlatformLayer): Only create the m_rootPlatformLayer if we don't have one
           already, but be sure to always set the root layer geometry orientation. Also only create the
           m_clippingLayer if we need to.
        (WebCore::RenderLayerCompositor::destroyRootPlatformLayer): Call detachRootPlatformLayer().
        (WebCore::RenderLayerCompositor::attachRootPlatformLayer): Code moved from didMoveOnscreen, but switching on
            attachment.
        (WebCore::RenderLayerCompositor::detachRootPlatformLayer): Code moved from willMoveOffscreen, but switching on
            attachment.

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

        Reviewed by Anders Carlsson

        Allow compositing layers to be connected across iframe boundaries on Mac
        https://bugs.webkit.org/show_bug.cgi?id=38856

        Clean up the geometry logic when propagating compositing out of iframes.

        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::updateRootLayerPosition): Geometry on m_rootPlatformLayer no longer
        needs to be special when there's a clipping layer.
        
        (WebCore::RenderLayerCompositor::ensureRootPlatformLayer): Don't set the clipping layer to have
        flipped geometry ever, and only set the root layer to have flipped geometry if it is not
        being hosted in an iframe. Also no need to set a custom anchor point on the clipping layer.

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

        Reviewed by Anders Carlsson

        Allow compositing layers to be connected across iframe boundaries on Mac
        https://bugs.webkit.org/show_bug.cgi?id=38856

        Clean up some methods related to composited iframes. No behavioral changes.

        * rendering/RenderLayerBacking.h: Move innerRenderLayerCompositor() to be a static method:
            RenderLayerCompositor::iframeContentsCompositor().
        * rendering/RenderLayerBacking.cpp: Remove innerRenderLayerCompositor().
        (WebCore::RenderLayerBacking::updateGraphicsLayerGeometry): Call iframeContentsCompositor().
        
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::enableCompositingMode): Call enclosingIFrameElement()
        (WebCore::RenderLayerCompositor::rebuildCompositingLayerTree): iframeContentsCompositor() is now a static method in this class.
        Also check that the iframe contents are in compositing mode (slightly clearer than relying on rootPlatformLayer() returning
        null).
        (WebCore::RenderLayerCompositor::iframeContentsCompositor): Moved from RenderLayerBacking.
        (WebCore::RenderLayerCompositor::didMoveOnscreen): Use enclosingIFrameElement() method.
        (WebCore::RenderLayerCompositor::willMoveOffscreen): Ditto.
        (WebCore::RenderLayerCompositor::enclosingIFrameElement): New method.
        (WebCore::RenderLayerCompositor::ensureRootPlatformLayer): Call enclosingIFrameElement().
        * rendering/RenderLayerCompositor.h: New method, iframeContentsCompositor().

2010-05-10  Dumitru Daniliuc  <dumi@chromium.org>

        Reviewed by Brady Eidson.

        Cleaning up and fixing the existing JSC DB bindings.
        https://bugs.webkit.org/show_bug.cgi?id=34994

        * bindings/js/JSDOMWindowCustom.cpp:
        (WebCore::JSDOMWindow::openDatabase):
        * bindings/js/JSDatabaseCustom.cpp:
        (WebCore::JSDatabase::changeVersion):
        (WebCore::createTransaction):
        (WebCore::JSDatabase::transaction):
        (WebCore::JSDatabase::readTransaction):
        * bindings/js/JSSQLTransactionCustom.cpp:
        (WebCore::JSSQLTransaction::executeSql):

2010-05-10  Fumitoshi Ukai  <ukai@chromium.org>

        Reviewed by Alexey Proskuryakov.

        WebSocket needs to suspend/resume as Active DOM object.
        https://bugs.webkit.org/show_bug.cgi?id=38171

        Implement suspend()/resume() in WebSocket and WebSocketChannel.
        While WebSocketChannel is suspended, it only adds received data in m_buffer
        or record the handle was closed, and report no event to WebSocket.
        When resumed, it will process buffer or handle closing.
        Since suspend/resume would be called while processing JavaScript event handler (e.g. before/after alert()), WebSocketChannel method that would fire an event need to be reentrant.
        So, WebSocketChannel::processBuffer() call WebSocket to fire an event at most once and skips buffer before the calling,
        so that next call of processBuffer() would process the next frame.

        * websockets/ThreadableWebSocketChannel.h:
        * websockets/ThreadableWebSocketChannelClientWrapper.h:
        (WebCore::ThreadableWebSocketChannelClientWrapper::didConnect):
          Mark channel is opened, and process pending events if not suspended.
        (WebCore::ThreadableWebSocketChannelClientWrapper::didReceiveMessage):
          Push message back in pending queue, and process pending events if not suspended.
        (WebCore::ThreadableWebSocketChannelClientWrapper::didClose):
          Mark channel is closed, and process pending events if not suspended.
        (WebCore::ThreadableWebSocketChannelClientWrapper::suspend):
          Mark suspended.
        (WebCore::ThreadableWebSocketChannelClientWrapper::resume):
          Unmark suspended, and process pending events.
        (WebCore::ThreadableWebSocketChannelClientWrapper::ThreadableWebSocketChannelClientWrapper):
        (WebCore::ThreadableWebSocketChannelClientWrapper::processPendingEvents):
        * websockets/WebSocket.cpp:
        (WebCore::WebSocket::canSuspend):
        (WebCore::WebSocket::suspend):
        (WebCore::WebSocket::resume):
        (WebCore::WebSocket::didClose):
        * websockets/WebSocket.h:
        * websockets/WebSocketChannel.cpp:
        (WebCore::WebSocketChannel::WebSocketChannel):
        (WebCore::WebSocketChannel::connect):
        (WebCore::WebSocketChannel::send):
        (WebCore::WebSocketChannel::bufferedAmount):
        (WebCore::WebSocketChannel::close):
        (WebCore::WebSocketChannel::suspend):
        (WebCore::WebSocketChannel::resume):
         When resumed, it will process buffer and
         handle closing if handle was already closed while suspended.
        (WebCore::WebSocketChannel::didClose):
         If suspended, record unhandled bufferedAmount and set m_closed true, so that closing will be processed when resumed.
        (WebCore::WebSocketChannel::didReceiveData):
         Add received data in buffer and process buffer while it is not suspended.
        (WebCore::WebSocketChannel::processBuffer):
         Process handshake header or one frame message.
         Return true if there are more data to be processed.
         Return false otherwise (e.g. incomplete handshake header or incomplete frame).
        * websockets/WebSocketChannel.h:
        * websockets/WorkerThreadableWebSocketChannel.cpp:
        (WebCore::WorkerThreadableWebSocketChannel::suspend):
        (WebCore::WorkerThreadableWebSocketChannel::resume):
        (WebCore::WorkerThreadableWebSocketChannel::Peer::suspend):
        (WebCore::WorkerThreadableWebSocketChannel::Peer::resume):
        (WebCore::WorkerThreadableWebSocketChannel::mainThreadSuspend):
        (WebCore::WorkerThreadableWebSocketChannel::Bridge::suspend):
        (WebCore::WorkerThreadableWebSocketChannel::mainThreadResume):
        (WebCore::WorkerThreadableWebSocketChannel::Bridge::resume):
        * websockets/WorkerThreadableWebSocketChannel.h:

2010-05-07  Dumitru Daniliuc  <dumi@chromium.org>

        Reviewed by Brady Eidson.

        Implement the JSC bindings for the sync DB API.
        https://bugs.webkit.org/show_bug.cgi?id=34994

        * bindings/js/JSDatabaseSyncCustom.cpp:
        (WebCore::JSDatabaseSync::changeVersion):
        (WebCore::createTransaction):
        * bindings/js/JSSQLTransactionSyncCustom.cpp:
        (WebCore::JSSQLTransactionSync::executeSql):

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

        Reviewed by Simon Fraser.

        https://bugs.webkit.org/show_bug.cgi?id=36566
        The animation-fill-mode property was missing from
        a few places where the animation shorthand is set up.

        Test: animations/animation-shorthand-removed.html

        * css/CSSMutableStyleDeclaration.cpp:
        (WebCore::CSSMutableStyleDeclaration::getPropertyValue): Make sure
        animation-fill-mode is included in the animation shorthand
        * css/CSSPropertyLonghand.cpp:
        (WebCore::initShorthandMap):

2010-05-10  Sam Weinig  <sam@webkit.org>

        Reviewed by Darin Adler.

        Fix for https://bugs.webkit.org/show_bug.cgi?id=38583
        <rdar://problem/7948784> Crash in Element::normalizeAttributes.

        Test: fast/dom/Element/normalize-crash.html

        * dom/Element.cpp:
        (WebCore::Element::normalizeAttributes): Copy attributes to a vector
        before iterating.
        * dom/NamedAttrMap.cpp:
        (WebCore::NamedNodeMap::copyAttributesToVector): Added.
        * dom/NamedAttrMap.h:

2010-05-10  Jian Li  <jianli@chromium.org>

        Reviewed by Adam Barth.

        [V8] Fix V8 code generator script to generate the correct code for
        converting ScriptString.
        https://bugs.webkit.org/show_bug.cgi?id=38873

        Updated the bindings test result. Note that the result is also updated
        to reflect other script generator changes not introduced by this patch.

        * bindings/scripts/CodeGeneratorV8.pm:
        * bindings/scripts/test/JS/JSTestCallback.cpp:
        (WebCore::JSTestCallback::JSTestCallback):
        (WebCore::JSTestCallback::~JSTestCallback):
        * bindings/scripts/test/JS/JSTestCallback.h:
        * bindings/scripts/test/V8/V8TestObj.cpp:
        (WebCore::TestObjInternal::scriptStringAttrAttrGetter):

2010-05-10  Mark Rowe  <mrowe@apple.com>

        Fix the 32-bit WebKit2 build.

        * WebCore.base.exp:

2010-05-07  Jon Honeycutt  <jhoneycutt@apple.com>

        Crash closing window containing Flash plug-in
        https://bugs.webkit.org/show_bug.cgi?id=38797
        <rdar://problem/7935266>

        Reviewed by Eric Seidel.

        Test: plugins/geturlnotify-during-document-teardown.html

        * plugins/PluginView.cpp:
        (WebCore::PluginView::load):
        Null check the DocumentLoader; it's possible for this to be null while
        the Document is being torn down and before the plug-in is destroyed.

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

        Reviewed by Darin Adler.

        Based on a patch by Eric Seidel.

        https://bugs.webkit.org/show_bug.cgi?id=28697
        <rdar://problem/7946578> WebKit crash on WebCore::Node::nodeIndex()

        It's not OK to call ContainerNode::willRemoveChild() in a loop, because Range code assumes
        that it can adjust start and end position to any node except for the one being removed -
        so these notifications cannot be batched.

        Test: fast/dom/Range/remove-all-children-crash.html

        * dom/ContainerNode.cpp:
        (WebCore::willRemoveChild): Removed unused ExceptionCode.
        (WebCore::willRemoveChildren): New function, used in removeChildren() case.
        (WebCore::ContainerNode::removeChild): ExceptionCode return was always 0, don't bother with it.
        (WebCore::ContainerNode::removeChildren): Call willRemoveChildrenFromNode.
        (WebCore::dispatchChildRemovalEvents): Moved some logic out into willRemoveChildrenFromNode
        and willRemoveChild.

        * dom/Document.cpp:
        (WebCore::Document::nodeChildrenWillBeRemoved): New function, used in removeChildren() case.

        * dom/Document.h: 
        (WebCore::Document::nodeChildrenWillBeRemoved): New function, used in removeChildren() case.

        * dom/Range.h:
        * dom/Range.cpp:
        (WebCore::boundaryNodeChildrenWillBeRemoved): New function, used in removeChildren() case.
        (WebCore::Range::nodeChildrenWillBeRemoved): Ditto.

2010-05-10  Dumitru Daniliuc  <dumi@chromium.org>

        Reviewed by Adam Barth.

        Implement the V8 bindings for the sync DB API.
        https://bugs.webkit.org.show_bug.cgi?id=34994

        * bindings/v8/custom/V8DatabaseSyncCustom.cpp:
        (WebCore::V8DatabaseSync::changeVersionCallback):
        (WebCore::createTransaction):
        * bindings/v8/custom/V8SQLTransactionSyncCustom.cpp:
        (WebCore::V8SQLTransactionSync::executeSqlCallback):
        * bindings/v8/custom/V8WorkerContextCustom.cpp:
        (WebCore::V8WorkerContextCustom::openDatabaseSyncCallback):

2010-05-10  Dumitru Daniliuc  <dumi@chromium.org>

        Reviewed by Adam Barth.

        Clean up and fix the existing V8 DB bindings.
        https://bugs.webkit.org/show_bug.cgi?id=34994

        * bindings/v8/custom/V8DOMWindowCustom.cpp:
        (WebCore::V8DOMWindow::openDatabaseCallback):
        * bindings/v8/custom/V8DatabaseCustom.cpp:
        (WebCore::V8Database::changeVersionCallback):
        (WebCore::createTransaction):
        * bindings/v8/custom/V8SQLTransactionCustom.cpp:
        (WebCore::V8SQLTransaction::executeSqlCallback):

2010-05-10  Kevin Ollivier  <kevino@theolliviers.com>

        [wx] Build fix for wx 2.8 after complex text changes.

        * platform/graphics/wx/FontPlatformDataWxMac.mm:
        (WebCore::FontPlatformData::nsFont):
        * platform/graphics/wx/SimpleFontDataWx.cpp:
        (WebCore::SimpleFontData::platformWidthForGlyph):

2010-05-10  John Gregg  <johnnyg@google.com>

        [chromium] Try to fix the chromium build after r59085 by
        including MathExtras.h before using isnan().
        https://bugs.webkit.org/show_bug.cgi?id=38860

        * html/canvas/WebGLIntegralTypedArrayBase.h:

2010-05-10  Kevin Ollivier  <kevino@theolliviers.com>

        [wx] Build fix for wx trunk after complex text changes.

        * platform/graphics/wx/FontPlatformDataWx.cpp:
        (WebCore::FontPlatformData::FontPlatformData):

2010-05-10  Tony Gentilcore  <tonyg@chromium.org>

        Reviewed by Adam Barth.

        Provide mechanism to cache metadata for a resource
        https://bugs.webkit.org/show_bug.cgi?id=37874

        No new tests because no new functionality.

        * WebCore.gypi:
        * loader/CachedMetadata.h: Added.
        (WebCore::CachedMetadata::create):
        (WebCore::CachedMetadata::deserialize):
        (WebCore::CachedMetadata::serialize):
        (WebCore::CachedMetadata::~CachedMetadata):
        (WebCore::CachedMetadata::dataTypeID):
        (WebCore::CachedMetadata::data):
        (WebCore::CachedMetadata::size):
        (WebCore::CachedMetadata::readUnsigned):
        (WebCore::CachedMetadata::appendUnsigned):
        (WebCore::CachedMetadata::CachedMetadata):
        * loader/CachedResource.cpp:
        (WebCore::CachedResource::setSerializedCachedMetadata):
        (WebCore::CachedResource::setCachedMetadata):
        (WebCore::CachedResource::cachedMetadata):
        * loader/CachedResource.h:
        * loader/ResourceLoader.h:
        (WebCore::ResourceLoader::didReceiveCachedMetadata):
        * loader/SubresourceLoader.cpp:
        (WebCore::SubresourceLoader::didReceiveCachedMetadata):
        * loader/SubresourceLoader.h:
        * loader/SubresourceLoaderClient.h:
        (WebCore::SubresourceLoaderClient::didReceiveCachedMetadata):
        * loader/loader.cpp:
        (WebCore::Loader::Host::didReceiveCachedMetadata):
        * loader/loader.h:
        * platform/network/ResourceHandle.cpp:
        (WebCore::ResourceHandle::cacheMetadata):
        * platform/network/ResourceHandle.h:
        * platform/network/ResourceHandleClient.h:
        (WebCore::ResourceHandleClient::didReceiveCachedMetadata):

2010-05-09  Kenneth Russell  <kbr@google.com>

        Reviewed by Dimitri Glazkov.

        Refactor WebGLArray types to share more code
        https://bugs.webkit.org/show_bug.cgi?id=37712

        Refactored WebGLArray types for maximal code sharing. Added
        WebGLTypedArrayBase and WebGLIntegralTypedArrayBase template
        superclasses. Changed overridden virtuals to have minimal
        visibility (private instead of public). Fixed const correctness of
        a few methods. There are no changes to the public APIs of the
        WebGLArray classes; the JavaScript bindings are unchanged.

        No new tests; existing tests cover this functionality. Ran all
        WebGL layout tests in Safari and Chromium on Mac OS X.

        * WebCore.gypi:
        * WebCore.xcodeproj/project.pbxproj:
        * html/canvas/WebGLArray.h:
        (WebCore::WebGLArray::buffer):
        (WebCore::WebGLArray::baseAddress):
        (WebCore::WebGLArray::byteOffset):
        * html/canvas/WebGLByteArray.cpp:
        (WebCore::WebGLByteArray::create):
        (WebCore::WebGLByteArray::WebGLByteArray):
        (WebCore::WebGLByteArray::slice):
        * html/canvas/WebGLByteArray.h:
        (WebCore::WebGLByteArray::isByteArray):
        * html/canvas/WebGLFloatArray.cpp:
        (WebCore::WebGLFloatArray::create):
        (WebCore::WebGLFloatArray::WebGLFloatArray):
        (WebCore::WebGLFloatArray::slice):
        * html/canvas/WebGLFloatArray.h:
        (WebCore::WebGLFloatArray::set):
        (WebCore::WebGLFloatArray::item):
        (WebCore::WebGLFloatArray::isFloatArray):
        * html/canvas/WebGLIntArray.cpp:
        (WebCore::WebGLIntArray::create):
        (WebCore::WebGLIntArray::WebGLIntArray):
        (WebCore::WebGLIntArray::slice):
        * html/canvas/WebGLIntArray.h:
        (WebCore::WebGLIntArray::isIntArray):
        * html/canvas/WebGLIntegralTypedArrayBase.h: Added.
        (WebCore::WebGLIntegralTypedArrayBase::set):
        (WebCore::WebGLIntegralTypedArrayBase::item):
        (WebCore::WebGLIntegralTypedArrayBase::WebGLIntegralTypedArrayBase):
        * html/canvas/WebGLShortArray.cpp:
        (WebCore::WebGLShortArray::create):
        (WebCore::WebGLShortArray::WebGLShortArray):
        (WebCore::WebGLShortArray::slice):
        * html/canvas/WebGLShortArray.h:
        (WebCore::WebGLShortArray::isShortArray):
        * html/canvas/WebGLTypedArrayBase.h: Added.
        (WebCore::WebGLTypedArrayBase::data):
        (WebCore::WebGLTypedArrayBase::set):
        (WebCore::WebGLTypedArrayBase::length):
        (WebCore::WebGLTypedArrayBase::WebGLTypedArrayBase):
        (WebCore::WebGLTypedArrayBase::create):
        (WebCore::WebGLTypedArrayBase::sliceImpl):
        (WebCore::WebGLTypedArrayBase::byteLength):
        * html/canvas/WebGLUnsignedByteArray.cpp:
        (WebCore::WebGLUnsignedByteArray::create):
        (WebCore::WebGLUnsignedByteArray::WebGLUnsignedByteArray):
        (WebCore::WebGLUnsignedByteArray::slice):
        * html/canvas/WebGLUnsignedByteArray.h:
        (WebCore::WebGLUnsignedByteArray::isUnsignedByteArray):
        * html/canvas/WebGLUnsignedIntArray.cpp:
        (WebCore::WebGLUnsignedIntArray::create):
        (WebCore::WebGLUnsignedIntArray::WebGLUnsignedIntArray):
        (WebCore::WebGLUnsignedIntArray::slice):
        * html/canvas/WebGLUnsignedIntArray.h:
        (WebCore::WebGLUnsignedIntArray::isUnsignedIntArray):
        * html/canvas/WebGLUnsignedShortArray.cpp:
        (WebCore::WebGLUnsignedShortArray::create):
        (WebCore::WebGLUnsignedShortArray::WebGLUnsignedShortArray):
        (WebCore::WebGLUnsignedShortArray::slice):
        * html/canvas/WebGLUnsignedShortArray.h:
        (WebCore::WebGLUnsignedShortArray::isUnsignedShortArray):

2010-05-10  Kenneth Russell  <kbr@google.com>

        Reviewed by Dimitri Glazkov.

        Refactor WebGLArray types to share more code
        https://bugs.webkit.org/show_bug.cgi?id=37712

        Refactored WebGLArray types for maximal code sharing. Added
        WebGLTypedArrayBase and WebGLIntegralTypedArrayBase template
        superclasses. Changed overridden virtuals to have minimal
        visibility (private instead of public). Fixed const correctness of
        a few methods. There are no changes to the public APIs of the
        WebGLArray classes; the JavaScript bindings are unchanged.

        No new tests; existing tests cover this functionality. Ran all
        WebGL layout tests in Safari and Chromium on Mac OS X.

        * WebCore.gypi:
        * WebCore.xcodeproj/project.pbxproj:
        * html/canvas/WebGLArray.h:
        (WebCore::WebGLArray::buffer):
        (WebCore::WebGLArray::baseAddress):
        (WebCore::WebGLArray::byteOffset):
        * html/canvas/WebGLByteArray.cpp:
        (WebCore::WebGLByteArray::create):
        (WebCore::WebGLByteArray::WebGLByteArray):
        (WebCore::WebGLByteArray::slice):
        * html/canvas/WebGLByteArray.h:
        (WebCore::WebGLByteArray::isByteArray):
        * html/canvas/WebGLFloatArray.cpp:
        (WebCore::WebGLFloatArray::create):
        (WebCore::WebGLFloatArray::WebGLFloatArray):
        (WebCore::WebGLFloatArray::slice):
        * html/canvas/WebGLFloatArray.h:
        (WebCore::WebGLFloatArray::set):
        (WebCore::WebGLFloatArray::item):
        (WebCore::WebGLFloatArray::isFloatArray):
        * html/canvas/WebGLIntArray.cpp:
        (WebCore::WebGLIntArray::create):
        (WebCore::WebGLIntArray::WebGLIntArray):
        (WebCore::WebGLIntArray::slice):
        * html/canvas/WebGLIntArray.h:
        (WebCore::WebGLIntArray::isIntArray):
        * html/canvas/WebGLIntegralTypedArrayBase.h: Added.
        (WebCore::WebGLIntegralTypedArrayBase::set):
        (WebCore::WebGLIntegralTypedArrayBase::item):
        (WebCore::WebGLIntegralTypedArrayBase::WebGLIntegralTypedArrayBase):
        * html/canvas/WebGLShortArray.cpp:
        (WebCore::WebGLShortArray::create):
        (WebCore::WebGLShortArray::WebGLShortArray):
        (WebCore::WebGLShortArray::slice):
        * html/canvas/WebGLShortArray.h:
        (WebCore::WebGLShortArray::isShortArray):
        * html/canvas/WebGLTypedArrayBase.h: Added.
        (WebCore::WebGLTypedArrayBase::data):
        (WebCore::WebGLTypedArrayBase::set):
        (WebCore::WebGLTypedArrayBase::length):
        (WebCore::WebGLTypedArrayBase::WebGLTypedArrayBase):
        (WebCore::WebGLTypedArrayBase::create):
        (WebCore::WebGLTypedArrayBase::sliceImpl):
        (WebCore::WebGLTypedArrayBase::byteLength):
        * html/canvas/WebGLUnsignedByteArray.cpp:
        (WebCore::WebGLUnsignedByteArray::create):
        (WebCore::WebGLUnsignedByteArray::WebGLUnsignedByteArray):
        (WebCore::WebGLUnsignedByteArray::slice):
        * html/canvas/WebGLUnsignedByteArray.h:
        (WebCore::WebGLUnsignedByteArray::isUnsignedByteArray):
        * html/canvas/WebGLUnsignedIntArray.cpp:
        (WebCore::WebGLUnsignedIntArray::create):
        (WebCore::WebGLUnsignedIntArray::WebGLUnsignedIntArray):
        (WebCore::WebGLUnsignedIntArray::slice):
        * html/canvas/WebGLUnsignedIntArray.h:
        (WebCore::WebGLUnsignedIntArray::isUnsignedIntArray):
        * html/canvas/WebGLUnsignedShortArray.cpp:
        (WebCore::WebGLUnsignedShortArray::create):
        (WebCore::WebGLUnsignedShortArray::WebGLUnsignedShortArray):
        (WebCore::WebGLUnsignedShortArray::slice):
        * html/canvas/WebGLUnsignedShortArray.h:
        (WebCore::WebGLUnsignedShortArray::isUnsignedShortArray):

2010-05-10  Brent Fulgham  <bfulgham@webkit.org>

        Build fix, not reviewed.

        Correct post-build copy command for WinCairo port to make sure
        cairo headers are available for WebKit.dll build.

        * WebCore.vcproj/WebCore.vcproj:

2010-05-10  Dirk Schulze  <krit@webkit.org>

        Reviewed by Nikolas Zimmermann.

        Further optimization for SVG's repaintRect calculation
        https://bugs.webkit.org/show_bug.cgi?id=38820
        
        This is a further optimization to get smaller repaintRects on SVG objects
        in combination with masker or clipper resources.
        Masker takes the unite of all stroke boundaries of it's childs.
        Both, clipper and masker, store this union to avoid multiple calls of the childs
        and the unite calculations now.
        The unite rect can be transformed to any targets objectBoundingBox, if the content
        unit of the resource is set to objectBoundingBoxMode.
        This speeds up the use of resources with multiple target objects.
        
        No behavior changes, the smaller repaintRects cause updates for DRT results.

        * rendering/RenderSVGResource.h:
        * rendering/RenderSVGResourceClipper.cpp:
        (WebCore::RenderSVGResourceClipper::invalidateClients):
        (WebCore::RenderSVGResourceClipper::calculateClipContentRepaintRect):
        (WebCore::RenderSVGResourceClipper::resourceBoundingBox):
        * rendering/RenderSVGResourceClipper.h:
        * rendering/RenderSVGResourceFilter.cpp:
        (WebCore::RenderSVGResourceFilter::resourceBoundingBox):
        * rendering/RenderSVGResourceFilter.h:
        * rendering/RenderSVGResourceGradient.h:
        (WebCore::RenderSVGResourceGradient::resourceBoundingBox):
        * rendering/RenderSVGResourceMarker.h:
        (WebCore::RenderSVGResourceMarker::resourceBoundingBox):
        * rendering/RenderSVGResourceMasker.cpp:
        (WebCore::RenderSVGResourceMasker::invalidateClients):
        (WebCore::RenderSVGResourceMasker::createMaskImage):
        (WebCore::RenderSVGResourceMasker::calculateMaskContentRepaintRect):
        (WebCore::RenderSVGResourceMasker::resourceBoundingBox):
        * rendering/RenderSVGResourceMasker.h:
        * rendering/RenderSVGResourcePattern.h:
        (WebCore::RenderSVGResourcePattern::resourceBoundingBox):
        * rendering/RenderSVGResourceSolidColor.h:
        (WebCore::RenderSVGResourceSolidColor::resourceBoundingBox):

2010-05-11  Ilya Tikhonovsky  <loislo@chromium.org>

        Reviewed by Pavel Feldman.

        WebInspector: Cosmetic changes.
        1) Inner Function Call event of Timer Fire should be merged into parent even if it is not the only child.
        2) Standard tooltips for resource links are clashing with Popover.
        3) Recalculate Style caller info are duplicating in Details Popover (Caller and Details rows).
        https://bugs.webkit.org/show_bug.cgi?id=38732

        * inspector/front-end/TimelinePanel.js:
        (WebInspector.TimelinePanel.prototype._innerAddRecordToTimeline):
        (WebInspector.TimelinePanel.FormattedRecord.prototype._generatePopupContent):
        (WebInspector.TimelinePanel.FormattedRecord.prototype._getRecordDetails):
        * inspector/front-end/inspector.js:
        (WebInspector.linkifyURLAsNode):

2010-05-10  Csaba Osztrogonác  <ossy@webkit.org>

        Rubber-stamped by Simon Hausmann.

        [Qt] Roll-out r59020 and r59021, because the Qt part of these changes
        haven't been landed in Qt trunk yet. Should be rolled-in again after the merge.

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

        * platform/network/qt/ResourceRequestQt.cpp:
        (WebCore::ResourceRequest::toNetworkRequest):

2010-05-10  Markus Goetz  <Markus.Goetz@nokia.com>

        Reviewed by Simon Hausmann.

        Qt after 4.6.3 has its integrated DNS cache. Therefore some
        code is not necessary anymore.

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

        * platform/network/qt/DnsPrefetchHelper.h:
        (WebCore::DnsPrefetchHelper::lookup):
        (WebCore::DnsPrefetchHelper::lookedUp):

2010-05-10  Chris Jerdonek  <cjerdonek@webkit.org>

        Reviewed by Darin Adler.

        Asserted that Node::setDocument() is not being used to change
        the document of a node.

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

        * dom/Node.cpp:
        (WebCore::Node::setDocument):
          Added an ASSERT at the beginning of the function.
        * dom/Node.h:
          Documented that Node::setDocument() should not be used to change the
          document of a node until after the node has been removed from its
          prior document.

2010-05-10  Dirk Schulze  <krit@webkit.org>

        Reviewed by Darin Adler.

        SVG FilterEffects need more detailed DRT information
        https://bugs.webkit.org/show_bug.cgi?id=38683

        All SVG Filter effects get dumped now. The structure of the DRT output
        changed. The last effect is shown first, followed by the previous effects.

        No changed behaior, so no new test added.

        * platform/graphics/filters/FEBlend.cpp:
        (WebCore::operator<<):
        (WebCore::FEBlend::externalRepresentation):
        * platform/graphics/filters/FEBlend.h:
        * platform/graphics/filters/FEColorMatrix.cpp:
        (WebCore::operator<<):
        (WebCore::FEColorMatrix::externalRepresentation):
        * platform/graphics/filters/FEColorMatrix.h:
        * platform/graphics/filters/FEComponentTransfer.cpp:
        (WebCore::operator<<):
        (WebCore::FEComponentTransfer::externalRepresentation):
        * platform/graphics/filters/FEComponentTransfer.h:
        * platform/graphics/filters/FEComposite.cpp:
        (WebCore::operator<<):
        (WebCore::FEComposite::externalRepresentation):
        * platform/graphics/filters/FEComposite.h:
        (WebCore::):
        (WebCore::FEComposite::uniteChildEffectSubregions):
        * platform/graphics/filters/FEGaussianBlur.cpp:
        (WebCore::FEGaussianBlur::externalRepresentation):
        * platform/graphics/filters/FEGaussianBlur.h:
        (WebCore::FEGaussianBlur::uniteChildEffectSubregions):
        * platform/graphics/filters/FilterEffect.cpp:
        (WebCore::FilterEffect::externalRepresentation):
        * platform/graphics/filters/FilterEffect.h:
        * platform/graphics/filters/SourceAlpha.cpp:
        (WebCore::SourceAlpha::externalRepresentation):
        * platform/graphics/filters/SourceAlpha.h:
        * platform/graphics/filters/SourceGraphic.cpp:
        (WebCore::SourceGraphic::externalRepresentation):
        * platform/graphics/filters/SourceGraphic.h:
        * rendering/RenderTreeAsText.cpp:
        (WebCore::writeIndent):
        * rendering/RenderTreeAsText.h:
        * rendering/SVGRenderTreeAsText.cpp:
        (WebCore::writeSVGResourceContainer):
        * svg/graphics/filters/SVGFEConvolveMatrix.cpp:
        (WebCore::operator<<):
        (WebCore::FEConvolveMatrix::externalRepresentation):
        * svg/graphics/filters/SVGFEConvolveMatrix.h:
        * svg/graphics/filters/SVGFEDiffuseLighting.cpp:
        (WebCore::FEDiffuseLighting::externalRepresentation):
        * svg/graphics/filters/SVGFEDiffuseLighting.h:
        * svg/graphics/filters/SVGFEDisplacementMap.cpp:
        (WebCore::operator<<):
        (WebCore::FEDisplacementMap::externalRepresentation):
        * svg/graphics/filters/SVGFEDisplacementMap.h:
        * svg/graphics/filters/SVGFEFlood.cpp:
        (WebCore::FEFlood::externalRepresentation):
        * svg/graphics/filters/SVGFEFlood.h:
        * svg/graphics/filters/SVGFEImage.cpp:
        (WebCore::FEImage::externalRepresentation):
        * svg/graphics/filters/SVGFEImage.h:
        * svg/graphics/filters/SVGFEMerge.cpp:
        (WebCore::FEMerge::externalRepresentation):
        * svg/graphics/filters/SVGFEMerge.h:
        * svg/graphics/filters/SVGFEMorphology.cpp:
        (WebCore::operator<<):
        (WebCore::FEMorphology::externalRepresentation):
        * svg/graphics/filters/SVGFEMorphology.h:
        * svg/graphics/filters/SVGFEOffset.cpp:
        (WebCore::FEOffset::externalRepresentation):
        * svg/graphics/filters/SVGFEOffset.h:
        * svg/graphics/filters/SVGFESpecularLighting.cpp:
        (WebCore::FESpecularLighting::externalRepresentation):
        * svg/graphics/filters/SVGFESpecularLighting.h:
        * svg/graphics/filters/SVGFETile.cpp:
        (WebCore::FETile::externalRepresentation):
        * svg/graphics/filters/SVGFETile.h:
        * svg/graphics/filters/SVGFETurbulence.cpp:
        (WebCore::operator<<):
        (WebCore::FETurbulence::externalRepresentation):
        * svg/graphics/filters/SVGFETurbulence.h:

2010-05-10  Jeremy Orlow  <jorlow@chromium.org>

        Reviewed by Nate Chapin.

        Change IndexedDB to use events instead of callbacks
        https://bugs.webkit.org/show_bug.cgi?id=38594

        Switch IndexedDB over to an event based model to match what
        Mozilla (and probably MS?) are doing.  This also gets rid of
        a lot of template mess at the expense of a little extra boiler
        plate code (for each type that IDBResult.result could be).

        This change also introduces JSC bindings that match the level of
        functionality the V8 bindings have.

        Still not testable, but that shoudl change shortly.

        * DerivedSources.cpp:
        * DerivedSources.make:
        * GNUmakefile.am:
        * WebCore.gypi:
        * WebCore.pri:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSEventCustom.cpp:
        * bindings/js/JSIDBRequestCustom.cpp: Added.
        (WebCore::JSIDBRequest::result):
        * bindings/v8/V8DOMWrapper.cpp:
        (WebCore::V8DOMWrapper::convertEventTargetToV8Object):
        * bindings/v8/custom/V8CustomIDBCallbacks.h: Removed.
        * bindings/v8/custom/V8IDBRequestCustom.cpp: Added.
        (WebCore::V8IDBRequest::resultAccessorGetter):
        * bindings/v8/custom/V8IndexedDatabaseRequestCustom.cpp: Removed.
        * dom/EventTarget.cpp:
        (WebCore::EventTarget::toIDBRequest):
        * dom/EventTarget.h:
        * storage/IDBCallbacks.h:
        * storage/IDBDatabaseRequest.h:
        (WebCore::IDBDatabaseRequest::createObjectStore):
        * storage/IDBRequest.cpp: Added.
        (WebCore::IDBRequest::IDBRequest):
        (WebCore::IDBRequest::~IDBRequest):
        (WebCore::IDBRequest::idbDatabaseResult):
        (WebCore::IDBRequest::serializedScriptValueResult):
        (WebCore::IDBRequest::onError):
        (WebCore::IDBRequest::onSuccess):
        (WebCore::IDBRequest::abort):
        (WebCore::IDBRequest::scriptExecutionContext):
        (WebCore::IDBRequest::stop):
        (WebCore::IDBRequest::suspend):
        (WebCore::IDBRequest::resume):
        (WebCore::IDBRequest::eventTargetData):
        (WebCore::IDBRequest::ensureEventTargetData):
        (WebCore::IDBRequest::timerFired):
        (WebCore::IDBRequest::onEventCommon):
        * storage/IDBRequest.h: Added.
        (WebCore::IDBRequest::create):
        (WebCore::IDBRequest::):
        (WebCore::IDBRequest::resultType):
        (WebCore::IDBRequest::readyState):
        (WebCore::IDBRequest::error):
        (WebCore::IDBRequest::toIDBRequest):
        (WebCore::IDBRequest::refEventTarget):
        (WebCore::IDBRequest::derefEventTarget):
        * storage/IDBRequest.idl: Added.
        * storage/IndexedDatabase.h:
        * storage/IndexedDatabaseImpl.cpp:
        (WebCore::IndexedDatabaseImpl::open):
        * storage/IndexedDatabaseImpl.h:
        * storage/IndexedDatabaseRequest.cpp:
        (WebCore::IndexedDatabaseRequest::open):
        * storage/IndexedDatabaseRequest.h:
        * storage/IndexedDatabaseRequest.idl:

2010-05-10  Ilya Tikhonovsky  <loislo@chromium.org>

        Not reviewed: rollback the commit r59062

        * inspector/front-end/TimelinePanel.js:
        (WebInspector.TimelinePanel.prototype._innerAddRecordToTimeline):
        (WebInspector.TimelinePanel.FormattedRecord.prototype._generatePopupContent):
        (WebInspector.TimelinePanel.FormattedRecord.prototype._getRecordDetails):
        * inspector/front-end/inspector.js:
        (WebInspector.linkifyURLAsNode):

2010-05-10  Ilya Tikhonovsky  <loislo@chromium.org>

        Reviewed by Pavel Feldman.

        WebInspector: Cosmetic changes.
        1) Inner Function Call event of Timer Fire should be merged into parent even if it is not the only child.
        2) Standard tooltips for resource links are clashing with Popover.
        3) Recalculate Style caller info are duplicating in Details Popover (Caller and Details rows).
        https://bugs.webkit.org/show_bug.cgi?id=38732

        * inspector/front-end/TimelinePanel.js:
        (WebInspector.TimelinePanel.prototype._innerAddRecordToTimeline):
        (WebInspector.TimelinePanel.FormattedRecord.prototype._generatePopupContent):
        (WebInspector.TimelinePanel.FormattedRecord.prototype._getRecordDetails):
        * inspector/front-end/inspector.js:
        (WebInspector.linkifyURLAsNode):

2010-05-08  Ilya Tikhonovsky  <loislo@chromium.org>

        Reviewed by Pavel Feldman.

        WebInspector: If some record is not in visible area then it's expand element also is not
        visible even if it has children in visible area.
        https://bugs.webkit.org/show_bug.cgi?id=38643

        * inspector/front-end/TimelinePanel.js:
        (WebInspector.TimelinePanel):
        (WebInspector.TimelinePanel.prototype._refreshRecords):

2010-05-07  Sam Weinig  <sam@webkit.org>

        Reviewed by Darin Adler.

        Fix for https://bugs.webkit.org/show_bug.cgi?id=38557
        r58526 introduced a ~30% regression on Dromaeo JS lib

        This fix does two things.
        - Don't use QualifiedName as the key to a HashMap, use a
          RefPtr<QualifiedNameImpl> instead.  We should remove the HashTraits for
          QualifiedName and that will happen in a follow up patch.
        - Only mark cached NodeLists on Documents instead of all Nodes. This is
          okay since the marking of NodeLists is an optimization to keep NodeList
          wrappers alive and is not mandated by any spec.

        * bindings/js/JSDocumentCustom.cpp:
        (WebCore::JSDocument::markChildren):
        * bindings/js/JSNodeCustom.cpp:
        (WebCore::JSNode::markChildren):
        * dom/Node.cpp:
        (WebCore::Node::removeCachedTagNodeList):
        (WebCore::Node::getElementsByTagNameNS):
        * dom/NodeRareData.h:

2010-05-08  Antonio Gomes  <tonikitoo@webkit.org>

        Unreviewed attempt to fix Windows build.

        * page/SpatialNavigation.h:
        (WebCore::fudgeFactor):

2010-05-03  Antonio Gomes  <tonikitoo@webkit.org>

        Reviewed by Kenneth Christiansen.

        Spatial Navigation: create a getter for the "fudgeFactor"
        https://bugs.webkit.org/show_bug.cgi?id=38488

        A couple of places in the Spatial Navigation code make use of a "fudge factor"
        to improve precision by working around outline focus metrics and such. Patch adds
        a helper method for unify getter operations of this value, instead of having it
        declared locally in the various methods it is used.

        No behaviour change.

        * page/SpatialNavigation.cpp:
        (WebCore::scrollIntoView):
        (WebCore::deflateIfOverlapped):
        * page/SpatialNavigation.h:
        (WebCore::fudgeFactor):

2010-05-08  Stuart Morgan  <stuartmorgan@chromium.org>

        Reviewed by Darin Adler.

        Change the npapi.h header guards to match the npapi-headers repository
        copy.

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

        * bridge/npapi.h:

2010-05-08  Stuart Morgan  <stuartmorgan@chromium.org>

        Reviewed by Darin Fisher.

        Resolve most of the whitespace/comment/order differences in npapi.h
        and npruntime.h relative to the npapi-headers repository versions.
        No changes to the substance of the code.

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

        * bridge/npapi.h:
        (_NPPrint::):
        (_NPCocoaEvent::):
        * bridge/npruntime.h:

2010-05-08  Laszlo Gombos  <laszlo.1.gombos@nokia.com>

        Reviewed by Darin Adler.

        Fix guard around IndexedDatabase
        https://bugs.webkit.org/show_bug.cgi?id=38710

        No new tests, there is no new functionality.

        * page/PageGroup.h:

2010-05-08  Luiz Agostini  <luiz.agostini@openbossa.org>

        Reviewed by Simon Hausmann.

        [Qt] Platform plugin
        https://bugs.webkit.org/show_bug.cgi?id=38438

        Select popups delegate private API. To provide select popup delegates
        a plugin that implements QWebKitPlatformPlugin must be found
        in QCoreApplication::libraryPaths.

        * WebCore.pro:

2010-05-08  Leandro Pereira  <leandro@profusion.mobi>

        Reviewed by Gustavo Noronha Silva.

        [EFL] It does not make sense to use RenderThemeEfl::RenderThemeEfl, so
        use RenderThemeEfl (GCC 4.5 seems to be pickier about this).
        http://webkit.org/b/38770

        * platform/efl/RenderThemeEfl.cpp:
        (WebCore::renderThemeEflColorClassSelectionActive):
        (WebCore::renderThemeEflColorClassSelectionInactive):
        (WebCore::renderThemeEflColorClassFocusRing):
        (WebCore::renderThemeEflColorClassButtonText):
        (WebCore::renderThemeEflColorClassComboText):
        (WebCore::renderThemeEflColorClassEntryText):
        (WebCore::renderThemeEflColorClassSearchText):
        (WebCore::RenderThemeEfl::adjustCheckboxStyle):
        (WebCore::RenderThemeEfl::adjustRadioStyle):
        (WebCore::RenderThemeEfl::adjustButtonStyle):
        (WebCore::RenderThemeEfl::adjustMenuListStyle):
        (WebCore::RenderThemeEfl::adjustTextFieldStyle):
        (WebCore::RenderThemeEfl::adjustSearchFieldDecorationStyle):
        (WebCore::RenderThemeEfl::adjustSearchFieldResultsButtonStyle):
        (WebCore::RenderThemeEfl::adjustSearchFieldResultsDecorationStyle):
        (WebCore::RenderThemeEfl::adjustSearchFieldCancelButtonStyle):
        (WebCore::RenderThemeEfl::adjustSearchFieldStyle):

2010-05-08  Leandro Pereira  <leandro@profusion.mobi>

        Reviewed by Gustavo Noronha Silva.

        ResourceHandleSoup should depend only on GLib, not on GTK+.
        http://webkit.org/b/38763

        * platform/network/soup/ResourceHandleSoup.cpp: Include glib.h
        instead of gtk/gtk.h.

2010-05-08  Eric Seidel  <eric@webkit.org>

        Unreviewed, rolling out r59023.
        http://trac.webkit.org/changeset/59023
        https://bugs.webkit.org/show_bug.cgi?id=37874

        Caused Chromium Windows build to fail to link.

        * WebCore.gypi:
        * loader/CachedMetadata.h: Removed.
        * loader/CachedResource.cpp:
        * loader/CachedResource.h:
        * loader/ResourceLoader.h:
        * loader/SubresourceLoader.cpp:
        * loader/SubresourceLoader.h:
        * loader/SubresourceLoaderClient.h:
        * loader/loader.cpp:
        * loader/loader.h:
        * platform/network/ResourceHandle.cpp:
        * platform/network/ResourceHandle.h:
        * platform/network/ResourceHandleClient.h:

2010-05-08  Ilya Tikhonovsky  <loislo@chromium.org>

        Reviewed by Timothy Hatcher.

        WebInspector: Autocompletion in console is not usable because it is not add to the entered text the common prefix of suggestions.
        As example if you entered $0.getE then getElementByClassName will be suggested as gray text.
        If you press tab then getElementByClassName be suggested again and lementByClassName becomes selected as black text with selection background.
        Really after pressing the TAB the next suggestion should be selected (getElementByTagName) and only flexible part of suggestions should be selected.
        In this case it should be TagName because getElementBy is the common part for all getE prefix suggestions.
        https://bugs.webkit.org/show_bug.cgi?id=38753

        * inspector/front-end/TextPrompt.js:
        (WebInspector.TextPrompt.prototype._completionsReady):

2010-05-08  Tony Gentilcore  <tonyg@chromium.org>

        Reviewed by Darin Fisher.

        Provide mechanism to store cached metadata on a CachedResource.
        https://bugs.webkit.org/show_bug.cgi?id=37874

        No new tests because no new functionality.

        * WebCore.gypi:
        * loader/CachedMetadata.h: Added.
        (WebCore::CachedMetadata::~CachedMetadata):
        (WebCore::CachedMetadata::data):
        (WebCore::CachedMetadata::size):
        (WebCore::CachedMetadata::create):
        (WebCore::CachedMetadata::deserialize):
        (WebCore::CachedMetadata::serialize):
        (WebCore::CachedMetadata::dataTypeID):
        (WebCore::CachedMetadata::readUnsigned):
        (WebCore::CachedMetadata::appendUnsigned):
        (WebCore::CachedMetadata::CachedMetadata):
        * loader/CachedResource.cpp:
        (WebCore::CachedResource::setSerializedCachedMetadata):
        (WebCore::CachedResource::setCachedMetadata):
        (WebCore::CachedResource::cachedMetadata):
        * loader/CachedResource.h:
        * loader/ResourceLoader.h:
        (WebCore::ResourceLoader::didReceiveCachedMetadata):
        * loader/SubresourceLoader.cpp:
        (WebCore::SubresourceLoader::didReceiveCachedMetadata):
        * loader/SubresourceLoader.h:
        * loader/SubresourceLoaderClient.h:
        (WebCore::SubresourceLoaderClient::didReceiveCachedMetadata):
        * loader/loader.cpp:
        (WebCore::Loader::Host::didReceiveCachedMetadata):
        * loader/loader.h:
        * platform/network/ResourceHandle.cpp:
        (WebCore::ResourceHandle::cacheMetadata):
        * platform/network/ResourceHandle.h:
        * platform/network/ResourceHandleClient.h:
        (WebCore::ResourceHandleClient::didReceiveCachedMetadata):

2010-05-08  Michael Nordman  <michaeln@google.com>

        Reviewed by Dmitry Titov.

        Have WorkerScriptLoader provide access to the ResourceResponse for the loaded script
        through the WorkerScriptLoaderClient interface.
        https://bugs.webkit.org/show_bug.cgi?id=38605

        No new tests. There are no script visible changes.

        * workers/WorkerScriptLoader.cpp: Call the client with the response.
        (WebCore::WorkerScriptLoader::didReceiveResponse):
        * workers/WorkerScriptLoaderClient.h: Define a new method to receive the response.
        (WebCore::WorkerScriptLoaderClient::didReceiveResponse):

2010-05-08  Robert Hogan  <robert@roberthogan.net>

        Reviewed by Simon Hausmann.

        [Qt] Fix http/tests/xmlhttprequest/cross-origin-no-authorization.html
             and http/tests/xmlhttprequest/cross-origin-authorization.html

        QHttpNetworkRequest adds Authorization and Cookie headers to XHRs
        without knowing if this is valid behaviour or not. In order to allow
        Qt to decide whether Cookie/Authorization headers should be added
        to an XHR QtWebKit needs to use an attribute added to QNetworkRequest.
        These new attributes are: QNetworkRequest::CookieLoadControlAttribute,
        QNetworkRequest::CookieSaveControlAttribute,and
        QNetworkRequest::AuthenticationReuseControlAttribute.

        QtWebKit will set QNetworkRequest::AuthenticationReuseControlAttribute to false
        unless withCredentials is set to true in the XHR.

        QtWebkit will set CookieLoad/SaveControlAttribute to false unless withCredentials
        is set to true in the XHR.

        Qt will pass the values onto QHttpNetworkRequest and this will permit
        the Qt network access processing to decide whether or not to add either
        or both of the Cookie/Authorisation headers, and whether to save cookies
        returned from such requests. By default the attribute
        will always be true so unless QtWebKit sets it to false normal
        header processing is unaffected.

        The Qt part of these changes was merged at: http://gitorious.org/qt/qt/merge_requests/592

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

        * platform/network/qt/ResourceRequestQt.cpp:
        (WebCore::ResourceRequest::toNetworkRequest):

2010-05-08  Ilya Tikhonovsky  <loislo@chromium.org>

        Reviewed by Pavel Feldman.

        WebInsector: Record expand UI element should be extracted from TimelineRecordGraphRow as separate class for future reuse.
        https://bugs.webkit.org/show_bug.cgi?id=38726

        * inspector/front-end/TimelinePanel.js:
        (WebInspector.TimelinePanel):
        (WebInspector.TimelinePanel.prototype._refreshRecords):
        (WebInspector.TimelineRecordGraphRow):
        (WebInspector.TimelineRecordGraphRow.prototype.update):
        (WebInspector.TimelineExpandableElement):
        (WebInspector.TimelineExpandableElement.prototype._update):
        (WebInspector.TimelineExpandableElement.prototype._dispose):

2010-05-05  Robert Hogan  <robert@webkit.org>

        Reviewed by Alexey Proskuryakov.

        [Qt] Fix encoding of status message in Plugin API

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

        Spotted by Alexey Proskuryakov.

        * plugins/PluginView.cpp:
        (WebCore::PluginView::status):

2010-05-08  Dirk Schulze  <krit@webkit.org>

        Unreviewed win build fix.

        JS bindings were missing in DerivedSources.cpp

        * DerivedSources.cpp:

2010-05-08  Dirk Schulze  <krit@webkit.org>

        Uneviewed fix of Win bot

        Added JS bindings to Win build system.

        * WebCore.vcproj/WebCore.vcproj:

2010-05-08  Dirk Schulze  <krit@webkit.org>

        Unreviewed try to fix Win bot.

        SVGFont's VKern implementation missing
        https://bugs.webkit.org/show_bug.cgi?id=38663

        * bindings/scripts/CodeGeneratorJS.pm:

2010-05-08  Dirk Schulze  <krit@webkit.org>

        Reviewed by Nikolas Zimmermann.

        SVGFont's VKern implementation missing
        https://bugs.webkit.org/show_bug.cgi?id=38663

        Implementation of vkern, needed by SVGFont. Also added DOM and JS bindings
        for vkern and hkern. Made some clean-up in SVGParserUtilities and SVGFontElement.
        SVGHKernElement and SVGVKernElement share most of the code now.

        Test: svg/text/text-vkern.svg

        * Android.derived.jscbindings.mk:
        * Android.derived.v8bindings.mk:
        * Android.mk:
        * DerivedSources.make:
        * GNUmakefile.am:
        * WebCore.gyp/WebCore.gyp:
        * WebCore.gypi:
        * WebCore.pri:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * page/DOMWindow.idl:
        * rendering/SVGRootInlineBox.cpp:
        (WebCore::applySVGKerning):
        (WebCore::SVGRootInlineBox::buildLayoutInformationForTextBox):
        * svg/SVGAllInOne.cpp:
        * svg/SVGFontElement.cpp:
        (WebCore::SVGFontElement::invalidateGlyphCache):
        (WebCore::SVGFontElement::ensureGlyphCache):
        (WebCore::matches):
        (WebCore::kerningForPairOfStringsAndGlyphs):
        (WebCore::SVGFontElement::horizontalKerningForPairOfStringsAndGlyphs):
        (WebCore::SVGFontElement::verticalKerningForPairOfStringsAndGlyphs):
        * svg/SVGFontElement.h:
        (WebCore::SVGKerningPair::SVGKerningPair):
        (WebCore::SVGFontElement::rendererIsNeeded):
        * svg/SVGHKernElement.cpp:
        (WebCore::SVGHKernElement::buildHorizontalKerningPair):
        * svg/SVGHKernElement.h:
        * svg/SVGParserUtilities.cpp:
        (WebCore::parseGlyphName):
        (WebCore::parseKerningUnicodeString):
        * svg/SVGParserUtilities.h:
        * svg/SVGVKernElement.cpp: Added.
        (WebCore::SVGVKernElement::SVGVKernElement):
        (WebCore::SVGVKernElement::~SVGVKernElement):
        (WebCore::SVGVKernElement::insertedIntoDocument):
        (WebCore::SVGVKernElement::removedFromDocument):
        (WebCore::SVGVKernElement::buildVerticalKerningPair):
        * svg/SVGVKernElement.h: Added.
        (WebCore::SVGVKernElement::rendererIsNeeded):
        * svg/SVGVKernElement.idl: Added.
        * svg/svgtags.in:

2010-05-08  Jer Noble  <jer.noble@apple.com>

        Unreviewed, just fixing windows build.

        * platform/graphics/win/MediaPlayerPrivateQuickTimeVisualContext.h: Add #if USE(ACCELERATED_COMPOSITING) guards around GraphicsLayer areas of the code.  Include GraphicsLayer.h directly.
        * platform/graphics/win/MediaPlayerPrivateQuickTimeVisualContext.cpp: As above.
        * platform/graphics/win/QTMovieVisualContext.cpp: Remove the #include of d3d9types.h.

2010-05-08  Eric Seidel  <eric@webkit.org>

        Unreviewed, just reverting commit.

        REGRESSION(59000): r59000 contained all sorts of changes it should not have, needs revert.
        https://bugs.webkit.org/show_bug.cgi?id=38798

        Test: fast/js/global-resolve-through-eval.html

        * bindings/js/JSCallbackData.h:
        (WebCore::JSCallbackData::JSCallbackData):
        (WebCore::JSCallbackData::~JSCallbackData):
        (WebCore::DeleteCallbackDataTask::create):
        (WebCore::DeleteCallbackDataTask::performTask):
        (WebCore::DeleteCallbackDataTask::isCleanupTask):
        (WebCore::DeleteCallbackDataTask::DeleteCallbackDataTask):
        * bindings/js/JSCustomVoidCallback.cpp:
        (WebCore::JSCustomVoidCallback::JSCustomVoidCallback):
        (WebCore::JSCustomVoidCallback::~JSCustomVoidCallback):
        * bindings/js/JSCustomVoidCallback.h:
        * bindings/scripts/CodeGeneratorJS.pm:
        * bindings/scripts/test/JS/JSTestInterface.cpp:
        (WebCore::):
        * bindings/scripts/test/JS/JSTestObj.cpp:
        (WebCore::):
        * workers/WorkerThread.cpp:
        (WebCore::WorkerThreadShutdownFinishTask::performTask):
        (WebCore::WorkerThreadShutdownStartTask::performTask):

2010-05-07  Zoltan Herczeg  <zherczeg@webkit.org>

        Reviewed by Dirk Schulze

        Fixed the inverse function of f(x) = ((x + 0.055) / 1.055) ^ 2.4
        https://bugs.webkit.org/show_bug.cgi?id=38735

        It is ((x ^ (1 / 2.4)) * 1.055) - 0.055

        Chromium pixel tests cover the issue.

        * platform/graphics/ImageBuffer.cpp:
        (WebCore::ImageBuffer::transformColorSpace):

2010-05-04  Jer Noble  <jer.noble@apple.com>

        Reviewed by Eric Carlson

        Safari pegs CPU and drops tons of frames using HTML5 Vimeo player
        <https://bugs.webkit.org/show_bug.cgi?id=34005>
        <rdar://problem/7569713>

        The original functionality of QTMovieWin has been split between QTMovieGWorld, 
        and a new class: QTMovie.  QTMovie contains all the "controller" parts (changing
        the rate, seeking, etc) while QTMovieGWorld retains all the drawing code.  QTMovieGWorld
        now takes a QTMovie, and as such QTMovie is now retainable.  QTMovieGWorld registers
        itself as a client of QTMovie, so that it can receive load-state notifications,
        and thus QTMovie must now support multiple clients.  Movie tasking timer support
        has been moved into its own class (QTMovieTask) and will be addressed in a future 
        patch.  Most of the functions listed below only changed so much as their class name changed.
        
        * platform/graphics/win/QTMovie.cpp: Copied from WebCore/platform/graphics/win/QTMovieWin.cpp.
        (QTMoviePrivate::QTMoviePrivate):
        (QTMoviePrivate::~QTMoviePrivate):
        (QTMoviePrivate::startTask):
        (QTMoviePrivate::endTask):
        (QTMoviePrivate::task):
        (QTMoviePrivate::createMovieController):
        (QTMovie::QTMovie):
        (QTMovie::~QTMovie):
        (QTMovie::addClient):
        (QTMovie::removeClient):
        (QTMovie::play):
        (QTMovie::pause):
        (QTMovie::rate):
        (QTMovie::setRate):
        (QTMovie::duration):
        (QTMovie::currentTime):
        (QTMovie::setCurrentTime):
        (QTMovie::setVolume):
        (QTMovie::setPreservesPitch):
        (QTMovie::dataSize):
        (QTMovie::maxTimeLoaded):
        (QTMovie::loadState):
        (QTMovie::getNaturalSize):
        (QTMovie::load):
        (QTMovie::disableUnsupportedTracks):
        (QTMovie::isDisabled):
        (QTMovie::setDisabled):
        (QTMovie::hasVideo):
        (QTMovie::hasAudio):
        (QTMovie::hasClosedCaptions):
        (QTMovie::setClosedCaptionsVisible):
        (QTMovie::countSupportedTypes):
        (QTMovie::getSupportedType):
        (QTMovie::initializeQuickTime):
        (QTMovie::getMovieHandle):
        * platform/graphics/win/QTMovie.h: Copied from WebCore/platform/graphics/win/QTMovieWin.h.
        * platform/graphics/win/QTMovieGWorld.cpp: Copied from WebCore/platform/graphics/win/QTMovieWin.cpp.
        (QTMovieGWorldPrivate::QTMovieGWorldPrivate):
        (QTMovieGWorldPrivate::~QTMovieGWorldPrivate):
        (QTMovieGWorldPrivate::cacheMovieScale):
        (movieDrawingCompleteProc):
        (QTMovieGWorldPrivate::registerDrawingCallback):
        (QTMovieGWorldPrivate::unregisterDrawingCallback):
        (QTMovieGWorldPrivate::drawingComplete):
        (QTMovieGWorldPrivate::updateGWorld):
        (QTMovieGWorldPrivate::createGWorld):
        (QTMovieGWorldPrivate::clearGWorld):
        (QTMovieGWorldPrivate::setSize):
        (QTMovieGWorldPrivate::updateMovieSize):
        (QTMovieGWorldPrivate::deleteGWorld):
        (QTMovieGWorldPrivate::movieEnded):
        (QTMovieGWorldPrivate::movieLoadStateChanged):
        (QTMovieGWorldPrivate::movieTimeChanged):
        (QTMovieGWorld::QTMovieGWorld):
        (QTMovieGWorld::~QTMovieGWorld):
        (QTMovieGWorld::setSize):
        (QTMovieGWorld::setVisible):
        (QTMovieGWorld::getCurrentFrameInfo):
        (QTMovieGWorld::paint):
        (QTMovieGWorld::setDisabled):
        (QTMovieGWorld::isDisabled):
        (QTMovieGWorld::fullscreenWndProc):
        (QTMovieGWorld::enterFullscreen):
        (QTMovieGWorld::exitFullscreen):
        (QTMovieGWorld::setMovie):
        (QTMovieGWorld::movie):
        * platform/graphics/win/QTMovieGWorld.h: Copied from WebCore/platform/graphics/win/QTMovieWin.h.
        * platform/graphics/win/QTMovieTask.cpp: Added.
        (QTMovieTask::QTMovieTask):
        (QTMovieTask::~QTMovieTask):
        (QTMovieTask::sharedTask):
        (QTMovieTask::updateTaskTimer):
        (QTMovieTask::fireTaskClients):
        (QTMovieTask::addTaskClient):
        (QTMovieTask::removeTaskClient):
        (QTMovieTask::setTaskTimerFuncs):
        * platform/graphics/win/QTMovieTask.h: Added.

2010-05-04  Jer Noble  <jer.noble@apple.com>

        Reviewed by Eric Carlson

        Safari pegs CPU and drops tons of frames using HTML5 Vimeo player
        <https://bugs.webkit.org/show_bug.cgi?id=34005>
        <rdar://problem/7569713>

        MediaPlayerPrivateQuickTimeVisualContext has been added as a 
        supported MediaPlayer implementation.  MediaPlayerPrivateQuickTimeWin
        has been left as a fallback MediaPlayer implementation for those media
        types which do not support visual contexts (currently, none).

        * platform/graphics/MediaPlayer.cpp:
        (WebCore::installedMediaEngines):

2010-05-04  Jer Noble  <jer.noble@apple.com>

        Reviewed by Maciej Stachowiak

        Safari pegs CPU and drops tons of frames using HTML5 Vimeo player
        <https://bugs.webkit.org/show_bug.cgi?id=34005>
        <rdar://problem/7569713>

        MediaPlayerPrivateTaskTimer has been broken out from MediaPlayerPrivateQuickTimeWin::TaskTimer
        so that multiple clients can share its implementation.  It works with the new 
        QTMovieTaskTimer to provide timer support to QTMovieTaskTimer clients.
        
        * platform/graphics/win/MediaPlayerPrivateTaskTimer.cpp: Added.
        (WebCore::MediaPlayerPrivateTaskTimer::initialize):
        (WebCore::MediaPlayerPrivateTaskTimer::setDelay):
        (WebCore::MediaPlayerPrivateTaskTimer::stopTaskTimer):
        (WebCore::MediaPlayerPrivateTaskTimer::fired):
        * platform/graphics/win/MediaPlayerPrivateTaskTimer.h: Added.

2010-05-04  Jer Noble  <jer.noble@apple.com>

        Reviewed by Eric Carlson

        Safari pegs CPU and drops tons of frames using HTML5 Vimeo player
        <https://bugs.webkit.org/show_bug.cgi?id=34005>
        <rdar://problem/7569713>

        MediaPlayerPrivateQuickTimeVisualContext is a new MediaPlayerPrivate implementation
        which uses QTMovieVisualContext instead of QTMovieWin to render video frames. Much
        like MediaPlayerPrivateQuickTimeWin, MPPQTVisualContext breaks out QTMovie and 
        QTMovieVisualContext, and uses the newly shared MediaPlayerPrivateTaskTimer.  It also
        uses aggregation (in the form of friend classes) instead of multiple inheritence 
        to implement its various client callbacks, so as not to expose its own clients to
        the QTMovie classes.

        * platform/graphics/win/MediaPlayerPrivateQuickTimeVisualContext.cpp: Copied from WebCore/platform/graphics/win/MediaPlayerPrivateQuickTimeWin.cpp.
        * platform/graphics/win/MediaPlayerPrivateQuickTimeVisualContext.h: Copied from WebCore/platform/graphics/win/MediaPlayerPrivateQuickTimeWin.h.

2010-05-04  Jer Noble  <jer.noble@apple.com>

        Reviewed by Maciej Stachowiak

        Safari pegs CPU and drops tons of frames using HTML5 Vimeo player
        <https://bugs.webkit.org/show_bug.cgi?id=34005>
        <rdar://problem/7569713>
        
        MediaPlayerPrivateQuickTimeWin has been modified to support the new bifurcated 
        QTMovie/QTMovieWin classes.  It's private TaskTimer class has been broken out
        into a new top-level class (MediaPlayerPrivateTaskTimer) which will be addressed
        in a future patch. 

        * platform/graphics/win/MediaPlayerPrivateQuickTimeWin.cpp:
        (WebCore::MediaPlayerPrivate::~MediaPlayerPrivate):
        (WebCore::MediaPlayerPrivate::load):
        (WebCore::MediaPlayerPrivate::paused):
        (WebCore::MediaPlayerPrivate::setSize):
        (WebCore::MediaPlayerPrivate::setVisible):
        (WebCore::MediaPlayerPrivate::paint):
        (WebCore::mimeTypeCache):
        (WebCore::MediaPlayerPrivate::isAvailable):
        (WebCore::MediaPlayerPrivate::movieEnded):
        (WebCore::MediaPlayerPrivate::movieLoadStateChanged):
        (WebCore::MediaPlayerPrivate::movieTimeChanged):
        (WebCore::MediaPlayerPrivate::movieNewImageAvailable):
        (WebCore::MediaPlayerPrivate::paintContents):
        * platform/graphics/win/MediaPlayerPrivateQuickTimeWin.h:

2010-05-04  Jer Noble  <jer.noble@apple.com>

        Reviewed by Anders Carlsson

        Safari pegs CPU and drops tons of frames using HTML5 Vimeo player
        <https://bugs.webkit.org/show_bug.cgi?id=34005>
        <rdar://problem/7569713>

        QTCFDictionary defines functions which help serialize and unserialize
        CFDictionaries.  This is necessary because QuickTime links against a 
        non-debug CoreFoundation in our debug build, and passing non-debug 
        CFDictionaries to a debug CF will cause a crash.
        
        QTMovieTask is a new class containing the tasking functionality broken
        out from QTMovieWin.  This is necessary now that the tasking
        functionality is needed in multiple files/classes.
        
        QTPixelBuffer is a C++ wrapper for CVPixelBuffers, necessary because
        like the CF case above, QuickTime has its own implementation of CoreVideo
        and its CV types cannot be used with the AAS version of CoreVideo.
        
        QTMovieVisualContext is the new drawing implementation, parallel to 
        QTMovieWin.  It currently uses a software rendering path, but can be
        extended in the future to support hardware rendering.
        
        * platform/graphics/win/QTCFDictionary.cpp: Added.
        * platform/graphics/win/QTCFDictionary.h: Added.
        * platform/graphics/win/QTMovieTask.cpp: Added.
        * platform/graphics/win/QTMovieTask.h: Added.
        * platform/graphics/win/QTMovieVisualContext.cpp: Added.
        * platform/graphics/win/QTMovieVisualContext.h: Added.
        * platform/graphics/win/QTPixelBuffer.cpp: Added.
        * platform/graphics/win/QTPixelBuffer.h: Added.

2010-05-07  Eric Uhrhane  <ericu@chromium.org>

        Reviewed by Dmitry Titov.

        JSCallbackData is deleted on the Main thread, not the Context thread.
        https://bugs.webkit.org/show_bug.cgi?id=38623

        No new tests; you'll only see a problem after the worker-access-to-DB
        code goes in.  Without this fix, the GTK bots assert, but it's
        timing-sensitive and not truly platform-specific.

        * bindings/js/JSCallbackData.h:
        (WebCore::JSCallbackData::JSCallbackData):
        (WebCore::JSCallbackData::~JSCallbackData):
        Store the allocating thread, then assert that we're on it at deletion.

        (WebCore::DeleteCallbackDataTask):
        This is the task that can get posted to the context thread for cleanup.

        * bindings/js/JSCustomVoidCallback.cpp:
        * bindings/js/JSCustomVoidCallback.h:
        This callback isn't autogenerated, so we have to do the cleanup manually.

        * bindings/scripts/CodeGeneratorJS.pm:
        Add the proper cleanup to all autogenerated callbacks.

        * workers/WorkerThread.cpp:
        (WebCore::WorkerThreadShutdownFinishTask::performTask):
        (WebCore::WorkerThreadShutdownStartTask::performTask):
        WorkerContext::clearScript can't be called until the posted deletion tasks have completed; move the call from shutdown start to shutdown finish.

2010-05-07  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        Fix JSC binding generation to match webkit style
        https://bugs.webkit.org/show_bug.cgi?id=38173

        Add spaces around "|" to match webkit style.

        * bindings/scripts/CodeGeneratorJS.pm:
        * bindings/scripts/test/JS/JSTestObj.cpp:

2010-05-07  Dumitru Daniliuc  <dumi@chromium.org>

        Reviewed by Brady Eidson.

        Adding the IDL files for the sync DB API and the stubs for the JS and V8 bindings.
        https://bugs.webkit.org/show_bug.cgi?id=34994

        * DerivedSources.cpp:
        * DerivedSources.make:
        * GNUmakefile.am:
        * WebCore.gypi:
        * WebCore.pri:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSBindingsAllInOne.cpp:
        * bindings/js/JSDatabaseSyncCustom.cpp: Added.
        (WebCore::JSDatabaseSync::changeVersion):
        (WebCore::createTransaction):
        (WebCore::JSDatabaseSync::transaction):
        (WebCore::JSDatabaseSync::readTransaction):
        * bindings/js/JSSQLTransactionSyncCustom.cpp: Added.
        (WebCore::JSSQLTransactionSync::executeSql):
        * bindings/js/JSWorkerContextCustom.cpp:
        (WebCore::JSWorkerContext::openDatabaseSync):
        * bindings/v8/custom/V8BindingMacros.h: Added.
        * bindings/v8/custom/V8DatabaseSyncCustom.cpp: Added.
        (WebCore::V8DatabaseSync::changeVersionCallback):
        (WebCore::createTransaction):
        (WebCore::V8DatabaseSync::transactionCallback):
        (WebCore::V8DatabaseSync::readTransactionCallback):
        * bindings/v8/custom/V8SQLTransactionSyncCustom.cpp: Added.
        (WebCore::V8SQLTransactionSync::executeSqlCallback):
        * bindings/v8/custom/V8WorkerContextCustom.cpp:
        (WebCore::V8WorkerContext::openDatabaseSyncCallback):
        * storage/Database.idl:
        * storage/DatabaseCallback.h:
        * storage/DatabaseCallback.idl:
        * storage/DatabaseSync.cpp:
        (WebCore::DatabaseSync::changeVersion):
        (WebCore::DatabaseSync::transaction):
        * storage/DatabaseSync.h:
        * storage/DatabaseSync.idl: Added.
        * storage/SQLError.idl:
        * storage/SQLResultSet.idl:
        * storage/SQLResultSetRowList.idl:
        * storage/SQLTransaction.idl:
        * storage/SQLTransactionSync.idl: Added.
        * storage/SQLTransactionSyncCallback.h:
        * storage/SQLTransactionSyncCallback.idl: Added.
        * workers/WorkerContext.cpp:
        (WebCore::WorkerContext::openDatabaseSync):
        * workers/WorkerContext.h:
        * workers/WorkerContext.idl:

2010-05-07  Beth Dakin  <bdakin@apple.com>

        Reviewed by Simon Fraser.

        Fix for <rdar://problem/7956972> REGRESSION: Can't focus and type 
        in GMail due to bad repainting
        -and corresponding-
        https://bugs.webkit.org/show_bug.cgi?id=38782

        This patch reverts back to pre-r58797 behavior when 
        shouldPropagateCompositingToIFrameParent() is false.
        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::paintingGoesToWindow):

2010-05-07  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r58963.
        http://trac.webkit.org/changeset/58963
        https://bugs.webkit.org/show_bug.cgi?id=38773

        Broke Chromium layout tests. (Requested by dcheng on #webkit).

        * platform/chromium/DragDataChromium.cpp:
        (WebCore::DragData::asURL):

2010-05-07  Martin Robinson  <mrobinson@igalia.com>

        Reviewed by Gustavo Noronha Silva.

        https://bugs.webkit.org/show_bug.cgi?id=38769
        ClipboardGtk should write the URL label in the text portion of the DataObject

        No tests as this code path is currently unused in the GTK+ port.

        * platform/gtk/ClipboardGtk.cpp:
        (WebCore::ClipboardGtk::writeURL): Write the label to the text portion of the DataObject, instead of the URL.

2010-05-07  Nikolas Zimmermann  <nzimmermann@rim.com>

        Reviewed by Dirk Schulze.

        RenderSVGResourceClipper assigns a temporary mutated RenderStyle but does not correctly preserve the old style
        https://bugs.webkit.org/show_bug.cgi?id=38767

        Fix small logic error leading to a problem in RenderSVGResourceClipper. It assigns a new temporary RenderStyle
        to the target object, but fails to reset it correctly to the old style. Fixes all svg/clip-path errors on the windows bots.

        * rendering/RenderSVGResourceClipper.cpp:
        (WebCore::RenderSVGResourceClipper::createClipData):

2010-05-07  Daniel Cheng  <dcheng@chromium.org>

        Reviewed by Jian Li.

        [chromium] DragDataChromium::asURL() shouldn't do file validity checks
        https://bugs.webkit.org/show_bug.cgi?id=38711

        The renderer is sandboxed in Chromium, so these calls will give us no
        meaningful information. The loader will do the right thing if we pass
        it a file URL that points to an invalid file.

        No new tests.

        * platform/chromium/DragDataChromium.cpp:
        (WebCore::DragData::asURL):

2010-05-07  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Dan Bernstein.

        Fix debug-only render tree output to show object addresses in hex.

        * rendering/RenderTreeAsText.cpp:
        (WebCore::writeRenderObject):
        (WebCore::write):

2010-05-07  Alexey Proskuryakov  <ap@apple.com>

        Reviewed by Adele Peterson.

        https://bugs.webkit.org/show_bug.cgi?id=38546
        Node.focus() fails to move focus from subframe properly

        Test: fast/frames/take-focus-from-iframe.html

        * html/HTMLFrameElementBase.cpp: (WebCore::HTMLFrameElementBase::setFocus): Don't clear
        focus if this frame doesn't have it. This can happen if page's and HTMLFrameElement's ideas
        of focused frame get out of sync temporarily.

2010-05-07  Nikolas Zimmermann  <nzimmermann@rim.com>

        Reviewed by Dirk Schulze.

        svg/custom/use-instanceRoot-as-event-target.xhtml crashes randomly
        https://bugs.webkit.org/show_bug.cgi?id=37798

        When creating JSEventListeners through attributes (onclick, etc..) or add/removeEventListener
        calls on a SVGElementInstance, do NOT pass the element instance itself as JS wrapper object
        but the correspondingElement(). SVGElementInstance redirects all event listener registrations
        to the correspondingElement(), as they share an event listener list, per SVG spec. The old
        code was very dangerous, leading to random assertions, when garbage collection teared down
        the JSSVGElementInstance and event listeners fired, whose listeners were registered with
        it, but residing in the correspondingElement() event listener list.

        Removes the need for CustomToJS code for JSSVGElementInstance, which was wrong anyways. We hoped
        to keep the event listeers alive by just creating a js wrapper of the correspondingElement(), that
        could only work as long as garbage collection didn't tear it down, just luck. Also remove the
        CustomPushEventHandlerScope marker, as it is only used for JSLazyEventListeners and only works
        for JSNode derived objects, it was a no-op for SVGElementInstance, thus removed it.

        Should fix all random crashes/assertions seen with svg/custom/use-instanceRoot-as-event-target.xhtml
        See bug report for a detailed crash analysis.

        * bindings/js/JSSVGElementInstanceCustom.cpp: Remove custom toJS()/pushEventHandlerScope() handling, not necessary anymore.
        (WebCore::JSSVGElementInstance::markChildren):
        * bindings/scripts/CodeGeneratorJS.pm: For JSSVGElementInstance pass the correspondingElement() as JS wrapper object, not itself.
        * svg/SVGElementInstance.cpp:
        (WebCore::SVGElementInstance::invalidateAllInstancesOfElement): Be sure to trigger a style update here, so dirty shadow trees for <use> get rebuild. Otherwhise DOM may be out-of-sync.
        (WebCore::SVGElementInstance::eventTargetData): Add ASSERT_NOT_REACHED(), all event listener calls are forwarded to the correspondingElement().
        (WebCore::SVGElementInstance::ensureEventTargetData): Ditto.
        * svg/SVGElementInstance.idl: Remove CustomToJS, CustomPushEventHandlerScope markers.

2010-05-06  Kenneth Russell  <kbr@google.com>

        Reviewed by Dimitri Glazkov.

        WebCore::WebGLUnsignedIntArrayInternal::getCallback ReadAV@Arbitrary (deef89ee3d0345edebeaf13cf974c47c)
        https://bugs.webkit.org/show_bug.cgi?id=38039

        Web IDL now allows indexed getters and setters to be unnamed. Per
        discussion in WebGL working group and recent update to spec,
        removed the buggy get() and single-element set() methods from the
        JavaScript bindings to the WebGL array types. Refactored set()
        implementation in JSC bindings to share more code and modified V8
        binding to look more like it. Added unit tests for indexed getter
        with out-of-range indices and verifying removal of get and
        single-element set methods. Updated existing WebGL array tests.

        Tests: fast/canvas/webgl/array-get-and-set-method-removal.html
               fast/canvas/webgl/array-get-out-of-bounds.html

        * bindings/js/JSWebGLArrayHelper.h:
        (WebCore::setWebGLArrayHelper):
        * bindings/js/JSWebGLByteArrayCustom.cpp:
        (WebCore::JSWebGLByteArray::set):
        * bindings/js/JSWebGLFloatArrayCustom.cpp:
        (WebCore::JSWebGLFloatArray::set):
        * bindings/js/JSWebGLIntArrayCustom.cpp:
        (WebCore::JSWebGLIntArray::set):
        * bindings/js/JSWebGLShortArrayCustom.cpp:
        (WebCore::JSWebGLShortArray::set):
        * bindings/js/JSWebGLUnsignedByteArrayCustom.cpp:
        (WebCore::JSWebGLUnsignedByteArray::set):
        * bindings/js/JSWebGLUnsignedIntArrayCustom.cpp:
        (WebCore::JSWebGLUnsignedIntArray::set):
        * bindings/js/JSWebGLUnsignedShortArrayCustom.cpp:
        (WebCore::JSWebGLUnsignedShortArray::set):
        * bindings/v8/custom/V8WebGLArrayCustom.h:
        (WebCore::setWebGLArrayHelper):
        * bindings/v8/custom/V8WebGLByteArrayCustom.cpp:
        (WebCore::V8WebGLByteArray::setCallback):
        * bindings/v8/custom/V8WebGLFloatArrayCustom.cpp:
        (WebCore::V8WebGLFloatArray::setCallback):
        * bindings/v8/custom/V8WebGLIntArrayCustom.cpp:
        (WebCore::V8WebGLIntArray::setCallback):
        * bindings/v8/custom/V8WebGLShortArrayCustom.cpp:
        (WebCore::V8WebGLShortArray::setCallback):
        * bindings/v8/custom/V8WebGLUnsignedByteArrayCustom.cpp:
        (WebCore::V8WebGLUnsignedByteArray::setCallback):
        * bindings/v8/custom/V8WebGLUnsignedIntArrayCustom.cpp:
        (WebCore::V8WebGLUnsignedIntArray::setCallback):
        * bindings/v8/custom/V8WebGLUnsignedShortArrayCustom.cpp:
        (WebCore::V8WebGLUnsignedShortArray::setCallback):
        * html/canvas/WebGLByteArray.h:
        * html/canvas/WebGLByteArray.idl:
        * html/canvas/WebGLFloatArray.h:
        * html/canvas/WebGLFloatArray.idl:
        * html/canvas/WebGLIntArray.h:
        * html/canvas/WebGLIntArray.idl:
        * html/canvas/WebGLShortArray.h:
        * html/canvas/WebGLShortArray.idl:
        * html/canvas/WebGLUnsignedByteArray.h:
        * html/canvas/WebGLUnsignedByteArray.idl:
        * html/canvas/WebGLUnsignedIntArray.h:
        * html/canvas/WebGLUnsignedIntArray.idl:
        * html/canvas/WebGLUnsignedShortArray.h:
        * html/canvas/WebGLUnsignedShortArray.idl:

2010-05-07  Pavel Feldman  <pfeldman@chromium.org>

        Not reviewed: chromium dev tools tests fix.
        Add a more strict check prior to accessing constructor property in
        Web Inspector frontend.

        * inspector/front-end/InjectedScript.js:
        (injectedScriptConstructor):

2010-05-07  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Joseph Pecoraro.

        Web Inspector: On Linux/Windows panel history is
        traversed while iterating over words in text prompt.

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

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

2010-05-07  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Timothy Hatcher.

        Web Inspector: come up with InjectedScript._className that works for both JSC and V8.

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

        * inspector/front-end/InjectedScript.js:
        (injectedScriptConstructor):

2010-05-07  Joseph Pecoraro  <joepeck@webkit.org>

        Reviewed by Adam Barth.

        document.write is not synchronous after page load
        https://bugs.webkit.org/show_bug.cgi?id=38146

        If there are no pending scripts, a document.write call should be
        synchronous. This matches other browsers and the HTML5 spec. Forcing
        the tokenizer to be synchronous in Document::write does not affect
        external scripts written by the write call. This should only change
        behavior of document.write after the page is done loading.

        Difficult to test reliably due to HTMLTokenizing relying on processing time.
        I made a manual test because the test requires processing very large strings
        synchronously and therefore can take some time.

        Test: WebCore/manual-tests/dom/document-write-synchronous-after-page-load.html

        * dom/Document.cpp:
        (WebCore::SynchronousHTMLTokenizerGuard::SynchronousHTMLTokenizerGuard): if the provided tokenizer is an HTMLTokenizer make it synchronous
        (WebCore::SynchronousHTMLTokenizerGuard::~SynchronousHTMLTokenizerGuard): if the provided tokenizer was an HTMLTokenizer return its synchronous state
        (WebCore::Document::write): temporarily set the tokenizer to synchronous during document.write
        * dom/Tokenizer.h:
        (WebCore::Tokenizer::asHTMLTokenizer): default implementation returns 0, to be overridden by HTMLTokenizer
        * html/HTMLTokenizer.h: allow access to to the force synchronous state
        (WebCore::HTMLTokenizer::forceSynchronous): accessor
        (WebCore::HTMLTokenizer::asHTMLTokenizer): override the default to return itself
        * manual-tests/dom/document-write-synchronous-after-page-load.html: Added.

2010-05-07  Tor Arne Vestbø  <tor.arne.vestbo@nokia.com>

        Reviewed by Simon Hausmann.

        [Qt] Fix rendering of -webkit-user-select: none

        -webkit-user-select: none is implemented by filling
        the area with an invalid default-constructed Color.
        In most ports passing an invalid color down to the
        graphics backend seems to produce transparent fills.

        In Qt the behavior of painting with an invalid QColor
        is undefined, and in practice it results in painting
        black opaque areas.

        One way to fix this would be to use Qt::transparent
        when converting an undefined Color to a QColor, but
        Qt does not have short circuits for fully transparent
        painting, and we actually end up in slow code paths
        due to the transparency. So, we're better of doing the
        short circuit in WebKit.

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

        * platform/graphics/qt/GraphicsContextQt.cpp:

2010-05-07  Ben Murdoch  <benm@google.com>

        Reviewed by Darin Adler.

        Potential crash in EventHandler::handleTouchEvent
        https://bugs.webkit.org/show_bug.cgi?id=38646

        Fix a ref counting bug that can cause a crash if the m_originatingouchPointTargets
        hashmap holds the last ref to an EventTarget when the user lifts their finger.

        This is very hard to reproduce in a consistent way and clearly a
        simple logic error in the code, therefore no new tests.

        * page/EventHandler.cpp:
        (WebCore::EventHandler::handleTouchEvent): Don't let the RefPtr we get back from
            the hasmap go out of scope so soon as it could delete the wrapped ptr if the
            hashmap held the last ref (and we use the raw ptr that the RefPtr
            wraps later in the WebCore::Touch constructor).

2010-05-07  Gustavo Noronha Silva  <gustavo.noronha@collabora.co.uk>

        Rubber-stamped by Kenneth Rohde Christiansen.

        [GTK] Fails to build on GTK+ < 2.14
        https://bugs.webkit.org/show_bug.cgi?id=38746

        Build fix only. Do basically the same as gtk_adjustment_configure
        would do if we are bellow GTK+ 2.14.

        * platform/gtk/ScrollViewGtk.cpp:
        (WebCore::AdjustmentConfigure):

2010-05-07  Gustavo Noronha Silva  <gustavo.noronha@collabora.co.uk>

        Rubber-stamped by Xan Lopez.

        Crash with MgOpenModerna font, with non-UTF-8 character
        https://bugs.webkit.org/show_bug.cgi?id=37795

        NULL-check the font platform data, for now, to avoid the crash.

        Could not yet figure out a way to get a test written that does not
        involve adding the font to the tree, but there are doubts about
        licensing.

        * platform/graphics/cairo/FontCacheCairo.cpp:
        (WebCore::FontCache::getFontDataForCharacters):

2010-05-07  MORITA Hajime  <morrita@google.com>

        Reviewed by Eric Seidel.

        [Chromium] RenderThemeChromiumMac.mm should share the code with RenderThemeMac.mm
        https://bugs.webkit.org/show_bug.cgi?id=37204

        Made RenderThemeChromiumMac subclass of RenderThemeMac, instead of RenderTheme.
        Added some method to RenderThemeMac for overriding on RenderThemeChromiumMac.
        
        No new tests; Should have no behavioural change.

        * WebCore.gyp/WebCore.gyp:
        * rendering/RenderThemeChromiumMac.h:
        * rendering/RenderThemeChromiumMac.mm:
        (WebCore::RenderThemeChromiumMac::usesTestModeFocusRingColor):
        (WebCore::RenderThemeChromiumMac::documentViewFor):
        (WebCore::RenderThemeChromiumMac::adjustMediaSliderThumbSize):
        (WebCore::RenderThemeChromiumMac::paintMediaVolumeSliderTrack):
        (WebCore::RenderThemeChromiumMac::paintMediaVolumeSliderThumb):
        * rendering/RenderThemeMac.h:
        (WebCore::RenderThemeMac::updateActiveState): Added for overriding
        * rendering/RenderThemeMac.mm:
        (WebCore::RenderThemeMac::usesTestModeFocusRingColor): Added for overriding
        (WebCore::RenderThemeMac::documentViewFor): Added for overriding
        (WebCore::RenderThemeMac::paintMenuList):
        (WebCore::RenderThemeMac::setPopupButtonCellState):
        (WebCore::RenderThemeMac::paintSliderThumb):
        (WebCore::RenderThemeMac::paintSearchField):
        (WebCore::RenderThemeMac::setSearchCellState):
        (WebCore::RenderThemeMac::paintSearchFieldCancelButton):
        (WebCore::RenderThemeMac::paintSearchFieldResultsDecoration):
        (WebCore::RenderThemeMac::paintSearchFieldResultsButton):
        (WebCore::RenderThemeMac::adjustSliderThumbSize):
        (WebCore::RenderThemeMac::adjustMediaSliderThumbSize): Added for overriding
        (WebCore::RenderThemeMac::extraMediaControlsStyleSheet):        

2010-05-06  Fumitoshi Ukai  <ukai@chromium.org>

        Reviewed by Alexey Proskuryakov.

        JavaScriptCore/wtf/RandomNumber.h should provide using WTF::*
        https://bugs.webkit.org/show_bug.cgi?id=38719

        * platform/graphics/wince/FontCustomPlatformData.cpp:
        (WebCore::createUniqueFontName):
          Remove WTF:: prefix from randomNumber()
        * platform/network/FormDataBuilder.cpp:
        (WebCore::FormDataBuilder::generateUniqueBoundaryString):
          Ditto.

2010-04-27  Tony Chang  <tony@chromium.org>

        Reviewed by Eric Seidel.

        [chromium] clicking a scrollbar in an iframe shouldn't lose the selection
        https://bugs.webkit.org/show_bug.cgi?id=38189

        Test: fast/events/mousedown-in-subframe-scrollbar.html

        * page/chromium/EventHandlerChromium.cpp:
        (WebCore::EventHandler::passMousePressEventToSubframe): If clicking on
            a scrollbar, pass the event directly to the scrollbar.  This matches
            mac which passes the event to the NSScroller.

2010-05-06  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Dan Bernstein.

        Compositing layers that are clipped out by an overflow:scroll parent fail to get created on reveal
        https://bugs.webkit.org/show_bug.cgi?id=38712
        
        When compositing layer creation is testing layer overlap, we need to re-run the
        algorithm when an overflow:scroll element scrolls, to create new layers for revealed
        elements.
        
        Test: compositing/layer-creation/overflow-scroll-overlap.html

        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::scrollToOffset): First, move the compositing updates
        until after the call to updateWidgetPositions(), so that this order is similar
        to what we done when a FrameView scrolls. This change has no known side effects.
        Second, if compositingConsultsOverlap() is true, we need to actually do a 
        compositing layer update to compute whether revealed/hidden layers should
        be created/destroyed.

2010-05-06  Maciej Stachowiak  <mjs@apple.com>

        Not reviewed, build fix.

        Try again - with quotes this time. *facepalm*

        * dom/Notation.cpp:

2010-05-06  Maciej Stachowiak  <mjs@apple.com>

        Not reviewed, build fix.

        Speculative fix for Qt and Gtk.

        * dom/Notation.cpp:

2010-05-06  Maciej Stachowiak  <mjs@apple.com>

        Not reviewed, build fix.

        Fix an assert that I failed to update in my earlier change.

        * dom/CharacterData.h:
        (WebCore::CharacterData::CharacterData):

2010-05-06  Alexey Proskuryakov  <ap@apple.com>

        Reviewed by Geoff Garen.

        https://bugs.webkit.org/show_bug.cgi?id=38697
        REGRESSION (r58299): Replying on reddit.com no longer works

        * css/CSSSelector.cpp: (WebCore::CSSSelector::extractPseudoType): Don't recognize :first,
        :left and :right. The aren't allowed in all contexts, and properly implementing them is out
        of scope for this regression fix.

2010-05-06  Jian Li  <jianli@chromium.org>

        Reviewed by Adam Barth.

        Improve code generator scripts to support converting ScriptString.
        https://bugs.webkit.org/show_bug.cgi?id=38699

        Change both JSC and V8 generators to introduce "ConvertScriptString"
        attribute to allow converting from ScriptString. Also updated the
        bindings test result.

        These changes are necessary in order to avoid adding custom binding codes
        when we add the FileReader interface.

        * bindings/scripts/CodeGeneratorJS.pm:
        * bindings/scripts/CodeGeneratorV8.pm:
        * bindings/scripts/test/GObject/WebKitDOMTestObj.cpp:
        (webkit_dom_test_obj_get_script_string_attr):
        (webkit_dom_test_obj_get_property):
        (webkit_dom_test_obj_class_init):
        * bindings/scripts/test/GObject/WebKitDOMTestObj.h:
        * bindings/scripts/test/JS/JSTestObj.cpp:
        (WebCore::):
        (WebCore::jsTestObjScriptStringAttr):
        * bindings/scripts/test/JS/JSTestObj.h:
        * bindings/scripts/test/ObjC/DOMTestObj.h:
        * bindings/scripts/test/ObjC/DOMTestObj.mm:
        (-[DOMTestObj scriptStringAttr]):
        * bindings/scripts/test/TestObj.idl:
        * bindings/scripts/test/V8/V8TestObj.cpp:
        (WebCore::TestObjInternal::scriptStringAttrAttrGetter):
        (WebCore::):

2010-05-06  Jian Li  <jianli@chromium.org>

        Reviewed by Adam Barth.

        Improve code generator scripts to pass additional ScriptExecutionContext
        argument to the constructor.
        https://bugs.webkit.org/show_bug.cgi?id=38687

        Change both JSC and V8 generators to introduce "CallWith=ScriptExecutionContext"
        attribute to allow passing the additional ScriptExecutionContext argument to
        the constructor. Also add another test IDL file to test interface-level
        features.

        These changes are necessary in order to avoid adding custom binding codes
        when we add the FileReader interface.

        * bindings/scripts/CodeGeneratorJS.pm:
        * bindings/scripts/CodeGeneratorV8.pm:
        * bindings/scripts/test/GObject/WebKitDOMTestInterface.cpp: Added.
        * bindings/scripts/test/GObject/WebKitDOMTestInterface.h: Added.
        * bindings/scripts/test/GObject/WebKitDOMTestInterfacePrivate.h: Added.
        * bindings/scripts/test/JS/JSTestInterface.cpp: Added.
        * bindings/scripts/test/JS/JSTestInterface.h: Added.
        * bindings/scripts/test/ObjC/DOMTestInterface.h: Added.
        * bindings/scripts/test/ObjC/DOMTestInterface.mm: Added.
        * bindings/scripts/test/ObjC/DOMTestInterfaceInternal.h: Added.
        * bindings/scripts/test/TestInterface.idl: Added.
        * bindings/scripts/test/V8/V8TestInterface.cpp: Added.
        * bindings/scripts/test/V8/V8TestInterface.h: Added.
        * bindings/v8/V8Proxy.h:
        (WebCore::V8Proxy::constructDOMObjectWithScriptExecutionContext):

2010-05-06  Maciej Stachowiak  <mjs@apple.com>

        Build fix, not reviewed.
        
        Speculative Windows and Debug build fixes for the last change.

        * dom/Node.h:
        (WebCore::Node::inDocument):
        (WebCore::Node::setFlag):

2010-05-06  James Robinson  <jamesr@chromium.org>

        Reviewed by Eric Seidel.

        Fix warnings emitted by gcc 4.4.1 on linux in chromium-specific platform graphics files.
        https://bugs.webkit.org/show_bug.cgi?id=38158

        Fixes:
        - replace NULL with 0
        - remove unusued locals
        - add parens around ambiguous looking compound predicates like (a || b && c)

        This also adds a check for x >= 0 to FontLinux.cpp's in this statement:
          if (x < walker.width())
        This is more documentation than anything else since walker.width() returns
        an unsigned the current behavior is that x is promoted to unsigned and as
        long as x + walker.width() is less than 2^31 all negative values of x
        end up wrapping around and not being < walker.width().  This behavior is
        tested by fast/text/international/khmer-selection.html

        * platform/graphics/chromium/FontLinux.cpp:
        (WebCore::adjustTextRenderMode):
        (WebCore::TextRunWalker::TextRunWalker):
        (WebCore::TextRunWalker::length):
        (WebCore::TextRunWalker::width):
        (WebCore::TextRunWalker::getTextRun):
        (WebCore::TextRunWalker::getNormalizedTextRun):
        (WebCore::Font::offsetForPositionForComplexText):
        * platform/graphics/chromium/FontPlatformDataLinux.cpp:
        (WebCore::FontPlatformData::setupPaint):
        * platform/graphics/chromium/HarfbuzzSkia.cpp:
        (WebCore::getOutlinePoint):
        * platform/graphics/skia/GraphicsContext3DSkia.cpp:
        (WebCore::GraphicsContext3D::getImageData):
        * platform/graphics/skia/GraphicsContextSkia.cpp:
        (WebCore::isCoordinateSkiaSafe):
        (WebCore::GraphicsContext::fillRect):
        (WebCore::GraphicsContext::strokePath):
        (WebCore::GraphicsContext::strokeRect):

2010-05-06  Ada Chan  <adachan@apple.com>

        Reviewed by David Kilzer.

        https://bugs.webkit.org/show_bug.cgi?id=38695
        
        Check the result from widget() for NULL before accessing it.

        * rendering/RenderIFrame.cpp:
        (WebCore::RenderIFrame::calcHeight):
        (WebCore::RenderIFrame::calcWidth):

2010-05-06  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Darin Adler.

        further fixes towards REGRESSION (r57292): 1% PLT regression from visited link information leak fix
        https://bugs.webkit.org/show_bug.cgi?id=38682
        <rdar://problem/7859794>

        Looks like a 1-2% speedup on PLT.

        - Reorder CSS properties.
        - Remove short circuit tag check in matchRulesForList which costs more than it saves.
        - Inline initForStyleResolve.
        - Optimize applyDeclarations to avoid switch and take fewer branches in the inner loop.
        
        - Change the way Node handles flags - replace bitfield with a uint32_t and explicit masking, 
        to make it cheaper to initialize the bits and give faster access.
        - Added new Node flags to check for isStyledElement, isHTMLElement, isSVGElement, isComment, 
        and devirtualize those methods.
        - Inline constructors for Node, Element, Text, CharacterData, StyledElement, etc since
        they are very simple and lots of nodes get constructed.
        
        * css/CSSPropertyNames.in: Move a few of the properties up front so we can check for them
        with < instead of switch statements
        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::matchRulesForList): Remove unnecessary preflight check
        for tag match before checking selector. This check very rarely short circuits anything,
        since most rules with a tag end up in the appropriate tag bucket. So doing the check
        cost more time than the time saved.
        (WebCore::CSSStyleSelector::initForStyleResolve): Inline. Create RenderStyle in a better way.
        (WebCore::CSSStyleSelector::applyDeclarations): Get rid of switch statement and use <= to
        check for the high priority properties. Convert to template to avoid checking "applyFirst"
        each time through the loop.
        (WebCore::CSSStyleSelector::styleForElement): Adjust for new applyDeclarations() signature.
        (WebCore::CSSStyleSelector::keyframeStylesForAnimation): ditto
        (WebCore::CSSStyleSelector::pseudoStyleForElement): ditto
        * css/CSSStyleSelector.h: Adjust for new applyDeclarations() signature.
        * rendering/style/RenderStyle.cpp:
        (WebCore::RenderStyle::RenderStyle): Inline constructor.
        * rendering/style/RenderStyle.h: Make constructor private so it can be inline.
        * dom/Node.h:
        (WebCore::): See high-level description of changes above. Redid the
        way boolean flags work.
        (WebCore::Node::isElementNode):
        (WebCore::Node::isContainerNode):
        (WebCore::Node::isTextNode):
        (WebCore::Node::isHTMLElement):
        (WebCore::Node::isSVGElement):
        (WebCore::Node::isStyledElement):
        (WebCore::Node::isCommentNode):
        (WebCore::Node::hasID):
        (WebCore::Node::hasClass):
        (WebCore::Node::active):
        (WebCore::Node::inActiveChain):
        (WebCore::Node::inDetach):
        (WebCore::Node::hovered):
        (WebCore::Node::attached):
        (WebCore::Node::setAttached):
        (WebCore::Node::needsStyleRecalc):
        (WebCore::Node::styleChangeType):
        (WebCore::Node::childNeedsStyleRecalc):
        (WebCore::Node::isLink):
        (WebCore::Node::setHasID):
        (WebCore::Node::setHasClass):
        (WebCore::Node::setChildNeedsStyleRecalc):
        (WebCore::Node::clearChildNeedsStyleRecalc):
        (WebCore::Node::setInDocument):
        (WebCore::Node::clearInDocument):
        (WebCore::Node::setInActiveChain):
        (WebCore::Node::clearInActiveChain):
        (WebCore::Node::setIsLink):
        (WebCore::Node::clearIsLink):
        (WebCore::Node::setActive):
        (WebCore::Node::setHovered):
        (WebCore::Node::inDocument):
        (WebCore::Node::):
        (WebCore::Node::getFlag):
        (WebCore::Node::setFlag):
        (WebCore::Node::clearFlag):
        (WebCore::Node::hasRareData):
        (WebCore::Node::isParsingChildrenFinished):
        (WebCore::Node::setIsParsingChildrenFinished):
        (WebCore::Node::clearIsParsingChildrenFinished):
        (WebCore::Node::isStyleAttributeValid):
        (WebCore::Node::setIsStyleAttributeValid):
        (WebCore::Node::clearIsStyleAttributeValid):
        (WebCore::Node::isSynchronizingStyleAttribute):
        (WebCore::Node::setIsSynchronizingStyleAttribute):
        (WebCore::Node::clearIsSynchronizingStyleAttribute):
        (WebCore::Node::areSVGAttributesValid):
        (WebCore::Node::setAreSVGAttributesValid):
        (WebCore::Node::clearAreSVGAttributesValid):
        (WebCore::Node::isSynchronizingSVGAttributes):
        (WebCore::Node::setIsSynchronizingSVGAttributes):
        (WebCore::Node::clearIsSynchronizingSVGAttributes):
        (WebCore::Node::hasRareSVGData):
        (WebCore::Node::setHasRareSVGData):
        (WebCore::Node::clearHasRareSVGData):
        (WebCore::Node::initialRefCount):
        * dom/Node.cpp:
        (WebCore::Node::trackForDebugging): Adjusted for changes in
        flag handling.
        (WebCore::Node::ensureRareData): ditto
        (WebCore::Node::setStyleChange): ditto
        (WebCore::Node::setNeedsStyleRecalc): ditto
        (WebCore::Node::lazyAttach): ditto
        (WebCore::Node::attach): ditto
        (WebCore::Node::detach): ditto
        (WebCore::Node::insertedIntoDocument): ditto
        (WebCore::Node::removedFromDocument): ditto
        * dom/CharacterData.cpp:
        * dom/CharacterData.h:
        (WebCore::CharacterData::CharacterData): Inline the constructor (moved from .cpp)
        * dom/Comment.cpp:
        (WebCore::Comment::Comment): Tell the base class that we're a comment.
        * dom/Comment.h: Remove isCommentNode override.
        * dom/ContainerNode.cpp:
        (WebCore::ContainerNode::detach): Adjusted for changes in flag
        handling.
        (WebCore::ContainerNode::removedFromDocument): ditto
        * dom/Document.cpp:
        (WebCore::Document::Document): Adjusted for changes in flag handling.
        (WebCore::Document::recalcStyle): ditto
        (WebCore::Document::setFocusedNode): ditto
        * dom/Document.h:
        (WebCore::Node::Node): Inline the Node constructor - goes here
        because it uses Document.
        * dom/DocumentFragment.cpp: include Document.h due to above change
        * dom/EditingText.cpp: ditto
        * dom/EntityReference.cpp: ditto
        * dom/Element.cpp:
        (WebCore::Element::getAttribute): Adjusted for changes in flag
        handling.
        (WebCore::Element::setAttribute): ditto
        (WebCore::Element::hasAttributes): ditto
        (WebCore::Element::recalcStyle): ditto
        (WebCore::Element::finishParsingChildren): ditto
        * dom/Element.h:
        (WebCore::Element::Element): Inline (moved from .cpp)
        (WebCore::Element::isFinishedParsingChildren):
        (WebCore::Element::beginParsingChildren):
        (WebCore::Element::attributes): Adjusted for changes in flag
        handling.
        * dom/StyledElement.cpp:
        (WebCore::StyledElement::updateStyleAttribute): Adjust for
        changes to flag handling.
        (WebCore::StyledElement::mapToEntry): ditto
        (WebCore::StyledElement::parseMappedAttribute): ditto
        (WebCore::StyledElement::copyNonAttributeProperties): ditto
        * dom/StyledElement.h:
        (WebCore::StyledElement::StyledElement): Inline (moved from.cpp)
        (WebCore::StyledElement::invalidateStyleAttribute): Adjust for
        changes in flag handling.
        * dom/Text.h:
        (WebCore::Text::Text): Inline (moved from .cpp)
        * dom/Text.cpp:
        * html/HTMLAnchorElement.cpp:
        (WebCore::HTMLAnchorElement::HTMLAnchorElement): Adjust for changes in
        flag handling.
        (WebCore::HTMLAnchorElement::parseMappedAttribute): ditto
        * html/HTMLElement.cpp:
        (WebCore::HTMLElement::create): Tell base class we're an HTML element.
        * html/HTMLElement.h: ditto above; remove isHTMLElement override.
        * html/HTMLFormControlElement.h: Tell base class we're an HTML element.
        * html/HTMLFrameOwnerElement.cpp:
        (WebCore::HTMLFrameOwnerElement::HTMLFrameOwnerElement): ditto
        * html/HTMLProgressElement.cpp:
        (WebCore::HTMLProgressElement::HTMLProgressElement): ditto
        * mathml/MathMLElement.cpp:
        (WebCore::MathMLElement::MathMLElement): Tell base class we're a styled
        element.
        * rendering/MediaControlElements.cpp:
        (WebCore::MediaControlShadowRootElement::MediaControlShadowRootElement):
        Adjust for changes in flag handling.
        (WebCore::MediaControlElement::MediaControlElement): ditto
        (WebCore::MediaControlInputElement::MediaControlInputElement): ditto
        * rendering/RenderFileUploadControl.cpp:
        (WebCore::RenderFileUploadControl::updateFromElement): ditto
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::updateHoverActiveState): ditto
        * rendering/RenderProgress.cpp:
        (WebCore::RenderProgress::updateValuePartState): ditto
        * rendering/RenderSlider.cpp:
        (WebCore::RenderSlider::updateFromElement): ditto
        * rendering/SVGShadowTreeElements.cpp:
        (WebCore::SVGShadowTreeRootElement::SVGShadowTreeRootElement): ditto
        * rendering/TextControlInnerElements.cpp:
        (WebCore::TextControlInnerElement::attachInnerElement): ditto
        * svg/SVGAnimatedProperty.h:
        (WebCore::SVGAnimatedPropertyTearOff::setBaseVal): ditto
        (WebCore::SVGAnimatedPropertyTearOff::setAnimVal): ditto
        * svg/SVGElement.cpp:
        (WebCore::SVGElement::SVGElement): Tell base class we're
        an svg element.
        (WebCore::SVGElement::ensureRareSVGData): Adjust for flag handling
        changes.
        (WebCore::SVGElement::updateAnimatedSVGAttribute): ditto
        * svg/SVGElement.h:
        (WebCore::SVGElement::invalidateSVGAttributes): ditto
        * svg/SVGPolyElement.cpp:
        (WebCore::SVGPolyElement::svgAttributeChanged): ditto
        * wml/WMLAnchorElement.cpp:
        (WebCore::WMLAnchorElement::WMLAnchorElement): ditto
        * wml/WMLElement.cpp:
        (WebCore::WMLElement::WMLElement): Tell base class we're a styled
        element.

2010-05-06  Adam Barth  <abarth@webkit.org>

        Unreviewed.  Fix indent.  Sorry, my OCD was acting up.

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

2010-05-06  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Joseph Pecoraro.

        Web Inspector: store selected Headers / Content tab on explicit switch and/or explicit navigate only.

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

        * inspector/front-end/ResourceView.js:
        (WebInspector.ResourceView):
        (WebInspector.ResourceView.prototype._selectHeadersTab):
        (WebInspector.ResourceView.prototype.selectContentTab):
        * inspector/front-end/ResourcesPanel.js:
        (WebInspector.ResourcesPanel.prototype.showResource):

2010-05-06  Luiz Agostini  <luiz.agostini@openbossa.org>

        Rubber-stamped by Simon Hausmann.

        [Qt] use QT_MOBILE_THEME in Symbian
        https://bugs.webkit.org/show_bug.cgi?id=38440

        Putting QT_MOBILE_THEME into use for Symbian.

        * WebCore.pro:

2010-05-06  Laszlo Gombos  <laszlo.1.gombos@nokia.com>

        Unreviewed, build fix WinCE for QtWebKit.

        [Qt] Compilation with Plugins disabled is broken
        https://bugs.webkit.org/show_bug.cgi?id=31407

        Rename platform/qt/TemporaryLinkStubs.cpp to avoid name collition on
        Windows.

        Thanks for Ismail "cartman" Donmez for help.

        No new tests, as there is no new functionality.

        * WebCore.gypi:
        * WebCore.pro:
        * platform/qt/TemporaryLinkStubs.cpp: Removed.
        * platform/qt/TemporaryLinkStubsQt.cpp: Copied from WebCore/platform/qt/TemporaryLinkStubs.cpp.

2010-05-06  Simon Hausmann  <simon.hausmann@nokia.com>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] REGRESSION: Loading of external CSS and JS files over network fails in some cases
        https://bugs.webkit.org/show_bug.cgi?id=36755

        Enable the direct connection between QtNetwork and QtWebKit only for Qt versions
        greater than 4.6.2, due to a bug in Qt that's been fixed after 4.6.2.

        * platform/network/qt/QNetworkReplyHandler.cpp:

2010-05-06  Gustavo Noronha Silva  <gustavo.noronha@collabora.co.uk>

        Reviewed by Xan Lopez.

        Rework where we get page step and line step from, so we do not
        depend on scrollbars existing. Caught by API test I forgot to run.

        * platform/gtk/ScrollViewGtk.cpp:
        (WebCore::ScrollView::setGtkAdjustments):

2010-05-06  Gustavo Noronha Silva  <gustavo.noronha@collabora.co.uk>

        Reviewed by Xan Lopez.

        [GTK] Adjustment resetting uses wrong values, and misses page_size and steps
        https://bugs.webkit.org/show_bug.cgi?id=38657

        Fix resetting adjustment values. In the page cache case, we were
        confusing page_size and upper, leading to stray scrollbars
        sometimes.

        * platform/gtk/ScrollViewGtk.cpp:
        (WebCore::ScrollView::setGtkAdjustments):

2010-05-06  Darin Adler  <darin@apple.com>

        Reviewed by Beth Dakin.

        Page::setCanStartMedia does not properly handle the case where a media listener is removed
        https://bugs.webkit.org/show_bug.cgi?id=38602

        We can't find any real case where this causes a crash at this time, but
        we want to harden the code anyway. Thus there are no new regression tests.

        * page/Page.cpp:
        (WebCore::Page::removeMediaCanStartListener): Removed incorrect assertion.
        (WebCore::Page::setCanStartMedia): Change algorithm so we notify listeners
        one at a time and don't notify any listener that has already been removed
        from the set.

2010-05-05  Ojan Vafai  <ojan@chromium.org>

        Reviewed by Darin Adler.

        shift+click on an existing selection doesn't work right
        https://bugs.webkit.org/show_bug.cgi?id=36542

        NSTextView behavior is to move the end of the selection
        closest to the shift-click. Win/Linux behavior is to always
        move the focus end of the selection.

        Test: editing/selection/shift-click.html

        * page/EventHandler.cpp:
        (WebCore::textDistance):
        (WebCore::EventHandler::handleMousePressEventSingleClick):

2010-05-06  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Timothy Hatcher.

        Web Inspector: implement panels history traversal on Cmd+Left/Right.

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

        * inspector/front-end/inspector.js:
        (WebInspector.set currentPanel):
        (WebInspector.loaded):
        (WebInspector.documentKeyDown):
        (WebInspector.PanelHistory):
        (WebInspector.PanelHistory.prototype.canGoBack):
        (WebInspector.PanelHistory.prototype.goBack):
        (WebInspector.PanelHistory.prototype.canGoForward):
        (WebInspector.PanelHistory.prototype.goForward):
        (WebInspector.PanelHistory.prototype.setPanel):

2010-05-03  Evan Martin  <evan@chromium.org>

        Reviewed by Eric Seidel.

        [chromium] use glyphDataForCharacter so we hit the glyphdata cache
        https://bugs.webkit.org/show_bug.cgi?id=38500

        Calling fontDataForCharacters() while rendering text is expensive.
        Examining the relevant Mac code in WebKit revealed that calling the
        similarly-named glyphDataForCharacters() results in caching the font
        data on a per-glyph basis.

        Since we now choose a font based on the first character in a run, we
        need to be careful that all the glyphs within the run use the same font.
        This is also similar to the WebKit Mac code.  We need to remove all of
        the script run bits eventually and this is a step in that direction.

        Tests: fast/text/international/danda-space.html spacing changes slightly
        (now matches Firefox better) and fast/text/international/thai-baht-space.html
        now picks the correct (serif) font for the digits.

        * platform/graphics/chromium/FontLinux.cpp:
        (WebCore::TextRunWalker::nextScriptRun):
        (WebCore::TextRunWalker::setupFontForScriptRun):

2010-05-06  Martin Robinson  <mrobinson@webkit.org>

        Reviewed by Gustavo Noronha Silva.

        [GTK] Enable DOM clipboard and drag-and-drop access
        https://bugs.webkit.org/show_bug.cgi?id=30623

        Convert dragging portion of drag-and-drop to use DataObjectGtk.

        No new tests, because functionality has not changed.

        * page/gtk/EventHandlerGtk.cpp:
        (WebCore::EventHandler::createDraggingClipboard): Pass the DataObjectGtk as a parameter here.
        * platform/gtk/ClipboardGtk.h:
        (WebCore::ClipboardGtk::create): Take the DataObject as a parameter instead of creating it here.
        (WebCore::ClipboardGtk::helper): Added.
        (WebCore::ClipboardGtk::dataObject): Added.
        * platform/gtk/PasteboardHelper.h: Make targetListForDataObject a public method.

2010-05-06  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Timothy Hatcher.

        Web Inspector: Do not show content tab for resources
        not supporting content preview.

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

        * English.lproj/localizedStrings.js:
        * inspector/front-end/FontView.js:
        (WebInspector.FontView.prototype.hasContentTab):
        * inspector/front-end/ImageView.js:
        (WebInspector.ImageView.prototype.hasContentTab):
        * inspector/front-end/ResourceView.js:
        (WebInspector.ResourceView):
        (WebInspector.ResourceView.prototype._selectTab):
        (WebInspector.ResourceView.prototype.hasContentTab):
        * inspector/front-end/SourceView.js:
        (WebInspector.SourceView.prototype.hasContentTab):

2010-05-06  Antonio Gomes  <tonikitoo@webkit.org>

        Reviewed by Kenneth Christiansen.

        Spatial Navigation: adapt the logic of {deep}findFocusableNodeInDirection to do traversal starting from Node* not Document*
        https://bugs.webkit.org/show_bug.cgi?id=37803

        Instead of receiving a Document pointer as incoming parameter, patch modifies
        findFocusableNodeInDirection and deepFindFocusableNodeInDirection methods to
        receive a Node pointer as start for content traversal.
        This way we can make good use of deepFindFocusableNodeInDirection to traverse
        other scrollable container like scrollable div's, and not only frames or iframes.

        Patch also makes use of 'while' instead of 'for' to loop control, that gives move
        flexibility to the incremental step: e.g. if a scrollable div was processed, the incremental
        step in the loop does not have to do node->traverseNextNode() but node->traverseNextSibling().

        No behavior change. It is a preparation for supporting scrollable containers in Spatial
        Navigation.

        * page/FocusController.cpp:
        (WebCore::FocusController::advanceFocusDirectionally):
        (WebCore::FocusController::findFocusableNodeInDirection):
        (WebCore::FocusController::deepFindFocusableNodeInDirection):
        * page/FocusController.h:

2010-05-06  Csaba Osztrogonác  <ossy@webkit.org>

        Unreviewed WinCE buildfix after r58842.
        Preprocessor doesn't understand "true", changed to "1"

        * platform/graphics/MediaPlayer.cpp:

2010-05-06  Mikhail Naganov  <mnaganov@chromium.org>

        Reviewed by Pavel Feldman.

        Temporarily disable 'console.profiles' until we can distinguish
        functions from different frames

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

        * bindings/v8/custom/V8ConsoleCustom.cpp:
        (WebCore::V8Console::profilesAccessorGetter):

2010-05-06  Steve Block  <steveblock@google.com>

        Reviewed by Eric Seidel.

        MAC_JAVA_BRIDGE should be renamed JAVA_BRIDGE
        https://bugs.webkit.org/show_bug.cgi?id=38544

        No new tests, build fix only.

        * DerivedSources.make:
        * bindings/js/ScriptController.cpp:
        (WebCore::ScriptController::ScriptController):
        * bindings/js/ScriptController.h:
        * bindings/js/ScriptControllerMac.mm:
        (WebCore::ScriptController::createScriptInstanceForWidget):
        * bridge/jni/JNIBridge.cpp:
        * bridge/jni/JNIBridge.h:
        * bridge/jni/JNIUtility.cpp:
        * bridge/jni/JNIUtility.h:
        * bridge/jni/jni_jsobject.h:
        * bridge/jni/jni_jsobject.mm:
        * bridge/jni/jni_objc.mm:
        * bridge/jni/jsc/JNIBridgeJSC.cpp:
        * bridge/jni/jsc/JNIBridgeJSC.h:
        * bridge/jni/jsc/JNIUtilityPrivate.cpp:
        * bridge/jni/jsc/JNIUtilityPrivate.h:
        * bridge/jni/jsc/JavaClassJSC.cpp:
        * bridge/jni/jsc/JavaClassJSC.h:
        * bridge/jni/jsc/JavaInstanceJSC.cpp:
        * bridge/jni/jsc/JavaInstanceJSC.h:
        * loader/FrameLoaderClient.h:

2010-05-05  Alejandro G. Castro  <alex@igalia.com>

        Reviewed by Xan Lopez.

        Fixed the gobject introspection compilation with the new DOM
        bindings, we needed to add DOM objects.

        * GNUmakefile.am:

2010-05-06  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        drop support for sessionStorage in sandbox iframes
        https://bugs.webkit.org/show_bug.cgi?id=38151

        This patch causes us to throw a security exception when a sandboxed
        iframe attempts to access sessionStorage, matching our behavior for
        localStorage.  The letter of the spec asks us to create a separate
        storage area for each unique origin.  We might want to do that in a
        future patch, but throwing a security error seems like a safe move now.

        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::sessionStorage):
        (WebCore::DOMWindow::localStorage):
        * page/DOMWindow.h:
        * page/DOMWindow.idl:
        * page/SecurityOrigin.h:
        (WebCore::SecurityOrigin::canAccessSessionStorage):
        * storage/StorageEventDispatcher.cpp:
        (WebCore::StorageEventDispatcher::dispatch):

2010-05-06  Andy Estes  <aestes@apple.com>

        Reviewed by Maciej Stachowiak.

        Allow forms submitting to target="_blank" to open popups if the submission
        originated from a user gesture.

        https://bugs.webkit.org/show_bug.cgi?id=37335
        <rdar://problem/7884980>

        Test: fast/events/popup-allowed-from-gesture-initiated-form-submit.html

        * bindings/js/ScriptController.cpp:
        (WebCore::ScriptController::processingUserGesture): If no DOM event is
        being processed, consult UserGestureIndicator to determine return value.
        * bindings/js/ScriptController.h: Moved the logic of processingUserGestureEvent()
        into processingUserGesture().

2010-05-06  Xan Lopez  <xlopez@igalia.com>

        Rubber-stamped by Eric Seidel.

        [GTK] Refactor GenerateProperties in CodeGenerationGObject.pm
        https://bugs.webkit.org/show_bug.cgi?id=38577

        Thinko caught while refactoring, $custom variable was not
        initialized.

        * bindings/scripts/CodeGeneratorGObject.pm:
        * bindings/scripts/test/GObject/WebKitDOMTestObj.cpp:
        (webkit_dom_test_obj_set_property):
        (webkit_dom_test_obj_get_property):
        (webkit_dom_test_obj_class_init):

2010-05-06  Xan Lopez  <xlopez@igalia.com>

        Rubber-stamped by Eric Seidel.

        [GTK] Refactor GenerateProperties in CodeGenerationGObject.pm
        https://bugs.webkit.org/show_bug.cgi?id=38577

        Refactor GenerateProperty out of GenerateProperties. This is in
        preparation for EventListeren attributes, which won't generate
        normal GObject properties.

        * bindings/scripts/CodeGeneratorGObject.pm:

2010-05-06  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Joseph Pecoraro.

        Web Inspector: follow up to linkify event listeners.

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

        * bindings/js/ScriptEventListener.cpp:
        (WebCore::eventListenerHandlerLocation):
        * bindings/v8/ScriptEventListener.cpp:
        (WebCore::eventListenerHandlerLocation):
        * inspector/front-end/ElementsPanel.js:
        (WebInspector.ElementsPanel.prototype.linkifyNodeReference):
        * inspector/front-end/EventListenersSidebarPane.js:

2010-05-05  Charles Wei  <charles.wei@torchmobile.com.cn>

        Reviewed by George Staikos

        https://bugs.webkit.org/show_bug.cgi?id=37848
        This patch adds WCSS -wap-input-format and -wap-input-required support to WebKit

        Tests: fast/wcss/wap-input-format.xhtml
               fast/wcss/wap-input-required.xhtml

        * css/CSSParser.cpp:
        (WebCore::CSSParser::parseValue):
        (WebCore::CSSParser::parseWCSSInputProperty):
        * css/CSSParser.h:
        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::applyProperty):
        * css/WCSSPropertyNames.in:
        * dom/InputElement.cpp:
        (WebCore::InputElement::sanitizeValue):
        (WebCore::InputElement::handleBeforeTextInsertedEvent):
        (WebCore::InputElementData::InputElementData):
        (WebCore::formatCodes):
        (WebCore::cursorPositionToMaskIndex):
        (WebCore::InputElement::isConformToInputMask):
        (WebCore::InputElement::validateInputMask):
        * dom/InputElement.h:
        (WebCore::InputElementData::inputFormatMask):
        (WebCore::InputElementData::setInputFormatMask):
        (WebCore::InputElementData::maxInputCharsAllowed):
        (WebCore::InputElementData::setMaxInputCharsAllowed):
        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::setWapInputFormat):
        * html/HTMLInputElement.h:
        (WebCore::HTMLInputElement::data):
        * wml/WMLInputElement.h:
        (WebCore::WMLInputElement::data):

2010-05-05  MORITA Hajime  <morrita@google.com>

        Reviewed by Darin Adler.

        https://bugs.webkit.org/show_bug.cgi?id=38150
        Refactoring: webkitEditableContentChangedEvent should be handled by the owner of appropriate the renderer.

        Moved a part of code chunk in HTMLFormControlElementWithState::defaultEventHandler()
        which accesses the renderer from foreign node, 
        to TextControlInnerTextElement::defaultEventHandler() which owns the renderer.
        
        No new tests. No behavioral change.

        * html/HTMLFormControlElement.cpp:
        (WebCore::HTMLFormControlElementWithState::defaultEventHandler):
        * html/HTMLFormControlElement.h:
        * html/HTMLInputElement.h:
        * html/HTMLTextAreaElement.h:
        * rendering/TextControlInnerElements.cpp:
        (WebCore::TextControlInnerTextElement::defaultEventHandler):

2010-05-05  Joseph Pecoraro  <joepeck@webkit.org>

        Reviewed by Timothy Hatcher.

        Web Inspector: Line Numbers should be Aligned with the Source Code Line
        https://bugs.webkit.org/show_bug.cgi?id=38593

        If there is a message bubble, such as an error message, in a source view
        the line number should be in line with the source code line, not centered
        between the source and bubble.

        * inspector/front-end/textViewer.css:
        (.webkit-line-number): added vertical-align: top

2010-05-05  Dan Bernstein  <mitz@apple.com>

        Fix the decelerated compositing build.

        * page/FrameView.cpp:
        (WebCore::FrameView::isEnclosedInCompositingLayer):
        * page/FrameView.h:

2010-05-05  Gavin Barraclough  <barraclough@apple.com>

        Reviewed by Darin Adler.

        Bug 38604 - workers-gc2 crashing on Qt

        This appears to be due to a couple of issues.
        (1) When the atomic string table is deleted it does not clear the 'inTable' bit
        on AtomicStrings - it implicitly assumes that all AtomicStrings have already
        been deleted at this point (otherwise they will crash in their destructor when
        they try to remove themselves from the atomic string table).
        (2) We don't fix the ordering in which WTF::WTFThreadData and
        WebCore::ThreadGlobalData are destructed.

        We should make sure that ThreadGlobalData is cleaned up before worker threads
        terminate and WTF::WTFThreadData is destroyed, and we should clear the inTable
        bit of members on atomic string table destruction.

        WTF changes (fix issue 2, above) - clean up the thread data on worker termination.

        * platform/ThreadGlobalData.cpp:
        (WebCore::ThreadGlobalData::~ThreadGlobalData):
        (WebCore::ThreadGlobalData::destroy):
        * platform/ThreadGlobalData.h:
        * workers/WorkerThread.cpp:
        (WebCore::WorkerThread::workerThread):

2010-05-05  Dan Bernstein  <mitz@apple.com>

        Reviewed by Simon Fraser.

        <rdar://problem/7932072> Iframes in composited layers don’t repaint correctly (affects Yahoo! Mail with Flash Player 10.1)
        https://bugs.webkit.org/show_bug.cgi?id=38427

        Test: compositing/iframes/iframe-in-composited-layer.html

        * WebCore.base.exp: Export FrameView::isEnclosedInCompositingLayer().
        * page/FrameView.cpp:
        (WebCore::FrameView::isEnclosedInCompositingLayer): Added this predicate.
        * page/FrameView.h:

2010-05-05  Chris Marrin  <cmarrin@apple.com>

        Reviewed by Simon Fraser.

        Got composited iframes showing up on Mac again
        https://bugs.webkit.org/show_bug.cgi?id=38565

        This was broken by http://trac.webkit.org/changeset/58798. That
        change connected iframes through the parent document to the root
        of the layer tree. That is correct for Windows, but not for Mac.
        So the places where the linkage is made were wrapped in 
        shouldPropagateCompositingToIFrameParent() calls, which is 
        always false for Mac.

        Test: compositing/iframes/composited-iframe-alignment.html

        * rendering/RenderLayerCompositor.cpp:Avoid doing composited iframe linkage on Mac
        (WebCore::RenderLayerCompositor::rebuildCompositingLayerTree):
        (WebCore::RenderLayerCompositor::didMoveOnscreen):
        (WebCore::RenderLayerCompositor::willMoveOffscreen):
        (WebCore::RenderLayerCompositor::ensureRootPlatformLayer):

2010-05-05  Alexey Proskuryakov  <ap@apple.com>

        Reviewed by Darin Adler.

        https://bugs.webkit.org/show_bug.cgi?id=38260
        <rdar://problem/7917548> Fix whitespace removing in deprecatedParseURL().

        Broken all the way since r4 (yes, that's a revision number).

        Test: http/tests/security/xss-DENIED-javascript-with-spaces.html

        * css/CSSHelper.cpp: (WebCore::deprecatedParseURL): Fixed loop conditions for remaining length.

2010-05-05  Chris Fleizach  <cfleizach@apple.com>

        Reviewed by Beth Dakin.

        Many AXUnknown showing up in the hierarchy
        https://bugs.webkit.org/show_bug.cgi?id=38607

        The RenderTableSection should not be an accessible element.

        Test: platform/mac/accessibility/parent-of-table-row-is-table.html

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

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

        Reviewed by Simon Hausmann.

        [Qt]Disable Qt Multimedia backend for HTML 5 Audio and Video elements
        Fall back to the Phonon backend until the release situation has been cleared up.

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

        Buildfix for QT_VERSION >= 0x040700 after r58810.

        * platform/graphics/MediaPlayer.cpp:

2010-05-05  Jian Li  <jianli@chromium.org>

        Reviewed by David Levin.

        XMLHttpRequestUpload events do not fire when sending a raw file or FormData object.
        https://bugs.webkit.org/show_bug.cgi?id=37771

        Test: http/tests/local/formdata/upload-events.html

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

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

        Reviewed by Simon Hausmann.

        [Qt] Qt port should use its own QUuid class to create UUID string.
        https://bugs.webkit.org/show_bug.cgi?id=38581

        * platform/UUID.cpp:
        (WebCore::createCanonicalUUIDString): Added PLATFORM(QT) case.

2010-05-05  Alexey Proskuryakov  <ap@apple.com>

        Roll out r58830 for breaking tests.

        Was: https://bugs.webkit.org/show_bug.cgi?id=38546
        Node.focus() fails to move focus from subframe properly

        * html/HTMLFrameElementBase.cpp:
        (WebCore::HTMLFrameElementBase::setFocus):

2010-05-05  Jian Li  <jianli@chromium.org>

        Reviewed by Adam Barth.

        Implement FileReader class.
        https://bugs.webkit.org/show_bug.cgi?id=38157

        This patch only contains the implementation of FileReader class as defined
        in the File API spec: http://www.w3.org/TR/file-upload/#dfn-filereader.

        New test will be added when a IDL is exposed and the FILE_READER is turned
        on.

        * GNUmakefile.am:
        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * dom/EventNames.h:
        * dom/EventTarget.cpp:
        (WebCore::EventTarget::toFileReader):
        * dom/EventTarget.h:
        * html/FileError.h:
        (WebCore::FileError::FileError):
        * html/FileReader.cpp: Added.
        * html/FileReader.h: Added.
        * html/FileStream.cpp:
        (WebCore::FileStream::FileStream):
        (WebCore::FileStream::openForRead):
        (WebCore::FileStream::close):
        (WebCore::FileStream::read):
        * html/FileStream.h:

2010-05-05  Steve Falkenburg  <sfalken@apple.com>

        Reviewed by Maciej Stachowiak.

        REGRESSION(r57969) Image decoder is repeatedly destroyed/created in CoreGraphics-based Windows WebKit
        https://bugs.webkit.org/show_bug.cgi?id=38595

        * platform/graphics/cg/ImageSourceCG.cpp:
        (WebCore::ImageSource::setData):

2010-05-05  Alexey Proskuryakov  <ap@apple.com>

        Reviewed by Adele Peterson.

        https://bugs.webkit.org/show_bug.cgi?id=38546
        Node.focus() fails to move focus from subframe properly

        Test: fast/frames/take-focus-from-iframe.html

        * html/HTMLFrameElementBase.cpp: (WebCore::HTMLFrameElementBase::setFocus): Don't clear
        focus if this frame doesn't have it. This can happen if page's and HTMLFrameElement's ideas
        of focused frame get out of sync temporarily.

2010-05-05  Alexey Proskuryakov  <ap@apple.com>

        Reviewed by Adele Peterson.

        https://bugs.webkit.org/show_bug.cgi?id=26824
        <rdar://problem/7018610> EventHandler can operate on a wrong frame if focus changes during
        keyboard event dispatch.

        EventHandler object is tied to a frame, so it's wrong for it to continue processing a keyboard
        event if focused frame changes between keydown and keypress.

        * manual-tests/focus-change-between-key-events.html: Added.

        * page/EventHandler.cpp: (WebCore::EventHandler::keyEvent): Bail out early if focused frame
        changes while dispatching keydown. Also made similar changes for Windows to maintain matching
        behavior, even though EventHandler was re-entered anyway due to WM_KEYDOWN and WM_CHAR being
        separate events.

2010-05-05  Steve Block  <steveblock@google.com>

        Reviewed by Adam Barth.

        MediaError.h is missing PassRefPtr.h include
        https://bugs.webkit.org/show_bug.cgi?id=38575

        No new tests, build fix only.

        * html/MediaError.h:

2010-05-05  Alexander Pavlov  <apavlov@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: Audits panel: Resource counters get reset when switching panels while reloading page
        https://bugs.webkit.org/show_bug.cgi?id=38579

        * inspector/front-end/AuditLauncherView.js:
        (WebInspector.AuditLauncherView.prototype.updateResourceTrackingState):
        (WebInspector.AuditLauncherView.prototype._updateResourceProgress):

2010-05-05  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Joseph Pecoraro.

        Web Inspector: Doubleclick on line number should not trigger source editing.

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

        * inspector/front-end/TextViewer.js:
        (WebInspector.TextViewer.prototype._handleDoubleClick):

2010-05-05  Martin Robinson  <mrobinson@webkit.org>

        Reviewed by Gustavo Noronha.

        [GTK] Enable DOM clipboard and drag-and-drop access
        https://bugs.webkit.org/show_bug.cgi?id=30623

        Add support in the PasteboardHelper for images, in preparation for drag-and-drop data.

        No new tests as functionality has not changed.

        * platform/gtk/PasteboardHelper.cpp:
        (WebCore::PasteboardHelper::fillSelectionData): Add support for images here.
        (WebCore::PasteboardHelper::targetListForDataObject): Add support for images here.

2010-05-05  Stuart Morgan  <stuartmorgan@chromium.org>

        Reviewed by Darin Fisher.

        Add a "focused" parameter to Widget::setFocus, and updates Document
        so that Widget is informed of focus loss as well as focus gain.
        Changes all existing setFocus implementations so that they ignore
        the 'false' case, so no behavior is changed until individual
        platforms are updated to handle the new case (if they want to).

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

        * dom/Document.cpp:
        (WebCore::Document::setFocusedNode):
        * platform/Widget.h:
        * platform/android/WidgetAndroid.cpp:
        (WebCore::Widget::setFocus):
        * platform/chromium/WidgetChromium.cpp:
        (WebCore::Widget::setFocus):
        * platform/efl/WidgetEfl.cpp:
        (WebCore::Widget::setFocus):
        * platform/gtk/WidgetGtk.cpp:
        (WebCore::Widget::setFocus):
        * platform/haiku/WidgetHaiku.cpp:
        (WebCore::Widget::setFocus):
        * platform/mac/WidgetMac.mm:
        (WebCore::Widget::setFocus):
        * platform/qt/WidgetQt.cpp:
        (WebCore::Widget::setFocus):
        * platform/win/WidgetWin.cpp:
        (WebCore::Widget::setFocus):
        * platform/wx/WidgetWx.cpp:
        (WebCore::Widget::setFocus):
        * plugins/PluginView.h:
        * plugins/PluginViewNone.cpp:
        (WebCore::PluginView::setFocus):
        * plugins/gtk/PluginViewGtk.cpp:
        (WebCore::PluginView::setFocus):
        * plugins/mac/PluginViewMac.cpp:
        (WebCore::PluginView::setFocus):
        * plugins/qt/PluginViewQt.cpp:
        (WebCore::PluginView::setFocus):
        * plugins/symbian/PluginViewSymbian.cpp:
        (WebCore::PluginView::setFocus):
        * plugins/win/PluginViewWin.cpp:
        (WebCore::PluginView::setFocus):

2010-05-05  Steve Block  <steveblock@google.com>

        Reviewed by Pavel Feldman.

        Move V8 ScriptDebugServer::topStackFrame() to ScriptCallStack
        https://bugs.webkit.org/show_bug.cgi?id=38531

        ScriptCallStack::create() uses ScriptDebugServer::topStackFrame(), but ScriptDebugServer
        is guarded with ENABLE(JAVASCRIPT_DEBUGGER). This prevents ScriptCallStack from being
        built on platforms that do not define ENABLE(JAVASCRIPT_DEBUGGER).

        No new tests, build fix only.

        * bindings/v8/ScriptCallStack.cpp:
        (WebCore::ScriptCallStack::callLocation):
        (WebCore::ScriptCallStack::createUtilityContext): Helper for topStackFrame, moved from ScriptDebugServer
        (WebCore::ScriptCallStack::topStackFrame): Moved from ScriptDebugServer
        * bindings/v8/ScriptCallStack.h:
        (WebCore::ScriptCallStack::utilityContext): Helper for topStackFrame, moved from ScriptDebugServer
        * bindings/v8/ScriptDebugServer.cpp:
        * bindings/v8/ScriptDebugServer.h:

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

        Rubber-stamped by Simon Hausmann.

        [Qt] REGRESSION(r56869): WinCE build is broken
        https://bugs.webkit.org/show_bug.cgi?id=36929

        * WebCore.pro: LIBS += -lOle32 added.

2010-05-05  Simon Hausmann  <simon.hausmann@nokia.com>

        Reviewed by Tor Arne Vestbø.

        [Qt] Disable Qt Multimedia backend for HTML 5 Audio and Video elements

        Fall back to the Phonon backend until the release situation has been cleared up.

        * WebCore.pro:

2010-05-05  Ilya Tikhonovsky  <loislo@chromium.org>

        Reviewed by Pavel Feldman.

        WebInspector: Clickable links to resources should be used as 'details' part for the all suitable kinds of records.
        https://bugs.webkit.org/show_bug.cgi?id=38542

        * inspector/front-end/TimelinePanel.js:
        (WebInspector.TimelinePanel.prototype._innerAddRecordToTimeline):
        (WebInspector.TimelineRecordListRow):
        (WebInspector.TimelineRecordListRow.prototype.update):
        (WebInspector.TimelinePanel.FormattedRecord):
        (WebInspector.TimelinePanel.FormattedRecord.prototype._generatePopupContent):
        (WebInspector.TimelinePanel.FormattedRecord.prototype._getRecordDetails):
        (WebInspector.TimelinePanel.PopupContentHelper):
        (WebInspector.TimelinePanel.PopupContentHelper.prototype._createCell):
        (WebInspector.TimelinePanel.PopupContentHelper.prototype._appendTextRow):
        (WebInspector.TimelinePanel.PopupContentHelper.prototype._appendElementRow):
        (WebInspector.TimelinePanel.PopupContentHelper.prototype._appendLinkRow):

2010-05-05  Nikolas Zimmermann  <nzimmermann@rim.com>

        Not reviewed. Add missing files generated by "run-bindings-test", after the DOMTestCallback.idl addition.

        * bindings/scripts/test/GObject/WebKitDOMTestCallback.cpp: Added.
        (WebKit::kit):
        (webkit_dom_test_callback_callback_with_class1param):
        (webkit_dom_test_callback_callback_with_class2param):
        (webkit_dom_test_callback_callback_with_non_bool_return_type):
        (WebKit::wrapTestCallback):
        (WebKit::core):
        (webkit_dom_test_callback_finalize):
        (webkit_dom_test_callback_set_property):
        (webkit_dom_test_callback_get_property):
        (webkit_dom_test_callback_class_init):
        (webkit_dom_test_callback_init):
        * bindings/scripts/test/GObject/WebKitDOMTestCallback.h: Added.
        * bindings/scripts/test/GObject/WebKitDOMTestCallbackPrivate.h: Added.
        * bindings/scripts/test/ObjC/DOMTestCallback.h: Added.
        * bindings/scripts/test/ObjC/DOMTestCallback.mm: Added.
        (-[DOMTestCallback dealloc]):
        (-[DOMTestCallback finalize]):
        (-[DOMTestCallback callbackWithClass1Param:]):
        (-[DOMTestCallback callbackWithClass2Param:strArg:]):
        (-[DOMTestCallback callbackWithNonBoolReturnType:]):
        (-[DOMTestCallback customCallback:class6Param:]):
        (core):
        (kit):
        * bindings/scripts/test/ObjC/DOMTestCallbackInternal.h: Added.

2010-05-05  Joseph Pecoraro  <joepeck@webkit.org>

        Reviewed by Pavel Feldman.

        Web Inspector: FontView needs Cleanup
        https://bugs.webkit.org/show_bug.cgi?id=38567

        FontView was missing some of the newer practices for initialization
        that other Resource Views had. Also its width calculations could
        result in a single character wrapping. This is general cleanup.

        * inspector/front-end/FontView.js:
        (WebInspector.FontView): move initialization into contentTabSelected
        (WebInspector.FontView.prototype.contentTabSelected): handle initialization like other Resource Views
        (WebInspector.FontView.prototype.updateFontPreviewSize): use a narrower width to prevent text from widowing

2010-05-05  Dirk Schulze  <krit@webkit.org>

        Reviewed by Nikolas Zimmermann.

        SVG hit testing is *way* too slow
        https://bugs.webkit.org/show_bug.cgi?id=19312

        Use the cached stroke and fill boundaries in RenderPath as a heuristik to
        speed up SVG's hit testing.

        No new tests added.

        * rendering/RenderPath.cpp:
        (WebCore::RenderPath::fillContains):
        (WebCore::RenderPath::strokeContains):

2010-05-04  Dumitru Daniliuc  <dumi@chromium.org>

        Reviewed by Adam Barth.

        Auto-generate all Database callbacks.
        https://bugs.webkit.org/show_bug.cgi?id=38503

        * DerivedSources.cpp:
        * DerivedSources.make:
        * GNUmakefile.am:
        * WebCore.gypi:
        * WebCore.pri:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSBindingsAllInOne.cpp:
        * bindings/js/JSCustomSQLStatementCallback.cpp: Removed.
        * bindings/js/JSCustomSQLStatementCallback.h: Removed.
        * bindings/js/JSCustomSQLStatementErrorCallback.cpp:
        (WebCore::JSSQLStatementErrorCallback::handleEvent):
        * bindings/js/JSCustomSQLStatementErrorCallback.h: Removed.
        * bindings/js/JSCustomSQLTransactionCallback.cpp: Removed.
        * bindings/js/JSCustomSQLTransactionCallback.h: Removed.
        * bindings/js/JSCustomSQLTransactionErrorCallback.cpp: Removed.
        * bindings/js/JSCustomSQLTransactionErrorCallback.h: Removed.
        * bindings/js/JSDatabaseCallback.cpp: Removed.
        * bindings/js/JSDatabaseCallback.h: Removed.
        * bindings/js/JSDatabaseCustom.cpp:
        (WebCore::JSDatabase::changeVersion):
        (WebCore::createTransaction):
        * bindings/js/JSSQLTransactionCustom.cpp:
        (WebCore::JSSQLTransaction::executeSql):
        * bindings/scripts/CodeGeneratorJS.pm:
        * bindings/scripts/test/JS/JSTestCallback.cpp:
        * bindings/v8/custom/V8CustomSQLStatementCallback.cpp: Removed.
        * bindings/v8/custom/V8CustomSQLStatementCallback.h: Removed.
        * bindings/v8/custom/V8CustomSQLStatementErrorCallback.cpp:
        (WebCore::V8SQLStatementErrorCallback::handleEvent):
        * bindings/v8/custom/V8CustomSQLStatementErrorCallback.h: Removed.
        * bindings/v8/custom/V8CustomSQLTransactionCallback.cpp: Removed.
        * bindings/v8/custom/V8CustomSQLTransactionCallback.h: Removed.
        * bindings/v8/custom/V8CustomSQLTransactionErrorCallback.cpp: Removed.
        * bindings/v8/custom/V8CustomSQLTransactionErrorCallback.h: Removed.
        * bindings/v8/custom/V8DatabaseCallback.cpp: Removed.
        * bindings/v8/custom/V8DatabaseCallback.h: Removed.
        * bindings/v8/custom/V8DatabaseCustom.cpp:
        (WebCore::V8Database::changeVersionCallback):
        (WebCore::createTransaction):
        * bindings/v8/custom/V8SQLTransactionCustom.cpp:
        (WebCore::V8SQLTransaction::executeSqlCallback):
        * storage/DatabaseCallback.h:
        * storage/DatabaseCallback.idl: Added.
        * storage/SQLStatement.cpp:
        (WebCore::SQLStatement::performCallback):
        * storage/SQLStatementCallback.h:
        * storage/SQLStatementCallback.idl: Added.
        * storage/SQLStatementErrorCallback.idl: Added.
        * storage/SQLTransaction.cpp:
        (WebCore::SQLTransaction::deliverTransactionCallback):
        * storage/SQLTransactionCallback.h:
        * storage/SQLTransactionCallback.idl: Added.
        * storage/SQLTransactionErrorCallback.h:
        * storage/SQLTransactionErrorCallback.idl: Added.

2010-05-04  Chris Marrin  <cmarrin@apple.com>

        Reviewed by Simon Fraser.

        Made composited iframes work on Windows
        https://bugs.webkit.org/show_bug.cgi?id=32446
        
        This completes the work in http://trac.webkit.org/changeset/57919
        to create compositing layers in the parent document when an iframe has 
        a compositing layer. The parent document has a layer for the iframe 
        element and builds a layer tree to the page root. The layer tree for the
        iframe document is then parented to the iframe element's GraphicsLayer.
        
        The RenderLayerCompositor for the iframe document (which owns the
        root of the layer tree) now has a clippingLayer which is the 
        parent of the layer tree root so it can be clipped to the parent
        iframe's bounds, taking into account borders, padding, etc. in
        the parent iframe element.
        
        I also got rid of a no longer used function: RenderLayerCompositor::parentInRootLayer

        Test: compositing/iframes/composited-parent-iframe.html

        * rendering/RenderLayerBacking.cpp:Make calls to RenderLayerCompositor to set the clipping bounds for iframe content
        * rendering/RenderLayerCompositor.cpp:Hook the iframe content to the parent iframe element
        * rendering/RenderLayerCompositor.h:

2010-05-03  Alexey Proskuryakov  <ap@apple.com>

        Reviewed by Adam Barth.

        https://bugs.webkit.org/show_bug.cgi?id=38497
        <rdar://problem/7759438> Make sure that http URLs always have a host in SecurityOrigin

        This is a hardening fix, and behavior really depends on what an underlying networking layer
        does. So, no test.

        * page/SecurityOrigin.cpp:
        (WebCore::schemeRequiresAuthority): List schemes that need an authority for successful loading.
        (WebCore::SecurityOrigin::SecurityOrigin): Never let e.g. http origins with empty authorities
        have the same security origin.

2010-05-04  Zhenyao Mo  <zmo@google.com>

        Reviewed by Dimitri Glazkov.

        getFramebufferAttachmentParameter should return the original WebGLTexture/WebGLRenderbuffer instead of creating new ones sharing names.
        https://bugs.webkit.org/show_bug.cgi?id=38236

        * html/canvas/CanvasObject.h: Add type check functions.
        (WebCore::CanvasObject::isBuffer):
        (WebCore::CanvasObject::isFramebuffer):
        (WebCore::CanvasObject::isProgram):
        (WebCore::CanvasObject::isRenderbuffer):
        (WebCore::CanvasObject::isShader):
        (WebCore::CanvasObject::isTexture):
        * html/canvas/WebGLBuffer.h: Add type check functions.
        (WebCore::WebGLBuffer::isBuffer):
        * html/canvas/WebGLFramebuffer.h: Add type check functions.
        (WebCore::WebGLFramebuffer::isFramebuffer):
        * html/canvas/WebGLProgram.h: Add type check functions.
        (WebCore::WebGLProgram::isProgram):
        * html/canvas/WebGLRenderbuffer.cpp: remove constructor using existing name.
        * html/canvas/WebGLRenderbuffer.h: Add type check functions; remove constructor using existing name.
        (WebCore::WebGLRenderbuffer::isRenderbuffer):
        * html/canvas/WebGLRenderingContext.cpp:
        (WebCore::WebGLRenderingContext::getFramebufferAttachmentParameter): Return original Texture/Renderbuffer instead of creating new ones.
        (WebCore::WebGLRenderingContext::findTexture): Find a WebGLTexture using a name.
        (WebCore::WebGLRenderingContext::findRenderbuffer): Find a WebGLRenderbuffer using a name.
        * html/canvas/WebGLRenderingContext.h: Add find* functions.
        * html/canvas/WebGLShader.h: Add type check functions.
        (WebCore::WebGLShader::isShader):
        * html/canvas/WebGLTexture.cpp: remove constructor using existing name.
        * html/canvas/WebGLTexture.h: Add type check functions; remove constructor using existing name.
        (WebCore::WebGLTexture::isTexture):

2010-05-04  Luiz Agostini  <luiz.agostini@openbossa.org>

        Reviewed by Simon Hausmann.

        [Qt] QT_MOBILE_THEME compile time flag
        https://bugs.webkit.org/show_bug.cgi?id=38439

        Replacing preprocessor conditional used in RenderThemeQt from Q_WS_MAEMO_5 to
        USE(QT_MOBILE_THEME).

        * WebCore.pro:
        * platform/qt/RenderThemeQt.cpp:
        (WebCore::RenderThemeQt::RenderThemeQt):
        (WebCore::RenderThemeQt::qStyle):
        (WebCore::RenderThemeQt::extraDefaultStyleSheet):
        (WebCore::RenderThemeQt::adjustMenuListButtonStyle):
        (WebCore::RenderThemeQt::setPaletteFromPageClientIfExists):
        * platform/qt/RenderThemeQt.h:

2010-05-04  Joseph Pecoraro  <joepeck@webkit.org>

        Reviewed by Dan Bernstein.

        SVG fonts trigger GlyphPage::fill with null font
        https://bugs.webkit.org/show_bug.cgi?id=38530

        SVG fonts do not use the glyph page cache. This change detects when
        attempting to fill a GlyphPage with an SVG font and indicates that
        the glyphs were not available.

        * platform/graphics/GlyphPageTreeNode.cpp:
        (WebCore::fill): helper method which handles attempts to fill a GlyphPage with SVG or non-SVG fonts
        (WebCore::GlyphPageTreeNode::initializePage): use the helper where appropriate

2010-05-04  Kent Tamura  <tkent@chromium.org>

        Reviewed by David Levin (and unofficially by Enrica Casucci).

        REGRESSION(r54368): Text drag-and-drop from input/textarea doesn't work
        if the text is like a URL
        https://bugs.webkit.org/show_bug.cgi?id=38374

        Since r54368, documentFragmentFromDragData() creates an <a> element
        with no anchor text for URL-like text dragged from input/textarea
        element. If such text is dropped to input/textarea element, the text
        is not inserted.
        To fix this problem, use the original text or the URL as an anchor
        text.

        Test: editing/pasteboard/drag-drop-url-text.html

        * page/DragController.cpp:
        (WebCore::documentFragmentFromDragData):

2010-05-04  Steve Block  <steveblock@google.com>

        Reviewed by Darin Adler.

        JavaInstanceJSC.cpp and JNIUtilityPrivate.cpp need to include jni_jsobject.h for jlong_to_pt() and ptr_to_jlong()
        https://bugs.webkit.org/show_bug.cgi?id=38525

        No new tests, build fix only.

        * bridge/jni/jni_jsobject.h: Guard Mac-specific code with PLATFORM(MAC)
        * bridge/jni/jsc/JNIUtilityPrivate.cpp: Include jni_jsobject.h
        * bridge/jni/jsc/JavaInstanceJSC.cpp: Include jni_jsobject.h

2010-05-04  Steve Block  <steveblock@google.com>

        Reviewed by Darin Adler.

        New FileSystemPOSIX functions cause linker errors on Android
        https://bugs.webkit.org/show_bug.cgi?id=38521

        No new tests, build fix only.

        * platform/android/FileSystemAndroid.cpp: Remove closeFile, which is provided in FileSystemPOSIX.cpp
        * platform/posix/FileSystemPOSIX.cpp: Guard writeToFile with !PLATFORM(ANDROID)

2010-05-04  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Timothy Hatcher.

        Web Inspector: restore main and sidebar scroller positions
        when switching between panels.

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

        * inspector/front-end/ElementsPanel.js:
        (WebInspector.ElementsPanel.prototype.elementsToRestoreScrollPositionsFor):
        * inspector/front-end/Panel.js:
        (WebInspector.Panel.prototype.show):
        (WebInspector.Panel.prototype.hide):
        (WebInspector.Panel.prototype.elementsToRestoreScrollPositionsFor):
        (WebInspector.Panel.prototype._storeScrollPositions):
        (WebInspector.Panel.prototype._restoreScrollPositions):
        * inspector/front-end/ResourcesPanel.js:
        (WebInspector.ResourcesPanel.prototype.elementsToRestoreScrollPositionsFor):
        * inspector/front-end/ScriptsPanel.js:
        (WebInspector.ScriptsPanel.prototype.elementsToRestoreScrollPositionsFor):

2010-05-04  Steven Lai  <steven_lai@asia.apple.com>

        Reviewed by Darin Adler.

        https://bugs.webkit.org/show_bug.cgi?id=37900
        <rdar://problem/7806164> cloneNode() does not preserve z-index with more than six digits 

        Tests: fast/dom/HTMLInputElement/clone-input-checked.html
               fast/dom/clone-node-z-index.html

        * dom/Element.cpp: undid the order change of calling copyNonAttributeProperties() before setAttributes()
        (WebCore::Element::cloneElementWithoutChildren): uncheck the previous radio button in the same radio button group only when the checked radio box is appended to the dom tree
        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::updateCheckedRadioButtons):
        (WebCore::HTMLInputElement::attach):
        (WebCore::HTMLInputElement::setChecked):
        * html/HTMLInputElement.h:

2010-04-29  John Gregg  <johnnyg@google.com>

        Reviewed by Dmitry Titov.

        notifications should have dir and replaceId attributes.
        Note that tests are only enabled in Chromium, skipped elsewhere
        since notifications aren't implemented.
        https://bugs.webkit.org/show_bug.cgi?id=38336

        Tests: fast/notifications/notifications-replace.html
               fast/notifications/notifications-rtl.html

        * notifications/Notification.h:
        (WebCore::Notification::dir):
        (WebCore::Notification::setDir):
        (WebCore::Notification::replaceId):
        (WebCore::Notification::setReplaceId):
        * notifications/Notification.idl:

2010-05-04  Alejandro G. Castro  <alex@igalia.com>

        Reviewed by Xan Lopez.

        Fixed error defining the float/double minimum in the object
        properties, the smallest value of a float/double is
        -G_MAXDOUBLE/-G_MAXFLOAT.

        * bindings/scripts/CodeGeneratorGObject.pm:

2010-05-03  Joseph Pecoraro  <joepeck@webkit.org>

        Reviewed by Dan Bernstein.

        REGRESSION: Text clipped in absolutely positioned search inputs
        https://bugs.webkit.org/show_bug.cgi?id=38468

        Previously I incorrectly added x() and y() to the tx and ty positioning.
        This clips a search input like a text input, respecting the vertically
        centered text.

        * rendering/RenderTextControlSingleLine.cpp:
        (WebCore::RenderTextControlSingleLine::layout): only the Y changes, so change setLocation to setY
        (WebCore::RenderTextControlSingleLine::controlClipRect):

2010-05-04  Alexander Pavlov  <apavlov@chromium.org>

        Reviewed by Timothy Hatcher.

        Web Inspector: REGRESSION: Up/Down, PgUp/PgDown keys do not change numeric style properties
        https://bugs.webkit.org/show_bug.cgi?id=38516

        * inspector/front-end/StylesSidebarPane.js:
        (WebInspector.StylePropertyTreeElement.prototype):

2010-05-04  Ben Murdoch  <benm@google.com>

        Reviewed by Simon Hausmann.

        Crash in handleTouchEvent: using dangling node ptrs in hashmap
        https://bugs.webkit.org/show_bug.cgi?id=38514

        When navigating away from a page, if you have your finger still
        pressed and then lift it on the new page we see a crash if the
        node got deleted as we still have a dangling pointer in the
        m_originatingTouchPointTargets hashmap and try to use it as the
        receiver to dispatch a touchend event.

        Test: fast/events/touch/touch-stale-node-crash.html

        * page/EventHandler.cpp:
        (WebCore::EventHandler::clear): Clear the hashmap of touch targets.

2010-05-04  Joseph Pecoraro  <joepeck@webkit.org>

        Reviewed by Pavel Feldman.

        Web Inspector: Drawer Misbehaving when Docking / Undocking in Console Panel
        https://bugs.webkit.org/show_bug.cgi?id=38510

        * inspector/front-end/inspector.js:
        (WebInspector.set attached): resize the drawer after docking/undocking

2010-05-04  Laszlo Gombos  <laszlo.1.gombos@nokia.com>

        Unreviewed, build fix for Symbian.

        [Symbian] Build fix after r58598. 

        Use C99 integer types for the Symbian plugin
        implementation.

        No new tests, as there is no new functionality.

        * plugins/symbian/PluginPackageSymbian.cpp:
        (WebCore::PluginPackage::NPVersion):
        * plugins/symbian/PluginViewSymbian.cpp:
        (WebCore::PluginView::handlePostReadFile):

2010-05-04  Nikolas Zimmermann  <nzimmermann@rim.com>

        Reviewed by Dirk Schulze.

        Split SVGCharacterLayoutInfo in smaller pieces
        https://bugs.webkit.org/show_bug.cgi?id=38513

        Split SVGCharacterLayoutInfo into SVGCharacterLayoutInfo/SVGCharacterData and SVGTextChunkLayoutInfo.
        This is a preparation for more work in the text area.

        * Android.mk: Add SVGCharacterData.(cpp|h) and SVGTextChunkLayoutInfo.h to build.
        * GNUmakefile.am: Ditto.
        * WebCore.gypi: Ditto.
        * WebCore.pro: Ditto
        * WebCore.vcproj/WebCore.vcproj: Ditto.
        * WebCore.xcodeproj/project.pbxproj: Ditto.
        * rendering/SVGCharacterData.cpp: Copied from rendering/SVGCharacterLayoutInfo.cpp.
        * rendering/SVGCharacterData.h: Copied from rendering/SVGCharacterLayoutInfo.h.
        (WebCore::SVGChar::SVGChar):
        * rendering/SVGCharacterLayoutInfo.cpp:
        (WebCore::SVGCharacterLayoutInfo::isInitialLayout): Introduced new helper function to share code between addLayoutInformation/addStackContent.
        (WebCore::SVGCharacterLayoutInfo::addLayoutInformation): Use new helper function.
        (WebCore::SVGCharacterLayoutInfo::addStackContent): Ditto
        * rendering/SVGCharacterLayoutInfo.h:
        * rendering/SVGRootInlineBox.h: Include new files.
        * rendering/SVGTextChunkLayoutInfo.h: Copied from rendering/SVGCharacterLayoutInfo.h.

2010-05-04  Xan Lopez  <xlopez@igalia.com>

        Reviewed by Holger Freyther.

        [GTK] GObject DOM bindings
        https://bugs.webkit.org/show_bug.cgi?id=33590

        Use helper functions from CodeGenerator.pm to figure out whether a
        type is "fundamental" or not (basically whether it's anything
        other than a string or a non-pointer type).

        * bindings/scripts/CodeGeneratorGObject.pm:

2010-04-30  Alexander Pavlov  <apavlov@chromium.org>

        Reviewed by Yury Semikhatsky.

        Web Inspector: REGRESSION: Disabled style properties are absent in Styles sidebar after WebInspector is re-opened
        https://bugs.webkit.org/show_bug.cgi?id=38255

        Moved stylesheet-related mappings into a separate object stored
        in InspectorController rather than InspectorDOMAgent (which gets reset
        on every frontend [dis]connect).

        * GNUmakefile.am:
        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * inspector/InspectorCSSStore.cpp: Added.
        (WebCore::InspectorCSSStore::InspectorCSSStore):
        (WebCore::InspectorCSSStore::~InspectorCSSStore):
        (WebCore::InspectorCSSStore::reset):
        * inspector/InspectorCSSStore.h: Added.
        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::InspectorController):
        (WebCore::InspectorController::setFrontend):
        (WebCore::InspectorController::didCommitLoad):
        * inspector/InspectorController.h:
        * inspector/InspectorDOMAgent.cpp:
        (WebCore::InspectorDOMAgent::InspectorDOMAgent):
        (WebCore::InspectorDOMAgent::discardBindings):
        (WebCore::InspectorDOMAgent::applyStyleText):
        (WebCore::InspectorDOMAgent::setStyleText):
        (WebCore::InspectorDOMAgent::setStyleProperty):
        (WebCore::InspectorDOMAgent::toggleStyleEnabled):
        (WebCore::InspectorDOMAgent::setRuleSelector):
        (WebCore::InspectorDOMAgent::addRule):
        (WebCore::InspectorDOMAgent::bindStyle):
        (WebCore::InspectorDOMAgent::bindRule):
        (WebCore::InspectorDOMAgent::buildObjectForStyle):
        (WebCore::InspectorDOMAgent::buildObjectForRule):
        * inspector/InspectorDOMAgent.h:
        (WebCore::InspectorDOMAgent::create):
        (WebCore::InspectorDOMAgent::cssStore):

2010-05-04  Mikhail Naganov  <mnaganov@chromium.org>

        Reviewed by Pavel Feldman.

        Display "Recording..." item when recording an user-initiated CPU profile.

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

        * English.lproj/localizedStrings.js:
        * inspector/front-end/ProfilesPanel.js:
        (WebInspector.ProfilesPanel.prototype.addProfileHeader):
        (WebInspector.ProfilesPanel.prototype.removeProfileHeader):
        (WebInspector.ProfilesPanel.prototype.showProfile):
        * inspector/front-end/inspector.js:
        (WebInspector.setRecordingProfile):

2010-05-04  Tucker Jay  <jay.tucker@nokia.com>

        Reviewed by Holger Freyther.

        Animated GIF images does not animate 10x as expected by default.
        https://bugs.webkit.org/show_bug.cgi?id=36818

        Added test case to existing manual test to test the
        fixed functionality.

        * manual-tests/qt/qt-10loop-anim.gif: Added.
        * manual-tests/qt/qt-gif-test.html:
        * platform/graphics/qt/ImageDecoderQt.cpp:
        (WebCore::ImageDecoderQt::repetitionCount):

2010-05-04  Dirk Schulze  <krit@webkit.org>

        Unreviewed sort of XCodes project file.

        * WebCore.xcodeproj/project.pbxproj:

2010-05-03  Steven Lai  <steven_lai@asia.apple.com>

        Reviewed by Brady Eidson.

        Reverted hashchange() event back to async.
        (This change does not update HashChangeEvent to its new proposed interface)
        https://bugs.webkit.org/show_bug.cgi?id=36201
        rdar://problem/7780794
        rdar://problem/7761278 (partial fix)

        Tests: fast/loader/hashchange-event-async.html

        * dom/Document.cpp: reverted hashchange() event back to async
        (WebCore::Document::enqueueHashchangeEvent):

2010-05-03  Holger Hans Peter Freyther  <zecke@selfish.org>

        Rubber-stamped by Xan Lopez.

        [Cairo,WX] Stop leaking a FontPlatformData.
        https://bugs.webkit.org/show_bug.cgi?id=37500

        Stephan Aßmus pointed out that the pango font backend
        is leaking memory and fixed it. The WX font backend
        and the Cairo/Fontconfig backend have the same snippet
        of code and are leaking memory as well. This commit is
        fixing that.

        * platform/graphics/cairo/SimpleFontDataCairo.cpp:
        (WebCore::SimpleFontData::smallCapsFontData):
        * platform/graphics/wx/SimpleFontDataWx.cpp:
        (WebCore::SimpleFontData::smallCapsFontData):

2010-05-03  James Robinson  <jamesr@chromium.org>

        Reviewed by Eric Seidel.

        Clean up a few compiler warnings
        https://bugs.webkit.org/show_bug.cgi?id=38073

        * html/TextMetrics.h:
        (WebCore::TextMetrics::width):
        * rendering/style/StyleRareInheritedData.h:
        * rendering/style/StyleRareNonInheritedData.h:

2010-05-02  Dumitru Daniliuc  <dumi@chromium.org>

        Reviewed by Adam Barth.

        Add the ability to auto-generate callbacks to all code generators.
        https://bugs.webkit.org/show_bug.cgi?id=38414

        * bindings/scripts/CodeGeneratorJS.pm:
        * bindings/scripts/CodeGeneratorV8.pm:
        * bindings/scripts/test/JS/JSTestCallback.cpp: Added.
        (WebCore::JSTestCallback::JSTestCallback):
        (WebCore::JSTestCallback::~JSTestCallback):
        (WebCore::JSTestCallback::callbackWithClass1Param):
        (WebCore::JSTestCallback::callbackWithClass2Param):
        * bindings/scripts/test/JS/JSTestCallback.h: Added.
        (WebCore::JSTestCallback::create):
        * bindings/scripts/test/V8/JSTestCallback.cpp: Added.
        (WebCore::V8TestCallback::V8TestCallback):
        (WebCore::V8TestCallback::~V8TestCallback):
        (WebCore::V8TestCallback::callbackWithClass1Param):
        (WebCore::V8TestCallback::callbackWithClass2Param):
        * bindings/scripts/test/V8/V8TestCallback.h: Added.
        (WebCore::V8TestCallback::create):
        * bindings/scripts/test/TestCallback.idl: Added.

2010-05-03  Kevin Watters  <kevinwatters@gmail.com>

        Reviewed by Kevin Ollivier.

        [wx] Build and use Mac's ComplexTextController to support complex text in wx.
        https://bugs.webkit.org/show_bug.cgi?id=38482

        * platform/graphics/FloatSize.h:
        * platform/graphics/GlyphBuffer.h:
        (WebCore::GlyphBuffer::advanceAt):
        (WebCore::GlyphBuffer::add):
        * platform/graphics/SimpleFontData.h:
        (WebCore::SimpleFontData::getNSFont):
        * platform/graphics/mac/ComplexTextController.cpp:
        * platform/graphics/mac/ComplexTextController.h:
        * platform/graphics/wx/FontCacheWx.cpp:
        (WebCore::FontCache::getFontDataForCharacters):
        (WebCore::FontCache::getLastResortFallbackFont):
        * platform/graphics/wx/FontPlatformData.h:
        (toCTFontRef):
        (WebCore::FontPlatformData::FontPlatformData):
        (WebCore::FontPlatformData::allowsLigatures):
        * platform/graphics/wx/FontPlatformDataWx.cpp:
        (WebCore::FontPlatformData::FontPlatformData):
        (WebCore::FontPlatformData::cgFont):
        * platform/graphics/wx/FontPlatformDataWxMac.mm: Added.
        (WebCore::FontPlatformData::nsFont):
        (WebCore::FontPlatformData::cacheNSFont):
        * platform/graphics/wx/FontWx.cpp:
        (WebCore::Font::canReturnFallbackFontsForComplexText):
        (WebCore::Font::selectionRectForComplexText):
        (WebCore::Font::drawComplexText):
        (WebCore::Font::floatWidthForComplexText):
        (WebCore::Font::offsetForPositionForComplexText):
        * platform/graphics/wx/SimpleFontDataWx.cpp:
        (WebCore::SimpleFontData::platformInit):
        (WebCore::SimpleFontData::containsCharacters):
        (WebCore::SimpleFontData::platformWidthForGlyph):
        * platform/wx/wxcode/fontprops.h:
        * platform/wx/wxcode/mac/carbon/fontprops.mm:
        (wxFontContainsCharacters):
        (GetTextExtent):
        * platform/wx/wxcode/mac/carbon/non-kerned-drawing.cpp:
        (WebCore::drawTextWithSpacing):
        * platform/wx/wxcode/win/fontprops.cpp:
        (wxFontContainsCharacters):
        * wscript:

2010-05-03  Abhishek Arya  <inferno@chromium.org>

        Reviewed by Adam Barth.

        Add support for controlling clipboard access from javascript.
        Clipboard access from javascript is disabled by default.
        https://bugs.webkit.org/show_bug.cgi?id=27751

        Test: editing/execCommand/clipboard-access.html

        * WebCore.base.exp:
        * editing/EditorCommand.cpp:
        (WebCore::supportedCopyCut):
        (WebCore::supportedPaste):
        (WebCore::createCommandMap):
        * page/Settings.cpp:
        (WebCore::Settings::Settings):
        (WebCore::Settings::setJavaScriptCanAccessClipboard):
        * page/Settings.h:
        (WebCore::Settings::javaScriptCanAccessClipboard):

2010-05-03  Alexey Proskuryakov  <ap@apple.com>

        Reviewed by Adam Barth.

        https://bugs.webkit.org/show_bug.cgi?id=38285
        <rdar://problem/7903453> REGRESSION: Javascript command window.open does not work in empty tab

        Cannot be tested, because new windows created in DRT always have an opener, and thus inherit
        its security origin. Only new windows and tabs created by browser chrome had this problem.

        * loader/FrameLoader.cpp: (WebCore::FrameLoader::init): Moved updateSandboxFlags() call to
        the beginning, so that an initial document would get correct flags.

2010-05-03  Noam Rosenthal  <noam.rosenthal@nokia.com>

        Reviewed by Darin Adler.

        WebGL compile issue.
        Added ExceptionCode.h to JSWebGLArrayBufferConstructor.cpp, for some reason it was missing.
        https://bugs.webkit.org/show_bug.cgi?id=38453

        No new tests: compile fix.

        * bindings/js/JSWebGLArrayBufferConstructor.cpp:

2010-05-03  Eric Seidel  <eric@webkit.org>

        Unreviewed, rolling out r58685.
        http://trac.webkit.org/changeset/58685
        https://bugs.webkit.org/show_bug.cgi?id=38461

        Broke a test on Gtk

        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:
        (WebCore::MediaPlayerPrivateGStreamer::updateStates):

2010-05-03  Yael Aharon  <yael.aharon@nokia.com>

        Reviewed by Darin Adler.

        Use HTML5 number parsing in HTMLProgressElement
        https://bugs.webkit.org/show_bug.cgi?id=38434

        Use parseToDoubleForNumberType instead of toDouble.
        Throw an exception when the number is NaN or Infinity.

        * html/HTMLProgressElement.cpp:
        (WebCore::HTMLProgressElement::value):
        (WebCore::HTMLProgressElement::setValue):
        (WebCore::HTMLProgressElement::max):
        (WebCore::HTMLProgressElement::setMax):
        * html/HTMLProgressElement.h:
        * html/HTMLProgressElement.idl:

2010-05-03  Jens Alfke  <snej@chromium.org>

        Reviewed by Darin Fisher.

        [chromium] Add "willSendSubmitEvent" hook to WebFrameClient and FrameLoaderClient
        https://bugs.webkit.org/show_bug.cgi?id=38397

        No tests (functionality is exposed only through native WebKit API.)

        * html/HTMLFormElement.cpp:
        (WebCore::HTMLFormElement::prepareSubmit):  Call frame loader's dispatchWillSendSubmitEvent
        * loader/EmptyClients.h:
        * loader/FrameLoaderClient.h:
        (WebCore::FrameLoaderClient::dispatchWillSendSubmitEvent):  New empty method

2010-05-03  Philippe Normand  <pnormand@igalia.com>

        Reviewed by Eric Carlson.

        [GStreamer] forgotten call to durationChanged in updateStates()
        https://bugs.webkit.org/show_bug.cgi?id=38461

        Notify MediaPlayer if duration is known after playback started.

        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:
        (WebCore::MediaPlayerPrivateGStreamer::updateStates):

2010-05-03  Ryuan Choi  <ryuan.choi@gmail.com>

        Reviewed by Darin Adler.

        fixing build break due to clearWatch() when Geolocation feature is
        disabled.

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

        no test because this is a build fix only

        * page/Geolocation.cpp:
        (WebCore::Geolocation::clearWatch):

2010-05-03  Stephan Aßmus  <superstippi@gmx.de>

        Reviewed by Holger Freyther.

        [Gtk] Fix leaking the FontPlatformData instance used to create the the
        small caps font data.
        https://bugs.webkit.org/show_bug.cgi?id=37500

        No new tests needed.

        * platform/graphics/gtk/SimpleFontDataPango.cpp:
        (WebCore::SimpleFontData::smallCapsFontData):
            - Use a stack allocated FontPlatformData instead of a heap allocated
              one that is never freed.

2010-05-03  Jarkko Sakkinen  <jarkko.j.sakkinen@gmail.com>

        Reviewed by Simon Hausmann.

        [Qt] GraphicsLayer: support webGL
        https://bugs.webkit.org/show_bug.cgi?id=35388

        Added support GraphicsContext3D to GraphicsLayer.
        Added paint method to GraphicsContext3D for Qt platform that
        uses drawTexture() when QGLWidget is used as viewport of
        QGraphicsWebView.
        Fine-tuned texture and handling and image to texture conversion to
        work also when drawTexture() blitting is used.

        * platform/graphics/GraphicsContext3D.h:
        * platform/graphics/qt/GraphicsContext3DQt.cpp:
        (WebCore::GraphicsContext3DInternal::GraphicsContext3DInternal):
        (WebCore::GraphicsContext3D::beginPaint):
        (WebCore::GraphicsContext3D::paint):
        (WebCore::GraphicsContext3D::texImage2D):
        (WebCore::GraphicsContext3D::texSubImage2D):
        (WebCore::GraphicsContext3D::getImageData):
        * platform/graphics/qt/GraphicsLayerQt.cpp:
        (WebCore::GraphicsLayerQtImpl::):
        (WebCore::GraphicsLayerQtImpl::GraphicsLayerQtImpl):
        (WebCore::GraphicsLayerQtImpl::paint):
        (WebCore::GraphicsLayerQtImpl::flushChanges):
        (WebCore::GraphicsLayerQt::setContentsToGraphicsContext3D):
        (WebCore::GraphicsLayerQt::setGraphicsContext3DNeedsDisplay):
        * platform/graphics/qt/GraphicsLayerQt.h:

2010-05-03  Janne Koskinen  <janne.p.koskinen@digia.com>

        Reviewed by Simon Hausmann.

        [Qt] Fix qtlibraryinfix not to contain space

        List catenation with += adds whitespace cutting the infix
        from the final target.

        * WebCore.pro:

2010-05-03  Tor Arne Vestbø  <tor.arne.vestbo@nokia.com>

        Reviewed by Simon Hausmann.

        [Qt] Fix rendering of <button> elements on Mac OS X

        The <button> element has ButtonPart appearance, not PushButton part,
        so we have to include ButtonPart when we decide if we should draw the
        button as raised on Mac OS X.

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

        * platform/qt/RenderThemeQt.cpp:
        (WebCore::RenderThemeQt::initializeCommonQStyleOptions):

2010-04-30  Philippe Normand  <pnormand@igalia.com>

        Reviewed by Eric Seidel.

        [GStreamer] endless loop after playback ended
        https://bugs.webkit.org/show_bug.cgi?id=38384

        At playback end ensure duration() will return a valid duration if
        we managed to calculate it based on current position.

        Test: media/video-duration-known-after-eos.html

        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:
        (WebCore::MediaPlayerPrivateGStreamer::didEnd):

2010-05-03  Tor Arne Vestbø  <tor.arne.vestbo@nokia.com>

        [Qt] Fix build break on Mac OS X

        * plugins/mac/PluginPackageMac.cpp: Use correct type
        * WebCore.pro: Remove duplicate symbol, we now have a Qt implementation

2010-05-03  Thomas Zander <t.zander@nokia.com>

        Reviewed by Simon Hausmann.

        [Qt] Fix library infix usage when compiling inside of Qt

        Don't apply the infix when building inside Qt, as that's done through the
        inclusion of qbase.pri.

        * WebCore.pro:

2010-05-02  Dan Bernstein  <mitz@apple.com>

        Reviewed by Simon Fraser.

        Another case of <rdar://problem/7552959> REGRESSION: Infinite recursion in Position::getInlineBoxAndOffset()
        https://bugs.webkit.org/show_bug.cgi?id=38445

        Test: editing/selection/mixed-editability-11.html

        * dom/Position.cpp:
        (WebCore::downstreamIgnoringEditingBoundaries): Added. Returns the furthest visually equivalent
        position downstream, crossing any editability boundaries.
        (WebCore::upstreamIgnoringEditingBoundaries): Similarly for upstream.
        (WebCore::Position::getInlineBoxAndOffset): Changed the logic for finding an inline box for positions
        whose node is a block flow. Instead of traversing the DOM, advance downstream or upstream as far as
        possible, crossing any editability boudaries. Infinite recursion is avoided by advancing all the way
        and checking that the new position is different from the starting position. Also replaced the specific
        test for buttons with the generic and more comprehensive canHaveChildrenForEditing().

2010-05-02  Tasuku Suzuki  <tasuku.suzuki@nokia.com>

        Reviewed by Simon Hausmann.

        [Qt] Fix compilation with QT_NO_BEARERMANAGEMENT
        https://bugs.webkit.org/show_bug.cgi?id=38324

        * platform/network/NetworkStateNotifier.h:
        * platform/network/qt/NetworkStateNotifierQt.cpp:

2010-04-29  Janne Koskinen  <janne.p.koskinen@digia.com>

        Reviewed by Simon Hausmann.

        [Qt] QtWebKit versioning added
        https://bugs.webkit.org/show_bug.cgi?id=37207

        QtWebkit releases separated from Qt release cycle.

        * WebCore.pro:

2010-05-02  Joseph Pecoraro  <joepeck@webkit.org>

        Reviewed by Timothy Hatcher.

        Web Inspector: Old Style trimWhitespace() should be trim()
        https://bugs.webkit.org/show_bug.cgi?id=38441

        * inspector/front-end/SourceFrame.js:
        (WebInspector.SourceFrame.prototype._evalSelectionInCallFrame):

2010-05-02  Tasuku Suzuki  <tasuku.suzuki@nokia.com>

        Reviewed by Simon Hausmann.

        [Qt] Fix compilation with QT_NO_LINEEDIT
        https://bugs.webkit.org/show_bug.cgi?id=38324

        * platform/qt/RenderThemeQt.cpp:
        (WebCore::RenderThemeQt::~RenderThemeQt):
        (WebCore::RenderThemeQt::findFrameLineWidth):

2010-05-02  Pavel Feldman  <pfeldman@chromium.org>

        Not reviewed: Touch inspector controller to kick windows tests.

        * inspector/InspectorController.cpp:

2010-05-02  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Timothy Hatcher.

        Web Inspector: IMG nodes are being added to the DOM tree late, sometimes hiding the revealed element.

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

        * inspector/front-end/ElementsTreeOutline.js:
        (WebInspector.ElementsTreeOutline.prototype._onmousemove):
        (WebInspector.ElementsTreeElement.prototype._createTooltipForNode.setTooltip):
        (WebInspector.ElementsTreeElement.prototype._createTooltipForNode):
        (WebInspector.ElementsTreeElement.prototype.updateTitle):
        (WebInspector.ElementsTreeElement.prototype._attributeHTML):
        ():

2010-05-02  Dirk Schulze  <krit@webkit.org>

        Reviewed by Nikolas Zimmermann.

        SVG hkern implementation incomplete
        https://bugs.webkit.org/show_bug.cgi?id=38407

        Test: svg/text/text-hkern.svg

        The current SVG hkern implementation is incomplete and partly wrong. We pass the ACID3 test
        by accident.
        The new implementation supports all glyph and unicode combinations that are allowed by the Spec
        and fixes various of bugs. The parser moved from SVGFontElement to the general parsing code in
        SVGParserUtilities.
        Some clean-up makes the code more readable and reuseable for the upcoming vkern implementation.
        hkern support for text on path is missing and will be added by a following patch.
        Unicode strings of hkern elements are just parsed once and not on every glyph again anymore.

        * rendering/SVGRootInlineBox.cpp:
        (WebCore::calculateCSSKerning):
        (WebCore::applySVGKerning):
        (WebCore::SVGRootInlineBox::buildLayoutInformationForTextBox):
        * svg/SVGFontElement.cpp:
        (WebCore::stringMatchesUnicodeRange):
        (WebCore::stringMatchesGlyphName):
        (WebCore::matches):
        (WebCore::SVGFontElement::getHorizontalKerningPairForStringsAndGlyphs):
        * svg/SVGFontElement.h:
        * svg/SVGHKernElement.cpp:
        (WebCore::SVGHKernElement::buildHorizontalKerningPair):
        * svg/SVGHKernElement.h:
        * svg/SVGParserUtilities.cpp:
        (WebCore::parseGlyphName):
        (WebCore::parseUnicodeRange):
        (WebCore::parseKerningUnicodeString):
        * svg/SVGParserUtilities.h:

2010-05-02  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Timothy Hatcher.

        Web Inspector: debugger shortcuts are processed twice if source frame has focus.

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

        * inspector/front-end/SourceFrame.js:
        (WebInspector.SourceFrame):
        (WebInspector.SourceFrame.prototype._createViewerIfNeeded):

2010-05-02  Jarkko Sakkinen  <jarkko.j.sakkinen@gmail.com>

        Reviewed by Eric Seidel.

        [Qt] Build error in GraphicsContext3DQt.cpp
        https://bugs.webkit.org/show_bug.cgi?id=38382

        Removed duplicate implementation of isGLES2Compliant from
        GraphicsContext3DQt.cpp. Removed deprecated API stuff for
        texImage2D/texSubImage2D.
        * platform/graphics/qt/GraphicsContext3DQt.cpp:

2010-05-02  Garret Kelly  <gdk@chromium.org>

        Reviewed by David Levin.

        Make the Touch RuntimeEnabledFeature disabled by default.
        https://bugs.webkit.org/show_bug.cgi?id=38392

        * bindings/generic/RuntimeEnabledFeatures.cpp: Disable the Touch feature by default.

2010-05-02  Michael Nordman  <michaeln@google.com>

        Reviewed by Dmitry Titov.

        Define two new ResourceRequestBase TargetTypes for worker and shared worker
        main resources. Use the new target types where appropiate. Add logic to marshal
        the target type specified by requests initiated on a background worker thread.

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

        No new tests. This doesn't have script visible artifacts.

        * platform/network/ResourceRequestBase.cpp: marshal the values
        (WebCore::ResourceRequestBase::adopt):
        (WebCore::ResourceRequestBase::copyData):
        * platform/network/ResourceRequestBase.h:  define the types
        (WebCore::ResourceRequestBase::):
        * workers/DefaultSharedWorkerRepository.cpp: use TargetIsSharedWorker
        (WebCore::SharedWorkerScriptLoader::load):
        * workers/Worker.cpp: use TargetIsWorker
        (WebCore::Worker::Worker):
        * workers/WorkerContext.cpp: use TargetIsScript for importScripts
        (WebCore::WorkerContext::importScripts):
        * workers/WorkerScriptLoader.cpp: add a data member for the target type
        (WebCore::WorkerScriptLoader::WorkerScriptLoader):
        (WebCore::WorkerScriptLoader::createResourceRequest):
        * workers/WorkerScriptLoader.h:

2010-05-02  Noam Rosenthal  <noam.rosenthal@nokia.com>

        Reviewed by Adele Peterson.

        Webkit doesn't compile with 3D-canvas enabled and video disabled
        https://bugs.webkit.org/show_bug.cgi?id=38297

        Added a #ifdef ENABLE(VIDEO) to WebGL code

        No new tests: compile fix.

        * bindings/js/JSWebGLRenderingContextCustom.cpp:
        (WebCore::JSWebGLRenderingContext::texImage2D):
        (WebCore::JSWebGLRenderingContext::texSubImage2D):

2010-05-01  Evan Stade  <estade@chromium.org>

        Reviewed by David Levin.

        [chromium] Skia needs to fade DragImages
        https://bugs.webkit.org/show_bug.cgi?id=38008

        tested by DragImageTest

        * platform/chromium/DragImageChromiumSkia.cpp:
        (WebCore::dissolveDragImageToFraction):implement
        (WebCore::createDragImageFromImage):deep copy instead of shallow

2010-05-01  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Sam Weinig.

        REGRESSION (r58273): Visited links do not change color immediately when Cmd-clicked
        https://bugs.webkit.org/show_bug.cgi?id=38422
        <rdar://problem/7921778>

        Tests:
            manual-tests/visited-link-new-window.html

        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::initElement): Only cache the visited link state
        when invoked as part of a helper call to styleForElement or pseudoStyleForElement,
        to avoid caching the visited link state beyond the scope of a single style lookup.
        (WebCore::CSSStyleSelector::styleForElement): Adjust for above change.
        (WebCore::CSSStyleSelector::pseudoStyleForElement): Adjust for above change.
        * css/CSSStyleSelector.h:
        (WebCore::CSSStyleSelector::styleForElement): Change so "visited link helper mode"
        can't accidentally be called from outside CSSStyleSelector itself.
        (WebCore::CSSStyleSelector::pseudoStyleForElement): ditto
        * manual-tests/visited-link-new-window.html: Added. I could not figure out any way
        to make an automated test that supports visited link coloring.

2010-05-01  Yael Aharon  <yael.aharon@nokia.com>

        Reviewed by Darin Adler.

        Move number parsing code out of HTMLInputElement.
        https://bugs.webkit.org/show_bug.cgi?id=38203

        The numebr parsing code follows HTML5 parsing rules and should be available outside of HTMLInputElement.
        No new tests as no new functionality was introduced.

        * html/HTMLInputElement.cpp:
        * html/HTMLInputElement.h:
        * html/HTMLParser.cpp:
        (WebCore::serializeForNumberType):
        (WebCore::parseToDoubleForNumberType):
        * html/HTMLParser.h:
        * html/StepRange.cpp:
        (WebCore::StepRange::clampValue):
        (WebCore::StepRange::valueFromElement):
        * html/ValidityState.cpp:
        (WebCore::ValidityState::typeMismatch):
        * rendering/RenderSlider.cpp:
        (WebCore::RenderSlider::setValueForPosition):

2010-05-01  Xan Lopez  <xlopez@igalia.com>

        Reviewed by Oliver Hunt.

        [GTK] GObject DOM bindings
        https://bugs.webkit.org/show_bug.cgi?id=33590

        Unify more logic to skip functions into SkipFunction, and
        whitelist the two [Custom] methods in HTMLCollection.idl.

        * bindings/scripts/CodeGeneratorGObject.pm:

2010-05-01  Robert Hogan  <robert@webkit.org>

        Reviewed by Simon Hausmann.

        [Qt] Add smart paste support

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

        * WebCore.pro:
        * editing/qt/SmartReplaceQt.cpp: Added.
        (WebCore::isCharacterSmartReplaceExempt):
        * platform/qt/PasteboardQt.cpp:
        (WebCore::Pasteboard::writeSelection):
        (WebCore::Pasteboard::canSmartReplace):

2010-04-30  Yoshiki Hayashi  <yhayashi@google.com>

        Reviewed by Shinichiro Hamaji.

        https://bugs.webkit.org/show_bug.cgi?id=38249
        
        Fixes an issue where border height and padding height are ignored when computing vertically shrinking flexbox's height.

        Test: fast/flexbox/child-flexing.html

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

2010-04-30  Shinichiro Hamaji  <hamaji@chromium.org>

        Reviewed by Darin Adler.

        Add layoutTestController.setPrinting()
        https://bugs.webkit.org/show_bug.cgi?id=37203

        Use the renderer's width insteead of screen's width as the width of
        a screen depends on machines.

        * rendering/RenderTreeAsText.cpp:
        (WebCore::externalRepresentation):

2010-04-30  Joseph Pecoraro  <joepeck@webkit.org>

        Reviewed by Timothy Hatcher.

        Web Inspector: Missing INSPECTOR Guard in Console::lastWMLErrorMessage
        https://bugs.webkit.org/show_bug.cgi?id=38366

        Console::lastWMLErrorMessage is only available if WML is enabled, however
        its implementation only makes sense as long as INSPECTOR is enabled
        as well. So this adds the ENABLE(INSPECTOR) guard in the function. A
        browser without ENABLE(INSPECTOR) will always get an empty result.

        * page/Console.cpp:

2010-04-28  Joseph Pecoraro  <joepeck@webkit.org>

        Reviewed by Oliver Hunt.

        REGRESSION(r58313): Regression evident in pixel tests: the search icon is always clipped at the bottom.
        https://bugs.webkit.org/show_bug.cgi?id=38253

        Test: fast/css/input-search-padding.html

        An <input type="search"> contains an inner block, which is explicitly
        centered in RenderTextControlSingleLine based on the height of the element.
        However, the clipping rect was not using the set location, and instead
        calculated off of the top border and padding alone. This also vertically
        centers the Caps Lock indicator.

        * rendering/RenderTextControl.cpp: moved controlClipRect implementation to RenderTextControlSingleLine
        * rendering/RenderTextControl.h: allow a subclass implementation of controlClipRect, removed redundant hasControlClip implementation, and moved controlClipRect
        * rendering/RenderTextControlSingleLine.cpp:
        (WebCore::RenderTextControlSingleLine::paint): vertically center the Caps Lock indicator
        (WebCore::RenderTextControlSingleLine::controlClipRect): use the set location of the anonymous inner block instead
        * rendering/RenderTextControlSingleLine.h: allow for an implementation of controlClipRect for <input type="search">

2010-04-30  Jon Honeycutt  <jhoneycutt@apple.com>

        Caret may fail to blink if a focus handler brings up a modal dialog 
        https://bugs.webkit.org/show_bug.cgi?id=38372

        Reviewed by Darin Adler.

        * manual-tests/onfocus-alert-blinking-caret.html: Added.

        * page/EventHandler.cpp:
        (WebCore::EventHandler::handleMousePressEvent):
        Moved the call to setCaretBlinkingSuspended() from here...
        (WebCore::EventHandler::handleMousePressEvent):
        ... to here. This makes us suspend caret blinking before dispatching the
        mouse down event. If dispatching the mouse down event allows the message
        loop to run, we want mouse up events received in that message loop to be
        able to resume caret blinking.
        (WebCore::EventHandler::lostMouseCapture):
        We've lost mouse capture and won't be notified of mouse up events;
        resume caret blinking.

        * page/EventHandler.h:
        Declare lostMouseCapture().

2010-04-30  Dimitri Glazkov  <dglazkov@chromium.org>

        Unreviewed, build fix.

        [Chromium] Added a simple IdentifierRep struct and removed dependency on
        IdentifierRep.h.

        * bindings/v8/V8NPObject.cpp: Added simple IdentifierRep struct.

2010-04-30  Dimitri Glazkov  <dglazkov@chromium.org>

        Unreviewed, build fix.

        [Chromium] Remove bridge/ from include paths.

        * WebCore.gyp/WebCore.gyp: Removed bridge/ from include path.

2010-04-30  Abhishek Arya  <inferno@chromium.org>

        Reviewed by David Kilzer.

        Convert m_documentUnderMouse, m_dragInitiator to RefPtr.
        Eliminated unused m_dragInitiator accessor to prevent dereferencing.
        https://bugs.webkit.org/show_bug.cgi?id=37618

        Test: editing/pasteboard/drag-drop-iframe-refresh-crash.html

        * page/DragController.cpp:
        (WebCore::DragController::tryDocumentDrag):
        (WebCore::DragController::concludeEditDrag):
        * page/DragController.h:
        (WebCore::DragController::draggingImageURL):
        (WebCore::DragController::documentUnderMouse):

2010-04-29  James Robinson  <jamesr@chromium.org>

        Reviewed by Simon Fraser.

        Calls FrameView::scrollPositionChanged whenever a ScrollView is scrolled
        https://bugs.webkit.org/show_bug.cgi?id=38286

        When a ScrollView's  scroll position is changed, we have to call
        FrameView::scrollPositionChanged to generate repaint invalidation for
        fixed position elements.  This ends up getting called indirectly when
        the ScrollView has a platformWidget through the port layer
        (see WebHTMLView.mm's _frameOrBoundsChanged method for how the mac
        port does it) but not when there is no platformWidget.

        This is tested by the fast/repaint/fixed-* tests when run in pixel
        mode.

        Test: fast/repaint/fixed-move-after-keyboard-scroll.html

        * page/FrameView.h:
        * platform/ScrollView.cpp:
        (WebCore::ScrollView::valueChanged):
        * platform/ScrollView.h:
        (WebCore::ScrollView::scrollPositionChanged):

2010-04-30  Anders Carlsson  <andersca@apple.com>

        Reviewed by Darin Adler.

        Use C99 integer types in more places.

        * manual-tests/NPN_Invoke/main.c:
        (NPP_New):
        (NPP_NewStream):
        (NPP_WriteReady):
        (NPP_Write):
        (NPP_HandleEvent):
        (functionPointerForTVector):
        * plugins/mac/PluginViewMac.cpp:
        (WebCore::PluginView::platformGetValueStatic):
        (WebCore::PluginView::handlePostReadFile):

2010-04-30  Darin Adler  <darin@apple.com>

        Reviewed by Oliver Hunt.

        Remove unused scrollRectIntoViewRecursively function
        https://bugs.webkit.org/show_bug.cgi?id=38403

        * page/Chrome.cpp:
        (WebCore::Chrome::scrollRectIntoView): Moved comment here that was previously
        in the scrollRectIntoViewRecursively function.

        * platform/ScrollView.cpp: Get rid scrollRectIntoViewRecursively.
        * platform/ScrollView.h: Ditto. Fix comment that refers to the two functions.
        Also correct all uses of the term "method" to use the C++ term "function" and
        got rid of double spaces after periods.

2010-04-30  Anders Carlsson  <andersca@apple.com>

        Another Qt build fix.

        * plugins/qt/PluginViewQt.cpp:
        (WebCore::PluginView::platformGetValueStatic):

2010-04-30  Anders Carlsson  <andersca@apple.com>

        Add back TRUE, FALSE and NULL macros. They were not meant to be removed!

        * bridge/npapi.h:

2010-04-30  Anders Carlsson  <andersca@apple.com>

        Try to fix the Qt build this time.

        * plugins/qt/PluginPackageQt.cpp:
        (WebCore::staticPluginQuirkRequiresGtkToolKit_NPN_GetValue):
        (WebCore::PluginPackage::NPVersion):

2010-04-30  Anders Carlsson  <andersca@apple.com>

        Yet another build fix.

        * plugins/gtk/PluginPackageGtk.cpp:
        (WebCore::PluginPackage::NPVersion):

2010-04-30  Anders Carlsson  <andersca@apple.com>

        Fix build.

        * bridge/npapi.h:

2010-04-30  Jian Li  <jianli@chromium.org>

        Reviewed by Darin Fisher.

        [chromium] Add WebFileSystem interface and hook up with all FileSystem methods.
        https://bugs.webkit.org/show_bug.cgi?id=38228

        * platform/chromium/ChromiumBridge.h:
        * platform/chromium/FileSystemChromium.cpp:
        (WebCore::openFile):
        (WebCore::closeFile):
        (WebCore::seekFile):
        (WebCore::truncateFile):
        (WebCore::readFromFile):
        (WebCore::writeToFile):

2010-04-30  Anders Carlsson  <andersca@apple.com>

        Reviewed by Dan Bernstein.

        Final part of 
        
        https://bugs.webkit.org/show_bug.cgi?id=20784
        move npapi.h to C99 integer types

        * bridge/npapi.h:
        Remove the old types.

2010-04-30  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r58569.
        http://trac.webkit.org/changeset/58569
        https://bugs.webkit.org/show_bug.cgi?id=38399

        This broke the GTK bots due to bad GC behavior (Requested by
        ericu on #webkit).

        * bindings/js/JSWorkerContextCustom.cpp:
        * bindings/v8/custom/V8WorkerContextCustom.cpp:
        * storage/Database.idl:
        * storage/SQLError.idl:
        * storage/SQLResultSet.idl:
        * storage/SQLResultSetRowList.idl:
        * storage/SQLTransaction.idl:
        * workers/WorkerContext.cpp:
        (WebCore::WorkerContext::openDatabase):
        * workers/WorkerContext.h:
        (WebCore::WorkerContext::databaseExceededQuota):
        * workers/WorkerContext.idl:

2010-04-30  Anders Carlsson  <andersca@apple.com>

        Fix GTK+ build.

        * plugins/gtk/PluginViewGtk.cpp:
        (WebCore::PluginView::handlePostReadFile):
        (WebCore::PluginView::platformGetValueStatic):

2010-04-30  Anders Carlsson  <andersca@apple.com>

        Fix Qt build.

        * plugins/qt/PluginViewQt.cpp:
        (WebCore::PluginView::handlePostReadFile):
        (WebCore::PluginView::platformGetValue):

2010-04-30  Anders Carlsson  <andersca@apple.com>

        Reviewed by Timothy Hatcher.

        Next step towards fixing
        
        https://bugs.webkit.org/show_bug.cgi?id=20784
        move npapi.h to C99 integer types

        Use the C99 types everywhere. The "old" types are still around but will be removed
        in a subsequent commit.

        * bridge/npapi.h:
        (_NPCocoaEvent::):
        * plugins/PluginPackage.h:
        * plugins/PluginStream.cpp:
        (WebCore::PluginStream::deliverData):
        * plugins/PluginStream.h:
        * plugins/PluginView.cpp:
        (WebCore::PluginView::postURLNotify):
        (WebCore::PluginView::postURL):
        (WebCore::PluginView::write):
        (WebCore::PluginView::handlePost):
        * plugins/PluginView.h:
        * plugins/PluginViewNone.cpp:
        (WebCore::PluginView::handlePostReadFile):
        * plugins/npapi.cpp:
        (NPN_MemAlloc):
        (NPN_MemFlush):
        (NPN_PostURLNotify):
        (NPN_PostURL):
        (NPN_Write):
        * plugins/npfunctions.h:
        * plugins/win/PluginPackageWin.cpp:
        (WebCore::PluginPackage::NPVersion):
        * plugins/win/PluginViewWin.cpp:
        (WebCore::PluginView::handlePostReadFile):

2010-04-30  Peter Kasting  <pkasting@google.com>

        Reviewed by David Levin.

        Make all image decoders set the "failed" bit if an image could not be
        completely decoded, but no more data is coming.  The ICO and BMP
        decoders already did this.
        https://bugs.webkit.org/show_bug.cgi?id=35411

        "Failed" does not cause the image to not be displayed, it simply causes
        us to not bother to try to decode again if future requests are made, and
        for some decoders, lets the decoder clean up some of its temporary
        objects.

        No layout tests because this does not change the visible output of decoding in any way.

        * platform/image-decoders/gif/GIFImageDecoder.cpp:
        (WebCore::GIFImageDecoder::frameComplete): Return whether the frame could be marked as complete.
        (WebCore::GIFImageDecoder::decode): Fail if read() needs more data (and thus returns false) and no more is coming.
        * platform/image-decoders/gif/GIFImageDecoder.h:
        * platform/image-decoders/gif/GIFImageReader.cpp:
        (GIFImageReader::do_lzw): Instead of returning true for buffer underrun and false for failure, return false for both and set the failure flag on failure.
        (GIFImageReader::read): Ditto.
        * platform/image-decoders/gif/GIFImageReader.h:
        * platform/image-decoders/jpeg/JPEGImageDecoder.cpp:
        (WebCore::):
        (WebCore::JPEGImageReader::decode): See do_lzw() comment above.
        (WebCore::JPEGImageDecoder::decode): Fail if decode() needs more data (and thus returns false) and no more is coming.
        * platform/image-decoders/jpeg/JPEGImageDecoder.h:
        * platform/image-decoders/png/PNGImageDecoder.cpp:
        (WebCore::PNGImageReader::decode): Return true for decode success, false for buffer underrun or decode failure, and set the failure flag on decode failure.
        (WebCore::PNGImageDecoder::decode): See JPEGImageDecoder::decode() comment above.
        * platform/image-decoders/png/PNGImageDecoder.h:

2010-04-30  Brady Eidson  <beidson@apple.com>

        Reviewed by Eric Carlson.

        <rdar://problem/7902467> - Audio plays upon loading of npr.org but shouldn't

        No new tests. (Currently no way to test such site specific hack behavior)

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::HTMLMediaElement):
        (WebCore::HTMLMediaElement::asyncEventTimerFired): If the event to be dispatched is the canplay
          event, wrap the dispatch with m_dispatchingCanPlayEvent set.
        (WebCore::HTMLMediaElement::play): If m_dispatchingCanPlayEvent is true and the site is npr.org, 
          don't perform the play().
        * html/HTMLMediaElement.h: Add m_dispatchingCanPlayEvent member.

2010-04-30  Dan Bernstein  <mitz@apple.com>

        Reviewed by Adele Peterson.

        Part of <rdar://problem/6649734> Text repainting does not account for glyphs which draw outside the typographic bounds of the font
        https://bugs.webkit.org/show_bug.cgi?id=6274

        Account for glyph overflow of characters in the range U+1E00..U+2000, but without sending them
        through the complex text code path. Instead, introduce a variant of the fast path that tracks
        glyph overflow.

        * platform/graphics/Font.cpp:
        (WebCore::Font::drawText): Use codePath().
        (WebCore::Font::floatWidth): Use codePath(). Pass the GlyphOverflow pointer through to
        floatWidthForSimpleText() if the code path is SimpleWithGlyphOverflow.
        (WebCore::Font::selectionRectForText): Use codePath().
        (WebCore::Font::offsetForPosition): Ditto.
        * platform/graphics/Font.h: Replaced canUseGlyphCache() with codePath(). Added a GlyphOverflow
        parameter to floatWidthForSimpleText().
        * platform/graphics/FontFastPath.cpp:
        Removed ROMAN_AND_GREEK_DIACRITICS_CAN_USE_GLYPH_CACHE.
        (WebCore::Font::codePath): Renamed canUseGlyphCache() to this. Where it used to return false,
        it now returns Complex. Where it used to return true, it now returns Simple, except for
        the range U+1E00..U+2000, where it now returns SimpleWithGlyphOverflow.
        (WebCore::Font::floatWidthForSimpleText): Added a GlyphOverflow parameter. If not 0, have the
        width iterator account for glyph bounds, then update the GlyphOverflow accordingly.
        * platform/graphics/WidthIterator.cpp:
        (WebCore::WidthIterator::WidthIterator): Added boolean parameter telling the width iterator
        whether to account for glyph bounds. Initialize m_accountForGlyphBounds accordingly. Initialize
        m_maxGlyphBoundingBoxY, m_minGlyphBoundingBoxY, m_firstGlyphOverflow and m_lastGlyphOverflow.
        (WebCore::WidthIterator::advance): If accounting for glyph bounds, update the above member variables.
        * platform/graphics/WidthIterator.h:
        (WebCore::WidthIterator::maxGlyphBoundingBoxY): Added this accessor.
        (WebCore::WidthIterator::minGlyphBoundingBoxY): Ditto.
        (WebCore::WidthIterator::firstGlyphOverflow): Ditto.
        (WebCore::WidthIterator::lastGlyphOverflow): Ditto.

2010-04-30  Chris Marrin  <cmarrin@apple.com>

        Reviewed by Simon Fraser.

        Reversed the order of the CSSMatrix.multiply method
        https://bugs.webkit.org/show_bug.cgi?id=38337

        Test: transforms/svg-vs-css.xhtml

        * css/WebKitCSSMatrix.cpp:
        (WebCore::WebKitCSSMatrix::multiply):
        * platform/graphics/transforms/TransformationMatrix.cpp:

2010-04-30  Kevin Ollivier  <kevino@theolliviers.com>

        Unreviewed. Attempt to fix the Chromium Mac build after the last commit.

        * WebCore.gypi:

2010-04-30  Kevin Ollivier  <kevino@theolliviers.com>

        Reviewed by Dan Bernstein.

        Allow other ports to compile ATSUI and CoreText functions in SimpleFontData for Mac.
        https://bugs.webkit.org/show_bug.cgi?id=38334

        * WebCore.xcodeproj/project.pbxproj:
        * platform/graphics/mac/SimpleFontDataATSUI.mm: Copied from WebCore/platform/graphics/mac/SimpleFontDataMac.mm.
        * platform/graphics/mac/SimpleFontDataCoreText.cpp: Copied from WebCore/platform/graphics/mac/SimpleFontDataMac.mm.
        * platform/graphics/mac/SimpleFontDataMac.mm:

2010-04-30  Shinichiro Hamaji  <hamaji@chromium.org>

        Reviewed by Simon Fraser.

        SHOULD NEVER BE REACHED assertion loading forbes.com
        https://bugs.webkit.org/show_bug.cgi?id=38272

        Ignore page media related pseudo classes.

        Test: printing/pseudo-class-outside-page.html

        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::SelectorChecker::checkOneSelector):

2010-04-30  Laszlo Gombos  <laszlo.1.gombos@nokia.com>

        Unreviewed, build fix.

        Fix compiler warning "suggest parentheses around"

        No new tests as there is no new functionality.

        * svg/SVGAnimateElement.cpp:
        (WebCore::SVGAnimateElement::calculateFromAndToValues):

2010-04-30  Kent Tamura  <tkent@chromium.org>

        Unreviewed. Regression fix.

        Revert a part of r58564 to be compatible with prior behavior
        https://bugs.webkit.org/show_bug.cgi?id=38383

        * rendering/RenderTextControlSingleLine.cpp:
        (WebCore::RenderTextControlSingleLine::forwardEvent):
         r58564 made a region check for the cancel button stricter, but it
         made some tests failing on Chromium. So, relax the check again.

2010-04-29  Jeremy Orlow  <jorlow@chromium.org>

        Reviewed by Darin Fisher.

        Change StorageEvent.uri to StorageEvent.url to match the spec
        https://bugs.webkit.org/show_bug.cgi?id=38331

        As I mentioned in http://www.mail-archive.com/public-webapps@w3.org/msg08495.html
        WebKit is the only one who places the document's URL in a 'uri' property
        rather than a 'url' property.  Even though we've shipped several versions of
        browsers with the old name, we probably should change this to comply with the
        spec.

        This stuff is covered by existing tests.

        * storage/StorageEvent.cpp:
        (WebCore::StorageEvent::create):
        (WebCore::StorageEvent::StorageEvent):
        (WebCore::StorageEvent::initStorageEvent):
        * storage/StorageEvent.h:
        (WebCore::StorageEvent::url):
        * storage/StorageEvent.idl:

2010-04-30  Nikolas Zimmermann  <nzimmermann@rim.com>

        Reviewed by Dirk Schulze.

        REGRESSION: RenderPath does not handle repaints correctly anymore if bounds changed
        https://bugs.webkit.org/show_bug.cgi?id=38385

        The last SVG performance patch broke repainting if bounds of a RenderPath get smaller.
        It would only repaint the smaller part, not the original larger bounds.

        Remove all lazy calculation of the repaint rects, instead calculate object/strokeBoundingBox and repaintRectInLocalCoordinates
        once in layout - after LayoutRepainter grabbed the initial bounds, before calling repaintAfterLayout(). We can now inline
        all these functions, and save a lot of m_path.isEmpty() checks, which are expensive. No need to store a seperated markerBoundingBox(),
        combine with strokeBoundingBox() -> save one FloatRect per RenderPath. Move strokeBoundingBox() from SVGRenderBase to RenderObject,
        right next to objectBoundingBox() - to save unnecessary toSVGRenderBase() calls. Completly remove this method.

        Overall this is a regression fix, a performance improvement and saves memory. Something for everyone.

        Tests: svg/custom/repaint-stroke-width-changes.svg

        * rendering/RenderObject.cpp: Added strokeBoundingBox() here, to avoid the toSVGRenderBase() dance.
        (WebCore::RenderObject::strokeBoundingBox):
        * rendering/RenderObject.h: Ditto.
        * rendering/RenderPath.cpp:
        (WebCore::RenderPath::RenderPath):
        (WebCore::RenderPath::layout): Fix regression, do repainting correctly, by recalculating the boundaries, if needed, instead of nulling them.
        (WebCore::RenderPath::paint): Cache SVGRenderStyle in local variable, remove no longer valid FIXME.
        (WebCore::RenderPath::calculateMarkerBoundsIfNeeded): Return a FloatRect, to avoid having to store the marker bounding box seperated.
        (WebCore::RenderPath::styleWillChange): Mark boundaries as dirty.
        (WebCore::RenderPath::updateCachedBoundaries): New function to (re-)calculate all cached boundaries, only called from layout().
        * rendering/RenderPath.h: Rename cached rect variables to have more sensible names.
        (WebCore::RenderPath::objectBoundingBox): Inlined, just returns the cached value - no more lazy creation. Huge speedup as this is hot code.
        (WebCore::RenderPath::strokeBoundingBox): Ditto.
        (WebCore::RenderPath::repaintRectInLocalCoordinates): Ditto.
        * rendering/RenderSVGBlock.h: Remove toSVGRenderBase() method.
        * rendering/RenderSVGImage.h: Ditto.
        * rendering/RenderSVGInline.cpp: No need to call toSVGRenderBase() just to get the strokeBoundingBox(). Unifies code to retrieve bounding boxes.
        (WebCore::RenderSVGInline::strokeBoundingBox):
        * rendering/RenderSVGInline.h: Remove toSVGRenderBase() method.
        * rendering/RenderSVGModelObject.h: Ditto.
        * rendering/RenderSVGResourceFilter.cpp: No need to call toSVGRenderBase() anymore, just grab the strokeBoundingBox() from the RenderObject.
        (WebCore::RenderSVGResourceFilter::applyResource):
        * rendering/RenderSVGText.h: Remove toSVGRenderBase() method.
        * rendering/SVGRenderSupport.h: Ditto. Remove markerBoundingBox() method, now combined with strokeBoundingBox().
        (WebCore::SVGRenderBase::strokeBoundingBox):
        * rendering/SVGRootInlineBox.h: Remove toSVGRenderBase() method.
        * rendering/style/SVGRenderStyle.h: Add hasMarkers() helper method, to avoid doing unnecessary work in RenderPath.
        (WebCore::SVGRenderStyle::hasMarkers):

2010-04-30  Eric Uhrhane  <ericu@chromium.org>

        Reviewed by Dmitry Titov.

        Add bindings for async DB API in Workers.
        https://bugs.webkit.org/show_bug.cgi?id=34992

        Tests: storage/change-version-handle-reuse-worker.html
               storage/execute-sql-args-worker.html

        * bindings/js/JSWorkerContextCustom.cpp: Add openDatabase binding.
        (WebCore::JSWorkerContext::openDatabase):

        * bindings/v8/custom/V8WorkerContextCustom.cpp: Add openDatabase stub; Chromium will need work both in V8 and in the browser process before we can turn this on there.
        (WebCore::V8WorkerContext::openDatabaseCallback):

        Add NoStaticTables flags to all objects now shared with workers.
        * storage/Database.idl:
        * storage/SQLError.idl:
        * storage/SQLResultSet.idl:
        * storage/SQLResultSetRowList.idl:
        * storage/SQLTransaction.idl:
        
        * workers/WorkerContext.h: Add databaseExceededQuota.
        * workers/WorkerContext.cpp:
        (WebCore::WorkerContext::databaseExceededQuota): Add stub implementation for testing; you just get 5MB for now.
        (WebCore::WorkerContext::openDatabase): Remove invalid assertion.

        Add the IDL for the call to openDatabase.
        * workers/WorkerContext.idl:

2010-04-30  Shinichiro Hamaji  <hamaji@chromium.org>

        Reviewed by Darin Adler.

        Unnecessary PrintContext::end() calls
        https://bugs.webkit.org/show_bug.cgi?id=38247

        Refactoring only, so no new tests.

        * page/PrintContext.cpp:
        (WebCore::PrintContext::pageNumberForElement):
        (WebCore::PrintContext::numberOfPages):

2010-04-30  Kent Tamura  <tkent@chromium.org>

        Reviewed by Adele Peterson.

        Implement interactive behavior of spin buttons.
        https://bugs.webkit.org/show_bug.cgi?id=35686

        Introduce SpinButtonElement. It is a shadow element class for
        spin buttons. If the upper side of the element is clicked, calls
        HTMLInputElement::stepUpFromRenderer(1). If the lower button is
        clicked, calls HTMLInputElement::stepUpFromRenderer(-1).

        SpinButtonElement tracks the mouse pointer position, and
        RenderTheme sets ControlStates::SpinUpState if the pointer is on
        the upper side.

        Test: platform/mac/fast/forms/input-number-click.html

        * dom/Element.h:
        (WebCore::Element::isSpinButtonElement):
        * editing/VisibleSelection.cpp:
        (WebCore::VisibleSelection::adjustSelectionToAvoidCrossingEditingBoundaries):
         Remove an assertion. lastEditablePositionBeforePositionInRoot() can
         return null in a case that m_end is at a shadow element (a spin button)
         and baseRoot is another shadow element (inner text block) in the same
         node (an INPUT element).
        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::stepUpFromRenderer):
        * html/HTMLInputElement.h:
        (WebCore::HTMLInputElement::hasSpinButton):
         Add types supporting step attribute except RANGE.
        * rendering/RenderTextControlSingleLine.cpp:
        (WebCore::RenderTextControlSingleLine::nodeAtPoint):
        (WebCore::RenderTextControlSingleLine::forwardEvent):
        (WebCore::RenderTextControlSingleLine::preferredContentWidth):
        (WebCore::RenderTextControlSingleLine::createSubtreeIfNeeded):
        * rendering/RenderTextControlSingleLine.h:
        * rendering/RenderTheme.cpp:
        (WebCore::RenderTheme::controlStatesForRenderer):
        (WebCore::RenderTheme::isSpinUpButtonPartPressed):
        (WebCore::RenderTheme::isSpinUpButtonPartHovered):
        * rendering/RenderTheme.h:
        * rendering/TextControlInnerElements.cpp:
        (WebCore::SpinButtonElement::SpinButtonElement):
        (WebCore::SpinButtonElement::defaultEventHandler):
        * rendering/TextControlInnerElements.h:
        (WebCore::SpinButtonElement::isSpinButtonElement):
        (WebCore::SpinButtonElement::isEnabledFormControl):
        (WebCore::SpinButtonElement::onUpButton):

2010-04-30  Yael Aharon  <yael.aharon@nokia.com>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] Enable DOMWindow constructor for HTMLProgressElement
        https://bugs.webkit.org/show_bug.cgi?id=38333

        Add ENABLE_PROGRESS_TAG to FEATURES_DEFINES_JAVASCRIPT.

        * WebCore.pri:

2010-04-30  Kent Tamura  <tkent@chromium.org>

        Reviewed by Adele Peterson.

        Mac implementation of outer-spin-button appearance, and anonymous
        element generation for <input type=number>.
        https://bugs.webkit.org/show_bug.cgi?id=32813

        The implementation uses NSStepperCell. Like the other Mac
        controls, it has only three candidates for sizes.

        The editable block of an input element is shrunk, and the
        anonymous block for a spin button is put on the right of the
        editable block.

        Tests: platform/mac/fast/forms/input-appearance-spinbutton-size.html
               platform/mac/fast/forms/input-appearance-spinbutton.html

        * dom/Element.cpp:
        (WebCore::Element::pseudoStyleCacheIsInvalid):
        * dom/InputElement.h:
        (WebCore::InputElement::hasSpinButton):
        * html/HTMLInputElement.h:
        (WebCore::HTMLInputElement::hasSpinButton): Return true for NUMBER type.
        * platform/mac/ThemeMac.mm:
        (WebCore::sizeFromNSControlSize): Split the main part of sizeFromFont()
          to this in order to use stepperControlSizeForFont() instead of
          controlSizeForFont().
        (WebCore::sizeFromFont): Just calls sizeFromNSControlSize() with
          sizeFromFont(). No behavior changes.
        (WebCore::stepperSizes): Returns sizes for mini, small, and regular.
        (WebCore::stepperControlSizeForFont):
          Dedicated version of controlSizeForFont().
        (WebCore::stepper): Returns NSStepperCell object with specified settings.
        (WebCore::paintStepper):
        (WebCore::ThemeMac::controlSize): Support for OuterSpinButton.
        (WebCore::ThemeMac::minimumControlSize): ditto.
        (WebCore::ThemeMac::inflateControlPaintRect): ditto.
        (WebCore::ThemeMac::paint): ditto.
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::paintBoxDecorations):
          Move the content to paintBoxDecorationsWithSize().
        (WebCore::RenderBox::paintBoxDecorationsWithSize):
        * rendering/RenderBox.h: Declare paintBoxDecorationsWithSize().
        * rendering/RenderTextControlSingleLine.cpp:
        (WebCore::RenderTextControlSingleLine::~RenderTextControlSingleLine):
        (WebCore::RenderTextControlSingleLine::paintBoxDecorations):
          Call paintBoxDecorationsWithSize() with smaller width by decorationWidthRight().
        (WebCore::RenderTextControlSingleLine::addFocusRingRects):
          Add a rectangle of which width is smaller by decorationWidthRight().
        (WebCore::RenderTextControlSingleLine::layout):
          Adjust m_outerSpinButton position.
        (WebCore::RenderTextControlSingleLine::styleDidChange):
        (WebCore::RenderTextControlSingleLine::textBlockWidth):
        (WebCore::RenderTextControlSingleLine::decorationWidthRight):
        (WebCore::RenderTextControlSingleLine::preferredDecorationWidthRight):
        (WebCore::RenderTextControlSingleLine::createSubtreeIfNeeded):
          Creates an element for m_outerSpinButton if it is needed.
        (WebCore::RenderTextControlSingleLine::createInnerTextStyle):
        (WebCore::RenderTextControlSingleLine::createOuterSpinButtonStyle):
        * rendering/RenderTextControlSingleLine.h: Declare new methods and m_outerSpinButton.
        * rendering/RenderThemeMac.mm:
        (WebCore::RenderThemeMac::adjustRepaintRect): Support for OuterSpinButton.

2010-04-29  Adam Barth  <abarth@webkit.org>

        Unreviewed.  Update JSC CodeGenerator baseline.  Not sure how I missed
        this one earlier.

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

2010-04-29  Justin Garcia  <justin.garcia@apple.com>

        Reviewed by Adele Peterson.

        Need to updateLayout after typing commands too
        https://bugs.webkit.org/show_bug.cgi?id=38352

        Replaced !m_parent checks in EditCommand.cpp by the more descriptive isTopLevelCommand().
        Move the post editing operation updateLayout() call to {un,re}appliedEditing so that text insertions,
        which don't go through EditCommand::{un,re}apply() can benefit from it too.  No test case possible
        since most platforms have a layout performed as a side effect of post operation selection code.

        * editing/EditCommand.cpp:
        (WebCore::EditCommand::apply):
        (WebCore::EditCommand::unapply):
        (WebCore::EditCommand::reapply):
        * editing/EditCommand.h:
        (WebCore::EditCommand::isTopLevelCommand):
        * editing/Editor.cpp:
        (WebCore::Editor::appliedEditing):
        (WebCore::Editor::unappliedEditing):
        (WebCore::Editor::reappliedEditing):

2010-04-29  Dan Bernstein  <mitz@apple.com>

        Reviewed by Simon Fraser.

        <rdar://problem/7918086> REGRESSION (r57820): Controller is not displayed in window when opening a MP3 file in browser window
        https://bugs.webkit.org/show_bug.cgi?id=38350

        Tests: media/audio-only-video-intrinsic-size.html
               media/media-document-audio-size.html

        * rendering/RenderVideo.cpp:
        (WebCore::RenderVideo::RenderVideo): Until metadata is available, ignore the natural size
        reported by the player.
        (WebCore::RenderVideo::videoSizeChanged): Respect a natural size of zero if reported by the
        player, except in standalone media documents.

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

        Reviewed by Dan Bernstein.

        First part of
        https://bugs.webkit.org/show_bug.cgi?id=20784
        move npapi.h to C99 integer types.

        Add nptypes.h to the build.

        * WebCore.xcodeproj/project.pbxproj:
        * bridge/npapi.h:
        * bridge/npruntime.h:
        * bridge/nptypes.h: Added.

2010-04-29  Xan Lopez  <xlopez@igalia.com>

        Rubber-stamped by Adam Barth.

        Update GObject bindings test results. We are actually moving
        backwards here, but we'll update them again when we figure out
        what broke.

        * bindings/scripts/test/GObject/WebKitDOMTestObj.cpp:
        (webkit_dom_test_obj_set_property):
        (webkit_dom_test_obj_get_property):

2010-04-29  Sam Weinig  <sam@webkit.org>

        Reviewed by Anders Carlsson.

        Fix for https://bugs.webkit.org/show_bug.cgi?id=38277
        MiniBrowser: -[WebCoreFlippedView currentEditor]: unrecognized selector

        * platform/mac/ThemeMac.mm:
        (-[WebCoreFlippedView currentEditor]): Added currentEditor nil implementation.

2010-04-29  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        CodeGeneratorJS.pm should be consistent about castedThis versus castedThisObj
        https://bugs.webkit.org/show_bug.cgi?id=38338

        Currently CodeGeneratorJS.pm uses castThis for methods and
        castedThisObj for attributes.  This inconsistency makes it difficult to
        factor common code genereration code into methods shared by both kinds
        of bindings.  This match aligns the names so that a future patch (e.g.,
        in https://bugs.webkit.org/show_bug.cgi?id=38313) can reduce copy/paste
        code.

        * bindings/scripts/CodeGeneratorJS.pm:
        * bindings/scripts/test/JS/JSTestObj.cpp:
        (WebCore::setJSTestObjIntAttr):
        (WebCore::setJSTestObjLongLongAttr):
        (WebCore::setJSTestObjUnsignedLongLongAttr):
        (WebCore::setJSTestObjStringAttr):
        (WebCore::setJSTestObjTestObjAttr):
        (WebCore::setJSTestObjAttrWithException):
        (WebCore::setJSTestObjAttrWithSetterException):
        (WebCore::setJSTestObjAttrWithGetterException):
        (WebCore::jsTestObjPrototypeFunctionVoidMethod):
        (WebCore::jsTestObjPrototypeFunctionVoidMethodWithArgs):
        (WebCore::jsTestObjPrototypeFunctionIntMethod):
        (WebCore::jsTestObjPrototypeFunctionIntMethodWithArgs):
        (WebCore::jsTestObjPrototypeFunctionObjMethod):
        (WebCore::jsTestObjPrototypeFunctionObjMethodWithArgs):
        (WebCore::jsTestObjPrototypeFunctionMethodWithException):
        (WebCore::jsTestObjPrototypeFunctionCustomMethod):
        (WebCore::jsTestObjPrototypeFunctionCustomMethodWithArgs):
        (WebCore::jsTestObjPrototypeFunctionCustomArgsAndException):
        (WebCore::jsTestObjPrototypeFunctionAddEventListener):
        (WebCore::jsTestObjPrototypeFunctionRemoveEventListener):
        (WebCore::jsTestObjPrototypeFunctionWithDynamicFrame):
        (WebCore::jsTestObjPrototypeFunctionWithDynamicFrameAndArg):
        (WebCore::jsTestObjPrototypeFunctionWithDynamicFrameAndOptionalArg):
        (WebCore::jsTestObjPrototypeFunctionWithDynamicFrameAndUserGesture):
        (WebCore::jsTestObjPrototypeFunctionWithDynamicFrameAndUserGestureASAD):
        (WebCore::jsTestObjPrototypeFunctionWithScriptStateVoid):
        (WebCore::jsTestObjPrototypeFunctionWithScriptStateObj):
        (WebCore::jsTestObjPrototypeFunctionWithScriptStateVoidException):
        (WebCore::jsTestObjPrototypeFunctionWithScriptStateObjException):
        (WebCore::jsTestObjPrototypeFunctionMethodWithOptionalArg):
        (WebCore::jsTestObjPrototypeFunctionMethodWithNonOptionalArgAndOptionalArg):
        (WebCore::jsTestObjPrototypeFunctionMethodWithNonOptionalArgAndTwoOptionalArgs):

2010-04-29  Gustavo Noronha Silva  <gustavo.noronhaollabora.co.uk>

        Reviewed by Xan Lopez.

        [GTK] pointerCursor should use the default cursor set for the window, not GDK_LEFT_PTR
        https://bugs.webkit.org/show_bug.cgi?id=36963

        Use the default cursor instead of hard-coding left pointer.

        * platform/gtk/CursorGtk.cpp:
        (WebCore::Cursor::Cursor):
        (WebCore::pointerCursor):

2010-04-29  Ilya Tikhonovsky  <loislo@chromium.org>

        Reviewed by Yury Semikhatsky.

        WebInspector: If Timeline panel is in recording mode and is not visible and has received
        new events then these events do not appear in the panel when the panel becomes visible.
        Timeline popup may appear in the upper left window corner when you switch to another panel.
        https://bugs.webkit.org/show_bug.cgi?id=38322

        * inspector/front-end/Popover.js:
        (WebInspector.PopoverHelper.prototype._mouseMove.doHide):
        (WebInspector.PopoverHelper.prototype._mouseMove):
        (WebInspector.PopoverHelper.prototype.hidePopup):
        (WebInspector.PopoverHelper.prototype._hidePopup):
        * inspector/front-end/TimelinePanel.js:
        (WebInspector.TimelinePanel.prototype.show):
        (WebInspector.TimelinePanel.prototype._scheduleRefresh):
        (WebInspector.TimelinePanel.prototype._refresh):

2010-04-29  Anton Muhin  <antonm@chromium.org>

        Reviewed by Darin Adler.

        Let's cache nodelists instead of DynamicNodeList::Caches
        https://bugs.webkit.org/show_bug.cgi?id=33696

        Test: fast/dom/Element/node-list-identity.html

        * bindings/js/JSNodeCustom.cpp:
        (WebCore::JSNode::markChildren): Mark all cached node lists as well
        * dom/ClassNodeList.cpp:
        (WebCore::ClassNodeList::ClassNodeList): Don't need DynamicNodeList::Caches argument any more
        (WebCore::ClassNodeList::~ClassNodeList): Remove from the cache
        * dom/ClassNodeList.h: Added a field with original class names to be used as a key for removal from the cache
        (WebCore::ClassNodeList::create): Don't need DynamicNodeList::Caches argument any more
        * dom/NameNodeList.cpp:
        (WebCore::NameNodeList::NameNodeList): Don't need DynamicNodeList::Caches argument any more
        (WebCore::NameNodeList::~NameNodeList): Remove from the cache
        * dom/NameNodeList.h:
        (WebCore::NameNodeList::create): Don't need DynamicNodeList::Caches argument any more
        * dom/Node.cpp:
        (WebCore::Node::removeCachedClassNodeList): Remove ClassNodeList from the cache
        (WebCore::Node::removeCachedNameNodeList): Remove NameNodeList from the cache
        (WebCore::Node::removeCachedTagNodeList): Remove TagNodeList from the cache
        (WebCore::Node::getElementsByTagNameNS): Switch to caching node lists themselves, not the data
        (WebCore::Node::getElementsByName): Switch to caching node lists themselves, not the data
        (WebCore::Node::getElementsByClassName): Switch to caching node lists themselves, not the data
        (WebCore::NodeListsNodeData::invalidateCaches): Switch to caching node lists themselves, not the data
        (WebCore::NodeListsNodeData::invalidateCachesThatDependOnAttributes): Switch to caching node lists themselves, not the data
        (WebCore::NodeListsNodeData::isEmpty): Switch to caching node lists themselves, not the data
        (WebCore::markNodeLists): Helper to mark all the node lists in the cache
        (WebCore::Node::markCachedNodeListsSlow): Mark all the cached node lists if any could be present
        * dom/Node.h:
        (WebCore::Node::markCachedNodeLists): Fast-path marking of cached node lists---bails out if there is no rare data
        * dom/NodeRareData.h: Changed type of caches to hold raw pointers to node lists, not RefPtr's to data
        * dom/TagNodeList.cpp:
        (WebCore::TagNodeList::TagNodeList): Don't need DynamicNodeList::Caches argument any more
        (WebCore::TagNodeList::~TagNodeList): Remove from the cache
        * dom/TagNodeList.h:
        (WebCore::TagNodeList::create): Don't need DynamicNodeList::Caches argument any more

2010-04-29  Mikhail Naganov  <mnaganov@chromium.org>

        Reviewed by Yury Semikhatsky.

        [Chromium] Update ScriptProfileNode to retrieve execution time in milliseconds.

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

        * bindings/v8/ScriptProfileNode.cpp:
        (WebCore::ScriptProfileNode::totalTime):
        (WebCore::ScriptProfileNode::selfTime):

2010-04-28  Dimitri Glazkov  <dglazkov@chromium.org>

        Reviewed by Darin Adler.

        A form without a submit button unexpectedly performs its action when Return is pressed
        https://bugs.webkit.org/show_bug.cgi?id=9756

        Implemented implicit form submission algorithm as defined in HTML5 spec:
        http://www.whatwg.org/specs/web-apps/current-work/multipage/association-of-controls-and-forms.html#implicit-submission,
        falling back to match IE's behavior in the edge cases.

        The underlying rules are:

        * If the form has no enabled submit buttons, submit if Enter/Return is pressed on the only single-line text field.

        * Otherwise, submit form using first enabled submit button if Enter/Return is pressed on a field
          that's not a textarea or a select.

        Test: fast/forms/implicit-submission.html

        * dom/SelectElement.cpp:
        (WebCore::SelectElement::menuListDefaultEventHandler): Ripped out implicit submission for select elements.
        (WebCore::SelectElement::listBoxDefaultEventHandler): Ditto.
        (WebCore::SelectElement::defaultEventHandler): Ditto.
        * dom/SelectElement.h: Ditto.
        (WebCore::HTMLFormElement::submitImplicitly): Renamed submitClick to submitImplicitly to better match HTML5 spec
            language, changed the logic to match the rules above.
        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::defaultEventHandler): Reamed clickDefaultButton to implicitSubmission to better match
            HTML5 spec language, made radio element to trigger implicit submission.
        * html/HTMLSelectElement.cpp:
        (WebCore::HTMLSelectElement::defaultEventHandler): Removed passing of form() as parameter, because it's no longer
            necessary.

2010-04-29  Paweł Hajdan, Jr.  <phajdan.jr@chromium.org>

        Reviewed by Jeremy Orlow.

        Fix building with libpng-1.4.
        https://bugs.webkit.org/show_bug.cgi?id=33287

        No new tests (no behavior change).

        Original patch by John Bowler <jbowler@acm.org>

        * platform/image-encoders/skia/PNGImageEncoder.cpp:
        (WebCore::PNGImageEncoder::encode):

2010-04-29  Adam Langley  <agl@chromium.org>

        Reviewed by David Levin.

        This patch adds support for WOFF in Chromium. Since Chromium
        already transcodes all OpenType files for security reasons we
        are adding WOFF support into the transcoder.

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

        * css/CSSFontFaceSrcValue.cpp:
        (WebCore::CSSFontFaceSrcValue::isSupportedFormat):
          Recognise "woff" as a font-face format value (guarded by
          ENABLE(OPENTYPE_SANITIZER) at this point)
        * platform/graphics/opentype/OpenTypeSanitizer.cpp:
        (WebCore::OpenTypeSanitizer::sanitize):
          Change so that the transcoded font can be larger than the original.
          (WOFF files are compressed, so the transcoded TTF is typically
          larger.)

2010-04-29  Alex Milowski  <alex@milowski.com>

        Reviewed by Kenneth Rohde Christiansen.

        Updates to the Qt build to enable building MathML support.

        * WebCore.pri:
        * WebCore.pro:

2010-04-29  Xan Lopez  <xlopez@igalia.com>

        Reviewed by Gustavo Noronha.

        [GTK] GObject DOM bindings
        https://bugs.webkit.org/show_bug.cgi?id=33590

        Do not generate unneeded boilerplate in {get,set}_property methods
        when there are no properties to generate code for. This gets rid
        of lots of compiler warnings.

        * bindings/scripts/CodeGeneratorGObject.pm:

2010-04-29  Simon Hausmann  <simon.hausmann@nokia.com>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] Speed up text layouting
        https://bugs.webkit.org/show_bug.cgi?id=31719

        Use QFontMetrics::width() for the text width calculation instead
        of QTextLayout. This avoids expensive bearing calculations and the
        line breaking code.

        * platform/graphics/qt/FontQt.cpp:
        (WebCore::Font::floatWidthForComplexText):

2010-04-29  Kwang Yul Seo  <skyul@company100.net>

        Reviewed by Simon Hausmann.

        [WINCE] Export g_stackBase with JS_EXPORTDATA
        https://bugs.webkit.org/show_bug.cgi?id=37437

        Declare g_stackBase with JS_EXPORTDATA as it is imported from JavaScriptCore.

        * platform/wince/SharedTimerWince.cpp:

2010-04-29  Adam Barth  <abarth@webkit.org>

        Reviewed by Maciej Stachowiak.

        Remove custom bindings for PopStateEvent.initPopStateEvent
        https://bugs.webkit.org/show_bug.cgi?id=38311

        Our code generation of SerializedScriptValue was slightly buggy, but
        it's easy to fix.  Notice that the conversion to an atomic string is
        handled by the C++ type system and doesn't require logic in the code
        generator.

        * bindings/js/JSPopStateEventCustom.cpp:
        * bindings/scripts/CodeGeneratorJS.pm:
        * bindings/scripts/CodeGeneratorV8.pm:
        * bindings/scripts/test/GObject/WebKitDOMTestObj.cpp:
        (webkit_dom_test_obj_serialized_value):
        * bindings/scripts/test/GObject/WebKitDOMTestObj.h:
        * bindings/scripts/test/JS/JSTestObj.cpp:
        (WebCore::):
        (WebCore::jsTestObjPrototypeFunctionSerializedValue):
        * bindings/scripts/test/JS/JSTestObj.h:
        * bindings/scripts/test/ObjC/DOMTestObj.h:
        * bindings/scripts/test/ObjC/DOMTestObj.mm:
        (-[DOMTestObj serializedValue:]):
        * bindings/scripts/test/TestObj.idl:
        * bindings/scripts/test/V8/V8TestObj.cpp:
        (WebCore::TestObjInternal::serializedValueCallback):
        (WebCore::ConfigureV8TestObjTemplate):
        * bindings/v8/custom/V8PopStateEventCustom.cpp:
        * dom/PopStateEvent.idl:

2010-04-29  Kent Tamura  <tkent@chromium.org>

        Reviewed by Darin Adler.

        Fix a bug that selection drag-and-drop doesn't work for input/textarea.
        https://bugs.webkit.org/show_bug.cgi?id=38175

        The code supposed the selected region was in the destination text
        field. It is not true in a case of drag-and-drop.

        Test: editing/pasteboard/drag-drop-input-textarea.html

        * dom/InputElement.cpp:
        (WebCore::InputElement::handleBeforeTextInsertedEvent):
        * html/HTMLTextAreaElement.cpp:
        (WebCore::HTMLTextAreaElement::handleBeforeTextInsertedEvent):

2010-04-29  Adam Barth  <abarth@webkit.org>

        Reviewed by Maciej Stachowiak.

        Remove custom bindings for NodeFilter.acceptNode
        https://bugs.webkit.org/show_bug.cgi?id=38309

        This "custom" code was just an instance of the CallWith=ScriptState
        pattern.  Also, it looks like V8 just had a garbage implemenation that
        did nothing.

        * WebCore.gypi:
        * bindings/js/JSNodeFilterCustom.cpp:
        * bindings/v8/custom/V8NodeFilterCustom.cpp: Removed.
        * dom/NodeFilter.idl:

2010-04-29  Noam Rosenthal  <noam.rosenthal@nokia.com>

        Reviewed by Laszlo Gombos.

        [Qt] QtWebkit doesn't link with 3D canvas
        https://bugs.webkit.org/show_bug.cgi?id=38299

        Added implementation for GraphicsContext3D::isGLES2Compliant, which returns the correct value based on a Qt #define.

        No new tests: build fix

        * platform/graphics/qt/GraphicsContext3DQt.cpp:
        (WebCore::GraphicsContext3D::isGLES2Compliant):

2010-04-29  Simon Hausmann  <simon.hausmann@nokia.com>

        Reviewed by Tor Arne Vestbø.

        [Qt] REGRESSION(r57638): tst_qwebframe::objectDeleted() fails
        https://bugs.webkit.org/show_bug.cgi?id=38316

        Accessing properties of a deleted objects doesn't throw an exception
        anymore.

        Continue to expose the QObject class wrapper for objects that
        previously existed but don't exist anymore. QtClass is safe to
        use with a deleted QObject.

        * bridge/qt/qt_instance.cpp:
        (JSC::Bindings::QtInstance::getClass): Return null only if m_class
        doesn't exist yet and there's no m_object.

2010-04-29  Noam Rosenthal  <noam.rosenthal@nokia.com>

        Reviewed by Simon Hausmann.

        Reverse animations don't work in some use cases        
        https://bugs.webkit.org/show_bug.cgi?id=38075

        This was due to a code path special-casing reverse animations, that became obselete when we aligned our animation code
        with the CA implementation. That special case code path is now a bug - and this patch removes it.

        http://staff.washington.edu/fmf/2009/03/25/iphone-3d-css-transformations/ now runs the reverse
        animation correctly.

        * platform/graphics/qt/GraphicsLayerQt.cpp:
        (WebCore::TransformAnimationQt::applyFrame):

2010-04-29  Jan Hanssen  <jhanssen@codeaurora.org>

        Reviewed by Adam Barth.

        HTMLOptionElement::ownerSelectElement() needs to consider keygen elements
        https://bugs.webkit.org/show_bug.cgi?id=26016

        Patch written by Grace Kloba <klobag@gmail.com>, test fixed by me.

        Test: fast/dom/HTMLKeygenElement/keygen-option-select.html

        * html/HTMLOptionElement.cpp:
        (WebCore::HTMLOptionElement::ownerSelectElement):
        Make HTMLOptionElement::ownerSelectElement() consider the keygen element in addition to the current select element.

2010-04-29  Gustavo Sverzut Barbieri  <barbieri@profusion.mobi>

        Reviewed by Eric Seidel.

        Add EFL-specific code to Widget.h and move the empty
        frameRectsChanged() definition to Widget.cpp, since the EFL port
        needs to override that.
        http://webkit.org/b/36317

        No new tests required.

        * WebCore.base.exp:
        * platform/Widget.cpp:
        (WebCore::Widget::frameRectsChanged):
        * platform/Widget.h:

2010-04-29  Jarkko Sakkinen  <jarkko.j.sakkinen@gmail.com>

        Reviewed by Simon Hausmann.

        [Qt] GraphicsContext3DQt.cpp does not implement isGLES2Compliant() 
        https://bugs.webkit.org/show_bug.cgi?id=38216

        * platform/graphics/qt/GraphicsContext3DQt.cpp:
        (WebCore::GraphicsContext3D::isGLES2Compliant):

2010-04-29  Zhenyao Mo  <zmo@google.com>

        Reviewed by Dimitri Glazkov.

        Remove the unnecessary texImage2D function with Image as input in GraphicsContext3D
        https://bugs.webkit.org/show_bug.cgi?id=38235

        * html/canvas/WebGLRenderingContext.cpp:
        (WebCore::WebGLRenderingContext::texImage2D): Add extractImageData; add a common entry point for texImage2D with image input.
        (WebCore::WebGLRenderingContext::texImage2DBase): Add this function as the common entry point for texImage2D.
        (WebCore::WebGLRenderingContext::texSubImage2D): Add extractImageData; add a common entry point for texSubImage2D with image input.
        (WebCore::WebGLRenderingContext::texSubImage2DBase): Add this function as the common entry point for texSubImage2D.
        * html/canvas/WebGLRenderingContext.h: Add tex*Image{Base/Image} function declaration.
        * platform/graphics/GraphicsContext3D.h: Remove tex*Image declaration with Image input.
        * platform/graphics/mac/GraphicsContext3DMac.cpp: Remove tex*Image implementation with Image input.
        (WebCore::GraphicsContext3D::texImage2D):
        (WebCore::GraphicsContext3D::texSubImage2D):

2010-04-29  Noam Rosenthal  <noam.rosenthal@nokia.com>

        Reviewed by Simon Hausmann.

        [Qt] GraphicsLayer: flicker when starting an animation before the previous one ended.
        https://bugs.webkit.org/show_bug.cgi?id=38076

        This was due to the cude in the removeAnimations functions, which called deleteLater() without stopping the
        animation synchronously. The delay between the call to that function and the actual call to the animation's destructor
        is when the flicker occured. We fix this by calling stop() synchronously, and making sure that the value is reverted
        upon stop (updateState) and not upon the object's destruction.

        http://staff.washington.edu/fmf/2009/03/25/iphone-3d-css-transformations/ now doesn't flicker when
        the animation is toggled frequently.

        * platform/graphics/qt/GraphicsLayerQt.cpp:
        (WebCore::TransformAnimationQt::~TransformAnimationQt):
        (WebCore::TransformAnimationQt::applyFrame):
        (WebCore::TransformAnimationQt::updateState):
        (WebCore::OpacityAnimationQt::~OpacityAnimationQt):
        (WebCore::OpacityAnimationQt::updateState):
        (WebCore::GraphicsLayerQt::removeAnimationsForProperty):
        (WebCore::GraphicsLayerQt::removeAnimationsForKeyframes):

2010-04-28  Luiz Agostini  <luiz.agostini@openbossa.org>

        Reviewed by Simon Fraser.

        Media queries empty values
        https://bugs.webkit.org/show_bug.cgi?id=38116

        Adding isValid() method to MediaQueryExp to make it possible to differentiate
        between queries with empty values and queries with invalid values.

        Test: fast/media/media-query-invalid-value.html

        * css/MediaQueryEvaluator.cpp:
        (WebCore::MediaQueryEvaluator::eval):
        * css/MediaQueryExp.cpp:
        (WebCore::MediaQueryExp::MediaQueryExp):
        * css/MediaQueryExp.h:
        (WebCore::MediaQueryExp::isValid):

2010-04-28  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Yury Semikhatsky.

        Web Inspector: Allow editing script resources when resource tracking is enabled.

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

        * inspector/front-end/ScriptView.js:
        * inspector/front-end/ScriptsPanel.js:
        (WebInspector.ScriptsPanel.prototype.canEditScripts):
        (WebInspector.ScriptsPanel.prototype.editScriptSource):
        * inspector/front-end/SourceFrame.js:
        (WebInspector.SourceFrame.prototype.get textModel):
        * inspector/front-end/SourceView.js:
        (WebInspector.SourceView):
        (WebInspector.SourceView.prototype._addBreakpoint):
        (WebInspector.SourceView.prototype._editLine):
        (WebInspector.SourceView.prototype._editLineComplete):
        (WebInspector.SourceView.prototype._sourceIDForLine):

2010-04-25  Antonio Gomes  <tonikitoo@webkit.org>

        Reviewed by Darin Adler.

        Clicking a scrollbar blurs the currently focused element
        https://bugs.webkit.org/show_bug.cgi?id=16809

        WebKit ports that do not use native (platform) widgets for rendering the scrollbars
        are currently mismatching a common behaviour of other browser vendors (including
        Firefox and Opera): clicking on a frame scrollbar *should not* steal focus from content.
        WebKit browsers based ports that do use WebCore for handling scrollbars, like QtWebKit for
        instance, can observe the opposite behaviour.

        Patch fixes this behaviour by checking if current MouseDown event targets a frame scrollbar.
        If that is the case, it bails out and do not change focus behavior at all.

        It is important to note that the given way this is implemented by this patch, non-frame
        scrollbars (e.g. a vertical scrollbar of an overflowed textareas or divs) will keep working
        in the same way as it works currently.

        Tests: scrollbars/scrollbar-click-does-not-blur-content.html
               scrollbars/scrollbar-iframe-click-does-not-blur-content.html

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

2010-04-28  Dan Bernstein  <mitz@apple.com>

        Rubber-stamped by Maciej Stachowiak.

        Try to fix test failures seen on the Leopard build bot after r58467

        * platform/graphics/SimpleFontData.cpp:
        (WebCore::SimpleFontData::platformGlyphInit): Initialize m_zeroWidthSpaceGlyph before
        calling widthForGlyph(), as the latter uses the former.

2010-04-28  Martin Robinson  <mrobinson@webkit.org>

        Reviewed by Gustavo Noronha.

        [GTK] Enable DOM clipboard and drag-and-drop access
        https://bugs.webkit.org/show_bug.cgi?id=30623

        Make ClipboardGtk a "live" DataTransfer object, able to modify
        the clipboard when setData(...) is called.

        * platform/gtk/ClipboardGtk.cpp:
        (WebCore::Editor::newGeneralClipboard): Pass the GtkClipboard into the factory method.
        (WebCore::ClipboardGtk::ClipboardGtk): Create two separate constructors, one for DnD data and one for clipboard data.
        (WebCore::dataObjectTypeFromHTMLClipboardType): Added.
        (WebCore::ClipboardGtk::clearData): Clear the member DataObject, optionally write the clipboard.
        (WebCore::ClipboardGtk::clearAllData): Ditto.
        (WebCore::joinURIList): Added.
        (WebCore::ClipboardGtk::getData): Get the data from the clipboard, if possible.
        (WebCore::ClipboardGtk::setData): Write data to the DataObject and maybe the clipboard.
        (WebCore::ClipboardGtk::types): Read the clipboard/DataObject to find applicable types.
        (WebCore::ClipboardGtk::files): Read the clipboard/DataObject to find the files.
        (WebCore::ClipboardGtk::writeURL): Write to the DataObject and maybe the clipboard.
        (WebCore::ClipboardGtk::writeRange): Ditto.
        (WebCore::ClipboardGtk::writePlainText): Ditto.
        (WebCore::ClipboardGtk::hasData): Query the clipboard/DataObject.
        * platform/gtk/ClipboardGtk.h: 
        (WebCore::ClipboardGtk::create): Added one factory for pasteboard-backed DataObjects and one for DnD-backed objects.
        * platform/gtk/DataObjectGtk.cpp:
        (WebCore::replaceNonBreakingSpaceWithSpace): Added this helper function to clean &nbsp; from plain text.
        (WebCore::DataObjectGtk::markup): Actually return the range if it's set.
        (WebCore::DataObjectGtk::setText): Clean &nbsp; from plain text.
        (WebCore::DataObjectGtk::clearText): Added.
        (WebCore::DataObjectGtk::clearMarkup): Added.
        * platform/gtk/DataObjectGtk.h:
        (WebCore::DataObjectGtk::clearURIList): Added.
        (WebCore::DataObjectGtk::clearImage): Added.
        * platform/gtk/PasteboardHelper.cpp:
        (WebCore::PasteboardHelper::initializeTargetList): Added target ID's for URI list and Netscape URL targets.
        (WebCore::urisToKURLVector): Added.
        (WebCore::PasteboardHelper::getClipboardContents): Added.
        (WebCore::PasteboardHelper::fillSelectionData): Added logic for URI lists and Netscape URLs.
        (WebCore::PasteboardHelper::targetListForDataObject): Ditto.
        * platform/gtk/PasteboardHelper.h: Added default argument to writeClipboardContents and new method.

2010-04-28  Martin Robinson  <mrobinson@webkit.org>

        Reviewed by Gustavo Noronha.

        [GTK] Enable DOM clipboard and drag-and-drop access
        https://bugs.webkit.org/show_bug.cgi?id=30623

        Use the length of the UTF-8 markup data in bytes when filling GtkSelectionData.

        No new tests, because pasteboard DataTransfer tests will be enabled
        with the completion of the GTK+ DataTransfer object.

        * platform/gtk/PasteboardGtk.cpp:
        (WebCore::clipboard_get_contents_cb): Use strlen here instead of g_utf8_strlen.

2010-04-28  Dan Bernstein  <mitz@apple.com>

        Reviewed by Adele Peterson.

        More of <rdar://problem/7855777> REGRESSION: Memory usage increase caused by storing glyph bounds in GlyphMetricsMap
        https://bugs.webkit.org/show_bug.cgi?id=37936

        Assigning zero width and empty bounds to the ZERO WIDTH SPACE glyph often allocates a width map
        page and a bounds map page for the glyph, each of which pages contains 255 unused entries. Save
        this space by not storing the zero width and empty bounds in the metrics maps.

        * platform/graphics/SimpleFontData.cpp:
        (WebCore::SimpleFontData::SimpleFontData): Initialize m_zeroWidthSpaceGlyph.
        (WebCore::SimpleFontData::platformGlyphInit): Set m_zeroWidthSpaceGlyph. Don’t create entries
        for the ZERO WIDTH SPACE glyph in the width map and in the bounds map.
        * platform/graphics/SimpleFontData.h:
        (WebCore::SimpleFontData::boundsForGlyph): Return empty bounds for the ZERO WIDTH SPACE glyph
        without consulting the bounds map.
        (WebCore::SimpleFontData::widthForGlyph): Return zero for the ZERO WIDTH SPACE glyph without
        consulting the width map.

2010-04-28  Mark Rowe  <mrowe@apple.com>

        Reviewed by Adele Peterson.

        <rdar://problem/7847573> Safari welcome page logs JavaScript exception during page load

        The Safari welcome page runs afoul of the same-origin restriction on access to stylesheet rules
        that was added to address <https://bugs.webkit.org/show_bug.cgi?id=20527>. To work around this we're
        adding a temporary site-specific quirk that relaxes this restriction for the particular cross-origin
        access that occurs on the Safari welcome page.

        * css/CSSStyleSheet.cpp:
        (WebCore::CSSStyleSheet::cssRules):

2010-04-28  Mike Thole  <mthole@apple.com>

        Reviewed by Mark Rowe.

        Add separate exports file for symbols dependent on WTF_USE_PROTECTION_SPACE_AUTH_CALLBACK.

        * DerivedSources.make: Updated for WebCore.ProtectionSpaceAuthCallback.exp.
        * WebCore.ProtectionSpaceAuthCallback.exp: Added.
        * WebCore.xcodeproj/project.pbxproj:

2010-04-28  Evan Martin  <evan@chromium.org>

        Reviewed by David Levin.

        [chromium] revert getFontDataForCharacters change in r58341
        https://bugs.webkit.org/show_bug.cgi?id=38288

        It caused a performance regression.

        * platform/chromium/ChromiumBridge.h:
        * platform/graphics/chromium/FontCacheLinux.cpp:
        (WebCore::FontCache::getFontDataForCharacters):

2010-04-28  Eric Seidel  <eric@webkit.org>

        Unreviewed, rolling out r58441.
        http://trac.webkit.org/changeset/58441
        https://bugs.webkit.org/show_bug.cgi?id=37618

        Broke 3 test on Qt.

        * page/DragController.cpp:
        (WebCore::DragController::tryDocumentDrag):
        (WebCore::DragController::concludeEditDrag):
        * page/DragController.h:
        (WebCore::DragController::setDragInitiator):
        (WebCore::DragController::dragInitiator):
        (WebCore::DragController::documentUnderMouse):

2010-04-28  Darin Adler  <darin@apple.com>

        Reviewed by Dan Bernstein.

        Remove some obsolete scrolling code
        https://bugs.webkit.org/show_bug.cgi?id=38293

        * page/Chrome.cpp:
        (WebCore::Chrome::scrollRectIntoView): Removed ScrollView* argument.
        * page/Chrome.h: Made scrollRectIntoView non-virtual, and removed ScrollView* argument.

        * page/FrameView.cpp: Removed scrollRectIntoViewRecursively.
        * page/FrameView.h: Removed scrollRectIntoViewRecursively and made
        setScrollPosition non-virtual, since there is no class derived from
        this class, and ScrollView's setScrollPosition is non-virtual.

        * platform/HostWindow.h: Removed scrollRectIntoView.

        * platform/ScrollView.cpp:
        (WebCore::ScrollView::scrollRectIntoViewRecursively): Updated comment
        since I was able to do most of the tasks listed here.

        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::scrollRectToVisible): Removed 0 passed for
        ScrollView* argument to Chrome::scrollRectIntoView.

2010-04-28  Mike Thole  <mthole@apple.com>

        Reviewed by David Kilzer.

        Add canAuthenticateAgainstProtectionSpace() to frame loader so that a protection space 
        can be inspected before attempting to authenticate against it
        https://bugs.webkit.org/show_bug.cgi?id=38271

        * loader/EmptyClients.h:
        (WebCore::EmptyFrameLoaderClient::canAuthenticateAgainstProtectionSpace): Added.
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::canAuthenticateAgainstProtectionSpace): Added.
        * loader/FrameLoader.h:
        * loader/FrameLoaderClient.h:
        * loader/ResourceLoader.cpp:
        (WebCore::ResourceLoader::canAuthenticateAgainstProtectionSpace): Added.
        * loader/ResourceLoader.h:
        (WebCore::ResourceLoader::canAuthenticateAgainstProtectionSpace): Added.
        * platform/network/ProtectionSpace.h:
        (WebCore::):
        * platform/network/ResourceHandle.h:
        * platform/network/ResourceHandleClient.h:
        (WebCore::ResourceHandleClient::canAuthenticateAgainstProtectionSpace): Added.
        * platform/network/mac/AuthenticationMac.mm:
        (WebCore::mac):
        Add cases for case ProtectionSpaceAuthenticationSchemeServerTrustEvaluationRequested and
        ProtectionSpaceAuthenticationSchemeClientCertificateRequested.  Guarded with the
        #if USE(PROTECTION_SPACE_AUTH_CALLBACK) as the new NSURLProtectionSpace constants don't
        exist prior to Mac OS X 10.6.
        (WebCore::core): Ditto.
        * platform/network/mac/ResourceHandleMac.mm:
        (WebCore::ResourceHandle::canAuthenticateAgainstProtectionSpace): Added.
        (-[WebCoreResourceHandleAsDelegate connection:canAuthenticateAgainstProtectionSpace:]): Added.

2010-04-28  Abhishek Arya  <inferno@chromium.org>

        Reviewed by Eric Seidel.

        Convert m_documentUnderMouse, m_dragInitiator to RefPtr.
        Eliminated unused m_dragInitiator accessor to prevent dereferencing.
        https://bugs.webkit.org/show_bug.cgi?id=37618

        Test: editing/pasteboard/drag-drop-iframe-refresh-crash.html

        * page/DragController.cpp:
        (WebCore::DragController::tryDocumentDrag):
        (WebCore::DragController::concludeEditDrag):
        * page/DragController.h:
        (WebCore::DragController::draggingImageURL):
        (WebCore::DragController::documentUnderMouse):

2010-04-28  Dumitru Daniliuc  <dumi@chromium.org>

        Unreviewed, fixing a build problem introduced by the previous patch.

        * storage/DatabaseSync.cpp:
        (WebCore::DatabaseSync::openDatabaseSync):

2010-04-23  Dumitru Daniliuc  <dumi@chromium.org>

        Reviewed by Jeremy Orlow.

        Adding some required classes for the sync WebSQLDatabases API.
        https://bugs.webkit.org/show_bug.cgi?id=34994

        * GNUmakefile.am:
        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * storage/DatabaseSync.cpp: Added.
        (WebCore::DatabaseSync::databaseInfoTableName):
        (WebCore::DatabaseSync::setIsAvailable):
        (WebCore::DatabaseSync::isAvailable):
        (WebCore::DatabaseSync::openDatabaseSync):
        (WebCore::DatabaseSync::DatabaseSync):
        (WebCore::DatabaseSync::~DatabaseSync):
        (WebCore::DatabaseSync::version):
        (WebCore::DatabaseSync::changeVersion):
        (WebCore::DatabaseSync::transaction):
        * storage/DatabaseSync.h: Added.
        (WebCore::DatabaseSync::databaseDebugName):
        * storage/SQLTransactionSync.cpp: Added.
        (WebCore::SQLTransactionSync::create):
        (WebCore::SQLTransactionSync::SQLTransactionSync):
        (WebCore::SQLTransactionSync::~SQLTransactionSync):
        (WebCore::SQLTransactionSync::executeSQL):
        * storage/SQLTransactionSync.h: Added.
        (WebCore::SQLTransactionSync::database):
        (WebCore::SQLTransactionSync::isReadOnly):
        * storage/SQLTransactionSyncCallback.h: Added.
        (WebCore::SQLTransactionSyncCallback::~SQLTransactionSyncCallback):

2010-04-28  İsmail Dönmez  <ismail@namtrac.org>

        Reviewed by Simon Hausmann.

        Fix compilation with QT_NO_CURSOR defined.

        * platform/qt/QWebPageClient.h:
        (QWebPageClient::resetCursor):
        (QWebPageClient::setCursor):

2010-04-28  Abhishek Arya  <inferno@chromium.org>

        Reviewed by Alexey Proskuryakov.

        Added a check to make sure that resources from a different https origin are not cached.
        https://bugs.webkit.org/show_bug.cgi?id=33456

        Test: http/tests/appcache/different-https-origin-resource-main.html

        * loader/appcache/ManifestParser.cpp:
        (WebCore::parseManifest):

2010-04-28  Sam Weinig  <sam@webkit.org>

        Reviewed by Mark Rowe.

        Only set -allowable_client WebKit2 for engineering builds on SnowLeopard
        and later.

        * Configurations/WebCore.xcconfig:

2010-04-28  Darin Adler  <darin@apple.com>

        Reviewed by Adele Peterson.

        REGRESSION: Autoscroll does not work in Mail messages
        https://bugs.webkit.org/show_bug.cgi?id=38267
        rdar://problem/7559799

        Still haven't figured out a good way to test this with DumpRenderTree
        or with Safari. Testing has to be done with Mail for now.

        The machinery to make autoscrolling work on Mac OS X when a WebView is embedded in another
        view had gotten broken in multiple ways. For some reason, a combination of bugs made it
        partly work until around r48064. This brings it back.

        There were three problems:

            1) Code in EventHandler decided there was nothing to scroll, so didn't start
               the autoscroll timer.
            2) The wrong rectangle was passed to Chrome::scrollRectIntoView.
            3) The Mac WebKit implementation of ChromeClient::scrollRectIntoView did incorrect
               coordinate conversion.

        I verified that none of these have any effect on regression tests, or behavior in
        web browsers, or behavior on platforms other than Mac.

        * page/EventHandler.cpp:
        (WebCore::canAutoscroll): Added. Returns true for boxes that can scroll directly
        and for the top level box of the top frame.
        (WebCore::EventHandler::handleMouseDraggedEvent): Use canAutoscroll.
        (WebCore::EventHandler::updateAutoscrollRenderer): Ditto.

        * page/FrameView.cpp:
        (WebCore::FrameView::scrollToAnchor): Fixed comment.

        * platform/ScrollView.cpp:
        (WebCore::ScrollView::scrollRectIntoViewRecursively): Put ASSERT_NOT_REACHED into this
        now-unused function along with some comments about removing some obsolete code.

        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::scrollRectToVisible): Removed call to scrollRectIntoViewRecursively
        since from the WebKit point of view this is the topmost scroll view anyway. Instead call
        setScrollPosition. Moved the code to call Chrome::scrollRectIntoView here since it needs
        to use a different rectangle anyway.

2010-04-21  Ojan Vafai  <ojan@chromium.org>

        Reviewed by Adele Peterson.

        http://trac.webkit.org/changeset/57215 caused perf/memory regressions
        https://bugs.webkit.org/show_bug.cgi?id=37292

        #if out the canUseGlyphCache Changes from r57215 as they caused a 
        8% perf regression on Chromium's international page load tests so that
        the perf regression can be fixed properly without being left in the tree.

        * platform/graphics/FontFastPath.cpp:
        (WebCore::Font::canUseGlyphCache):

2010-04-28  Beth Dakin  <bdakin@apple.com>

        Reviewed by Darin Adler.

        Fix for <rdar://problem/7474349>

        Add a synchronous display mechanism for WKCACFLayerRenderer. 

        * platform/graphics/win/WKCACFLayerRenderer.cpp:
        (WebCore::WKCACFLayerRenderer::setRootContentsAndDisplay): This is 
        just like setRootContents(), but it calls paint() instead of 
        renderSoon().
        * platform/graphics/win/WKCACFLayerRenderer.h:

2010-04-28  Dmitry Titov  <dimich@chromium.org>

        Reviewed by Geoffrey Garen.

        REGRESSION: fast/workers/wrapper-map-gc.html crashes on Snow Leopard Release Bot
        https://bugs.webkit.org/show_bug.cgi?id=37554

        The flaky fast/workers/wrapper-map-gc.html will stop being flaky.

        * bindings/js/JSEventListener.cpp:
        (WebCore::JSEventListener::handleEvent):
        check if JS execution was terminated, as in cases of Worker.terminate() or WorkerGlobalScope.close().
        * bindings/js/JSWorkerContextBase.cpp:
        (WebCore::toJS): ASSERT the value of workerContextWrapper, it should never be 0.
        * bindings/js/WorkerScriptController.h:
        (WebCore::WorkerScriptController::workerContextWrapper): remove returning 0 if JS execution was forbidden.
        (WebCore::WorkerScriptController::isExecutionForbidden):
        * bindings/v8/WorkerScriptController.h:
        (WebCore::WorkerScriptController::isExecutionForbidden):

        Add ScriptExecutionContext::isJSExecutionTerminated(), it is always 'false' for Document
        and 'true' for WorkerContext when script is terminated.
        * dom/ScriptExecutionContext.h:
        * dom/Document.h:
        (WebCore::Document::isJSExecutionTerminated):
        * workers/WorkerContext.cpp:
        (WebCore::WorkerContext::isJSExecutionTerminated):
        * workers/WorkerContext.h:

2010-04-28  Ilya Tikhonovsky  <loislo@chromium.org>

        Reviewed by Yury Semikhatsky.

        WebInspector: Multiple Main Resource Content Loaded marks appear in Resource panel.
        https://bugs.webkit.org/show_bug.cgi?id=38270

        * inspector/front-end/ResourcesPanel.js:
        (WebInspector.ResourcesPanel.prototype.updateGraphDividersIfNeeded):

2010-04-28  Ilya Tikhonovsky  <loislo@chromium.org>

        Reviewed by Yury Semikhatsky.

        WebInspector: Timeline: We can have precise urls in the EvaluateScript records.
        https://bugs.webkit.org/show_bug.cgi?id=38264

        * inspector/front-end/TimelinePanel.js:
        (WebInspector.TimelinePanel.FormattedRecord.prototype._generatePopupContent):
        (WebInspector.TimelinePanel.FormattedRecord.prototype._getRecordDetails):

2010-04-28  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Timothy Hatcher.

        Web Inspector: Linkify node and function in the event listeners panel.

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

        * bindings/js/ScriptEventListener.cpp:
        (WebCore::eventListenerHandlerBody):
        (WebCore::eventListenerHandlerLocation):
        * bindings/js/ScriptEventListener.h:
        * bindings/v8/ScriptEventListener.cpp:
        (WebCore::eventListenerHandlerBody):
        (WebCore::eventListenerHandlerLocation):
        * bindings/v8/ScriptEventListener.h:
        * inspector/InspectorDOMAgent.cpp:
        (WebCore::InspectorDOMAgent::buildObjectForEventListener):
        * inspector/front-end/ElementsPanel.js:
        (WebInspector.ElementsPanel.prototype.linkifyNodeReference):
        (WebInspector.ElementsPanel.prototype.linkifyNodeReference.preventDefault):
        * inspector/front-end/EventListenersSidebarPane.js:
        (WebInspector.EventListenersSidebarPane.prototype.update.callback):
        (WebInspector.EventListenersSidebarPane.prototype.update):
        ():
        * inspector/front-end/StylesSidebarPane.js:
        (WebInspector.StylesSidebarPane.prototype._rebuildSectionsForStyleRules):
        * inspector/front-end/inspector.css:
        (.node-link):

2010-04-28  Julien Chaffraix  <jchaffraix@webkit.org>

        Reviewed by Alexey Proskuryakov.

        [XHR] Cross-Origin synchronous request with credential raises NETWORK_ERR
        https://bugs.webkit.org/show_bug.cgi?id=37781
        <rdar://problem/7905150>

        Tests: http/tests/xmlhttprequest/access-control-preflight-credential-async.html
               http/tests/xmlhttprequest/access-control-preflight-credential-sync.html

        Rolling the patch in as I could not reproduce Qt results locally.

        * loader/DocumentThreadableLoader.cpp:
        (WebCore::DocumentThreadableLoader::DocumentThreadableLoader): Now we remove the
        credential from the request here to avoid forgetting to do so in the different code path.
        (WebCore::DocumentThreadableLoader::makeSimpleCrossOriginAccessRequest): Just add the
        "Origin" header.
        (WebCore::DocumentThreadableLoader::loadRequest): Check here the the credential have
        been removed so that we don't leak them. Also tweaked a comment to make it clear that
        the URL check has issue when credential is involved.

2010-04-28  Noam Rosenthal  <noam.rosenthal@nokia.com>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] GraphicsLayer: preserves-3d and backface visibility
        https://bugs.webkit.org/show_bug.cgi?id=35312

        Implement preserves-3d by maintaining the 3D transformation heirarchy inside GraphicsLayerQt, and extrapolating
        the relative QTransform. When the extrapolation fails (un-invertible matrix) we ignore the transformation change.

        WebKitSite/blog-files/3d-transforms test now work with Qt.

        * platform/graphics/qt/GraphicsLayerQt.cpp:
        (WebCore::GraphicsLayerQtImpl::updateTransform):
        (WebCore::GraphicsLayerQtImpl::opaqueArea):
        (WebCore::GraphicsLayerQtImpl::boundingRect):
        (WebCore::GraphicsLayerQtImpl::paint):
        (WebCore::GraphicsLayerQtImpl::flushChanges):

2010-04-28  Ilya Tikhonovsky  <loislo@chromium.org>

        Reviewed by Yury Semikhatsky.

        Web Inspector: View frame selector for Timeline overview panel is redesigned a bit.
        Now it is possible to adjust view frame by resizer bars and by click-n-drag in overview pane.
        https://bugs.webkit.org/show_bug.cgi?id=38251

        * inspector/front-end/TimelineOverviewPane.js:
        (WebInspector.TimelineOverviewPane):
        (WebInspector.TimelineOverviewPane.prototype.reset):
        (WebInspector.TimelineOverviewPane.prototype._dragWindow):
        (WebInspector.TimelineOverviewPane.prototype._windowSelectorDragging):
        (WebInspector.TimelineOverviewPane.prototype._endWindowSelectorDragging):
        (WebInspector.TimelineOverviewPane.prototype._resizeWindowLeft):
        (WebInspector.TimelineOverviewPane.prototype._resizeWindowRight):
        (WebInspector.TimelineOverviewPane.prototype._setWindowPosition):
        (WebInspector.TimelinePanel.WindowSelector):
        (WebInspector.TimelinePanel.WindowSelector.prototype._createSelectorElement):
        (WebInspector.TimelinePanel.WindowSelector.prototype._close):
        (WebInspector.TimelinePanel.WindowSelector.prototype._updatePosition):
        * inspector/front-end/inspector.css:
        (#timeline-overview-grid):
        (.timeline-window-selector):
        (#timeline-overview-window):
        (.timeline-overview-dividers-background):
        (.timeline-overview-window-rulers):
        (.timeline-window-resizer):

2010-04-28  Marcus Bulach  <bulach@chromium.org>

        Reviewed by Jeremy Orlow.

        Reverts 58340 (https://bugs.webkit.org/show_bug.cgi?id=38158) due to regression on fast/text/international/khmer-selection.html
        https://bugs.webkit.org/show_bug.cgi?id=38254

        * platform/graphics/chromium/FontLinux.cpp:
        (WebCore::adjustTextRenderMode):
        (WebCore::TextRunWalker::getTextRun):
        (WebCore::TextRunWalker::getNormalizedTextRun):
        (WebCore::TextRunWalker::setGlyphXPositions):
        (WebCore::glyphIndexForXPositionInScriptRun):
        (WebCore::Font::offsetForPositionForComplexText):
        (WebCore::Font::selectionRectForComplexText):
        * platform/graphics/chromium/FontPlatformDataLinux.cpp:
        (WebCore::FontPlatformData::setupPaint):
        * platform/graphics/chromium/HarfbuzzSkia.cpp:
        (WebCore::getOutlinePoint):
        * platform/graphics/skia/GraphicsContext3DSkia.cpp:
        (WebCore::GraphicsContext3D::getImageData):
        * platform/graphics/skia/GraphicsContextSkia.cpp:
        (WebCore::isCoordinateSkiaSafe):
        (WebCore::GraphicsContext::fillRect):
        (WebCore::GraphicsContext::strokePath):
        (WebCore::GraphicsContext::strokeRect):

2010-04-28  Andrey Kosyakov  <caseq@chromium.org>

        Reviewed by Yury Semikhatsky.

        Log error message to inspector console if a resource fails to load.
        Disable checking of mime-type consistency for failed resources.
        https://bugs.webkit.org/show_bug.cgi?id=37215

        Test: http/tests/inspector/console-resource-errors.html

        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::didReceiveResponse):
        (WebCore::InspectorController::didFailLoading):
        * inspector/front-end/Resource.js:
        (WebInspector.Resource.prototype._mimeTypeIsConsistentWithType):
        * inspector/front-end/ResourcesPanel.js:
        (WebInspector.ResourcesPanel.prototype.recreateViewForResourceIfNeeded):

2010-04-28  Yury Semikhatsky  <yurys@chromium.org>

        Reviewed by Pavel Feldman.

        Support pause on exceptions in v8 implementation of ScriptDebugServer.

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

        * bindings/v8/ScriptDebugServer.cpp:
        (WebCore::ScriptDebugServer::addListener):
        (WebCore::ScriptDebugServer::pauseOnExceptionsState):
        (WebCore::ScriptDebugServer::setPauseOnExceptionsState):
        (WebCore::ScriptDebugServer::currentCallFrame):
        (WebCore::ScriptDebugServer::handleV8DebugMessage):
        (WebCore::ScriptDebugServer::dispatchDidParseSource):
        * bindings/v8/ScriptDebugServer.h:

2010-04-28  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r58313.
        http://trac.webkit.org/changeset/58313
        https://bugs.webkit.org/show_bug.cgi?id=38253

        Regression evident in pixel tests: the search icon is always
        clipped at the bottom. (Requested by jorlow on #webkit).

        * rendering/RenderTextControl.cpp:
        (WebCore::RenderTextControl::controlClipRect):
        * rendering/RenderTextControl.h:
        (WebCore::RenderTextControl::hasControlClip):
        * rendering/RenderTextControlSingleLine.cpp:
        (WebCore::RenderTextControlSingleLine::paint):
        * rendering/RenderTextControlSingleLine.h:

2010-04-28  Justin McPherson <justin.mcpherson@nokia.com>

        Reviewed by Simon Hausmann.

        [Qt] Fix detection of Qt 4.7's multimedia libraries

        QtMultimedia has been split into an additional media services library, which
        we're using. mediaservices depends on multimedia.

        * WebCore.pro:

2010-04-28  Shinichiro Hamaji  <hamaji@chromium.org>

        Unreviewed attempt to fix the chromium build.

        Add layoutTestController.setPrinting()
        https://bugs.webkit.org/show_bug.cgi?id=37203

        * rendering/RenderTreeAsText.cpp:

2010-04-27  Shinichiro Hamaji  <hamaji@chromium.org>

        Reviewed by Darin Adler and Eric Seidel.

        Add layoutTestController.setPrinting()
        https://bugs.webkit.org/show_bug.cgi?id=37203

        Added RenderAsTextPrintingMode as a behavior of externalRepresentation.

        Now ~PrintContext() calls end() automatically.

        * page/PrintContext.cpp:
        (WebCore::PrintContext::~PrintContext):
        * rendering/RenderTreeAsText.cpp:
        (WebCore::externalRepresentation):
        * rendering/RenderTreeAsText.h:
        (WebCore::):

2010-04-27  Yuzo Fujishima  <yuzo@google.com>

        Reviewed by Eric Seidel.

        Enhance CSS parser for Paged Media (Iteration 4)
        Implement page property parsing as specified at http://dev.w3.org/csswg/css3-page/#using-named-pages.
        https://bugs.webkit.org/show_bug.cgi?id=35853

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

2010-04-27  Yuzo Fujishima  <yuzo@google.com>

        Reviewed by Dimitri Glazkov.

        Enhance CSS parser for Paged Media (Iteration 3)
        Implement size parameter parsing for Paged Media.
        https://bugs.webkit.org/show_bug.cgi?id=35851

        I believe size property hasn't been used so far because (1) it hasn't been properly parsed and
        (2) a comment in CSSComputedStyleDeclaration::getPropertyCSSValue says so.
        Changing the way of parsing it should not cause any regressions -- no existing tests fail because of this change.

        * css/CSSParser.cpp:
        (WebCore::CSSParser::parseValue):
        (WebCore::CSSParser::parseSize):
        (WebCore::CSSParser::parseSizeParameter):
        * css/CSSParser.h:
        (WebCore::CSSParser::):
        * css/CSSValueKeywords.in:

2010-04-27  Yuzo Fujishima  <yuzo@google.com>

        Reviewed by Eric Seidel.

        Enhance CSS parser for Paged Media (Iteration 2)
        Parse and hold paged media rules in CSSStyleSelector.

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

        Test: printing/page-rule-css-text.html

        * css/CSSGrammar.y:
        * css/CSSPageRule.cpp:
        (WebCore::CSSPageRule::CSSPageRule):
        (WebCore::CSSPageRule::selectorText):
        * css/CSSPageRule.h:
        (WebCore::CSSPageRule::create):
        (WebCore::CSSPageRule::isPageRule):
        * css/CSSParser.cpp:
        (WebCore::CSSParser::createPageRule):
        * css/CSSStyleRule.h:
        * css/CSSStyleSelector.cpp:
        (WebCore::CSSRuleSet::getPageRules):
        (WebCore::CSSRuleSet::CSSRuleSet):
        (WebCore::CSSRuleSet::~CSSRuleSet):
        (WebCore::CSSRuleSet::addPageRule):
        (WebCore::CSSRuleSet::addRulesFromSheet):
        * css/CSSStyleSelector.h:
        * css/StyleBase.h:
        (WebCore::StyleBase::isPageRule):

2010-04-27  Daniel Bates  <dbates@rim.com>

        Reviewed by Oliver Hunt.

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

        Fixes an issue where the canvas method strokeRect will stroke a
        rectangle whose dimensions are 0 when lineWidth > 1.

        As per the definition of strokeRect in the HTML Canvas 2D Context
        spec. <http://www.w3.org/TR/2dcontext/#dom-context-2d-strokerect>,
        this method should have no effect when both the height and width
        are zero.

        Tests: fast/canvas/canvas-clearRect.html
               fast/canvas/canvas-fillRect.html

        * html/canvas/CanvasRenderingContext2D.cpp:
        (WebCore::validateRectForCanvas): Return false if height, width == 0.

2010-04-27  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        Remove obsolete custom bindings file
        https://bugs.webkit.org/show_bug.cgi?id=38223

        We don't need these files anymore because they are empty.

        * Android.jscbindings.mk:
        * GNUmakefile.am:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSAbstractWorkerCustom.cpp: Removed.
        * bindings/js/JSBindingsAllInOne.cpp:
        * bindings/js/JSDocumentFragmentCustom.cpp: Removed.
        * bindings/js/JSEventSourceCustom.cpp: Removed.

2010-04-27  Daniel Cheng  <dcheng@chromium.org>

        Reviewed by Jian Li.

        [Chromium] Filter out URLs with a file scheme from text/uri-list when dragging.
        https://bugs.webkit.org/show_bug.cgi?id=38227

        Unfortunately, the simple fix of not populating the drag data with file URLs doesn't work
        since the default drop handling uses the drag data URL to navigate to dropped files/URLs.
        For now, we hack around the problem in the Chromium platform, but the proper long term
        solution is to change DragController::performDrag to check dragData::asFilenames().

        No new tests.

        * platform/chromium/ClipboardChromium.cpp:
        (WebCore::ClipboardChromium::getData):
        (WebCore::ClipboardChromium::types):

2010-04-27  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by the inimitable Dan Bernstein.

        SVG as background image renders incorrectly after zooming
        https://bugs.webkit.org/show_bug.cgi?id=38215
        
        When doing a partial redraw of an SVGImage used as a CSS background
        image, we're limited to drawing the entire Frame, clipped to the dirty rect.
        Because of this, we need to fix up the CTM so that the origin is at the
        top left of the unclipped image, rather than the top left of the
        portion being redrawn.

        Test: fast/images/svg-background-partial-redraw.html

        * svg/graphics/SVGImage.cpp:
        (WebCore::SVGImage::draw):

2010-04-27  Yuzo Fujishima  <yuzo@google.com>

        Reviewed by David Hyatt.

        Retry of: Enhance CSS parser for Paged Media (Iteration 1)

        In this change, the grammar is extended and skeletal methods for creating page rules and margin at-rules are defined.
        The contents of the methods should be implemented by other changes.

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

        Test: fast/css/parsing-page-rule.html

        * css/CSSGrammar.y:
        * css/CSSParser.cpp:
        (WebCore::CSSParser::CSSParser):
        (WebCore::CSSParser::clearProperties):
        (WebCore::CSSParser::createPageRule):
        (WebCore::CSSParser::createMarginAtRule):
        (WebCore::CSSParser::startDeclarationsForMarginBox):
        (WebCore::CSSParser::endDeclarationsForMarginBox):
        * css/CSSParser.h:
        * css/CSSSelector.cpp:
        (WebCore::CSSSelector::pseudoId):
        (WebCore::nameToPseudoTypeMap):
        (WebCore::CSSSelector::extractPseudoType):
        * css/CSSSelector.h:
        (WebCore::CSSSelector::):
        * css/tokenizer.flex:

2010-04-27  Julien Chaffraix  <jchaffraix@webkit.org>

        Unreviewed, rolling out my changes as it rendered the Qt bot unreliable.

        * loader/DocumentThreadableLoader.cpp:
        (WebCore::DocumentThreadableLoader::DocumentThreadableLoader):
        (WebCore::DocumentThreadableLoader::makeSimpleCrossOriginAccessRequest):
        (WebCore::DocumentThreadableLoader::loadRequest):

2010-04-27  Julien Chaffraix  <jchaffraix@webkit.org>

        Reviewed by Alexey Proskuryakov.

        [XHR] Cross-Origin synchronous request with credential raises NETWORK_ERR
        https://bugs.webkit.org/show_bug.cgi?id=37781
        <rdar://problem/7905150>

        Tests: http/tests/xmlhttprequest/access-control-preflight-credential-async.html
               http/tests/xmlhttprequest/access-control-preflight-credential-sync.html

        * loader/DocumentThreadableLoader.cpp:
        (WebCore::DocumentThreadableLoader::DocumentThreadableLoader): Now we remove the
        credential from the request here to avoid forgetting to do so in the different code path.
        (WebCore::DocumentThreadableLoader::makeSimpleCrossOriginAccessRequest): Just add the
        "Origin" header.
        (WebCore::DocumentThreadableLoader::loadRequest): Check here the the credential have
        been removed so that we don't leak them. Also tweaked a comment to make it clear that
        the URL check has issue when credential is involved.

2010-04-27  Sam Weinig  <sam@webkit.org>

        Reviewed by Maciej Stachowiak.

        Fix for https://bugs.webkit.org/show_bug.cgi?id=38238
        Allow both WebKit and WebKit2 to link to the same WebCore.framework

        * Configurations/WebCore.xcconfig: Use -allowable_client WebKit2 to add
        WebKit2 to the list of frameworks that can link directly to WebCore. It
        is not necessary for it to be an umbrella since we don't need to reexport
        any symbols.

2010-04-27  Dumitru Daniliuc  <dumi@chromium.org>

        Reviewed by David Levin.

        Turn on AUTO_VACUUM = INCREMENTAL for all HTML5 databases.
        https://bugs.webkit.org/show_bug.cgi?id=38191

        Vacuum all databases when the number of free pages is at least 10%
        of the number of total pages. Also, add a guard against a bug that
        was fixed in SQLite only starting with version 3.6.16.

        * platform/sql/SQLiteDatabase.cpp:
        (WebCore::SQLiteDatabase::maximumSize):
        (WebCore::SQLiteDatabase::freeSpaceSize):
        (WebCore::SQLiteDatabase::totalSize):
        (WebCore::SQLiteDatabase::runIncrementalVacuumCommand):
        (WebCore::SQLiteDatabase::turnOnIncrementalAutoVacuum):
        * platform/sql/SQLiteDatabase.h:
        (WebCore::SQLiteDatabase::):
        * platform/sql/SQLiteStatement.cpp:
        (WebCore::SQLiteStatement::prepare):
        (WebCore::SQLiteStatement::step):
        * storage/Database.cpp:
        (WebCore::Database::performOpenAndVerify):
        (WebCore::Database::incrementalVacuumIfNeeded):
        * storage/Database.h:
        * storage/SQLTransaction.cpp:
        (WebCore::SQLTransaction::postflightAndCommit):

2010-04-27  Garret Kelly  <gdk@chromium.org>

        Reviewed by Darin Fisher.

        Turn all of the touch event handlers into RuntimeEnabledFeatures, and
        modify the createEvent methond on Document so that it won't create a
        TouchEvent if the feature is disabled.
        https://bugs.webkit.org/show_bug.cgi?id=37485

        * bindings/generic/RuntimeEnabledFeatures.cpp:
        * bindings/generic/RuntimeEnabledFeatures.h:
        (WebCore::RuntimeEnabledFeatures::touchEnabled):
        (WebCore::RuntimeEnabledFeatures::setTouchEnabled):
        (WebCore::RuntimeEnabledFeatures::ontouchstartEnabled):
        (WebCore::RuntimeEnabledFeatures::ontouchmoveEnabled):
        (WebCore::RuntimeEnabledFeatures::ontouchendEnabled):
        (WebCore::RuntimeEnabledFeatures::ontouchcancelEnabled):
        * dom/Document.cpp:
        (WebCore::Document::createEvent):
        * dom/Document.idl:
        * dom/Element.idl:
        * page/DOMWindow.idl:

2010-04-27  Jens Alfke  <snej@chromium.org>

        Reviewed by Darin Fisher.

        [Chromium] Add some notifications and an accessor to WebKit API
        https://bugs.webkit.org/show_bug.cgi?id=37625

        * dom/Node.cpp:
        (WebCore::Node::hasNonEmptyBoundingBox): New method.
        * dom/Node.h:
        * html/HTMLAnchorElement.cpp:
        (WebCore::HTMLAnchorElement::isKeyboardFocusable): Moved part of method into new Node method

2010-04-27  Jochen Eisinger  <jochen@chromium.org>

        Reviewed by Shinichiro Hamaji.

        Fix gyp build on Mac OS X with enable_svg=0.
        https://bugs.webkit.org/show_bug.cgi?id=38192

        * WebCore.gyp/WebCore.gyp: Only generate SVG symbols if enable_svg!=0.
        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::CSSComputedStyleDeclaration::getPropertyCSSValue): Add missing unimplemented CSS properties to switch statement.

2010-04-27  Kinuko Yasuda  <kinuko@chromium.org>

        Reviewed by Jian Li.

        [V8] Handle OR ('|') conditional in action_derivedsourcesallinone.py
        https://bugs.webkit.org/show_bug.cgi?id=38207

        No new tests.

        * WebCore.gyp/scripts/action_derivedsourcesallinone.py:

2010-04-27  François Sausset  <sausset@gmail.com>

        Reviewed by Kenneth Rohde Christiansen.

        Implementation of the MathML mroot & msqrt elements.
        https://bugs.webkit.org/show_bug.cgi?id=37044

        Test: mathml/presentation/roots.xhtml

        * WebCore.xcodeproj/project.pbxproj:
        * css/mathml.css:
        (mroot):
        (mroot > * + *):
        (mroot > * + mrow, mroot > * + mfenced):
        * mathml/MathMLInlineContainerElement.cpp:
        (WebCore::MathMLInlineContainerElement::createRenderer):
        * mathml/RenderMathMLRoot.cpp: Added.
        (WebCore::RenderMathMLRoot::RenderMathMLRoot):
        (WebCore::RenderMathMLRoot::addChild):
        (WebCore::RenderMathMLRoot::paint):
        (WebCore::RenderMathMLRoot::layout):
        * mathml/RenderMathMLRoot.h: Added.
        * mathml/RenderMathMLSquareRoot.cpp: Added.
        (WebCore::RenderMathMLSquareRoot::RenderMathMLSquareRoot):
        (WebCore::RenderMathMLSquareRoot::paint):
        (WebCore::RenderMathMLSquareRoot::layout):
        * mathml/RenderMathMLSquareRoot.h: Added.

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

        Reviewed by Maciej Stachowiak.

        I noticed an unused forwarding header.

        * ForwardingHeaders/runtime/PropertyMap.h: Removed.

2010-04-27  James Robinson  <jamesr@chromium.org>

        Reviewed by Adam Barth.

        Fix gcc 4.4.1 warnings on Linux in the chromium V8 bindings code.
        https://bugs.webkit.org/show_bug.cgi?id=38153

        * bindings/scripts/CodeGeneratorV8.pm:
        * bindings/v8/V8Proxy.cpp:
        (WebCore::V8Proxy::callFunction):

2010-04-27  Eric Seidel  <eric@webkit.org>

        Unreviewed, rolling out r58318.
        http://trac.webkit.org/changeset/58318
        https://bugs.webkit.org/show_bug.cgi?id=37215

        Broke test on Tiger.  Might just need updated results,
        unclear.

        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::didReceiveResponse):
        (WebCore::InspectorController::didFailLoading):
        * inspector/front-end/Resource.js:
        (WebInspector.Resource.prototype._mimeTypeIsConsistentWithType):
        * inspector/front-end/ResourcesPanel.js:
        (WebInspector.ResourcesPanel.prototype.recreateViewForResourceIfNeeded):

2010-04-27  Evan Martin  <evan@chromium.org>

        Reviewed by David Levin.

        [chromium] bold bengali text not rendered properly on Linux
        https://bugs.webkit.org/show_bug.cgi?id=37904

        We must let Skia do font fallback, rather than picking a font name
        then handing that to Skia.  For example, if we have Bengali text and
        choose FreeSans + fake bold, and then later reuse the name, Skia will
        helpfully use FreeSansBold (which doesn't cover Bengali).

        Test: fast/text/international/bold-bengali.html

        * platform/graphics/chromium/FontCacheLinux.cpp:
        (WebCore::FontCache::getFontDataForCharacters):

2010-04-27  James Robinson  <jamesr@chromium.org>

        Reviewed by Darin Adler.

        Fix warnings emitted by gcc 4.4.1 on linux in chromium-specific platform graphics files.
        https://bugs.webkit.org/show_bug.cgi?id=38158

        Most of the issues are signed/unsigned mismatches, but there are a few unusued variables
        and functions mixed in.

        * platform/graphics/chromium/FontLinux.cpp:
        (WebCore::adjustTextRenderMode):
        (WebCore::TextRunWalker::getTextRun):
        (WebCore::TextRunWalker::getNormalizedTextRun):
        (WebCore::TextRunWalker::setGlyphXPositions):
        (WebCore::glyphIndexForXPositionInScriptRun):
        (WebCore::Font::offsetForPositionForComplexText):
        (WebCore::Font::selectionRectForComplexText):
        * platform/graphics/chromium/FontPlatformDataLinux.cpp:
        (WebCore::FontPlatformData::setupPaint):
        * platform/graphics/chromium/HarfbuzzSkia.cpp:
        (WebCore::getOutlinePoint):
        * platform/graphics/skia/GraphicsContext3DSkia.cpp:
        (WebCore::GraphicsContext3D::getImageData):
        * platform/graphics/skia/GraphicsContextSkia.cpp:
        (WebCore::isCoordinateSkiaSafe):
        (WebCore::GraphicsContext::fillRect):
        (WebCore::GraphicsContext::strokePath):
        (WebCore::GraphicsContext::strokeRect):

2010-04-27  Jian Li  <jianli@chromium.org>

        Reviewed by Darin Adler.

        Sending a package file using FormData crashes WebKit on Mac.
        https://bugs.webkit.org/show_bug.cgi?id=37882

        Can't add a layout test because DRT does not support generating the file name.

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::submitForm):
        (WebCore::FrameLoader::navigateToDifferentDocument):
        * platform/network/FormData.cpp:
        (WebCore::FormData::appendDOMFormData):
        * platform/network/FormData.h:
        * xml/XMLHttpRequest.cpp:
        (WebCore::XMLHttpRequest::send):

2010-04-27  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        Remove custom NodeIterator bindings
        https://bugs.webkit.org/show_bug.cgi?id=38188

        Another example of CallWith=ScriptState.  This case shows us the right
        way to handle the interaction with exception codes.

        In my previous patch, I put the exception code handling after the
        ScriptState exception handling.  It turns out this was a mistake
        (although a harmless one at the time because no IDL caused us to
        generate that code).  Now that we're generating both kinds of exception
        handling, we need to generate them in the right order.

        * WebCore.gypi:
        * bindings/js/JSNodeIteratorCustom.cpp:
        * bindings/scripts/CodeGeneratorJS.pm:
        * bindings/scripts/CodeGeneratorV8.pm:
        * bindings/scripts/test/GObject/WebKitDOMTestObj.cpp:
        (webkit_dom_test_obj_with_script_state_void_exception):
        (webkit_dom_test_obj_with_script_state_obj_exception):
        * bindings/scripts/test/GObject/WebKitDOMTestObj.h:
        * bindings/scripts/test/JS/JSTestObj.cpp:
        (WebCore::):
        (WebCore::jsTestObjPrototypeFunctionWithScriptStateVoidException):
        (WebCore::jsTestObjPrototypeFunctionWithScriptStateObjException):
        * bindings/scripts/test/JS/JSTestObj.h:
        * bindings/scripts/test/ObjC/DOMTestObj.h:
        * bindings/scripts/test/ObjC/DOMTestObj.mm:
        (-[DOMTestObj withScriptStateVoidException]):
        (-[DOMTestObj withScriptStateObjException]):
        * bindings/scripts/test/TestObj.idl:
        * bindings/scripts/test/V8/V8TestObj.cpp:
        (WebCore::TestObjInternal::withScriptStateVoidCallback):
        (WebCore::TestObjInternal::withScriptStateObjCallback):
        (WebCore::TestObjInternal::withScriptStateVoidExceptionCallback):
        (WebCore::TestObjInternal::withScriptStateObjExceptionCallback):
        (WebCore::):
        * bindings/v8/custom/V8NodeIteratorCustom.cpp: Removed.
        * dom/NodeIterator.idl:

2010-04-27  Adam Barth  <abarth@webkit.org>

        Reviewed by Darin Adler.

        Remove copy/paste addEventListener "custom" bindings via code generation
        https://bugs.webkit.org/show_bug.cgi?id=38210

        It's somewhat lame to special case addEventListener and
        removeEventListener in the code generator, but it saves a large amount
        of boilerplate "custom" bindings code.

        Idea shamelessly stolen from the V8 code generator.

        This patch points to some good refactoring opportunities in
        CodeGeneratorJS.pm, but I'm going to hold off on those for a future
        patch.  By generating test coverage for the code generator, we make
        these future refactorings easier.

        * bindings/js/JSAbstractWorkerCustom.cpp:
        * bindings/js/JSDOMApplicationCacheCustom.cpp:
        * bindings/js/JSDesktopNotificationsCustom.cpp:
        * bindings/js/JSEventSourceCustom.cpp:
        * bindings/js/JSMessagePortCustom.cpp:
        * bindings/js/JSNodeCustom.cpp:
        * bindings/js/JSSVGElementInstanceCustom.cpp:
        * bindings/js/JSWebSocketCustom.cpp:
        * bindings/js/JSWorkerContextCustom.cpp:
        * bindings/js/JSXMLHttpRequestCustom.cpp:
        * bindings/js/JSXMLHttpRequestUploadCustom.cpp:
        * bindings/scripts/CodeGeneratorJS.pm:
        * bindings/scripts/test/GObject/WebKitDOMTestObj.cpp:
        * bindings/scripts/test/GObject/WebKitDOMTestObj.h:
        * bindings/scripts/test/JS/JSTestObj.cpp:
        (WebCore::):
        (WebCore::jsTestObjPrototypeFunctionAddEventListener):
        (WebCore::jsTestObjPrototypeFunctionRemoveEventListener):
        * bindings/scripts/test/JS/JSTestObj.h:
        * bindings/scripts/test/ObjC/DOMTestObj.h:
        * bindings/scripts/test/ObjC/DOMTestObj.mm:
        (-[DOMTestObj addEventListener:listener:useCapture:]):
        (-[DOMTestObj removeEventListener:listener:useCapture:]):
        * bindings/scripts/test/TestObj.idl:
        * bindings/scripts/test/V8/V8TestObj.cpp:
        (WebCore::TestObjInternal::addEventListenerCallback):
        (WebCore::TestObjInternal::removeEventListenerCallback):
        (WebCore::):
        * dom/MessagePort.idl:
        * dom/Node.idl:
        * loader/appcache/DOMApplicationCache.idl:
        * notifications/Notification.idl:
        * page/EventSource.idl:
        * svg/SVGElementInstance.idl:
        * websockets/WebSocket.idl:
        * workers/AbstractWorker.idl:
        * workers/WorkerContext.idl:
        * xml/XMLHttpRequest.idl:
        * xml/XMLHttpRequestUpload.idl:

2010-04-27  Sam Weinig  <sam@webkit.org>

        Rubber-stamped by Beth Dakin.

        Remove now unnecessary EXPERIMENTAL_SINGLE_VIEW_MODE #define.

        * page/EventHandler.cpp:
        (WebCore::EventHandler::EventHandler):
        (WebCore::EventHandler::clearDragState):
        * page/EventHandler.h:
        * page/mac/DragControllerMac.mm:
        * page/mac/EventHandlerMac.mm:
        * platform/mac/PopupMenuMac.mm:

2010-04-27  Ben Murdoch  <benm@google.com>

        Reviewed by Simon Hausmann.

        The TouchStationary state of WebCore::PlatformTouchPoint is not handled inside the touch event handler.
        https://bugs.webkit.org/show_bug.cgi?id=37609

        No new tests required, only updating documentation.

        * page/EventHandler.cpp:
        (WebCore::EventHandler::handleTouchEvent): Improve the documentation for handling
            the TouchStationary state as a result of discussions in bug 37609.

2010-04-27  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Darin Adler, Maciej Stachowiak.

        REGRESSION (r57919): Some pages opened in background tabs don't render the first time you activate their tab
        https://bugs.webkit.org/show_bug.cgi?id=38183

        Rather than sprinkle PLATFORM #ifdefs around, add a new method,
        RenderLayerCompositor::shouldPropagateCompositingToIFrameParent(), that indicates whether
        an iframe with composited content should trigger compositing mode in the enclosing document
        (a behavior that differs between platforms).
        
        Use this new method to determine whether to trigger a style recalc in the parent document
        when an iframe becomes composited.
        
        Move the code formerly in RenderView::compositingStateChanged() into RenderLayerCompositor().

        * manual-tests/compositing/accel-comp-iframe-tab-repaint.html: Added.
        * manual-tests/compositing/resources/flash-frame.html: Added.
        * manual-tests/compositing/resources/tab-repaint-part-2.html: Added.
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::enableCompositingMode):
        (WebCore::RenderLayerCompositor::shouldPropagateCompositingToIFrameParent):
        (WebCore::RenderLayerCompositor::requiresCompositingForIFrame):
        * rendering/RenderLayerCompositor.h:
        * rendering/RenderView.cpp:
        * rendering/RenderView.h:

2010-04-27  Andrey Kosyakov  <caseq@chromium.org>

        Reviewed by Yury Semikhatsky.

        Log error message to inspector console if a resource fails to load.
        Disable checking of mime-type consistency for failed resources.
        https://bugs.webkit.org/show_bug.cgi?id=37215

        Test: http/tests/inspector/console-resource-errors.html

        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::didReceiveResponse):
        (WebCore::InspectorController::didFailLoading):
        * inspector/front-end/Resource.js:
        (WebInspector.Resource.prototype._mimeTypeIsConsistentWithType):
        * inspector/front-end/ResourcesPanel.js:
        (WebInspector.ResourcesPanel.prototype.recreateViewForResourceIfNeeded):

2010-04-27  Vitaly Repeshko  <vitalyr@chromium.org>

        Reviewed by Nate Chapin.

        [V8] Fix XHR memory leak in GC controller.
        https://bugs.webkit.org/show_bug.cgi?id=38202

        http://trac.webkit.org/changeset/55798 simplified processing of
        active DOM objects but introduced a subtle bug in garbage
        collection of XHRs. ActiveDOMObject is not a direct base class of
        XHR and so upcasting changes pointer identity and breaks DOM
        maps. This leads to forever live persistent handles to XHR that
        had pending activity while V8 GC happened.

        * bindings/v8/V8GCController.cpp:
        (WebCore::GCEpilogueVisitor::visitDOMWrapper):

2010-04-27  Adam Barth  <abarth@webkit.org>

        Unreviewed.  Regenerate reference bindings code generator output.

        * bindings/scripts/test/V8/V8TestObj.cpp:
        (WebCore::TestObjInternal::withScriptStateVoidCallback):
        (WebCore::TestObjInternal::withScriptStateObjCallback):

2010-04-27  Joseph Pecoraro  <joepeck@webkit.org>

        Reviewed by Dan Bernstein.

        <input type="search"> with uneven padding causes text clipping
        https://bugs.webkit.org/show_bug.cgi?id=38160

        Test: fast/css/input-search-padding.html

        An <input type="search"> contains an inner block, which is explicitly
        centered in RenderTextControlSingleLine based on the height of the element.
        However, the clipping rect was not using the set location, and instead
        calculated off of the top border and padding alone. This also vertically
        centers the Caps Lock indicator.

        * rendering/RenderTextControl.cpp: moved controlClipRect implementation to RenderTextControlSingleLine
        * rendering/RenderTextControl.h: allow a subclass implementation of controlClipRect, removed redundant hasControlClip implementation, and moved controlClipRect
        * rendering/RenderTextControlSingleLine.cpp:
        (WebCore::RenderTextControlSingleLine::paint): vertically center the Caps Lock indicator
        (WebCore::RenderTextControlSingleLine::controlClipRect): use the set location of the anonymous inner block instead
        * rendering/RenderTextControlSingleLine.h: allow for an implementation of controlClipRect for <input type="search">

2010-04-27  Thomas Zander <t.zander@nokia.com>

        Reviewed by Simon Hausmann.

        [Qt] Fix linking on Symbian on Linux using the Makefile based mkspec.

        Disable thumb mode due to library size limitations, just like it's done
        for the sbs/sbsv2 based build system.

        * WebCore.pro:

2010-04-21  Jocelyn Turcotte  <jocelyn.turcotte@nokia.com>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] Make sure WebKit is not compiled using C++0x.
        https://bugs.webkit.org/show_bug.cgi?id=37867

        As the rest of Qt compiles in the C++0x mode, people might start
        compiling it in this mode. WebKit don't support this yet.

        Patch by Thiago Macieira <thiago.macieira@nokia.com>

        * WebCore.pro:

2010-04-27  Jeremy Orlow  <jorlow@chromium.org>

        Unreviewed build fix.

        Revert 58274 and 58269 (WebSQLDatabase changes)
        https://bugs.webkit.org/show_bug.cgi?id=38191

        Chromium bots are hitting ASSERTS when running layout tests.

        * platform/sql/SQLiteDatabase.cpp:
        (WebCore::SQLiteDatabase::maximumSize):
        (WebCore::SQLiteDatabase::freeSpaceSize):
        * platform/sql/SQLiteDatabase.h:
        * platform/sql/SQLiteStatement.cpp:
        (WebCore::SQLiteStatement::prepare):
        * storage/Database.cpp:
        (WebCore::Database::performOpenAndVerify):
        * storage/Database.h:
        * storage/SQLTransaction.cpp:
        (WebCore::SQLTransaction::postflightAndCommit):

2010-04-27  Yuzo Fujishima  <yuzo@google.com>

        Unreviewed, fix build breakage by reverting r58299.

        * css/CSSGrammar.y:
        * css/CSSParser.cpp:
        (WebCore::CSSParser::CSSParser):
        (WebCore::CSSParser::clearProperties):
        * css/CSSParser.h:
        * css/CSSSelector.cpp:
        (WebCore::CSSSelector::pseudoId):
        (WebCore::nameToPseudoTypeMap):
        (WebCore::CSSSelector::extractPseudoType):
        * css/CSSSelector.h:
        (WebCore::CSSSelector::):
        * css/tokenizer.flex:

2010-04-27  Yuzo Fujishima  <yuzo@google.com>

        Reviewed by Shinichiro Hamaji.

        WebCore::CSSSelector::RareData::parseNth doesn't check whether the search for '-' in the argument was successful.
        This results in incorrect parsing.
        For example, '3n' is parsed as if it were '3n-3'. The code has been working OK just accidentally.

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

        No new tests are added because the original behavior is accidentally OK.

        * css/CSSSelector.cpp:
        (WebCore::CSSSelector::RareData::parseNth):

2010-04-27  Yuzo Fujishima  <yuzo@google.com>

        Reviewed by David Hyatt.

        Enhance CSS parser for Paged Media (Iteration 1)

        In this change, the grammar is extended and skeletal methods for creating page rules and margin at-rules are defined.
        The contents of the methods should be implemented by other changes.

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

        Test: fast/css/parsing-page-rule.html

        * css/CSSGrammar.y:
        * css/CSSParser.cpp:
        (WebCore::CSSParser::CSSParser):
        (WebCore::CSSParser::clearProperties):
        (WebCore::CSSParser::lex):
        (WebCore::CSSParser::text):
        (WebCore::CSSParser::createPageRule):
        (WebCore::CSSParser::createMarginAtRule):
        (WebCore::CSSParser::startDeclarationsForMarginBox):
        (WebCore::CSSParser::endDeclarationsForMarginBox):
        * css/CSSParser.h:
        * css/CSSSelector.cpp:
        (WebCore::CSSSelector::extractPseudoType):
        * css/CSSSelector.h:
        (WebCore::CSSSelector::):
        * css/tokenizer.flex:

2010-04-27  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        Remove custom bindings for TreeWalker
        https://bugs.webkit.org/show_bug.cgi?id=38182

        This custom code is just CallWith=ScriptState.

        * WebCore.gypi:
        * bindings/js/JSTreeWalkerCustom.cpp:
        (WebCore::JSTreeWalker::markChildren):
        * bindings/scripts/CodeGeneratorJS.pm:
        * bindings/scripts/CodeGeneratorV8.pm:
        * bindings/scripts/test/TestObj.idl:
        * bindings/v8/custom/V8TreeWalkerCustom.cpp: Removed.
        * dom/TreeWalker.idl:

2010-04-27  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        Move code out of GenerateImplementation to make it more smaller
        https://bugs.webkit.org/show_bug.cgi?id=38176

        * bindings/scripts/CodeGeneratorJS.pm:
         - Move some code into a new GenerateAttributesHashTable method.

2010-04-26  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        Add CallWith=DynamicFrame to CodeGenerator
        https://bugs.webkit.org/show_bug.cgi?id=38174

        I've only used this in one instance, but this is infrastructure that I
        think will help remove a bunch of custom bindings code.  Also, added a
        few tests of tricky argument cases.

        * bindings/js/JSHTMLFormElementCustom.cpp:
        * bindings/scripts/CodeGeneratorJS.pm:
        * bindings/scripts/CodeGeneratorV8.pm:
        * bindings/scripts/test/GObject/WebKitDOMTestObj.cpp:
        (webkit_dom_test_obj_with_dynamic_frame):
        (webkit_dom_test_obj_with_dynamic_frame_and_arg):
        (webkit_dom_test_obj_with_dynamic_frame_and_optional_arg):
        (webkit_dom_test_obj_with_dynamic_frame_and_user_gesture):
        (webkit_dom_test_obj_with_dynamic_frame_and_user_gesture_asad):
        * bindings/scripts/test/GObject/WebKitDOMTestObj.h:
        * bindings/scripts/test/JS/JSTestObj.cpp:
        (WebCore::):
        (WebCore::jsTestObjPrototypeFunctionWithDynamicFrame):
        (WebCore::jsTestObjPrototypeFunctionWithDynamicFrameAndArg):
        (WebCore::jsTestObjPrototypeFunctionWithDynamicFrameAndOptionalArg):
        (WebCore::jsTestObjPrototypeFunctionWithDynamicFrameAndUserGesture):
        (WebCore::jsTestObjPrototypeFunctionWithDynamicFrameAndUserGestureASAD):
        * bindings/scripts/test/JS/JSTestObj.h:
        * bindings/scripts/test/ObjC/DOMTestObj.h:
        * bindings/scripts/test/ObjC/DOMTestObj.mm:
        (-[DOMTestObj withDynamicFrame]):
        (-[DOMTestObj withDynamicFrameAndArg:]):
        (-[DOMTestObj withDynamicFrameAndOptionalArg:optionalArg:]):
        (-[DOMTestObj withDynamicFrameAndUserGesture:]):
        (-[DOMTestObj withDynamicFrameAndUserGestureASAD:optionalArg:]):
        * bindings/scripts/test/TestObj.idl:
        * bindings/scripts/test/V8/V8TestObj.cpp:
        (WebCore::TestObjInternal::withDynamicFrameCallback):
        (WebCore::TestObjInternal::withDynamicFrameAndArgCallback):
        (WebCore::TestObjInternal::withDynamicFrameAndOptionalArgCallback):
        (WebCore::TestObjInternal::withDynamicFrameAndUserGestureCallback):
        (WebCore::TestObjInternal::withDynamicFrameAndUserGestureASADCallback):
        (WebCore::):
        * bindings/v8/custom/V8HTMLFormElementCustom.cpp:
        * html/HTMLFormElement.idl:

2010-04-26  Adam Barth  <abarth@webkit.org>

        Unreviewed.  Update comment to better reflect reality.

        * bindings/scripts/test/TestObj.idl:

2010-04-26  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        Add ObjC and GObject to run-bindings-test
        https://bugs.webkit.org/show_bug.cgi?id=38168

        Added expected results.

        * bindings/scripts/test/GObject/WebKitDOMTestObj.cpp: Added.
        (WebKit::kit):
        (webkit_dom_test_obj_void_method):
        (webkit_dom_test_obj_void_method_with_args):
        (webkit_dom_test_obj_int_method):
        (webkit_dom_test_obj_int_method_with_args):
        (webkit_dom_test_obj_obj_method):
        (webkit_dom_test_obj_obj_method_with_args):
        (webkit_dom_test_obj_method_with_exception):
        (webkit_dom_test_obj_method_with_optional_arg):
        (webkit_dom_test_obj_method_with_non_optional_arg_and_optional_arg):
        (webkit_dom_test_obj_method_with_non_optional_arg_and_two_optional_args):
        (webkit_dom_test_obj_get_read_only_int_attr):
        (webkit_dom_test_obj_get_read_only_string_attr):
        (webkit_dom_test_obj_get_read_only_test_obj_attr):
        (webkit_dom_test_obj_get_int_attr):
        (webkit_dom_test_obj_set_int_attr):
        (webkit_dom_test_obj_get_string_attr):
        (webkit_dom_test_obj_set_string_attr):
        (webkit_dom_test_obj_get_test_obj_attr):
        (webkit_dom_test_obj_set_test_obj_attr):
        (webkit_dom_test_obj_get_attr_with_exception):
        (webkit_dom_test_obj_set_attr_with_exception):
        (webkit_dom_test_obj_get_attr_with_setter_exception):
        (webkit_dom_test_obj_set_attr_with_setter_exception):
        (webkit_dom_test_obj_get_attr_with_getter_exception):
        (webkit_dom_test_obj_set_attr_with_getter_exception):
        (WebKit::wrapTestObj):
        (WebKit::core):
        (webkit_dom_test_obj_finalize):
        (webkit_dom_test_obj_set_property):
        (webkit_dom_test_obj_get_property):
        (webkit_dom_test_obj_class_init):
        (webkit_dom_test_obj_init):
        * bindings/scripts/test/GObject/WebKitDOMTestObj.h: Added.
        * bindings/scripts/test/GObject/WebKitDOMTestObjPrivate.h: Added.
        * bindings/scripts/test/ObjC/DOMTestObj.h: Added.
        * bindings/scripts/test/ObjC/DOMTestObj.mm: Added.
        (-[DOMTestObj dealloc]):
        (-[DOMTestObj finalize]):
        (-[DOMTestObj readOnlyIntAttr]):
        (-[DOMTestObj readOnlyStringAttr]):
        (-[DOMTestObj readOnlyTestObjAttr]):
        (-[DOMTestObj intAttr]):
        (-[DOMTestObj setIntAttr:]):
        (-[DOMTestObj stringAttr]):
        (-[DOMTestObj setStringAttr:]):
        (-[DOMTestObj testObjAttr]):
        (-[DOMTestObj setTestObjAttr:]):
        (-[DOMTestObj attrWithException]):
        (-[DOMTestObj setAttrWithException:]):
        (-[DOMTestObj attrWithSetterException]):
        (-[DOMTestObj setAttrWithSetterException:]):
        (-[DOMTestObj attrWithGetterException]):
        (-[DOMTestObj setAttrWithGetterException:]):
        (-[DOMTestObj customAttr]):
        (-[DOMTestObj setCustomAttr:]):
        (-[DOMTestObj voidMethod]):
        (-[DOMTestObj voidMethodWithArgs:strArg:objArg:]):
        (-[DOMTestObj intMethod]):
        (-[DOMTestObj intMethodWithArgs:strArg:objArg:]):
        (-[DOMTestObj objMethod]):
        (-[DOMTestObj objMethodWithArgs:strArg:objArg:]):
        (-[DOMTestObj methodWithException]):
        (-[DOMTestObj customMethod]):
        (-[DOMTestObj customMethodWithArgs:strArg:objArg:]):
        (-[DOMTestObj methodWithOptionalArg:]):
        (-[DOMTestObj methodWithNonOptionalArgAndOptionalArg:opt:]):
        (-[DOMTestObj methodWithNonOptionalArgAndTwoOptionalArgs:opt1:opt2:]):
        (core):
        (kit):
        * bindings/scripts/test/ObjC/DOMTestObjInternal.h: Added.

2010-04-26  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        Add testing infrastructure for JSC bindings generator
        https://bugs.webkit.org/show_bug.cgi?id=38167

        This required moving the test files around a bit more.

        * bindings/scripts/test/JS/JSTestObj.cpp: Added.
        (WebCore::):
        (WebCore::JSTestObjConstructor::JSTestObjConstructor):
        (WebCore::JSTestObjConstructor::classInfo):
        (WebCore::JSTestObjConstructor::createStructure):
        (WebCore::JSTestObjConstructor::getOwnPropertySlot):
        (WebCore::JSTestObjConstructor::getOwnPropertyDescriptor):
        (WebCore::JSTestObjPrototype::self):
        (WebCore::JSTestObjPrototype::getOwnPropertySlot):
        (WebCore::JSTestObjPrototype::getOwnPropertyDescriptor):
        (WebCore::JSTestObj::JSTestObj):
        (WebCore::JSTestObj::~JSTestObj):
        (WebCore::JSTestObj::createPrototype):
        (WebCore::JSTestObj::getOwnPropertySlot):
        (WebCore::JSTestObj::getOwnPropertyDescriptor):
        (WebCore::jsTestObjReadOnlyIntAttr):
        (WebCore::jsTestObjReadOnlyStringAttr):
        (WebCore::jsTestObjReadOnlyTestObjAttr):
        (WebCore::jsTestObjIntAttr):
        (WebCore::jsTestObjStringAttr):
        (WebCore::jsTestObjTestObjAttr):
        (WebCore::jsTestObjAttrWithException):
        (WebCore::jsTestObjAttrWithSetterException):
        (WebCore::jsTestObjAttrWithGetterException):
        (WebCore::jsTestObjCustomAttr):
        (WebCore::jsTestObjConstructor):
        (WebCore::JSTestObj::put):
        (WebCore::setJSTestObjIntAttr):
        (WebCore::setJSTestObjStringAttr):
        (WebCore::setJSTestObjTestObjAttr):
        (WebCore::setJSTestObjAttrWithException):
        (WebCore::setJSTestObjAttrWithSetterException):
        (WebCore::setJSTestObjAttrWithGetterException):
        (WebCore::setJSTestObjCustomAttr):
        (WebCore::JSTestObj::getConstructor):
        (WebCore::jsTestObjPrototypeFunctionVoidMethod):
        (WebCore::jsTestObjPrototypeFunctionVoidMethodWithArgs):
        (WebCore::jsTestObjPrototypeFunctionIntMethod):
        (WebCore::jsTestObjPrototypeFunctionIntMethodWithArgs):
        (WebCore::jsTestObjPrototypeFunctionObjMethod):
        (WebCore::jsTestObjPrototypeFunctionObjMethodWithArgs):
        (WebCore::jsTestObjPrototypeFunctionMethodWithException):
        (WebCore::jsTestObjPrototypeFunctionCustomMethod):
        (WebCore::jsTestObjPrototypeFunctionCustomMethodWithArgs):
        (WebCore::jsTestObjPrototypeFunctionMethodWithOptionalArg):
        (WebCore::jsTestObjPrototypeFunctionMethodWithNonOptionalArgAndOptionalArg):
        (WebCore::jsTestObjPrototypeFunctionMethodWithNonOptionalArgAndTwoOptionalArgs):
        (WebCore::toJS):
        (WebCore::toTestObj):
        * bindings/scripts/test/JS/JSTestObj.h: Added.
        (WebCore::JSTestObj::classInfo):
        (WebCore::JSTestObj::createStructure):
        (WebCore::JSTestObj::impl):
        (WebCore::JSTestObjPrototype::classInfo):
        (WebCore::JSTestObjPrototype::createStructure):
        (WebCore::JSTestObjPrototype::JSTestObjPrototype):
        * bindings/scripts/test/TestObj.idl:
        * bindings/scripts/test/V8/V8TestObj.cpp: Renamed from WebCore/bindings/scripts/test/V8TestObj.cpp.
        (WebCore::):
        (WebCore::TestObjInternal::V8_USE):
        (WebCore::TestObjInternal::readOnlyIntAttrAttrGetter):
        (WebCore::TestObjInternal::readOnlyStringAttrAttrGetter):
        (WebCore::TestObjInternal::readOnlyTestObjAttrAttrGetter):
        (WebCore::TestObjInternal::intAttrAttrGetter):
        (WebCore::TestObjInternal::intAttrAttrSetter):
        (WebCore::TestObjInternal::stringAttrAttrGetter):
        (WebCore::TestObjInternal::stringAttrAttrSetter):
        (WebCore::TestObjInternal::testObjAttrAttrGetter):
        (WebCore::TestObjInternal::testObjAttrAttrSetter):
        (WebCore::TestObjInternal::attrWithExceptionAttrGetter):
        (WebCore::TestObjInternal::attrWithExceptionAttrSetter):
        (WebCore::TestObjInternal::attrWithSetterExceptionAttrGetter):
        (WebCore::TestObjInternal::attrWithSetterExceptionAttrSetter):
        (WebCore::TestObjInternal::attrWithGetterExceptionAttrGetter):
        (WebCore::TestObjInternal::attrWithGetterExceptionAttrSetter):
        (WebCore::TestObjInternal::voidMethodCallback):
        (WebCore::TestObjInternal::voidMethodWithArgsCallback):
        (WebCore::TestObjInternal::intMethodCallback):
        (WebCore::TestObjInternal::intMethodWithArgsCallback):
        (WebCore::TestObjInternal::objMethodCallback):
        (WebCore::TestObjInternal::objMethodWithArgsCallback):
        (WebCore::TestObjInternal::methodWithExceptionCallback):
        (WebCore::TestObjInternal::methodWithOptionalArgCallback):
        (WebCore::TestObjInternal::methodWithNonOptionalArgAndOptionalArgCallback):
        (WebCore::TestObjInternal::methodWithNonOptionalArgAndTwoOptionalArgsCallback):
        (WebCore::TestObjInternal::overloadedMethod1Callback):
        (WebCore::TestObjInternal::overloadedMethod2Callback):
        (WebCore::TestObjInternal::overloadedMethod3Callback):
        (WebCore::TestObjInternal::overloadedMethod4Callback):
        (WebCore::TestObjInternal::overloadedMethodCallback):
        (WebCore::ConfigureV8TestObjTemplate):
        (WebCore::V8TestObj::GetRawTemplate):
        (WebCore::V8TestObj::GetTemplate):
        (WebCore::V8TestObj::toNative):
        (WebCore::V8TestObj::HasInstance):
        (WebCore::V8TestObj::wrap):
        (WebCore::toV8):
        (WebCore::V8TestObj::derefObject):
        * bindings/scripts/test/V8/V8TestObj.h: Renamed from WebCore/bindings/scripts/test/V8TestObj.h.

2010-04-26  Oliver Hunt  <oliver@apple.com>

        Reviewed by Gavin Barraclough.

        Need to support more efficient dispatch of lightweight builtins
        https://bugs.webkit.org/show_bug.cgi?id=38155

        Update bindings generation to include new thunk generator field
        in the property map hash tables.

        * bindings/scripts/CodeGeneratorJS.pm:

2010-04-26  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        Move bindings test directory into the scripts directory
        https://bugs.webkit.org/show_bug.cgi?id=38161

        This test is really of the bindings scripts not of the bindings
        themselves.  By moving the files into the scripts directory, we'll be
        able to test JSC as well.

        * bindings/scripts/test/TestObj.idl: Renamed from WebCore/bindings/v8/test/TestObj.idl.
        * bindings/scripts/test/V8TestObj.cpp: Renamed from WebCore/bindings/v8/test/V8TestObj.cpp.
        (WebCore::):
        (WebCore::TestObjInternal::V8_USE):
        (WebCore::TestObjInternal::readOnlyIntAttrAttrGetter):
        (WebCore::TestObjInternal::readOnlyStringAttrAttrGetter):
        (WebCore::TestObjInternal::readOnlyTestObjAttrAttrGetter):
        (WebCore::TestObjInternal::intAttrAttrGetter):
        (WebCore::TestObjInternal::intAttrAttrSetter):
        (WebCore::TestObjInternal::stringAttrAttrGetter):
        (WebCore::TestObjInternal::stringAttrAttrSetter):
        (WebCore::TestObjInternal::testObjAttrAttrGetter):
        (WebCore::TestObjInternal::testObjAttrAttrSetter):
        (WebCore::TestObjInternal::attrWithExceptionAttrGetter):
        (WebCore::TestObjInternal::attrWithExceptionAttrSetter):
        (WebCore::TestObjInternal::attrWithSetterExceptionAttrGetter):
        (WebCore::TestObjInternal::attrWithSetterExceptionAttrSetter):
        (WebCore::TestObjInternal::attrWithGetterExceptionAttrGetter):
        (WebCore::TestObjInternal::attrWithGetterExceptionAttrSetter):
        (WebCore::TestObjInternal::voidMethodCallback):
        (WebCore::TestObjInternal::voidMethodWithArgsCallback):
        (WebCore::TestObjInternal::intMethodCallback):
        (WebCore::TestObjInternal::intMethodWithArgsCallback):
        (WebCore::TestObjInternal::objMethodCallback):
        (WebCore::TestObjInternal::objMethodWithArgsCallback):
        (WebCore::TestObjInternal::methodWithExceptionCallback):
        (WebCore::TestObjInternal::methodWithOptionalArgCallback):
        (WebCore::TestObjInternal::methodWithNonOptionalArgAndOptionalArgCallback):
        (WebCore::TestObjInternal::methodWithNonOptionalArgAndTwoOptionalArgsCallback):
        (WebCore::TestObjInternal::overloadedMethod1Callback):
        (WebCore::TestObjInternal::overloadedMethod2Callback):
        (WebCore::TestObjInternal::overloadedMethod3Callback):
        (WebCore::TestObjInternal::overloadedMethod4Callback):
        (WebCore::TestObjInternal::overloadedMethodCallback):
        (WebCore::ConfigureV8TestObjTemplate):
        (WebCore::V8TestObj::GetRawTemplate):
        (WebCore::V8TestObj::GetTemplate):
        (WebCore::V8TestObj::toNative):
        (WebCore::V8TestObj::HasInstance):
        (WebCore::V8TestObj::wrap):
        (WebCore::toV8):
        (WebCore::V8TestObj::derefObject):
        * bindings/scripts/test/V8TestObj.h: Renamed from WebCore/bindings/v8/test/V8TestObj.h.

2010-04-26  Daniel Cheng  <dcheng@chromium.org>

        Reviewed by Jian Li.

        [chromium] Fix ChromiumDataObject::setURL to not populate its internal URL list with empty URLs.
        https://bugs.webkit.org/show_bug.cgi?id=38159

        No new tests.

        * platform/chromium/ChromiumDataObject.h:
        (WebCore::ChromiumDataObject::setURL):

2010-04-26  Daniel Cheng  <dcheng@chromium.org>

        Reviewed by Jian Li.

        [Chromium] Don't make file paths available in text/uri-list when dragging files.
        https://bugs.webkit.org/show_bug.cgi?id=25882

        Test will be checked in with WebCore/platform/mac fix.

        * platform/chromium/ClipboardChromium.cpp:
        (WebCore::ClipboardChromium::getData):
        (WebCore::ClipboardChromium::types):

2010-04-26  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Darin Adler.

        REGRESSION (r57292): 1.5% page load speed regression from visited link information leak fix
        https://bugs.webkit.org/show_bug.cgi?id=38131

        I did a number of separate optimizations which speed up style
        resolution enough to more than make up for the regression. This
        measures as a total PLT speedup of somewhere between 1.5% and
        3.7%.
       
        Optimizations done:
        - Cache determineLinkState results, to avoid the need to repeatedly compute
        the visited link hash for the same element. This directly addresses much
        of the slowdown, since all elements get their style computed twice now.
        - Added a fast way to get the length of a CSSMutableStyleDeclaration, and use
        in CSSStyleSelector::matchRulesForList, since it was hot there.
        - Hoist some loop invariant code that's not detected by the compiler out of the
        main loop in matchRulesForList
        - inline CSSStyleSelector::initElement and locateSharedStyle,
        since there is only one call site in each case
        - Inline the common non-line fast case of determineLinkState, and split the rest into
        out-of-line determineLinkStateSlowCase.
        - Added inline versions of the functions called by
        visitedLinkHash (the version called by determineLinkState).

        * css/CSSMutableStyleDeclaration.cpp:
        (WebCore::CSSMutableStyleDeclaration::length): Implemented in terms of new
        inline nonvirtual mutableLength().
        * css/CSSMutableStyleDeclaration.h:
        (WebCore::CSSMutableStyleDeclaration::mutableLength): Added new nonvirtual
        inline way to get the length if you know you have a mutable style decl.
        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::init): Clear cached link state.
        (WebCore::CSSStyleSelector::matchRulesForList): hoist some code out of the main
        loop and get style decl length more efficiently.
        (WebCore::CSSStyleSelector::initElement): inline (only one call site)
        (WebCore::CSSStyleSelector::SelectorChecker::determineLinkState): Inline fast
        case, call slow case.
        (WebCore::CSSStyleSelector::SelectorChecker::determineLinkStateSlowCase): Split
        most of the above function into this slow case helper.
        (WebCore::CSSStyleSelector::canShareStyleWithElement): Use the cache-enabled
        way to get the current link state.
        (WebCore::CSSStyleSelector::locateSharedStyle): inline
        (WebCore::CSSStyleSelector::styleForElement): Use the cache-enabled way
        to get the current link state.
        * css/CSSStyleSelector.h:
        (WebCore::CSSStyleSelector::currentElementLinkState): inline way to
        get link state for the current element; manages the cache
        * platform/LinkHash.cpp:
        (WebCore::visitedLinkHashInline): inline version of below function
        (WebCore::visitedLinkHash): call the inline version
        (WebCore::visitedURLInline): inline version of below function
        (WebCore::visitedURL): call the inline version
        (WebCore::visitedURL): call inline versions of above two functions

2010-04-26  Sam Weinig  <sam@webkit.org>

        Reviewed by Alexey Proskuryakov.

        Remove last use of WEB_THREAD.

        * platform/mac/WebCoreObjCExtras.mm:
        (WebCoreObjCScheduleDeallocateOnMainThread): This can always use
        isMainThread().

2010-04-26  Dumitru Daniliuc  <dumi@chromium.org>

        Reviewed by Dimitri Glazkov.

        Turn on AUTO_VACUUM = INCREMENTAL for all HTML5 databases, and
        vacuum all databases when the number of free pages is at least 10%
        of the number of total pages. Also, adding a guard against a bug
        that was fixed in SQLite only starting with version 3.6.16.

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

        * platform/sql/SQLiteDatabase.cpp:
        (WebCore::SQLiteDatabase::totalSize):
        (WebCore::SQLiteDatabase::runIncrementalVacuumCommand):
        (WebCore::SQLiteDatabase::turnOnIncrementalAutoVacuum):
        * platform/sql/SQLiteDatabase.h:
        * platform/sql/SQLiteStatement.cpp:
        (WebCore::SQLiteStatement::prepare):
        * storage/Database.cpp:
        (WebCore::Database::performOpenAndVerify):
        (WebCore::Database::incrementalVacuumIfNeeded):
        * storage/Database.h:
        * storage/SQLTransaction.cpp:
        (WebCore::SQLTransaction::postflightAndCommit):

2010-04-26  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Sam Weinig.

        <rdar://problem/7766413>
        
        Fixed a crash seen when using the JavaScriptCore API with WebKit.
        
        No layout test because DumpRenderTree doesn't use the JavaScriptCore API
        in this way.

        * bindings/js/JSEventListener.cpp:
        (WebCore::JSEventListener::JSEventListener): Don't assign 0 to a WeakGCPtr.
        JavaScriptCore no longer allows this.

        * bindings/js/ScriptWrappable.h:
        (WebCore::ScriptWrappable::setWrapper): No need to initialize a WeakGCPtr
        to 0, or ASSERT a non-0 value before assigning to a WeakGCPtr -- both are
        default behaviors.

2010-04-25  Sam Weinig  <sam@webkit.org>

        Reviewed by Maciej Stachowiak.

        Fix for https://bugs.webkit.org/show_bug.cgi?id=38097
        Disentangle initializing the main thread from initializing threading

        * WebCore.xcodeproj/project.pbxproj: Sort files.

        * accessibility/mac/AccessibilityObjectWrapper.mm: Remove unnessary
        +initialize method. The AccessibilityObjectWrapper has no data members
        that need to be derefed, so it does not need to be finalized on the main
        thread.

        * bindings/js/ScriptController.cpp:
        (WebCore::ScriptController::initializeThreading): Add call to initializeMainThread.
        * bindings/objc/WebScriptObject.mm:
        (+[WebScriptObject initialize]): Add call to initializeMainThreadToProcessMainThread.
        * bindings/v8/ScriptController.cpp:
        (WebCore::ScriptController::initializeThreading): Add call to initializeMainThread.
        * platform/mac/SharedBufferMac.mm:
        (+[WebCoreSharedBufferData initialize]): Add call to initializeMainThreadToProcessMainThread.

2010-04-26  Yongjun Zhang  <yongjun_zhang@apple.com>

        Reviewed by Alexey Proskuryakov.
        
        https://bugs.webkit.org/show_bug.cgi?id=38128
        Don't add empty credential to CredentialStorage.
        
        An empty credential is currently regarded as a invalid login because it means a missing value in 
        protectionSpaceToCredentialMap.  This change makes it consistent with current WebCore's behavior
        by ignoring empty credentials.
        
        No new tests added since this only affects credential entered by user from credential dialog,
        which is not testable in DRT.

        * platform/network/mac/ResourceHandleMac.mm:
        (WebCore::ResourceHandle::receivedCredential):

2010-04-26  Laszlo Gombos  <laszlo.1.gombos@nokia.com>

        Reviewed by Simon Hausmann.

        [Qt] Clean-up WebCore.pro after now that JavaScriptCore is built separately
        https://bugs.webkit.org/show_bug.cgi?id=38123

        HAVE_STDINT_H, and HAVE_PTHREAD_NP_H no longer needs to be defined
        for QtWebKit  as JavaScriptCore is built separately. These defines are only 
        used  by JavaScriptCore and for JavaScriptCore these are already
        properly defined in JavaScriptCore/config.h.

        No new tests, no new functionality.

        * WebCore.pro:

2010-04-26  Roman Gershman  <romange@google.com>

        Reviewed by Adam Barth.

        [Chromium] Font size in suggestions popup menu should be correlated with the font size of its text field.
        The following manual test checks for desired behavior.

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

        * manual-tests/chromium/suggestions-popup-font-change.html: Added.

2010-04-26  Luiz Agostini  <luiz.agostini@openbossa.org>

        Reviewed by Kenneth Rohde Christiansen.

        View modes names in CSSValueKeywords.in
        https://bugs.webkit.org/show_bug.cgi?id=38125

        View mode names has changed in previous patch but CSSValueKeywords.in file was
        not updated.

        * css/CSSValueKeywords.in:

2010-04-26  Simon Hausmann  <simon.hausmann@nokia.com>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] Fix compilation with RVCT 4
        https://bugs.webkit.org/show_bug.cgi?id=37727

        Swap extern and declspec to fix visibility of symbol imported from QtGui.

        * page/qt/EventHandlerQt.cpp:

2010-04-26  Ruben Van Boxem  <vanboxem.ruben@gmail.com>

        Reviewed by Adam Roben.

        Fixes for Win64 compilation under gcc (mingw-w64)

        *  WebCore/bridge/npapi.h: for win64 compatibility, mirroring mozilla-central, see Mozilla bug 560298
        *  WebCore/platform/Arena.h: uword is used to cast from pointers here. unsigned long is 32-bit on Windows (but 64-bit on mac), and too small to hold a pointer. uintptr_t is 32-bit on 32-bit systems (mac, linux and windows) and 64-bit on all 64-bit systems
        *  WebCore/platform/graphics/transforms/TransformationMatrix.h: let mingw-w64/w32 use MSVC codepath
        *  WebCore/platform/text/TextStream.cpp: let mingw-w64 use MSVC codepath
        *  WebCore/platform/text/TextStream.h: let mingw-w64 use MSVC codepath
        *  WebCore/plugins/PluginView.cpp: fix pointer casts on WIN64 and let mingw-w64 use MSVC codepath
        *  WebCore/plugins/win/PluginViewWin.cpp: fix pointer casts on WIN64

2010-04-26  Markus Goetz  <Markus.Goetz@nokia.com>

        Reviewed by Simon Hausmann.

        [Qt] HTTP pipelining efficiency increase
        https://bugs.webkit.org/show_bug.cgi?id=38062

        Increase number of network requests that are fed into
        QNetworkAccessManager.

        * platform/network/qt/ResourceRequestQt.cpp:
        (WebCore::initializeMaximumHTTPConnectionCountPerHost):

2010-04-26  Ilya Tikhonovsky  <loislo@chromium.org>

        Reviewed by Yury Semikhatsky.

        Web Inspector: undefined shows up on inspector.
        https://bugs.webkit.org/show_bug.cgi?id=38120

        * inspector/front-end/ScriptsPanel.js:
        (WebInspector.ScriptsPanel.prototype.hide):
        * inspector/front-end/SourceFrame.js:
        (WebInspector.SourceFrame.prototype.set visible):

2010-04-26  Bruno Schmidt  <bruno.schmidt@gmail.com>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] Exposing an QVariantMap containing QObjectStar to Javascript
        causes Segmentation Fault
        https://bugs.webkit.org/show_bug.cgi?id=34729

        If an QVariantMap containing QObjectStar is added to the to QtWebkit
        Javascript, it's use causes Segmentation Fault.
        It happens because, in the case QMetaType::QVariantMap, the "root"
        object that is inside of a PassRefPtr is passed recursively inside a
        loop to recover the content of the map, but the PassRefPtr semantics
        prohibit its use inside a loop, so the "root" object mus be passed
        using the method "PassRefPtr::get" in order to keep the current
        reference.

        * bridge/qt/qt_runtime.cpp:
        (JSC::Bindings::convertValueToQVariant):
        (JSC::Bindings::convertQVariantToValue): change to root.get()

2010-04-26  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Yury Semikhatsky.

        Web Inspector: Render clip in summary bar using "arc", not "quadraticCurveTo".

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

        * inspector/front-end/SummaryBar.js:
        (WebInspector.SummaryBar.prototype._drawSummaryGraph.drawPill):
        (WebInspector.SummaryBar.prototype._drawSummaryGraph):

2010-04-26  Andreas Kling  <andreas.kling@nokia.com>

        Reviewed by Tor Arne Vestbø.

        [Qt] Fix compilation against Qt 4.7

        Some QtMultimedia things have been moved into QtMediaServices
        https://bugs.webkit.org/show_bug.cgi?id=38111

        * WebCore.pro:
        * platform/graphics/qt/MediaPlayerPrivateQt.cpp:
        (WebCore::MediaPlayerPrivate::supportsType):
        (WebCore::MediaPlayerPrivate::totalBytes):

2010-04-26  Zoltan Herczeg  <zherczeg@webkit.org>

        Reviewed by Dirk Schulze.

        Call setStrokeStyle in applyStrokeStyleToContext
        https://bugs.webkit.org/show_bug.cgi?id=37849

        Not all platforms set the stroke style to solid if they
        get an empty line dash array. Some just ignore the operation.

        * rendering/SVGRenderSupport.cpp:
        (WebCore::applyStrokeStyleToContext):

2010-04-23  Ilya Tikhonovsky  <loislo@chromium.org>

        Reviewed by Pavel Feldman.

        WebInspector: Aggregated stats of time spent in children records should be visible
        in the popup panel of parent record. Crash in pushGCEventRecord also was fixed.
        https://bugs.webkit.org/show_bug.cgi?id=37820

        * English.lproj/localizedStrings.js:
        * inspector/InspectorTimelineAgent.cpp:
        (WebCore::InspectorTimelineAgent::pushGCEventRecords):
        * inspector/front-end/TimelinePanel.js:
        (WebInspector.TimelinePanel.prototype._innerAddRecordToTimeline):
        (WebInspector.TimelinePanel.prototype._createRootRecord):
        (WebInspector.TimelinePanel.prototype._showPopover):
        (WebInspector.TimelineCalculator.prototype.computeBarGraphPercentages):
        (WebInspector.TimelineCalculator.prototype.computeBarGraphWindowPosition):
        (WebInspector.TimelineRecordGraphRow):
        (WebInspector.TimelineRecordGraphRow.prototype.update):
        (WebInspector.TimelinePanel.FormattedRecord):
        (WebInspector.TimelinePanel.FormattedRecord.prototype._generateAggregatedInfo):
        (WebInspector.TimelinePanel.FormattedRecord.prototype._generatePopupContent):
        (WebInspector.TimelinePanel.FormattedRecord.prototype._getRecordDetails):
        (WebInspector.TimelinePanel.FormattedRecord.prototype._calculateAggregatedStats):
        * inspector/front-end/inspector.css:
        (.timeline-graph-bar.with-children):
        (.timeline-graph-bar.cpu):
        (.timeline-aggregated-category):
        (.timeline-loading):
        (.timeline-scripting):
        (.timeline-rendering):
        (.popover .timeline-aggregated-category.timeline-loading):
        (.timeline-details-title):

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

        Reviewed by Darin Adler.

        WebKit crashes with deeply nested divs
        https://bugs.webkit.org/show_bug.cgi?id=18282

        The HTML parser caps a tree depth by MAX_DOM_TREE_DEPTH defined in
        TreeDepthLimit.h. This is performance-efficient, but does not work for
        DOM operations such as Node.appendChild().

        Test: fast/parser/element-nesting-cap.html

        * dom/Node.h:
        * dom/XMLTokenizer.cpp:
        (WebCore::XMLTokenizer::pushCurrentNode):
        * html/HTMLParser.cpp:

        * GNUmakefile.am:
        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * dom/TreeDepthLimit.h:
          Added. Define MAX_DOM_TREE_DEPTH. The default value is 5000.
        * dom/XMLTokenizer.cpp: Use maxDOMTreeDepth.
        (WebCore::XMLTokenizer::pushCurrentNode):
        * html/HTMLParser.cpp:
          Introduce m_treeDepth, which counts the depth of the tree.
          Unlike m_blocksInStack, it contains the number of non-block nodes.
        (WebCore::HTMLParser::HTMLParser):
        (WebCore::HTMLParser::reset):
        (WebCore::HTMLParser::limitDepth):
          Renamed from limitBlockDepth. Add check for m_nodeDepth.
        (WebCore::HTMLParser::insertNodeAfterLimitDepth):
          Renamed from insertNodeAfterLimitBlockDepth.
        (WebCore::HTMLParser::parseToken):
        (WebCore::HTMLParser::handleResidualStyleCloseTagAcrossBlocks):
        (WebCore::HTMLParser::pushBlock):
        (WebCore::HTMLParser::popOneBlockCommon):
        (WebCore::HTMLParser::freeBlock):
        * html/HTMLParser.h:

2010-04-25  Andrey Kosyakov  <caseq@chromium.org>

        Reviewed by Adam Barth.

        Get context properly when event handler was created on
        the main world.
        https://bugs.webkit.org/show_bug.cgi?id=37947

        Test: http/tests/security/isolatedWorld/dispatchEvent.html

        * bindings/v8/WorldContextHandle.cpp:
        (WebCore::WorldContextHandle::adjustedContext):

2010-04-25  yael aharon  <yael.aharon@nokia.com>

        Reviewed by Adele Peterson.

        Allow styling of HTMLProgressElement.
        https://bugs.webkit.org/show_bug.cgi?id=37901

        Added a new pseudo element to represent the value portion of the progress element.
        Web developers can style this pseudo element separate from the rest of the progress element.

        Test: fast/dom/HTMLProgressElement/progress-bar-value-pseudo-element.html

        * css/CSSPrimitiveValueMappings.h:
        (WebCore::CSSPrimitiveValue::CSSPrimitiveValue):
        * css/CSSSelector.cpp:
        (WebCore::CSSSelector::pseudoId):
        (WebCore::nameToPseudoTypeMap):
        (WebCore::CSSSelector::extractPseudoType):
        * css/CSSSelector.h:
        * css/CSSValueKeywords.in:
        * platform/ThemeTypes.h:
        * rendering/RenderProgress.cpp:
        (WebCore::ProgressValueElement::isShadowNode):
        (WebCore::ProgressValueElement::shadowParentNode):
        (WebCore::ProgressValueElement::ProgressValueElement):
        (WebCore::RenderProgress::RenderProgress):
        (WebCore::RenderProgress::~RenderProgress):
        (WebCore::RenderProgress::layout):
        (WebCore::RenderProgress::styleDidChange):
        (WebCore::RenderProgress::updateFromElement):
        (WebCore::RenderProgress::updateValuePartState):
        (WebCore::RenderProgress::createStyleForValuePart):
        (WebCore::RenderProgress::updateAnimationState):
        * rendering/RenderTheme.cpp:
        (WebCore::RenderTheme::isControlStyled):
        * rendering/RenderProgress.h:
        * rendering/style/RenderStyleConstants.h:

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

        Reviewed by Dan Bernstein.

        Don't propagate compositing out of iframes on Mac
        https://bugs.webkit.org/show_bug.cgi?id=38072

        Propagating compositing out of iframes caused too many regressions on Mac,
        so only do it for other platforms that may need to hook compositing layers
        together across iframe boundaries.

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

2010-04-24  Anton Muhin  <antonm@chromium.org>

        Reviewed by Darin Adler.

        Allow to construct HashTraits<WebCore::QualifiedName>::constructDeletedValue

        Former implementation attempted to use AtomicString(HashTableDeletedValue)
        however those values cannot be used that way: one cannot construct
        QualifiedNameImpl out of such AtomicString as we'll try to lookup this string
        in the table, for example.
        https://bugs.webkit.org/show_bug.cgi?id=37722

        * dom/QualifiedName.cpp:
        (WebCore::QualifiedName::deref): check that hash table deleted values never derefed
        * dom/QualifiedName.h:
        (WebCore::QualifiedName::QualifiedName): add a constructor to create hash table deleted values
        (WebCore::QualifiedName::isHashTableDeletedValue): add a check if given instance is hash table deleted value
        (WTF::):

2010-04-24  Julien Chaffraix  <jchaffraix@webkit.org>

        Reviewed by Alexey Proskuryakov.

        protocolHostAndPortEquals host check makes a wrong assumption
        https://bugs.webkit.org/show_bug.cgi?id=37777

        The host check assumed that both host started at the same position. This is true
        if both URL are the same but sometimes one has credential and the other does not.
        In this case, the method would compare invalid positions.

        Test: http/tests/appcache/credential-url.html

        * platform/KURL.cpp:
        (WebCore::protocolHostAndPortAreEqual):
        * platform/KURLGoogle.cpp:
        (WebCore::protocolHostAndPortAreEqual):
        Fix the host check to take both URL's credential into account.

2010-04-24  Nikolas Zimmermann  <nzimmermann@rim.com>

        Not reviewed. Fix linkage on several bots (no idea, why it worked in a from-scratch rebuild on Leopard on my machine!) -> include NodeRenderStyle.h
        Having to include NodeRenderStyle.h just to pull in the renderStyle() is a crazy concept, but I see what it tries to avoid (including RenderObject.h in Node.h)

        * rendering/SVGRenderSupport.cpp:

2010-04-24  Nikolas Zimmermann  <nzimmermann@rim.com>

        Not reviewed. Fix release builds, wrap resourceMode assertion in NDEBUG blocks, use UNUSED_PARAM() otherwhise.

        * rendering/RenderSVGResourceClipper.cpp:
        (WebCore::RenderSVGResourceClipper::applyResource):
        * rendering/RenderSVGResourceFilter.cpp:
        (WebCore::RenderSVGResourceFilter::applyResource):
        (WebCore::RenderSVGResourceFilter::postApplyResource):
        * rendering/RenderSVGResourceMasker.cpp:
        (WebCore::RenderSVGResourceMasker::applyResource):

2010-04-24  Nikolas Zimmermann  <nzimmermann@rim.com>

        Reviewed by Dirk Schulze.

        SVGPaintServer needs to be converted to the new RenderSVGResource* system
        https://bugs.webkit.org/show_bug.cgi?id=37986

        Huge speedup for SVG painting using paint servers (gradient/patterns). Cache underlying
        WebCore::Gradient/Pattern datastructures, do not rebuild them on every painting. This marks
        the finish of the SVGResource -> RenderSVGResource transition.

        Outline of same key changes:
        - RenderSVGResource is an abstract base class now, and the previous class is now named RenderSVGResourceContainer
          All resources except RenderSVGResourceSolidColor now inherit from RenderSVGResourceContainer, as they are all
          associated with a SVG*Element class. RenderSVGResourceSolidColor inherits from RenderSVGResource, and is not
          associated with any SVG*Element class. RenderSVGResourceSolidColor is not a render tree object, despite its name.
          The reason for that is consistency with all other painting resources.
        - RenderSVGResourceSolidColor does not live in the render tree, and exists only as static object, which is shared
          and always used when filling/stroking with solid colors - just like the old SVGPaintServerSolid.
        - RenderSVGResourceGradient/RenderSVGResourcePattern now store the underlying WebCore::Gradient/Pattern object
          instead of rebuilding it everytime we're asked to paint -> this is the main difference with the old concept, leading
          to much faster speed.
        - SVGResource has vanished. All resources (clipper/filter/marker/masker/gradient/pattern) now share the same codepaths
          to handle updates and client invalidation - which is a huge benefit, and makes the code easier to understand.

        * Android.mk: Remove svg/graphics/SVGResource*, svg/graphics/SVGPaintServer.h from build.
        * GNUmakefile.am: Ditto.
        * WebCore.gypi: Ditto.
        * WebCore.pro: Ditto.
        * WebCore.vcproj/WebCore.vcproj: Ditto.
        * WebCore.xcodeproj/project.pbxproj: Ditto.
        * platform/graphics/Gradient.cpp: Add addColorStop() method taking a ColorStop const-reference.
        (WebCore::Gradient::addColorStop):
        * platform/graphics/Gradient.h: Ditto.
        * platform/graphics/TextRun.h: Rename SVGPaintServer to RenderSVGResource
        (WebCore::TextRun::TextRun):
        (WebCore::TextRun::activePaintingResource): Renamed from activePaintServer.
        (WebCore::TextRun::setActivePaintingResource): Renamed from setActivePaintServer.
        * platform/graphics/win/GraphicsContextWin.cpp: Remove references to SVGResourceImage, which was removed a long time ago.
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::toRenderSVGResourceContainer): Renamed from toRenderSVGResource().
        * rendering/RenderObject.h:
        (WebCore::RenderObject::isSVGGradientStop): Added.
        (WebCore::RenderObject::isSVGResourceContainer): Renamed from isSVGResource().
        * rendering/RenderPath.cpp: Utilize RenderSVGResource::fill/strokePaintingResource to request paint servers, instead of SVGPaintServer.
        (WebCore::RenderPath::fillContains): Adapt to new concept.
        (WebCore::RenderPath::strokeContains): Ditto.
        (WebCore::fillAndStrokePath): Ditto.
        (WebCore::RenderPath::paint): Ditto.
        * rendering/RenderSVGGradientStop.cpp:
        (WebCore::RenderSVGGradientStop::styleDidChange): Ditto.
        * rendering/RenderSVGGradientStop.h: Fixed indention.
        * rendering/RenderSVGResource.cpp: Refactored old SVGPaintServer code to request fill/stroke painting resources, splitted up in several methods to aid readability. 
        (WebCore::registerPendingResource):
        (WebCore::adjustColorForPseudoRules):
        (WebCore::RenderSVGResource::fillPaintingResource):
        (WebCore::RenderSVGResource::strokePaintingResource):
        (WebCore::RenderSVGResource::sharedSolidPaintingResource):
        (WebCore::RenderSVGResource::markForLayoutAndResourceInvalidation):
        * rendering/RenderSVGResource.h: Make RenderSVGResource an abstract base class, see above for the reasoning.
        (WebCore::RenderSVGResource::RenderSVGResource):
        (WebCore::RenderSVGResource::~RenderSVGResource):
        (WebCore::RenderSVGResource::postApplyResource):
        * rendering/RenderSVGResourceClipper.cpp: Inherit from RenderSVGResourceContainer instead of RenderSVGResource.
        (WebCore::RenderSVGResourceClipper::RenderSVGResourceClipper):
        (WebCore::RenderSVGResourceClipper::invalidateClient):
        (WebCore::RenderSVGResourceClipper::applyResource): Adapt to signature changes (add RenderStyle* and resource mode parameters)
        (WebCore::RenderSVGResourceClipper::applyClippingToContext):
        * rendering/RenderSVGResourceClipper.h:
        * rendering/RenderSVGResourceContainer.h: Added. Renamed from RenderSVGResource. Now inherits from RenderSVGHiddenContainer and RenderSVGResource.
        (WebCore::RenderSVGResourceContainer::RenderSVGResourceContainer):
        (WebCore::RenderSVGResourceContainer::~RenderSVGResourceContainer):
        (WebCore::RenderSVGResourceContainer::idChanged):
        (WebCore::RenderSVGResourceContainer::isSVGResourceContainer):
        (WebCore::RenderSVGResourceContainer::drawsContents):
        (WebCore::RenderSVGResourceContainer::toRenderSVGResourceContainer):
        (WebCore::getRenderSVGResourceContainerById):
        (WebCore::getRenderSVGResourceById):
        * rendering/RenderSVGResourceFilter.cpp: Inherit from RenderSVGResourceContainer instead of RenderSVGResource.
        (WebCore::RenderSVGResourceFilter::RenderSVGResourceFilter):
        (WebCore::RenderSVGResourceFilter::invalidateClient):
        (WebCore::RenderSVGResourceFilter::applyResource): Adapt to signature changes (add RenderStyle* and resource mode parameters)
        (WebCore::RenderSVGResourceFilter::postApplyResource):
        * rendering/RenderSVGResourceFilter.h:
        * rendering/RenderSVGResourceGradient.cpp: Moved from SVGPaintServerGradient, cleaned up and refactored.
        (WebCore::RenderSVGResourceGradient::RenderSVGResourceGradient):
        (WebCore::RenderSVGResourceGradient::~RenderSVGResourceGradient):
        (WebCore::RenderSVGResourceGradient::invalidateClients):
        (WebCore::RenderSVGResourceGradient::invalidateClient):
        (WebCore::createMaskAndSwapContextForTextGradient):
        (WebCore::clipToTextMask):
        (WebCore::RenderSVGResourceGradient::applyResource):
        * rendering/RenderSVGResourceGradient.h:
        (WebCore::RenderSVGResourceGradient::resourceBoundingBox):
        * rendering/RenderSVGResourceLinearGradient.cpp: Moved from SVGPaintServerLinearGradient, cleaned up and refactored.
        (WebCore::RenderSVGResourceLinearGradient::RenderSVGResourceLinearGradient):
        (WebCore::RenderSVGResourceLinearGradient::~RenderSVGResourceLinearGradient):
        (WebCore::RenderSVGResourceLinearGradient::buildGradient):
        * rendering/RenderSVGResourceLinearGradient.h:
        (WebCore::RenderSVGResourceLinearGradient::renderName):
        (WebCore::RenderSVGResourceLinearGradient::resourceType):
        * rendering/RenderSVGResourceMarker.cpp: Inherit from RenderSVGResourceContainer instead of RenderSVGResource.
        (WebCore::RenderSVGResourceMarker::RenderSVGResourceMarker):
        (WebCore::RenderSVGResourceMarker::invalidateClient):
        * rendering/RenderSVGResourceMarker.h:
        (WebCore::RenderSVGResourceMarker::applyResource):
        * rendering/RenderSVGResourceMasker.cpp: Inherit from RenderSVGResourceContainer instead of RenderSVGResource.
        (WebCore::RenderSVGResourceMasker::RenderSVGResourceMasker):
        (WebCore::RenderSVGResourceMasker::invalidateClient):
        (WebCore::RenderSVGResourceMasker::applyResource):
        * rendering/RenderSVGResourceMasker.h:
        (WebCore::MaskerData::MaskerData):
        * rendering/RenderSVGResourcePattern.cpp: Moved from SVGPaintServerPattern, cleaned up and refactored.
        (WebCore::RenderSVGResourcePattern::RenderSVGResourcePattern):
        (WebCore::RenderSVGResourcePattern::~RenderSVGResourcePattern):
        (WebCore::RenderSVGResourcePattern::invalidateClients):
        (WebCore::RenderSVGResourcePattern::invalidateClient):
        (WebCore::RenderSVGResourcePattern::applyResource):
        (WebCore::RenderSVGResourcePattern::postApplyResource):
        (WebCore::calculatePatternBoundaries):
        (WebCore::RenderSVGResourcePattern::calculatePatternBoundariesIncludingOverflow):
        (WebCore::RenderSVGResourcePattern::createTileImage):
        (WebCore::RenderSVGResourcePattern::buildPattern):
        * rendering/RenderSVGResourcePattern.h:
        (WebCore::RenderSVGResourcePattern::renderName):
        (WebCore::RenderSVGResourcePattern::resourceBoundingBox):
        (WebCore::RenderSVGResourcePattern::resourceType):
        * rendering/RenderSVGResourceRadialGradient.cpp: Moved from SVGPaintServerRadialGradient, cleaned up and refactored.
        (WebCore::RenderSVGResourceRadialGradient::RenderSVGResourceRadialGradient):
        (WebCore::RenderSVGResourceRadialGradient::~RenderSVGResourceRadialGradient):
        (WebCore::RenderSVGResourceRadialGradient::buildGradient):
        * rendering/RenderSVGResourceRadialGradient.h:
        (WebCore::RenderSVGResourceRadialGradient::renderName):
        (WebCore::RenderSVGResourceRadialGradient::resourceType):
        * rendering/RenderSVGResourceSolidColor.cpp: Moved from SVGPaintServerSolid, cleaned up and refactored.
        (WebCore::RenderSVGResourceSolidColor::RenderSVGResourceSolidColor):
        (WebCore::RenderSVGResourceSolidColor::~RenderSVGResourceSolidColor):
        (WebCore::RenderSVGResourceSolidColor::applyResource):
        (WebCore::RenderSVGResourceSolidColor::postApplyResource):
        * rendering/RenderSVGResourceSolidColor.h:
        (WebCore::RenderSVGResourceSolidColor::invalidateClients):
        (WebCore::RenderSVGResourceSolidColor::invalidateClient):
        (WebCore::RenderSVGResourceSolidColor::resourceBoundingBox):
        (WebCore::RenderSVGResourceSolidColor::resourceType):
        (WebCore::RenderSVGResourceSolidColor::color):
        (WebCore::RenderSVGResourceSolidColor::setColor):
        * rendering/RenderSVGText.cpp:
        (WebCore::RenderSVGText::paint): Early exit if painting is disabled.
        * rendering/RenderTreeAsText.cpp:
        (WebCore::write): Add RenderSVGGradientStop dumping.
        (WebCore::externalRepresentation): Remove SVGResource dumping.
        * rendering/SVGInlineTextBox.cpp: Adapt to SVGPaintServer changes (paint server request).
        (WebCore::SVGInlineTextBox::paintCharacters):
        (WebCore::SVGInlineTextBox::paintDecoration):
        * rendering/SVGInlineTextBox.h: Ditto.
        (WebCore::SVGTextPaintInfo::SVGTextPaintInfo):
        * rendering/SVGRenderSupport.cpp: Ditto.
        (WebCore::SVGRenderBase::prepareToRenderSVGContent):
        (WebCore::SVGRenderBase::finishRenderSVGContent):
        (WebCore::invalidatePaintingResource):
        (WebCore::deregisterFromResources):
        (WebCore::dashArrayFromRenderingStyle): Moved here from SVGPaintServer.
        (WebCore::applyStrokeStyleToContext): Ditto.
        * rendering/SVGRenderSupport.h:
        * rendering/SVGRenderTreeAsText.cpp: Add new gradient/pattern dumping code. Stops are now properly dumped as well!
        (WebCore::operator<<):
        (WebCore::writeSVGPaintingResource):
        (WebCore::writeStyle):
        (WebCore::boundingBoxModeString):
        (WebCore::writeCommonGradientProperties):
        (WebCore::writeSVGResourceContainer):
        (WebCore::writeSVGGradientStop):
        * rendering/SVGRenderTreeAsText.h:
        * rendering/SVGRootInlineBox.cpp: Adapt to SVGPaintServer changes (paint server request).
        (WebCore::SVGRootInlineBoxPaintWalker::SVGRootInlineBoxPaintWalker):
        (WebCore::SVGRootInlineBoxPaintWalker::~SVGRootInlineBoxPaintWalker):
        (WebCore::SVGRootInlineBoxPaintWalker::teardownFillPaintServer):
        (WebCore::SVGRootInlineBoxPaintWalker::teardownStrokePaintServer):
        (WebCore::SVGRootInlineBoxPaintWalker::setupBackground):
        (WebCore::SVGRootInlineBoxPaintWalker::setupFill):
        (WebCore::SVGRootInlineBoxPaintWalker::setupFillSelection):
        (WebCore::SVGRootInlineBoxPaintWalker::setupStroke):
        (WebCore::SVGRootInlineBoxPaintWalker::setupStrokeSelection):
        (WebCore::SVGRootInlineBoxPaintWalker::setupForeground):
        (WebCore::SVGRootInlineBoxPaintWalker::activePaintingResource):
        (WebCore::SVGRootInlineBoxPaintWalker::paintChunk):
        * svg/GradientAttributes.h: Remove SVGGradientStop, use Gradient::ColorStop vector. Cleanup.
        (WebCore::GradientAttributes::stops):
        (WebCore::GradientAttributes::setStops):
        * svg/LinearGradientAttributes.h: Move ENABLE(SVG) guard to correct location.
        * svg/PatternAttributes.h: Add missing includes and class forwards.
        * svg/RadialGradientAttributes.h: Move ENABLE(SVG) guard to correct location.
        * svg/SVGClipPathElement.cpp: Rename invalidateCanvasResources() to invalidateResourceClients().
        (WebCore::SVGClipPathElement::svgAttributeChanged):
        (WebCore::SVGClipPathElement::childrenChanged): Only call invalidateResourceClients() when !changedByParser is set.
        * svg/SVGClipPathElement.h:
        * svg/SVGDocumentExtensions.cpp: Change HashMaps to hash AtomicStrings instead of Strings. Rename RenderSVGResource to RenderSVGResourceContainer.
        (WebCore::SVGDocumentExtensions::addResource):
        (WebCore::SVGDocumentExtensions::removeResource):
        (WebCore::SVGDocumentExtensions::resourceById):
        (WebCore::SVGDocumentExtensions::addPendingResource):
        * svg/SVGDocumentExtensions.h:
        * svg/SVGElement.cpp:
        (WebCore::SVGElement::insertedIntoDocument): Remove reference to SVGResource::invalidateClients(), handled differently now.
        (WebCore::SVGElement::updateAnimatedSVGAttribute): Change assertion, that is incorrect now.
        * svg/SVGElement.h: Make updateAnimatedSVGAttribute() public.
        * svg/SVGFont.cpp: Adapt to SVGPaintServer changes (paint server request).
        (WebCore::Font::drawTextUsingSVGFont):
        * svg/SVGGElement.cpp: If style()->display() is NONE, create a RenderSVGHiddenContainer, removing hacks in SVGStopElement for pservers-grad-19-b.svg (yes, SVG is crazy.)
        (WebCore::SVGGElement::createRenderer):
        * svg/SVGGElement.h: Remove childrenChanged() method which _always_ called renderer->setNeedsLayout(true), which is completly wrong and unnecessary.
        (WebCore::SVGGElement::rendererIsNeeded): Always return true.
        * svg/SVGGradientElement.cpp: Adapt to new RenderSVGResourceGradient code.
        (WebCore::SVGGradientElement::svgAttributeChanged):
        (WebCore::SVGGradientElement::childrenChanged): Only call invalidateResourceClients() when !changedByParser is set.
        (WebCore::SVGGradientElement::buildStops):
        * svg/SVGGradientElement.h:
        * svg/SVGLinearGradientElement.cpp: Adapt to new RenderSVGResourceLinearGradient code.
        (WebCore::SVGLinearGradientElement::svgAttributeChanged):
        (WebCore::SVGLinearGradientElement::createRenderer):
        (WebCore::SVGLinearGradientElement::collectGradientProperties):
        (WebCore::SVGLinearGradientElement::calculateStartEndPoints):
        * svg/SVGLinearGradientElement.h:
        * svg/SVGMarkerElement.cpp: Rename invalidateCanvasResources() to invalidateResourceClients().
        (WebCore::SVGMarkerElement::svgAttributeChanged):
        (WebCore::SVGMarkerElement::childrenChanged): Only call invalidateResourceClients() when !changedByParser is set.
        (WebCore::SVGMarkerElement::setOrientToAuto):
        (WebCore::SVGMarkerElement::setOrientToAngle):
        * svg/SVGMaskElement.cpp: Rename invalidateCanvasResources() to invalidateResourceClients().
        (WebCore::SVGMaskElement::svgAttributeChanged):
        (WebCore::SVGMaskElement::childrenChanged): Only call invalidateResourceClients() when !changedByParser is set.
        * svg/SVGPatternElement.cpp: Rename invalidateCanvasResources() to invalidateResourceClients().
        (WebCore::SVGPatternElement::svgAttributeChanged):
        (WebCore::SVGPatternElement::childrenChanged): Only call invalidateResourceClients() when !changedByParser is set.
        (WebCore::SVGPatternElement::createRenderer):
        * svg/SVGPatternElement.h:
        * svg/SVGPolyElement.h: Remove unneded rendererIsNeeded() override.
        * svg/SVGRadialGradientElement.cpp: Adapt to new RenderSVGResourceRadialGradient code.
        (WebCore::SVGRadialGradientElement::svgAttributeChanged):
        (WebCore::SVGRadialGradientElement::createRenderer):
        (WebCore::SVGRadialGradientElement::collectGradientProperties):
        (WebCore::SVGRadialGradientElement::calculateFocalCenterPointsAndRadius):
        * svg/SVGRadialGradientElement.h:
        * svg/SVGStopElement.cpp: Clean up code, moved stop color calculation from SVGGradientElement to here, where it belongs.
        (WebCore::SVGStopElement::parseMappedAttribute):
        (WebCore::SVGStopElement::stopColorIncludingOpacity):
        * svg/SVGStopElement.h:
        * svg/SVGStyledElement.cpp:
        (WebCore::SVGStyledElement::~SVGStyledElement):
        (WebCore::SVGStyledElement::svgAttributeChanged): Only invalidateResourcesInAncestorChain()/deregisterFromResources() when we're not parsing.
        (WebCore::SVGStyledElement::invalidateResourcesInAncestorChain): Early exit if we find a parent resources, there is no resource nesting.
        (WebCore::SVGStyledElement::invalidateResourceClients): Renamed from invalidateCanvasResources()
        (WebCore::SVGStyledElement::childrenChanged): Only invalidate SVGElementInstances when !changedByParser is set.
        * svg/SVGStyledElement.h: Remove canvasResource() logic, remove detach() method.
        * svg/SVGTextPathElement.h:
        * svg/graphics/SVGPaintServer.h: Removed.
        * svg/graphics/SVGResource.cpp: Removed.
        * svg/graphics/SVGResource.h: Removed.

2010-04-23  Zhenyao Mo  <zmo@google.com>

        Reviewed by Darin Fisher.

        Add isGLES2Compliant to GraphicsContext3D: make the method const.
        https://bugs.webkit.org/show_bug.cgi?id=37872

        * platform/graphics/GraphicsContext3D.h: Make isGLES2Compliant() const.
        * platform/graphics/mac/GraphicsContext3DMac.cpp: Ditto.
        (WebCore::GraphicsContext3D::isGLES2Compliant):

2010-04-23  Qi Zhang  <qi.2.zhang@nokia.com>

        Reviewed by Laszlo Gombos.

        [Qt] LayoutTests/fast/canvas/pointInPath.html passed, actually it failed
        https://bugs.webkit.org/show_bug.cgi?id=37276

        QPainterPath::contains doesn't count the point on the bound.

        * platform/graphics/qt/PathQt.cpp:
        (WebCore::isPointOnPathBorder):
        (WebCore::Path::contains):

2010-04-23  Sam Weinig  <sam@webkit.org>

        Reviewed by David Levin.

        Fix for https://bugs.webkit.org/show_bug.cgi?id=38060
        Split up Threading.h

        Add necessary forwarding headers.

        * ForwardingHeaders/wtf/Atomics.h: Added.
        * ForwardingHeaders/wtf/ThreadSafeShared.h: Added.
        * ForwardingHeaders/wtf/ThreadingPrimitives.h: Added.

2010-04-23  Rafael Weinstein  <rafaelw@grafaelw.sfo.corp.google.com>

        Reviewed by Darin Fisher.

        This patch adds a vector of additionalFeatures to WindowFeatures
        and populates it with any feature strings that evaluate to "yes"
        and aren't directly observed in WindowFeatures. This allows
        clients to capture experimental window features.

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

        * page/WindowFeatures.cpp:
        (WebCore::WindowFeatures::setWindowFeature):
        * page/WindowFeatures.h:

2010-04-23  Dan Bernstein  <mitz@apple.com>

        Reviewed by Simon Fraser.

        <rdar://problem/7898436> :after content is duplicated

        Test: fast/css-generated-content/after-duplicated-after-split.html

        * rendering/RenderInline.cpp:
        (WebCore::RenderInline::splitInlines): Pass the correct owner of the child list.

2010-04-23  Adele Peterson  <adele@apple.com>

        Fixing the Tiger build for real.

        * platform/graphics/mac/SimpleFontDataMac.mm:

2010-04-23  Adele Peterson  <adele@apple.com>

        Fixing the Tiger build.

        * platform/graphics/mac/SimpleFontDataMac.mm:
        (WebCore::SimpleFontData::platformBoundsForGlyph):

2010-04-23  Jian Li  <jianli@chromium.org>

        Reviewed by Dmitry Titov.

        Add FileError for File API.
        https://bugs.webkit.org/show_bug.cgi?id=37840

        The test will be added when implementing FileReader and FilerWriter.

        * Android.derived.jscbindings.mk:
        * Android.derived.v8bindings.mk:
        * DerivedSources.cpp:
        * DerivedSources.make:
        * GNUmakefile.am:
        * WebCore.gypi:
        * WebCore.pri:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * dom/ExceptionCode.h:
        (WebCore::):
        * html/FileError.h: Added.
        * html/FileError.idl: Added.
        * page/DOMWindow.idl:

2010-04-23  Jian Li  <jianli@chromium.org>

        Reviewed by Adam Barth.

        Improve code generator scripts to handle OR ('|') condition in the
        extended attributes.
        https://bugs.webkit.org/show_bug.cgi?id=37998

        * bindings/scripts/CodeGeneratorJS.pm:
        * bindings/scripts/CodeGeneratorObjC.pm:
        * bindings/scripts/CodeGeneratorV8.pm:
        * bindings/scripts/IDLStructure.pm:

2010-04-23  Adele Peterson  <adele@apple.com>

        Reviewed by Dan Bernstein.

        Fix for <rdar://problem/7855777> REGRESSION: Memory usage increase caused by storing glyph bounds in GlyphMetricsMap
        https://bugs.webkit.org/show_bug.cgi?id=37936

        This change breaks the GlyphMetricsMap into two maps - one for width and one for bounds, so that we don't store
        a FloatRect for the glyph bounds unless we need to.

        Covered by existing tests.  This should not cause any change in functionality.

        Updated for removal of GlyphMetricsMap.cpp
        * Android.mk:
        * GNUmakefile.am:
        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:

        Made GlyphMetricsMap a template, so it can be used for separate width and bounds maps.
        * platform/graphics/GlyphMetricsMap.cpp: Removed.
        * platform/graphics/GlyphMetricsMap.h:
        (WebCore::GlyphMetricsMap::metricsForGlyph):
        (WebCore::GlyphMetricsMap::setMetricsForGlyph):
        (WebCore::GlyphMetricsMap::GlyphMetricsPage::metricsForGlyph):
        (WebCore::GlyphMetricsMap::GlyphMetricsPage::setMetricsForGlyph):
        (WebCore::GlyphMetricsMap::GlyphMetricsPage::setMetricsForIndex):
        (WebCore::::unknownMetrics):
        (WebCore::::locatePageSlowCase):

        * platform/graphics/mac/ComplexTextController.cpp: (WebCore::ComplexTextController::adjustGlyphsAndAdvances):
        Call boundsForGlyph instead of metricsForGlyph.
        * platform/graphics/win/UniscribeController.cpp: (WebCore::UniscribeController::shapeAndPlaceItem):
        ditto.
        * platform/graphics/SimpleFontData.cpp: (WebCore::SimpleFontData::platformGlyphInit):
        Call setMetricsForGlyph for both glyph maps.

        Break getters and setters for metricsForGlyph into widthForGlyph and boundsForGlyph, maintaining present behavior.
        * platform/graphics/SimpleFontData.h:
        (WebCore::):
        (WebCore::SimpleFontData::boundsForGlyph):
        (WebCore::SimpleFontData::widthForGlyph):
        * platform/graphics/cairo/SimpleFontDataCairo.cpp:
        (WebCore::SimpleFontData::platformBoundsForGlyph):
        (WebCore::SimpleFontData::platformWidthForGlyph):
        * platform/graphics/chromium/SimpleFontDataChromiumWin.cpp:
        (WebCore::SimpleFontData::platformBoundsForGlyph):
        (WebCore::SimpleFontData::platformWidthForGlyph):
        * platform/graphics/chromium/SimpleFontDataLinux.cpp:
        (WebCore::SimpleFontData::platformBoundsForGlyph):
        (WebCore::SimpleFontData::platformWidthForGlyph):
        * platform/graphics/gtk/SimpleFontDataPango.cpp:
        (WebCore::SimpleFontData::platformBoundsForGlyph):
        (WebCore::SimpleFontData::platformWidthForGlyph):
        * platform/graphics/mac/SimpleFontDataMac.mm:
        (WebCore::SimpleFontData::platformBoundsForGlyph):
        (WebCore::SimpleFontData::platformWidthForGlyph):
        * platform/graphics/win/SimpleFontDataCGWin.cpp:
        (WebCore::SimpleFontData::platformBoundsForGlyph):
        (WebCore::SimpleFontData::platformWidthForGlyph):
        * platform/graphics/win/SimpleFontDataCairoWin.cpp:
        (WebCore::SimpleFontData::platformBoundsForGlyph):
        * platform/graphics/win/SimpleFontDataWin.cpp:
        (WebCore::SimpleFontData::boundsForGDIGlyph):
        (WebCore::SimpleFontData::widthForGDIGlyph):
        * platform/graphics/wince/SimpleFontDataWince.cpp:
        (WebCore::SimpleFontData::platformBoundsForGlyph):
        * platform/graphics/wx/SimpleFontDataWx.cpp:
        (WebCore::SimpleFontData::platformBoundsForGlyph):
        (WebCore::SimpleFontData::platformWidthForGlyph):

2010-04-23  Xiaomei Ji  <xji@chromium.org>

        Reviewed by Dan Bernstein and Darin Adler

        Fix issue "caret does not paint after type in characters in right
        aligned div or after delete all characters in RTL div or 
        0px right padding RTL textarea"
        https://bugs.webkit.org/show_bug.cgi?id=25319

        Test: editing/inserting/caret-position.html

        * rendering/RenderText.cpp:
        (WebCore::RenderText::localCaretRect):

2010-04-23  No'am Rosenthal  <noam.rosenthal@nokia.com>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] [Performance] GraphicsLayer: constructing the layers takes too long
        https://bugs.webkit.org/show_bug.cgi?id=36365

        The issue came from using QGraphicsView's cache as is. The problem is that
        several code-paths require re-rendering of the item, but not re-rendering
        of the web content into the cache.

        The way to solve it is by having GraphicsLayerQt manage the cache directly
        via QPixmapCache, instead of using QGraphicsItem cache modes.

        FPS measurement shows significant improvement (20FPS before, 40FPS after)
        on several use-cases, including blog-files/leaves on a desktop environment.

        * platform/graphics/qt/GraphicsLayerQt.cpp:
        (WebCore::GraphicsLayerQtImpl::GraphicsLayerQtImpl):
        (WebCore::GraphicsLayerQtImpl::recache):
        (WebCore::GraphicsLayerQtImpl::paint):
        (WebCore::GraphicsLayerQtImpl::flushChanges):

2010-04-23  James Robinson  <jamesr@chromium.org>

        Reviewed by Dimitri Glazkov.

        Avoid marking symbols as dllexport in chromium win builds
        https://bugs.webkit.org/show_bug.cgi?id=38058

        No new tests.

        * config.h:

2010-04-23  MORITA Hajime  <morrita@google.com>

        Reviewed by Nikolas Zimmermann.

        https://bugs.webkit.org/show_bug.cgi?id=37187
        SVG <use href="foo"> is interpreted as <use href="#foo">

        getTarget() did return url parameter as is if doesn't have
        fragment identifier. So fixed to return empty string in such case
        because we need to distinguish "yyy.html" from "xxx.svg#yyy.html".
        
        Test: svg/custom/broken-internal-references.svg

        * svg/SVGElement.cpp:
        (WebCore::SVGElement::insertedIntoDocument):
        * svg/SVGURIReference.cpp:
        (WebCore::SVGURIReference::getTarget):

2010-04-23  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Dan Bernstein.

        ASSERT(willBeComposited == needsToBeComposited(layer)); on gmail.com
        https://bugs.webkit.org/show_bug.cgi?id=38066
        
        When a layer goes into compositing mode because it has a negative z-index child that is going
        into compositing mode, then set willBeComposited to true. Also add another assertion to catch
        any other cases where the state of willBeComposited is mismanaged.

        Test: compositing/composited-negative-zindex-child.html

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

2010-04-23  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Dan Bernstein.

        When webkitAnimationEnd event fires, on-screen rendering should show the last frame of animation
        https://bugs.webkit.org/show_bug.cgi?id=37955

        After r37484, animation and transition end events were fired on a timer, after the animation/transition
        ended. This opened up one event loop cycle in which the non-animating state of the element was visible
        before the event fired, resulting in flashes in content that reset style from the event handler.
        
        Fix by firing these events in the same event cycle as the animation end, once all animations
        have been updated. This also required moving the place that start animations are fixed until
        a later state in the state machine, so that animations have their start time set at the point
        the event is fired (to avoid an assertion when using the freeze API in DRT).
        
        Not testable, since the flash is very transitory and cannot be captured in a pixel test.

        * page/animation/AnimationBase.cpp:
        (WebCore::AnimationBase::updateStateMachine): Move the firing of 'start' events into the state
        where the start time is known.
        * page/animation/AnimationControllerPrivate.h:
        * page/animation/AnimationController.cpp:
        (WebCore::AnimationControllerPrivate::updateStyleIfNeededDispatcherFired): Call the new fireEventsAndUpdateStyle()
        method.
        (WebCore::AnimationControllerPrivate::fireEventsAndUpdateStyle): New method to share code that used to be in
        updateStyleIfNeededDispatcherFired().
        (WebCore::AnimationControllerPrivate::animationTimerFired): Call fireEventsAndUpdateStyle() once we've
        processed all animations.

2010-04-23  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Dan Bernstein.

        CompositeAnimation::updateKeyframeAnimations() can make a KeyframeAnimation for animation "none"
        https://bugs.webkit.org/show_bug.cgi?id=38017

        Check to see if the animation name is "none", and don't fire off a keyframe animation in
        that case.

        * page/animation/CompositeAnimation.cpp:
        (WebCore::CompositeAnimation::updateKeyframeAnimations):

2010-04-23  Laszlo Gombos  <laszlo.1.gombos@nokia.com>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] Disable Netscape plugin support for minimal configuration
        https://bugs.webkit.org/show_bug.cgi?id=38026

        No new tests, as there is no new functionality.

        * WebCore.pri:

2010-04-23  Shinichiro Hamaji  <hamaji@chromium.org>

        Reviewed by Darin Adler.

        Need borderAndPadding(Width|Height)
        https://bugs.webkit.org/show_bug.cgi?id=38046

        Refactoring only, so no new tests.

        * rendering/InlineBox.cpp:
        (WebCore::InlineBox::height):
        * rendering/RenderApplet.cpp:
        (WebCore::RenderApplet::createWidgetIfNecessary):
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::isSelfCollapsingBlock):
        (WebCore::RenderBlock::calcPrefWidths):
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::calcBorderBoxWidth):
        (WebCore::RenderBox::calcBorderBoxHeight):
        (WebCore::RenderBox::calcContentBoxWidth):
        (WebCore::RenderBox::calcContentBoxHeight):
        (WebCore::RenderBox::calcWidth):
        (WebCore::RenderBox::calcHeight):
        (WebCore::RenderBox::calcPercentageHeight):
        (WebCore::RenderBox::calcReplacedHeightUsing):
        (WebCore::RenderBox::availableHeightUsing):
        (WebCore::RenderBox::calcAbsoluteHorizontal):
        (WebCore::RenderBox::calcAbsoluteVertical):
        (WebCore::RenderBox::calcAbsoluteHorizontalReplaced):
        (WebCore::RenderBox::calcAbsoluteVerticalReplaced):
        (WebCore::RenderBox::positionForPoint):
        * rendering/RenderBoxModelObject.h:
        (WebCore::RenderBoxModelObject::borderAndPaddingHeight):
        (WebCore::RenderBoxModelObject::borderAndPaddingWidth):
        * rendering/RenderDataGrid.cpp:
        (WebCore::RenderDataGrid::calcPrefWidths):
        * rendering/RenderFieldset.cpp:
        (WebCore::RenderFieldset::calcPrefWidths):
        * rendering/RenderFileUploadControl.cpp:
        (WebCore::RenderFileUploadControl::calcPrefWidths):
        * rendering/RenderFlexibleBox.cpp:
        (WebCore::RenderFlexibleBox::calcPrefWidths):
        (WebCore::RenderFlexibleBox::allowedChildFlex):
        * rendering/RenderImage.cpp:
        (WebCore::RenderImage::calcPrefWidths):
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::resize):
        * rendering/RenderListBox.cpp:
        (WebCore::RenderListBox::calcPrefWidths):
        (WebCore::RenderListBox::calcHeight):
        * rendering/RenderMenuList.cpp:
        (WebCore::RenderMenuList::calcPrefWidths):
        * rendering/RenderReplaced.cpp:
        (WebCore::RenderReplaced::calcPrefWidths):
        * rendering/RenderSVGRoot.cpp:
        (WebCore::RenderSVGRoot::calcPrefWidths):
        * rendering/RenderSlider.cpp:
        (WebCore::RenderSlider::calcPrefWidths):
        (WebCore::RenderSlider::layout):
        * rendering/RenderTableCell.cpp:
        (WebCore::RenderTableCell::styleOrColWidth):
        * rendering/RenderTextControl.cpp:
        (WebCore::RenderTextControl::textBlockHeight):
        (WebCore::RenderTextControl::textBlockWidth):
        (WebCore::RenderTextControl::calcHeight):
        (WebCore::RenderTextControl::calcPrefWidths):
        * rendering/RenderTextControlSingleLine.cpp:
        (WebCore::RenderTextControlSingleLine::layout):
        * rendering/RenderWidget.cpp:
        (WebCore::RenderWidget::updateWidgetPosition):

2010-04-23  David Kilzer  <ddkilzer@apple.com>

        Size mismatch between format string and argument in dumpTextEncodingNameMap()

        Reviewed by Darin Adler.

        See Bug 38030 and r58157.

        * platform/text/TextEncodingRegistry.cpp:
        (WebCore::dumpTextEncodingNameMap): Assigned
        textEncodingNameMap->size() to an unsigned variable before using
        it in the fprintf() statement.

2010-04-23  David Kilzer  <ddkilzer@apple.com>

        BUILD FIX: Attempt to fix Windows build after Bug 36187 landed in r58168

        * DerivedSources.cpp: Changed include of JSMedia.cpp to
        JSStyleMedia.cpp.

2010-04-23  David Kilzer  <ddkilzer@apple.com>

        BUILD FIX: Fix Mac build after Bug 36187 landed in r58168

        * WebCore.xcodeproj/project.pbxproj: Renamed DOMMedia.h,
        DOMMedia.mm, DOMMediaInternal.h to DOMStyleMedia.h,
        DOMStyleMedia.mm, DOMStyleMediaInternal.h.  

2010-04-23  Kenneth Rohde Christiansen  <kenneth@webkit.org>

        Unreviewed build fix.

        Change Media to StyleMedia

        * DerivedSources.make:

2010-04-23  Xan Lopez  <xlopez@igalia.com>

        Try to fix the GTK+ bots.

        * GNUmakefile.am:

2010-04-22  Kenneth Rohde Christiansen  <kenneth@webkit.org>

        Reviewed by Laszlo Gombos.

        Rename window.media to window.styleMedia
        https://bugs.webkit.org/show_bug.cgi?id=36187

        Rename the interface Media to StyleMedia as required by the
        new CSSOM View spec.

        * Android.derived.jscbindings.mk:
        * Android.derived.v8bindings.mk:
        * GNUmakefile.am:
        * WebCore.gypi:
        * WebCore.pri:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * css/Media.cpp: Removed.
        * css/Media.h: Removed.
        * css/Media.idl: Removed.
        * css/StyleMedia.cpp: Added.
        (WebCore::StyleMedia::StyleMedia):
        (WebCore::StyleMedia::type):
        (WebCore::StyleMedia::matchMedium):
        * css/StyleMedia.h: Added.
        (WebCore::StyleMedia::create):
        (WebCore::StyleMedia::disconnectFrame):
        * css/StyleMedia.idl: Added.
        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::styleMedia):
        * page/DOMWindow.h:
        (WebCore::DOMWindow::optionalMedia):
        * page/DOMWindow.idl:

2010-04-23  Yury Semikhatsky  <yurys@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: provide JSC implementation for scopeType method on
        call frame and use same jsvascript code for JSC and v8 when collecting
        scope chain data.

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

        * bindings/js/JSInjectedScriptHostCustom.cpp:
        (WebCore::JSInjectedScriptHost::currentCallFrame):
        * bindings/js/JSJavaScriptCallFrameCustom.cpp:
        (WebCore::JSJavaScriptCallFrame::scopeType):
        * bindings/v8/custom/V8InjectedScriptHostCustom.cpp:
        (WebCore::V8InjectedScriptHost::currentCallFrameCallback):
        * inspector/InjectedScriptHost.idl:
        * inspector/front-end/InjectedScript.js:
        (injectedScriptConstructor.):

2010-04-23  Alexander Pavlov  <apavlov@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: Audits (Image Dimensions): full image URLs are prefixed with the hosting page name
        https://bugs.webkit.org/show_bug.cgi?id=37988

        * inspector/front-end/AuditRules.js:
        (WebInspector.AuditRules.ImageDimensionsRule.prototype.doRun):

2010-04-23  Ilya Tikhonovsky  <loislo@chromium.org>

        Reviewed by Yury Semikhatsky.

        WebInspector: Flaky Inspector tests.
        https://bugs.webkit.org/show_bug.cgi?id=36217

        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::didCommitLoad):

2010-04-23  Yaar Schnitman  <yaar@chromium.org>

        Reviewed by Adam Barth.

        Auto-generate WebGLRenderingContext overloads in V8
        https://bugs.webkit.org/show_bug.cgi?id=37818

        * bindings/v8/custom/V8WebGLRenderingContextCustom.cpp:
        * html/canvas/WebGLRenderingContext.cpp: Added missing overloads for the following:.
        (WebCore::WebGLRenderingContext::texImage2D)
        (WebCore::WebGLRenderingContext::texSubImage2D)
        * html/canvas/WebGLRenderingContext.h: Added missing overloads.
        * html/canvas/WebGLRenderingContext.idl: IDL definition of overloads.

2010-04-23  Jeff Schiller  <codedread@gmail.com>

        Reviewed by Nikolas Zimmermann.

        Display tooltips when hovering over SVG elements, Bug 16854
        https://bugs.webkit.org/show_bug.cgi?id=16854

        Manual test added for verifying tooltips.

        * manual-tests/svg-tooltip.svg: Added.
        * svg/SVGAElement.cpp:
        (WebCore::SVGAElement::title): xlink:title takes precedence, otherwise SVGStyledElement::title() is used
        * svg/SVGStyledElement.cpp:
        (WebCore::SVGStyledElement::title): checks for a shadow parent and uses that title, otherwise uses the content's title
        * svg/SVGStyledElement.h: add title() method declaration

2010-04-23  David Kilzer  <ddkilzer@apple.com>

        <http://webkit.org/b/38032> No need to content sniff 304 responses
        <rdar://problem/7891726>

        Reviewed by Brady Eidson.

        * platform/network/mac/ResourceHandleMac.mm:
        (-[WebCoreResourceHandleAsDelegate connection:didReceiveResponse:]):
        No need to adjust the MIME type on 304 responses since they're
        only used to determine if the resource needs to be refetched.

2010-04-23  David Kilzer  <ddkilzer@apple.com>

        <http://webkit.org/b/38030> Add WebCore::dumpTextEncodingNameMap() to dump text encoding map on debug builds

        Reviewed by Alexey Proskuryakov.

        * platform/text/TextEncodingRegistry.cpp:
        (WebCore::dumpTextEncodingNameMap): Added.
        * platform/text/TextEncodingRegistry.h:
        (WebCore::dumpTextEncodingNameMap): Added declaration.

2010-04-22  Tony Chang  <tony@chromium.org>

        Reviewed by Dan Bernstein.

        Crash in WebCore::TextIterator::handleTextNode() encountered in Google rich-text products
        https://bugs.webkit.org/show_bug.cgi?id=37950

        Test: editing/text-iterator/rtl-selection-crash.html

        * editing/TextIterator.cpp:
        (WebCore::TextIterator::handleTextNode):

2010-04-22  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Dan Bernstein and Beth Dakin.

        Links around blocks (e.g. divs) results in too many VoiceOver call outs
        https://bugs.webkit.org/show_bug.cgi?id=37079
        <rdar://problem/7234118>

        The basic change is to modify the AccessibilityRenderObject tree
        traversal methods to account for inline continuations in the
        render tree and make the accessibility tree look as if
        continuations didn't exist - the same as if CSS blocks could just
        sit in CSS inlines. This is slightly tricky code but creates a
        much saner accessibility tree.
        
        Tests: accessibility/image-link-inline-cont.html
               accessibility/image-link.html
               accessibility/inline-continuations.html

        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::isInlineWithContinuation): Helper function for traversal functions to use in accounting for continuations.
        (WebCore::firstChildInContinuation): ditto
        (WebCore::firstChildConsideringContinuation): ditto
        (WebCore::lastChildConsideringContinuation): ditto
        (WebCore::startOfContinuations): ditto
        (WebCore::endOfContinuations): ditto
        (WebCore::childBeforeConsideringContinuations): ditto
        (WebCore::firstChildIsInlineContinuation): ditto
        (WebCore::lastChildHasContinuation): ditto
        (WebCore::AccessibilityRenderObject::firstChild): Account for inline continuations.
        (WebCore::AccessibilityRenderObject::lastChild): ditto
        (WebCore::AccessibilityRenderObject::previousSibling): Account for inline continuations
        and their anonymous block parents.
        (WebCore::AccessibilityRenderObject::nextSibling): ditto
        (WebCore::AccessibilityRenderObject::parentObjectIfExists): Account for inline continuations.
        (WebCore::AccessibilityRenderObject::parentObject): Account for inline continuations.
        * rendering/RenderInline.h: Make RenderInline::inlineContinuation public.

2010-04-22  Shinichiro Hamaji  <hamaji@chromium.org>

        Reviewed by Darin Adler.

        REGRESSION: TextIterator may use freed memory
        https://bugs.webkit.org/show_bug.cgi?id=37973

        Added TextIterator::m_text to hold the returned String.

        No new tests because there are no behavior change, but
        copy-backslash-with-euc.html on chromium-win should test this.

        * editing/TextIterator.cpp:
        (WebCore::TextIterator::emitText):
        * editing/TextIterator.h:

2010-04-22  Michael Forney  <mforney@mforney.org>

        Reviewed by Adam Barth.

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

        Only include JSDatabase.h and JSDatabaseCallback.h when database is
        enabled. This partially fixes building with --disable-database.

        * bindings/js/JSDOMWindowCustom.cpp: Add a check for database around
        database-related headers.

2010-04-22  Ray Rischpater  <Raymond.Rischpater@Nokia.com>

        Reviewed by Darin Adler.

        In HTMLInputElement.cpp, shouldUseInputMethod does not return true for
        some text input types (TELEPHONE, NUMBER, URL, and EMAIL). Addressed
        this by changing shouldUseInputMethod to use internal methods to 
        check that the field is a text field that isn't a password field. 

        No new tests.

        Fixes <https://bugs.webkit.org/show_bug.cgi?id=37719>

        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::shouldUseInputMethod):

2010-04-22  Yaar Schnitman  <yaar@chromium.org>

        Reviewed by Adam Barth.

        Integrate v8 testing utility with webkit tests
        https://bugs.webkit.org/show_bug.cgi?id=37731

        * bindings/v8/test/run_tests.py: Removed.

2010-04-22  Zhenyao Mo  <zmo@google.com>

        Reviewed by Darin Fisher.

        Add isGLES2Compliant to GraphicsContext3D
        https://bugs.webkit.org/show_bug.cgi?id=37872

        * html/canvas/WebGLRenderingContext.cpp: Add isGLES2Compliant().
        (WebCore::WebGLRenderingContext::isGLES2Compliant):
        * html/canvas/WebGLRenderingContext.h: Ditto.
        * platform/graphics/GraphicsContext3D.h: Ditto.
        * platform/graphics/mac/GraphicsContext3DMac.cpp: Ditto.
        (WebCore::GraphicsContext3D::isGLES2Compliant):

2010-04-22  Fumitoshi Ukai  <ukai@chromium.org>

        Reviewed by Adam Barth.

        MD5 is required for WebSocket new protocol implementation
        https://bugs.webkit.org/show_bug.cgi?id=37913

        * ForwardingHeaders/wtf/MD5.h: Added.

2010-04-22  Alexey Proskuryakov  <ap@apple.com>

        Reviewed by Darin Adler.

        https://bugs.webkit.org/show_bug.cgi?id=38012
        REGRESSION: Ctrl- and Option- shortcuts get wrong keyCode on non-QWERTY keyboard

        * platform/mac/KeyEventMac.mm: (WebCore::windowsKeyCodeForKeyEvent): Also look at unmodified
        characters, to avoid falling through to virtual key code lookup for Roman characters.

2010-04-22  Jocelyn Turcotte  <jocelyn.turcotte@nokia.com>

        Reviewed by Darin Adler.

        Fix the MSVC 64bit build.
        https://bugs.webkit.org/show_bug.cgi?id=37980

        * platform/text/TextStream.cpp:
        * platform/text/TextStream.h:
        * plugins/win/PluginViewWin.cpp:
        (WebCore::PluginView::platformStart):

2010-04-22  Dave Moore  <davemoore@chromium.org>

        Reviewed by Dimitri Glazkov.

        Added notification when the favicons for a page are changed
        from a script.
        The Document object will notify the frame loader, which will
        notify the client. Implementations of FrameLoaderClient will
        have to add one method; dispatchDidChangeIcons().

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

        Test: fast/dom/icon-url-property.html

        * dom/Document.cpp:
        (WebCore::Document::setIconURL):
        * loader/DocumentLoader.cpp:
        (WebCore::DocumentLoader::setIconURL):
        * loader/DocumentLoader.h:
        (WebCore::DocumentLoader::iconURL):
        * loader/EmptyClients.h:
        (WebCore::EmptyFrameLoaderClient::dispatchDidChangeIcons):
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::setIconURL):
        (WebCore::FrameLoader::didChangeIcons):
        * loader/FrameLoader.h:
        * loader/FrameLoaderClient.h:

2010-04-22  Xan Lopez  <xlopez@igalia.com>

        Reviewed by Gustavo Noronha.

        [GTK] GObject DOM bindings
        https://bugs.webkit.org/show_bug.cgi?id=33590

        Extend the bindings to cover most of Document.idl

        * GNUmakefile.am:
        * bindings/gobject/WebKitDOMBinding.cpp:
        (WebKit::createWrapper):
        (WebKit::kit):
        * bindings/gobject/WebKitDOMBinding.h:
        * bindings/gobject/WebKitHTMLElementWrapperFactory.cpp: Added.
        (WebKit::createAnchorWrapper):
        (WebKit::createAppletWrapper):
        (WebKit::createAreaWrapper):
        (WebKit::createBaseWrapper):
        (WebKit::createBaseFontWrapper):
        (WebKit::createBlockquoteWrapper):
        (WebKit::createBodyWrapper):
        (WebKit::createBRWrapper):
        (WebKit::createButtonWrapper):
        (WebKit::createCanvasWrapper):
        (WebKit::createTableCaptionWrapper):
        (WebKit::createTableColWrapper):
        (WebKit::createModWrapper):
        (WebKit::createDirectoryWrapper):
        (WebKit::createDivWrapper):
        (WebKit::createDListWrapper):
        (WebKit::createEmbedWrapper):
        (WebKit::createFieldSetWrapper):
        (WebKit::createFontWrapper):
        (WebKit::createFormWrapper):
        (WebKit::createFrameWrapper):
        (WebKit::createFrameSetWrapper):
        (WebKit::createHeadingWrapper):
        (WebKit::createHeadWrapper):
        (WebKit::createHRWrapper):
        (WebKit::createHtmlWrapper):
        (WebKit::createIFrameWrapper):
        (WebKit::createImageWrapper):
        (WebKit::createInputWrapper):
        (WebKit::createIsIndexWrapper):
        (WebKit::createLabelWrapper):
        (WebKit::createLegendWrapper):
        (WebKit::createLIWrapper):
        (WebKit::createLinkWrapper):
        (WebKit::createMapWrapper):
        (WebKit::createMarqueeWrapper):
        (WebKit::createMenuWrapper):
        (WebKit::createMetaWrapper):
        (WebKit::createObjectWrapper):
        (WebKit::createOListWrapper):
        (WebKit::createOptGroupWrapper):
        (WebKit::createOptionWrapper):
        (WebKit::createParagraphWrapper):
        (WebKit::createParamWrapper):
        (WebKit::createPreWrapper):
        (WebKit::createQuoteWrapper):
        (WebKit::createScriptWrapper):
        (WebKit::createSelectWrapper):
        (WebKit::createStyleWrapper):
        (WebKit::createTableWrapper):
        (WebKit::createTableSectionWrapper):
        (WebKit::createTableCellWrapper):
        (WebKit::createTextAreaWrapper):
        (WebKit::createTitleWrapper):
        (WebKit::createTableRowWrapper):
        (WebKit::createUListWrapper):
        (WebKit::createHTMLElementWrapper):
        * bindings/gobject/WebKitHTMLElementWrapperFactory.h: Added.
        * bindings/scripts/CodeGeneratorGObject.pm:
        * dom/Node.idl:

2010-04-22  Eric Carlson  <eric.carlson@apple.com>

        Reviewed by Simon Fraser.

        Do not pause movie when readyState drops below HAVE_FUTURE_DATA
        https://bugs.webkit.org/show_bug.cgi?id=37991
        <rdar://problem/7893937>

        No new tests, we don't have infrastructure in DRT to test with streamed
        movies.

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::HTMLMediaElement): Initialize m_readyStateMaximum.
        (WebCore::HTMLMediaElement::prepareForLoad): Reset m_readyStateMaximum.
        (WebCore::HTMLMediaElement::setReadyState): Maintain m_readyStateMaximum.
        (WebCore::HTMLMediaElement::potentiallyPlaying): Also return true if the readyState was
        previously >= HAVE_FUTURE_DATA. 
        * html/HTMLMediaElement.h:

2010-04-22  Zhenyao Mo  <zmo@google.com>

        Reviewed by Dimitri Glazkov.

        Regression: framebufferRenderbuffer crashes with null renderBuffer
        https://bugs.webkit.org/show_bug.cgi?id=37963

        * html/canvas/WebGLRenderingContext.cpp:
        (WebCore::WebGLRenderingContext::framebufferRenderbuffer): Dealing with null renderbuffer input.

2010-04-22  Zhenyao Mo  <zmo@google.com>

        Reviewed by Dimitri Glazkov.

        Emulate GL_IMPLEMENTATION_COLOR_READ_FORMAT/TYPE for glGet
        https://bugs.webkit.org/show_bug.cgi?id=37281

        * html/canvas/WebGLRenderingContext.cpp:
        (WebCore::WebGLRenderingContext::WebGLRenderingContext): Remove error check because two enums are supported now. 
        (WebCore::WebGLRenderingContext::getParameter): Add two enums.
        (WebCore::WebGLRenderingContext::readPixels): Fix a tiny bug.
        * platform/graphics/mac/GraphicsContext3DMac.cpp:
        (WebCore::GraphicsContext3D::getIntegerv): Emulate two enums.

2010-04-22  Diego Escalante Urrelo  <descalante@igalia.com>

        Reviewed by Xan Lopez.

        [GTK] Mute/unmute button on <video> elements are backwards
        https://bugs.webkit.org/show_bug.cgi?id=33967

        Fix mute/unmute buttons icons-action relation and explain why their
        variable names and corresponding icons seem to be misleading but are
        actually right. Original patch by Mike Hommey.

        * platform/gtk/RenderThemeGtk.cpp:
        (WebCore::RenderThemeGtk::initMediaStyling):

2010-04-22  Gustavo Sverzut Barbieri  <barbieri@profusion.mobi>

        Reviewed by Eric Seidel.

        Fix build if NPAPI support is disabled
        https://bugs.webkit.org/show_bug.cgi?id=36621

        No new tests, this is a build fix.
        Re-submit r58043 with fix for EFL.

        * plugins/PluginViewNone.cpp:

2010-04-22  Diego Escalante Urrelo  <descalante@igalia.com>

        Reviewed by Xan Lopez.

        [Gtk] Evaluate and create tests for all the AtkRole's implemented by
        WebKitGtk
        https://bugs.webkit.org/show_bug.cgi?id=34449

        Implement ATK_ROLE_COMBO_BOX.

        * accessibility/gtk/AccessibilityObjectAtk.cpp:
        (WebCore::AccessibilityObject::accessibilityPlatformIncludesObject):
        * accessibility/gtk/AccessibilityObjectWrapperAtk.cpp:
        (atkRole):

2010-04-22  Nikolas Zimmermann  <nzimmermann@rim.com>

        Reviewed by Dirk Schulze.

        SVGPaintServer needs to be converted to the new RenderSVGResource* system
        https://bugs.webkit.org/show_bug.cgi?id=37986

        No functional changes, just move the SVGPaintServer* classes from svg/graphics/ to rendering/, the new location for the RenderSVGResource* classes.
        This is a preparation for the real patch which follows soon.

        * Android.mk: Rename files and move to the right location.
        * GNUmakefile.am: Ditto.
        * WebCore.gypi: Ditto.
        * WebCore.pro: Ditto.
        * WebCore.vcproj/WebCore.vcproj: Ditto.
        * WebCore.xcodeproj/project.pbxproj: Ditto.
        * rendering/RenderSVGResource.cpp: Copied from svg/graphics/SVGPaintServer.cpp.
        * rendering/RenderSVGResourceGradient.cpp: Copied from svg/graphics/SVGPaintServerGradient.cpp.
        * rendering/RenderSVGResourceGradient.h: Copied from svg/graphics/SVGPaintServerGradient.h.
        * rendering/RenderSVGResourceLinearGradient.cpp: Copied from svg/graphics/SVGPaintServerLinearGradient.cpp.
        * rendering/RenderSVGResourceLinearGradient.h: Copied from svg/graphics/SVGPaintServerLinearGradient.h.
        * rendering/RenderSVGResourcePattern.cpp: Copied from svg/graphics/SVGPaintServerPattern.cpp.
        * rendering/RenderSVGResourcePattern.h: Copied from svg/graphics/SVGPaintServerPattern.h.
        * rendering/RenderSVGResourceRadialGradient.cpp: Copied from svg/graphics/SVGPaintServerRadialGradient.cpp.
        * rendering/RenderSVGResourceRadialGradient.h: Copied from svg/graphics/SVGPaintServerRadialGradient.h.
        * rendering/RenderSVGResourceSolidColor.cpp: Copied from svg/graphics/SVGPaintServerSolid.cpp.
        * rendering/RenderSVGResourceSolidColor.h: Copied from svg/graphics/SVGPaintServerSolid.h.
        * rendering/SVGRenderTreeAsText.cpp: Change include file names.
        * svg/SVGFont.cpp: Ditto.
        * svg/SVGGradientElement.cpp: Ditto.
        * svg/SVGGradientElement.h: Ditto.
        * svg/SVGLinearGradientElement.cpp: Ditto.
        * svg/SVGPatternElement.cpp: Ditto.
        * svg/SVGPatternElement.h: Ditto.
        * svg/SVGRadialGradientElement.cpp: Ditto.
        * svg/graphics/SVGPaintServer.cpp: Removed.
        * svg/graphics/SVGPaintServerGradient.cpp: Removed.
        * svg/graphics/SVGPaintServerGradient.h: Removed.
        * svg/graphics/SVGPaintServerLinearGradient.cpp: Removed.
        * svg/graphics/SVGPaintServerLinearGradient.h: Removed.
        * svg/graphics/SVGPaintServerPattern.cpp: Removed.
        * svg/graphics/SVGPaintServerPattern.h: Removed.
        * svg/graphics/SVGPaintServerRadialGradient.cpp: Removed.
        * svg/graphics/SVGPaintServerRadialGradient.h: Removed.
        * svg/graphics/SVGPaintServerSolid.cpp: Removed.
        * svg/graphics/SVGPaintServerSolid.h: Removed.
        * svg/graphics/SVGResourceListener.h: Removed.

2010-04-22  Jocelyn Turcotte  <jocelyn.turcotte@nokia.com>

        Reviewed by Simon Hausmann.

        [Qt] Hide the OpenGL and QtMultimedia dependencies from syncqt.

        This prevents the dependent headers from being included by
        qt/include/QtWebKit/QtWebKit

        * WebCore.pro:

2010-04-22  Gustavo Sverzut Barbieri  <barbieri@profusion.mobi>

        Reviewed by Adam Roben.

        EFL does not support PluginDatabase yet.
        http://webkit.org/b/37854

        No behavior changes, so no new tests were added.

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::defaultObjectContentType):

2010-04-22  Ilya Tikhonovsky  <loislo@chromium.org>

        Reviewed by Yury Semikhatsky.

        Web Inspector: Timeline scrolling speed is slow if it has more than 1k timeline marks.
        https://bugs.webkit.org/show_bug.cgi?id=37924

        * inspector/front-end/TimelineGrid.js:
        (WebInspector.TimelineGrid.prototype.updateDividers):
        (WebInspector.TimelineGrid.prototype.addEventDividers):
        * inspector/front-end/TimelineOverviewPane.js:
        (WebInspector.TimelineOverviewPane.prototype.updateEventDividers):
        * inspector/front-end/TimelinePanel.js:
        (WebInspector.TimelinePanel.prototype._updateEventDividers):
        (WebInspector.TimelinePanel.prototype._refresh):

2010-04-22  Kenneth Rohde Christiansen  <kenneth@webkit.org>

        Reviewed by Simon Fraser.

        Rename window.media to window.styleMedia
        https://bugs.webkit.org/show_bug.cgi?id=36187

        It has been defined that the AbstractView media extension
        defined in the CSSOM View spec should be renamed to styleMedia.
        This patch does that and updates the current layout tests
        making use of it.

        * page/AbstractView.idl:
        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::styleMedia):
        * page/DOMWindow.h:
        * page/DOMWindow.idl:

2010-04-22  Anton Muhin  <antonm@chromium.org>

        Reviewed by Adam Barth.

        [v8] Do not pass empty handle into SetHiddenValue which would crash.
        https://bugs.webkit.org/show_bug.cgi?id=37801

        * bindings/v8/V8AbstractEventListener.cpp:
        (WebCore::V8AbstractEventListener::handleEvent): add couple of asserts to check for unexpected paths
        (WebCore::V8AbstractEventListener::invokeEventHandler): bail out of jsEvent is empty handle

2010-04-22  Stephan Aßmus  <superstippi@gmx.de>

        Reviewed by David Levin.

        [Haiku] Implement ImageBuffer support
        https://bugs.webkit.org/show_bug.cgi?id=35288

        Covered by existing tests.

        Complete implementation of ImageBuffer for Haiku. Uses StillImage
        class to export a WebCore::Image and associated GraphicsContext
        to perform arbitrary drawing in the offscreen BBitmap buffer.

        * platform/graphics/haiku/ImageBufferData.h:
        * platform/graphics/haiku/ImageBufferHaiku.cpp,
        (WebCore::ImageBufferData::ImageBufferData),
        (WebCore::ImageBufferData::~ImageBufferData),
        (WebCore::ImageBuffer::ImageBuffer),
        (WebCore::ImageBuffer::~ImageBuffer),
        (WebCore::ImageBuffer::context),
        (WebCore::ImageBuffer::image):
            Implementation uses offscreen BBitmap and BView, wraps StillImage
            around those to provide WebCore::Image interface.
        (WebCore::ImageBuffer::platformTransformColorSpace):
        (WebCore::convertFromData):
            Method just performs BGRA <-> RGBA conversion.
        (WebCore::convertFromInternalData):
            Method just performs BGRA <-> RGBA conversion and handles
            pre-multiplying the color values if requested.
        (WebCore::convertToInternalData):
            Method just performs BGRA <-> RGBA conversion and handles
            de.multiplying the color values if requested.
        (WebCore::getImageData):
            Common code for the next two methods.
        (WebCore::ImageBuffer::getUnmultipliedImageData),
        (WebCore::ImageBuffer::getPremultipliedImageData):
            Implemented.
        (WebCore::putImageData):
            Common code for the next two methods.
        (WebCore::ImageBuffer::putUnmultipliedImageData),
        (WebCore::ImageBuffer::putPremultipliedImageData):
            Implemented.
        (WebCore::ImageBuffer::toDataURL):
            Uses Haiku "Translation Kit" to convert image data to data
            of the requested mime type.

2010-04-22  Adam Barth  <abarth@webkit.org>

        Unreviewed, rolling out r58069.
        http://trac.webkit.org/changeset/58069
        https://bugs.webkit.org/show_bug.cgi?id=27751

        Broke compile on Windows.

        * WebCore.base.exp:
        * editing/EditorCommand.cpp:
        (WebCore::supportedPaste):
        (WebCore::createCommandMap):
        * page/Settings.cpp:
        (WebCore::Settings::Settings):
        * page/Settings.h:

2010-04-22  Abhishek Arya  <inferno@chromium.org>

        Reviewed by Adam Barth.

        Add support for controlling clipboard access from javascript.
        Clipboard access from javascript is disabled by default.
        https://bugs.webkit.org/show_bug.cgi?id=27751

        Test: editing/execCommand/clipboard-access.html

        * WebCore.base.exp:
        * editing/EditorCommand.cpp:
        (WebCore::supportedCopyCut):
        (WebCore::supportedPaste):
        (WebCore::createCommandMap):
        * page/Settings.cpp:
        (WebCore::Settings::Settings):
        (WebCore::Settings::setJavaScriptCanAccessClipboard):
        * page/Settings.h:
        (WebCore::Settings::javaScriptCanAccessClipboard):

2010-04-22  Stephan Aßmus  <superstippi@gmx.de>

        Reviewed by David Levin.

        [Haiku] Improve SimpleFontDataHaiku
        https://bugs.webkit.org/show_bug.cgi?id=37411

        Covered by existing tests.

        * platform/graphics/haiku/SimpleFontDataHaiku.cpp:
            - Cleaned up includes
            - Removed prototype "charUnicodeToUTF8HACK"
        (WebCore::SimpleFontData::platformInit):
            - Use const BFont pointer
        (WebCore::SimpleFontData::smallCapsFontData):
            - "fontPlatformData" was leaked. It is only
              used as the key for the font cache lookup.
        (WebCore::SimpleFontData::platformMetricsForGlyph):
            - Use existing WebCore encoding infrastructure
              instead of adding a hack for Haiku. 

2010-04-21  Steve Block  <steveblock@google.com>

        Reviewed by Kenneth Rohde Christiansen.

        Replace Geolocation::suspend()/resume() which are required by Android.
        https://bugs.webkit.org/show_bug.cgi?id=37942

        These methods were removed in Bug 36255.

        Build fix only, no new tests.

        * page/Geolocation.cpp:
        (WebCore::Geolocation::suspend):
        (WebCore::Geolocation::resume):
        * page/Geolocation.h:

2010-04-21  Ray Rischpater  <Raymond.Rischpater@Nokia.com>

        In HTMLInputElement.cpp there are numerous style
        violations.

        This patch includes style changes to fix existing style
        deviations in this file.

        Rubber stamped by Darin Adler.

        Fixes <https://bugs.webkit.org/show_bug.cgi?id=37881>

        * html/HTMLInputElement.cpp:

2010-04-21  Gustavo Sverzut Barbieri  <barbieri@profusion.mobi>

        Reviewed by Adam Roben.

        Add missing EFL WebCore file.
        http://webkit.org/b/37854

        No behavior changes, so no new tests were added.

        * bindings/js/ScriptControllerEfl.cpp: Added.
        (WebCore::ScriptController::createScriptInstanceForWidget):

2010-04-21  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Dan Bernstein.

        Printing Core Animation-based plug-ins is broken
        https://bugs.webkit.org/show_bug.cgi?id=37967

        When we do a "flattening" paint because of printing, we need to stash
        the flattening flag in the FrameView's m_paintBehavior, because
        WebBaseNetscapePluginView needs to find it there to decide whether
        to grab a bitmap for printing, for CA plug-ins.

        * page/FrameView.cpp:
        (WebCore::FrameView::paintContents):

2010-04-21  François Sausset  <sausset@gmail.com>

        Reviewed by Kenneth Rohde Christiansen.

        Fix to take into account a change made in "StringImpl".
        https://bugs.webkit.org/show_bug.cgi?id=37763

        * mathml/RenderMathMLOperator.cpp:
        (WebCore::RenderMathMLOperator::updateFromElement):

2010-04-21  Andy Estes  <aestes@apple.com>

        Reviewed by Darin Adler.

        Create a template for creating reference-counted Windows GDI handles.
        Refactor RefCountedHFONT to use this template.

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

        No change in behavior.

        * WebCore.vcproj/WebCore.vcproj: Add RefCountedHFONT.h
        * platform/graphics/cairo/FontPlatformData.h:
        (WebCore::FontPlatformData::hfont): Refactor to return m_hfont->handle() instead of m_hfont->hfont().
        * platform/graphics/cg/FontPlatformData.h:
        (WebCore::FontPlatformData::hfont): Same.
        * platform/graphics/win/FontPlatformDataCGWin.cpp:
        (WebCore::FontPlatformData::FontPlatformData): Instantiate m_hfont with a RefCountedGDIHandle<HFONT>.
        * platform/graphics/win/FontPlatformDataWin.cpp:
        (WebCore::FontPlatformData::FontPlatformData): Same.
        * platform/graphics/win/RefCountedGDIHandle.h: Added. Interface is identical to RefCountedHFONT with exception of renaming hfont() to handle().
        (WebCore::RefCountedGDIHandle::create):
        (WebCore::RefCountedGDIHandle::createDeleted):
        (WebCore::RefCountedGDIHandle::~RefCountedGDIHandle):
        (WebCore::RefCountedGDIHandle::handle): Return the GDI handle.
        (WebCore::RefCountedGDIHandle::hash):
        (WebCore::RefCountedGDIHandle::RefCountedGDIHandle):
        * platform/graphics/win/RefCountedHFONT.h: Removed.

2010-04-21  Laszlo Gombos  <laszlo.1.gombos@nokia.com>

        Reviewed by Darin Adler.

        Fix build if NPAPI support is disabled
        https://bugs.webkit.org/show_bug.cgi?id=36621

        No new tests, this is a build fix.
        Re-submit r56585 with fix for Chromium.

        * plugins/PluginView.cpp: Guard getValueStatic() with
        NETSCAPE_PLUGIN_API
        (WebCore::PluginView::getValue):
        * plugins/PluginView.h: Guard getValue() with NETSCAPE_PLUGIN_API
        * plugins/PluginViewNone.cpp: Guard platformGetValue() and
        platformGetValueStatic with NETSCAPE_PLUGIN_API;
        Guard privateBrowsingStateChanged() and setJavaScriptPaused() with
        PLATFORM(MAC) or PLATFORM(CHROMIUM)

2010-04-21  David Yonge-Mallo  <davinci@chromium.org>

        Reviewed by Dan Bernstein.

        ZWNJ - Display non-printing, invisible character
        https://bugs.webkit.org/show_bug.cgi?id=16131

        Fix the (non)display of glyphs for ZWJ and ZWNJ in simple font code path.

        Tests: fast/text/format-control.html
               fast/text/zero-width-characters.html

        * platform/graphics/Font.h:
        (WebCore::Font::operator!=):
        (WebCore::Font::treatAsZeroWidthSpace): treat ZWNJ and ZWJ as ZWSP.
        * platform/graphics/GlyphPageTreeNode.cpp:
        (WebCore::GlyphPageTreeNode::initializePage): added ZWNJ and ZWJ.
        * platform/text/CharacterNames.h: added ZWNJ and ZWJ.

2010-04-21  Charles Wei  <charles.wei@torchmobile.com.cn>

        Reviewed by George Staikos.

        Fix webkit build problem when xhtmlmp enabled, which is introduced by revision 57927, for 
        bug fix of 37175 , which seperates DocumentWriter from FrameLoader
        https://bugs.webkit.org/show_bug.cgi?id=37915

        No new tests since this only fixes the build problem.

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

2010-04-21  Shinichiro Hamaji  <hamaji@chromium.org>

        Reviewed by Darin Adler.

        Call sites of TextIterator constructor are difficult to read
        https://bugs.webkit.org/show_bug.cgi?id=37909

        Now we use enum parameters instead of boolean parameters and
        boolean version of constructors are eliminated.

        This change also changes the names of boolean members so they are
        now third person singular.

        No new tests because this is just a refactoring.

        * WebCore.base.exp:
        * editing/TextIterator.cpp:
        (WebCore::TextIterator::TextIterator):
        (WebCore::TextIterator::advance):
        (WebCore::TextIterator::handleReplacedElement):
        (WebCore::TextIterator::shouldRepresentNodeOffsetZero):
        (WebCore::TextIterator::shouldEmitSpaceBeforeAndAfterNode):
        (WebCore::TextIterator::handleNonTextNode):
        (WebCore::TextIterator::exitNode):
        (WebCore::TextIterator::emitCharacter):
        (WebCore::TextIterator::emitText):
        (WebCore::CharacterIterator::CharacterIterator):
        (WebCore::TextIterator::rangeLength):
        (WebCore::TextIterator::rangeFromLocationAndLength):
        (WebCore::findPlainText):
        * editing/TextIterator.h:
        (WebCore::):
        * editing/VisibleSelection.cpp:
        (WebCore::VisibleSelection::appendTrailingWhitespace):
        * editing/visible_units.cpp:
        (WebCore::nextBoundary):

2010-04-21  Jesus Sanchez-Palencia  <jesus@webkit.org>

        Reviewed by Kenneth Rohde Christiansen.

        Add PageClientQt files.

        [Qt] PageClientQt specific implementation for QWidget
        https://bugs.webkit.org/show_bug.cgi?id=37858

        * WebCore.pro:

2010-04-21  Diego Escalante Urrelo  <descalante@igalia.com>

        Reviewed by Xan Lopez.

        [Gtk] Evaluate and create tests for all the AtkRole's implemented by
        WebKitGtk
        https://bugs.webkit.org/show_bug.cgi?id=34449

        Implement ATK_ROLE_SEPARATOR.

        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::determineAccessibilityRole):
        * accessibility/gtk/AccessibilityObjectAtk.cpp:
        (WebCore::AccessibilityObject::accessibilityPlatformIncludesObject):

2010-04-21  David Leong  <david.leong@nokia.com>

        Reviewed by Simon Hausmann.

        [Qt] Symbian apps crash on exit due to a bad qObject_cast.

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

        Added check for NULL to avoid the crash. Reworked to fix memory leak
           
        * plugins/symbian/PluginViewSymbian.cpp:
        (WebCore::PluginView::platformDestroy):

2009-04-21  Chris Fleizach  <cfleizach@apple.com>

        Reviewed by Alexey Proskuryakov.

        aria-liveregion-notifications.html fails on leopard release bot
        https://bugs.webkit.org/show_bug.cgi?id=37112

        Change the method that DRT uses to monitor AX notifications so that its robust
        by just sending out NSNotification that can be listened to by anyone, instead
        of keeping a static function pointer around.
   
        This change is aimed to avoid flakiness seen in DRT when the notification handlers
        are not being called at the appropriate time.

        Tests: platform/mac/accessibility/aria-liveregions-addedelement.html
               platform/mac/accessibility/aria-liveregions-changedalt.html
               platform/mac/accessibility/aria-liveregions-changedtext.html
               platform/mac/accessibility/aria-liveregions-removedelement.html

        * accessibility/mac/AccessibilityObjectWrapper.h:
        * accessibility/mac/AccessibilityObjectWrapper.mm:
        (-[AccessibilityObjectWrapper accessibilitySetShouldRepostNotifications:]):
        (-[AccessibilityObjectWrapper accessibilityPostedNotification:]):

2010-04-21  Gavin Barraclough  <barraclough@apple.com>

        Reviewed by NOBODY (Leopard build fix).
        Remove old exports.

        * WebCore.base.exp:

2010-04-21  Gavin Barraclough  <barraclough@apple.com>

        Reviewed by Darin Adler.

        Bug 37949 - Do no copy strings into a shared buffer when converting UStrings to Strings
        UString and String now have the same internal representation; Just re-wrap the internal impl.

        * bindings/js/JSDOMBinding.cpp:
        (WebCore::jsStringSlowCase):
        * bindings/js/JSDOMBinding.h:
        (WebCore::ustringToString):
        (WebCore::stringToUString):
        (WebCore::identifierToString):
        (WebCore::ustringToAtomicString):
        (WebCore::identifierToAtomicString):

2010-04-21  Mark Rowe  <mrowe@apple.com>

        Reviewed by Eric Carlson.

        <rdar://problem/7313430> Many crashes in Safari inside Flip4Mac below -[NSAlert didEndAlert:returnCode:contextInfo:]

        A manual test case is required here as the Flip4Mac plug-in displays an alert, and some manual tweaking of the plug-in's
        preference file on disk is often required to reproduce the bug.

        * manual-tests/plugins/flip4mac-update-alert-over-navigation.html: Added.

2010-04-21  Mark Rowe  <mrowe@apple.com>

        Reviewed by Maciej Stachowiak.

        <rdar://problem/7856151> REGRESSION: NPP_Destroy is not called when page navigates when plug-in is displaying modal dialog

        This is a manual test case as I was not able to construct an automated test that reproduced the same issue without displaying
        a modal dialog on-screen.

        * manual-tests/plugins/timeout-dialog-displayed-over-navigation.html: Added.
        * manual-tests/plugins/timeout-dialog-displayed-over-navigation.swf: Added.

2010-04-21  Sam Weinig  <sam@webkit.org>

        Reviewed by Geoffrey Garen.

        Fix for https://bugs.webkit.org/show_bug.cgi?id=37937
        Wean JavaScriptCore off calls to isMainThread()

        No change in behavior.

        * bindings/js/JSDOMWindowBase.cpp:
        (WebCore::JSDOMWindowBase::commonJSGlobalData):
        Explicitly set a large stack type for the common JSGlobalData and
        set the currently running thread as the exclusive thread for its 
        execution.

        * bindings/js/WorkerScriptController.cpp:
        (WebCore::WorkerScriptController::WorkerScriptController):
        Explicitly set a small stack type for the workers JSGlobalData. 

2010-04-21  Gavin Barraclough  <barraclough@apple.com>

        Reviewed by NOBODY (Qt build fix).

        * WebCore.gypi:
        * WebCore.pro:
        * platform/text/qt/StringQt.cpp: Removed.

2010-04-20  Gavin Barraclough  <barraclough@apple.com>

        Reviewed by Oliver Hunt, Darin Adler.

        Bug 37906 - Remove JSC::UStringImpl; unify with StringImpl.
        Add include for StringHash.h.

        * WebCore.xcodeproj/project.pbxproj:
        * bridge/c/c_class.cpp:

2010-04-21  Alexey Proskuryakov  <ap@apple.com>

        Tiger build fix.

        * platform/network/mac/ResourceHandleMac.mm:
        (WebCore::createNSURLConnection): Fixed a typo, named an argument.
        (WebCore::ResourceHandle::start): Moved shouldUseCredentialStorage out of #if, since it's
        now passed to createNSURLConneciton() on all platforms (and then ignored on Tiger).

2010-04-21  Alexey Proskuryakov  <ap@apple.com>

        Reviewed by Adam Roben.

        Windows build fix.

        * platform/network/cf/ResourceHandleCFNet.cpp: Declare CFURLConnectionCreateWithProperties
        for now, as it's mistakenly missing from WebKitSupportLibrary headers.

2010-04-21  Dimitri Glazkov  <dglazkov@chromium.org>

        Reviewed by Darin Adler.

        REGRESSION(r57292): Safari/Win and Chromium/Win no longer pass the acid3 test.
        https://bugs.webkit.org/show_bug.cgi?id=37902

        The issue is due to MSVC creating enums as signed. The fix is to store the value
        as unsigned.

        Test: http://acid3.acidtests.org/

        * rendering/style/RenderStyle.h:
        (WebCore::InheritedFlags): Changed type of _insideLink to unsigned.

2010-04-21  Alexey Proskuryakov  <ap@apple.com>

        Reviewed by Brady Eidson.

        https://bugs.webkit.org/show_bug.cgi?id=37933
        <rdar://problem/7719540> XMLHttpRequest.withCredentials should be better enforced.

        Test: http/tests/xmlhttprequest/cross-origin-authorization-with-embedder.html

        This improves integration between ResourceHandle and Apple networking libraries.

        * platform/network/cf/ResourceHandleCFNet.cpp:
        (WebCore::createConnectionProperties): A new helper for creating connection properties dictionary.
        (WebCore::ResourceHandle::start): Pass connection properties.
        (WebCore::WebCoreSynchronousLoader::load): Ditto.

        * platform/network/mac/ResourceHandleMac.mm:
        (WebCore::createNSURLConnection): Factor out OS version dependent code for creating
        NSURLConnection. Tell NSURLConnection about credential policy upfront.
        (WebCore::ResourceHandle::start): Use the new function.
        (+[WebCoreSynchronousLoader loadRequest:allowStoredCredentials:returningResponse:error:]): Ditto.

2010-04-21  Xiaomei Ji  <xji@chromium.org>

        Reviewed by Dimitri Glazkov

        This patch fixes [chromium] RTL <select> dropdown box expands to right
        instead of left.
        https://bugs.webkit.org/show_bug.cgi?id=37232

        No automatic test is possible.

        * manual-tests/select_dropdown_box_alignment.html: Added.
        * platform/chromium/PopupMenuChromium.cpp:
        (WebCore::PopupContainer::layout): Adjust the x-axis of dropdown box 
        for RTL.

2010-04-21  anton muhin  <antonm@google.com>

        Reviewed by Adam Barth.

        [v8] Bail out if fetching of Object.prototype fails.
        https://bugs.webkit.org/show_bug.cgi?id=37661

        If for any reason we failed to fetch Object.prototype, context cannot
        be properly initialized and we bail out.

        * bindings/v8/V8DOMWindowShell.cpp:
        (WebCore::V8DOMWindowShell::initContextIfNeeded): bail out if installHiddenObjectPrototype failed
        (WebCore::V8DOMWindowShell::installHiddenObjectPrototype): bail out if failed to fetch Object.prototype
        * bindings/v8/V8DOMWindowShell.h: return false if installHiddenObjectPrototype failed

2010-04-21  Timothy Hatcher  <timothy@apple.com>

        Make UserContentURLPattern correctly check for subdomains and the URL
        has the same suffix as the pattern. Also improve the parsing of the host.

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

        Reviewed by Darin Adler.

        * page/UserContentURLPattern.cpp:
        (WebCore::UserContentURLPattern::parse): Simplify the subdomain pattern parsing to
        simply check for "*" only or a "*." prefix and then do a substring.
        (WebCore::UserContentURLPattern::matchesHost): Check that the host has a "." in the
        position before the suffix to ensure it a subdomain and not just a suffix match.

2010-04-21  Xan Lopez  <xlopez@igalia.com>

        Try to fix compilation on GTK+ debug bots.

        * bindings/gobject/WebKitDOMBinding.cpp:
        (WebKit::createWrapper):

2010-04-21  Jakub Wieczorek  <jwieczorek@webkit.org>

        Reviewed by Darin Adler.

        List item markers are not always updated after changes in the DOM.
        https://bugs.webkit.org/show_bug.cgi?id=37060

        In particular, they would not be updated when adding/removing an item
        that is not a direct child of the list element.

        Tests: fast/lists/ol-nested-items-dynamic-insert.html
               fast/lists/ol-nested-items-dynamic-remove.html
               fast/lists/ol-nested-items.html
               fast/lists/ol-nested-list-dynamic-insert.html
               fast/lists/ol-nested-list-dynamic-remove.html
               fast/lists/ol-nested-list.html

        * rendering/RenderListItem.cpp:
        (WebCore::updateListMarkerNumbers): Change it to traverse the whole subtree of a list, not only siblings of an item.
        * rendering/RenderListItem.h:
        * rendering/RenderObject.cpp: Move the updateListMarkerNumbers function to RenderListItem.cpp.
        (WebCore::RenderObject::addChild): Move the code updating list markers to RenderObjectChildList for consistency.
        * rendering/RenderObjectChildList.cpp: Move the updateListMarkerNumbers function to RenderListItem.cpp.
        (WebCore::RenderObjectChildList::removeChildNode): Pass the actual node being removed, not the next sibling.
        (WebCore::RenderObjectChildList::appendChildNode): Pass the actual node being added, not the next sibling.
        (WebCore::RenderObjectChildList::insertChildNode): Pass the actual node being added, not the next sibling.
        * rendering/RenderTreeAsText.cpp:
        (WebCore::markerTextForListItem):

2010-04-21  Xan Lopez  <xlopez@igalia.com>

        Reviewed by Adam Barth.

        [GTK] GObject DOM bindings
        https://bugs.webkit.org/show_bug.cgi?id=33590

        Initial version of the GObject DOM bindings.

        Only bindings for Node.idl and a few of its dependencies are
        provided, without public API to access them at the
        moment. References to the Document interfaces and to
        EventListeners in Node.idl are ignored for GObject to make the
        initial patch as small as possible, but will be enabled in a
        follow-up patch.

        * GNUmakefile.am:
        * bindings/gobject/ConvertToUTF8String.cpp: Added.
        (convertToUTF8String):
        * bindings/gobject/ConvertToUTF8String.h: Added.
        * bindings/gobject/WebKitDOMBinding.cpp: Added.
        (WebKit::domObjects):
        (WebKit::DOMObjectCache::get):
        (WebKit::DOMObjectCache::put):
        (WebKit::DOMObjectCache::forget):
        (WebKit::createWrapper):
        (WebKit::kit):
        * bindings/gobject/WebKitDOMBinding.h: Added.
        * bindings/gobject/WebKitDOMObject.cpp: Added.
        (webkit_dom_object_init):
        (webkit_dom_object_class_init):
        * bindings/gobject/WebKitDOMObject.h: Added.
        * bindings/scripts/CodeGeneratorGObject.pm: Added.
        * bindings/scripts/gobject-generate-headers.pl: Added.
        * dom/Node.idl:

2010-04-21  Gustavo Sverzut Barbieri  <barbieri@profusion.mobi>

        Reviewed by Xan Lopez.

        Wrong header being included in FontPlatformDataCairo.cpp
        https://bugs.webkit.org/show_bug.cgi?id=37829

        No behavior changes, so no new tests were added.

        * platform/graphics/cairo/FontPlatformDataCairo.cpp:

2010-04-21  Adam Roben  <aroben@apple.com>

        Fix leaks of FilterData/SVGFilterBuilder in RenderSVGResourceFilter

        Fixes <http://webkit.org/b/37922>.

        Reviewed by Dave Hyatt.

        * rendering/RenderSVGResourceFilter.cpp:
        (WebCore::RenderSVGResourceFilter::applyResource): Use an OwnPtr to
        hold the heap-allocated FilterData object, so that we won't leak it
        when we bail out of this function on error.

2010-04-21  Zoltan Herczeg  <zherczeg@webkit.org>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] startAnimation() is not needed to preceede nativeImageForCurrentFrame()
        https://bugs.webkit.org/show_bug.cgi?id=37844

        nativeImageForCurrentFrame() resets the m_decoder parameter under Qt,
        which is required by startAnimation() to detect frame and repetition counts.
        Hence, Image::drawTiled cannot start animations under Qt:
        <html><body background="animated.gif"></body></html> does not work

        * platform/graphics/qt/ImageDecoderQt.cpp:
        (WebCore::ImageDecoderQt::internalHandleCurrentImage):

2010-04-21  Benjamin Poulain  <ikipou@gmail.com>

        Reviewed by Simon Fraser.

        Update of fixed elements is not made correctly when the page has been scrolled
        https://bugs.webkit.org/show_bug.cgi?id=36783

        When a fixed element was updated, the old geometry was not repainted correctly
        because the repaint rect was cached during the layout and not updated when 
        scrolling.

        The rect is now updated while scrolling so the region updated correspond to the
        region of the element on the screen.

        The method RenderLayer::updateRepaintRectsAfterScroll() updates
        the repaint rect of all fixed tree after scroll.

        Tests: fast/repaint/fixed-child-move-after-scroll.html
               fast/repaint/fixed-child-of-fixed-move-after-scroll.html
               fast/repaint/fixed-child-of-transformed-move-after-scroll.html
               fast/repaint/fixed-move-after-scroll.html

        * page/FrameView.cpp:
        (WebCore::FrameView::scrollPositionChanged):
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::updateRepaintRectsAfterScroll):
        * rendering/RenderLayer.h:

2010-04-21  Gustavo Sverzut Barbieri  <barbieri@profusion.mobi>

        Reviewed by Adam Roben.

        Update EFL port to match recent API changes.
        http://webkit.org/b/37853

        No behavior changes, so no new tests were added.

        * platform/efl/FileSystemEfl.cpp:
        * platform/efl/LocalizedStringsEfl.cpp:
        (WebCore::missingPluginText):
        (WebCore::crashedPluginText):
        * platform/efl/MIMETypeRegistryEfl.cpp:
        (WebCore::MIMETypeRegistry::isApplicationPluginMIMEType):
        * platform/graphics/efl/ImageEfl.cpp:

2010-04-21  Avi Drissman  <avi@chromium.org>

        Reviewed by Simon Fraser.

        JPG images fail to print in Chromium
        https://bugs.webkit.org/show_bug.cgi?id=37796

        Image sources of JPG data with final=false fail to draw into PDF contexts even if later updated (<rdar://problem/7874035>). Therefore, destroy and re-create the image source when the final data arrives.

        * platform/graphics/cg/ImageSourceCG.cpp:
        (WebCore::ImageSource::setData):

2010-04-21  Marcus Bulach  <bulach@chromium.org>

        Reviewed by Nate Chapin.

        EventSource needs to be marked as an ActiveDomType.
        https://bugs.webkit.org/show_bug.cgi?id=37857
        Existing layout tests (fast/eventsource and http/tests/eventsource/) should pass when compiling with eventsource enabled.

        * bindings/scripts/CodeGeneratorV8.pm:
        * bindings/v8/V8DOMWrapper.cpp:
        * bindings/v8/custom/V8EventSourceConstructor.cpp:
        (WebCore::V8EventSource::constructorCallback):

2010-04-21  Gustavo Sverzut Barbieri  <barbieri@profusion.mobi>

        Reviewed by Nikolas Zimmermann.

        Add missing includes to platform/posix/FileSystemPOSIX.cpp
        https://bugs.webkit.org/show_bug.cgi?id=37861

        No behavior changes, so no new tests were added.

        * platform/posix/FileSystemPOSIX.cpp:

2010-04-21  No'am Rosenthal  <noam.rosenthal@nokia.com>

        Reviewed by Simon Fraser.

        [Qt] Fix or remove the runtime flag for accelerated compositing.

        This adds a way for a chrome client to disallow layers from becoming composited,
        even if the settings enable accelerated compositing. This is necessary for platforms
        where different views can be applied with the same settings to the same page.

        We enable an API through ChromeClient to ask the chrome-client whether or not
        it can render composited layers, which is taken into account when the compositor
        decides whether or not to start compositing.

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

        Pages under LayoutTests/compositing now work under QWebView, even when
        QWebSettings::AcceleratedCompositingEnabled is on.

        * page/ChromeClient.h:
        (WebCore::ChromeClient::allowsAcceleratedCompositing):
        * platform/qt/QWebPageClient.h:
        (QWebPageClient::allowsAcceleratedCompositing):
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::canBeComposited):

2010-04-21  Ryosuke Niwa  <rniwa@webkit.org>

        No review. Spurious whitespace was removed from project file.

        * WebCore.xcodeproj/project.pbxproj:

2010-04-20  Ryosuke Niwa  <rniwa@webkit.org>

        Reviewed by Eric Seidel.

        [Qt] Build fix: warning on L933 of CompositeEditCommand.cpp
        https://bugs.webkit.org/show_bug.cgi?id=37912

        Replaced the ternary operator by an if statement because GCC was confused by the use of
        ternary operator and producing warnings on Qt builds.

        * WebCore.xcodeproj/project.pbxproj:
        * editing/CompositeEditCommand.cpp:
        (WebCore::CompositeEditCommand::moveParagraphs):

2010-04-20  Ryosuke Niwa  <rniwa@webkit.org>

        Reviewed by Justin Garcia.

        Nested <ul>s are mishandled when converted to <ol> using execCommand('insertorderedlist')
        https://bugs.webkit.org/show_bug.cgi?id=19539

        Fixes a bug where two consecutive lists are not merged if they have been converted
        from ordered/unordered lists inside another list.

        The bug was caused by InsertListCommand::doApply where it did not merge a newly inserted
        list element and its neighbors. This patch adds code to doApply so that after inserting
        the list element, it updates previousList and nextList to the outermost list elements around
        insertionPos under the same enclosing list. Because the next and the previous list elements
        are not necessarily visually next to the newly inserted element before moveParagraph moves
        the paragraph into the new list element, doApply merges lists after moveParagraph is called.

        Test: editing/execCommand/insert-lists-inside-another-list.html

        * editing/InsertListCommand.cpp:
        (WebCore::InsertListCommand::doApply): Modified as described above
        * editing/htmlediting.cpp:
        (WebCore::outermostEnclosingList): Added rootNode. Returns the outermost list element,
          which is a descendent of rootNode.
        * editing/htmlediting.h:

2010-04-20  Alexey Proskuryakov  <ap@apple.com>

        Reviewed by Darin Adler.

        https://bugs.webkit.org/show_bug.cgi?id=37776
        <rdar://problem/7877716> REGRESSION: When using dvorak, keydown/keyup reports qwerty keyCodes

        * platform/cocoa/KeyEventCocoa.mm: (WebCore::windowsKeyCodeForCharCode): Re-added mapping
        for Roman letters and punctuation.

        * platform/mac/KeyEventMac.mm: (WebCore::windowsKeyCodeForKeyEvent): Improved approximation
        of IE behavior. Keyboard layouts that change location of Roman letters (like AZERTY or Dvorak)
        also switch their keycodes. Also, restored Safari 4 behavior for punctuation. It's difficult
        to match Windows for punctuation exactly, because keyboard layouts make arbitrary changes
        to their keycodes.

2010-04-20  Shinichiro Hamaji  <hamaji@chromium.org>

        Reviewed by Darin Adler and Alexey Proskuryakov.

        A backslash in EUC-JP becomes to a yen sign when it is copied
        https://bugs.webkit.org/show_bug.cgi?id=36419

        Tests: editing/execCommand/transpose-backslash-with-euc.html
               editing/pasteboard/copy-backslash-with-euc.html

        * editing/Editor.cpp: Remove an unnecessary displayStringModifiedByEncoding calls.
        (WebCore::Editor::addToKillRing):
        * editing/TextIterator.cpp: TextIterator can use RenderText::textWithoutTranscoding and now plainText() uses this version
        (WebCore::TextIterator::TextIterator):
        (WebCore::TextIterator::init):
        (WebCore::TextIterator::emitText):
        (WebCore::plainTextToMallocAllocatedBuffer):
        * editing/TextIterator.h:
        (WebCore::):
        * platform/mac/PasteboardMac.mm: Remove an unnecessary displayStringModifiedByEncoding call.
        (WebCore::Pasteboard::writeSelection):
        * platform/text/TextEncoding.h: Make backslashAsCurrencySymbol public.
        * rendering/RenderText.cpp: Add RenderText::textWithoutTranscoding
        (WebCore::RenderText::RenderText):
        (WebCore::RenderText::updateNeedsTranscoding):
        (WebCore::RenderText::styleDidChange):
        (WebCore::isInlineFlowOrEmptyText):
        (WebCore::RenderText::previousCharacter):
        (WebCore::RenderText::setTextInternal):
        (WebCore::RenderText::textWithoutTranscoding):
        (WebCore::RenderText::transformText):
        * rendering/RenderText.h:
        * rendering/RenderTextControl.cpp: Remove an unnecessary displayStringModifiedByEncoding call.
        (WebCore::RenderTextControl::setInnerTextValue):
        (WebCore::RenderTextControl::finishText):
        * rendering/RenderTextFragment.cpp:
        (WebCore::RenderTextFragment::previousCharacter):
        * rendering/RenderTextFragment.h:

2010-04-20  Nate Chapin  <japhet@chromium.org>

        Reviewed by Dimitri Glazkov.

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

        Fix style violations in code generated by CodeGeneratorV8.pm.

        * bindings/scripts/CodeGeneratorV8.pm:
        * bindings/v8/test/V8TestObj.cpp:
        * bindings/v8/test/V8TestObj.h:

2010-04-20  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r57924.
        http://trac.webkit.org/changeset/57924
        https://bugs.webkit.org/show_bug.cgi?id=37898

        It broke 3-4 test on all bot (Requested by Ossy on #webkit).

        * page/AbstractView.idl:
        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::media):
        * page/DOMWindow.h:
        * page/DOMWindow.idl:

2010-04-20  Gavin Barraclough  <barraclough@apple.com>

        Reviewed by Oliver Hunt.

        Bug 37895 - Share common code from UStringImplBase with StringImpl
        Add forwarding header.

        * ForwardingHeaders/wtf/text/StringImplBase.h: Added.

2010-04-20  Adam Barth  <abarth@webkit.org>

        Unreviewed build fix fro Chromium.

        * loader/DocumentWriter.cpp:

2010-04-20  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Timothy Hatcher.

        Web Inspector: Support live edit while on a breakpoint, preserve breakpoints when adding new lines.

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

        * inspector/front-end/ScriptsPanel.js:
        (WebInspector.ScriptsPanel.prototype.editScriptLine.mycallback):
        (WebInspector.ScriptsPanel.prototype.editScriptLine):
        * inspector/front-end/TextViewer.js:
        (WebInspector.TextViewer.prototype._handleDoubleClick):
        (WebInspector.TextViewer.prototype._cancelEditingLine):

2010-04-20  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        Factor DocumentWriter out of FrameLoader
        https://bugs.webkit.org/show_bug.cgi?id=37175

        This patch separates the begin/write/end cycle of decoding network
        bytes and putting them into a document from the rest of the loading
        machinery.  The code and state required to write bytes into a document
        doesn't interact very much with the rest of the loading machinery.

        No tests because there is no behavior change (hopefully!).

        * Android.mk:
        * GNUmakefile.am:
        * WebCore.base.exp:
        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/ScriptControllerBase.cpp:
        (WebCore::ScriptController::executeIfJavaScriptURL):
        * dom/Document.cpp:
        (WebCore::Document::close):
        * dom/ProcessingInstruction.cpp:
        (WebCore::ProcessingInstruction::checkStyleSheet):
        * dom/ScriptElement.cpp:
        (WebCore::ScriptElementData::scriptCharset):
        * html/HTMLLinkElement.cpp:
        (WebCore::HTMLLinkElement::process):
        * loader/DocLoader.cpp:
        (WebCore::DocLoader::requestPreload):
        * loader/DocumentLoader.cpp:
        (WebCore::DocumentLoader::finishedLoading):
        (WebCore::DocumentLoader::setupForReplaceByMIMEType):
        * loader/DocumentWriter.cpp: Added.
        * loader/DocumentWriter.h: Added.
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::FrameLoader):
        (WebCore::FrameLoader::init):
        (WebCore::FrameLoader::clear):
        (WebCore::FrameLoader::receivedFirstData):
        (WebCore::FrameLoader::setURL):
        (WebCore::FrameLoader::didBeginDocument):
        (WebCore::FrameLoader::didEndDocument):
        (WebCore::FrameLoader::willSetEncoding):
        (WebCore::FrameLoader::addData):
        (WebCore::FrameLoader::transitionToCommitted):
        (WebCore::FrameLoader::open):
        (WebCore::FrameLoader::finishedLoadingDocument):
        (WebCore::FrameLoader::addExtraFieldsToRequest):
        * loader/FrameLoader.h:
        (WebCore::FrameLoader::writer):
        (WebCore::FrameLoader::isDisplayingInitialEmptyDocument):
        * loader/MediaDocument.cpp:
        (WebCore::MediaDocument::replaceMediaElementTimerFired):
        * loader/PluginDocument.cpp:
        (WebCore::PluginTokenizer::createDocumentStructure):
        * platform/network/FormDataBuilder.cpp:
        (WebCore::FormDataBuilder::dataEncoding):
        * svg/graphics/SVGImage.cpp:
        (WebCore::SVGImage::dataChanged):

2010-04-20  Kenneth Rohde Christiansen  <kenneth@webkit.org>

        Reviewed by Simon Fraser.

        Rename window.media to window.styleMedia
        https://bugs.webkit.org/show_bug.cgi?id=36187

        It has been defined that the AbstractView media extension
        defined in the CSSOM View spec should be renamed to styleMedia.
        This patch does that and updates the current layout tests
        making use of it.

        * page/AbstractView.idl:
        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::styleMedia):
        * page/DOMWindow.h:
        * page/DOMWindow.idl:

2010-04-20  Timothy Hatcher  <timothy@apple.com>

        Fix matching of "file:///*" patterns by not trying to compare the host. The host is
        irrelevant for file URLs.

        Also fix comparisons to be case insensitive.

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

        Reviewed by Dave Hyatt.

        * page/UserContentURLPattern.cpp:
        (WebCore::UserContentURLPattern::parse): Use equalIgnoringCase when comparing for "file" schemes.
        (WebCore::UserContentURLPattern::matches): Use equalIgnoringCase when comparing schemes. Only call
        matchesHost if the scheme isn't "file".
        (WebCore::UserContentURLPattern::matchesHost): Call equalIgnoringCase when comparing hosts. The endsWith
        was already doing a case-insensitive compare, so existing tests worked though this path.

2010-04-20  Justin Schuh  <jschuh@chromium.org>

        Reviewed by Adam Barth.

        Invalid cast due to <video> inside <foreignObject> inside <svg> inside <img>
        https://bugs.webkit.org/show_bug.cgi?id=37331

        Added a setting to enable/disable media per-page and have the SVGImage 
        disable media for its dummy page. Also found and fixed a related bad
        cast in the V8 bindings (JSC had a custom wrapper for this already).

        Tests: media/svg-as-image-with-media-blocked.html

        * dom/make_names.pl: Added media enabled check and V8 cast wrapper
        * page/Settings.cpp: Added m_isMediaEnabled (defaults to true)
        (WebCore::Settings::Settings):
        (WebCore::Settings::setMediaEnabled):
        * page/Settings.h:
        (WebCore::Settings::isMediaEnabled):
        * svg/graphics/SVGImage.cpp: Disables media in dummy page
        (WebCore::SVGImage::dataChanged):

2010-04-19  Antonio Gomes  <tonikitoo@webkit.org>

        Reviewed by Simon Fraser.

        Spatial Navigation: at @updateFocusCandidateIfCloser make an assignment shortcut when FocusCandidate is null
        https://bugs.webkit.org/show_bug.cgi?id=37802

        In updateFocusCandidateIfCloser method, we do all bail out checks in the begining of
        the method body. If after those bail out checks, no "best FocusCandidate" has been taken
        yet (i.e. focusCandidate.isNull() == true), we can safely take the current candidate,
        and exit earlier.

        No behavior change, it is just a safe assignment shortcut.

        * page/FocusController.cpp:
        (WebCore::updateFocusCandidateIfCloser):

2010-04-20  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Dan Bernstein.

        Hook compositing layers together across iframes
        https://bugs.webkit.org/show_bug.cgi?id=37878
        
        First step: if an iframe's document goes into compositing mode, also throw the parent
        document into compositing mode (all the way up to the root). This is required both
        to preserve layering (since parent document content can obscure iframe content),
        and so that we can eventually hook the layer trees together.

        Test: compositing/iframes/composited-iframe.html

        * rendering/RenderIFrame.h:
        * rendering/RenderIFrame.cpp:
        (WebCore::RenderIFrame::requiresLayer): In order to make an iframe composited, it also has to have
        a RenderLayer, so must return |true| from requiresLayer().
        (WebCore::RenderIFrame::requiresAcceleratedCompositing): Returns true if the content document
        is in compositing mode.
        (WebCore::RenderIFrame::isRenderIFrame): Required so that RenderLayerCompositor can check
        if a renderer is an iframe.
        (WebCore::toRenderIFrame): Required so that RenderLayerCompositor can cast to a RenderIFrame.

        * rendering/RenderLayerCompositor.h:
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::enableCompositingMode): Call out to the RenderView when
        the compositing mode changes, so that the parent document can update its compositing status.
        (WebCore::RenderLayerCompositor::requiresCompositingLayer): Call requiresCompositingForIFrame().
        (WebCore::RenderLayerCompositor::requiresCompositingForIFrame): Check to see if the iframe
        wants to be composited.

        * rendering/RenderObject.h:
        (WebCore::RenderObject::isRenderIFrame): Base class returns false.

        * rendering/RenderView.h:
        * rendering/RenderView.cpp:
        (WebCore::RenderView::compositingStateChanged): New method that allows an iframe to notify
        its parent document that a recalcStyle is required, to update compositing state.

2010-04-20  Gavin Barraclough  <barraclough@apple.com>

        Reviewed by NOBODY (build fix).
        Speculative tiger build fix.

        * WebCore.NPAPI.exp:
        * WebCore.PluginHostProcess.exp:
        * WebCore.base.exp:

2010-04-20  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Timothy Hatcher.

        Web Inspector: add basic script editing capabilities to the front-end.

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

        * bindings/js/ScriptDebugServer.cpp:
        (WebCore::ScriptDebugServer::setBreakpoint):
        (WebCore::ScriptDebugServer::removeBreakpoint):
        * inspector/front-end/ScriptView.js:
        (WebInspector.ScriptView):
        (WebInspector.ScriptView.prototype._editLine):
        (WebInspector.ScriptView.prototype._editLineComplete):
        * inspector/front-end/ScriptsPanel.js:
        (WebInspector.ScriptsPanel.prototype._resourceLoadingFinished):
        (WebInspector.ScriptsPanel.prototype.canEditScripts):
        (WebInspector.ScriptsPanel.prototype.editScriptLine):
        * inspector/front-end/SourceFrame.js:
        (WebInspector.SourceFrame):
        (WebInspector.SourceFrame.prototype.updateContent):
        (WebInspector.SourceFrame.prototype._createViewerIfNeeded):
        * inspector/front-end/TextEditorHighlighter.js:
        (WebInspector.TextEditorHighlighter):
        (WebInspector.TextEditorHighlighter.prototype.reset):
        * inspector/front-end/TextEditorModel.js:
        (WebInspector.TextEditorModel.prototype.copyRange):
        * inspector/front-end/TextViewer.js:
        (WebInspector.TextViewer):
        (WebInspector.TextViewer.prototype.set editCallback):
        (WebInspector.TextViewer.prototype._buildChunks):
        (WebInspector.TextViewer.prototype._handleKeyDown):
        (WebInspector.TextViewer.prototype._handleDoubleClick):
        (WebInspector.TextViewer.prototype._commitEditingLine):
        (WebInspector.TextViewer.prototype._cancelEditingLine):
        * inspector/front-end/inspector.js:
        (WebInspector.documentKeyDown):
        (WebInspector.log.logMessage):
        (WebInspector.log):
        (WebInspector.isEditingAnyField):
        (WebInspector.startEditing.cleanUpAfterEditing):

2010-04-20  Gavin Barraclough  <barraclough@apple.com>

        Reviewed by Geoff Garen.

        Add forwarding header.

        * ForwardingHeaders/runtime/RopeImpl.h: Added.

2010-04-20  Gavin Barraclough  <barraclough@apple.com>

        Reviewed by Geoff Garen.

        Bug 37828 - Move WebCore's String classes to WTF

        Move these classes up to WTF so they are available to all clients of WTF (in
        particular JSC).

        As a first patch, making the most minimal change possible, since this patch
        could easily grow rather large since we'll have to change every class forward
        declaration ( e.g. every "namespace WebCore { class String; }" much change to
        "namespace WTF { class String; }").

        Moving the files, but leaving the classes logically in the WebCore namespace -
        which is technically a layering violation - I'll come back and fix this up in a
        subsequent patch.

        * Android.mk:
        * ForwardingHeaders/wtf/StaticConstructors.h: Added.
        * ForwardingHeaders/wtf/text/AtomicString.h: Added.
        * ForwardingHeaders/wtf/text/AtomicStringImpl.h: Added.
        * ForwardingHeaders/wtf/text/StringBuffer.h: Added.
        * ForwardingHeaders/wtf/text/StringHash.h: Added.
        * ForwardingHeaders/wtf/text/StringImpl.h: Added.
        * ForwardingHeaders/wtf/text/WTFString.h: Added.
        * GNUmakefile.am:
        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * css/MediaFeatureNames.cpp:
        * dom/QualifiedName.cpp:
        * dom/make_names.pl:
        * platform/StaticConstructors.h: Removed.
        * platform/text/AtomicString.cpp: Removed.
        * platform/text/AtomicString.h:
        * platform/text/AtomicStringImpl.h:
        * platform/text/PlatformString.h:
        * platform/text/String.cpp:
        * platform/text/StringHash.h:
        * platform/text/StringImpl.cpp: Removed.
        * platform/text/StringImpl.h:

2010-04-20  Kent Tamura  <tkent@chromium.org>

        Reviewed by Darin Adler.

        Change a parameter type of chooseIconForFiles()
        https://bugs.webkit.org/show_bug.cgi?id=37504

        Change PassRefPtr<FileChooser> parameter of chooseIconForFiles()
        to FileChooser*. Though an implementation of chooseIconForFiles()
        might have ownership of the FileChooser instance, we don't need to
        use PassRefPtr<> in this case.

        * loader/EmptyClients.h:
        (WebCore::EmptyChromeClient::chooseIconForFiles):
        * page/Chrome.cpp:
        (WebCore::Chrome::chooseIconForFiles):
        * page/Chrome.h:
        * page/ChromeClient.h:

2010-04-20  Diego Escalante Urrelo  <descalante@igalia.com>

        Reviewed by Xan Lopez.

        [Gtk] Evaluate and create tests for all the AtkRole's implemented by
        WebKitGtk
        https://bugs.webkit.org/show_bug.cgi?id=34449

        Implement ATK_ROLE_FORM.

        * accessibility/gtk/AccessibilityObjectWrapperAtk.cpp:
        (webkit_accessible_get_role):

2010-04-20  Martin Robinson  <mrobinson@webkit.org>

        Reviewed by Gustavo Noronha Silva.

        [GTK] Enable DOM clipboard and drag-and-drop access
        https://bugs.webkit.org/show_bug.cgi?id=30623

        Move most of the PasteboardHelper logic into WebCore. This helps
        prepare for WebKit2 and leads to a clearer separation of concerns
        between the WebKit and WebCore layers.

        No new tests as functionality has not changed.

        * GNUmakefile.am: Add PastboardHelper.cpp to list of sources.
        * platform/Pasteboard.h: Added a getter for the PasteboardHelper and made the member private.
        * platform/gtk/PasteboardGtk.cpp: Update PasteboardHelper method calls to use new naming.
        (WebCore::clipboard_get_contents_cb): Ditto.
        (WebCore::Pasteboard::helper): Added, member is now private.
        (WebCore::Pasteboard::writeURL): Ditto.
        (WebCore::Pasteboard::documentFragment): Update to reflect method renaming.
        (WebCore::Pasteboard::plainText): Ditto.
        * platform/gtk/PasteboardHelper.cpp: Added.
        (WebCore::PasteboardHelper::PasteboardHelper): Added.
        (WebCore::PasteboardHelper::~PasteboardHelper): Added.
        (WebCore::PasteboardHelper::initializeTargetList): Added, originally from WebKit.
        (WebCore::widgetFromFrame): Added helper function.
        (WebCore::PasteboardHelper::getCurrentClipboard): Added, originally from WebKit.
        (WebCore::PasteboardHelper::getClipboard): Ditto.
        (WebCore::PasteboardHelper::getPrimarySelectionClipboard): Ditto.
        (WebCore::PasteboardHelper::targetList): Ditto.
        (WebCore::PasteboardHelper::fillSelectionData): Ditto.
        (WebCore::PasteboardHelper::targetListForDataObject): Ditto.
        (WebCore::getClipboardContentsCallback): Ditto.
        (WebCore::clearClipboardContentsCallback): Ditto.
        (WebCore::PasteboardHelper::writeClipboardContents): Ditto.
        * platform/gtk/PasteboardHelper.h: Moved methods from WebKit to WebCore.

2010-04-20  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Anders Carlsson.

        backgroundColor is oddly indented in layer tree dump
        https://bugs.webkit.org/show_bug.cgi?id=37885

        The writeIndent() was mistakenly outside the LayerTreeAsTextDebug clause, causing indents
        to be written twice.
        
        * platform/graphics/GraphicsLayer.cpp:
        (WebCore::GraphicsLayer::dumpProperties):

2010-04-20  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Dimitri Glazkov.

        Clean up RenderPart/RenderPartObject/RenderFrame/RenderEmbeddedObject
        https://bugs.webkit.org/show_bug.cgi?id=37741

        RenderPartObject is a useless intermediate class between RenderPart and
        RenderEmbeddedObject, and we can now remove it. Its only method, viewCleared(),
        applies to objects and embeds when the content is a FrameView, so can move
        to RenderEmbeddedObject.

        * Android.mk:
        * GNUmakefile.am:
        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * rendering/RenderEmbeddedObject.cpp:
        (WebCore::RenderEmbeddedObject::RenderEmbeddedObject):
        (WebCore::RenderEmbeddedObject::requiresLayer):
        (WebCore::RenderEmbeddedObject::paint):
        (WebCore::RenderEmbeddedObject::viewCleared):
        * rendering/RenderEmbeddedObject.h:
        * rendering/RenderFrameBase.h:
        * rendering/RenderPart.cpp:
        (WebCore::RenderPart::RenderPart):
        * rendering/RenderPart.h:
        * rendering/RenderPartObject.cpp: Removed.
        * rendering/RenderPartObject.h: Removed.

2010-04-20  Robin Cao  <robin.webkit@gmail.com>

        Reviewed by Dirk Schulze.

        SVG no AnimateColor for stroke or fill if they are set to none on target.
        https://bugs.webkit.org/show_bug.cgi?id=36718

        SVGAnimateElement::resetToBaseValue reset 'm_propertyType' in the process of animation.
        This will cause problems when attributes 'fill' and 'stroke' have the value 'none', because in this case 
        the property type determined by base value may be different from the one determined by 'fromTo' values.

        No new tests. The test suite in svg/animation is not working for target element with attribute 'fill' set to 'none'.
        Now animateColor on target element with attributes 'fill' and 'stroke' set to 'none' is possible.

        * svg/SVGAnimateElement.cpp:
        (WebCore::SVGAnimateElement::calculateFromAndToValues):
        (WebCore::SVGAnimateElement::resetToBaseValue):

2010-04-20  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r57892.
        http://trac.webkit.org/changeset/57892
        https://bugs.webkit.org/show_bug.cgi?id=37864

        Caused an assertion in Mac builds (Requested by smfr on
        #webkit).

        * WebCore.xcodeproj/project.pbxproj:
        * editing/Editor.cpp:
        (WebCore::Editor::insideVisibleArea):
        * page/Frame.cpp:
        (WebCore::Frame::ownerRenderer):
        * page/Frame.h:
        * page/FrameView.cpp:
        (WebCore::FrameView::~FrameView):
        (WebCore::FrameView::clear):
        (WebCore::FrameView::invalidateRect):
        (WebCore::FrameView::createScrollbar):
        * rendering/RenderFrameBase.h:
        * rendering/RenderObject.h:

2010-04-20  Jakub Wieczorek  <jwieczorek@webkit.org>

        Reviewed by Darin Adler.

        RenderListItem: change enclosingList() to only traverse the render tree.
        https://bugs.webkit.org/show_bug.cgi?id=37319

        This makes the function safe to use for items with nodes that are detached from
        the DOM tree and simplifies the code quite a bit.

        Covered by existing tests.

        * rendering/RenderListItem.cpp:
        (WebCore::enclosingList):
        (WebCore::previousListItem):
        (WebCore::RenderListItem::explicitValueChanged):

2010-04-20  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Dan Bernstein.

        Clean up RenderPart/RenderPartObject/RenderFrame/RenderEmbeddedObject
        https://bugs.webkit.org/show_bug.cgi?id=37741

        Make Frame::ownerRenderer() return a RenderFrameBase* rather than a
        RenderPart*, and add the necessary toRenderFrameBase() and isRenderFrameBase().

        * WebCore.xcodeproj/project.pbxproj:
        * editing/Editor.cpp:
        (WebCore::Editor::insideVisibleArea):
        * page/Frame.cpp:
        (WebCore::Frame::ownerRenderer):
        * page/Frame.h:
        * page/FrameView.cpp:
        (WebCore::FrameView::~FrameView):
        (WebCore::FrameView::clear):
        (WebCore::FrameView::invalidateRect):
        (WebCore::FrameView::createScrollbar):
        * rendering/RenderFrameBase.h:
        (WebCore::RenderFrameBase::isRenderFrameBase):
        (WebCore::toRenderFrameBase):
        * rendering/RenderObject.h:
        (WebCore::RenderObject::isRenderFrameBase):

2010-04-20  Jay Civelli  <jcivelli@chromium.org>

        Reviewed by Dimitri Glazkov.

        [chromium] Pressing tab now closes the select popup as it should.
        https://bugs.webkit.org/show_bug.cgi?id=37721

        * platform/chromium/PopupMenuChromium.cpp:
        (WebCore::PopupListBox::handleKeyEvent):

2010-04-20  Yaar Schnitman  <yaar@chromium.org>

        Reviewed by Nate Chapin.

        Null value should be legit value for wrapped types. This requires some cleanup in canvas which was missing built-in null argument checks;
        https://bugs.webkit.org/show_bug.cgi?id=37810

        * bindings/js/JSCanvasRenderingContext2DCustom.cpp:
        (WebCore::JSCanvasRenderingContext2D::drawImage): Passes ec to drawImage(3) too
        * bindings/scripts/CodeGeneratorV8.pm: A null value is now legit value for wrapped types.
        * bindings/v8/test/V8TestObj.cpp:
        (WebCore::TestObjInternal::overloadedMethodCallback):
        * html/canvas/CanvasRenderingContext2D.cpp:
        (WebCore::CanvasRenderingContext2D::drawImage): Added null checks.
        (WebCore::CanvasRenderingContext2D::createPattern): Added null checks.
        * html/canvas/CanvasRenderingContext2D.h: Added needed raises "DOMException".
        * html/canvas/CanvasRenderingContext2D.idl: Added needed raises "DOMException".

2010-04-20  Evan Stade  <estade@chromium.org>

        Reviewed by David Levin.

        [chromium] crash when dragging images
        https://bugs.webkit.org/show_bug.cgi?id=37715

        NULL check the return value of nativeImageForCurrentFrame(),
        and NULL check Image just for good measure.

        Tested by new DragImageTest unit test.

        * platform/chromium/DragImageChromiumSkia.cpp:
        (WebCore::createDragImageFromImage):

2010-04-20  Dirk Schulze  <krit@webkit.org>

        Reviewed by Nikolas Zimmermann.

        SVGResourceFilter needs to be moved to under Renderers
        https://bugs.webkit.org/show_bug.cgi?id=35320

        This patch adds a renderer for SVGFilterElement. SVGFilterElement is now independent
        from the SVGResources.
        A clean-up solves the dependencies between SVGFilterElement, the filter primitives
        and SVGResources. This shall make the filter code more readable and better maintable.
        The Filter primitives get dumped now, as long as they have externalRepresentation
        implemented.

        No behavior changes, so no new tests were added.

        * Android.mk:
        * GNUmakefile.am:
        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * rendering/RenderPath.cpp:
        (WebCore::RenderPath::paint):
        * rendering/RenderSVGContainer.cpp:
        (WebCore::RenderSVGContainer::selfWillPaint):
        (WebCore::RenderSVGContainer::paint):
        * rendering/RenderSVGImage.cpp:
        (WebCore::RenderSVGImage::paint):
        * rendering/RenderSVGResource.h:
        (WebCore::):
        (WebCore::RenderSVGResource::postApplyResource):
        * rendering/RenderSVGResourceClipper.cpp:
        (WebCore::RenderSVGResourceClipper::applyResource):
        * rendering/RenderSVGResourceClipper.h:
        * rendering/RenderSVGResourceFilter.cpp: Added.
        (WebCore::RenderSVGResourceFilter::RenderSVGResourceFilter):
        (WebCore::RenderSVGResourceFilter::~RenderSVGResourceFilter):
        (WebCore::RenderSVGResourceFilter::invalidateClients):
        (WebCore::RenderSVGResourceFilter::invalidateClient):
        (WebCore::RenderSVGResourceFilter::buildPrimitives):
        (WebCore::RenderSVGResourceFilter::fitsInMaximumImageSize):
        (WebCore::RenderSVGResourceFilter::applyResource):
        (WebCore::RenderSVGResourceFilter::postApplyResource):
        (WebCore::RenderSVGResourceFilter::resourceBoundingBox):
        * rendering/RenderSVGResourceFilter.h: Added.
        (WebCore::FilterData::FilterData):
        (WebCore::RenderSVGResourceFilter::renderName):
        (WebCore::RenderSVGResourceFilter::filterUnits):
        (WebCore::RenderSVGResourceFilter::primitiveUnits):
        (WebCore::RenderSVGResourceFilter::resourceType):
        * rendering/RenderSVGResourceMarker.h:
        (WebCore::RenderSVGResourceMarker::applyResource):
        * rendering/RenderSVGResourceMasker.cpp:
        (WebCore::RenderSVGResourceMasker::applyResource):
        * rendering/RenderSVGResourceMasker.h:
        * rendering/RenderSVGRoot.cpp:
        (WebCore::RenderSVGRoot::selfWillPaint):
        (WebCore::RenderSVGRoot::paint):
        * rendering/RenderSVGText.cpp:
        * rendering/SVGRenderSupport.cpp:
        (WebCore::SVGRenderBase::prepareToRenderSVGContent):
        (WebCore::SVGRenderBase::finishRenderSVGContent):
        (WebCore::SVGRenderBase::filterBoundingBoxForRenderer):
        (WebCore::deregisterFromResources):
        * rendering/SVGRenderSupport.h:
        * rendering/SVGRenderTreeAsText.cpp:
        (WebCore::writeStyle):
        (WebCore::writeSVGResource):
        (WebCore::writeResources):
        (WebCore::writeRenderResources):
        * rendering/SVGRootInlineBox.cpp:
        (WebCore::SVGRootInlineBoxPaintWalker::SVGRootInlineBoxPaintWalker):
        (WebCore::SVGRootInlineBox::paint):
        * svg/SVGFEBlendElement.cpp:
        (WebCore::SVGFEBlendElement::build):
        * svg/SVGFEBlendElement.h:
        * svg/SVGFEColorMatrixElement.cpp:
        (WebCore::SVGFEColorMatrixElement::build):
        * svg/SVGFEColorMatrixElement.h:
        * svg/SVGFEComponentTransferElement.cpp:
        (WebCore::SVGFEComponentTransferElement::build):
        * svg/SVGFEComponentTransferElement.h:
        * svg/SVGFECompositeElement.cpp:
        (WebCore::SVGFECompositeElement::build):
        * svg/SVGFECompositeElement.h:
        * svg/SVGFEDiffuseLightingElement.cpp:
        (WebCore::SVGFEDiffuseLightingElement::build):
        * svg/SVGFEDiffuseLightingElement.h:
        * svg/SVGFEDisplacementMapElement.cpp:
        (WebCore::SVGFEDisplacementMapElement::build):
        * svg/SVGFEDisplacementMapElement.h:
        * svg/SVGFEFloodElement.cpp:
        (WebCore::SVGFEFloodElement::build):
        * svg/SVGFEFloodElement.h:
        * svg/SVGFEGaussianBlurElement.cpp:
        (WebCore::SVGFEGaussianBlurElement::build):
        * svg/SVGFEGaussianBlurElement.h:
        * svg/SVGFEImageElement.cpp:
        (WebCore::SVGFEImageElement::build):
        * svg/SVGFEImageElement.h:
        * svg/SVGFEMergeElement.cpp:
        (WebCore::SVGFEMergeElement::build):
        * svg/SVGFEMergeElement.h:
        * svg/SVGFEMorphologyElement.cpp:
        (WebCore::SVGFEMorphologyElement::build):
        * svg/SVGFEMorphologyElement.h:
        * svg/SVGFEOffsetElement.cpp:
        (WebCore::SVGFEOffsetElement::build):
        * svg/SVGFEOffsetElement.h:
        * svg/SVGFESpecularLightingElement.cpp:
        (WebCore::SVGFESpecularLightingElement::build):
        * svg/SVGFESpecularLightingElement.h:
        * svg/SVGFETileElement.cpp:
        (WebCore::SVGFETileElement::build):
        * svg/SVGFETileElement.h:
        * svg/SVGFETurbulenceElement.cpp:
        (WebCore::SVGFETurbulenceElement::build):
        * svg/SVGFETurbulenceElement.h:
        (WebCore::):
        * svg/SVGFilterElement.cpp:
        (WebCore::SVGFilterElement::createRenderer):
        * svg/SVGFilterElement.h:
        * svg/SVGFilterPrimitiveStandardAttributes.cpp:
        (WebCore::SVGFilterPrimitiveStandardAttributes::setStandardAttributes):
        * svg/SVGFilterPrimitiveStandardAttributes.h:
        (WebCore::SVGFilterPrimitiveStandardAttributes::isFilterEffect):
        (WebCore::SVGFilterPrimitiveStandardAttributes::rendererIsNeeded):
        * svg/SVGStyledElement.cpp:
        (WebCore::SVGStyledElement::invalidateResources):
        * svg/graphics/SVGResource.cpp:
        * svg/graphics/SVGResource.h:
        (WebCore::):
        (WebCore::SVGResource::isPaintServer):
        * svg/graphics/SVGResourceFilter.cpp: Removed.
        * svg/graphics/SVGResourceFilter.h: Removed.
        * svg/graphics/filters/SVGFEDisplacementMap.cpp:
        (WebCore::FEDisplacementMap::externalRepresentation):
        * svg/graphics/filters/SVGFilterBuilder.h:
        (WebCore::SVGFilterBuilder::namedEffects):

2010-04-20  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r57880.
        http://trac.webkit.org/changeset/57880
        https://bugs.webkit.org/show_bug.cgi?id=37846

        Broke several bots, FEDisplacmentMap dumps includes pointers,
        no one noticed. Dirk will upload a new patch later. (Requested
        by WildFox on #webkit).

        * Android.mk:
        * GNUmakefile.am:
        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * rendering/RenderPath.cpp:
        (WebCore::RenderPath::paint):
        * rendering/RenderSVGContainer.cpp:
        (WebCore::RenderSVGContainer::selfWillPaint):
        (WebCore::RenderSVGContainer::paint):
        * rendering/RenderSVGImage.cpp:
        (WebCore::RenderSVGImage::paint):
        * rendering/RenderSVGResource.h:
        (WebCore::):
        * rendering/RenderSVGResourceClipper.cpp:
        (WebCore::RenderSVGResourceClipper::applyResource):
        * rendering/RenderSVGResourceClipper.h:
        * rendering/RenderSVGResourceFilter.cpp: Removed.
        * rendering/RenderSVGResourceFilter.h: Removed.
        * rendering/RenderSVGResourceMarker.h:
        (WebCore::RenderSVGResourceMarker::applyResource):
        * rendering/RenderSVGResourceMasker.cpp:
        (WebCore::RenderSVGResourceMasker::applyResource):
        * rendering/RenderSVGResourceMasker.h:
        * rendering/RenderSVGRoot.cpp:
        (WebCore::RenderSVGRoot::selfWillPaint):
        (WebCore::RenderSVGRoot::paint):
        * rendering/RenderSVGText.cpp:
        * rendering/SVGRenderSupport.cpp:
        (WebCore::SVGRenderBase::prepareToRenderSVGContent):
        (WebCore::SVGRenderBase::finishRenderSVGContent):
        (WebCore::SVGRenderBase::filterBoundingBoxForRenderer):
        (WebCore::deregisterFromResources):
        * rendering/SVGRenderSupport.h:
        * rendering/SVGRenderTreeAsText.cpp:
        (WebCore::writeStyle):
        (WebCore::writeSVGResource):
        (WebCore::writeResources):
        (WebCore::writeRenderResources):
        * rendering/SVGRootInlineBox.cpp:
        (WebCore::SVGRootInlineBoxPaintWalker::SVGRootInlineBoxPaintWalker):
        (WebCore::SVGRootInlineBox::paint):
        * svg/SVGFEBlendElement.cpp:
        (WebCore::SVGFEBlendElement::build):
        * svg/SVGFEBlendElement.h:
        * svg/SVGFEColorMatrixElement.cpp:
        (WebCore::SVGFEColorMatrixElement::build):
        * svg/SVGFEColorMatrixElement.h:
        * svg/SVGFEComponentTransferElement.cpp:
        (WebCore::SVGFEComponentTransferElement::build):
        * svg/SVGFEComponentTransferElement.h:
        * svg/SVGFECompositeElement.cpp:
        (WebCore::SVGFECompositeElement::build):
        * svg/SVGFECompositeElement.h:
        * svg/SVGFEDiffuseLightingElement.cpp:
        (WebCore::SVGFEDiffuseLightingElement::build):
        * svg/SVGFEDiffuseLightingElement.h:
        * svg/SVGFEDisplacementMapElement.cpp:
        (WebCore::SVGFEDisplacementMapElement::build):
        * svg/SVGFEDisplacementMapElement.h:
        * svg/SVGFEFloodElement.cpp:
        (WebCore::SVGFEFloodElement::build):
        * svg/SVGFEFloodElement.h:
        * svg/SVGFEGaussianBlurElement.cpp:
        (WebCore::SVGFEGaussianBlurElement::build):
        * svg/SVGFEGaussianBlurElement.h:
        * svg/SVGFEImageElement.cpp:
        (WebCore::SVGFEImageElement::build):
        * svg/SVGFEImageElement.h:
        * svg/SVGFEMergeElement.cpp:
        (WebCore::SVGFEMergeElement::build):
        * svg/SVGFEMergeElement.h:
        * svg/SVGFEMorphologyElement.cpp:
        (WebCore::SVGFEMorphologyElement::build):
        * svg/SVGFEMorphologyElement.h:
        * svg/SVGFEOffsetElement.cpp:
        (WebCore::SVGFEOffsetElement::build):
        * svg/SVGFEOffsetElement.h:
        * svg/SVGFESpecularLightingElement.cpp:
        (WebCore::SVGFESpecularLightingElement::build):
        * svg/SVGFESpecularLightingElement.h:
        * svg/SVGFETileElement.cpp:
        (WebCore::SVGFETileElement::build):
        * svg/SVGFETileElement.h:
        * svg/SVGFETurbulenceElement.cpp:
        (WebCore::SVGFETurbulenceElement::build):
        * svg/SVGFETurbulenceElement.h:
        (WebCore::):
        * svg/SVGFilterElement.cpp:
        (WebCore::SVGFilterElement::buildFilter):
        (WebCore::SVGFilterElement::canvasResource):
        * svg/SVGFilterElement.h:
        (WebCore::SVGFilterElement::rendererIsNeeded):
        * svg/SVGFilterPrimitiveStandardAttributes.cpp:
        (WebCore::SVGFilterPrimitiveStandardAttributes::setStandardAttributes):
        * svg/SVGFilterPrimitiveStandardAttributes.h:
        (WebCore::SVGFilterPrimitiveStandardAttributes::isFilterEffect):
        (WebCore::SVGFilterPrimitiveStandardAttributes::rendererIsNeeded):
        * svg/SVGStyledElement.cpp:
        (WebCore::SVGStyledElement::invalidateResources):
        * svg/graphics/SVGResource.cpp:
        * svg/graphics/SVGResource.h:
        (WebCore::):
        (WebCore::SVGResource::isFilter):
        * svg/graphics/SVGResourceFilter.cpp: Added.
        (WebCore::SVGResourceFilter::SVGResourceFilter):
        (WebCore::SVGResourceFilter::~SVGResourceFilter):
        (WebCore::SVGResourceFilter::filterBoundingBox):
        (WebCore::shouldProcessFilter):
        (WebCore::SVGResourceFilter::addFilterEffect):
        (WebCore::SVGResourceFilter::fitsInMaximumImageSize):
        (WebCore::SVGResourceFilter::prepareFilter):
        (WebCore::SVGResourceFilter::applyFilter):
        (WebCore::SVGResourceFilter::externalRepresentation):
        (WebCore::getFilterById):
        * svg/graphics/SVGResourceFilter.h: Added.
        (WebCore::SVGResourceFilter::create):
        (WebCore::SVGResourceFilter::resourceType):
        (WebCore::SVGResourceFilter::setFilterResolution):
        (WebCore::SVGResourceFilter::setHasFilterResolution):
        (WebCore::SVGResourceFilter::filterBoundingBoxMode):
        (WebCore::SVGResourceFilter::setFilterBoundingBoxMode):
        (WebCore::SVGResourceFilter::effectBoundingBoxMode):
        (WebCore::SVGResourceFilter::setEffectBoundingBoxMode):
        (WebCore::SVGResourceFilter::filterRect):
        (WebCore::SVGResourceFilter::setFilterRect):
        (WebCore::SVGResourceFilter::scaleX):
        (WebCore::SVGResourceFilter::scaleY):
        (WebCore::SVGResourceFilter::setFilterBoundingBox):
        (WebCore::SVGResourceFilter::builder):
        * svg/graphics/filters/SVGFilterBuilder.h:

2010-04-20  Dirk Schulze  <krit@webkit.org>

        Reviewed by Nikolas Zimmermann.

        SVGResourceFilter needs to be moved to under Renderers
        https://bugs.webkit.org/show_bug.cgi?id=35320

        This patch adds a renderer for SVGFilterElement. SVGFilterElement is now independent
        from the SVGResources.
        A clean-up solves the dependencies between SVGFilterElement, the filter primitives
        and SVGResources. This shall make the filter code more readable and better maintable.
        The Filter primitives get dumped now, as long as they have externalRepresentation
        implemented.

        No behavior changes, so no new tests were added.

        * Android.mk:
        * GNUmakefile.am:
        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * rendering/RenderPath.cpp:
        (WebCore::RenderPath::paint):
        * rendering/RenderSVGContainer.cpp:
        (WebCore::RenderSVGContainer::selfWillPaint):
        (WebCore::RenderSVGContainer::paint):
        * rendering/RenderSVGImage.cpp:
        (WebCore::RenderSVGImage::paint):
        * rendering/RenderSVGResource.h:
        (WebCore::):
        * rendering/RenderSVGResourceClipper.cpp:
        (WebCore::RenderSVGResourceClipper::applyResource):
        * rendering/RenderSVGResourceClipper.h:
        * rendering/RenderSVGResourceFilter.cpp: Added.
        (WebCore::RenderSVGResourceFilter::RenderSVGResourceFilter):
        (WebCore::RenderSVGResourceFilter::~RenderSVGResourceFilter):
        (WebCore::RenderSVGResourceFilter::invalidateClients):
        (WebCore::RenderSVGResourceFilter::invalidateClient):
        (WebCore::RenderSVGResourceFilter::buildPrimitives):
        (WebCore::RenderSVGResourceFilter::fitsInMaximumImageSize):
        (WebCore::RenderSVGResourceFilter::applyResource):
        (WebCore::RenderSVGResourceFilter::postApplyResource):
        (WebCore::RenderSVGResourceFilter::resourceBoundingBox):
        * rendering/RenderSVGResourceFilter.h: Added.
        (WebCore::FilterData::FilterData):
        (WebCore::RenderSVGResourceFilter::renderName):
        (WebCore::RenderSVGResourceFilter::filterUnits):
        (WebCore::RenderSVGResourceFilter::primitiveUnits):
        (WebCore::RenderSVGResourceFilter::resourceType):
        * rendering/RenderSVGResourceMarker.h:
        (WebCore::RenderSVGResourceMarker::applyResource):
        * rendering/RenderSVGResourceMasker.cpp:
        (WebCore::RenderSVGResourceMasker::applyResource):
        * rendering/RenderSVGResourceMasker.h:
        * rendering/RenderSVGRoot.cpp:
        (WebCore::RenderSVGRoot::selfWillPaint):
        (WebCore::RenderSVGRoot::paint):
        * rendering/RenderSVGText.cpp:
        * rendering/SVGRenderSupport.cpp:
        (WebCore::SVGRenderBase::prepareToRenderSVGContent):
        (WebCore::SVGRenderBase::finishRenderSVGContent):
        (WebCore::SVGRenderBase::filterBoundingBoxForRenderer):
        (WebCore::deregisterFromResources):
        * rendering/SVGRenderSupport.h:
        * rendering/SVGRenderTreeAsText.cpp:
        (WebCore::writeStyle):
        (WebCore::writeSVGResource):
        (WebCore::writeResources):
        (WebCore::writeRenderResources):
        * rendering/SVGRootInlineBox.cpp:
        (WebCore::SVGRootInlineBoxPaintWalker::SVGRootInlineBoxPaintWalker):
        (WebCore::SVGRootInlineBox::paint):
        * svg/SVGFEBlendElement.cpp:
        (WebCore::SVGFEBlendElement::build):
        * svg/SVGFEBlendElement.h:
        * svg/SVGFEColorMatrixElement.cpp:
        (WebCore::SVGFEColorMatrixElement::build):
        * svg/SVGFEColorMatrixElement.h:
        * svg/SVGFEComponentTransferElement.cpp:
        (WebCore::SVGFEComponentTransferElement::build):
        * svg/SVGFEComponentTransferElement.h:
        * svg/SVGFECompositeElement.cpp:
        (WebCore::SVGFECompositeElement::build):
        * svg/SVGFECompositeElement.h:
        * svg/SVGFEDiffuseLightingElement.cpp:
        (WebCore::SVGFEDiffuseLightingElement::build):
        * svg/SVGFEDiffuseLightingElement.h:
        * svg/SVGFEDisplacementMapElement.cpp:
        (WebCore::SVGFEDisplacementMapElement::build):
        * svg/SVGFEDisplacementMapElement.h:
        * svg/SVGFEFloodElement.cpp:
        (WebCore::SVGFEFloodElement::build):
        * svg/SVGFEFloodElement.h:
        * svg/SVGFEGaussianBlurElement.cpp:
        (WebCore::SVGFEGaussianBlurElement::build):
        * svg/SVGFEGaussianBlurElement.h:
        * svg/SVGFEImageElement.cpp:
        (WebCore::SVGFEImageElement::build):
        * svg/SVGFEImageElement.h:
        * svg/SVGFEMergeElement.cpp:
        (WebCore::SVGFEMergeElement::build):
        * svg/SVGFEMergeElement.h:
        * svg/SVGFEMorphologyElement.cpp:
        (WebCore::SVGFEMorphologyElement::build):
        * svg/SVGFEMorphologyElement.h:
        * svg/SVGFEOffsetElement.cpp:
        (WebCore::SVGFEOffsetElement::build):
        * svg/SVGFEOffsetElement.h:
        * svg/SVGFESpecularLightingElement.cpp:
        (WebCore::SVGFESpecularLightingElement::build):
        * svg/SVGFESpecularLightingElement.h:
        * svg/SVGFETileElement.cpp:
        (WebCore::SVGFETileElement::build):
        * svg/SVGFETileElement.h:
        * svg/SVGFETurbulenceElement.cpp:
        (WebCore::SVGFETurbulenceElement::build):
        * svg/SVGFETurbulenceElement.h:
        (WebCore::):
        * svg/SVGFilterElement.cpp:
        (WebCore::SVGFilterElement::createRenderer):
        * svg/SVGFilterElement.h:
        * svg/SVGFilterPrimitiveStandardAttributes.cpp:
        (WebCore::SVGFilterPrimitiveStandardAttributes::setStandardAttributes):
        * svg/SVGFilterPrimitiveStandardAttributes.h:
        (WebCore::SVGFilterPrimitiveStandardAttributes::isFilterEffect):
        (WebCore::SVGFilterPrimitiveStandardAttributes::rendererIsNeeded):
        * svg/SVGStyledElement.cpp:
        (WebCore::SVGStyledElement::invalidateResources):
        * svg/graphics/SVGResource.cpp:
        * svg/graphics/SVGResource.h:
        (WebCore::):
        (WebCore::SVGResource::isPaintServer):
        * svg/graphics/SVGResourceFilter.cpp: Removed.
        * svg/graphics/SVGResourceFilter.h: Removed.
        * svg/graphics/filters/SVGFilterBuilder.h:
        (WebCore::SVGFilterBuilder::namedEffects):

2010-04-20  Gavin Barraclough  <barraclough@apple.com>

        Rubber stamped by Maciej Stachowiak (relanding r57829).
        Added missing JS_EXPORTDATA

        * ForwardingHeaders/wtf/WTFThreadData.h: Copied from WebCore/ForwardingHeaders/wtf/WTFThreadData.h.
        * platform/ThreadGlobalData.cpp:
        (WebCore::ThreadGlobalData::ThreadGlobalData):
        (WebCore::ThreadGlobalData::~ThreadGlobalData):
        * platform/ThreadGlobalData.h:
        (WebCore::ThreadGlobalData::eventNames):
        * platform/text/AtomicString.cpp:
        (WebCore::AtomicStringTable::create):
        (WebCore::AtomicStringTable::table):
        (WebCore::AtomicStringTable::destroy):
        (WebCore::stringTable):

2010-04-20  No'am Rosenthal  <noam.rosenthal@nokia.com>

        Reviewed by Antti Koivisto.

        [Qt] GraphicsLayer: support fill-modes
        https://bugs.webkit.org/show_bug.cgi?id=36216
        Implement the CSS-animation "fill mode" concept in GraphicsLayerQt. The concept
        enables a key-frame animation to go to the animation's starting point before the delay,
        and/or to stay at the animation's ending point after its ended, without reverting to the default
        value.
        We do that by manually setting the value to keyframe-0 before the delay if fill-mode is backwards/both,
        and manually modifying the default value to the animated value as we animate, with fill-mode forwards/both.

        * platform/graphics/qt/GraphicsLayerQt.cpp:
        (WebCore::AnimationQtBase::AnimationQtBase):
        (WebCore::TransformAnimationQt::~TransformAnimationQt):
        (WebCore::TransformAnimationQt::applyFrame):
        (WebCore::GraphicsLayerQt::addAnimation):

2010-04-19  Leandro Pereira  <leandro@profusion.mobi>

        Reviewed by David Hyatt.

        Add missing dummy implementations in PluginPackageNone and PluginViewNone.
        http://webkit.org/b/37478

        * plugins/PluginPackageNone.cpp:
        (WebCore::PluginPackage::NPVersion): Add dummy implementation.
        * plugins/PluginViewNone.cpp:
        (WebCore::PluginView::handleFocusInEvent): Add dummy implementation.
        (WebCore::PluginView::handleFocusOutEvent): Add dummy implementation.

2010-04-19  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Geoff Garen.

        Clean up RenderPart/RenderPartObject/RenderFrame/RenderEmbeddedObject
        https://bugs.webkit.org/show_bug.cgi?id=37741

        Move m_hasFallbackContent from RenderPart to RenderEmbeddedObject,
        since it's only used for <object> fallback.

        * rendering/RenderEmbeddedObject.cpp:
        (WebCore::RenderEmbeddedObject::RenderEmbeddedObject):
        * rendering/RenderEmbeddedObject.h:
        (WebCore::RenderEmbeddedObject::hasFallbackContent):
        * rendering/RenderPart.cpp:
        (WebCore::RenderPart::RenderPart):
        * rendering/RenderPart.h:

2010-04-19  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Darin Adler.

        Clean up RenderPart/RenderPartObject/RenderFrame/RenderEmbeddedObject
        https://bugs.webkit.org/show_bug.cgi?id=37741

        Add a new renderer for iframes, named RenderIFrame. Add a new shared base class
        between this and RenderFrame, called RenderFrameBase (following the existing HTMLFrameElementBase),
        and move code from RenderPart and RenderPartObject into these new classes.
        
        There should be no functionality difference with this change, so no new tests.
        
        Fixing up renderer names in the layout tests will be done in a later pass.
        
        Fix build systems to include the new files.
        
        * Android.mk:
        * GNUmakefile.am:
        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * html/HTMLIFrameElement.cpp:
        (WebCore::HTMLIFrameElement::createRenderer):
        * rendering/RenderEmbeddedObject.h:
        * rendering/RenderFrame.cpp:
        (WebCore::RenderFrame::RenderFrame):
        * rendering/RenderFrame.h:
        * rendering/RenderFrameBase.cpp: Added.
        (WebCore::RenderFrameBase::RenderFrameBase):
        (WebCore::RenderFrameBase::layoutWithFlattening):
        * rendering/RenderFrameBase.h: Added.
        * rendering/RenderIFrame.cpp: Added.
        (WebCore::RenderIFrame::RenderIFrame):
        (WebCore::RenderIFrame::calcHeight):
        (WebCore::RenderIFrame::calcWidth):
        (WebCore::RenderIFrame::flattenFrame):
        (WebCore::RenderIFrame::layout):
        * rendering/RenderIFrame.h: Added.
        (WebCore::RenderIFrame::renderName):
        * rendering/RenderPart.cpp:
        * rendering/RenderPart.h:
        * rendering/RenderPartObject.cpp:
        * rendering/RenderPartObject.h:

2010-04-19  Dumitru Daniliuc  <dumi@chromium.org>

        Reviewed by Geoffrey Garen.

        Bindings clean-up.
        https://bugs.webkit.org/show_bug.cgi?id=37833

        Move some WebSQLDatabases logic out of the bindings into
        DOMWindow.cpp where it should be.

        * bindings/js/JSDOMWindowCustom.cpp:
        (WebCore::JSDOMWindow::openDatabase):
        * bindings/v8/custom/V8DOMWindowCustom.cpp:
        (WebCore::V8DOMWindow::openDatabaseCallback):
        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::openDatabase):

2010-04-19  Kevin Ollivier  <kevino@theolliviers.com>

        Fix the Mac builders for now by restoring the keepAlive function.

        * plugins/PluginViewNone.cpp:
        (WebCore::PluginView::keepAlive):

2010-04-19  Kevin Ollivier  <kevino@theolliviers.com>

        [wx] Build fix, remove a method that has been moved to PluginView.cpp.

        * plugins/PluginViewNone.cpp:

2010-04-19  Gavin Barraclough  <barraclough@apple.com>

        Reviewed by NOBODY (rolling out r57829).
        This broke windows.

        * ForwardingHeaders/wtf/WTFThreadData.h: Removed.
        * platform/ThreadGlobalData.cpp:
        (WebCore::ThreadGlobalData::ThreadGlobalData):
        (WebCore::ThreadGlobalData::~ThreadGlobalData):
        * platform/ThreadGlobalData.h:
        (WebCore::ThreadGlobalData::atomicStringTable):
        * platform/text/AtomicString.cpp:
        (WebCore::stringTable):

2010-04-19  Mark Rowe  <mrowe@apple.com>

        Build fix.

        * platform/graphics/mac/GraphicsContext3DMac.cpp:

2010-04-19  Chris Fleizach  <cfleizach@apple.com>

        Reviewed by Beth Dakin.

        AX: aria-haspopup needs to be exposed
        https://bugs.webkit.org/show_bug.cgi?id=37808

        Test: platform/mac/accessibility/element-haspopup.html

        * accessibility/AccessibilityObject.h:
        (WebCore::AccessibilityObject::ariaHasPopup):
        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::ariaHasPopup):
        (WebCore::AccessibilityRenderObject::determineAriaRoleAttribute):
        * accessibility/AccessibilityRenderObject.h:
        * accessibility/mac/AccessibilityObjectWrapper.mm:
        (-[AccessibilityObjectWrapper additionalAccessibilityAttributeNames]):
        (-[AccessibilityObjectWrapper accessibilityAttributeValue:]):

2010-04-19  Anders Carlsson  <andersca@apple.com>

        Reviewed by Sam Weinig.

        Fix a crash when rendering <select> elements with WebKit2.

        * rendering/RenderThemeMac.mm:
        (WebCore::RenderThemeMac::paintMenuList):
        Set the current NSGraphicsContext before calling out to AppKit, otherwise the current graphics context
        could point to a CGContext whose memory has been freed.

2010-04-08  Dimitri Glazkov  <dglazkov@chromium.org>

        Reviewed by Darin Adler.

        Manipulating document fragment members while adding it to tree may result in loss of tree integrity.
        https://bugs.webkit.org/show_bug.cgi?id=36031

        Changes the logic of appending/inserting document fragment to first stashing all of its children
        to a vector, then processing the vector. This avoids ghastliness that would be caused by mutation
        events mucking with the document fragment while it's being appended/inserted.

        Test: fast/dom/Node/fragment-mutation.html

        * dom/ContainerNode.cpp:
        (WebCore::targetNodes): Added method to populate a vector of nodes (targets) to be used in
            inserting/appending operation.
        (WebCore::ContainerNode::insertBefore): Changed to use vector-based iteration.
        (WebCore::ContainerNode::appendChild): Ditto.
        * dom/Node.cpp:
        (WebCore::Node::checkReplaceChild): Cleaned up comments.
        (WebCore::Node::checkAddChild): Ditto.

2010-04-19  Eric Carlson  <eric.carlson@apple.com>

        Reviewed by Simon Fraser.

        Fix regression introduced in r57820.

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::loadNextSourceChild): Create a new MediaPlayer instead of
        just setting a URL on the one used for the previous <source> element. This restores
        the behavior prior to the changes for https://bugs.webkit.org/show_bug.cgi?id=37728.

2010-04-19  Gavin Barraclough  <barraclough@apple.com>

        Reviewed by Sam Weinig.

        https://bugs.webkit.org/show_bug.cgi?id=37745
        Move string uniquing tables to (new) WTFThreadData class.

        Remove AtomicString's dependency on ThreadGlobalData so that we can move
        WebCore's string classes up to WTF.

        * ForwardingHeaders/wtf/WTFThreadData.h: Added.
        * platform/ThreadGlobalData.cpp: Remove m_atomicStringTable, all wtfThreadData() to ensure threadsafely initialized.
        (WebCore::ThreadGlobalData::ThreadGlobalData):
        (WebCore::ThreadGlobalData::~ThreadGlobalData):
        * platform/ThreadGlobalData.h: Remove m_atomicStringTable.
        (WebCore::ThreadGlobalData::eventNames):
        * platform/text/AtomicString.cpp:
        (WebCore::AtomicStringTable::create):
        (WebCore::AtomicStringTable::table):
        (WebCore::AtomicStringTable::destroy):
        (WebCore::stringTable): Access the AtomicStringTable on wtfThreadData() rather then threadGlobalData().

2010-04-19  Ada Chan  <adachan@apple.com>

        Build fix: wrap Settings::setLocalStorageQuota() and Settings::setSessionStorageQuota()
        in #if ENABLE(DOM_STORAGE).

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

2010-04-19  Dave Moore  <davemoore@chromium.org>

        Reviewed by Dimitri Glazkov.

        Added notification when the favicons for a page are changed
        from a script.
        The Document object will notify the frame loader, which will
        notify the client. Implementations of FrameLoaderClient will
        have to add one method; dispatchDidChangeIcons().

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

        Test: fast/dom/icon-url-property.html

        * dom/Document.cpp:
        (WebCore::Document::setIconURL):
        * loader/DocumentLoader.cpp:
        (WebCore::DocumentLoader::setIconURL):
        * loader/DocumentLoader.h:
        (WebCore::DocumentLoader::iconURL):
        * loader/EmptyClients.h:
        (WebCore::EmptyFrameLoaderClient::dispatchDidChangeIcons):
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::setIconURL):
        (WebCore::FrameLoader::didChangeIcons):
        * loader/FrameLoader.h:
        * loader/FrameLoaderClient.h:

2010-04-19  Ada Chan  <adachan@apple.com>

        Reviewed by Jeremy Orlow.

        https://bugs.webkit.org/show_bug.cgi?id=37717
        Allow clients concerned with memory consumption to set a quota on session storage
        since the memory used won't be released until the Page is destroyed.
        The default is noQuota, which matches the current behavior.

        * WebCore.base.exp: Export Settings::setSessionStorageQuota().
        * page/Page.cpp:
        (WebCore::Page::sessionStorage):
        * page/Settings.cpp:
        (WebCore::Settings::Settings):
        (WebCore::Settings::setSessionStorageQuota):
        * page/Settings.h:
        (WebCore::Settings::sessionStorageQuota):
        * storage/StorageNamespace.cpp:
        (WebCore::StorageNamespace::sessionStorageNamespace):
        * storage/StorageNamespace.h:
        * storage/StorageNamespaceImpl.cpp:
        (WebCore::StorageNamespaceImpl::sessionStorageNamespace):
        * storage/StorageNamespaceImpl.h:

2010-04-19  Eric Carlson  <eric.carlson@apple.com>

        Reviewed by Simon Fraser.

        Setting media element 'src' attribute should trigger immediate load
        https://bugs.webkit.org/show_bug.cgi?id=37728

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::attributeChanged): Schedule load every time 'src' attribute
        changes unless it is missing.
        (WebCore::HTMLMediaElement::prepareForLoad): Include steps 3 to 6 from loadInternal.
        (WebCore::HTMLMediaElement::loadInternal): Steps 3 to 6 are now in prepareForLoad.
        (WebCore::HTMLMediaElement::loadResource): MediaPlayer is now allocated in prepareForLoad
        so the previously loading file, if any, is cancelled there.

2010-04-19  Jocelyn Turcotte  <jocelyn.turcotte@nokia.com>

        Reviewed by Simon Hausmann.

        [Qt] Fix compilation against namespaced Qt.

        * platform/graphics/GraphicsLayer.h:
        * platform/graphics/Tile.h:
        * platform/graphics/qt/MediaPlayerPrivateQt.h:
        * platform/network/qt/NetworkStateNotifierPrivate.h:

2010-04-19  Balazs Kelemen  <kb@inf.u-szeged.hu>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] Destroy SharedTimerQt before destruction of QCoreApplication.

        To avoid unsafe situations caused by running WebCore code (through firing timers) when destruction of QCoreApplication
        has been started, we should explicitly destroy the SharedTimerQt instance on application exit.
        We can achieve that through installing a self-destroying slot for the QCoreApplication::aboutToQuit() signal
        into the SharedTimerQt instance.

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

        No functional change so no new tests.

        * platform/qt/SharedTimerQt.cpp:
        (WebCore::SharedTimerQt::SharedTimerQt):
        (WebCore::SharedTimerQt::destroy):
        (WebCore::SharedTimerQt::inst):

2010-04-19  Dan Bernstein  <mitz@apple.com>

        Reviewed by Darin Adler.

        Make the fix for <rdar://problem/7873647> from r57759 more robust.

        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::updateHoverActiveState): Use RefPtrs for the Nodes.

2010-04-19  Yury Semikhatsky  <yurys@chromium.org>

        Unreviewed. Chromium build fix.

        * bindings/v8/JavaScriptCallFrame.h:

2010-04-19  Yury Semikhatsky  <yurys@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: implement JavaScriptCallFrame that works for v8.
        Implementing this binding for v8 allows to make evaluations on
        call frames and protects access to the debugger context from
        inspected context.

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

        * WebCore.gyp/WebCore.gyp:
        * WebCore.gypi:
        * bindings/js/JSJavaScriptCallFrameCustom.cpp:
        (WebCore::JSJavaScriptCallFrame::scopeType):
        * bindings/v8/JavaScriptCallFrame.cpp: Added.
        (WebCore::JavaScriptCallFrame::JavaScriptCallFrame):
        (WebCore::JavaScriptCallFrame::~JavaScriptCallFrame):
        (WebCore::JavaScriptCallFrame::caller):
        (WebCore::JavaScriptCallFrame::sourceID):
        (WebCore::JavaScriptCallFrame::line):
        (WebCore::JavaScriptCallFrame::functionName):
        (WebCore::JavaScriptCallFrame::scopeChain):
        (WebCore::JavaScriptCallFrame::scopeType):
        (WebCore::JavaScriptCallFrame::thisObject):
        (WebCore::JavaScriptCallFrame::evaluate):
        * bindings/v8/JavaScriptCallFrame.h: Added.
        (WebCore::JavaScriptCallFrame::create):
        * bindings/v8/ScriptDebugServer.cpp:
        (WebCore::ScriptDebugServer::currentCallFrame):
        * bindings/v8/ScriptDebugServer.h:
        * bindings/v8/custom/V8InjectedScriptHostCustom.cpp:
        (WebCore::V8InjectedScriptHost::currentCallFrameCallback):
        * bindings/v8/custom/V8JavaScriptCallFrameCustom.cpp: Added.
        (WebCore::V8JavaScriptCallFrame::evaluateCallback):
        (WebCore::V8JavaScriptCallFrame::scopeChainAccessorGetter):
        (WebCore::V8JavaScriptCallFrame::scopeTypeCallback):
        (WebCore::V8JavaScriptCallFrame::thisObjectAccessorGetter):
        (WebCore::V8JavaScriptCallFrame::typeAccessorGetter):
        * inspector/JavaScriptCallFrame.idl:
        * inspector/front-end/InjectedScript.js:
        (injectedScriptConstructor.):

2010-04-19  Jessie Berlin  <jberlin@webkit.org>

        Rubber Stamped by Adam Roben

        Chromium Release Build Fix.

        * css/CSSSelector.cpp:
        (WebCore::CSSSelector::pseudoId):
        In the case where the DATALIST is not enabled, fall through to NOPSEUDO instead of omitting PseudoInputListButton entirely from the switch.

2010-04-19  Jessie Berlin  <jberlin@webkit.org>

        Reviewed by Dave Hyatt.

        First steps towards fixing bug 24021 - pseudo-element styles not accessible / retrievable via DOM methods.
        https://bugs.webkit.org/show_bug.cgi?id=24021

        Allows access to the computed styles for the pseudo-elements through the second argument to getComputedStyle.
        This approach does not provide the correct values for 'length' properties and does not work for the ':selection' pseudo-element and will instead return results similiar to those returned by Firefox. This approach also requires waiting until at least one iteration of a hardware accelerated composited animation to return the correct values for the "opacity" and "transform" properties of a pseudo-element associated with the element being animated.
        Those values need to be retrieved from the renderer for the pseudo-element as opposed to the cached RenderStyle for the element on which the pseudo-element is defined, which is further complicated by the fact that not all elements have renderers.

        Test: fast/css/getComputedStyle/getComputedStyle-with-pseudo-element.html

        * WebCore.base.exp:
        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::CSSComputedStyleDeclaration::CSSComputedStyleDeclaration):
        Parse the and store the pseudo-element specifier from the string provided by the user.
        (WebCore::CSSComputedStyleDeclaration::getFontSizeCSSValuePreferringKeyword):
        Get the computed style for the pseudo-element if it has been specified.
        (WebCore::CSSComputedStyleDeclaration::getPropertyCSSValue):
        Get the computed style for the pseudo-element if it has been specified, with a FIXME noting that the values returned for the "opacity" and "transform" properties of a pseudo-element associated with an element being animated and using hardware accelerated compositing will not be correct until after the first iteration of the animation.
        (WebCore::CSSComputedStyleDeclaration::length):
        Get the computed style for the pseudo-element if it has been specified.
        (WebCore::CSSComputedStyleDeclaration::cssPropertyMatches):
        Ditto.
        * css/CSSComputedStyleDeclaration.h:
        (WebCore::computedStyle):
        Take into consideration the pseudo-element.

        * css/CSSSelector.cpp:
        (WebCore::CSSSelector::pseudoId):
        Return the PseudoId that corresponds to the given PseudoType. If there is no corresponding PseudoId, returns NOPSEUDO.
        (WebCore::nameToPseudoTypeMap):
        Create and return the mapping between string names and PseudoTypes.
        (WebCore::CSSSelector::parsePseudoType):
        Parse and the given string into a PseudoType.
        (WebCore::CSSSelector::extractPseudoType):
        Refactored to use parsePseudoType.
        * css/CSSSelector.h:

        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::SelectorChecker::checkOneSelector):
        Refactored to use pseudoId.

        * dom/Element.cpp:
        (WebCore::Element::computedStyle):
        If the pseudo-element is specified, then return the cached RenderStyle for that PseudoId. Added a FIXME to find the actual renders of the pseudo-elements instead of just the cached RenderStyle of the RenderStyle for the associated element.
        * dom/Element.h:
        (WebCore::Element::virtualComputedStyle):
        Because Element::computedStyle is used so often, don't make it virtual. Instead, provide a virtualComputedStyle method in the Node.h class andmake computedStyle non-virtual. That way the Element version and the Node version of computedStyle will have the same name and look the same at the call site, but the Element version will be more efficient.

        * dom/Node.h:
        (WebCore::Node::computedStyle):
        Ditto.
        * dom/Node.cpp:
        (WebCore::Node::virtualComputedStyle):
        Get the computed style for the pseudo-element if it has been specified.

        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::getComputedStyle):
        Ditto.

2010-04-18  Simon Hausmann  <simon.hausmann@nokia.com>

        Reviewed by Laszlo Gombos.

        [Qt] Fix JavaScriptCore's include path for WinCE builds

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

        * WebCore.pro:

2010-04-17  Alexey Proskuryakov  <ap@apple.com>

        Reviewed by Adam Barth.

        https://bugs.webkit.org/show_bug.cgi?id=37720
        <rdar://problem/7873752> HTMLFrameSetElement-window-eventListener-attributes.html sometimes
        crashes on SnowLeopard Release

        Tests: 
        * fast/dom/Window/HTMLBodyElement-window-eventListener-attributes.html:
        * fast/dom/Window/HTMLFrameSetElement-window-eventListener-attributes.html:

        * bindings/scripts/CodeGeneratorJS.pm: Use global object as a wrapper for window event
        listeners set via document.body. The body wrapper can go away if nothing else references it.

        * html/HTMLBodyElement.idl: Override listeners that exist on Element with custom implementations,
        because we need to use window object as a wrapper, not the element. Marked all window event
        listeners as such for code generator.

        * html/HTMLFrameSetElement.idl: Ditto.

2010-04-17  Juan C. Montemayor  <jmonte03@cs.tufts.edu>

        Reviewed by Joseph Pecoraro.

        Databases pane doesn't recognize table creation/deletion
        https://bugs.webkit.org/show_bug.cgi?id=20219

        * inspector/front-end/DatabaseQueryView.js:
        (WebInspector.DatabaseQueryView.prototype._queryFinished):

2010-04-17  Yaar Schnitman  <yaar@chromium.org>

        Reviewed by Adam Barth.

        Auto-generate V8 bindings for canvas.* overloads
        https://bugs.webkit.org/show_bug.cgi?id=37453

        * bindings/v8/custom/V8CanvasRenderingContext2DCustom.cpp: Deleted custom code that is now auto-generated.
        * bindings/scripts/CodeGeneratorV8.pm: Not generating custom signatures for overloaded methods and accepting Object as a string input.
        * html/canvas/CanvasRenderingContext2D.cpp:
        (WebCore::CanvasRenderingContext2D::drawImage): Added missing 9-arguments overloads for drawImage.
        * html/canvas/CanvasRenderingContext2D.h: 
        * html/canvas/CanvasRenderingContext2D.idl: Overloaded methods defined (V8 only).

2010-04-17  Yury Semikhatsky  <yurys@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: move JavaScriptCallFrame.{h,cpp} to WebCore/bindings/js

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

        * GNUmakefile.am:
        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSBindingsAllInOne.cpp:
        * bindings/js/JavaScriptCallFrame.cpp: Renamed from WebCore/inspector/JavaScriptCallFrame.cpp.
        (WebCore::JavaScriptCallFrame::JavaScriptCallFrame):
        (WebCore::JavaScriptCallFrame::caller):
        (WebCore::JavaScriptCallFrame::scopeChain):
        (WebCore::JavaScriptCallFrame::dynamicGlobalObject):
        (WebCore::JavaScriptCallFrame::functionName):
        (WebCore::JavaScriptCallFrame::type):
        (WebCore::JavaScriptCallFrame::thisObject):
        (WebCore::JavaScriptCallFrame::evaluate):
        * bindings/js/JavaScriptCallFrame.h: Renamed from WebCore/inspector/JavaScriptCallFrame.h.
        (WebCore::JavaScriptCallFrame::create):
        (WebCore::JavaScriptCallFrame::invalidate):
        (WebCore::JavaScriptCallFrame::isValid):
        (WebCore::JavaScriptCallFrame::sourceID):
        (WebCore::JavaScriptCallFrame::line):
        (WebCore::JavaScriptCallFrame::update):
        * inspector/InjectedScriptHost.h:
        * inspector/InspectorController.h:

2010-04-17  Vangelis Kokkevis  <vangelis@chromium.org>

        Reviewed by Dimitri Glazkov.

        Adding definition of GLES2Context class.
        https://bugs.webkit.org/show_bug.cgi?id=37541

        No new functionality implemented yet, no tests.

        * WebCore.gypi: Added GLES2Context.h
        * platform/chromium/GLES2Context.h: Added.

2010-04-17  Julien Chaffraix  <jchaffraix@webkit.org>

        Reviewed by Darin Adler.

        Crash while handling SVG font in the wrong namespace imported with @font-face
        https://bugs.webkit.org/show_bug.cgi?id=18862

        Test: fast/invalid/invalidSVGFont.html

        * loader/CachedFont.cpp:
        (WebCore::CachedFont::getSVGFontById): Make sure we really get an SVGFontElement by using
        getElementsByNameNS: the element factory chooses which element to create based on both
        localName and namespace.

2010-04-16  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r57770.
        http://trac.webkit.org/changeset/57770
        https://bugs.webkit.org/show_bug.cgi?id=37746

        8 test cases crashed (Requested by Ossy on #webkit).

        * platform/graphics/qt/GraphicsLayerQt.cpp:
        (WebCore::AnimationQtBase::AnimationQtBase):
        (WebCore::TransformAnimationQt::~TransformAnimationQt):
        (WebCore::TransformAnimationQt::applyFrame):
        (WebCore::OpacityAnimationQt::applyFrame):
        (WebCore::GraphicsLayerQt::addAnimation):

2010-04-16  Daniel Bates  <dbates@rim.com>

        Reviewed by Adam Treat.

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

        Adds support for the viewport meta tag. The code is largely derived in whole
        or in part from the WebCore-528.15 source published as part of the iPhone 3.1.3
        source code <http://www.opensource.apple.com/source/WebCore/WebCore-528.15/>.

        * Android.mk: Added file ViewportArguments.cpp.
        * GNUmakefile.am: Added files ViewportArguments.cpp and ViewportArguments.h.
        * WebCore.gypi: Ditto.
        * WebCore.pro: Ditto.
        * WebCore.vcproj/WebCore.vcproj: Ditto.
        * WebCore.xcodeproj/project.pbxproj: Ditto.
        * dom/Document.cpp:
        (WebCore::isSeparator): Added.
        (WebCore::Document::processArguments): Added.
        (WebCore::Document::processViewport): Added.
        * dom/Document.h:
        * dom/ViewportArguments.cpp: Added.
        (WebCore::setViewportFeature):
        (WebCore::viewportErrorMessageTemplate):
        (WebCore::viewportErrorMessageLevel):
        (WebCore::reportViewportWarning):
        * dom/ViewportArguments.h: Added.
        (WebCore::):
        (WebCore::ViewportArguments::):
        (WebCore::ViewportArguments::ViewportArguments):
        (WebCore::ViewportArguments::hasCustomArgument):
        * html/HTMLMetaElement.cpp:
        (WebCore::HTMLMetaElement::process): Modified to call Document::processViewport.
        * page/ChromeClient.h:
        (WebCore::ChromeClient::didReceiveViewportArguments): Added.

2010-04-16  No'am Rosenthal  <noam.rosenthal@nokia.com>

        Reviewed by Antti Koivisto.

        [Qt] GraphicsLayer: support fill-modes
        https://bugs.webkit.org/show_bug.cgi?id=36216
        Implement the CSS-animation "fill mode" concept in GraphicsLayerQt. The concept
        enables a key-frame animation to go to the animation's starting point before the delay,
        and/or to stay at the animation's ending point after its ended, without reverting to the default
        value.
        We do that by manually setting the value to keyframe-0 before the delay if fill-mode is backwards/both,
        and manually modifying the default value to the animated value as we animate, with fill-mode forwards/both.

        * platform/graphics/qt/GraphicsLayerQt.cpp:
        (WebCore::AnimationQtBase::AnimationQtBase):
        (WebCore::TransformAnimationQt::~TransformAnimationQt):
        (WebCore::TransformAnimationQt::applyFrame):
        (WebCore::GraphicsLayerQt::addAnimation):

2010-04-16  Gavin Barraclough  <barraclough@apple.com>

        Reviewed by NOBODY (arm build fix).

        * bindings/js/JSDesktopNotificationsCustom.cpp:
        (WebCore::JSNotification::addEventListener):
        (WebCore::JSNotification::removeEventListener):

2010-04-16  Dmitry Titov  <dimich@chromium.org>

        Reviewed by Yury Semikhatsky.

        [v8] In Workers, script errors right after close() are not delivered to the Worker.onerror.
        https://bugs.webkit.org/show_bug.cgi?id=37691

        Existing worker-close.html will now work in Chromium.

        * bindings/v8/V8Utilities.cpp:
        (WebCore::getScriptExecutionContext): Stop using proxy() to just retrieve WorkerContext which should be always available.
        * bindings/v8/WorkerContextExecutionProxy.h: removed workerContext() accessor which moved to WorkerScriptController.
        * bindings/v8/WorkerScriptController.h:
        (WebCore::WorkerScriptController::workerContext): Added, to be able to pull WorkerContext out from the controller.

2010-04-16  Gavin Barraclough  <barraclough@apple.com>

        Reviewed by Sam Weinig.

        https://bugs.webkit.org/show_bug.cgi?id=37735
        Remove JSC specific code from WebCore::AtomicString

        Add generic constructor/add/find methods that take a UChar* & length, along
        with a known existing hash for the string.
        This removes the remaining JSC specific code from platform/text.

        * bindings/js/JSAbstractWorkerCustom.cpp:
        (WebCore::JSAbstractWorker::addEventListener):
        (WebCore::JSAbstractWorker::removeEventListener):
        * bindings/js/JSDOMApplicationCacheCustom.cpp:
        (WebCore::JSDOMApplicationCache::addEventListener):
        (WebCore::JSDOMApplicationCache::removeEventListener):
        * bindings/js/JSDOMBinding.cpp:
        (WebCore::ustringToAtomicString):
        (WebCore::identifierToAtomicString):
        (WebCore::findAtomicString):
        * bindings/js/JSDOMBinding.h:
        * bindings/js/JSDOMWindowCustom.cpp:
        (WebCore::childFrameGetter):
        (WebCore::JSDOMWindow::getOwnPropertySlot):
        (WebCore::JSDOMWindow::getOwnPropertyDescriptor):
        (WebCore::JSDOMWindow::open):
        (WebCore::JSDOMWindow::addEventListener):
        (WebCore::JSDOMWindow::removeEventListener):
        * bindings/js/JSElementCustom.cpp:
        (WebCore::JSElement::setAttribute):
        (WebCore::JSElement::setAttributeNS):
        * bindings/js/JSEventSourceCustom.cpp:
        (WebCore::JSEventSource::addEventListener):
        (WebCore::JSEventSource::removeEventListener):
        * bindings/js/JSHTMLAllCollectionCustom.cpp:
        (WebCore::getNamedItems):
        (WebCore::JSHTMLAllCollection::canGetItemsForName):
        * bindings/js/JSHTMLCollectionCustom.cpp:
        (WebCore::getNamedItems):
        (WebCore::JSHTMLCollection::canGetItemsForName):
        * bindings/js/JSHTMLDocumentCustom.cpp:
        (WebCore::JSHTMLDocument::canGetItemsForName):
        * bindings/js/JSHTMLFormElementCustom.cpp:
        (WebCore::JSHTMLFormElement::canGetItemsForName):
        (WebCore::JSHTMLFormElement::nameGetter):
        * bindings/js/JSHTMLFrameSetElementCustom.cpp:
        (WebCore::JSHTMLFrameSetElement::canGetItemsForName):
        (WebCore::JSHTMLFrameSetElement::nameGetter):
        * bindings/js/JSMessageEventCustom.cpp:
        (WebCore::JSMessageEvent::initMessageEvent):
        * bindings/js/JSMessagePortCustom.cpp:
        (WebCore::JSMessagePort::addEventListener):
        (WebCore::JSMessagePort::removeEventListener):
        * bindings/js/JSMimeTypeArrayCustom.cpp:
        (WebCore::JSMimeTypeArray::canGetItemsForName):
        (WebCore::JSMimeTypeArray::nameGetter):
        * bindings/js/JSNodeCustom.cpp:
        (WebCore::JSNode::addEventListener):
        (WebCore::JSNode::removeEventListener):
        * bindings/js/JSNodeListCustom.cpp:
        (WebCore::JSNodeList::canGetItemsForName):
        (WebCore::JSNodeList::nameGetter):
        * bindings/js/JSPluginArrayCustom.cpp:
        (WebCore::JSPluginArray::canGetItemsForName):
        (WebCore::JSPluginArray::nameGetter):
        * bindings/js/JSPluginCustom.cpp:
        (WebCore::JSPlugin::canGetItemsForName):
        (WebCore::JSPlugin::nameGetter):
        * bindings/js/JSPopStateEventCustom.cpp:
        (WebCore::JSPopStateEvent::initPopStateEvent):
        * bindings/js/JSSVGElementInstanceCustom.cpp:
        (WebCore::JSSVGElementInstance::addEventListener):
        (WebCore::JSSVGElementInstance::removeEventListener):
        * bindings/js/JSWebSocketCustom.cpp:
        (WebCore::JSWebSocket::addEventListener):
        (WebCore::JSWebSocket::removeEventListener):
        * bindings/js/JSWorkerContextCustom.cpp:
        (WebCore::JSWorkerContext::addEventListener):
        (WebCore::JSWorkerContext::removeEventListener):
        * bindings/js/JSXMLHttpRequestCustom.cpp:
        (WebCore::JSXMLHttpRequest::setRequestHeader):
        (WebCore::JSXMLHttpRequest::getResponseHeader):
        (WebCore::JSXMLHttpRequest::addEventListener):
        (WebCore::JSXMLHttpRequest::removeEventListener):
        * bindings/js/JSXMLHttpRequestUploadCustom.cpp:
        (WebCore::JSXMLHttpRequestUpload::addEventListener):
        (WebCore::JSXMLHttpRequestUpload::removeEventListener):
        * platform/text/AtomicString.cpp:
        (WebCore::AtomicString::add):
        (WebCore::AtomicString::find):
        * platform/text/AtomicString.h:
        (WebCore::AtomicString::AtomicString):

2010-04-16  Fumitoshi Ukai  <ukai@chromium.org>

        Reviewed by Alexey Proskuryakov.

        WebSocket crash when it receives bad header.
        https://bugs.webkit.org/show_bug.cgi?id=37682

        If name or value is not valid UTF-8, nameStr or valueStr would be
        null string, so crashed in headers->add(nameStr, valueStr).
        Check both nameStr and valueStr are not null string.
        Otherwise handshake will fail.

        Test: websocket/tests/bad-handshake-crash.html

        * websockets/WebSocketHandshake.cpp:
        (WebCore::WebSocketHandshake::readHTTPHeaders): check nameStr and valueStr are not null string.

2010-04-16  Dan Bernstein  <mitz@apple.com>

        Reviewed by Simon Fraser.

        <rdar://problem/7873647> Crash when updating hover state

        Test: fast/dynamic/hover-style-recalc-crash.html

        Updating the hover state of an element caused the document to need style
        recalc, and then updating the hover state of a link caused style recalc,
        which changed the render tree while updateHoverActiveState() was iterating
        over it, leading to a crash.

        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::updateHoverActiveState): Collect the nodes to be
        updated into vectors, then update their active and hover states.

2010-04-16  Dumitru Daniliuc  <dumi@chromium.org>

        Reviewed by Alexey Proskuryakov.

        Make Safari correctly allocate 5MB of DB storage to all new
        origins.
        https://bugs.webkit.org/show_bug.cgi?id=36671

        Eric fixed the same problem in
        DatabaseTracker::fullPathForDatabaseNoLock() in r57128, but forgot
        to fix it in DatabaseTracker::detailsForNameAndOrigin() too.

        * storage/DatabaseTracker.cpp:
        (WebCore::DatabaseTracker::detailsForNameAndOrigin):

2010-04-16  Kinuko Yasuda  <kinuko@chromium.org>

        Reviewed by Jian Li.

        Implement FileStreamProxy that calls FileStream methods on FileThread for FileAPI
        https://bugs.webkit.org/show_bug.cgi?id=37218

        No new tests; tests will be added when we add upper layer implementations.

        * GNUmakefile.am:
        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * html/FileStream.cpp:
        (WebCore::FileStream::stop):
        * html/FileStream.h:
        * html/FileStreamClient.h:
        (WebCore::FileStreamClient::didStop):
        * html/FileStreamProxy.cpp: Added
        * html/FileStreamProxy.h: Added
        * html/FileThreadTask.h: Added

2010-04-16  Gavin Barraclough  <barraclough@apple.com>

        Reviewed by Oliver Hunt.

        Bug 37730 - Remove JSC::UString dependencies from WebCore::StringImpl
        (Following on from bug #37675).

        Remove ustring() method, and constructor passed a UString.

        * WebCore.base.exp:
        * bindings/js/JSDOMBinding.cpp:
        (WebCore::stringimplToUString):
        (WebCore::jsStringSlowCase):
        (WebCore::ustringToString):
        (WebCore::stringToUString):
        (WebCore::identifierToString):
        * bindings/js/JSDOMBinding.h:
        (WebCore::jsString):
        * platform/text/AtomicString.cpp:
        (WebCore::AtomicString::operator UString):
        * platform/text/StringImpl.cpp:
        (WebCore::StringImpl::create):
        * platform/text/StringImpl.h:

2010-04-16  Jarkko Sakkinen  <jarkko.j.sakkinen@gmail.com>
 
        Reviewed by Simon Hausmann.
 
        [Qt] WebGL is not visible when QGLWidget viewport is used
        https://bugs.webkit.org/show_bug.cgi?id=37070
 
        Added HostWindow parameter to the constructor of GraphicsContext3D.
        Shared OpenGL context is initialized with parent QGLWidget.
 
        * html/canvas/WebGLRenderingContext.cpp:
        (WebCore::WebGLRenderingContext::create):
        * platform/graphics/GraphicsContext3D.h:
        * platform/graphics/mac/GraphicsContext3DMac.cpp:
        (WebCore::GraphicsContext3D::create):
        (WebCore::GraphicsContext3D::GraphicsContext3D):
        * platform/graphics/qt/GraphicsContext3DQt.cpp:
        (WebCore::GraphicsContext3DInternal::GraphicsContext3DInternal):
        (WebCore::GraphicsContext3DInternal::~GraphicsContext3DInternal):
        (WebCore::GraphicsContext3DInternal::getOwnerGLWidget):
        (WebCore::GraphicsContext3D::create):
        (WebCore::GraphicsContext3D::GraphicsContext3D):

2010-04-16  Jarkko Sakkinen  <jarkko.j.sakkinen@gmail.com>

        Reviewed by Simon Hausmann.

        [Qt] WebKit compilation fails with --3d-canvas
        https://bugs.webkit.org/show_bug.cgi?id=37699 
        
        API for readPixels() has been changed. 

        * platform/graphics/qt/GraphicsContext3DQt.cpp:
        (WebCore::GraphicsContext3D::readPixels):

2010-04-16  No'am Rosenthal  <noam.rosenthal@nokia.com>

        Reviewed by Antti Koivisto.

        [Qt]QtLauncher crash on page with CSS 3D transform
        https://bugs.webkit.org/show_bug.cgi?id=36859

        Added a neccessary null-pointer check, lack of which created the crash circumstances.

        Tested by http://css-vfx.googlecode.com/svn/trunk/snowstack/snowstack.html

        * platform/graphics/qt/GraphicsLayerQt.cpp:
        (WebCore::GraphicsLayerQtImpl::flushChanges):

2010-04-16  Anders Carlsson  <andersca@apple.com>

        Reviewed by Sam Weinig.

        Make sure to update the current graphics context when calling out to AppKit.

        * platform/mac/ThemeMac.mm:
        (WebCore::paintCheckbox):
        (WebCore::paintRadio):

2010-04-15  Gavin Barraclough  <barraclough@apple.com>

        Reviewed by Sam Weinig & Oliver Hunt.

        https://bugs.webkit.org/show_bug.cgi?id=37675
        Remove casts/constructors to/from JSC::UString type from WebCore::String
        
        WebCore's strings should not know about JSC::UString, this should be abstracted
        away in the bindings.  Add explicit conversion methods rather than relying on
        overloaded cast operators / constructors being implicitly called.

        This patch only changes the class String, once this has landed StringImpl, and
        hopefully AtomicString too, should follow suit.

        This patch adds:
            WebCore::identifierToString
            WebCore::ustringToString
            WebCore::stringToUString

        - to JSDOMBindings.h, and updates code to call these methods.

        * WebCore.base.exp:
        * WebCore.order:
        * bindings/js/CachedScriptSourceProvider.h:
        (WebCore::CachedScriptSourceProvider::CachedScriptSourceProvider):
        * bindings/js/JSAudioConstructor.cpp:
        (WebCore::constructAudio):
        * bindings/js/JSCSSStyleDeclarationCustom.cpp:
        (WebCore::JSCSSStyleDeclaration::nameGetter):
        * bindings/js/JSCanvasRenderingContext2DCustom.cpp:
        (WebCore::toHTMLCanvasStyle):
        (WebCore::JSCanvasRenderingContext2D::setFillColor):
        (WebCore::JSCanvasRenderingContext2D::setStrokeColor):
        (WebCore::JSCanvasRenderingContext2D::drawImageFromRect):
        (WebCore::JSCanvasRenderingContext2D::setShadow):
        (WebCore::JSCanvasRenderingContext2D::fillText):
        (WebCore::JSCanvasRenderingContext2D::strokeText):
        * bindings/js/JSClipboardCustom.cpp:
        (WebCore::JSClipboard::types):
        (WebCore::JSClipboard::clearData):
        (WebCore::JSClipboard::getData):
        (WebCore::JSClipboard::setData):
        * bindings/js/JSCustomXPathNSResolver.cpp:
        (WebCore::JSCustomXPathNSResolver::lookupNamespaceURI):
        * bindings/js/JSDOMBinding.cpp:
        (WebCore::identifierToString):
        (WebCore::ustringToString):
        (WebCore::stringToUString):
        (WebCore::valueToStringWithNullCheck):
        (WebCore::valueToStringWithUndefinedOrNullCheck):
        (WebCore::reportException):
        * bindings/js/JSDOMBinding.h:
        * bindings/js/JSDOMFormDataCustom.cpp:
        (WebCore::JSDOMFormData::append):
        * bindings/js/JSDOMWindowCustom.cpp:
        (WebCore::namedItemGetter):
        (WebCore::JSDOMWindow::setLocation):
        (WebCore::JSDOMWindow::openDatabase):
        * bindings/js/JSDatabaseCustom.cpp:
        (WebCore::JSDatabase::changeVersion):
        * bindings/js/JSDocumentCustom.cpp:
        (WebCore::JSDocument::setLocation):
        * bindings/js/JSEventListener.cpp:
        (WebCore::JSEventListener::handleEvent):
        * bindings/js/JSEventSourceConstructor.cpp:
        (WebCore::constructEventSource):
        * bindings/js/JSHTMLAllCollectionCustom.cpp:
        (WebCore::callHTMLAllCollection):
        * bindings/js/JSHTMLCanvasElementCustom.cpp:
        (WebCore::JSHTMLCanvasElement::getContext):
        * bindings/js/JSHTMLCollectionCustom.cpp:
        (WebCore::callHTMLCollection):
        * bindings/js/JSHTMLDocumentCustom.cpp:
        (WebCore::JSHTMLDocument::nameGetter):
        (WebCore::documentWrite):
        * bindings/js/JSInjectedScriptHostCustom.cpp:
        (WebCore::InjectedScriptHost::createInjectedScript):
        * bindings/js/JSInspectorFrontendHostCustom.cpp:
        (WebCore::JSInspectorFrontendHost::showContextMenu):
        * bindings/js/JSLazyEventListener.cpp:
        (WebCore::JSLazyEventListener::initializeJSFunction):
        * bindings/js/JSLocationCustom.cpp:
        (WebCore::JSLocation::setHref):
        (WebCore::JSLocation::setProtocol):
        (WebCore::JSLocation::setHost):
        (WebCore::JSLocation::setHostname):
        (WebCore::JSLocation::setPathname):
        (WebCore::JSLocation::setSearch):
        (WebCore::JSLocation::setHash):
        (WebCore::JSLocation::replace):
        (WebCore::JSLocation::assign):
        * bindings/js/JSMessageEventCustom.cpp:
        (WebCore::JSMessageEvent::initMessageEvent):
        * bindings/js/JSNamedNodeMapCustom.cpp:
        (WebCore::JSNamedNodeMap::canGetItemsForName):
        (WebCore::JSNamedNodeMap::nameGetter):
        * bindings/js/JSOptionConstructor.cpp:
        (WebCore::constructHTMLOptionElement):
        * bindings/js/JSSQLResultSetRowListCustom.cpp:
        (WebCore::JSSQLResultSetRowList::item):
        * bindings/js/JSSQLTransactionCustom.cpp:
        (WebCore::JSSQLTransaction::executeSql):
        * bindings/js/JSSharedWorkerConstructor.cpp:
        (WebCore::constructSharedWorker):
        * bindings/js/JSStorageCustom.cpp:
        (WebCore::JSStorage::canGetItemsForName):
        (WebCore::JSStorage::nameGetter):
        (WebCore::JSStorage::deleteProperty):
        (WebCore::JSStorage::getOwnPropertyNames):
        (WebCore::JSStorage::putDelegate):
        * bindings/js/JSStyleSheetListCustom.cpp:
        (WebCore::JSStyleSheetList::canGetItemsForName):
        (WebCore::JSStyleSheetList::nameGetter):
        * bindings/js/JSWebKitCSSMatrixConstructor.cpp:
        (WebCore::constructWebKitCSSMatrix):
        * bindings/js/JSWebSocketConstructor.cpp:
        (WebCore::constructWebSocket):
        * bindings/js/JSWebSocketCustom.cpp:
        (WebCore::JSWebSocket::send):
        * bindings/js/JSWorkerConstructor.cpp:
        (WebCore::constructWorker):
        * bindings/js/JSWorkerContextCustom.cpp:
        (WebCore::JSWorkerContext::importScripts):
        * bindings/js/JSXMLHttpRequestCustom.cpp:
        (WebCore::JSXMLHttpRequest::open):
        (WebCore::JSXMLHttpRequest::setRequestHeader):
        (WebCore::JSXMLHttpRequest::send):
        (WebCore::JSXMLHttpRequest::overrideMimeType):
        * bindings/js/JSXSLTProcessorCustom.cpp:
        (WebCore::JSXSLTProcessor::setParameter):
        (WebCore::JSXSLTProcessor::getParameter):
        (WebCore::JSXSLTProcessor::removeParameter):
        * bindings/js/ScheduledAction.cpp:
        (WebCore::ScheduledAction::create):
        * bindings/js/ScriptCallFrame.cpp:
        (WebCore::ScriptCallFrame::ScriptCallFrame):
        * bindings/js/ScriptController.cpp:
        (WebCore::ScriptController::evaluateInWorld):
        * bindings/js/ScriptDebugServer.cpp:
        (WebCore::ScriptDebugServer::hasBreakpoint):
        (WebCore::ScriptDebugServer::dispatchDidParseSource):
        (WebCore::ScriptDebugServer::dispatchFailedToParseSource):
        (WebCore::ScriptDebugServer::sourceParsed):
        * bindings/js/ScriptEventListener.cpp:
        (WebCore::getEventListenerHandlerBody):
        * bindings/js/ScriptFunctionCall.cpp:
        (WebCore::ScriptFunctionCall::appendArgument):
        (WebCore::ScriptFunctionCall::call):
        (WebCore::ScriptFunctionCall::construct):
        * bindings/js/ScriptObject.cpp:
        (WebCore::ScriptObject::set):
        * bindings/js/ScriptProfiler.cpp:
        (WebCore::ScriptProfiler::start):
        (WebCore::ScriptProfiler::stop):
        * bindings/js/ScriptString.h:
        (WebCore::ScriptString::operator String):
        (WebCore::ScriptString::ustring):
        (WebCore::ScriptString::operator+=):
        * bindings/js/ScriptValue.cpp:
        (WebCore::ScriptValue::getString):
        * bindings/js/ScriptValue.h:
        (WebCore::ScriptValue::toString):
        * bindings/js/SerializedScriptValue.cpp:
        (WebCore::SerializedObject::set):
        (WebCore::SerializingTreeWalker::convertIfTerminal):
        (WebCore::DeserializingTreeWalker::putProperty):
        * bindings/js/StringSourceProvider.h:
        (WebCore::StringSourceProvider::StringSourceProvider):
        * bindings/objc/WebScriptObject.mm:
        (-[WebScriptObject callWebScriptMethod:withArguments:]):
        (-[WebScriptObject setValue:forKey:]):
        (-[WebScriptObject valueForKey:]):
        (-[WebScriptObject removeWebScriptKey:]):
        * bindings/scripts/CodeGeneratorJS.pm:
        * bridge/IdentifierRep.cpp:
        (WebCore::IdentifierRep::get):
        * bridge/c/c_utility.cpp:
        (JSC::Bindings::identifierFromNPIdentifier):
        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::scriptImported):
        (WebCore::InspectorController::addProfileFinishedMessageToConsole):
        (WebCore::InspectorController::createProfileHeader):
        * inspector/InspectorResource.cpp:
        (WebCore::InspectorResource::sourceString):
        * inspector/JavaScriptCallFrame.cpp:
        (WebCore::JavaScriptCallFrame::functionName):
        * platform/KURL.h:
        (WebCore::KURL::operator const String&):
        * platform/text/AtomicString.cpp:
        (WebCore::AtomicString::operator UString):
        * platform/text/AtomicString.h:
        * platform/text/PlatformString.h:
        * platform/text/String.cpp:

2010-04-16  Anders Carlsson  <andersca@apple.com>

        Reviewed by David Hyatt.

        Always pass a view to the AppKit drawing functions.
        https://bugs.webkit.org/show_bug.cgi?id=37724

        * platform/mac/ThemeMac.mm:
        (WebCore::paintCheckbox):
        (WebCore::paintRadio):
        * rendering/RenderThemeMac.mm:
        (WebCore::RenderThemeMac::paintMenuList):
        (WebCore::RenderThemeMac::paintSliderThumb):
        (WebCore::RenderThemeMac::paintSearchField):
        (WebCore::RenderThemeMac::paintSearchFieldCancelButton):
        (WebCore::RenderThemeMac::paintSearchFieldResultsDecoration):
        (WebCore::RenderThemeMac::paintSearchFieldResultsButton):

2010-04-16  Alexey Proskuryakov  <ap@apple.com>

        Reviewed by Dan Bernstein.

        https://bugs.webkit.org/show_bug.cgi?id=37718
        Safari crashes with certain JavaScript charCode events in EventHandler::needsKeyboardEventDisambiguationQuirks

        Test: fast/events/recorded-keydown-event.html

        * dom/KeyboardEvent.cpp: (WebCore::KeyboardEvent::charCode): Check if the view (window) is
        frameless.

2010-04-16  Jian Li  <jianli@chromium.org>

        Reviewed by Dmitry Titov.

        Update FormDataList to fix style violations in old code.
        https://bugs.webkit.org/show_bug.cgi?id=37689

        * html/FormDataList.h:
        (WebCore::FormDataList::appendData):
        (WebCore::FormDataList::appendBlob):

2010-04-16  Anders Carlsson  <andersca@apple.com>

        Fix WebKit2 build.

        * WebCore.base.exp:

2010-04-16  Jay Civelli  <jcivelli@chromium.org>

        Reviewed by Dimitri Glazkov.

        [chromium] Fix Mac build.
        https://bugs.webkit.org/show_bug.cgi?id=37436

        * platform/chromium/PopupMenuChromium.h:

2010-04-16  Jay Civelli  <jcivelli@chromium.org>

        Reviewed by Dimitri Glazkov.

        [chromium] Select popups would assert when destroyed.
        https://bugs.webkit.org/show_bug.cgi?id=37436


        * platform/chromium/PopupMenuChromium.cpp:
        (WebCore::PopupContainer::PopupContainer):
        (WebCore::PopupContainer::showPopup):
        (WebCore::PopupContainer::notifyPopupHidden):
        * platform/chromium/PopupMenuChromium.h:

2010-04-16  Antonio Gomes  <tonikitoo@webkit.org>

        Unreviewed QtWebKit (with Qt 4.7) build fix.

        Bug 37683 moved code from FontQt.cpp to FontPlatformDataQt.cpp but did not
        renamed the variable used.

        * platform/graphics/qt/FontPlatformDataQt.cpp:
        (WebCore::FontPlatformData::FontPlatformData):

2010-04-16  Noam Rosenthal  <noam.rosenthal@nokia.com>

        Reviewed by Kenneth Rohde Christiansen.

        Make GraphicsLayerQt always use ItemCoordinateCache, and remove ItemUsesExtendedStyleOption.
        This aligns our implementation with the Safari implementation - layers are always uploaded
        to textures in item units, and WebCore is responsible for the heuristics.

        [Qt] GraphicsLayer: performance optimizations
        https://bugs.webkit.org/show_bug.cgi?id=35393

        No new tests. Still no FPS benchmarks available (on any platform)
        but animations are noticably better.

        * platform/graphics/qt/GraphicsLayerQt.cpp:
        (WebCore::GraphicsLayerQtImpl::GraphicsLayerQtImpl):
        (WebCore::GraphicsLayerQtImpl::paint):
        (WebCore::GraphicsLayerQtImpl::flushChanges):
        (WebCore::TransformAnimationQt::updateState):

2010-04-16  Simon Hausmann  <simon.hausmann@nokia.com>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] WebCore::Font::font() causes a QFont detach
        https://bugs.webkit.org/show_bug.cgi?id=37683

        Moved the setStyleStrategy call to FontPlatformData
        to avoid the detach.

        Thanks to Holger for spotting this.

        * platform/graphics/qt/FontPlatformDataQt.cpp:
        (WebCore::FontPlatformData::FontPlatformData):
        * platform/graphics/qt/FontQt.cpp:
        (WebCore::Font::font):

2010-04-15  Matt Perry  <mpcomplete@chromium.org>

        Reviewed by Adam Barth.

        Remove the check for the main frame's scheme when deciding which
        v8 extensions to add to a script context. Instead, Chromium will
        handle that check elsewhere to allow finer-grained control over
        what APIs we expose to web pages.
        https://bugs.webkit.org/show_bug.cgi?id=37681

        * bindings/v8/V8DOMWindowShell.cpp:
        (WebCore::V8DOMWindowShell::createNewContext):

2010-04-15  Luiz Agostini  <luiz.agostini@openbossa.org>

        Reviewed by Antti Koivisto.

        No default selection for <select multiple> menu lists.
        https://bugs.webkit.org/show_bug.cgi?id=37530

        Manual test: manual-tests/no-listbox-rendering.html

        For menu lists, if the selection is not indicated by the html file, the first <option> will be
        selected after loading the page or reseting the form. On the other hand listboxes may have no
        element selected after loading the page or reseting the form.

        When NO_LISTBOX_RENDERING is enabled listboxes becomes menu lists. Those <select multiple>
        that did not have selected elements, now being menu lists, will have the first <option>
        selected. That is the behavior difference that this patch corrects.

        When NO_LISTBOX_RENDERING is enabled usesMenuList() always returns true then usesMenuList() cannot
        be used to decide about initial selection of the elements. This patch replaces (usesMenuLists())
        by (!multiple && size <= 1) where initial selection is considered.

        * dom/SelectElement.cpp:
        (WebCore::SelectElement::recalcListItems):
        (WebCore::SelectElement::reset):
        * manual-tests/no-listbox-rendering.html: Added.

2010-04-15  Zhenyao Mo  <zmo@google.com>

        Reviewed by Dimitri Glazkov.

        Index validation code validates too many vertex attributes
        https://bugs.webkit.org/show_bug.cgi?id=31892

        * html/canvas/WebGLProgram.cpp:
        (WebCore::WebGLProgram::cacheActiveAttribLocations): Cache active attribute locations for a program at linkProgram time.
        (WebCore::WebGLProgram::getActiveAttribLocation): Get the cached attribute location.
        (WebCore::WebGLProgram::numActiveAttribLocations): Get the number of cached attribute locations.
        * html/canvas/WebGLProgram.h: Add attribute locations member.
        * html/canvas/WebGLRenderingContext.cpp:
        (WebCore::WebGLRenderingContext::validateRenderingState): Add logic not to validate those attributes that do not belong to the current program.
        (WebCore::WebGLRenderingContext::linkProgram): Call cacheActiveAttribLocations().

2010-04-16  Adam Roben  <aroben@apple.com>

        Don't assert when soft-linked libraries can't be found

        In some situations (e.g., when using SOFT_LINK_OPTIONAL), we expect soft-link libraries not
        to be able to be found in all cases. So we shouldn't assert that they're always found.

        Reviewed by Sam Weinig.

        * platform/win/SoftLinking.h:
        (SOFT_LINK): Don't assert when LoadLibrary fails.

2010-04-15  Dmitry Titov  <dimich@chromium.org>

        Unreviewed, rolling out r57688.
        http://trac.webkit.org/changeset/57688
        https://bugs.webkit.org/show_bug.cgi?id=34992

        Makes fast/workers/dedicated-worker-lifecycle.html crashing on all GTK bots

        * bindings/js/JSWorkerContextCustom.cpp:
        * bindings/v8/custom/V8WorkerContextCustom.cpp:
        * storage/Database.idl:
        * storage/SQLError.idl:
        * storage/SQLResultSet.idl:
        * storage/SQLResultSetRowList.idl:
        * storage/SQLTransaction.idl:
        * workers/WorkerContext.cpp:
        (WebCore::WorkerContext::openDatabase):
        * workers/WorkerContext.h:
        (WebCore::WorkerContext::databaseExceededQuota):
        * workers/WorkerContext.idl:

2010-04-15  Yury Semikhatsky  <yurys@google.com>

        Reviewed by Pavel Feldman.
    
        Support basic debugging capabilities including step in/over/out in v8
        implementation of ScriptDebugServer.

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

        * bindings/js/JSInjectedScriptHostCustom.cpp:
        (WebCore::InjectedScriptHost::createInjectedScript):
        * bindings/v8/ScriptDebugServer.cpp:
        (WebCore::ScriptDebugServer::ScriptDebugServer):
        (WebCore::ScriptDebugServer::setDebuggerScriptSource):
        (WebCore::ScriptDebugServer::addListener):
        (WebCore::ScriptDebugServer::removeListener):
        (WebCore::ScriptDebugServer::setBreakpoint):
        (WebCore::ScriptDebugServer::removeBreakpoint):
        (WebCore::ScriptDebugServer::clearBreakpoints):
        (WebCore::ScriptDebugServer::setBreakpointsActivated):
        (WebCore::ScriptDebugServer::continueProgram):
        (WebCore::ScriptDebugServer::stepIntoStatement):
        (WebCore::ScriptDebugServer::stepOverStatement):
        (WebCore::ScriptDebugServer::stepOutOfFunction):
        (WebCore::ScriptDebugServer::currentCallFrameState):
        (WebCore::ScriptDebugServer::currentCallFrameV8):
        (WebCore::ScriptDebugServer::onV8DebugMessage):
        (WebCore::ScriptDebugServer::onV8DebugHostDispatch):
        (WebCore::ScriptDebugServer::handleV8DebugHostDispatch):
        (WebCore::ScriptDebugServer::handleV8DebugMessage):
        (WebCore::ScriptDebugServer::dispatchDidParseSource):
        (WebCore::ScriptDebugServer::ensureDebuggerScriptCompiled):
        (WebCore::ScriptDebugServer::didResume):
        * bindings/v8/ScriptDebugServer.h:
        (WebCore::ScriptDebugServer::pauseOnExceptionsState):
        (WebCore::ScriptDebugServer::setPauseOnExceptionsState):
        (WebCore::ScriptDebugServer::setMessageLoopDispatchHandler):
        * bindings/v8/custom/V8InjectedScriptHostCustom.cpp:
        (WebCore::InjectedScriptHost::createInjectedScript):
        (WebCore::V8InjectedScriptHost::currentCallFrameCallback):
        (WebCore::V8InjectedScriptHost::isActivationCallback):
        * inspector/front-end/InjectedScript.js:
        (injectedScriptConstructor):
        (injectedScriptConstructor.):
        * inspector/front-end/ScriptsPanel.js:
        (WebInspector.ScriptsPanel):

2010-04-15  Jian Li  <jianli@chromium.org>

        Reviewed by Dmitry Titov.

        Support using FormData to send a sliced file via XHR.
        https://bugs.webkit.org/show_bug.cgi?id=36678

        Tests: http/tests/local/formdata/send-form-data-with-sliced-file.html

        * html/Blob.h:
        (WebCore::Blob::isFile):
        * html/DOMFormData.cpp:
        (WebCore::DOMFormData::append):
        * html/File.h:
        (WebCore::File::isFile):
        * html/FormDataList.h:
        (WebCore::FormDataList::appendBlob):
        (WebCore::FormDataList::Item::Item):
        (WebCore::FormDataList::Item::blob):
        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::appendFormData):
        * platform/network/FormData.cpp:
        (WebCore::FormData::appendDOMFormData):
        * platform/network/mac/FormDataStreamMac.mm:
        (WebCore::closeCurrentStream):

2010-04-15  Zhenyao Mo  <zmo@google.com>

        Reviewed by Dimitri Glazkov.

        Must enable GL_VERTEX_PROGRAM_POINT_SIZE during initialization
        https://bugs.webkit.org/show_bug.cgi?id=37178

        Test: fast/canvas/webgl/point-size.html

        * platform/graphics/mac/GraphicsContext3DMac.cpp: Enable GL_VERTEX_PROGRAM_POINT_SIZE during initialization.
        (WebCore::GraphicsContext3D::GraphicsContext3D):

2010-04-15  Eric Uhrhane  <ericu@chromium.org>

        Reviewed by Dmitry Titov.

        Add bindings for async DB API in Workers.
        https://bugs.webkit.org/show_bug.cgi?id=34992

        Tests: storage/change-version-handle-reuse-worker.html
               storage/execute-sql-args-worker.html

        * bindings/js/JSWorkerContextCustom.cpp: Add openDatabase binding.
        (WebCore::JSWorkerContext::openDatabase):

        * bindings/v8/custom/V8WorkerContextCustom.cpp: Add openDatabase stub; Chromium will need work both in V8 and in the browser process before we can turn this on there.
        (WebCore::V8WorkerContext::openDatabaseCallback):

        Add NoStaticTables flags to all objects now shared with workers.
        * storage/Database.idl:
        * storage/SQLError.idl:
        * storage/SQLResultSet.idl:
        * storage/SQLResultSetRowList.idl:
        * storage/SQLTransaction.idl:
        
        * workers/WorkerContext.h: Add databaseExceededQuota.
        * workers/WorkerContext.cpp:
        (WebCore::WorkerContext::databaseExceededQuota): Add stub implementation for testing; you just get 5MB for now.
        (WebCore::WorkerContext::openDatabase): Remove invalid assertion.

        Add the IDL for the call to openDatabase.
        * workers/WorkerContext.idl:

2010-04-15  Nicolas Weber  <thakis@chromium.org>

        Reviewed by Dimitri Glazkov.

        Fix drag image thumbnails for indexed images.
        https://bugs.webkit.org/show_bug.cgi?id=37621

        * platform/chromium/DragImageChromiumMac.cpp:
        (WebCore::scaleDragImage): Always use RGB color space.
        (WebCore::dissolveDragImageToFraction): Always use RGB color space.

2010-04-15  Adam Roben  <aroben@apple.com>

        Expose UserContentURLPattern as WebKit SPI

        Fixes <http://webkit.org/b/37354>.

        Reviewed by Tim Hatcher.

        * WebCore.base.exp: Export UserContentURLPattern::parse, and sorted
        the file.

        * WebCore.xcodeproj/project.pbxproj: Marked UserContentURLPattern.h as
        "Private".

        * page/UserContentURLPattern.h:
        (WebCore::UserContentURLPattern::UserContentURLPattern): Added a
        default constructor.
        (WebCore::UserContentURLPattern::isValid): Added this getter.

2010-04-15  Chris Fleizach  <cfleizach@apple.com>

        Reviewed by Beth Dakin.

        AXHelp is being appended from ancestors incorrectly
        https://bugs.webkit.org/show_bug.cgi?id=37659

        Test: platform/mac/accessibility/unexpected-help-text.html

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

2010-04-15  David Hyatt  <hyatt@apple.com>

        Reviewed by Anders Carlsson.

        https://bugs.webkit.org/show_bug.cgi?id=37669, REGRESSION: visited styles don't work right when only the visited path specifies
        a pseudoelement.
        
        Rework the pseudo cache on RenderStyles to support nesting, i.e., a pseudo hanging off a pseudo.  The existing model gets
        confused by this concept, since it relies on a singly linked list of chained pseudo styles (instead of a Vector owned by a primary
        style).  I changed the style cache to be a Vector instead.
        
        Reworked both styleForElement and pseudoStyleForElement to resolve visited styles first, since in the pseudoStyleForElement case
        you need to do this in order to know to allocate an unvisited pseudo style even if one shouldn't normally exist.

        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::styleForElement):
        (WebCore::CSSStyleSelector::pseudoStyleForElement):
        * dom/Element.cpp:
        (WebCore::Element::pseudoStyleCacheIsInvalid):
        * rendering/style/RenderStyle.cpp:
        (WebCore::RenderStyle::getCachedPseudoStyle):
        (WebCore::RenderStyle::addCachedPseudoStyle):
        * rendering/style/RenderStyle.h:
        (WebCore::):
        (WebCore::InheritedFlags::cachedPseudoStyles):

2010-04-15  Albert J. Wong  <ajwong@chromium.org>

        Unreviewed, rolling out r57660.
        http://trac.webkit.org/changeset/57660
        https://bugs.webkit.org/show_bug.cgi?id=37604

        Broke a large number of inspector layout tests in chromium.

        * bindings/js/JSInjectedScriptHostCustom.cpp:
        (WebCore::InjectedScriptHost::createInjectedScript):
        * bindings/v8/ScriptDebugServer.cpp:
        * bindings/v8/ScriptDebugServer.h:
        (WebCore::ScriptDebugServer::addListener):
        (WebCore::ScriptDebugServer::removeListener):
        (WebCore::ScriptDebugServer::setBreakpoint):
        (WebCore::ScriptDebugServer::removeBreakpoint):
        (WebCore::ScriptDebugServer::clearBreakpoints):
        (WebCore::ScriptDebugServer::setBreakpointsActivated):
        (WebCore::ScriptDebugServer::pauseOnExceptionsState):
        (WebCore::ScriptDebugServer::setPauseOnExceptionsState):
        (WebCore::ScriptDebugServer::continueProgram):
        (WebCore::ScriptDebugServer::stepIntoStatement):
        (WebCore::ScriptDebugServer::stepOverStatement):
        (WebCore::ScriptDebugServer::stepOutOfFunction):
        (WebCore::ScriptDebugServer::currentCallFrameState):
        (WebCore::ScriptDebugServer::ScriptDebugServer):
        * bindings/v8/custom/V8InjectedScriptHostCustom.cpp:
        (WebCore::InjectedScriptHost::createInjectedScript):
        (WebCore::V8InjectedScriptHost::currentCallFrameCallback):
        (WebCore::V8InjectedScriptHost::isActivationCallback):
        * inspector/front-end/InjectedScript.js:
        (injectedScriptConstructor):
        * inspector/front-end/ScriptsPanel.js:
        (WebInspector.ScriptsPanel):

2010-04-14  Dumitru Daniliuc  <dumi@chromium.org>

        Reviewed by Dimitri Glazkov.

        DatabaseTracker refactoring: remove the dependency on
        OriginQuotaManager from DatabaseTracker.h
        https://bugs.webkit.org/show_bug.cgi?id=31482

        * storage/DatabaseTracker.cpp:
        (WebCore::DatabaseTracker::DatabaseTracker):
        (WebCore::DatabaseTracker::~DatabaseTracker):
        (WebCore::DatabaseTracker::canEstablishDatabase):
        (WebCore::DatabaseTracker::hasEntryForOrigin):
        (WebCore::DatabaseTracker::getMaxSizeForDatabase):
        (WebCore::DatabaseTracker::databaseChanged):
        (WebCore::DatabaseTracker::fullPathForDatabaseNoLock):
        (WebCore::DatabaseTracker::fullPathForDatabase):
        (WebCore::DatabaseTracker::populateOrigins):
        (WebCore::DatabaseTracker::origins):
        (WebCore::DatabaseTracker::databaseNamesForOrigin):
        (WebCore::DatabaseTracker::addOpenDatabase):
        (WebCore::DatabaseTracker::removeOpenDatabase):
        (WebCore::DatabaseTracker::usageForOriginNoLock):
        (WebCore::DatabaseTracker::usageForOrigin):
        (WebCore::DatabaseTracker::quotaForOrigin):
        (WebCore::DatabaseTracker::setQuota):
        (WebCore::DatabaseTracker::deleteOrigin):
        (WebCore::DatabaseTracker::deleteDatabase):
        (WebCore::DatabaseTracker::deleteDatabaseFile):
        * storage/DatabaseTracker.h:
        * storage/SQLTransactionClient.cpp:
        (WebCore::SQLTransactionClient::didExecuteStatement):

2010-04-15  Zhenyao Mo  <zmo@google.com>

        Reviewed by Adam Barth.

        Several tests in fast/canvas/webgl/ failed randomly on Leopard Commit Bot
        This fixes an uninitialized variable bug and restores a glFinish call that used to be present.
        https://bugs.webkit.org/show_bug.cgi?id=36908

        * platform/graphics/mac/GraphicsContext3DMac.cpp:
        (WebCore::GraphicsContext3D::GraphicsContext3D): Initialize width/height to 0/0.
        (WebCore::GraphicsContext3D::prepareTexture): Restore glFinish() in every path.

2010-04-14  Antonio Gomes  <tonikitoo@webkit.org>

        Reviewed by Simon Fraser.

        Spatial Navigation: make hasOffscreenRect() to earlier return 'true' if absoluteClippedOverflowRect() gives an empty rect
        https://bugs.webkit.org/show_bug.cgi?id=37635

        absoluteClippedOverflowRect method of RenderObject does return an empty IntRect for offscreen nodes.
        So hasOffscreenRect method (SpatialNavigation.cpp) can safily bail out earlier in such cases.

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

2010-04-14  Antonio Gomes  <tonikitoo@webkit.org>

        Reviewed by Simon Fraser.

        Spatial Navigation: remove unnecessery assignment in updateFocusCandidateIfCloser method
        https://bugs.webkit.org/show_bug.cgi?id=37634

        This assignment line is not longer needed after r57061, bug that refactored all
        assignment logic to happen lines below in the method.

        * page/FocusController.cpp:
        (WebCore::updateFocusCandidateIfCloser):

2010-04-15  Yury Semikhatsky  <yurys@google.com>

        Reviewed by Pavel Feldman.
    
        Support basic debugging capabilities including step in/over/out in v8
        implementation of ScriptDebugServer.

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

        * bindings/js/JSInjectedScriptHostCustom.cpp:
        (WebCore::InjectedScriptHost::createInjectedScript):
        * bindings/v8/ScriptDebugServer.cpp:
        (WebCore::ScriptDebugServer::ScriptDebugServer):
        (WebCore::ScriptDebugServer::setDebuggerScriptSource):
        (WebCore::ScriptDebugServer::addListener):
        (WebCore::ScriptDebugServer::removeListener):
        (WebCore::ScriptDebugServer::setBreakpoint):
        (WebCore::ScriptDebugServer::removeBreakpoint):
        (WebCore::ScriptDebugServer::clearBreakpoints):
        (WebCore::ScriptDebugServer::setBreakpointsActivated):
        (WebCore::ScriptDebugServer::continueProgram):
        (WebCore::ScriptDebugServer::stepIntoStatement):
        (WebCore::ScriptDebugServer::stepOverStatement):
        (WebCore::ScriptDebugServer::stepOutOfFunction):
        (WebCore::ScriptDebugServer::currentCallFrameState):
        (WebCore::ScriptDebugServer::currentCallFrameV8):
        (WebCore::ScriptDebugServer::onV8DebugMessage):
        (WebCore::ScriptDebugServer::onV8DebugHostDispatch):
        (WebCore::ScriptDebugServer::handleV8DebugHostDispatch):
        (WebCore::ScriptDebugServer::handleV8DebugMessage):
        (WebCore::ScriptDebugServer::dispatchDidParseSource):
        (WebCore::ScriptDebugServer::ensureDebuggerScriptCompiled):
        (WebCore::ScriptDebugServer::didResume):
        * bindings/v8/ScriptDebugServer.h:
        (WebCore::ScriptDebugServer::pauseOnExceptionsState):
        (WebCore::ScriptDebugServer::setPauseOnExceptionsState):
        (WebCore::ScriptDebugServer::setMessageLoopDispatchHandler):
        * bindings/v8/custom/V8InjectedScriptHostCustom.cpp:
        (WebCore::InjectedScriptHost::createInjectedScript):
        (WebCore::V8InjectedScriptHost::currentCallFrameCallback):
        (WebCore::V8InjectedScriptHost::isActivationCallback):
        * inspector/front-end/InjectedScript.js:
        (injectedScriptConstructor):
        (injectedScriptConstructor.):
        * inspector/front-end/ScriptsPanel.js:
        (WebInspector.ScriptsPanel):

2010-04-15  Nikolas Zimmermann  <nzimmermann@rim.com>

        Reviewed by Beth Dakin.

        RenderSVGResource <-> id mapping should be cached
        https://bugs.webkit.org/show_bug.cgi?id=37575

        Test: svg/custom/clip-path-id-changes.svg

        * rendering/RenderSVGResource.h:
        (WebCore::RenderSVGResource::RenderSVGResource):
        (WebCore::RenderSVGResource::~RenderSVGResource):
        (WebCore::RenderSVGResource::idChanged):
        (WebCore::getRenderSVGResourceById):
        * svg/SVGDocumentExtensions.cpp:
        (WebCore::SVGDocumentExtensions::addResource):
        (WebCore::SVGDocumentExtensions::removeResource):
        (WebCore::SVGDocumentExtensions::resourceById):
        * svg/SVGDocumentExtensions.h:
        * svg/SVGStyledElement.cpp:
        (WebCore::SVGStyledElement::svgAttributeChanged):

2010-04-15  Justin Schuh  <jschuh@chromium.org>

        Reviewed by Dimitri Glazkov.

        LayoutTest breakage in V8 bindings after r57627
        https://bugs.webkit.org/show_bug.cgi?id=37660

        Fixes breakage of the following tests due to an error in V8 bindings for
        NamedNodeMap:
        hc_namednodemapinuseattributeerr.html
        hc_namednodemapsetnameditemreturnvalue.html
        hc_namednodemapwrongdocumenterr.html
        hc_namednodemapinvalidtype1.html
        NamedNodeMap-setNamedItem-crash.html

        * bindings/v8/custom/V8NamedNodeMapCustom.cpp:
        (WebCore::V8NamedNodeMap::setNamedItemNSCallback):
        (WebCore::V8NamedNodeMap::setNamedItemCallback):

2010-04-15  David Hyatt  <hyatt@apple.com>

        Reviewed by Anders Carlsson.

        https://bugs.webkit.org/show_bug.cgi?id=37567, :first-letter inside a :visited link is wrong color.  Make sure
        that the pseudo style caching allows visited link styles to hang off other pseudo styles.

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::updateFirstLetter):
        * rendering/style/RenderStyle.cpp:
        (WebCore::RenderStyle::getCachedPseudoStyle):

2010-04-15  Ben Murdoch  <benm@google.com>

        Unreviewed, rolling out r57652.
        http://trac.webkit.org/changeset/57652
        https://bugs.webkit.org/show_bug.cgi?id=37609

        Caused a build break on Chromium Mac and Layout Test fail on
        Qt

        * platform/PlatformTouchPoint.h:
        (WebCore::PlatformTouchPoint::):
        * platform/qt/PlatformTouchPointQt.cpp:
        (WebCore::PlatformTouchPoint::PlatformTouchPoint):

2010-04-15  Yaar Schnitman  <yaar@chromium.org>

        Reviewed by Nate Chapin.

        Overloads auto-generation in V8
        https://bugs.webkit.org/show_bug.cgi?id=37373

        This will be used by XHR.send/open, Canvas.*, WebGL.* methods that are currently custom. When more than a single overload exists for a method, the correct overload is chosen based on the total number of arguments passed as well as the values passed to non-primitive arguments.

        Overload dispatch order depends on the order the functions are defined in the IDL. Overloads must be specified from the most precise (overloads with wrapper type arguments) to the least precise (overloads with only primitive type arguments).

        * bindings/scripts/CodeGeneratorV8.pm: Identify and output overloads callbacks and dispatch code.
        * bindings/v8/test/TestObj.idl: Overloads sample.
        * bindings/v8/test/V8TestObj.cpp: Output change.

2010-04-15  Ben Murdoch  <benm@google.com>

        Reviewed by Kenneth Rohde Christiansen.

        The TouchStationary state of WebCore::PlatformTouchPoint
        is not handled inside the touch event handler.
        https://bugs.webkit.org/show_bug.cgi?id=37609

        After discussions at the WebKit contributors meeting, we decided
        that this is a currently unused state without a good future use
        case in the Touch API and thus decided to remove it. This patch
        actions that decision.

        As the TouchStationary state is not handled in the EventHandler,
        there is no change in functionality so no new tests are required.

        * platform/PlatformTouchPoint.h:
        (WebCore::PlatformTouchPoint::): Remove TouchStationary.
        * platform/qt/PlatformTouchPointQt.cpp:
        (WebCore::PlatformTouchPoint::PlatformTouchPoint): Remove TouchStationary.

2010-04-15  Steve Falkenburg  <sfalken@apple.com>

        Reviewed by Adam Roben.

        Use a lower-overhead mechanism for plug-in message throttling
        https://bugs.webkit.org/show_bug.cgi?id=37642        
        <rdar://problem/7418285> Very high CPU usage idling in gmail under Windows 7 (plug-in related)
        
        GMail has an instance of Flash that loads on the main mail page.
        This Flash content sends us a constant stream of WM_USER+1 messsages.
        
        There was already code in PluginMessageThrottlerWin to queue and process these
        excess WM_USER+1 messages from Flash. Unfortunately, there were a couple of
        problems with this code:
        
        - The timer used to process the excess messages had a very low timeout (1ms).
          Chrome uses a value of 5ms for this delay, and doesn't use excess CPU here,
          while still maintaining good Flash frame rate.
        
        - The overhead involved in generating a constant stream of 5ms timers still swamped
          the CPU, resulting in continued high CPU utilization.
          
        To fix this, I changed the throttling code to:
        
        - Process a queued WM_USER+1 message directly if none has been processed in 5ms.
          This allows us to avoid the overhead of a timer.
          
        - Process remaining delayed WM_USER+1 messages on a 16ms timer.
        
        This reduces our CPU utilization idling in GMail from ~20% to ~2-3% on my system.
        I also verified the frame rate for Flash content wasn't reduced with this change.

        * plugins/win/PluginMessageThrottlerWin.cpp:
        (WebCore::PluginMessageThrottlerWin::PluginMessageThrottlerWin): Initialize m_lastMessageTime.
        (WebCore::PluginMessageThrottlerWin::appendMessage): Process a queued message directly if >5ms have passed.
        (WebCore::PluginMessageThrottlerWin::processQueuedMessage): Split out from messageThrottleTimerFired.
        (WebCore::PluginMessageThrottlerWin::messageThrottleTimerFired): Call through to processQueuedMessage.
        * plugins/win/PluginMessageThrottlerWin.h: Add processQueuedMessage, m_lastMessageTime.

2010-04-15  Shinichiro Hamaji  <hamaji@chromium.org>

        Reviewed by David Levin.

        LEAK: in ThreadableWebSocketChannel::create()
        https://bugs.webkit.org/show_bug.cgi?id=37584

        No new tests because this change just fixes a leak.

        * websockets/WorkerThreadableWebSocketChannel.cpp:
        (WebCore::WorkerThreadableWebSocketChannel::WorkerThreadableWebSocketChannel):
        * websockets/WorkerThreadableWebSocketChannel.h:
        (WebCore::WorkerThreadableWebSocketChannel::Bridge::create):

2010-04-15  Gyuyoung Kim  <gyuyoung.kim@samsung.com>

        Reviewed by Eric Seidel.

        Duplicated patches related to wml were pushed to trunk. So, one of
        the patches should be reverted.
        https://bugs.webkit.org/show_bug.cgi?id=37542

        * wml/WMLOptionElement.h:
        * wml/WMLSelectElement.h:

2010-04-15  Bruno Schmidt  <bruno.schmidt@gmail.com>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] Null QObjects properties cause Segmentation Fault
        https://bugs.webkit.org/show_bug.cgi?id=34730

        QObjects exported to the QWebkit javascript with properties that are
        a null "QObject*" cause Segmentation Fault.

        If an QObject is added to the javascript context and it contains
        properties of the type QObject* with NULL value, calling the property
        causes Segmentation Fault.
        So now the code below properly checks for null pointers:

        * bridge/qt/qt_instance.cpp:
        (JSC::Bindings::QtInstance::getClass): may return NULL
        (JSC::Bindings::QtInstance::getMethod): may return jsNull()
        (JSC::Bindings::QtInstance::stringValue): may return jsNull()
        (JSC::Bindings::QtInstance::booleanValue): may return false
        * bridge/qt/qt_runtime.cpp:
        (JSC::Bindings::convertValueToQVariant): 
        (JSC::Bindings::convertQVariantToValue): May return jsNull on QObjectStar

2010-04-14  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Dan Bernstein.

        Repaint of fixed, transformed element is broken
        https://bugs.webkit.org/show_bug.cgi?id=37637

        RenderBox::computeRectForRepaint() failed to set the 'fixed' flag correctly
        for elements that had both fixed position and a transform. If the element has
        a transform, 'fixed' should only remain true if the element itself is fixed
        position.
        
        Also cache style()->position() in a local variable for performance.
        
        Test: fast/repaint/fixed-tranformed.html

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

2010-04-14  Luiz Agostini  <luiz.agostini@openbossa.org>

        Reviewed by Kenneth Rohde Christiansen.

        Changing view mode names due to specification changes
        https://bugs.webkit.org/show_bug.cgi?id=37615

        test: fast/media/media-feature-wgt-view-mode.html

        specification: http://dev.w3.org/2006/waf/widgets-vmmf/

        * css/MediaQueryEvaluator.cpp:
        (WebCore::view_modeMediaFeatureEval):
        * page/ChromeClient.h:
        (WebCore::ChromeClient::isWindowed):
        (WebCore::ChromeClient::isMaximized):
        (WebCore::ChromeClient::isMinimized):

2010-04-14  Adam Barth  <abarth@webkit.org>

        Unreviewed attempt to fix Qt build.

        * bindings/js/JSNodeCustom.cpp:

2010-04-14  Justin Schuh  <jschuh@chromium.org>

        Reviewed by Adam Barth.

        Javascript URL can be set as iframe.src via multiple DOM aliases
        https://bugs.webkit.org/show_bug.cgi?id=37031

        Moved frame/iframe checks from Attr to Node on inherited members.
        Node child manipulation methods now return NOT_SUPPORTED_ERR if used
        on a frame/iframe src attribute.
        NamedNodeMap set methods now perform frame/iframe src checks.
        Moved allowSettingSrcToJavascriptURL static helper function from 
        JSElementCustom.cpp to exported function in JSDOMBinding.h.

        * bindings/js/JSAttrCustom.cpp:
        (WebCore::JSAttr::setValue):
        * bindings/js/JSDOMBinding.cpp:
        (WebCore::allowSettingSrcToJavascriptURL):
        * bindings/js/JSDOMBinding.h:
        * bindings/js/JSElementCustom.cpp:
        * bindings/js/JSNamedNodeMapCustom.cpp:
        (WebCore::JSNamedNodeMap::setNamedItem):
        (WebCore::JSNamedNodeMap::setNamedItemNS):
        * bindings/js/JSNodeCustom.cpp:
        (WebCore::isAttrFrameSrc):
        (WebCore::JSNode::setNodeValue):
        (WebCore::JSNode::setTextContent):
        (WebCore::JSNode::insertBefore):
        (WebCore::JSNode::replaceChild):
        (WebCore::JSNode::removeChild):
        (WebCore::JSNode::appendChild):
        * bindings/v8/custom/V8AttrCustom.cpp:
        * bindings/v8/custom/V8NamedNodeMapCustom.cpp:
        (WebCore::V8NamedNodeMap::setNamedItemNSCallback):
        (WebCore::V8NamedNodeMap::setNamedItemCallback):
        (WebCore::toV8):
        * bindings/v8/custom/V8NodeCustom.cpp:
        (WebCore::isFrameSrc):
        (WebCore::V8Node::textContentAccessorSetter):
        (WebCore::V8Node::nodeValueAccessorSetter):
        (WebCore::V8Node::insertBeforeCallback):
        (WebCore::V8Node::replaceChildCallback):
        (WebCore::V8Node::removeChildCallback):
        (WebCore::V8Node::appendChildCallback):
        * dom/Attr.idl:
        * dom/NamedNodeMap.idl:
        * dom/Node.idl:

2010-04-14  Alejandro G. Castro  <alex@igalia.com>

        Reviewed by Xan Lopez.

        We have to check if the resource handler is cancelled before
        checking the client, other case it could crash.

        * platform/network/soup/ResourceHandleSoup.cpp:
        (WebCore::parseDataUrl):

2010-04-14  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r57609.
        http://trac.webkit.org/changeset/57609
        https://bugs.webkit.org/show_bug.cgi?id=37614

        "Broke multiple builders.  Probably needs new test results,
        but may be an Inspector bug." (Requested by eseidel on
        #webkit).

        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::didReceiveResponse):
        (WebCore::InspectorController::didFailLoading):
        * inspector/front-end/Resource.js:
        (WebInspector.Resource.prototype._mimeTypeIsConsistentWithType):
        * inspector/front-end/ResourcesPanel.js:
        (WebInspector.ResourcesPanel.prototype.recreateViewForResourceIfNeeded):

2010-04-14  Steve Falkenburg  <sfalken@apple.com>

        Reviewed by Dan Bernstein.

        Don't cache SimpleFontData* in getLastResortFallbackFont. The cached entry may be invalidated.
        https://bugs.webkit.org/show_bug.cgi?id=37599

        * platform/graphics/win/FontCacheWin.cpp:
        (WebCore::fontDataFromDescriptionAndLogFont):
        (WebCore::FontCache::getLastResortFallbackFont):

2010-04-14  Andrey Kosyakov  <caseq@chromium.ru>

        Reviewed by Timothy Hatcher.

        Log error message to inspector console if a resource fails to load.
        Disable checking of mime-type consistency for failed resources.
        https://bugs.webkit.org/show_bug.cgi?id=37215

        Test: inspector/console-resource-errors.html

        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::didReceiveResponse):
        (WebCore::InspectorController::didFailLoading):
        * inspector/front-end/Resource.js:
        (WebInspector.Resource.prototype._mimeTypeIsConsistentWithType):
        * inspector/front-end/ResourcesPanel.js:
        (WebInspector.ResourcesPanel.prototype.recreateViewForResourceIfNeeded):

2010-04-14  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r57599.
        http://trac.webkit.org/changeset/57599
        https://bugs.webkit.org/show_bug.cgi?id=37605

        "Broke Chromium build" (Requested by dglazkov on #webkit).

        * platform/chromium/PopupMenuChromium.cpp:
        (WebCore::PopupContainer::PopupContainer):
        (WebCore::PopupContainer::showPopup):
        (WebCore::PopupContainer::notifyPopupHidden):
        * platform/chromium/PopupMenuChromium.h:

2010-04-14  Aaron Boodman  <aa@chromium.org>

        Reviewed by David Levin.

        Support relative URLs for notifications on Chromium. They weren't working previously because WebCore was inserting
        the relative URL into a KURL instance, but when KURL is backed by GURL as it is on Chromium, relative URLs are
        unsupported. Fixed by resolving the relative URL first.

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

        Adding tests for this is difficult because we don't currently have DRT support for notifications on Mac, only Windows.

        * notifications/Notification.cpp:
        (WebCore::Notification::Notification): Accept resolved KURL instead of relative string.
        * notifications/Notification.h:
        (WebCore::Notification::create): Ditto.
        (WebCore::Notification::iconURL): Return resolved KURL instead of relative string.
        * notifications/NotificationCenter.h:
        (WebCore::NotificationCenter::createHTMLNotification): Immediately resolve URL instead of passing off relative string.
        (WebCore::NotificationCenter::createNotification): Ditto.
        * notifications/NotificationContents.h:
        (WebCore::NotificationContents::NotificationContents): Accept resolved KURL instead of relative string.
        (WebCore::NotificationContents::icon): Return resolved URL.

2010-04-14  Anders Carlsson  <andersca@apple.com>

        Reviewed by Sam Weinig.

        Add ThemeMac::ensuredView and get rid of a workaround in ThemeMac::paintButton.
        https://bugs.webkit.org/show_bug.cgi?id=37601

        * platform/mac/ThemeMac.h:
        * platform/mac/ThemeMac.mm:
        (-[WebCoreFlippedView isFlipped]):
        (WebCore::paintButton):
        (WebCore::ThemeMac::ensuredView):

2010-04-14  Jay Civelli  <jcivelli@chromium.org>
 
        Reviewed by Dimitri Glazkov.

        [chromium] Select popups would assert when destroyed.
        https://bugs.webkit.org/show_bug.cgi?id=37436
 
        * platform/chromium/PopupMenuChromium.cpp:
        (WebCore::PopupContainer::PopupContainer):
        (WebCore::PopupContainer::showPopup):
        (WebCore::PopupContainer::notifyPopupHidden):
        * platform/chromium/PopupMenuChromium.h:
 

2010-04-14  Dumitru Daniliuc  <dumi@chromium.org>

        Reviewed by Jian Li.

        Remove an incorrect ASSERT in UniscribeHelper::draw().
        https://bugs.webkit.org/show_bug.cgi?id=37533

        * platform/graphics/chromium/UniscribeHelper.cpp:
        (WebCore::UniscribeHelper::draw):

2010-04-14  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Timothy Hatcher.

        Web Inspector: readline shortcuts don't work in Chromium.

        * inspector/front-end/TextPrompt.js:
        (WebInspector.TextPrompt.prototype._onKeyDown):
        (WebInspector.TextPrompt.prototype._moveCaretToStartOfPrompt):

2010-04-14  Alexander Pavlov  <apavlov@chromium.org>

        Reviewed by Timothy Hatcher.

        Web Inspector: Console: Shift-Tab does not cycle autocompletions in the reverse order
        https://bugs.webkit.org/show_bug.cgi?id=37582

        * inspector/front-end/TextPrompt.js:
        (WebInspector.TextPrompt.prototype.complete):
        (WebInspector.TextPrompt.prototype._completionsReady):
        (WebInspector.TextPrompt.prototype._tabKeyPressed):

2010-04-14  Jeff Schiller  <codedread@gmail.com>

        Reviewed by Dirk Schulze.

        Render SVG Paths up to first error, bug 37413: https://bugs.webkit.org/show_bug.cgi?id=37413

        * svg/SVGParserUtilities.cpp:
        (WebCore::SVGPathSegListBuilder::build):

2010-04-14  Alexander Pavlov  <apavlov@chromium.org>

        Reviewed by Joseph Pecoraro.

        Web Inspector: Ctrl-L (Clear History) does nothing on Windows
        https://bugs.webkit.org/show_bug.cgi?id=37579

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

2010-04-14  Anton Muhin  <antonm@chromium.org>

        Not review, build fix.

        Add <limits.h> include to bring UINT_MAX.

        * html/canvas/WebGLArray.h:

2010-04-14  Nikolas Zimmermann  <nzimmermann@rim.com>

        Not reviewed. Attempt to unbreak build - NodeRenderStyle.h is an _interessting_ concept...

        * rendering/style/SVGRenderStyle.cpp: Include 'NodeRenderStyle.h'

2010-04-14  Nikolas Zimmermann  <nzimmermann@rim.com>

        Reviewed by Dirk Schulze.

        SVGRenderStyle/SVGRenderStyleDefs needs a cleanup
        https://bugs.webkit.org/show_bug.cgi?id=37568

        Cleanup SVGRenderStyle / SVGRenderStyleDefs:
        - use copy constructors in initialization list to initialize members, instead of assignment operators in the body
        - fix style issues (misplaced references, abbrevations)
        - merge StyleClipData/StyleMaskData to save memory, rename it StyleResourceData
        - move filter property in StyleResourceData
        - rename StyleMarkerData to StyleInheritedResourceData to highlight the difference to StyleResourceData
        - unify naming schemes for all resources (filter/clipper/masker/markers)
          - clipPath() -> clipperResource()
          - maskElement() -> maskerResource()
          - startMarker() -> markerStartResource()
          - midMarker() -> markerMidResource()
          - endMarker() -> markerEndResource()
          - filter() -> filterResource()

        Adapt all callsites to the renames above.
        No new tests, as this doesn't affect anything except memory overhead.

        * css/SVGCSSComputedStyleDeclaration.cpp:
        (WebCore::CSSComputedStyleDeclaration::getSVGPropertyCSSValue):
        * css/SVGCSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::applySVGProperty):
        * rendering/RenderPath.cpp:
        (WebCore::RenderPath::calculateMarkerBoundsIfNeeded):
        * rendering/RenderSVGContainer.cpp:
        (WebCore::RenderSVGContainer::selfWillPaint):
        * rendering/RenderSVGRoot.cpp:
        (WebCore::RenderSVGRoot::selfWillPaint):
        * rendering/SVGRenderSupport.cpp:
        (WebCore::SVGRenderBase::prepareToRenderSVGContent):
        (WebCore::SVGRenderBase::filterBoundingBoxForRenderer):
        (WebCore::SVGRenderBase::clipperBoundingBoxForRenderer):
        (WebCore::SVGRenderBase::maskerBoundingBoxForRenderer):
        (WebCore::deregisterFromResources):
        * rendering/SVGRenderTreeAsText.cpp:
        (WebCore::writeStyle):
        (WebCore::writeResources):
        * rendering/style/SVGRenderStyle.cpp:
        (WebCore::SVGRenderStyle::SVGRenderStyle):
        (WebCore::SVGRenderStyle::operator==):
        (WebCore::SVGRenderStyle::inheritedNotEqual):
        (WebCore::SVGRenderStyle::inheritFrom):
        * rendering/style/SVGRenderStyle.h:
        * rendering/style/SVGRenderStyleDefs.cpp:
        (WebCore::StyleFillData::StyleFillData):
        (WebCore::StyleFillData::operator==):
        (WebCore::StyleStrokeData::StyleStrokeData):
        (WebCore::StyleStrokeData::operator==):
        (WebCore::StyleStopData::StyleStopData):
        (WebCore::StyleStopData::operator==):
        (WebCore::StyleTextData::StyleTextData):
        (WebCore::StyleMiscData::StyleMiscData):
        (WebCore::StyleMiscData::operator==):
        (WebCore::StyleShadowSVGData::StyleShadowSVGData):
        (WebCore::StyleShadowSVGData::operator==):
        (WebCore::StyleResourceData::StyleResourceData):
        (WebCore::StyleResourceData::operator==):
        (WebCore::StyleInheritedResourceData::StyleInheritedResourceData):
        (WebCore::StyleInheritedResourceData::operator==):
        * rendering/style/SVGRenderStyleDefs.h:
        (WebCore::StyleFillData::operator!=):
        (WebCore::StyleStopData::operator!=):
        (WebCore::StyleMiscData::create):
        (WebCore::StyleMiscData::copy):
        (WebCore::StyleMiscData::operator!=):
        (WebCore::StyleShadowSVGData::create):
        (WebCore::StyleShadowSVGData::copy):
        (WebCore::StyleShadowSVGData::operator!=):
        (WebCore::StyleResourceData::create):
        (WebCore::StyleResourceData::copy):
        (WebCore::StyleResourceData::operator!=):
        (WebCore::StyleInheritedResourceData::create):
        (WebCore::StyleInheritedResourceData::copy):
        (WebCore::StyleInheritedResourceData::operator!=):
        * svg/SVGDocumentExtensions.cpp:
        (WebCore::SVGDocumentExtensions::addResource):
        (WebCore::SVGDocumentExtensions::removeResource):
        * svg/SVGDocumentExtensions.h:
        * svg/SVGStyledElement.cpp:
        (WebCore::SVGStyledElement::invalidateResources):

2010-04-14  Zhenyao Mo  <zmo@google.com>

        Reviewed by Dimitri Glazkov.

        readPixels must take PACK_ALIGNMENT into account
        https://bugs.webkit.org/show_bug.cgi?id=34718

        Test: fast/canvas/webgl/read-pixels.html

        * html/canvas/WebGLRenderingContext.cpp:
        (WebCore::WebGLRenderingContext::WebGLRenderingContext): Init members to support pack_alignment.
        (WebCore::WebGLRenderingContext::pixelStorei): Save pack/unpack_alignment.
        (WebCore::WebGLRenderingContext::readPixels): Validate enum and deal with pack_alignment.
        * html/canvas/WebGLRenderingContext.h: Add members to support pack_alignment.
        * platform/graphics/GraphicsContext3D.h: Refactor readPixels.
        * platform/graphics/mac/GraphicsContext3DMac.cpp:
        (WebCore::GraphicsContext3D::readPixels): Move array allocation and alpha fix to WebGLRenderingContext; flush before read pixels.

2010-04-13  Dirk Schulze  <krit@webkit.org>

        Reviewed by Eric Seidel.

        REGRESSION(r57511): many new graphics / svg related leaks
        https://bugs.webkit.org/show_bug.cgi?id=37527

        The content of a HashMap was not correctly deleted. Fixed this
        in the DTor and in invalidateClient of RenderSVGResourceClipper.

        * rendering/RenderSVGResourceClipper.cpp:
        (WebCore::RenderSVGResourceClipper::~RenderSVGResourceClipper):
        (WebCore::RenderSVGResourceClipper::invalidateClient):

2010-04-13  Zhenyao Mo  <zmo@google.com>

        Reviewed by Oliver Hunt.

        Fix a potential integer overflow in WebGL*Array::slice()
        https://bugs.webkit.org/show_bug.cgi?id=37466

        * html/canvas/WebGLArray.h:
        (WebCore::WebGLArray::clampOffsetAndNumElements): Input parameter "offset"'s semantic changed from in bytes from buffer to in elements from array view; calculate offset in bytes from buffer inside the function, avoiding overflow. 
        * html/canvas/WebGLByteArray.cpp:
        (WebCore::WebGLByteArray::slice): Changed according to new semantic of WebCore::WebGLArray::clampOffsetAndNumElements.
        * html/canvas/WebGLFloatArray.cpp:
        (WebCore::WebGLFloatArray::slice): Ditto.
        * html/canvas/WebGLIntArray.cpp:
        (WebCore::WebGLIntArray::slice): Ditto.
        * html/canvas/WebGLShortArray.cpp:
        (WebCore::WebGLShortArray::slice): Ditto.
        * html/canvas/WebGLUnsignedByteArray.cpp:
        (WebCore::WebGLUnsignedByteArray::slice): Ditto.
        * html/canvas/WebGLUnsignedIntArray.cpp:
        (WebCore::WebGLUnsignedIntArray::slice): Ditto.
        * html/canvas/WebGLUnsignedShortArray.cpp:
        (WebCore::WebGLUnsignedShortArray::slice): Ditto.

2010-04-13  Darin Fisher  <darin@chromium.org>

        Reviewed by Brady Eidson.

        If the browsing context's session history contains only one Document,
        and that was the about:blank Document created when the browsing context
        was created, then the navigation must be done with replacement enabled.

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

        Tests: fast/loader/frame-location-change-not-added-to-history.html
               fast/loader/frame-src-change-not-added-to-history.html

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::clientRedirected):
        (WebCore::FrameLoader::findFrameForNavigation):
        * loader/HistoryController.cpp:
        (WebCore::HistoryController::currentItemShouldBeReplaced):
        * loader/HistoryController.h:

2010-04-13  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Oliver Hunt.

        Separated a DOMWrapperWorld's behavior of keeping wrappers alive from
        its own lifetime, so a DOMWrapperWorld's controller can throw away
        its wrappers even before its refcount reaches 0.

        * WebCore.base.exp:
        * bindings/js/DOMWrapperWorld.cpp:
        (WebCore::DOMWrapperWorld::DOMWrapperWorld):
        (WebCore::DOMWrapperWorld::~DOMWrapperWorld):
        (WebCore::DOMWrapperWorld::registerWorld):
        (WebCore::DOMWrapperWorld::unregisterWorld):
        * bindings/js/DOMWrapperWorld.h: Factored out DOMWrapperWorld registration
        and unregistration into helper functions, so unregistering could be done manually.

        * bindings/js/ScriptController.cpp:
        (WebCore::ScriptController::destroyWindowShell): Added an ASSERT to match
        similar code.

2010-04-13  Chang Shu  <chang.shu@nokia.com>

        Reviewed by Darin Fisher.

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

        Based on W3C spec and Firefox behavior, while invoking XHR Send with parameter
        as String, the charset in Content-Type should be forced to set to UTF-8.

        Test: http/tests/xmlhttprequest/request-encoding2.html

        * platform/network/HTTPParsers.cpp:
        (WebCore::extractCharsetFromMediaType):
        (WebCore::findCharsetInMediaType):
        * platform/network/HTTPParsers.h:
        * xml/XMLHttpRequest.cpp:
        (WebCore::setCharsetInMediaType):
        (WebCore::XMLHttpRequest::send):

2010-04-12  Timothy Hatcher  <timothy@apple.com>

        SecurityOrigin needs a way to remove individual OriginAccessEntries
        https://bugs.webkit.org/show_bug.cgi?id=37449

        Test: http/tests/xmlhttprequest/origin-whitelisting-removal.html

        Reviewed by Dave Hyatt.

        * WebCore.base.exp: Added SecurityOrigin::removeOriginAccessWhitelistEntry.
        * page/OriginAccessEntry.h:
        (WebCore::OriginAccessEntry::protocol): Added. Returns m_protocol.
        (WebCore::OriginAccessEntry::host): Added. Returns m_host.
        (WebCore::OriginAccessEntry::subdomainSettings): Added. Returns m_subdomainSettings.
        (WebCore::operator==): Added. Compares OriginAccessEntry.
        (WebCore::operator!=): Ditto.
        * page/SecurityOrigin.cpp:
        (WebCore::SecurityOrigin::addOriginAccessWhitelistEntry): Use the add method to prevent a
        second hash lookup.
        (WebCore::SecurityOrigin::removeOriginAccessWhitelistEntry): Added. Find a matching
        OriginAccessEntry and remove it.
        * page/SecurityOrigin.h: Added removeOriginAccessWhitelistEntry.

2010-04-13  Timothy Hatcher  <timothy@apple.com>

        Rename SecurityOrigin::whiteListAccessFromOrigin to addOriginAccessWhitelistEntry.
        And SecurityOrigin::resetOriginAccessWhiteLists to resetOriginAccessWhitelists.

        SecurityOrigin needs a way to remove individual OriginAccessEntries
        https://bugs.webkit.org/show_bug.cgi?id=37449

        Reviewed by Dave Hyatt.

        * WebCore.base.exp:
        * page/SecurityOrigin.cpp:
        (WebCore::SecurityOrigin::addOriginAccessWhitelistEntry):
        (WebCore::SecurityOrigin::resetOriginAccessWhitelists):
        * page/SecurityOrigin.h:

2010-04-13  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Mark Rowe.

        Tidied up some more DOMWrapperWorld lifetime issues.
        
        Made DOMWrapperWorld aware of its JSDOMWindowShells, so it can clear them.

        * bindings/js/DOMWrapperWorld.cpp:
        (WebCore::DOMWrapperWorld::~DOMWrapperWorld):
        * bindings/js/DOMWrapperWorld.h:
        (WebCore::DOMWrapperWorld::didCreateWindowShell):
        (WebCore::DOMWrapperWorld::didDestroyWindowShell): Functionality for
        tracking window shells that reference a given DOMWrapperWorld.

        * bindings/js/ScriptController.cpp:
        (WebCore::ScriptController::~ScriptController):
        (WebCore::ScriptController::destroyWindowShell):
        (WebCore::ScriptController::createWindowShell):
        (WebCore::ScriptController::clearWindowShell):
        (WebCore::ScriptController::initScript):
        * bindings/js/ScriptController.h: Refactored to update a DOMWrapperWorld
        when adding or removing a JSDOMWindowShell.

        * dom/Document.cpp:
        (WebCore::Document::destroyAllWrapperCaches): Changed to use isEmpty(),
        which is slightly faster and simpler than iterator comparison.

2010-04-13  Dumitru Daniliuc  <dumi@chromium.org>

        Reviewed by Adam Barth.

        Make all HTML5 DB callbacks run in the correct context.
        https://bugs.webkit.org/show_bug.cgi?id=27698

        Tests: storage/statement-error-callback-isolated-world.html
               storage/statement-success-callback-isolated-world.html
               storage/transaction-callback-isolated-world.html
               storage/transaction-error-callback-isolated-world.html

        * bindings/js/JSCustomSQLStatementCallback.cpp:
        (WebCore::JSCustomSQLStatementCallback::JSCustomSQLStatementCallback):
        (WebCore::JSCustomSQLStatementCallback::handleEvent):
        * bindings/js/JSCustomSQLStatementCallback.h:
        * bindings/js/JSCustomSQLStatementErrorCallback.cpp:
        (WebCore::JSCustomSQLStatementErrorCallback::JSCustomSQLStatementErrorCallback):
        (WebCore::JSCustomSQLStatementErrorCallback::handleEvent):
        * bindings/js/JSCustomSQLStatementErrorCallback.h:
        * bindings/js/JSCustomSQLTransactionCallback.cpp:
        (WebCore::JSCustomSQLTransactionCallback::JSCustomSQLTransactionCallback):
        (WebCore::JSCustomSQLTransactionCallback::handleEvent):
        * bindings/js/JSCustomSQLTransactionCallback.h:
        * bindings/js/JSCustomSQLTransactionErrorCallback.cpp:
        (WebCore::JSCustomSQLTransactionErrorCallback::JSCustomSQLTransactionErrorCallback):
        (WebCore::JSCustomSQLTransactionErrorCallback::handleEvent):
        * bindings/js/JSCustomSQLTransactionErrorCallback.h:
        * bindings/v8/custom/V8CustomSQLStatementCallback.cpp:
        (WebCore::V8CustomSQLStatementCallback::V8CustomSQLStatementCallback):
        (WebCore::V8CustomSQLStatementCallback::handleEvent):
        * bindings/v8/custom/V8CustomSQLStatementCallback.h:
        * bindings/v8/custom/V8CustomSQLStatementErrorCallback.cpp:
        (WebCore::V8CustomSQLStatementErrorCallback::V8CustomSQLStatementErrorCallback):
        (WebCore::V8CustomSQLStatementErrorCallback::handleEvent):
        * bindings/v8/custom/V8CustomSQLStatementErrorCallback.h:
        * bindings/v8/custom/V8CustomSQLTransactionCallback.cpp:
        (WebCore::V8CustomSQLTransactionCallback::V8CustomSQLTransactionCallback):
        (WebCore::V8CustomSQLTransactionCallback::handleEvent):
        * bindings/v8/custom/V8CustomSQLTransactionCallback.h:
        * bindings/v8/custom/V8CustomSQLTransactionErrorCallback.cpp:
        (WebCore::V8CustomSQLTransactionErrorCallback::V8CustomSQLTransactionErrorCallback):
        (WebCore::V8CustomSQLTransactionErrorCallback::handleEvent):
        * bindings/v8/custom/V8CustomSQLTransactionErrorCallback.h:
        * storage/SQLStatement.cpp:
        (WebCore::SQLStatement::performCallback):
        * storage/SQLStatementCallback.h:
        * storage/SQLStatementErrorCallback.h:
        * storage/SQLTransaction.cpp:
        (WebCore::SQLTransaction::deliverTransactionCallback):
        (WebCore::SQLTransaction::deliverTransactionErrorCallback):
        * storage/SQLTransactionCallback.h:
        * storage/SQLTransactionErrorCallback.h:
        (WebCore::SQLTransactionErrorCallback::~SQLTransactionErrorCallback):

2010-04-13  Mikhail Naganov  <mnaganov@chromium.org>

        Reviewed by Pavel Feldman.

        Fix search behavior in Profiles tab.

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

        * inspector/front-end/ProfileView.js:
        (WebInspector.CPUProfileView.profileCallback):
        (WebInspector.CPUProfileView):

2010-04-13  David Hyatt  <hyatt@apple.com>

        Reviewed by Oliver Hunt.

        https://bugs.webkit.org/show_bug.cgi?id=37513, clean up StyleBoxData and the RenderStyle variable that uses it.

        * rendering/style/RenderStyle.cpp:
        (WebCore::RenderStyle::RenderStyle):
        (WebCore::RenderStyle::operator==):
        (WebCore::RenderStyle::diff):
        * rendering/style/RenderStyle.h:
        (WebCore::):
        (WebCore::InheritedFlags::width):
        (WebCore::InheritedFlags::height):
        (WebCore::InheritedFlags::minWidth):
        (WebCore::InheritedFlags::maxWidth):
        (WebCore::InheritedFlags::minHeight):
        (WebCore::InheritedFlags::maxHeight):
        (WebCore::InheritedFlags::verticalAlignLength):
        (WebCore::InheritedFlags::boxSizing):
        (WebCore::InheritedFlags::setWidth):
        (WebCore::InheritedFlags::setHeight):
        (WebCore::InheritedFlags::setMinWidth):
        (WebCore::InheritedFlags::setMaxWidth):
        (WebCore::InheritedFlags::setMinHeight):
        (WebCore::InheritedFlags::setMaxHeight):
        (WebCore::InheritedFlags::setVerticalAlignLength):
        (WebCore::InheritedFlags::hasAutoZIndex):
        (WebCore::InheritedFlags::setHasAutoZIndex):
        (WebCore::InheritedFlags::zIndex):
        (WebCore::InheritedFlags::setZIndex):
        (WebCore::InheritedFlags::setBoxSizing):
        * rendering/style/StyleBoxData.cpp:
        (WebCore::StyleBoxData::StyleBoxData):
        (WebCore::StyleBoxData::operator==):
        * rendering/style/StyleBoxData.h:
        (WebCore::StyleBoxData::width):
        (WebCore::StyleBoxData::height):
        (WebCore::StyleBoxData::minWidth):
        (WebCore::StyleBoxData::minHeight):
        (WebCore::StyleBoxData::maxWidth):
        (WebCore::StyleBoxData::maxHeight):
        (WebCore::StyleBoxData::verticalAlign):
        (WebCore::StyleBoxData::zIndex):
        (WebCore::StyleBoxData::hasAutoZIndex):
        (WebCore::StyleBoxData::boxSizing):

2010-04-12  yael aharon  <yael.aharon@nokia.com>

        Reviewed by Tor Arne Vestbo.

        Minor fix to pass RenderProgress instead of RenderObject
        https://bugs.webkit.org/show_bug.cgi?id=37481

        * accessibility/AXObjectCache.cpp:
        (WebCore::AXObjectCache::getOrCreate):
        * accessibility/AccessibilityProgressIndicator.cpp:
        (WebCore::AccessibilityProgressIndicator::AccessibilityProgressIndicator):
        (WebCore::AccessibilityProgressIndicator::create):
        * accessibility/AccessibilityProgressIndicator.h:

2010-04-13  David Hyatt  <hyatt@apple.com>

        Reviewed by Oliver Hunt.

        https://bugs.webkit.org/show_bug.cgi?id=37510, clean up StyleBackgroundData

        * rendering/style/RenderStyle.cpp:
        (WebCore::RenderStyle::RenderStyle):
        (WebCore::RenderStyle::operator==):
        (WebCore::RenderStyle::diff):
        * rendering/style/RenderStyle.h:
        (WebCore::):
        (WebCore::InheritedFlags::hasBackground):
        (WebCore::InheritedFlags::hasBackgroundImage):
        (WebCore::InheritedFlags::hasFixedBackgroundImage):
        (WebCore::InheritedFlags::outlineWidth):
        (WebCore::InheritedFlags::outlineStyle):
        (WebCore::InheritedFlags::outlineStyleIsAuto):
        (WebCore::InheritedFlags::outlineColor):
        (WebCore::InheritedFlags::backgroundColor):
        (WebCore::InheritedFlags::backgroundImage):
        (WebCore::InheritedFlags::backgroundRepeatX):
        (WebCore::InheritedFlags::backgroundRepeatY):
        (WebCore::InheritedFlags::backgroundComposite):
        (WebCore::InheritedFlags::backgroundAttachment):
        (WebCore::InheritedFlags::backgroundClip):
        (WebCore::InheritedFlags::backgroundOrigin):
        (WebCore::InheritedFlags::backgroundXPosition):
        (WebCore::InheritedFlags::backgroundYPosition):
        (WebCore::InheritedFlags::backgroundSizeType):
        (WebCore::InheritedFlags::backgroundSizeLength):
        (WebCore::InheritedFlags::accessBackgroundLayers):
        (WebCore::InheritedFlags::backgroundLayers):
        (WebCore::InheritedFlags::outlineOffset):
        (WebCore::InheritedFlags::resetOutline):
        (WebCore::InheritedFlags::setBackgroundColor):
        (WebCore::InheritedFlags::setBackgroundXPosition):
        (WebCore::InheritedFlags::setBackgroundYPosition):
        (WebCore::InheritedFlags::setBackgroundSize):
        (WebCore::InheritedFlags::setBackgroundSizeLength):
        (WebCore::InheritedFlags::setOutlineWidth):
        (WebCore::InheritedFlags::setOutlineStyle):
        (WebCore::InheritedFlags::setOutlineColor):
        (WebCore::InheritedFlags::clearBackgroundLayers):
        (WebCore::InheritedFlags::inheritBackgroundLayers):
        (WebCore::InheritedFlags::setOutlineOffset):
        * rendering/style/StyleBackgroundData.h:
        (WebCore::StyleBackgroundData::background):
        (WebCore::StyleBackgroundData::color):
        (WebCore::StyleBackgroundData::outline):

2010-04-13  Stephan Aßmus  <superstippi@gmx.de>

        Reviewed by David Levin.

        [Haiku] Use the system clipboard instead of a private clipboard.
                Fix various problems in the previous implementation.

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

        No new tests needed.

        * platform/haiku/PasteboardHaiku.cpp:
        (WebCore::Pasteboard::~Pasteboard):
        (WebCore::Pasteboard::generalPasteboard):
            - Don't leak the pasteboard at program exit.
        (WebCore::AutoClipboardLocker::AutoClipboardLocker):
        (WebCore::AutoClipboardLocker::~AutoClipboardLocker):
        (WebCore::AutoClipboardLocker::isLocked):
            - helper class for locking a BClipboard.
        (WebCore::Pasteboard::writeSelection):
            - Use AddData(B_MIME_TYPE) as required by clipboard protocol.
            - Make sure we don't end up with unwanted UTF-8 characters for
              regular line breaks.
        (WebCore::Pasteboard::writePlainText):
            - Use AddData(B_MIME_TYPE) as required by clipboard protocol.
        (WebCore::Pasteboard::plainText):
            - Use FindData(B_MIME_TYPE) as required by clipboard protocol.
        (WebCore::Pasteboard::documentFragment):
            - Implemented.
        (WebCore::Pasteboard::writeURL):
            - Needs to use AddData(B_MIME_TYPE) instead of AddString().
        (WebCore::Pasteboard::clear):

2010-04-13  Stephan Aßmus  <superstippi@gmx.de>

        Reviewed by David Levin.

        [Haiku] Fix bridging Widget to native top-level BView.
        https://bugs.webkit.org/show_bug.cgi?id=37419

        In the Haiku port, there is no mapping between native widgets
        and WebCore Widget instances. There is only a top-level BView
        which renders a web page into a bitmap. For certain WebCore widget
        functionality, we need to access this BView, like for setting the
        current cursor or forcing focus. On the other hand, setting a
        platform widget pointer on Widget results into completely different
        behavior, like ScrollView tries to forward everything instead of
        handling stuff itself. To make this work, the pointer to a "top-level"
        BView is stored in every Widget for the Haiku port.

        No new tests needed.

        * platform/Widget.h:
            - Added the m_topLevelPlatformWidget member for the Haiku platform.
        (WebCore::Widget::setPlatformWidget):
        (WebCore::Widget::topLevelPlatformWidget):
        (WebCore::Widget::setTopLevelPlatformWidget):
        * platform/haiku/WidgetHaiku.cpp:
        (WebCore::AutoPlatformWidgetLocker::AutoPlatformWidgetLocker):
        (WebCore::AutoPlatformWidgetLocker::~AutoPlatformWidgetLocker):
        (WebCore::AutoPlatformWidgetLocker::isLocked):
            - helper class for locking the BView looper thread with a timeout
        (WebCore::Widget::Widget):
        (WebCore::Widget::setFocus):
            - Make sure the top-level view receives keyboard input.
        (WebCore::Widget::setCursor):
            - Set the cursor on the top-level view.
        (WebCore::Widget::show):
        (WebCore::Widget::hide):
            - Don't show/hide the top-level view, but make the code correct
              for whenever we would map an individual BView per Widget.
            - Use setSelfVisible() and isParentVisible() like in other ports.

2010-04-13  Jeremy Moskovich  <jeremy@chromium.org>

        Reviewed by David Levin.

        Add some diagnostics to try to track down cause of crash in ArchiveFactory::isArchiveMimeType().

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

        No new tests as there is no new functionality.

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::finishedLoadingDocument): Make copy of mimeType string to isolate crash.

2010-04-13  Abhishek Arya  <inferno@chromium.org>

        Reviewed by Adam Barth.

        Add a null ptr check for m_popupClient.

        * platform/chromium/PopupMenuChromium.cpp:
        (WebCore::PopupListBox::abandon): Add a null ptr check

2010-04-13  Stephan Aßmus  <superstippi@gmx.de>

        Reviewed by David Levin.

        [Haiku] Use the system's default font family as last fall back font.
        https://bugs.webkit.org/show_bug.cgi?id=37501

        No new tests needed.

        * platform/graphics/haiku/FontCacheHaiku.cpp:
        (WebCore::FontCache::getLastResortFallbackFont):
            - Use the system's default font family (from be_plain_font global).

2010-04-13  Eskil Blomfeldt <eblomfel@trolltech.com>, Jesus Sanchez-Palencia  <jesus.palencia@openbossa.org>

        Reviewed by Simon Hausmann.

        [Qt] Use integer pixel metric QFont API to fix rounding errors in text rendering on the Mac
        https://bugs.webkit.org/show_bug.cgi?id=36532

        * platform/graphics/qt/FontQt.cpp:
        (WebCore::Font::floatWidthForComplexText):
        (WebCore::Font::font):

2010-04-13  Alexander Pavlov  <apavlov@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: Cannot effectively delete properties in the Styles sidebar pane
        https://bugs.webkit.org/show_bug.cgi?id=37499

        * inspector/InspectorDOMAgent.cpp:
        (WebCore::InspectorDOMAgent::applyStyleText):

2010-04-13  Stephan Aßmus  <superstippi@gmx.de>

        Reviewed by David Levin.

        Use the Haiku MIME type data base as a fall back for unknown file extensions.
        https://bugs.webkit.org/show_bug.cgi?id=34686

        Covered by existing tests.

        * platform/haiku/MIMETypeRegistryHaiku.cpp:
        (WebCore::):
            - fixed coding style issues
        (WebCore::MIMETypeRegistry::getMIMETypeForExtension):
            - fall back to the system MIME database for unknown types.
            - return empty String as last resort, this is used
              elsewhere as indicator for unknown types.

2010-04-13  Stephan Aßmus  <superstippi@gmx.de>

        Reviewed by David Levin.

        [Haiku] Use all the new system cursors available in recent Haiku revisions.
        <https://bugs.webkit.org/show_bug.cgi?id=37385>

        Covered by existing tests.

        * platform/haiku/CursorHaiku.cpp:
        (WebCore::Cursor::Cursor):
        (WebCore::Cursor::~Cursor):
        (WebCore::Cursor::operator=):
            - Adapted to maintain an owned BCursor instance.
        (WebCore::createCursorByID):
            - helper function to create a Cursor instance by BCursorID constant.
        (WebCore::pointerCursor):
            - NULL BCursor triggers using the system cursor.
        (WebCore::moveCursor):
        (WebCore::crossCursor):
        (WebCore::handCursor):
        (WebCore::iBeamCursor):
        (WebCore::waitCursor):
        (WebCore::helpCursor):
        (WebCore::eastResizeCursor):
        (WebCore::northResizeCursor):
        (WebCore::northEastResizeCursor):
        (WebCore::northWestResizeCursor):
        (WebCore::southResizeCursor):
        (WebCore::southEastResizeCursor):
        (WebCore::southWestResizeCursor):
        (WebCore::westResizeCursor):
        (WebCore::northSouthResizeCursor):
        (WebCore::eastWestResizeCursor):
        (WebCore::northEastSouthWestResizeCursor):
        (WebCore::northWestSouthEastResizeCursor):
        (WebCore::columnResizeCursor):
        (WebCore::rowResizeCursor):
        (WebCore::verticalTextCursor):
        (WebCore::cellCursor):
        (WebCore::contextMenuCursor):
        (WebCore::noDropCursor):
        (WebCore::copyCursor):
        (WebCore::progressCursor):
        (WebCore::aliasCursor):
        (WebCore::noneCursor):
        (WebCore::notAllowedCursor):
        (WebCore::zoomInCursor):
        (WebCore::zoomOutCursor):
        (WebCore::grabCursor):
        (WebCore::grabbingCursor):
            - Use the new system cursors.

2010-04-13  Dirk Schulze  <krit@webkit.org>

        Reviewed by Nikolas Zimmermann.

        <clipPath> doesn't correctly handle <text> elements
        https://bugs.webkit.org/show_bug.cgi?id=12571

        Adds support for text elements as clipPath, heterogenous clip rules, as well
        as clipping of clipPath.
        A fast code path let platforms clip simple shapes directly. All other variants
        are drawn to a seperate ImageBuffer, which is used as a mask. This happens the same
        way we like we do it on SVG Masking. This needs temporary changes to the RenderStyle
        of clipPath childs. Values like stroke, resources, opacity have to be ignored.

        Tests: svg/clip-path/clip-path-child-clipped.svg
               svg/clip-path/clip-path-childs-clipped.svg
               svg/clip-path/clip-path-clipped-evenodd-twice.svg
               svg/clip-path/clip-path-clipped-no-content.svg
               svg/clip-path/clip-path-clipped-nonzero.svg
               svg/clip-path/clip-path-clipped.svg
               svg/clip-path/clip-path-evenodd-nonzero.svg
               svg/clip-path/clip-path-evenodd.svg
               svg/clip-path/clip-path-nonzero-evenodd.svg
               svg/clip-path/clip-path-nonzero.svg
               svg/clip-path/clip-path-objectBoundingBox.svg
               svg/clip-path/clip-path-on-clipped-use.svg
               svg/clip-path/clip-path-on-g-and-child.svg
               svg/clip-path/clip-path-on-g.svg
               svg/clip-path/clip-path-on-svg-and-child.svg
               svg/clip-path/clip-path-on-svg.svg
               svg/clip-path/clip-path-recursive-call-by-child.svg
               svg/clip-path/clip-path-recursive-call.svg
               svg/clip-path/clip-path-text-and-shape.svg
               svg/clip-path/clip-path-text-and-stroke.svg
               svg/clip-path/clip-path-text.svg
               svg/clip-path/clip-path-use-as-child.svg
               svg/clip-path/clip-path-use-as-child2.svg
               svg/clip-path/clip-path-use-as-child3.svg
               svg/clip-path/clip-path-use-as-child4.svg
               svg/clip-path/clip-path-use-as-child5.svg
               svg/clip-path/clip-path-userSpaceOnUse.svg
               svg/clip-path/clip-path-with-container.svg
               svg/clip-path/clip-path-with-different-unittypes.svg
               svg/clip-path/clip-path-with-different-unittypes2.svg
               svg/clip-path/clip-path-with-invisibile-child.svg
               svg/clip-path/clip-path-with-text-clipped.svg

        * rendering/RenderObject.h:
        (WebCore::RenderObject::isSVGShadowTreeRootContainer): identify use-element renderer
        * rendering/RenderSVGResourceClipper.cpp:
        (WebCore::RenderSVGResourceClipper::invalidateClients):
        (WebCore::RenderSVGResourceClipper::invalidateClient):
        (WebCore::RenderSVGResourceClipper::applyResource):
        (WebCore::RenderSVGResourceClipper::pathOnlyClipping): direct clipping for simple shapes
        (WebCore::RenderSVGResourceClipper::applyClippingToContext): direct clipping or maskImage?
        (WebCore::RenderSVGResourceClipper::createClipData): creates maskImage for clipping
        (WebCore::RenderSVGResourceClipper::resourceBoundingBox):
        * rendering/RenderSVGResourceClipper.h:
        * rendering/RenderSVGShadowTreeRootContainer.h: identify use-Element by renderer
        (WebCore::RenderSVGShadowTreeRootContainer::isSVGShadowTreeRootContainer):
        * rendering/SVGRenderSupport.cpp:
        (WebCore::renderSubtreeToImage): hack to get texts working on clipping (masks and pattern)
        * svg/SVGUseElement.cpp:
        (WebCore::SVGUseElement::rendererClipChild): get renderer of referenced object
        * svg/SVGUseElement.h:

2010-04-13  Nikolas Zimmermann  <nzimmermann@rim.com>

        Reviewed by Dirk Schulze.

        SVG renderers should track transform/path changes, instead of pulling every time from SVG DOM
        https://bugs.webkit.org/show_bug.cgi?id=15389

        RenderPath caches repaint rectangles (fill/stroke bbox etc.) though this caching
        was effectively useless because every layout() call caused them to be reset to empty rects.
        Furthermore RenderPath::layout() queried the SVG DOM upon every invocation to retrieve
        the Path object, instead of only doing it when necessary. Even the TransformationMatrix
        was polled everytime from the SVG DOM.

        Move the knownledge wheter we need to update path/transform into the render tree and
        only update when necessary. This should result in a huge performance increase, with
        the drawback of adding slightly more memory, because we need to add booleans indicating
        the status of path/transform (is dirty?).

        Doesn't affect any tests, only performance.

        * rendering/RenderForeignObject.cpp:
        (WebCore::RenderForeignObject::RenderForeignObject):
        (WebCore::RenderForeignObject::layout):
        * rendering/RenderForeignObject.h:
        (WebCore::RenderForeignObject::setNeedsTransformUpdate):
        * rendering/RenderObject.h:
        (WebCore::RenderObject::setNeedsTransformUpdate):
        (WebCore::RenderObject::setNeedsBoundariesUpdate):
        * rendering/RenderPath.cpp:
        (WebCore::RenderPath::RenderPath):
        (WebCore::RenderPath::layout):
        (WebCore::RenderPath::invalidateCachedBoundaries):
        (WebCore::RenderPath::styleWillChange):
        * rendering/RenderPath.h:
        (WebCore::RenderPath::setNeedsBoundariesUpdate):
        (WebCore::RenderPath::setNeedsPathUpdate):
        (WebCore::RenderPath::setNeedsTransformUpdate):
        (WebCore::RenderPath::localToParentTransform):
        (WebCore::RenderPath::localTransform):
        * rendering/RenderSVGImage.cpp:
        (WebCore::RenderSVGImage::RenderSVGImage):
        (WebCore::RenderSVGImage::layout):
        * rendering/RenderSVGImage.h:
        (WebCore::RenderSVGImage::setNeedsTransformUpdate):
        * rendering/RenderSVGResourceClipper.cpp:
        (WebCore::RenderSVGResourceClipper::invalidateClients):
        * rendering/RenderSVGResourceMarker.cpp:
        (WebCore::RenderSVGResourceMarker::invalidateClients):
        * rendering/RenderSVGResourceMasker.cpp:
        (WebCore::RenderSVGResourceMasker::invalidateClients):
        * rendering/RenderSVGText.cpp:
        (WebCore::RenderSVGText::RenderSVGText):
        (WebCore::RenderSVGText::layout):
        * rendering/RenderSVGText.h:
        (WebCore::RenderSVGText::setNeedsTransformUpdate):
        * rendering/RenderSVGTransformableContainer.cpp:
        (WebCore::RenderSVGTransformableContainer::RenderSVGTransformableContainer):
        (WebCore::RenderSVGTransformableContainer::calculateLocalTransform):
        * rendering/RenderSVGTransformableContainer.h:
        (WebCore::RenderSVGTransformableContainer::localToParentTransform):
        (WebCore::RenderSVGTransformableContainer::setNeedsTransformUpdate):
        (WebCore::RenderSVGTransformableContainer::localTransform):
        * svg/SVGAnimateMotionElement.cpp:
        (WebCore::SVGAnimateMotionElement::calculateAnimatedValue):
        (WebCore::SVGAnimateMotionElement::applyResultsToTarget):
        * svg/SVGAnimateTransformElement.cpp:
        (WebCore::SVGAnimateTransformElement::applyResultsToTarget):
        * svg/SVGCircleElement.cpp:
        (WebCore::SVGCircleElement::svgAttributeChanged):
        * svg/SVGEllipseElement.cpp:
        (WebCore::SVGEllipseElement::svgAttributeChanged):
        * svg/SVGForeignObjectElement.cpp:
        (WebCore::SVGForeignObjectElement::svgAttributeChanged):
        * svg/SVGGElement.cpp:
        (WebCore::SVGGElement::svgAttributeChanged):
        * svg/SVGImageElement.cpp:
        (WebCore::SVGImageElement::svgAttributeChanged):
        * svg/SVGLineElement.cpp:
        (WebCore::SVGLineElement::svgAttributeChanged):
        * svg/SVGPathElement.cpp:
        (WebCore::SVGPathElement::svgAttributeChanged):
        * svg/SVGPolyElement.cpp:
        (WebCore::SVGPolyElement::svgAttributeChanged):
        * svg/SVGRectElement.cpp:
        (WebCore::SVGRectElement::svgAttributeChanged):
        * svg/SVGTextElement.cpp:
        (WebCore::SVGTextElement::svgAttributeChanged):
        * svg/SVGUseElement.cpp:
        (WebCore::SVGUseElement::svgAttributeChanged):

2010-04-13  Mikhail Naganov  <mnaganov@chromium.org>

        Unreviewed Qt build fix: add new .idl files to WebCore.pri

        * WebCore.pri:

2010-04-12  Mikhail Naganov  <mnaganov@chromium.org>

        Reviewed by Yury Semikhatsky.

        Replace hand-written JavaScriptProfile* bindings with idl-based, and
        in Chromium port, bind them to the new V8's profiler API that is
        aligned with JSC.

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

        * DerivedSources.cpp:
        * DerivedSources.make:
        * GNUmakefile.am:
        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSBindingsAllInOne.cpp:
        * bindings/js/JSConsoleCustom.cpp:
        * bindings/js/JSScriptProfileNodeCustom.cpp: Added.
        (WebCore::JSScriptProfileNode::callUID):
        (WebCore::JSScriptProfileNode::children):
        * bindings/js/JavaScriptProfile.cpp: Removed.
        * bindings/js/JavaScriptProfile.h: Removed.
        * bindings/js/JavaScriptProfileNode.cpp: Removed.
        * bindings/js/JavaScriptProfileNode.h: Removed.
        * bindings/js/ScriptProfileNode.h: Added.
        * bindings/scripts/CodeGeneratorJS.pm:
        * bindings/scripts/CodeGeneratorV8.pm:
        * bindings/v8/ScriptProfile.cpp: Added.
        (WebCore::ScriptProfile::title):
        (WebCore::ScriptProfile::uid):
        (WebCore::ScriptProfile::head):
        * bindings/v8/ScriptProfile.h:
        (WebCore::ScriptProfile::create):
        (WebCore::ScriptProfile::ScriptProfile):
        * bindings/v8/ScriptProfileNode.cpp: Added.
        (WebCore::ScriptProfileNode::functionName):
        (WebCore::ScriptProfileNode::url):
        (WebCore::ScriptProfileNode::lineNumber):
        (WebCore::ScriptProfileNode::totalTime):
        (WebCore::ScriptProfileNode::selfTime):
        (WebCore::ScriptProfileNode::numberOfCalls):
        (WebCore::ScriptProfileNode::children):
        (WebCore::ScriptProfileNode::visible):
        (WebCore::ScriptProfileNode::callUID):
        * bindings/v8/ScriptProfileNode.h: Added.
        (WebCore::ScriptProfileNode::create):
        (WebCore::ScriptProfileNode::~ScriptProfileNode):
        (WebCore::ScriptProfileNode::ScriptProfileNode):
        * bindings/v8/ScriptProfiler.cpp:
        (WebCore::ScriptProfiler::start):
        (WebCore::ScriptProfiler::stop):
        * bindings/v8/custom/V8ConsoleCustom.cpp: Added.
        (WebCore::V8Console::profilesAccessorGetter):
        * bindings/v8/custom/V8ScriptProfileCustom.cpp: Added.
        (WebCore::toV8):
        * bindings/v8/custom/V8ScriptProfileNodeCustom.cpp: Added.
        (WebCore::V8ScriptProfileNode::childrenAccessorGetter):
        (WebCore::V8ScriptProfileNode::callUIDAccessorGetter):
        (WebCore::toV8):
        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::getProfile):
        * inspector/ScriptProfile.idl: Added.
        * inspector/ScriptProfileNode.idl: Added.
        * inspector/front-end/InspectorBackendStub.js:
        (.WebInspector.InspectorBackendStub.prototype.getProfile):
        * inspector/front-end/ProfilesPanel.js:
        (WebInspector.ProfilesPanel.prototype.populateInterface):
        (WebInspector.ProfilesPanel.prototype.profilerWasEnabled):
        * page/Console.idl:
        * platform/android/TemporaryLinkStubs.cpp:

2010-04-12  Antonio Gomes  <tonikitoo@webkit.org>

        Reviewed by Simon Fraser.

        Spatial Navigation: make renderRectRelativeToRootDocument method to fallback to getRect() of Element when needed
        https://bugs.webkit.org/show_bug.cgi?id=37461

        getRect() of Element can be used instead of absoluteClippedOverflowRect of RenderObject when
        the node is currently offscreen in an scroll overflowed content.

        Test: fast/events/spatial-navigation/snav-simple-content-overflow.html

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

2010-04-12  Antonio Gomes  <tonikitoo@webkit.org>

        Unreviewed style fix.

        * page/FocusController.cpp:
        (WebCore::updateFocusCandidateIfCloser):

2010-04-08  yael aharon  <yael.aharon@nokia.com>

        Reviewed by Darin Adler.

        Accessibility support for progress element
        https://bugs.webkit.org/show_bug.cgi?id=37275

        Implement AccessibilityProgressIndicator to hook up progress element to accessibility framework.

        Test: platform/mac/accessibility/progressbar.html

        * GNUmakefile.am:
        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * accessibility/AXObjectCache.cpp:
        (WebCore::AXObjectCache::getOrCreate):
        * accessibility/AccessibilityProgressIndicator.cpp: Added.
        (WebCore::AccessibilityProgressIndicator::AccessibilityProgressIndicator):
        (WebCore::AccessibilityProgressIndicator::create):
        (WebCore::AccessibilityProgressIndicator::accessibilityIsIgnored):
        (WebCore::AccessibilityProgressIndicator::valueForRange):
        (WebCore::AccessibilityProgressIndicator::maxValueForRange):
        (WebCore::AccessibilityProgressIndicator::minValueForRange):
        (WebCore::AccessibilityProgressIndicator::element):
        * accessibility/AccessibilityProgressIndicator.h: Added.
        (WebCore::AccessibilityProgressIndicator::roleValue):
        (WebCore::AccessibilityProgressIndicator::isProgressIndicator):
        * rendering/RenderProgress.cpp:
        (WebCore::RenderProgress::updateFromElement):
        (WebCore::RenderProgress::progressElement):
        * rendering/RenderProgress.h:

2010-04-12  Dumitru Daniliuc  <dumi@chromium.org>

        Reviewed by Dimitri Glazkov.

        Throwing a SECURITY_ERR when openDatabase() cannot open a database
        for whatever reason, as required by the spec.
        https://bugs.webkit.org/show_bug.cgi?id=33916

        * bindings/js/JSDOMWindowCustom.cpp:
        (WebCore::JSDOMWindow::openDatabase):
        * bindings/v8/custom/V8DOMWindowCustom.cpp:
        (WebCore::V8DOMWindow::openDatabaseCallback):

2010-04-12  Steve Falkenburg  <sfalken@apple.com>

        Reviewed by Dan Bernstein.

        WebKit should have more robust last-chance font fallback on Windows
        https://bugs.webkit.org/show_bug.cgi?id=37473
        <rdar://problem/7789438> Crash in FontFallbackList::determinePitch
        <rdar://problem/7233762> Crash in FontFallbackList::fontDataAt
        
        Look harder for a suitable last-resort font. Previously, we checked for
        "Times New Roman" followed by DEFAULT_GUI_FONT.
        
        We now look for:
        - Typically installed Unicode-capable fonts, in order of coverage
        - DEFAULT_GUI_FONT
        - SPI_GETNONCLIENTMETRICS fonts
        
        * platform/graphics/win/FontCacheWin.cpp:
        (WebCore::FontCache::fontDataFromDescriptionAndLogFont):
        (WebCore::FontCache::getLastResortFallbackFont):

2010-04-12  David Hyatt  <hyatt@apple.com>

        Reviewed by Dan Bernstein.

        https://bugs.webkit.org/show_bug.cgi?id=37469, clean up ShadowData to be encapsulated properly.

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::CSSComputedStyleDeclaration::valueForShadow):
        * page/animation/AnimationBase.cpp:
        (WebCore::blendFunc):
        (WebCore::PropertyWrapperShadow::PropertyWrapperShadow):
        (WebCore::PropertyWrapperShadow::equals):
        (WebCore::PropertyWrapperShadow::blend):
        * page/mac/FrameMac.mm:
        (WebCore::Frame::fontAttributesForSelectionStart):
        * rendering/EllipsisBox.cpp:
        (WebCore::EllipsisBox::paint):
        * rendering/InlineFlowBox.cpp:
        (WebCore::InlineFlowBox::placeBoxesHorizontally):
        (WebCore::InlineFlowBox::computeVerticalOverflow):
        (WebCore::InlineFlowBox::paintTextDecorations):
        * rendering/InlineTextBox.cpp:
        (WebCore::paintTextWithShadows):
        (WebCore::InlineTextBox::paint):
        (WebCore::InlineTextBox::paintDecoration):
        * rendering/InlineTextBox.h:
        * rendering/RenderBoxModelObject.cpp:
        (WebCore::RenderBoxModelObject::paintBoxShadow):
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::calculateRects):
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::adjustRectForOutlineAndShadow):
        * rendering/SVGInlineTextBox.cpp:
        (WebCore::SVGInlineTextBox::paintCharacters):
        * rendering/SVGRenderSupport.cpp:
        (WebCore::SVGRenderBase::prepareToRenderSVGContent):
        * rendering/style/RenderStyle.cpp:
        (WebCore::RenderStyle::setTextShadow):
        (WebCore::RenderStyle::setBoxShadow):
        (WebCore::RenderStyle::getBoxShadowExtent):
        (WebCore::RenderStyle::getBoxShadowHorizontalExtent):
        (WebCore::RenderStyle::getBoxShadowVerticalExtent):
        * rendering/style/RenderStyle.h:
        (WebCore::InheritedFlags::textShadow):
        (WebCore::InheritedFlags::boxShadow):
        * rendering/style/SVGRenderStyle.cpp:
        (WebCore::getSVGShadowExtent):
        * rendering/style/ShadowData.cpp:
        (WebCore::ShadowData::ShadowData):
        (WebCore::ShadowData::operator==):
        * rendering/style/ShadowData.h:
        (WebCore::ShadowData::ShadowData):
        (WebCore::ShadowData::~ShadowData):
        (WebCore::ShadowData::x):
        (WebCore::ShadowData::y):
        (WebCore::ShadowData::blur):
        (WebCore::ShadowData::spread):
        (WebCore::ShadowData::style):
        (WebCore::ShadowData::color):
        (WebCore::ShadowData::next):
        (WebCore::ShadowData::setNext):

2010-04-12  David Hyatt  <hyatt@apple.com>

        Reviewed by Mark Rowe.

        https://bugs.webkit.org/show_bug.cgi?id=37463, clean up NinePieceImage.

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::valueForNinePieceImage):
        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::mapNinePieceImage):
        * rendering/RenderBoxModelObject.cpp:
        (WebCore::RenderBoxModelObject::paintNinePieceImage):
        * rendering/style/NinePieceImage.h:
        (WebCore::NinePieceImage::setImage):
        (WebCore::NinePieceImage::slices):
        (WebCore::NinePieceImage::setSlices):
        (WebCore::NinePieceImage::setHorizontalRule):
        (WebCore::NinePieceImage::verticalRule):
        (WebCore::NinePieceImage::setVerticalRule):

2010-04-12  David Hyatt  <hyatt@apple.com>

        Reviewed by Sam Weinig.

        https://bugs.webkit.org/show_bug.cgi?id=37455, :visited doesn't work with multiple classes/ids.

        Added fast/history/multiple-classes-visited.html.

        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::SelectorChecker::checkSelector):

2010-04-12  Dirk Schulze  <krit@webkit.org>

        Unreviewed build fix.

        Make comma/whitespace around arc flags optional in SVG path syntax
        https://bugs.webkit.org/show_bug.cgi?id=37431

        Fix the SL build.

        * svg/SVGParserUtilities.cpp:
        (WebCore::parseArcFlag):

2010-04-12  Jeff Schiller  <codedread@gmail.com>

        Reviewed by Dirk Schulze.

        Make comma/whitespace around arc flags optional in SVG path syntax and ensure flags are
        either 0 or 1: https://bugs.webkit.org/show_bug.cgi?id=37431

        * svg/SVGParserUtilities.cpp:
        (WebCore::parseArcFlag): function to read in a 0 or 1 for largeArcFlag and sweepFlag
        (WebCore::SVGPathParser::parseSVG): modify/simplify arc parsing by using parseArcFlag()

2010-04-11  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r57468.
        http://trac.webkit.org/changeset/57468
        https://bugs.webkit.org/show_bug.cgi?id=37433

        Broke the world...  Must have applied the patch wrong
        (Requested by abarth on #webkit).

        * Android.mk:
        * GNUmakefile.am:
        * WebCore.base.exp:
        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/ScriptControllerBase.cpp:
        (WebCore::ScriptController::executeIfJavaScriptURL):
        * dom/Document.cpp:
        (WebCore::Document::close):
        * dom/ProcessingInstruction.cpp:
        (WebCore::ProcessingInstruction::checkStyleSheet):
        * dom/ScriptElement.cpp:
        (WebCore::ScriptElementData::scriptCharset):
        * html/HTMLLinkElement.cpp:
        (WebCore::HTMLLinkElement::process):
        * loader/DocLoader.cpp:
        (WebCore::DocLoader::requestPreload):
        * loader/DocumentLoader.cpp:
        (WebCore::DocumentLoader::finishedLoading):
        (WebCore::DocumentLoader::setupForReplaceByMIMEType):
        * loader/DocumentWriter.cpp: Removed.
        * loader/DocumentWriter.h: Removed.
        * loader/FrameLoader.cpp:
        (WebCore::canReferToParentFrameEncoding):
        (WebCore::FrameLoader::FrameLoader):
        (WebCore::FrameLoader::init):
        (WebCore::FrameLoader::replaceDocument):
        (WebCore::FrameLoader::clear):
        (WebCore::FrameLoader::receivedFirstData):
        (WebCore::FrameLoader::responseMIMEType):
        (WebCore::FrameLoader::setResponseMIMEType):
        (WebCore::FrameLoader::begin):
        (WebCore::FrameLoader::write):
        (WebCore::FrameLoader::end):
        (WebCore::FrameLoader::endIfNotLoadingMainResource):
        (WebCore::FrameLoader::encoding):
        (WebCore::FrameLoader::setEncoding):
        (WebCore::FrameLoader::addData):
        (WebCore::FrameLoader::transitionToCommitted):
        (WebCore::FrameLoader::open):
        (WebCore::FrameLoader::finishedLoadingDocument):
        (WebCore::FrameLoader::addExtraFieldsToRequest):
        * loader/FrameLoader.h:
        * loader/MediaDocument.cpp:
        (WebCore::MediaDocument::replaceMediaElementTimerFired):
        * loader/PluginDocument.cpp:
        (WebCore::PluginTokenizer::createDocumentStructure):
        * platform/network/FormDataBuilder.cpp:
        (WebCore::FormDataBuilder::dataEncoding):
        * svg/graphics/SVGImage.cpp:
        (WebCore::SVGImage::dataChanged):

2010-04-11  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        Factor DocumentWriter out of FrameLoader
        https://bugs.webkit.org/show_bug.cgi?id=37175

        This patch separates the begin/write/end cycle of decoding network
        bytes and putting them into a document from the rest of the loading
        machinery.  The code and state required to write bytes into a document
        doesn't interact very much with the rest of the loading machinery.

        No tests because there is no behavior change (hopefully!).

        * Android.mk:
        * GNUmakefile.am:
        * WebCore.base.exp:
        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/ScriptControllerBase.cpp:
        (WebCore::ScriptController::executeIfJavaScriptURL):
        * dom/Document.cpp:
        (WebCore::Document::close):
        * dom/ProcessingInstruction.cpp:
        (WebCore::ProcessingInstruction::checkStyleSheet):
        * dom/ScriptElement.cpp:
        (WebCore::ScriptElementData::scriptCharset):
        * html/HTMLLinkElement.cpp:
        (WebCore::HTMLLinkElement::process):
        * loader/DocLoader.cpp:
        (WebCore::DocLoader::requestPreload):
        * loader/DocumentLoader.cpp:
        (WebCore::DocumentLoader::finishedLoading):
        (WebCore::DocumentLoader::setupForReplaceByMIMEType):
        * loader/DocumentWriter.cpp: Added.
        * loader/DocumentWriter.h: Added.
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::FrameLoader):
        (WebCore::FrameLoader::init):
        (WebCore::FrameLoader::clear):
        (WebCore::FrameLoader::receivedFirstData):
        (WebCore::FrameLoader::setURL):
        (WebCore::FrameLoader::didBeginDocument):
        (WebCore::FrameLoader::didEndDocument):
        (WebCore::FrameLoader::willSetEncoding):
        (WebCore::FrameLoader::addData):
        (WebCore::FrameLoader::transitionToCommitted):
        (WebCore::FrameLoader::open):
        (WebCore::FrameLoader::finishedLoadingDocument):
        (WebCore::FrameLoader::addExtraFieldsToRequest):
        * loader/FrameLoader.h:
        (WebCore::FrameLoader::writer):
        (WebCore::FrameLoader::isDisplayingInitialEmptyDocument):
        * loader/MediaDocument.cpp:
        (WebCore::MediaDocument::replaceMediaElementTimerFired):
        * loader/PluginDocument.cpp:
        (WebCore::PluginTokenizer::createDocumentStructure):
        * platform/network/FormDataBuilder.cpp:
        (WebCore::FormDataBuilder::dataEncoding):
        * svg/graphics/SVGImage.cpp:
        (WebCore::SVGImage::dataChanged):

2010-04-07  Tony Chang  <tony@chromium.org>

        Reviewed by Eric Seidel.

        [chromium] implement getData('text/html') for paste and drop events
        https://bugs.webkit.org/show_bug.cgi?id=37193

        Tests: editing/pasteboard/onpaste-text-html.html
               fast/events/ondrop-text-html.html

        * platform/chromium/ClipboardChromium.cpp:
        (WebCore::):
        (WebCore::clipboardTypeFromMIMEType): add html type
        (WebCore::ClipboardChromium::clearData): implement clear text/html
        (WebCore::ClipboardChromium::getData): implement get text/html (similar to text/plain)
        (WebCore::ClipboardChromium::setData): implement set text/html

2010-04-10  Adam Barth  <abarth@webkit.org>

        Unreviewed.  Rename m_forceSandboxFlags to m_forcedSandoxFlags, as
        requested by Darin Adler.

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::FrameLoader):
        (WebCore::FrameLoader::updateSandboxFlags):
        * loader/FrameLoader.h:
        (WebCore::FrameLoader::setForcedSandboxFlags):
        * svg/graphics/SVGImage.cpp:
        (WebCore::SVGImage::dataChanged):

2010-04-10  Mark Rowe  <mrowe@apple.com>

        Reviewed by Dan Bernstein.

        <rdar://problem/7845305> Further adoption of formal protocols for delegates.

        Move EmptyProtocolDefinitions.h down in to WebCore, and add the new protocols. Adopt the protocols in the appropriate places.

        * WebCore.xcodeproj/project.pbxproj:
        * platform/mac/EmptyProtocolDefinitions.h: Renamed from WebKit/mac/Misc/EmptyProtocolDefinitions.h.
        * platform/network/mac/ResourceHandleMac.mm:

2010-04-10  Chris Evans  <cevans@chromium.org>

        Reviewed by Adam Barth.

        Defense in depth: make sure an SVG document in the <img> context has
        a unique origin.

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

        * svg/graphics/SVGImage.cpp:
        (WebCore::SVGImage::dataChanged):
          Force the temporary rendering context into a unique origin.
        * loader/FrameLoader.h:
        (WebCore::FrameLoader::setForceSandboxFlags):
          Support for setting sandbox flags that will always be applied.
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::updateSandboxFlags):
          Always apply any forced flags.

2010-04-10  Vangelis Kokkevis  <vangelis@chromium.org>

        Reviewed by Dimitri Glazkov.

        Moving files associated with the GPU compositor from platform/graphics/skia to platform/graphics/chromium. Class
        rename was done in a previous CL, this CL does the file move and rename.
        https://bugs.webkit.org/show_bug.cgi?id=37231

        No new functionality, no new tests.

        * WebCore.gypi:
        * platform/graphics/chromium/GraphicsLayerChromium.cpp: Copied from WebCore/platform/graphics/skia/GraphicsLayerSkia.cpp.
        * platform/graphics/chromium/GraphicsLayerChromium.h: Copied from WebCore/platform/graphics/skia/GraphicsLayerSkia.h.
        * platform/graphics/chromium/LayerChromium.cpp: Copied from WebCore/platform/graphics/skia/LayerSkia.cpp.
        * platform/graphics/chromium/LayerChromium.h: Copied from WebCore/platform/graphics/skia/LayerSkia.h.
        * platform/graphics/chromium/LayerRendererChromium.cpp: Copied from WebCore/platform/graphics/skia/LayerRendererSkia.cpp.
        * platform/graphics/chromium/LayerRendererChromium.h: Copied from WebCore/platform/graphics/skia/LayerRendererSkia.h.
        * platform/graphics/skia/GraphicsLayerSkia.cpp: Removed.
        * platform/graphics/skia/GraphicsLayerSkia.h: Removed.
        * platform/graphics/skia/LayerRendererSkia.cpp: Removed.
        * platform/graphics/skia/LayerRendererSkia.h: Removed.
        * platform/graphics/skia/LayerSkia.cpp: Removed.
        * platform/graphics/skia/LayerSkia.h: Removed.

2010-04-10  Robert Hogan  <robert@webkit.org>

        Reviewed by Kenneth Rohde Christiansen.

        Refactor Qt DRT support in QtWebKit

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

        * WebCore.pro: Add DumpRenderTreeSupportQt.cpp

2010-04-10  Joseph Pecoraro  <joepeck@webkit.org>

        Reviewed by David Kilzer.

        Missing CONTEXT_MENUS Guards
        https://bugs.webkit.org/show_bug.cgi?id=37398

        Added missing ENABLE(CONTEXT_MENUS) guards.

        * bindings/js/JSInspectorFrontendHostCustom.cpp:
        (WebCore::JSInspectorFrontendHost::showContextMenu):
        * inspector/InspectorFrontendHost.cpp:
        (WebCore::InspectorFrontendHost::InspectorFrontendHost):
        (WebCore::InspectorFrontendHost::disconnectClient):
        * inspector/InspectorFrontendHost.h:

2010-04-10  Stephan Aßmus  <superstippi@gmx.de>

        Reviewed by Eric Seidel.

        [Haiku] Fix crash in Gradient::fill()
        https://bugs.webkit.org/show_bug.cgi?id=37386

        Covered by existing tests.

        * platform/graphics/haiku/GradientHaiku.cpp:
        (WebCore::Gradient::fill):
            - Make sure the platform gradient is already cached before
              dereferencing its pointer.

2010-04-10  Stephan Aßmus  <superstippi@gmx.de>

        Reviewed by Eric Seidel.

        [Haiku] Fix build of ImageHaiku.cpp
        <https://bugs.webkit.org/show_bug.cgi?id=37384>

        No new tests needed.

        * platform/graphics/haiku/ImageHaiku.cpp:
        (WebCore::Image::drawPattern):
            - include SharedBuffer.h
            - changed parameter name to be in line with other ports,
              the code I landed in an earlier commit was already using
              this name.

2010-04-10  Laszlo Gombos  <laszlo.1.gombos@nokia.com>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] Implement Desktop Notifications API for QtWebKit
        https://bugs.webkit.org/show_bug.cgi?id=35503

        No new tests enabled as notification DRT tests are
        disabled at the moment.

        * WebCore.pri: Add files to the build system and turn
        on the feature by default.

        * WebCore.pro: Add files to the build system

        * bindings/js/JSDesktopNotificationsCustom.cpp:
        (WebCore::JSNotificationCenter::requestPermission):
        (WebCore::JSNotification::addEventListener):
        (WebCore::JSNotification::removeEventListener):
        Fix build regresssion.

2010-04-09  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Joseph Pecoraro.

        Web Inspector: Console with two recursive arrays causes infinite loop trying to display.
        https://bugs.webkit.org/show_bug.cgi?id=37133

        * inspector/front-end/ConsoleView.js:
        (WebInspector.ConsoleView.prototype._printArray):
        (WebInspector.ConsoleView.prototype._formatAsArrayEntry):
        * inspector/front-end/InjectedScript.js:
        (injectedScriptConstructor):

2010-04-09  Kevin Watters  <kevinwatters@gmail.com>

        Reviewed by Eric Seidel.

        [wx] Basic implementation of SVG support for wx port.

        * css/CSSFontFaceSource.cpp:
        * platform/graphics/wx/FontPlatformData.h:
        (WebCore::FontPlatformData::FontPlatformData):
        (WebCore::FontPlatformData::size):
        * platform/graphics/wx/FontPlatformDataWx.cpp:
        (WebCore::FontPlatformData::FontPlatformData):
        * platform/graphics/wx/GraphicsContextWx.cpp:
        (WebCore::GraphicsContext::GraphicsContext):
        (WebCore::GraphicsContext::clipPath):
        (WebCore::GraphicsContext::getCTM):
        (WebCore::GraphicsContext::beginPath):
        (WebCore::GraphicsContext::addPath):
        (WebCore::GraphicsContext::concatCTM):
        (WebCore::GraphicsContext::fillPath):
        (WebCore::GraphicsContext::strokePath):
        (WebCore::GraphicsContext::setLineDash):
        * platform/graphics/wx/ImageBufferWx.cpp:
        (WebCore::ImageBuffer::platformTransformColorSpace):
        * platform/graphics/wx/PathWx.cpp:
        (WebCore::Path::strokeContains):
        (WebCore::Path::debugString):
        (WebCore::Path::operator=):
        (WebCore::Path::isEmpty):
        * rendering/RenderSVGResourceMasker.cpp:
        * wscript:

2010-04-09  Evan Martin  <evan@chromium.org>

        Reviewed by Darin Adler.

        StorageEvent destructor should be in StorageEvent.cpp
        https://bugs.webkit.org/show_bug.cgi?id=37356

        Because Storage is forward-declared in StorageEvent.h, we need to define
        the StorageEvent destructor in the .cpp file so that the RefPtr<Storage>
        destructor has a complete type for Storage.

        * storage/StorageEvent.cpp:
        (WebCore::StorageEvent::~StorageEvent):
        * storage/StorageEvent.h:

2010-04-09  Young Han Lee  <joybro@company100.net>

        Reviewed by Eric Seidel.

        [WINCE] Add forwarding header for UnicodeWince.h
        https://bugs.webkit.org/show_bug.cgi?id=37224

        * ForwardingHeaders/wtf/unicode/wince/UnicodeWince.h: Added.

2010-04-09  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Sam "R the K!" Weinig.

        Tidied up some more DOMWrapperWorld lifetime issues.

        * bindings/js/DOMWrapperWorld.cpp:
        (WebCore::DOMWrapperWorld::~DOMWrapperWorld): Notify the document that
        we're going away instead of deleting its data, since deleting other
        objects' data is error-prone and, more importantly, rude.

        * bindings/js/DOMWrapperWorld.h:
        (WebCore::DOMWrapperWorld::didCreateWrapperCache):
        (WebCore::DOMWrapperWorld::didDestroyWrapperCache): A few renames for
        clarity.

        * bindings/js/JSDOMBinding.cpp:
        * bindings/js/JSDOMBinding.h: Converted forgetAllDOMNodesForDocument
        to a Document member function, for the same reason.

        * dom/Document.cpp: 
        (WebCore::Document::~Document):
        (WebCore::Document::createWrapperCache):
        (WebCore::Document::destroyWrapperCache):
        (WebCore::Document::destroyAllWrapperCaches):
        * dom/Document.h: Added a destroyWrapperCache function to balance
        createWrapperCache, so it's clear who allocates and deletes these wrapper
        caches.

2010-04-09  Chris Marrin  <cmarrin@apple.com>

        Reviewed by Simon Fraser.

        Fixed bug where animation time was not updated when dynamically loading a style sheet
        https://bugs.webkit.org/show_bug.cgi?id=37352

        A dynamically loaded style sheet kicks off its own styleRecalc cycle. This was not
        bracketed with a beginAnimationUpdate/endAnimationUpdate which wasn't resetting the
        animation time. In some time-dependent cases this was causing a negative elapsedTime
        to be sent to the keyframe animator. This is an invalid case which destroys the
        animation prematurely. I not only added the brackets, but I also added an assert
        and protection for when the elapsedTime comes up negative.

        Test: animations/dynamic-stylesheet-loading.html

        * dom/Document.cpp: Added brackets
        (WebCore::Document::updateStyleSelector):
        * page/animation/KeyframeAnimation.cpp: Added assert and protection
        (WebCore::KeyframeAnimation::getKeyframeAnimationInterval):

2010-04-09  Jaime Yap  <jaimeyap@google.com>

        Reviewed by Pavel Feldman.

        Web Inspector: Fixes "wrong parent" for GCEvents that come at the end of a
        timeline record node.
        https://bugs.webkit.org/show_bug.cgi?id=37340

        * inspector/InspectorTimelineAgent.cpp:
        (WebCore::InspectorTimelineAgent::didInstallTimer):
        (WebCore::InspectorTimelineAgent::didRemoveTimer):
        (WebCore::InspectorTimelineAgent::didMarkTimeline):
        (WebCore::InspectorTimelineAgent::didMarkDOMContentEvent):
        (WebCore::InspectorTimelineAgent::didMarkLoadEvent):
        (WebCore::InspectorTimelineAgent::addRecordToTimeline):
        (WebCore::InspectorTimelineAgent::didCompleteCurrentRecord):

2010-04-09  Abhishek Arya  <inferno@chromium.org>

        Reviewed by Adam Barth.

        Prevent HTTP responses served with JSON content type from being rendered as HTML. 

        Test: http/tests/security/xss-DENIED-mime-type-execute-as-html.html

        * dom/DOMImplementation.cpp:
        (WebCore::DOMImplementation::isTextMIMEType): Render application/json as text/plain.
        * platform/MIMETypeRegistry.cpp:
        (WebCore::initializeSupportedNonImageMimeTypes): Add a compile assert to prevent addition of new mime types in non-image types. 

2010-04-09  Shinichiro Hamaji  <hamaji@chromium.org>

        Reviewed by Eric Seidel.

        Prevent wrong use of PrintContext
        https://bugs.webkit.org/show_bug.cgi?id=37194

        No new tests because this doesn't change the behavior.

        * page/PrintContext.cpp:
        (WebCore::PrintContext::PrintContext):
        (WebCore::PrintContext::~PrintContext):
        (WebCore::PrintContext::begin):
        (WebCore::PrintContext::end):
        * page/PrintContext.h:

2010-04-09  Vitaly Repeshko  <vitalyr@chromium.org>

        Reviewed by Darin Fisher.

        [V8] SerializedScriptValue value doesn't follow the spec for DOM objects and files
        https://bugs.webkit.org/show_bug.cgi?id=37094

        This patch adds support for file-related types.

        * bindings/v8/SerializedScriptValue.cpp:
        (WebCore::):
        (WebCore::Writer::writeString):
        (WebCore::Writer::writeWebCoreString):
        (WebCore::Writer::writeBlob):
        (WebCore::Writer::writeFile):
        (WebCore::Writer::writeFileList):
        (WebCore::Writer::doWriteString):
        (WebCore::Writer::doWriteWebCoreString):
        (WebCore::Serializer::writeBlob):
        (WebCore::Serializer::writeFile):
        (WebCore::Serializer::writeFileList):
        (WebCore::Serializer::doSerialize):
        (WebCore::Reader::read):
        (WebCore::Reader::readWebCoreString):
        (WebCore::Reader::readBlob):
        (WebCore::Reader::readFile):
        (WebCore::Reader::readFileList):
        (WebCore::SerializedScriptValue::SerializedScriptValue):

2010-04-09  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Cameron Zwarich.
        
        Tidied up some DOMWrapperWorld lifetime issues.

        * bindings/js/DOMWrapperWorld.cpp:
        (WebCore::DOMWrapperWorld::DOMWrapperWorld): Made DOMWrapperWorld wholly
        responsible for managing its presence in WebCoreJSClientData's world set.
        This is simpler and more encapsulated than making its clients sometimes
        responsible for managing that set and sometimes not.
        
        * bindings/js/DOMWrapperWorld.h:
        (WebCore::DOMWrapperWorld::create): Made isNormal default to false,
        removing one of the reasons for the IsolatedWorld class to exist, so I
        could remove that class.

        * bindings/js/JSDOMWindowBase.cpp:
        (WebCore::JSDOMWindowBase::commonJSGlobalData): Used the work-around below.

        * bindings/js/ScriptController.cpp:
        (WebCore::ScriptController::createWorld): Nixed IsolatedWorld, which is
        now superfluous.

        * bindings/js/WebCoreJSClientData.h:
        (WebCore::initNormalWorldClientData): Added a work-around for the fact
        that WebCoreJSClientData must be set as globalData->clientData before
        the DOMWrapperWorld constructor runs. This removed the other reason
        for the IsolatedWorld class to exist, so I could remove that class.

2010-04-09  Yaar Schnitman  <yaar@chromium.org>

        Reviewed by Nate Chapin.

        Testing utility for CodeGeneratorV8.pm
        https://bugs.webkit.org/show_bug.cgi?id=37286

        * bindings/v8/test: Added.
        * bindings/v8/test/TestObj.idl: Contains basic IDL definitions for testing purposes.
        * bindings/v8/test/V8TestObj.cpp: Expected output.
        * bindings/v8/test/V8TestObj.h: Expected output.
        * bindings/v8/test/run_tests.py: Tool for generating the above h/cpp files from the idl file.

2010-04-09  Darin Adler  <darin@apple.com>

        Reviewed by Maciej Stachowiak.

        https://bugs.webkit.org/show_bug.cgi?id=37370
        Division by 0 in RenderBoxModelObject::calculateFillTileSize

        Test: fast/backgrounds/background-fill-zero-area-crash.html

        * rendering/RenderBoxModelObject.cpp:
        (WebCore::RenderBoxModelObject::calculateFillTileSize): Added checks for
        zero before doing division. These come up when the area to fill is zero.

2010-04-09  Alexey Proskuryakov  <ap@apple.com>

        Reviewed by Maciej Stachowiak.

        https://bugs.webkit.org/show_bug.cgi?id=24572
        XMLHttpRequest.statusText returns always "OK" on Mac

        Covered by existing tests, which now pass.

        * WebCore.base.exp:
        * platform/mac/WebCoreSystemInterface.h:
        * platform/mac/WebCoreSystemInterface.mm:
        Added a WebKitSystemInterface method to fetch status line.

        * platform/network/HTTPParsers.cpp: (WebCore::extractReasonPhraseFromHTTPStatusLine):
        * platform/network/HTTPParsers.h:
        * platform/network/cf/ResourceResponseCFNet.cpp: (WebCore::ResourceResponse::platformLazyInit):
        Moved code for parsing status line to HTTPHeaders, as it's used for both Mac and CF now.

        * platform/network/mac/ResourceResponseMac.mm: (WebCore::ResourceResponse::platformLazyInit):
        Use the actual reason phrase when available, and "OK" otherwise. Synthesizing a reson when
        there isn't one is misleading, so we'll stick to our old broken behavior on Tiger, rather than
        introduce a new broken one.

2010-04-09  David Hyatt  <hyatt@apple.com>

        Reviewed by Oliver Hunt.

        https://bugs.webkit.org/show_bug.cgi?id=37361, clean up FillLayer.

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::CSSComputedStyleDeclaration::getPropertyCSSValue):
        * rendering/style/FillLayer.h:
        (WebCore::FillLayer::sizeType):
        * rendering/style/RenderStyle.h:
        (WebCore::InheritedFlags::backgroundImage):
        (WebCore::InheritedFlags::backgroundRepeatX):
        (WebCore::InheritedFlags::backgroundRepeatY):
        (WebCore::InheritedFlags::backgroundComposite):
        (WebCore::InheritedFlags::backgroundAttachment):
        (WebCore::InheritedFlags::backgroundClip):
        (WebCore::InheritedFlags::backgroundOrigin):
        (WebCore::InheritedFlags::backgroundXPosition):
        (WebCore::InheritedFlags::backgroundYPosition):
        (WebCore::InheritedFlags::backgroundSizeType):
        (WebCore::InheritedFlags::backgroundSizeLength):
        (WebCore::InheritedFlags::maskImage):
        (WebCore::InheritedFlags::maskRepeatX):
        (WebCore::InheritedFlags::maskRepeatY):
        (WebCore::InheritedFlags::maskComposite):
        (WebCore::InheritedFlags::maskAttachment):
        (WebCore::InheritedFlags::maskClip):
        (WebCore::InheritedFlags::maskOrigin):
        (WebCore::InheritedFlags::maskXPosition):
        (WebCore::InheritedFlags::maskYPosition):
        (WebCore::InheritedFlags::maskSizeType):
        (WebCore::InheritedFlags::maskSizeLength):

2010-04-09  Sam Weinig  <sam@webkit.org>

        Add another missing export to fix the build.

        * WebCore.base.exp:

2010-04-09  David Hyatt  <hyatt@apple.com>

        Reviewed by Adam Roben.

        https://bugs.webkit.org/show_bug.cgi?id=37353, clean up cursors used by RenderStyles.

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::CSSComputedStyleDeclaration::getPropertyCSSValue):
        * page/EventHandler.cpp:
        (WebCore::EventHandler::selectCursor):
        * rendering/style/CursorData.h:
        (WebCore::CursorData::CursorData):
        (WebCore::CursorData::operator==):
        (WebCore::CursorData::image):
        (WebCore::CursorData::hotSpot):
        * rendering/style/RenderStyle.cpp:
        (WebCore::RenderStyle::addCursor):

2010-04-09  David Hyatt  <hyatt@apple.com>

        Reviewed by Adam Roben.
        
        https://bugs.webkit.org/show_bug.cgi?id=37349, RenderStyle cleanup.  Working from the outside in to
        bring some style consistency to RenderStyle and its associated classes.  This patch cleans up the
        border and outline classes.

        * rendering/RenderTable.cpp:
        (WebCore::RenderTable::calcBorderLeft):
        (WebCore::RenderTable::calcBorderRight):
        (WebCore::RenderTable::outerBorderTop):
        (WebCore::RenderTable::outerBorderBottom):
        (WebCore::RenderTable::outerBorderLeft):
        (WebCore::RenderTable::outerBorderRight):
        * rendering/RenderTableCell.cpp:
        (WebCore::compareBorders):
        * rendering/RenderTableSection.cpp:
        (WebCore::RenderTableSection::calcOuterBorderTop):
        (WebCore::RenderTableSection::calcOuterBorderBottom):
        (WebCore::RenderTableSection::calcOuterBorderLeft):
        (WebCore::RenderTableSection::calcOuterBorderRight):
        * rendering/style/BorderData.h:
        (WebCore::BorderData::hasBorder):
        (WebCore::BorderData::hasBorderRadius):
        (WebCore::BorderData::borderLeftWidth):
        (WebCore::BorderData::borderRightWidth):
        (WebCore::BorderData::borderTopWidth):
        (WebCore::BorderData::borderBottomWidth):
        (WebCore::BorderData::operator==):
        (WebCore::BorderData::left):
        (WebCore::BorderData::right):
        (WebCore::BorderData::top):
        (WebCore::BorderData::bottom):
        (WebCore::BorderData::image):
        (WebCore::BorderData::topLeft):
        (WebCore::BorderData::topRight):
        (WebCore::BorderData::bottomLeft):
        (WebCore::BorderData::bottomRight):
        * rendering/style/BorderValue.h:
        (WebCore::BorderValue::BorderValue):
        (WebCore::BorderValue::nonZero):
        (WebCore::BorderValue::isTransparent):
        (WebCore::BorderValue::operator==):
        (WebCore::BorderValue::color):
        (WebCore::BorderValue::width):
        (WebCore::BorderValue::style):
        * rendering/style/CollapsedBorderValue.h:
        (WebCore::CollapsedBorderValue::CollapsedBorderValue):
        (WebCore::CollapsedBorderValue::width):
        (WebCore::CollapsedBorderValue::style):
        (WebCore::CollapsedBorderValue::exists):
        (WebCore::CollapsedBorderValue::color):
        (WebCore::CollapsedBorderValue::isTransparent):
        (WebCore::CollapsedBorderValue::precedence):
        (WebCore::CollapsedBorderValue::operator==):
        * rendering/style/OutlineValue.h:
        (WebCore::OutlineValue::OutlineValue):
        (WebCore::OutlineValue::operator==):
        (WebCore::OutlineValue::offset):
        (WebCore::OutlineValue::isAuto):
        * rendering/style/RenderStyle.cpp:
        (WebCore::RenderStyle::getBorderRadiiForRect):
        * rendering/style/RenderStyle.h:
        (WebCore::InheritedFlags::borderLeft):
        (WebCore::InheritedFlags::borderRight):
        (WebCore::InheritedFlags::borderTop):
        (WebCore::InheritedFlags::borderBottom):
        (WebCore::InheritedFlags::borderImage):
        (WebCore::InheritedFlags::borderTopLeftRadius):
        (WebCore::InheritedFlags::borderTopRightRadius):
        (WebCore::InheritedFlags::borderBottomLeftRadius):
        (WebCore::InheritedFlags::borderBottomRightRadius):
        (WebCore::InheritedFlags::borderLeftStyle):
        (WebCore::InheritedFlags::borderLeftColor):
        (WebCore::InheritedFlags::borderLeftIsTransparent):
        (WebCore::InheritedFlags::borderRightStyle):
        (WebCore::InheritedFlags::borderRightColor):
        (WebCore::InheritedFlags::borderRightIsTransparent):
        (WebCore::InheritedFlags::borderTopStyle):
        (WebCore::InheritedFlags::borderTopColor):
        (WebCore::InheritedFlags::borderTopIsTransparent):
        (WebCore::InheritedFlags::borderBottomStyle):
        (WebCore::InheritedFlags::borderBottomColor):
        (WebCore::InheritedFlags::borderBottomIsTransparent):
        (WebCore::InheritedFlags::outlineWidth):
        (WebCore::InheritedFlags::outlineStyleIsAuto):
        (WebCore::InheritedFlags::outlineColor):
        (WebCore::InheritedFlags::outlineOffset):
        (WebCore::InheritedFlags::columnRuleColor):
        (WebCore::InheritedFlags::resetBorderTop):
        (WebCore::InheritedFlags::resetBorderRight):
        (WebCore::InheritedFlags::resetBorderBottom):
        (WebCore::InheritedFlags::resetBorderLeft):
        (WebCore::InheritedFlags::resetBorderImage):
        (WebCore::InheritedFlags::resetBorderTopLeftRadius):
        (WebCore::InheritedFlags::resetBorderTopRightRadius):
        (WebCore::InheritedFlags::resetBorderBottomLeftRadius):
        (WebCore::InheritedFlags::resetBorderBottomRightRadius):
        (WebCore::InheritedFlags::setBorderImage):
        (WebCore::InheritedFlags::setBorderTopLeftRadius):
        (WebCore::InheritedFlags::setBorderTopRightRadius):
        (WebCore::InheritedFlags::setBorderBottomLeftRadius):
        (WebCore::InheritedFlags::setBorderBottomRightRadius):
        (WebCore::InheritedFlags::setBorderLeftWidth):
        (WebCore::InheritedFlags::setBorderLeftStyle):
        (WebCore::InheritedFlags::setBorderLeftColor):
        (WebCore::InheritedFlags::setBorderRightWidth):
        (WebCore::InheritedFlags::setBorderRightStyle):
        (WebCore::InheritedFlags::setBorderRightColor):
        (WebCore::InheritedFlags::setBorderTopWidth):
        (WebCore::InheritedFlags::setBorderTopStyle):
        (WebCore::InheritedFlags::setBorderTopColor):
        (WebCore::InheritedFlags::setBorderBottomWidth):
        (WebCore::InheritedFlags::setBorderBottomStyle):
        (WebCore::InheritedFlags::setBorderBottomColor):
        (WebCore::InheritedFlags::setOutlineWidth):
        (WebCore::InheritedFlags::setOutlineStyle):
        (WebCore::InheritedFlags::setOutlineColor):
        (WebCore::InheritedFlags::setOutlineOffset):
        (WebCore::InheritedFlags::setColumnRuleColor):
        (WebCore::InheritedFlags::setColumnRuleWidth):
        * rendering/style/StyleMultiColData.h:
        (WebCore::StyleMultiColData::ruleWidth):

2010-04-09  Andrey Kosyakov  <caseq@chromium.org>

        Reviewed by Darin Adler.

        Fixed ResourceError::failingURL() and ResourceResponse::httpStatusText()
        to return meaningful values.
        https://bugs.webkit.org/show_bug.cgi?id=37274

        * platform/network/mac/ResourceErrorMac.mm:
        (WebCore::ResourceError::platformLazyInit):
        * platform/network/mac/ResourceResponseMac.mm:
        (WebCore::ResourceResponse::platformLazyInit):

2010-04-09  Jeremy Orlow  <jorlow@chromium.org>

        Reviewed by Darin Adler.

        Move the IDB::open ExceptionCode paramter to be last
        https://bugs.webkit.org/show_bug.cgi?id=37277

        Move the ExceptionCode paramter to the last position in
        IndexedDatabaseRequest::open and friends.  It should definitely
        go after the callbacks to keep the parameters that come directly
        from javascript together.  And having output parameters appear
        last is done often in the code base, so it makes sense to push
        it past the Frame* param as well.

        No functional change.

        * bindings/v8/custom/V8IndexedDatabaseRequestCustom.cpp:
        (WebCore::V8IndexedDatabaseRequest::openCallback):
        * storage/IndexedDatabase.h:
        * storage/IndexedDatabaseImpl.cpp:
        (WebCore::IndexedDatabaseImpl::open):
        * storage/IndexedDatabaseImpl.h:
        * storage/IndexedDatabaseRequest.cpp:
        (WebCore::IndexedDatabaseRequest::open):
        * storage/IndexedDatabaseRequest.h:

2010-04-09  Dmitry Titov  <dimich@chromium.org>

        Reviewed by Darin Adler.

        WebCore: WorkerGlobalScope.close() should let the currently running script complete execution, then terminate the worker.
        https://bugs.webkit.org/show_bug.cgi?id=37053

        Test: fast/workers/worker-close-more.html

        * bindings/js/WorkerScriptController.cpp:
        (WebCore::WorkerScriptController::forbidExecution):
        (WebCore::WorkerScriptController::):
        * bindings/v8/WorkerScriptController.cpp:
        (WebCore::WorkerScriptController::forbidExecution):
        * bindings/v8/WorkerScriptController.h:
        (WebCore::WorkerScriptController::):
        Added option parameter to forbidExecution (both JCS and V8 versions) that specifies whether currently running
        script should be immediately terminated or left executed until the end.

        * bindings/js/WorkerScriptController.h:
        (WebCore::WorkerScriptController::workerContextWrapper):
        This method now can return 0 instead of context if the further execution of JS is forbidden. Since any JS execution requires
        fetching JS global object first, returning 0 here is a good way to prevent re-entry into JS once worker started termination.
        V8 version does similar thing already in WorkerScriptController::proxy().

        * workers/DedicatedWorkerContext.cpp:
        (WebCore::DedicatedWorkerContext::postMessage):
        Removed check that immediately disables postMessage from WorkerContext after close().

        * workers/WorkerContext.cpp:
        (WebCore::CloseWorkerContextTask::create):
        (WebCore::CloseWorkerContextTask::performTask):
        (WebCore::CloseWorkerContextTask::isCleanupTask):
        (WebCore::WorkerContext::close):
        Use new forbidExecution(LetRunningScriptFinish) to avoid termination of script until it executes and exits.
        Post a task to actually terminate the worker once the currently executing JS fragment exits.

        * workers/WorkerThread.cpp:
        (WebCore::WorkerThread::workerThread):
        (WebCore::WorkerThread::stop):
        Use new forbidExecution(TerminateRunningScript) to immediately terminate the JS.

2010-04-09  Kent Tamura  <tkent@chromium.org>

        Reviewed by Darin Adler.

        Implement interactive validation for forms.
        https://bugs.webkit.org/show_bug.cgi?id=34930

        - HTMLFormControlElement::checkValidity() supports unhandled invalid control list
        - HTMLFormElement::validateInteractively() called from prepareSubmit()
          prevents the submission if neither noValidate nor formNoValidate is
          specified, and focuses on the first invalid control of which "invalid"
          event is not canceled.

        Tests: fast/forms/checkValidity-cancel.html
               fast/forms/interactive-validation-cancel.html
               fast/forms/interactive-validation-formnovalidate.html
               fast/forms/interactive-validation-novalidate.html
               fast/forms/interactive-validation-prevented.html
               fast/forms/interactive-validation-remove-node-in-handler.html

        * html/HTMLFormControlElement.cpp:
        (WebCore::HTMLFormControlElement::checkValidity):
          If the control is invalid and the "invalid" is not canceled,
          push the control to the specified vector.
        * html/HTMLFormControlElement.h:
        * html/HTMLFormElement.cpp:
        (WebCore::HTMLFormElement::validateInteractively):
         The main part of the interactive validation.
        (WebCore::HTMLFormElement::prepareSubmit):
         Calls validateInteractively().
        (WebCore::HTMLFormElement::checkValidity):
         Uses collectUnhandledInvalidControls().
        (WebCore::HTMLFormElement::collectUnhandledInvalidControls):
        * html/HTMLFormElement.h:

2010-04-09  Sam Weinig  <sam@webkit.org>

        Fix the mac WebKit2 build.

        * WebCore.base.exp:

2010-04-08  Alexey Proskuryakov  <ap@apple.com>

        Reviewed by Darin Adler.

        https://bugs.webkit.org/show_bug.cgi?id=37181
        <rdar://problem/7835374> REGRESSION (r54400): Hangs when doing AJAX update with large amount of data

        Test: fast/events/gc-freeze-with-attribute-listeners.html

        The problem was that we were creating JS wrappers for nodes with attribute event listeners,
        and GC is very slow if there are nodes with wrappers in a detached tree whose root does not
        have a wrapper.

        * bindings/js/ScriptEventListener.cpp: (WebCore::createAttributeEventListener): Don't create
        wrappers for attribute event listeners - if there is a node, JSLazyEventListener::initializeJSFunction()
        will create one.

        * bindings/js/JSNodeCustom.cpp: (WebCore::JSNode::markChildren): Added a FIXME about the problem
        we are stepping around now.

2010-04-09  Xan Lopez  <xlopez@igalia.com>

        Reviewed by Gustavo Noronha.

        WebGtk GLib-CRITICAL Segmentation fault
        https://bugs.webkit.org/show_bug.cgi?id=34937

        Do not crash if a plugin does not return anything in
        NP_GetMIMEDescription. This can happen, and other ports gracefully
        handle the situation.

        * plugins/gtk/PluginPackageGtk.cpp:
        (WebCore::PluginPackage::fetchInfo):

2010-04-09  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Yury Semikhatsky.

        Web Inspector: Cannot select elements within iframes with the magnifying glass.

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

        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::inspect):
        (WebCore::InspectorController::handleMousePress):
        * inspector/InspectorController.h:
        * page/EventHandler.cpp:
        (WebCore::EventHandler::handleMousePressEvent):

2010-04-09  Tasuku Suzuki  <tasuku.suzuki@nokia.com>

        Reviewed by Simon Hausmann.

        [Qt]Fix compile error with QT_NO_PROPERTIES
        https://bugs.webkit.org/show_bug.cgi?id=36526

        Disable dynamic properties when QT_NO_PROPERTIES is defined.

        * bridge/qt/qt_class.cpp:
        (JSC::Bindings::QtClass::fieldNamed):
        * bridge/qt/qt_instance.cpp:
        (JSC::Bindings::QtInstance::getPropertyNames):
        (JSC::Bindings::QtField::name):
        (JSC::Bindings::QtField::valueFromInstance):
        (JSC::Bindings::QtField::setValueToInstance):
        * bridge/qt/qt_runtime.h:
        (JSC::Bindings::QtField::):

2010-04-09  David Leong  <david.leong@nokia.com>

        Reviewed by Simon Hausmann.

        [Qt] Symbian apps crash on exit due to a bad qObject_cast.

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

        Added check for NULL to avoid the crash.

        * plugins/symbian/PluginViewSymbian.cpp:
        (WebCore::PluginView::platformDestroy):

2010-04-09  Mark Rowe  <mrowe@apple.com>

        Reviewed by Oliver Hunt.

        <http://webkit.org/b/37326> IDL files are being copied in to the WebCore framework again

        * WebCore.xcodeproj/project.pbxproj: Wire up the script.  Remove the three inappropriate
        files from the Copy Bundle Resources build phase.

2010-04-09  Zhenyao Mo  <zmo@google.com>

        Reviewed by Darin Fisher.

        Passing null WebGLObjects should synthesize INVALID_VALUE error
        https://bugs.webkit.org/show_bug.cgi?id=37047

        * html/canvas/WebGLRenderingContext.cpp: Synthesize INVALID_VALUE error when input object is 0.
        (WebCore::WebGLRenderingContext::bindAttribLocation):
        (WebCore::WebGLRenderingContext::compileShader):
        (WebCore::WebGLRenderingContext::detachShader):
        (WebCore::WebGLRenderingContext::validateWebGLObject):
        (WebCore::WebGLRenderingContext::getActiveAttrib):
        (WebCore::WebGLRenderingContext::getActiveUniform):
        (WebCore::WebGLRenderingContext::getProgramParameter):
        (WebCore::WebGLRenderingContext::getProgramInfoLog):
        (WebCore::WebGLRenderingContext::getShaderParameter):
        (WebCore::WebGLRenderingContext::getShaderInfoLog):
        (WebCore::WebGLRenderingContext::getShaderSource):
        (WebCore::WebGLRenderingContext::getUniform):
        (WebCore::WebGLRenderingContext::getUniformLocation):
        (WebCore::WebGLRenderingContext::linkProgram):
        (WebCore::WebGLRenderingContext::shaderSource):
        * html/canvas/WebGLRenderingContext.h: Add helper function to validate webgl object input parameters.

2010-04-09  Zhenyao Mo  <zmo@google.com>

        Reviewed by Dimitri Glazkov.

        Must resolve multisampled back buffer during copyTexImage2D and copyTexSubImage2D
        https://bugs.webkit.org/show_bug.cgi?id=37174

        Test: fast/canvas/webgl/copy-tex-image-and-sub-image-2d.html

        * platform/graphics/mac/GraphicsContext3DMac.cpp: resolve multisampled back buffer during copyTexImage2D and copyTexSubImage2D.
        (WebCore::GraphicsContext3D::copyTexImage2D):
        (WebCore::GraphicsContext3D::copyTexSubImage2D):

2010-04-09  Evan Stade  <estade@chromium.org>

        Reviewed by Dimitri Glazkov.

        [chromium] <select> dropdowns don't die when an item is selected
        https://bugs.webkit.org/show_bug.cgi?id=37243

        * platform/chromium/PopupMenuChromium.cpp:
        (WebCore::PopupContainer::hidePopup):
        (WebCore::PopupContainer::notifyPopupHidden):
        (WebCore::PopupListBox::hidePopup): inform container that popup is closing
        * platform/chromium/PopupMenuChromium.h:

2010-04-09  Jocelyn Turcotte  <jocelyn.turcotte@nokia.com>

        Reviewed by Simon Hausmann.

        [Qt] Fix crashes with package builds in release

        * WebCore.pro: Don't add NDEBUG to the defines here, add it from JavaScriptCore.pri

2010-04-09  Kenneth Rohde Christiansen  <kenneth@webkit.org>

        Reviewed by Simon Fraser.

        Remove "all" value from the view-mode media feature (as agreed on
        1-Apr-2010) in the Widgets voice conf.

        * css/CSSValueKeywords.in:
        * css/MediaQueryEvaluator.cpp:
        (WebCore::view_modeMediaFeatureEval):

2010-04-09  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r57286.
        http://trac.webkit.org/changeset/57286
        https://bugs.webkit.org/show_bug.cgi?id=37312

        "Caused intermittent test failures on all Mac bots."
        (Requested by eseidel on #webkit).

        * storage/DatabaseTracker.cpp:
        (WebCore::DatabaseTracker::originQuotaManagerNoLock):
        (WebCore::DatabaseTracker::originQuotaManager):
        (WebCore::DatabaseTracker::DatabaseTracker):
        (WebCore::DatabaseTracker::canEstablishDatabase):
        (WebCore::DatabaseTracker::hasEntryForOrigin):
        (WebCore::DatabaseTracker::getMaxSizeForDatabase):
        (WebCore::DatabaseTracker::fullPathForDatabaseNoLock):
        (WebCore::DatabaseTracker::fullPathForDatabase):
        (WebCore::DatabaseTracker::populateOrigins):
        (WebCore::DatabaseTracker::origins):
        (WebCore::DatabaseTracker::databaseNamesForOrigin):
        (WebCore::DatabaseTracker::addOpenDatabase):
        (WebCore::DatabaseTracker::removeOpenDatabase):
        (WebCore::DatabaseTracker::usageForOriginNoLock):
        (WebCore::DatabaseTracker::usageForOrigin):
        (WebCore::DatabaseTracker::quotaForOrigin):
        (WebCore::DatabaseTracker::setQuota):
        (WebCore::DatabaseTracker::deleteOrigin):
        (WebCore::DatabaseTracker::deleteDatabase):
        (WebCore::DatabaseTracker::deleteDatabaseFile):
        * storage/DatabaseTracker.h:
        * storage/SQLTransactionClient.cpp:
        (WebCore::SQLTransactionClient::didExecuteStatement):

2010-04-09  Andras Becsi  <abecsi@webkit.org>

        Reviewed by Simon Hausmann.

        [Qt] User agent style sheets are crippled by moc -E in make-css-file-arrays.pl
        https://bugs.webkit.org/show_bug.cgi?id=37296

        Do not use moc to preprocess user agent style sheets because it removes at-symbols
        and hexadecimal colours from declarations.
        Remove unneeded preprocessor usage from make-css-file-arrays.pl since the script
        processes default css files using regular expressions therefore preprocessing is redundant.

        * WebCore.pri: remove --preprocessor usage
        * css/make-css-file-arrays.pl: remove gcc dependency

2010-04-08  Chris Evans  <cevans@chromium.org>

        Reviewed by Sam Weinig.

        Use the new UserGestureIndictor for _blank POST requests.

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

        Test: fast/events/popup-blocked-to-post-blank.html

        * bindings/v8/ScriptController.cpp:
        (WebCore::ScriptController::processingUserGesture):
          Use UserGestureIndicator in more cases.
        * page/EventHandler.cpp:
        (WebCore::EventHandler):
          Impact from UserGestureIndicator API change.
        (WebCore::FrameLoader::submitForm):
          Block the load immediately if popups are not allowed and it would
          open a new window.
        * loader/RedirectScheduler.cpp:
        (WebCore::ScheduledFormSubmission::ScheduledFormSubmission):
          Note the UserGestureIndicator status at the time of submission.
        (WebCore::ScheduledFormSubmission::fire):
          Use the stored UserGestureIndicator status in the asynchronous
          callback.
        * dom/UserGestureIndicator.h:
        * dom/UserGestureIndicator.cpp:
        (WebCore::UserGestureIndicator::UserGestureIndicator):
          Add ability to store a negative indication.

2010-03-29  Antonio Gomes  <tonikitoo@webkit.org>

        Reviewed by Simon Fraser.

        Spatial Navigation: proper handle negative x or y coordinates
        https://bugs.webkit.org/show_bug.cgi?id=36773

        In Spatial Navigation logic, during rect acquisition in renderRectRelativeToRootDocument,
        sometimes negative x() or y() values are got, and the current algorithm bails out in
        any of such cases.

        However, when a node is in a scrollable content (content overflow <div>) and
        this scrollable container scrolled up, element gets offscreen, and gets negative values
        for y(), for example. In such cases, they are still valid to be used in Spatial Navigation
        logic.

        Test: fast/events/spatial-navigation/snav-offscreen-content.html

        * page/SpatialNavigation.cpp:
        (WebCore::distanceDataForNode):
        (WebCore::checkNegativeCoordsForNode):

2010-04-08  Dumitru Daniliuc  <dumi@chromium.org>

        Reviewed by Geoffrey Garen.

        Create the creation callback is the current world.
        https://bugs.webkit.org/show_bug.cgi?id=37290

        * bindings/js/JSDatabaseCallback.cpp:
        (WebCore::JSDatabaseCallback::JSDatabaseCallback):

2010-04-08  David Hyatt  <hyatt@apple.com>

        Reviewed by Oliver Hunt.

        Followup optimization to bug 24300, don't leak history info via CSS :visited.  If a Web
        site uses document colors that are the same for link and vlink in HTML and also doesn't
        specify any :link or :visited rules, then don't waste time resolving visited styles.

        There is a further optimization that could be done to detect when :link and :visited are
        used together in the same rule to specify a color, and this is how most sites turn off
        visited link colors, but this fix doesn't address that.  It just restores the optimization
        that existed prior to the patch in 24300 landing.

        * css/CSSGrammar.y:
        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::styleForElement):
        * dom/Document.cpp:
        (WebCore::Document::Document):
        * dom/Document.h:
        (WebCore::Document::usesLinkRules):
        (WebCore::Document::setUsesLinkRules):

2010-04-08  David Hyatt  <hyatt@apple.com>

        Reviewed by Oliver Hunt.

        Caught by pixel tests.  I missed patching the borderRightColor() call for fieldset border painting so the
        border stopped showing up.
        
        * rendering/RenderFieldset.cpp:
        (WebCore::RenderFieldset::paintBorderMinusLegend):

2010-04-07  David Hyatt  <hyatt@apple.com>

        Reviewed by Oliver Hunt.

        https://bugs.webkit.org/show_bug.cgi?id=24300, don't leak history info via CSS :visited.

        This patch implements the policy described by David Baron here:
        
        http://dbaron.org/mozilla/visited-privacy
        
        Added new tests in fast/history.

        * WebCore.base.exp:
        Expose functions needed for the WebKit SPI used by layout tests.

        * WebCore.xcodeproj/project.pbxproj:
        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::isVisited):
        Make sure accessibility objects still return visited information.
        
        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::CSSComputedStyleDeclaration::CSSComputedStyleDeclaration):
        (WebCore::CSSComputedStyleDeclaration::getPropertyCSSValue):
        * css/CSSComputedStyleDeclaration.h:
        (WebCore::computedStyle):
        Add a boolean to computed style declarations that - if set - causes the computed style
        to still return :visited information.  For normal Web pages, this will be false.  It is set
        to true for the Web Inspector and by the WebKit SPI used by the layout tests.

        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::initElement):
        (WebCore::CSSStyleSelector::SelectorChecker::SelectorChecker):
        (WebCore::CSSStyleSelector::SelectorChecker::determineLinkState):
        (WebCore::CSSStyleSelector::SelectorChecker::checkSelector):
        (WebCore::CSSStyleSelector::canShareStyleWithElement):
        (WebCore::CSSStyleSelector::styleForElement):
        (WebCore::CSSStyleSelector::keyframeStylesForAnimation):
        (WebCore::CSSStyleSelector::pseudoStyleForElement):
        (WebCore::CSSStyleSelector::pseudoStyleRulesForElement):
        (WebCore::CSSStyleSelector::checkSelector):
        (WebCore::CSSStyleSelector::SelectorChecker::checkOneSelector):
        (WebCore::CSSStyleSelector::applyPropertyToStyle):
        (WebCore::CSSStyleSelector::getColorFromPrimitiveValue):
        * css/CSSStyleSelector.h:
        Rework the style selector to resolve two styles instead of one.  The first forces the link to
        be unvisited, and the second forces the link to be visited.  The real state of the link is 
        cached on the principal (unvisited) style.  The visited style hangs off the principal style
        as a pseudo style (VISITED_LINK).

        * dom/Element.cpp:
        (WebCore::Element::pseudoStyleCacheIsInvalid):
        Make sure to deal with the VISITED_LINK pseudo to know when only :visited style info changed.

        * inspector/InspectorDOMAgent.cpp:
        (WebCore::InspectorDOMAgent::getStyles):
        Let the Web Inspector see :visited computed styles by default.
        
        * platform/LinkHash.cpp:
        (WebCore::visitedURL):
        Fix an issue where <a href=""> is not hashed properly to the document's base URI, so it wasn't
        correctly reported as :visited.

        * rendering/InlineFlowBox.cpp:
        (WebCore::InlineFlowBox::paintBoxDecorations):
        (WebCore::InlineFlowBox::paintTextDecorations):
        * rendering/InlineTextBox.cpp:
        (WebCore::InlineTextBox::paint):
        (WebCore::InlineTextBox::paintSelection):
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::paintColumnRules):
        (WebCore::RenderBlock::paintObject):
        * rendering/RenderBoxModelObject.cpp:
        (WebCore::RenderBoxModelObject::paintBorder):
        * rendering/RenderFieldset.cpp:
        (WebCore::RenderFieldset::paintBorderMinusLegend):
        * rendering/RenderImage.cpp:
        (WebCore::RenderImage::paintFocusRings):
        * rendering/RenderInline.cpp:
        (WebCore::RenderInline::paintOutline):
        (WebCore::RenderInline::paintOutlineForLine):
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::drawLineForBoxSide):
        (WebCore::RenderObject::drawArcForBoxSide):
        (WebCore::RenderObject::paintOutline):
        (WebCore::decorationColor):
        (WebCore::RenderObject::getTextDecorationColors):
        * rendering/RenderObject.h:
        * rendering/RenderPath.cpp:
        (WebCore::RenderPath::paint):
        * rendering/RenderReplaced.cpp:
        (WebCore::RenderReplaced::paint):
        * rendering/RenderSVGContainer.cpp:
        (WebCore::RenderSVGContainer::paint):
        * rendering/RenderSVGImage.cpp:
        (WebCore::RenderSVGImage::paint):
        * rendering/RenderSVGRoot.cpp:
        (WebCore::RenderSVGRoot::paint):
        * rendering/RenderTableCell.cpp:
        (WebCore::RenderTableCell::collapsedLeftBorder):
        (WebCore::RenderTableCell::collapsedRightBorder):
        (WebCore::RenderTableCell::collapsedTopBorder):
        (WebCore::RenderTableCell::collapsedBottomBorder):
        (WebCore::RenderTableCell::paintCollapsedBorder):
        * rendering/style/CollapsedBorderValue.h:
        (WebCore::CollapsedBorderValue::CollapsedBorderValue):
        (WebCore::CollapsedBorderValue::color):
        (WebCore::CollapsedBorderValue::operator==):
        Patch painting code to fetch visitedDependentColors from the RenderStyle.  Properties that
        are honored include background-color, color, border colors, outline color, column rules,
        and fill and stroke (both SVG and our custom versions).
    
        * rendering/style/RenderStyle.cpp:
        (WebCore::RenderStyle::RenderStyle):
        (WebCore::RenderStyle::diff):
        (WebCore::borderStyleForColorProperty):
        (WebCore::colorIncludingFallback):
        (WebCore::RenderStyle::visitedDependentColor):
        * rendering/style/RenderStyle.h:
        (WebCore::):
        (WebCore::InheritedFlags::NonInheritedFlags::operator==):
        (WebCore::InheritedFlags::setBitDefaults):
        (WebCore::InheritedFlags::insideLink):
        (WebCore::InheritedFlags::isLink):
        (WebCore::InheritedFlags::setInsideLink):
        (WebCore::InheritedFlags::setIsLink):
        * rendering/style/RenderStyleConstants.h:
        Change how link information is stored.  The noninherited flags now have a bit set for if you're a link
        or not.  The inherited flags now cache whether you're inside a visited or unvisited link (or no link at
        all).

        (WebCore::):
        * svg/graphics/SVGPaintServer.cpp:
        (WebCore::SVGPaintServer::fillPaintServer):
        (WebCore::SVGPaintServer::strokePaintServer):
        Patch SVG fill/stroke painting to honor :visited.

2010-04-08  Benjamin Otte  <otte@gnome.org>

        Reviewed by Gustavo Noronha.

        Fix build with MathML enabled.

        * GNUmakefile.am:

2010-04-08  Daniel Bates  <dbates@rim.com>

        No review, rolling out 56655.
        http://trac.webkit.org/changeset/56655
        https://bugs.webkit.org/show_bug.cgi?id=9268

        Rolling out the change committed in change set 56655
        because it caused a regression in some of the mozilla
        and mozilla expected failure test cases, such as:
        tables/mozilla/marvin/backgr_simple-table-row.html, and
        tables/mozilla/marvin/backgr_simple-table-row-group.html.

        We need to look into this issue some more.

        * rendering/RenderBoxModelObject.cpp:
        (WebCore::RenderBoxModelObject::paintFillLayerExtended):
        (WebCore::RenderBoxModelObject::calculateBackgroundImageGeometry):
        * rendering/RenderBoxModelObject.h:
        * rendering/RenderObject.h:
        * rendering/RenderTableCell.cpp:
        * rendering/RenderTableCell.h:

2010-03-30  Dumitru Daniliuc  <dumi@chromium.org>

        Reviewed by Dimitri Glazkov.

        Refactor DatabaseTracker, part 1: Remove the dependency on
        OriginQuotaManager from DatabaseTracker.h.

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

        * storage/DatabaseTracker.cpp:
        (originQuotaManager):
        (WebCore::DatabaseTracker::DatabaseTracker):
        (WebCore::DatabaseTracker::canEstablishDatabase):
        (WebCore::DatabaseTracker::hasEntryForOrigin):
        (WebCore::DatabaseTracker::getMaxSizeForDatabase):
        (WebCore::DatabaseTracker::databaseChanged):
        (WebCore::DatabaseTracker::fullPathForDatabaseNoLock):
        (WebCore::DatabaseTracker::fullPathForDatabase):
        (WebCore::DatabaseTracker::populateOrigins):
        (WebCore::DatabaseTracker::origins):
        (WebCore::DatabaseTracker::databaseNamesForOrigin):
        (WebCore::DatabaseTracker::removeOpenDatabase):
        (WebCore::DatabaseTracker::usageForOriginNoLock):
        (WebCore::DatabaseTracker::usageForOrigin):
        (WebCore::DatabaseTracker::quotaForOrigin):
        (WebCore::DatabaseTracker::setQuota):
        (WebCore::DatabaseTracker::deleteOrigin):
        (WebCore::DatabaseTracker::deleteDatabase):
        (WebCore::DatabaseTracker::deleteDatabaseFile):
        * storage/DatabaseTracker.h:
        * storage/SQLTransactionClient.cpp:
        (WebCore::SQLTransactionClient::didExecuteStatement):

2010-04-08  Kwang Yul Seo  <skyul@company100.net>

        Reviewed by Simon Hausmann.

        [WINCE] Replace max with std::max
        https://bugs.webkit.org/show_bug.cgi?id=37201

        std::max is preferred.

        * platform/wince/FileSystemWince.cpp:
        (WebCore::makeAllDirectories):
        (WebCore::pathGetFileName):

2010-04-08  Antonio Gomes  <tonikitoo@webkit.org>

        Reviewed by Laszlo Gombos.

        [EFL] Move AccessibilityObjectEfl.cpp from page to accessibility
        https://bugs.webkit.org/show_bug.cgi?id=36405

        * accessibility/efl/AccessibilityObjectEfl.cpp: Renamed from WebCore/page/efl/AccessibilityObjectEfl.cpp.
        (WebCore::AccessibilityObject::accessibilityIgnoreAttachment):

2010-04-08  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Yury Semikhatsky.

        Web Inspector: Render Load, DOM Content and MarkTimeline event dividers on Timeline panel.

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

        * English.lproj/localizedStrings.js:
        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::mainResourceFiredDOMContentEvent):
        (WebCore::InspectorController::mainResourceFiredLoadEvent):
        * inspector/InspectorController.h:
        * inspector/InspectorTimelineAgent.cpp:
        (WebCore::InspectorTimelineAgent::didMarkDOMContentEvent):
        (WebCore::InspectorTimelineAgent::didMarkLoadEvent):
        * inspector/InspectorTimelineAgent.h:
        (WebCore::):
        * inspector/front-end/ResourcesPanel.js:
        (WebInspector.ResourcesPanel.prototype.updateGraphDividersIfNeeded):
        * inspector/front-end/TimelineAgent.js:
        * inspector/front-end/TimelineGrid.js:
        (WebInspector.TimelineGrid.prototype.removeEventDividers):
        * inspector/front-end/TimelinePanel.js:
        (WebInspector.TimelinePanel):
        (WebInspector.TimelinePanel.prototype.get _recordStyles):
        (WebInspector.TimelinePanel.prototype._updateMarks):
        (WebInspector.TimelinePanel.prototype._innerAddRecordToTimeline):
        (WebInspector.TimelinePanel.prototype._clearPanel):
        (WebInspector.TimelinePanel.prototype._refresh):
        (WebInspector.TimelinePanel.prototype._refreshRecords):
        (WebInspector.TimelineCalculator.prototype.computeBarGraphWindowPosition):
        (WebInspector.TimelineRecordGraphRow.prototype.update):
        * inspector/front-end/inspector.css:
        (.resources-event-divider):
        (.resources-red-divider):
        (.resources-blue-divider):
        (.resources-orange-divider):

2010-04-01  Antonio Gomes  <tonikitoo@webkit.org>

        Reviewed by David Hyatt.

        [Qt] REGRESSION:(r50665) QWebFrame::setScrollBarPolicy(Qt::Vertical,Qt::ScrollBarAlwaysOff) has no effect.
        https://bugs.webkit.org/show_bug.cgi?id=29431

        Test: fast/overflow/scrollbar-restored-and-then-locked.html

        Patch introduces a lock scrollbars concept to ScrollView, as in WebDynamicScrollBarsView.mm/h
        on WebKit/mac. It is needed because in QtWebKit, we have Api for setting both vertical and
        horizontal scrollbars on/off/auto. When it is set to off, for example, it should remain
        as such, unless unset.

        For the locking concept, optional 'lock' parameters were added to setScrollbarModes,
        setHorizontalScrollbarMode and setVerticalScrollbarMode methods of ScrollView. As these
        are all optional, any previous code calling them do not need modification.

        Two optional parameters were also added to Frame's createView method, for horizontal and vertical
        lock state persistence cross page loads.

        * page/Frame.cpp:
        (WebCore::Frame::createView):
        * platform/ScrollView.cpp:
        (WebCore::ScrollView::ScrollView):
        (WebCore::ScrollView::setScrollbarModes):
        (WebCore::ScrollView::setHorizontalScrollbarMode):
        (WebCore::ScrollView::setVerticalScrollbarMode):
        * platform/ScrollView.h:
        (WebCore::ScrollView::setHorizontalScrollbarLock):
        (WebCore::ScrollView::isHorizontalScrollbarLocked):
        (WebCore::ScrollView::setVerticalScrollbarLock):
        (WebCore::ScrollView::isVerticalScrollbarLocked):
        (WebCore::ScrollView::setScrollingModesLocked):

2010-04-08  Yury Semikhatsky  <yurys@chromium.org>

        Reviewed by Pavel Feldman.

        Correctly save number of properties when object being serialized
        have properties in its prorotype.

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

        * bindings/v8/SerializedScriptValue.cpp:
        (WebCore::ZigZag::Serializer::AbstractObjectState::AbstractObjectState):
        (WebCore::ZigZag::Serializer::AbstractObjectState::advance):

2010-04-08  Jeremy Orlow  <jorlow@chromium.org>

        Reviewed by Yury Semikhatsky.

        IDB callbacks should fire asynchronously
        https://bugs.webkit.org/show_bug.cgi?id=37265

        Fix the firing behavior of the callbacks to not be synchronous.

        There's still a major bug that I'm trying to track down that is keeping
        us from testing this stuff.  Promise lots of tests ASAP.

        * bindings/v8/custom/V8CustomIDBCallbacks.h:
        (WebCore::V8CustomIDBCallbacks::onSuccessAsync):
        (WebCore::V8CustomIDBCallbacks::onErrorAsync):
        * storage/IDBCallbacks.h:
        (WebCore::IDBCallbacks::IDBCallbacks):
        (WebCore::IDBCallbacks::onSuccess):
        (WebCore::IDBCallbacks::onError):
        (WebCore::IDBCallbacks::timerFired):
        * storage/IndexedDatabaseRequest.cpp:

2010-04-08  Kent Tamura  <tkent@chromium.org>

        Reviewed by Darin Adler.

        willValidate doesn't need to check existence of a form element and a name attribute.
        https://bugs.webkit.org/show_bug.cgi?id=34733

        Remove checks against m_form and m_hasName in
        HTMLFormControlElement::willValidate(), and remove the code to
        track their updates.

        Test: fast/forms/willvalidate.html

        * html/HTMLFormControlElement.cpp:
        (WebCore::HTMLFormControlElement::HTMLFormControlElement):
        (WebCore::HTMLFormControlElement::parseMappedAttribute):
        (WebCore::HTMLFormControlElement::insertedIntoTree):
        (WebCore::HTMLFormControlElement::removedFromTree):
        (WebCore::HTMLFormControlElement::recalcWillValidate):
        (WebCore::HTMLFormControlElement::willValidate):
        (WebCore::HTMLFormControlElement::setNeedsWillValidateCheck):
        * html/HTMLFormControlElement.h:
        (WebCore::HTMLFormControlElement::formDestroyed):
        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::setInputType):
          setNeedsWillValidateCheck() should be called before
          setAttribute(valueAttr, ...) is called.

2010-04-08  Young Han Lee  <joybro@company100.net>

        Reviewed by Simon Hausmann.

        [WINCE] Add missing headers
        https://bugs.webkit.org/show_bug.cgi?id=37199

        Include missing headers.

        * platform/graphics/wince/FontCustomPlatformData.cpp:
        * platform/graphics/wince/FontPlatformData.cpp:
        * platform/graphics/wince/GraphicsContextWince.cpp:
        * platform/graphics/wince/ImageBufferWince.cpp:
        * platform/graphics/wince/PlatformPathWince.h:
        * platform/wince/FileSystemWince.cpp:

2010-04-08  Kwang Yul Seo  <skyul@company100.net>

        Reviewed by Simon Hausmann.

        [WINCE] Use WebCore::instanceHandle()
        https://bugs.webkit.org/show_bug.cgi?id=37202

        Page::instanceHandle() is moved to WebCore::instanceHandle().

        * platform/wince/PasteboardWince.cpp:
        (WebCore::Pasteboard::Pasteboard):
        * platform/wince/SharedTimerWince.cpp:
        (WebCore::initializeOffScreenTimerWindow):

2010-04-08  Vitaly Repeshko  <vitalyr@chromium.org>

        Reviewed by Dimitri Glazkov.

        [V8] Fix crash in NodeFilterCondition in detached iframe
        https://bugs.webkit.org/show_bug.cgi?id=37234

        Test: fast/dom/node-filter-detached-iframe-crash.html

        * bindings/v8/V8NodeFilterCondition.cpp:
        (WebCore::V8NodeFilterCondition::acceptNode): Switched to using
        callFunctionWithoutFrame.
        * bindings/v8/V8Proxy.cpp:
        (WebCore::V8Proxy::callFunctionWithoutFrame): Added a function to
        call V8 with no current frame.
        * bindings/v8/V8Proxy.h:

2010-04-08  Jarkko Sakkinen  <jarkko.sakkinen@tieto.com>

        Reviewed by Simon Hausmann.

         [Qt] Remove shaderSource manipulation from GraphicsContext3DQt.cpp
         https://bugs.webkit.org/show_bug.cgi?id=37226

        * platform/graphics/qt/GraphicsContext3DQt.cpp:
        (WebCore::GraphicsContext3D::shaderSource):

2010-04-08  Chris Evans  <cevans@chromium.org>

        Reviewed by Adam Barth.

        Sanity: apply a max node depth to XML parsing.

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

        Test: fast/images/svg-nested.html

        * dom/XMLTokenizer.cpp:
        (WebCore::XMLTokenizer::pushCurrentNode):
          Error out the parse upon a really large node depth.

2010-04-07  Dumitru Daniliuc  <dumi@chromium.org>

        Reviewed by Jeremy Orlow.

        Fix Chromium's HTML5 DB support in --single-process mode.
        https://bugs.webkit.org/show_bug.cgi?id=37186.

        Always register and use Chromium's SQLite VFS for
        WebSQLDatabases. Keep using the default VFS in all other
        cases. This change should allow Chromium to support
        WebSQLDatabases in --single-process mode.

        Also, cleaning up a bit SQLiteFileSystemChromium and getting rid
        of the SQLITE_OPEN_FULLMUTEX flag: we use sqlite DB handles only
        on the DB thread, so we don't need multi-threaded support.

        * platform/sql/SQLiteDatabase.cpp:
        (WebCore::SQLiteDatabase::open):
        * platform/sql/SQLiteDatabase.h:
        * platform/sql/SQLiteFileSystem.cpp:
        (WebCore::SQLiteFileSystem::openDatabase):
        * platform/sql/SQLiteFileSystem.h:
        * platform/sql/chromium/SQLiteFileSystemChromium.cpp:
        (WebCore::SQLiteFileSystem::openDatabase):
        * platform/sql/chromium/SQLiteFileSystemChromiumPosix.cpp:
        (WebCore::SQLiteFileSystem::registerSQLiteVFS):
        * platform/sql/chromium/SQLiteFileSystemChromiumWin.cpp:
        (WebCore::SQLiteFileSystem::registerSQLiteVFS):
        * storage/Database.cpp:
        (WebCore::Database::performOpenAndVerify):

2010-04-07  Chris Marrin  <cmarrin@apple.com>

        Reviewed by Steve Falkenburg.

        Remove QuartzCoreInterface from the build
        
        No longer needed since QuartzCore.dll is now included in  the latest Safari release (4.0.5).
        This gets rid of all the function shims from the clients of QuartzCore.dll.

        * platform/graphics/win/GraphicsLayerCACF.cpp:
        (WebCore::GraphicsLayerCACF::updateLayerPreserves3D):
        * platform/graphics/win/WKCACFLayer.cpp:
        (WebCore::toCACFLayerType):
        (WebCore::toCACFContentsGravityType):
        (WebCore::fromCACFContentsGravityType):
        (WebCore::toCACFFilterType):
        (WebCore::fromCACFFilterType):
        (WebCore::WKCACFLayer::isTransformLayer):
        * platform/graphics/win/WKCACFLayerRenderer.cpp:
        (WebCore::WKCACFLayerRenderer::createRenderer):

2010-04-07  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r57178.
        http://trac.webkit.org/changeset/57178
        https://bugs.webkit.org/show_bug.cgi?id=37240

        Caused chromium browser_test and ui_test regressions
        (Requested by ojan on #webkit).

        * bindings/v8/ScriptController.cpp:
        (WebCore::ScriptController::processingUserGesture):

2010-04-07  Jian Li  <jianli@chromium.org>

        Reviewed by Adam Barth and Dmitry Titov.

        Add the comment and assert that we're generating version 4 random number
        based UUIDs.
        https://bugs.webkit.org/show_bug.cgi?id=36472

        * platform/UUID.cpp:
        (WebCore::createCanonicalUUIDString):
        * platform/UUID.h:

2010-04-07  Erik Arvidsson  <arv@chromium.org>

        Reviewed by Adam Barth.

        Allow white listing access from origin to local origin.
        https://bugs.webkit.org/show_bug.cgi?id=37228

        This makes it possible to load a local resource from a non local
        origin if the access has previously been white listed by calling
        SecurityOrigin::whiteListAccessFromOrigin.

        Test: http/tests/security/local-image-from-remote-whitelisted.html

        * page/OriginAccessEntry.cpp:
        (WebCore::OriginAccessEntry::OriginAccessEntry): Removed assert that only the http and https protocol are valid.
        * page/SecurityOrigin.cpp:
        (WebCore::SecurityOrigin::canRequest): Use isAccessWhiteListed
        (WebCore::SecurityOrigin::isAccessWhiteListed): Extracted code that goes through the originAccessMap to do the origin matching.
        (WebCore::SecurityOrigin::canLoad): Check if access has been white listed.
        * page/SecurityOrigin.h: Add private function isAccessWhiteListed

2010-04-07  Luiz Agostini  <luiz.agostini@openbossa.org>

        Reviewed by Darin Adler.

        Adding static method zero() to classes IntPoint and FloatPoint.
        https://bugs.webkit.org/show_bug.cgi?id=37220

        Adding static method zero() to classes IntPoint and FloatPoint as suggested by Darin Adler.

        * platform/graphics/FloatPoint.h:
        (WebCore::FloatPoint::zero):
        * platform/graphics/IntPoint.h:
        (WebCore::IntPoint::zero):
        (WebCore::IntPoint::clampNegativeToZero):

2010-04-07  Alexey Proskuryakov  <ap@apple.com>

        * platform/network/mac/AuthenticationMac.mm: Fix a typo in comment.

2010-04-07  Alexey Proskuryakov  <ap@apple.com>

        Reviewed by Darin Adler.

        https://bugs.webkit.org/show_bug.cgi?id=37230
        <rdar://problem/7813115> REGRESSION (4.0.5): Safari asks for credentials all the time when
        authenticating to Windows IIS Server

        * platform/network/ProtectionSpace.h: (WebCore::ProtectionSpaceAuthenticationScheme): Added
        a constant for ProtectionSpaceAuthenticationSchemeUnknown.

        * platform/network/cf/AuthenticationCF.cpp: (WebCore::core):
        * platform/network/cf/SocketStreamHandleCFNet.cpp: (WebCore::authenticationSchemeFromAuthenticationMethod):
        Return ProtectionSpaceAuthenticationSchemeUnknown for unknown scheme.

        * platform/network/mac/AuthenticationMac.mm:
        (WebCore::mac): Support NTLM on systems older than 10.6. We actually get this string from
        NSURLConnection, even though there was no public constant.
        (WebCore::core): Return ProtectionSpaceAuthenticationSchemeUnknown for unknown scheme.

2010-04-07  Jaime Yap  <jaimeyap@google.com>

        Reviewed by Pavel Feldman.

        Adds the ability to get the function symbol name when looking up the call location
        for records sent by the InspectorTimelineAgent.
        https://bugs.webkit.org/show_bug.cgi?id=36839

        No new tests.

        * bindings/js/ScriptCallStack.cpp:
        (WebCore::ScriptCallStack::callLocation):
        * bindings/js/ScriptCallStack.h:
        * bindings/v8/ScriptCallStack.cpp:
        (WebCore::ScriptCallStack::create):
        (WebCore::ScriptCallStack::callLocation):
        (WebCore::ScriptCallStack::ScriptCallStack):
        * bindings/v8/ScriptCallStack.h:
        * bindings/v8/ScriptDebugServer.cpp:
        (WebCore::ScriptDebugServer::createUtilityContext):
        (WebCore::ScriptDebugServer::topStackFrame):
        * bindings/v8/ScriptDebugServer.h:
        (WebCore::ScriptDebugServer::utilityContext):
        * bindings/v8/V8Proxy.cpp:
        * bindings/v8/V8Proxy.h:
        * inspector/TimelineRecordFactory.cpp:
        (WebCore::TimelineRecordFactory::createGenericRecord):

2010-04-07  Jay Civelli  <jcivelli@chromium.org>

        Reviewed by Jian Li.

        [chromium] Fixing a NULL pointer being dereferenced in some cases.
        https://bugs.webkit.org/show_bug.cgi?id=37141

        Test: platform/chromium/fast/forms/search-popup-crasher.html

        * platform/chromium/PopupMenuChromium.cpp:
        (WebCore::PopupMenu::~PopupMenu):

2010-04-07  Kinuko Yasuda  <kinuko@chromium.org>

        Reviewed by Jian Li.

        Add skeleton FileStream module for providing sync file operations for FileAPI
        https://bugs.webkit.org/show_bug.cgi?id=37217

        For now the module just defines an interface and is almost empty.
        Implementation will be added.

        No new tests; will be added when we have complete implementation.

        * GNUmakefile.am:
        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * html/FileStream.cpp: Added.
        * html/FileStream.h: Added.
        * html/FileStreamClient.h: Added.
        * html/FileThread.cpp:
        (WebCore::SameFilePredicate::SameFilePredicate):
        (WebCore::SameFilePredicate::operator()):
        (WebCore::FileThread::unscheduleTasks):
        * html/FileThread.h:
        (WebCore::FileThread::Task::stream):
        (WebCore::FileThread::Task::Task):

2010-04-07  Oliver Hunt  <oliver@apple.com>

        Reviewed by Darin Adler.

        Remove some unnecessary uses of commonJSGlobalData
        https://bugs.webkit.org/show_bug.cgi?id=37229

        Pass the ExecState down to identifierFromNPIdentifier and update call sites

        * bridge/NP_jsobject.cpp:
        (_NPN_Invoke):
        (_NPN_GetProperty):
        (_NPN_SetProperty):
        (_NPN_RemoveProperty):
        (_NPN_HasProperty):
        (_NPN_HasMethod):
        * bridge/c/c_instance.cpp:
        (JSC::Bindings::CInstance::getPropertyNames):
        * bridge/c/c_utility.cpp:
        (JSC::Bindings::identifierFromNPIdentifier):
        * bridge/c/c_utility.h:

2010-04-07  Kenneth Rohde Christiansen  <kenneth@webkit.org>

        Reviewed by Darin Adler.

        Poor rendering on lala.com with frame flattening
        https://bugs.webkit.org/show_bug.cgi?id=37164

        Do not flatten offscreen iframes.

        Test: fast/frames/flattening/iframe-flattening-offscreen.html

        * rendering/RenderPartObject.cpp:
        (WebCore::RenderPartObject::flattenFrame):
        * rendering/RenderPartObject.h:

2010-04-07  Abhishek Arya  <inferno@chromium.org>

        Reviewed by Adam Barth.

        [V8] Add a missing check for constructor call in WebKitPointConstructor.
        https://bugs.webkit.org/show_bug.cgi?id=37210

        Test: fast/constructors/constructor-as-function-crash.html

        * bindings/v8/custom/V8WebKitPointConstructor.cpp:
        (WebCore::V8WebKitPoint::constructorCallback): Added a check for constructor call.

2010-04-07  Enrica Casucci  <enrica@apple.com>

        Reviewed by Darin Adler.

        https://bugs.webkit.org/show_bug.cgi?id=37219
        
        This change disables text caret for the iPhone platflorm.
        Added UNUSED_PARAM to build when ENABLE_TEXT_CARET is 0.

        * editing/SelectionController.cpp:
        (WebCore::SelectionController::recomputeCaretRect):
        (WebCore::SelectionController::paintCaret):
        * page/Frame.cpp:
        (WebCore::Frame::paintDragCaret):

2010-04-07  Enrica Casucci  <enrica@apple.com>

        Reviewed by Dave Hyatt.

        Text repainting does not account for glyphs which draw outside the typographic bounds of the font (6274).
        <rdar://problem/6649734>
        <https://bugs.webkit.org/show_bug.cgi?id=6274>
        
        In order to be able to handle successfully this case, it is necessary to change the glyph width cache to store
        the bounding box for the glyph instead of the simply caching the glyph width.
        Retrieving the bounding box for the glyph is expensive, therefore we do it only
        when we are rendering text using the complex text path to minimize the performance impact.
        To support characters with stacked diacritics, the method canUseGlyphCache has been modified to
        return false for the range of characters with stacked diacritics.
        The glyph cache has been also updated to allow storing the glyph bounding box together with the
        horizontal width. The bounding box is populated only for complex text.
        
        The original version of this patch has been written by Dan Bernstein.

        Test: fast/repaint/stacked-diacritics.html

        * Android.mk: File name change.
        * GNUmakefile.am: File name change.
        * WebCore.base.exp: Added parameter in exported function.
        * WebCore.gypi: File name change.
        * WebCore.vcproj/WebCore.vcproj: File name change.
        * WebCore.xcodeproj/project.pbxproj: File name change.
        * platform/graphics/Font.cpp:
        (WebCore::Font::floatWidth): Added glyphOverflow parameter.
        * platform/graphics/Font.h:
        (WebCore::GlyphOverflow::GlyphOverflow): Added.
        (WebCore::Font::width): Added glyphOverflow parameter.
        * platform/graphics/FontFastPath.cpp:
        (WebCore::Font::canUseGlyphCache): Modified to render characters with stacked diacritics with complex text path.
        * platform/graphics/GlyphMetricsMap.cpp: Copied from WebCore/platform/graphics/GlyphWidthMap.cpp.
        (WebCore::GlyphMetricsMap::locatePageSlowCase): Class name changed to reflect new semantics.
        * platform/graphics/GlyphMetricsMap.h: Copied from WebCore/platform/graphics/GlyphWidthMap.h.
        (WebCore::GlyphMetricsMap::GlyphMetricsMap):
        (WebCore::GlyphMetricsMap::~GlyphMetricsMap):
        (WebCore::GlyphMetricsMap::metricsForGlyph):
        (WebCore::GlyphMetricsMap::widthForGlyph):
        (WebCore::GlyphMetricsMap::setMetricsForGlyph):
        (WebCore::GlyphMetricsMap::GlyphMetricsPage::metricsForGlyph):
        (WebCore::GlyphMetricsMap::GlyphMetricsPage::setMetricsForGlyph):
        (WebCore::GlyphMetricsMap::GlyphMetricsPage::setMetricsForIndex):
        (WebCore::GlyphMetricsMap::locatePage):
        * platform/graphics/GlyphWidthMap.cpp: Removed.
        * platform/graphics/GlyphWidthMap.h: Removed.
        * platform/graphics/SimpleFontData.cpp:
        (WebCore::SimpleFontData::platformGlyphInit):
        * platform/graphics/SimpleFontData.h:
        (WebCore::):
        (WebCore::SimpleFontData::widthForGlyph):
        (WebCore::SimpleFontData::metricsForGlyph):
        * platform/graphics/cairo/SimpleFontDataCairo.cpp:
        (WebCore::SimpleFontData::platformMetricsForGlyph): Name and signature change.
        * platform/graphics/chromium/FontChromiumWin.cpp:
        (WebCore::Font::floatWidthForComplexText): Added parameter.
        * platform/graphics/chromium/FontLinux.cpp:
        (WebCore::Font::floatWidthForComplexText): Added parameter.
        * platform/graphics/chromium/SimpleFontDataChromiumWin.cpp:
        (WebCore::SimpleFontData::platformMetricsForGlyph): Name and signature change.
        * platform/graphics/chromium/SimpleFontDataLinux.cpp:
        (WebCore::SimpleFontData::platformWidthForGlyph): Name and signature vachange
        * platform/graphics/efl/FontEfl.cpp:
        (WebCore::Font::floatWidthForComplexText): Name and signature change.
        * platform/graphics/gtk/SimpleFontDataPango.cpp:
        (WebCore::SimpleFontData::platformMetricsForGlyph): Name and signature change.
        * platform/graphics/haiku/FontHaiku.cpp:
        (WebCore::Font::floatWidthForComplexText): Added parameter.
        * platform/graphics/haiku/SimpleFontDataHaiku.cpp:
        (WebCore::SimpleFontData::platformMetricsForGlyph): Name and signature change.
        * platform/graphics/mac/ComplexTextController.cpp:
        (WebCore::ComplexTextController::ComplexTextController):
        (WebCore::ComplexTextController::adjustGlyphsAndAdvances):
        * platform/graphics/mac/ComplexTextController.h:
        (WebCore::ComplexTextController::minGlyphBoundingBoxX):
        (WebCore::ComplexTextController::maxGlyphBoundingBoxX):
        (WebCore::ComplexTextController::minGlyphBoundingBoxY):
        (WebCore::ComplexTextController::maxGlyphBoundingBoxY):
        * platform/graphics/mac/FontComplexTextMac.cpp:
        (WebCore::Font::floatWidthForComplexText): Added paramter.
        * platform/graphics/mac/SimpleFontDataMac.mm:
        (WebCore::SimpleFontData::platformMetricsForGlyph): Name and signature change.
        * platform/graphics/qt/FontQt.cpp:
        (WebCore::Font::floatWidthForComplexText): Added paramter.
        * platform/graphics/win/FontWin.cpp:
        (WebCore::Font::floatWidthForComplexText): Added parameter.
        * platform/graphics/win/SimpleFontDataCGWin.cpp:
        (WebCore::SimpleFontData::platformMetricsForGlyph): Name and signature change.
        * platform/graphics/win/SimpleFontDataWin.cpp:
        (WebCore::SimpleFontData::metricsForGDIGlyph):
        * platform/graphics/win/UniscribeController.cpp:
        (WebCore::UniscribeController::UniscribeController):
        (WebCore::UniscribeController::shapeAndPlaceItem):
        * platform/graphics/win/UniscribeController.h:
        (WebCore::UniscribeController::minGlyphBoundingBoxX):
        (WebCore::UniscribeController::maxGlyphBoundingBoxX):
        (WebCore::UniscribeController::minGlyphBoundingBoxY):
        (WebCore::UniscribeController::maxGlyphBoundingBoxY):
        * platform/graphics/wince/FontWince.cpp:
        (WebCore::Font::floatWidthForComplexText): Added parameter.
        * platform/graphics/wx/FontWx.cpp:
        (WebCore::Font::floatWidthForComplexText): Added parameter.
        * platform/graphics/wx/SimpleFontDataWx.cpp:
        (WebCore::SimpleFontData::platformMetricsForGlyph): Name and signature change.
        * rendering/InlineFlowBox.cpp:
        (WebCore::InlineFlowBox::placeBoxesHorizontally):
        (WebCore::InlineFlowBox::computeLogicalBoxHeights):
        (WebCore::InlineFlowBox::computeVerticalOverflow):
        * rendering/InlineTextBox.cpp:
        (WebCore::InlineTextBox::setFallbackFonts):
        (WebCore::InlineTextBox::fallbackFonts):
        (WebCore::InlineTextBox::setGlyphOverflow):
        (WebCore::InlineTextBox::glyphOverflow):
        * rendering/InlineTextBox.h:
        (WebCore::InlineTextBox::clearGlyphOverflowAndFallbackFontMap): Added.
        * rendering/RenderBlockLineLayout.cpp:
        (WebCore::RenderBlock::computeHorizontalPositionsForLine):
        (WebCore::RenderBlock::layoutInlineChildren):
        * rendering/RenderText.cpp:
        (WebCore::RenderText::RenderText):
        (WebCore::RenderText::styleDidChange):
        (WebCore::RenderText::widthFromCache):
        (WebCore::RenderText::trimmedPrefWidths):
        (WebCore::RenderText::calcPrefWidths):
        (WebCore::RenderText::setText):
        (WebCore::RenderText::width):
        * rendering/RenderText.h:

2010-04-07  Joseph Pecoraro  <joepeck@webkit.org>

        Reviewed by Darin Adler.

        Fix incorrect white-space in WebGLRenderingContext.idl
        https://bugs.webkit.org/show_bug.cgi?id=31339

        * html/canvas/WebGLRenderingContext.idl: Remove offending extra whitespace.

2010-04-07  Rodrigo Belem  <rodrigo.belem@openbossa.org>

        Reviewed by Simon Hausmann.

        [Qt] The build system is not installing the generated headers (QGraphicsWebView, QWebDatabase, etc)
        https://bugs.webkit.org/show_bug.cgi?id=37173

        This patch sets the correct path to the classheaders.pri and then
        fixes the installation of the generated headers.

        * WebCore.pro:

2010-04-05  Antonio Gomes  <tonikitoo@webkit.org>

        Reviewed by Kenneth Christiansen.

        Spatial Navigation: bail out as soon as algorithm finds a focus candidate is not applicable
        https://bugs.webkit.org/show_bug.cgi?id=37135

        It happens, for example, when distanceDataForNode assigns numeric_limits<long long> to
        current focus candidate's. It means that current candidate is not in direction, or not
        a valid target node.

        * page/FocusController.cpp:
        (WebCore::FocusController::findFocusableNodeInDirection):

2010-04-07  Andrey Kosyakov  <caseq@chromium.org>

        Reviewed by Yury Semikhatsky.

        Removed inspector methods from ScriptExecutionContext and derived classes.
        Removed MessageDestination parameter from console-related calls (we now always
        log to the same destination(s)).
        Removed redundant FrameLoaderClient::dispatchDidLoadResourceByXMLHttpRequest()
        https://bugs.webkit.org/show_bug.cgi?id=36949

        * dom/Document.cpp:
        (WebCore::Document::reportException):
        (WebCore::Document::addMessage):
        * dom/Document.h:
        * dom/ScriptExecutionContext.h:
        * loader/EmptyClients.h:
        (WebCore::EmptyFrameLoaderClient::dispatchDidLoadResourceFromMemoryCache):
        * loader/FrameLoaderClient.h:
        * loader/ResourceLoadNotifier.cpp:
        * loader/ResourceLoadNotifier.h:
        * websockets/WebSocket.cpp:
        (WebCore::WebSocket::connect):
        * websockets/WebSocketChannel.cpp:
        (WebCore::WebSocketChannel::didOpen):
        (WebCore::WebSocketChannel::appendToBuffer):
        * websockets/WebSocketHandshake.cpp:
        (WebCore::WebSocketHandshake::readServerHandshake):
        (WebCore::WebSocketHandshake::readHTTPHeaders):
        (WebCore::WebSocketHandshake::checkResponseHeaders):
        * workers/DefaultSharedWorkerRepository.cpp:
        (WebCore::postConsoleMessageTask):
        (WebCore::SharedWorkerProxy::postConsoleMessageToWorkerObject):
        * workers/WorkerContext.cpp:
        (WebCore::WorkerContext::importScripts):
        (WebCore::WorkerContext::addMessage):
        * workers/WorkerContext.h:
        * workers/WorkerMessagingProxy.cpp:
        (WebCore::postConsoleMessageTask):
        (WebCore::WorkerMessagingProxy::postConsoleMessageToWorkerObject):
        * workers/WorkerMessagingProxy.h:
        * workers/WorkerReportingProxy.h:
        * xml/XMLHttpRequest.cpp:
        (WebCore::reportUnsafeUsage):
        (WebCore::XMLHttpRequest::didFinishLoading):

2010-04-07  Dawit Alemayehu  <adawit@kde.org>

        Reviewed by Simon Hausmann.

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

        Replaced the 'shouldTreatAsAttachment' function with a more generic 
        function that returns the content disposition type.

        See comments 39-42 in https://bugs.webkit.org/show_bug.cgi?id=36395

        * platform/network/HTTPParsers.cpp:
        (WebCore::contentDispositionType):
        * platform/network/HTTPParsers.h:
        (WebCore::):

2010-04-07  Vitaly Repeshko  <vitalyr@chromium.org>

        Reviewed by Yury Semikhatsky.

        [V8] Throw exception in SerializedScriptValue on input errors
        https://bugs.webkit.org/show_bug.cgi?id=37160

        When cycles are detected SerializedScriptValue should throw
        NOT_SUPPORTED_ERR. See
        http://www.whatwg.org/specs/web-apps/2009-10-27/multipage/urls.html#structured-clone

        * bindings/scripts/CodeGeneratorV8.pm: Custom processing for
        function arguments of type SerializedScriptValue.

        * bindings/v8/SerializedScriptValue.cpp:
        (WebCore::SerializedScriptValue::SerializedScriptValue):
        * bindings/v8/SerializedScriptValue.h:
        (WebCore::SerializedScriptValue::create): Added a constructor
        function with an extra paratemer to check whether an exception was
        thrown.

        SerializedScriptValue::create callers updated to check for
        exceptions:
        * bindings/v8/custom/V8DOMWindowCustom.cpp:
        (WebCore::V8DOMWindow::postMessageCallback):
        * bindings/v8/custom/V8DedicatedWorkerContextCustom.cpp:
        (WebCore::V8DedicatedWorkerContext::postMessageCallback):
        * bindings/v8/custom/V8HistoryCustom.cpp:
        (WebCore::V8History::pushStateCallback):
        (WebCore::V8History::replaceStateCallback):
        * bindings/v8/custom/V8MessagePortCustom.cpp:
        (WebCore::V8MessagePort::postMessageCallback):
        * bindings/v8/custom/V8PopStateEventCustom.cpp:
        (WebCore::V8PopStateEvent::initPopStateEventCallback):
        * bindings/v8/custom/V8WorkerCustom.cpp:
        (WebCore::V8Worker::postMessageCallback):

2010-04-07  Alexander Pavlov  <apavlov@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: Provide a placeholder for resources with no content available
        https://bugs.webkit.org/show_bug.cgi?id=37142

        * English.lproj/localizedStrings.js:
        * inspector/front-end/ImageView.js:
        (WebInspector.ImageView):
        (WebInspector.ImageView.prototype.contentTabSelected):
        * inspector/front-end/ResourceView.js:
        (WebInspector.ResourceView.prototype._innerSelectContentTab):
        (WebInspector.ResourceView.prototype.contentTabSelected):
        * inspector/front-end/inspector.css:
        (.resource-content-unavailable):

2010-04-07  Simon Hausmann  <simon.hausmann@nokia.com>

        Reviewed by Laszlo Gombos.

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

        [Qt] Package build without touch support is broken

        Use the conditional attribute instead of #ifdefs in the idl file for the
        touch specific properties, to make the generated files compile with and
        without the touch events enabled.

        * dom/Document.idl: Use conditional instead of #ifdef.
        * dom/Element.idl: Ditto.
        * page/DOMWindow.idl: Ditto.

2010-04-07  Simon Hausmann  <simon.hausmann@nokia.com>

        Reviewed by Holger Freyther.

        Add the touch event related IDL files to the idl generation, so that
        they can be safely included from generated JS bindings files. The
        generated files have #ifdef feature guards.

        * DerivedSources.cpp:
        * DerivedSources.make:
        * GNUmakefile.am:

2010-04-06  Jeremy Orlow  <jorlow@chromium.org>

        Reviewed by Adam Barth.

        V8CustomIDBCallbacks<> should not hold a reference to the frame
        https://bugs.webkit.org/show_bug.cgi?id=37154

        Don't hold on to a Frame reference.
        Instead, be an ActiveDOMObject and use scriptExecutionContext()
        to get the v8 context.
        Factor the guts of onSuccess and onError out.

        Doesn't work enough to test yet.

        * bindings/v8/custom/V8CustomIDBCallbacks.h:
        (WebCore::V8CustomIDBCallbacks::create):
        (WebCore::V8CustomIDBCallbacks::onSuccess):
        (WebCore::V8CustomIDBCallbacks::onError):
        (WebCore::V8CustomIDBCallbacks::V8CustomIDBCallbacks):
        (WebCore::V8CustomIDBCallbacks::onEvent):
        * bindings/v8/custom/V8IndexedDatabaseRequestCustom.cpp:
        (WebCore::V8IndexedDatabaseRequest::openCallback):
        * storage/IDBCallbacks.h:
        (WebCore::IDBCallbacks::IDBCallbacks):

2010-04-07  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r57196.
        http://trac.webkit.org/changeset/57196
        https://bugs.webkit.org/show_bug.cgi?id=37196

        Multiple layout test failures on Chromium (Requested by yurys
        on #webkit).

        * bindings/js/ScriptCallStack.cpp:
        (WebCore::ScriptCallStack::callLocation):
        * bindings/js/ScriptCallStack.h:
        * bindings/v8/ScriptCallStack.cpp:
        (WebCore::ScriptCallStack::create):
        (WebCore::ScriptCallStack::callLocation):
        (WebCore::ScriptCallStack::ScriptCallStack):
        * bindings/v8/ScriptCallStack.h:
        * bindings/v8/ScriptDebugServer.cpp:
        * bindings/v8/ScriptDebugServer.h:
        * bindings/v8/V8Proxy.cpp:
        (WebCore::V8Proxy::createUtilityContext):
        (WebCore::V8Proxy::sourceLineNumber):
        (WebCore::V8Proxy::sourceName):
        * bindings/v8/V8Proxy.h:
        (WebCore::V8Proxy::utilityContext):
        * inspector/TimelineRecordFactory.cpp:
        (WebCore::TimelineRecordFactory::createGenericRecord):

2010-04-07  Simon Hausmann  <simon.hausmann@nokia.com>

        Unreviewed, rolling out r57199.
        http://trac.webkit.org/changeset/57199
        https://bugs.webkit.org/show_bug.cgi?id=36750

        Breaks non-touch enabled build

        * dom/Document.idl:
        * dom/Element.idl:
        * page/DOMWindow.idl:

2010-04-07  Simon Hausmann  <simon.hausmann@nokia.com>

        Reviewed by Laszlo Gombos.

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

        [Qt] Package build without touch support is broken

        Use the conditional attribute instead of #ifdefs in the idl file for the
        touch specific properties, to make the generated files compile with and
        without the touch events enabled.

        * dom/Document.idl: Use conditional instead of #ifdef.
        * dom/Element.idl: Ditto.
        * page/DOMWindow.idl: Ditto.

2010-04-07  Jaime Yap  <jaimeyap@google.com>

        Reviewed by Yury Semikhatsky.

        Adds the ability to get the function symbol name when looking up the call location
        for records sent by the InspectorTimelineAgent.
        https://bugs.webkit.org/show_bug.cgi?id=36839

        No new tests.

        * bindings/js/ScriptCallStack.cpp:
        (WebCore::ScriptCallStack::callLocation):
        * bindings/js/ScriptCallStack.h:
        * bindings/v8/ScriptCallStack.cpp:
        (WebCore::ScriptCallStack::create):
        (WebCore::ScriptCallStack::callLocation):
        (WebCore::ScriptCallStack::ScriptCallStack):
        * bindings/v8/ScriptCallStack.h:
        * bindings/v8/ScriptDebugServer.cpp:
        (WebCore::ScriptDebugServer::createUtilityContext):
        (WebCore::ScriptDebugServer::lastCallFrame):
        * bindings/v8/ScriptDebugServer.h:
        (WebCore::ScriptDebugServer::utilityContext):
        * bindings/v8/V8Proxy.cpp:
        * bindings/v8/V8Proxy.h:
        * inspector/TimelineRecordFactory.cpp:
        (WebCore::TimelineRecordFactory::createGenericRecord):

2010-04-06  Greg Bolsinga  <bolsinga@apple.com>

        Reviewed by Darin Adler.

        https://bugs.webkit.org/show_bug.cgi?id=37188
        WebCore::page::Geolocation::m_shouldClearCache is not used.

        * page/Geolocation.cpp:
        (WebCore::Geolocation::Geolocation): Remove m_shouldClearCache.
        * page/Geolocation.h:
        (WebCore::Geolocation::): Ditto.

2010-04-06  Laszlo Gombos  <laszlo.1.gombos@nokia.com>

        Reviewed by Eric Seidel.

        Remove obsolete MOBILE flag
        https://bugs.webkit.org/show_bug.cgi?id=37125

        The MOBILE flag is no longer used by any of the ports.
        The flag use to control some tokenizer defaults that 
        can be changed runtime.

        No new tests as there is no new functionality.

        * config.h:
        * html/HTMLTokenizer.cpp:

2010-04-06  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        REGRESSION: Worker termination via JS timeout may cause worker tests like fast/workers/worker-terminate.html fail.
        https://bugs.webkit.org/show_bug.cgi?id=36646

        Cause the worker code to swallow termination exceptions because these
        need not be reported to the user because they are an implementation
        detail of how we terminate worker execution.

        Test: fast/workers/worker-terminate-forever.html

        * bindings/js/JSDOMBinding.cpp:
        (WebCore::reportException):
            - Refuse to report termination exceptions to the user because they
              are an implementation detail.
        * bindings/js/WorkerScriptController.cpp:
        (WebCore::WorkerScriptController::forbidExecution):
            - Instead of using timeouts to stop run away workers, use our fancy
              new Terminator object.

2010-04-06  Kinuko Yasuda  <kinuko@chromium.org>

        Reviewed by Jian Li.

        Add basic FileSystem operations for FileReader/FileWriter support for POSIX (incl. Mac)
        https://bugs.webkit.org/show_bug.cgi?id=36938

        No new tests; will be added when we implement upper layers.

        * platform/FileSystem.h:
        (WebCore::):
        * platform/posix/FileSystemPOSIX.cpp:
        (WebCore::openFile):
        (WebCore::closeFile):
        (WebCore::seekFile):
        (WebCore::truncateFile):
        (WebCore::writeToFile):
        (WebCore::readFromFile):

2010-04-06  Nicolas Weber  <thakis@chromium.org>

        Reviewed by Dimitri Glazkov.

        Implement DragImage functionality for chromium/mac.
        https://bugs.webkit.org/show_bug.cgi?id=37069

        * page/chromium/DragControllerChromium.cpp:
        (WebCore::DragController::maxDragImageSize):
        Use a max size of 400x400 on OS X.
        * platform/chromium/DragImageChromiumMac.cpp:
        (WebCore::dragImageSize): Implement.
        (WebCore::deleteDragImage): Implement.
        (WebCore::scaleDragImage): Implement.
        (WebCore::dissolveDragImageToFraction): Implement.
        (WebCore::createDragImageFromImage): Implement.
        * platform/chromium/DragImageRef.h:
        Use CGImageRefs as DragImageRef on OS X.

2010-04-06  Chris Evans  <cevans@chromium.org>

        Reviewed by Adam Barth.

        Use the new UserGestureIndictor to process javascript:window.open()

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

        * bindings/v8/ScriptController.cpp
        (WebCore::ScriptController::processingUserGesture):
          Use the new UserGestureIndicator when processing a
          javascript:window.open()

2010-04-06  Vangelis Kokkevis  <vangelis@chromium.org>

        Reviewed by Dimitri Glazkov.

        Renaming Graphics Layer related classes used by Chromium from *Skia to *Chromium and replacing wherever possible Skia-specific
        data types with WebCore equivalents. The source files will be renamed accordingly and moved out of platform/graphics/skia
        in a subsequent CL.
        https://bugs.webkit.org/show_bug.cgi?id=37116

        No new functionality so no new tests.

        * platform/graphics/GraphicsLayer.h:
        * platform/graphics/skia/GraphicsLayerSkia.cpp:
        (WebCore::setLayerBorderColor):
        (WebCore::clearBorderColor):
        (WebCore::setLayerBackgroundColor):
        (WebCore::clearLayerBackgroundColor):
        (WebCore::GraphicsLayer::create):
        (WebCore::GraphicsLayerChromium::GraphicsLayerChromium):
        (WebCore::GraphicsLayerChromium::~GraphicsLayerChromium):
        (WebCore::GraphicsLayerChromium::setName):
        (WebCore::GraphicsLayerChromium::nativeLayer):
        (WebCore::GraphicsLayerChromium::setChildren):
        (WebCore::GraphicsLayerChromium::addChild):
        (WebCore::GraphicsLayerChromium::addChildAtIndex):
        (WebCore::GraphicsLayerChromium::addChildBelow):
        (WebCore::GraphicsLayerChromium::addChildAbove):
        (WebCore::GraphicsLayerChromium::replaceChild):
        (WebCore::GraphicsLayerChromium::removeFromParent):
        (WebCore::GraphicsLayerChromium::setPosition):
        (WebCore::GraphicsLayerChromium::setAnchorPoint):
        (WebCore::GraphicsLayerChromium::setSize):
        (WebCore::GraphicsLayerChromium::setTransform):
        (WebCore::GraphicsLayerChromium::setChildrenTransform):
        (WebCore::GraphicsLayerChromium::setPreserves3D):
        (WebCore::GraphicsLayerChromium::setMasksToBounds):
        (WebCore::GraphicsLayerChromium::setDrawsContent):
        (WebCore::GraphicsLayerChromium::setBackgroundColor):
        (WebCore::GraphicsLayerChromium::clearBackgroundColor):
        (WebCore::GraphicsLayerChromium::setContentsOpaque):
        (WebCore::GraphicsLayerChromium::setBackfaceVisibility):
        (WebCore::GraphicsLayerChromium::setOpacity):
        (WebCore::GraphicsLayerChromium::setNeedsDisplay):
        (WebCore::GraphicsLayerChromium::setNeedsDisplayInRect):
        (WebCore::GraphicsLayerChromium::setContentsRect):
        (WebCore::GraphicsLayerChromium::setContentsToImage):
        (WebCore::GraphicsLayerChromium::setContentsToVideo):
        (WebCore::GraphicsLayerChromium::setGeometryOrientation):
        (WebCore::GraphicsLayerChromium::hostLayerForSublayers):
        (WebCore::GraphicsLayerChromium::layerForSuperlayer):
        (WebCore::GraphicsLayerChromium::platformLayer):
        (WebCore::GraphicsLayerChromium::setDebugBackgroundColor):
        (WebCore::GraphicsLayerChromium::setDebugBorder):
        (WebCore::GraphicsLayerChromium::updateSublayerList):
        (WebCore::GraphicsLayerChromium::updateLayerPosition):
        (WebCore::GraphicsLayerChromium::updateLayerSize):
        (WebCore::GraphicsLayerChromium::updateAnchorPoint):
        (WebCore::GraphicsLayerChromium::updateTransform):
        (WebCore::GraphicsLayerChromium::updateChildrenTransform):
        (WebCore::GraphicsLayerChromium::updateMasksToBounds):
        (WebCore::GraphicsLayerChromium::updateContentsOpaque):
        (WebCore::GraphicsLayerChromium::updateBackfaceVisibility):
        (WebCore::GraphicsLayerChromium::updateLayerPreserves3D):
        (WebCore::GraphicsLayerChromium::updateLayerDrawsContent):
        (WebCore::GraphicsLayerChromium::updateLayerBackgroundColor):
        (WebCore::GraphicsLayerChromium::updateContentsImage):
        (WebCore::GraphicsLayerChromium::updateContentsVideo):
        (WebCore::GraphicsLayerChromium::updateContentsRect):
        (WebCore::GraphicsLayerChromium::updateGeometryOrientation):
        (WebCore::GraphicsLayerChromium::setupContentsLayer):
        (WebCore::GraphicsLayerChromium::updateOpacityOnLayer):
        * platform/graphics/skia/GraphicsLayerSkia.h:
        (WebCore::GraphicsLayerChromium::primaryLayer):
        (WebCore::GraphicsLayerChromium::contentsLayer):
        * platform/graphics/skia/LayerRendererSkia.cpp:
        (WebCore::LayerRendererChromium::create):
        (WebCore::LayerRendererChromium::LayerRendererChromium):
        (WebCore::LayerRendererChromium::~LayerRendererChromium):
        (WebCore::LayerRendererChromium::updateLayerContents):
        (WebCore::LayerRendererChromium::drawLayersInCanvas):
        (WebCore::LayerRendererChromium::drawLayerInCanvasRecursive):
        (WebCore::LayerRendererChromium::updateLayerContentsRecursive):
        * platform/graphics/skia/LayerRendererSkia.h:
        (WebCore::LayerRendererChromium::setRootLayer):
        (WebCore::LayerRendererChromium::rootLayer):
        * platform/graphics/skia/LayerSkia.cpp:
        (WebCore::LayerChromium::create):
        (WebCore::LayerChromium::LayerChromium):
        (WebCore::LayerChromium::~LayerChromium):
        (WebCore::LayerChromium::updateGraphicsContext):
        (WebCore::LayerChromium::updateContents):
        (WebCore::LayerChromium::drawDebugBorder):
        (WebCore::LayerChromium::setNeedsCommit):
        (WebCore::LayerChromium::addSublayer):
        (WebCore::LayerChromium::insertSublayer):
        (WebCore::LayerChromium::removeFromSuperlayer):
        (WebCore::LayerChromium::removeSublayer):
        (WebCore::LayerChromium::indexOfSublayer):
        (WebCore::LayerChromium::setBackingStoreRect):
        (WebCore::LayerChromium::setBounds):
        (WebCore::LayerChromium::setFrame):
        (WebCore::LayerChromium::rootLayer):
        (WebCore::LayerChromium::removeAllSublayers):
        (WebCore::LayerChromium::setSublayers):
        (WebCore::LayerChromium::setSuperlayer):
        (WebCore::LayerChromium::superlayer):
        (WebCore::LayerChromium::setNeedsDisplay):
        * platform/graphics/skia/LayerSkia.h:
        (WebCore::LayerChromium::setAnchorPoint):
        (WebCore::LayerChromium::anchorPoint):
        (WebCore::LayerChromium::borderWidth):
        (WebCore::LayerChromium::bounds):
        (WebCore::LayerChromium::frame):
        (WebCore::LayerChromium::setPosition):
        (WebCore::LayerChromium::position):
        (WebCore::LayerChromium::zPosition):
        (WebCore::LayerChromium::getSublayers):
        (WebCore::LayerChromium::setSublayerTransform):
        (WebCore::LayerChromium::sublayerTransform):
        (WebCore::LayerChromium::setTransform):
        (WebCore::LayerChromium::transform):

2010-04-06  Jarkko Sakkinen  <jarkko.j.sakkinen@gmail.com>

        Reviewed by Laszlo Gombos.

        [Qt] WebKit does not build on Windows with --3d-canvas
        https://bugs.webkit.org/show_bug.cgi?id=37026

        * platform/graphics/GraphicsContext3D.h:
        * platform/graphics/qt/GraphicsContext3DQt.cpp:
        (WebCore::GraphicsContext3D::getActiveAttrib):
        (WebCore::GraphicsContext3D::getActiveUniform):

2010-04-06  Abhinav Mithal <abhinav.mithal@nokia.com>

        Reviewed by Laszlo Gombos.

        [Qt] npapi header leaves XP_WIN flag defined even when __SYMBIAN32__ flag is found
        https://bugs.webkit.org/show_bug.cgi?id=34614

        Do not define XP_WIN if WebKit is compiled for Symbian.

        No new tests as there is no new functionality.

        * bridge/npapi.h:

2010-04-06  Chris Fleizach  <cfleizach@apple.com>

        Reviewed by Beth Dakin.

        aria-label doesn't work on image map area
        https://bugs.webkit.org/show_bug.cgi?id=36977

        Test: platform/mac/accessibility/area-with-aria-label.html

        * accessibility/AccessibilityImageMapLink.cpp:
        (WebCore::AccessibilityImageMapLink::accessibilityDescription):

2010-04-06  James Robinson  <jamesr@chromium.org>

        Reviewed by Simon Fraser.

        Reverts the incorrect fixed position fastpath scrolling logic
        https://bugs.webkit.org/show_bug.cgi?id=33150

        This code does not properly handle overflow or transforms on fixed
        position elements, causing repaint bugs on scroll.

        No new tests.

        * page/FrameView.cpp:
        (WebCore::FrameView::addFixedObject):
        (WebCore::FrameView::removeFixedObject):
        * page/FrameView.h:
        * platform/ScrollView.cpp:
        (WebCore::ScrollView::scrollContents):
        * platform/ScrollView.h:
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::styleWillChange):

2010-04-06  Kevin Ollivier  <kevino@theolliviers.com>

        [wx] Build fix for wxMac / Cocoa on wx trunk.
        
        * platform/wx/wxcode/mac/carbon/fontprops.mm:
        (wxFontContainsCharacters):

2010-04-06  Simon Hausmann  <simon.hausmann@nokia.com>

        Reviewed by Darin Adler.

        JS code generator does not support feature conditional attributes that are writable
        https://bugs.webkit.org/show_bug.cgi?id=37149

        Write out the feature #ifdef not only for the getter, but also for the setter
        function.

        * bindings/scripts/CodeGeneratorJS.pm:

2010-04-06  Evan Stade  <estade@chromium.org>

        Reviewed by Dimitri Glazkov.

        [chromium] need DragImage implementation
        https://bugs.webkit.org/show_bug.cgi?id=35811

        Use the DragImageRef that the DragController passes to us.

        This was previously committed but rolled back for breaking layout
        tests. The fix is on the WebKit/chromium side.

        * WebCore.gyp/WebCore.gyp:
        * WebCore.gypi:
        * platform/chromium/DragImageChromium.cpp: Removed.
        * platform/chromium/DragImageChromiumMac.cpp: Added.
        (WebCore::dragImageSize):
        (WebCore::deleteDragImage):
        (WebCore::scaleDragImage):
        (WebCore::dissolveDragImageToFraction):
        (WebCore::createDragImageFromImage):
        (WebCore::createDragImageIconForCachedImage):
        * platform/chromium/DragImageChromiumSkia.cpp: Added.
        (WebCore::dragImageSize):
        (WebCore::deleteDragImage):
        (WebCore::scaleDragImage):
        (WebCore::dissolveDragImageToFraction):
        (WebCore::createDragImageFromImage):
        (WebCore::createDragImageIconForCachedImage):
        * platform/chromium/DragImageRef.h:

2010-04-01  Yuzo Fujishima  <yuzo@google.com>

        Reviewed by Darin Adler.

        Fix bug: CSS3 :not selector with ID simple selector sequence test fails
        As per http://www.w3.org/TR/css3-selectors/#negation, :not(X) takes a simple selector as an argument.
        WebKit was accepting a simple selector *sequence*.
        This patch adds WebCore::CSSSelector::isSimple which judges if the selector is simple.
        The method is used in CSSGrammar.y to decide whether to accept the selector as the argument of :not().
        https://bugs.webkit.org/show_bug.cgi?id=36276

        Test: fast/css/invalid-not-with-simple-selector-sequence.html

        * css/CSSGrammar.y:
        * css/CSSSelector.cpp:
        (WebCore::CSSSelector::isSimple):
        * css/CSSSelector.h:

2010-04-06  Andy Estes  <aestes@apple.com>

        Rubber-stamped by Dan Bernstein.

        Remove non-ASCII characters from license headers to fix build errors on
        Japanese Windows.

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

        * dom/UserGestureIndicator.cpp:
        * dom/UserGestureIndicator.h:

2010-04-06  Andrei Popescu  <andreip@google.com>

        Reviewed by Dimitri Glazkov.

        [V8][Android] PageCache crashes when JavaScript is disabled
        https://bugs.webkit.org/show_bug.cgi?id=37150

        This patch ensures that saving and restoration of the script
        state only happens when JS is enabled and each frame has a
        non-null context.

        No new tests: existing tests show the feature is working
        when JS is enabled. When JS is disabled, manual testing
        is required.

        * bindings/v8/ScriptCachedFrameData.cpp:
        (WebCore::ScriptCachedFrameData::ScriptCachedFrameData):
        (WebCore::ScriptCachedFrameData::restore):

2010-04-06  Ilya Tikhonovsky  <loislo@chromium.org>

        Unreviewed build fix.

        Web Inspector: missed files were added.


        * GNUmakefile.am:
        * bindings/js/ScriptGCEvent.h: Added.
        (WebCore::ScriptGCEvent::addEventListener):
        (WebCore::ScriptGCEvent::removeEventListener):
        (WebCore::ScriptGCEvent::getHeapSize):
        * bindings/v8/ScriptGCEvent.cpp: Added.
        (WebCore::ScriptGCEvent::addEventListener):
        (WebCore::ScriptGCEvent::removeEventListener):
        (WebCore::ScriptGCEvent::getHeapSize):
        (WebCore::ScriptGCEvent::getUsedHeapSize):
        (WebCore::ScriptGCEvent::gcPrologueCallback):
        (WebCore::ScriptGCEvent::gcEpilogueCallback):
        * bindings/v8/ScriptGCEvent.h: Added.
        * inspector/ScriptGCEventListener.h: Added.
        (WebCore::ScriptGCEventListener::~ScriptGCEventListener):

2010-04-06  Ilya Tikhonovsky  <loislo@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: The JS code can be not optimal from memory usage point of view.
        As example it can generate a lot of temp objects and GC will spend significant time to collect these objects.
        GC event will show us these moments. Also each event can show us how much memory is in use.
        https://bugs.webkit.org/show_bug.cgi?id=37025

        * WebCore.gypi:
        * WebCore.pro:
        * inspector/InspectorTimelineAgent.cpp:
        (WebCore::InspectorTimelineAgent::InspectorTimelineAgent):
        (WebCore::InspectorTimelineAgent::pushGCEventRecords):
        (WebCore::InspectorTimelineAgent::didGC):
        (WebCore::InspectorTimelineAgent::~InspectorTimelineAgent):
        (WebCore::InspectorTimelineAgent::didInstallTimer):
        (WebCore::InspectorTimelineAgent::didRemoveTimer):
        (WebCore::InspectorTimelineAgent::willSendResourceRequest):
        (WebCore::InspectorTimelineAgent::didFinishLoadingResource):
        (WebCore::InspectorTimelineAgent::didMarkTimeline):
        (WebCore::InspectorTimelineAgent::addRecordToTimeline):
        (WebCore::InspectorTimelineAgent::setHeapSizeStatistic):
        (WebCore::InspectorTimelineAgent::didCompleteCurrentRecord):
        (WebCore::InspectorTimelineAgent::pushCurrentRecord):
        * inspector/InspectorTimelineAgent.h:
        (WebCore::):
        (WebCore::InspectorTimelineAgent::instanceCount):
        (WebCore::InspectorTimelineAgent::TimelineRecordEntry::TimelineRecordEntry):
        (WebCore::InspectorTimelineAgent::GCEvent::GCEvent):
        * inspector/TimelineRecordFactory.cpp:
        (WebCore::TimelineRecordFactory::createGCEventData):
        * inspector/TimelineRecordFactory.h:
        * inspector/front-end/Popover.js:
        (WebInspector.PopoverHelper.prototype._mouseHover):
        * inspector/front-end/TimelineAgent.js:
        * inspector/front-end/TimelinePanel.js:
        (WebInspector.TimelinePanel.prototype.get _recordStyles):
        (WebInspector.TimelinePanel.FormattedRecord):
        (WebInspector.TimelinePanel.FormattedRecord.prototype._generatePopupContent):
        (WebInspector.TimelinePanel.FormattedRecord.prototype._getRecordDetails):

2010-04-05  Antonio Gomes  <tonikitoo@webkit.org>

        Reviewed by Laszlo Gombos.

        Remove unused DIRECTIONAL_PAD_NAVIGATION
        https://bugs.webkit.org/show_bug.cgi?id=37134

        Android browser was planning to have a "directional pad navigation" available on
        trunk, guarded by a build flag named DIRECTIONAL_PAD_NAVIGATION, but according to
        https://bugs.webkit.org/show_bug.cgi?id=23145#c3 , the plan was dropped.

        However bug 23163 landed some code relying on the build flag supposedly to be added,
        and is now dead code in trunk.

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

2010-04-06  Mattias Nissler  <mnissler@chromium.org>

        Reviewed by Pavel Feldman.

        Rework inspector docking to issue a request call from the frontend
        whenever the user triggers to (un)dock the inspector window. Doing so
        enables InspectorFrontendHost implementations to asynchronously decide
        whether the window is docked or not. The old canAttachWindow() is not
        required anymore, remove it.
        https://bugs.webkit.org/show_bug.cgi?id=36944

        * inspector/InspectorFrontendClient.h:
        * inspector/InspectorFrontendClientLocal.cpp:
        (WebCore::InspectorFrontendClientLocal::requestAttachWindow):
        * inspector/InspectorFrontendClientLocal.h:
        * inspector/InspectorFrontendHost.cpp:
        (WebCore::InspectorFrontendHost::requestAttachWindow):
        * inspector/InspectorFrontendHost.h:
        * inspector/InspectorFrontendHost.idl:
        * inspector/front-end/inspector.js:
        (WebInspector.toggleAttach):

2010-04-06  Vitaly Repeshko  <vitalyr@chromium.org>

        Reviewed by Yury Semikhatsky.

        [V8] Extend the set of types supported by SerializedScriptValue
        https://bugs.webkit.org/show_bug.cgi?id=37052

        New types include sparse arrays, Uint32, Date, and ImageData.

        Serialization process became more flexible. A state can either
        directly write primitive values (instead of returning them like
        iterator) or construct a new state for serializing complex values
        that will return to the current state when done.

        Deserialization process now avoids exposing the tags using a set
        of factory functions for complex objects instead.

        Internal buffer type changed to uint8_t to be independent of
        whether char is signed or not.

        * bindings/v8/SerializedScriptValue.cpp:
        (WebCore::):
        (WebCore::Writer::Writer):
        (WebCore::Writer::writeString):
        (WebCore::Writer::writeUint32):
        (WebCore::Writer::writeDate):
        (WebCore::Writer::writeNumber):
        (WebCore::Writer::writeImageData):
        (WebCore::Writer::writeArray):
        (WebCore::Writer::writeObject):
        (WebCore::Writer::writeSparseArray):
        (WebCore::Writer::doWriteUint32):
        (WebCore::Writer::doWriteNumber):
        (WebCore::Writer::append):
        (WebCore::Writer::fillHole):
        (WebCore::Writer::byteAt):
        (WebCore::Serializer::Serializer):
        (WebCore::Serializer::serialize):
        (WebCore::Serializer::writeArray):
        (WebCore::Serializer::writeObject):
        (WebCore::Serializer::writeSparseArray):
        (WebCore::Serializer::StateBase::StateBase):
        (WebCore::Serializer::ErrorState::ErrorState):
        (WebCore::Serializer::ErrorState::advance):
        (WebCore::Serializer::State::composite):
        (WebCore::Serializer::State::State):
        (WebCore::Serializer::ArrayState::ArrayState):
        (WebCore::Serializer::ArrayState::advance):
        (WebCore::Serializer::AbstractObjectState::AbstractObjectState):
        (WebCore::Serializer::AbstractObjectState::advance):
        (WebCore::Serializer::ObjectState::ObjectState):
        (WebCore::Serializer::ObjectState::objectDone):
        (WebCore::Serializer::SparseArrayState::SparseArrayState):
        (WebCore::Serializer::SparseArrayState::objectDone):
        (WebCore::Serializer::push):
        (WebCore::Serializer::pop):
        (WebCore::Serializer::handleError):
        (WebCore::Serializer::checkComposite):
        (WebCore::Serializer::writeString):
        (WebCore::Serializer::writeImageData):
        (WebCore::Serializer::newArrayState):
        (WebCore::Serializer::newObjectState):
        (WebCore::Serializer::doSerialize):
        (WebCore::Reader::Reader):
        (WebCore::Reader::read):
        (WebCore::Reader::readString):
        (WebCore::Reader::readUint32):
        (WebCore::Reader::readDate):
        (WebCore::Reader::readNumber):
        (WebCore::Reader::readImageData):
        (WebCore::Reader::doReadUint32):
        (WebCore::Reader::doReadNumber):
        (WebCore::Deserializer::Deserializer):
        (WebCore::Deserializer::createArray):
        (WebCore::Deserializer::createObject):
        (WebCore::Deserializer::createSparseArray):
        (WebCore::Deserializer::initializeObject):
        (WebCore::Deserializer::doDeserialize):
        (WebCore::Deserializer::stackDepth):
        (WebCore::SerializedScriptValue::deserialize):

2010-04-06  Csaba Osztrogonác  <ossy@webkit.org>

        Unreviewed buildfix for --minimal build.
        Buildfix after r57134. Add ENABLE(WORKERS) guard.

        original bug: https://bugs.webkit.org/show_bug.cgi?id=36375

        * bindings/js/JSWorkerContextErrorHandler.cpp:

2010-04-06  Dirk Schulze  <krit@webkit.org>

        Reviewed by Oliver Hunt.

        SVG/SMIL parse failure on attribute keySplines
        https://bugs.webkit.org/show_bug.cgi?id=37071

        Test: svg/animations/animate-keySplines.html

        The String in 'keySplines' can have multiple spaces between numbers
        and delimiters. The parsing code is inspired by SVGParserUtilities
        and respects this.

        * svg/SVGAnimationElement.cpp:
        (WebCore::parseKeySplines):

2010-04-06  Yury Semikhatsky  <yurys@chromium.org>

        Reviewed by Pavel Feldman.

        Refactored error reporting mechanizm on Worker Global Objects.
        Unlike other event listeners which accept single argument(Event)
        onerror handler on worker global object should be a function
        accepting three arguments. This error reporting was implementedas
        EventListener::reportError method which had custom implementations
        for v8 and JSC. This patch removes EventListener::reportError and
        moves its functionality into custom bindings(V8WorkerContextErrorHandler
        and JSWorkerContextErrorHandler) that implement EventListener inerface
        for the onerror handler.

        This patch also makes uncaught exceptions that happen in the onerror
        listener be reported to the Worker's onerror handler.

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

        * Android.jscbindings.mk:
        * GNUmakefile.am:
        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSBindingsAllInOne.cpp:
        * bindings/js/JSEventListener.cpp:
        * bindings/js/JSEventListener.h:
        * bindings/js/JSWorkerContextErrorHandler.cpp: Added.
        (WebCore::JSWorkerContextErrorHandler::JSWorkerContextErrorHandler):
        (WebCore::JSWorkerContextErrorHandler::~JSWorkerContextErrorHandler):
        (WebCore::JSWorkerContextErrorHandler::handleEvent):
        * bindings/js/JSWorkerContextErrorHandler.h: Added.
        (WebCore::JSWorkerContextErrorHandler::create):
        (WebCore::createJSWorkerContextErrorHandler):
        * bindings/scripts/CodeGeneratorJS.pm:
        * bindings/scripts/CodeGeneratorV8.pm:
        * bindings/v8/V8WorkerContextErrorHandler.cpp: Added.
        (WebCore::V8WorkerContextErrorHandler::V8WorkerContextErrorHandler):
        (WebCore::V8WorkerContextErrorHandler::callListenerFunction):
        * bindings/v8/V8WorkerContextErrorHandler.h: Added.
        (WebCore::V8WorkerContextErrorHandler::create):
        * bindings/v8/V8WorkerContextEventListener.cpp:
        * bindings/v8/V8WorkerContextEventListener.h:
        * dom/EventListener.h:
        * workers/WorkerContext.cpp:
        (WebCore::WorkerContext::WorkerContext):
        (WebCore::WorkerContext::reportException):
        * workers/WorkerContext.h:

2010-04-06  Pavel Feldman  <pfeldman@chromium.org>

        Not reviewed: reverting v8 change at r57079 for crashing Chromium layout tests.

2010-04-05  MORITA Hajime  <morrita@google.com>

        Reviewed by Darin Adler.

        RenderProgress.cpp is missing CurrentTime.h
        https://bugs.webkit.org/show_bug.cgi?id=37080

        No new tests. just fixed compilation error.

        * rendering/RenderProgress.cpp:


2010-04-05  Eric Uhrhane  <ericu@chromium.org>

        Reviewed by Brady Eidson.

        window.openDatabase() always fails for new databases when using WebKit nightly with Safari 4.0.5
        https://bugs.webkit.org/show_bug.cgi?id=36671

        The previous "fix" I mistakenly compared hashes, an improvement over comparing pointers, but still not right.

        No new tests.

        * storage/DatabaseTracker.cpp:
        (WebCore::DatabaseTracker::fullPathForDatabaseNoLock): Use SecurityOrigin::equal to compare instead of SecurityOriginHash.

2010-04-05  Anthony Ricaud  <rik@webkit.org>

        Reviewed by Timothy Hatcher.

        Web Inspector: Audits launcher view is unusable with a small height window
        https://bugs.webkit.org/show_bug.cgi?id=37109

        Use flex box instead of absolute positioning to avoid overlapping elements.

        * inspector/front-end/AuditLauncherView.js:
        (WebInspector.AuditLauncherView.prototype._createLauncherUI):
        * inspector/front-end/audits.css:
        (.audit-launcher-view .audit-launcher-view-content):
        (.audit-launcher-view div.button-container):
        (.audit-launcher-view .flexible-space):

2010-04-05  Luiz Agostini  <luiz.agostini@openbossa.org>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] Maemo5 theme - wrong spelling
        https://bugs.webkit.org/show_bug.cgi?id=37110

        Correcting wrong spelling in RenderThemeQt.cpp.

        * platform/qt/RenderThemeQt.cpp:

2010-04-05  Leandro Pereira  <leandro@profusion.mobi>

        Reviewed by Kenneth Rohde Christiansen.

        Add EFL-specific code to platform/Platform*Event.h.
        http://webkit.org/b/36309

        * platform/PlatformWheelEvent.h:
        * platform/PlatformMouseEvent.h:
        * platform/PlatformKeyboardEvent.h:

2010-04-05  Leandro Pereira  <leandro@profusion.mobi>

        Reviewed by Kenneth Rohde Christiansen.

        Add EFL-specific code to platform/graphics/*.h.
        http://webkit.org/b/36308

        * platform/graphics/Icon.h:
        * platform/graphics/IntRect.h:
        * platform/graphics/FloatRect.h:
        * platform/graphics/IntPoint.h:

2010-04-05  Robert Hogan  <robert@webkit.org>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] Fix infinite redirection loop in QNetworkReplyHandler

        Put a maximum on consecutive redirections so we don't have to
        worry about whether it's the same url or not.

        Tolerate up to 10 consecutive redirections, anything beyond
        that is considered a potentially infinite recursion in the
        redirection requests. This is the same behaviour as Firefox.

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

        * platform/network/qt/QNetworkReplyHandler.cpp:
        (WebCore::QNetworkReplyHandler::QNetworkReplyHandler):
        (WebCore::QNetworkReplyHandler::sendResponseIfNeeded):
        * platform/network/qt/QNetworkReplyHandler.h:

2010-04-05  Dimitri Glazkov  <dglazkov@chromium.org> and James Robinson <jamesr@chromium.org>

        Reviewed by Darin Adler and Dimitri Glazkov.

        Style update done due to mutation event dispatching in textarea can be
        used to corrupt the render tree.
        https://bugs.webkit.org/show_bug.cgi?id=36864

        Tests: fast/forms/select-change-listbox-to-popup-roundtrip.html
               fast/forms/select-change-popup-to-listbox-roundtrip.html
               fast/forms/textarea-and-mutation-events.html

        * dom/Document.cpp:
        (WebCore::Document::finishedParsing): Added updateStyleIfNeeded()
            call to ensure that object loads start before firing window load.
        * dom/Node.cpp:
        (WebCore::Node::dispatchGenericEvent): Removed invocation of
            Document::updateStyleForAllDocuments
        * html/HTMLSelectElement.cpp:
        (WebCore::HTMLSelectElement::parseMappedAttribute): Added explicit
            recalc to ensure accuracy of representation, especially for
            menuList/listBox switches.

2010-04-05  Antonio Gomes  <tonikitoo@webkit.org>

        Reviewed by Laszlo Gombos.

        Cleaned up spatial-navigation-test-cases.html by removing the wrongly
        used <frameset> tag.

        Patch also adds a manual-test specifically to test Spatial Navigation with framesets.

        * manual-tests/spatial-navigation/frameset.html: Added.
        * manual-tests/spatial-navigation/spatial-navigation-test-cases.html:

2010-04-05  Mark Rowe  <mrowe@apple.com>

        Reviewed by Adele Peterson.

        Roll out r56989 as it introduced crashes in Mail.
        <http://webkit.org/b/37115> / <rdar://problem/7829331>

        * dom/Position.cpp:
        (WebCore::Position::isCandidate):
        * dom/PositionIterator.cpp:
        (WebCore::PositionIterator::isCandidate):

2010-04-05  Darin Adler  <darin@apple.com>

        Reviewed by Sam Weinig.

        Images must re-load when an image-holding element moves into a new document
        https://bugs.webkit.org/show_bug.cgi?id=37127

        Test: fast/images/move-image-to-new-document.html

        * html/HTMLImageElement.cpp:
        (WebCore::HTMLImageElement::willMoveToNewOwnerDocument): Call ImageLoader's
        elementWillMoveToNewOwnerDocument function.
        * html/HTMLImageElement.h: Added willMoveToNewOwnerDocument.
        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::willMoveToNewOwnerDocument): Ditto.
        * html/HTMLPlugInImageElement.cpp:
        (WebCore::HTMLPlugInImageElement::willMoveToNewOwnerDocument): Ditto.
        * html/HTMLPlugInImageElement.h: Ditto.
        * html/HTMLVideoElement.cpp:
        (WebCore::HTMLVideoElement::willMoveToNewOwnerDocument): Ditto.
        * html/HTMLVideoElement.h: Ditto.
        * svg/SVGImageElement.cpp:
        (WebCore::SVGImageElement::willMoveToNewOwnerDocument): Ditto.
        * svg/SVGImageElement.h: Ditto.

        * html/HTMLMediaElement.h: Made willMoveToNewOwnerDocument protected
        so it can be called by HTMLVideoElement.cpp.

        * loader/ImageLoader.cpp:
        (WebCore::ImageLoader::elementWillMoveToNewOwnerDocument): Added.
        Resets the loader by clearing out the cached image.
        * loader/ImageLoader.h: Added it.

2010-04-05  Laszlo Gombos  <laszlo.1.gombos@nokia.com>

        Reviewed by Kenneth Rohde Christiansen.

        [Symbian] Consolidate Symbian WINSCW environment configuration
        https://bugs.webkit.org/show_bug.cgi?id=37100

        Move the "undefinition" of WIN32 and _WIN32 from WebCore/config.h
        to JavaScriptCore/wtf/Platform.h as it is not specific to WebCore.

        No new tests as there is no new functionality.

        * config.h:

2010-04-05  Leandro Pereira  <leandro@profusion.mobi>

        Reviewed by Kenneth Rohde Christiansen.

        Add missing ClipboardEfl.h to platform/efl.
        http://webkit.org/b/36242

        * platform/efl/ClipboardEfl.h: Added.

2010-04-05  Yuta Kitamura  <yutak@chromium.org>

        Reviewed by Darin Adler.

        Escape control characters in CSS string value when it is serialilzed.

        When WebKit serializes a CSS string value that contains binary characters
        ('\0\1\2' for example), it did not escape these characters. As a result,
        users got (invisible) control characters through scripts. This change fixes
        this issue.

        As a side effect, two separate codes for escaping CSS strings are merged, and
        become a public function (quoteCSSString).

        CSS string value is not correctly serialized when it contains binary characters
        https://bugs.webkit.org/show_bug.cgi?id=28938

        Test: fast/css/string-quote-binary.html

        * css/CSSParser.cpp:
        (WebCore::isCSSTokenizerIdentifier):
        (WebCore::isCSSTokenizerURL):
        (WebCore::quoteCSSString):
        (WebCore::quoteCSSStringIfNeeded):
        (WebCore::quoteCSSURLIfNeeded):
        * css/CSSParser.h:
        * css/CSSPrimitiveValue.cpp:
        (WebCore::CSSPrimitiveValue::cssText):
        * css/FontFamilyValue.cpp:
        (WebCore::FontFamilyValue::cssText):

2010-04-05  John Gregg  <johnnyg@google.com>

        Reviewed by Darin Adler.

        Notifications should not resolve an empty icon parameter as a relative URL
        https://bugs.webkit.org/show_bug.cgi?id=36862

        * notifications/Notification.cpp:
        (WebCore::Notification::Notification):

2010-04-05  Darin Adler  <darin@apple.com>

        Reviewed by Mark Rowe.

        Removed some unneeded type casts.

        * css/CSSPrimitiveValue.cpp:
        (WebCore::CSSPrimitiveValue::cssText): Removed an unneeded cast.
        * page/Location.cpp:
        (WebCore::Location::host): Removed unneeded parentheses and cast.
        (WebCore::Location::port): Ditto.
        * platform/KURLGoogle.cpp:
        (WebCore::KURL::setPort): Ditto.
        * workers/WorkerLocation.cpp:
        (WebCore::WorkerLocation::host): Ditto.
        (WebCore::WorkerLocation::port): Ditto.

2010-04-05  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r57081.
        http://trac.webkit.org/changeset/57081
        https://bugs.webkit.org/show_bug.cgi?id=37121

        We think it triggered two tests to fail on Tiger because of
        race conditions (Requested by abarth on #webkit).

        * dom/Node.cpp:
        (WebCore::Node::dispatchGenericEvent):
        * html/HTMLSelectElement.cpp:
        (WebCore::HTMLSelectElement::parseMappedAttribute):

2010-04-05  Brady Eidson  <beidson@apple.com>

        Reviewed by Oliver Hunt.

        ASSERT close()ing the same StorageAreaImpl twice when using multiple PageGroups
        <rdar://problem/7828420> and https://bugs.webkit.org/show_bug.cgi?id=37120

        No new tests. (No behavior change)

        * storage/StorageNamespaceImpl.cpp:
        (WebCore::StorageNamespaceImpl::close): Change this invalid ASSERT to an early return.

2010-04-05  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r57030.
        http://trac.webkit.org/changeset/57030
        https://bugs.webkit.org/show_bug.cgi?id=37114

        Regressed fast/repaint/line-flow-with-floats-9 pixel tests in
        chromium port (Requested by jamesr on #webkit).

        * rendering/RenderBlock.h:
        * rendering/RenderBlockLineLayout.cpp:
        (WebCore::RenderBlock::layoutInlineChildren):

2010-04-05  Alexey Proskuryakov  <ap@apple.com>

        Reviewed by Darin Adler.

        https://bugs.webkit.org/show_bug.cgi?id=37111
        <rdar://problem/7790327> Draw replacement text when plug-in host crashes

        * page/mac/WebCoreViewFactory.h:
        * platform/LocalizedStrings.h:
        * platform/mac/LocalizedStringsMac.mm:
        * platform/gtk/LocalizedStringsGtk.cpp:
        * platform/qt/Localizations.cpp:
        * platform/wx/LocalizedStringsWx.cpp:
        Added a localizable string for plug-in failure (only used on Mac at the moment).

        * WebCore.xcodeproj/project.pbxproj: Made RenderEmbeddedObject.h (and dependencies) private,
        since it's now used from WebKit.

        * rendering/RenderEmbeddedObject.cpp:
        (WebCore::RenderEmbeddedObject::RenderEmbeddedObject):m Removed m_showsMissingPluginIndicator
        initializer.
        (WebCore::RenderEmbeddedObject::updateWidget): Check m_replacementText instead of the removed
        m_showsMissingPluginIndicator.
        (WebCore::RenderEmbeddedObject::setShowsMissingPluginIndicator): Load m_replacementText.
        (WebCore::RenderEmbeddedObject::setShowsCrashedPluginIndicator): Ditto.
        (WebCore::RenderEmbeddedObject::paint): Check m_replacementText instead of the removed
        m_showsMissingPluginIndicator.
        (WebCore::RenderEmbeddedObject::paintReplaced): Draw arbitrary text from m_replacementText
        insted of just "Missing Plug-in". Renamed constants and variables accordingly.

        * rendering/RenderEmbeddedObject.h: Changed boolean for missing plug-in to a String holding
        actual replacement text.

        * loader/FrameLoader.cpp: (WebCore::FrameLoader::loadPlugin): Adapted for the change in
        setShowsMissingPluginIndicator(), which no longer takes an argument.

        * WebCore/WebCore.base.exp: Exported RenderEmbeddedObject::setShowsCrashedPluginIndicator().

2010-04-05  Chris Fleizach  <cfleizach@apple.com>

        Reviewed by Darin Adler.

        Bug 37040 - AX: need to send selected children change notification when aria-selected changed
        https://bugs.webkit.org/show_bug.cgi?id=37040

        When aria-selected is changed in the DOM, it will trigger a selected children change notification. 

        Test: platform/mac/accessibility/aria-listbox-selectedchildren-change.html

        * accessibility/AXObjectCache.cpp:
        (WebCore::AXObjectCache::selectedChildrenChanged):
        * accessibility/AXObjectCache.h:
        * accessibility/AccessibilityMediaControls.cpp:
        (WebCore::AccessibilityMediaControl::controlType):
            Remove extra whitespace before comment (webkit-style).
        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::observableObject):
            Allowed a listBox to be an observable object.
        (WebCore::AccessibilityRenderObject::ariaRoleHasPresentationalChildren):
        (WebCore::AccessibilityRenderObject::ariaListboxSelectedChildren):
            Updated and streamlined existing code.
        * dom/Element.cpp:
        (WebCore::Element::updateAfterAttributeChanged):

2010-04-05  Adam Treat  <atreat@rim.com>

        Reviewed by Darin Adler.

        Fix regression in pixel test for animated svg background images.

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

        * svg/graphics/SVGImage.cpp:
        (WebCore::SVGImageChromeClient::invalidateContentsAndWindow):

2010-04-05  Robert Hogan  <robert@webkit.org>

        Reviewed by Kenneth Rohde-Christiansen.

        [Qt] Fix infinite redirection loop in QNetworkReplyHandler

        Qt enters an infinite loop if a redirect response redirects to itself.

        Fixes http/tests/xmlhttprequest/connection-error-sync.html

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

        * platform/network/qt/QNetworkReplyHandler.cpp:
        (WebCore::QNetworkReplyHandler::sendResponseIfNeeded):

2010-04-05  Yury Semikhatsky  <yurys@chromium.org>

        Unreviewed, revert r57078.

        * Android.jscbindings.mk:
        * GNUmakefile.am:
        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSEventListener.cpp:
        (WebCore::JSEventListener::reportError):
        * bindings/js/JSEventListener.h:
        * bindings/js/JSWorkerContextErrorHandler.cpp: Removed.
        * bindings/js/JSWorkerContextErrorHandler.h: Removed.
        * bindings/scripts/CodeGeneratorJS.pm:
        * bindings/scripts/CodeGeneratorV8.pm:
        * bindings/v8/V8WorkerContextErrorHandler.cpp: Removed.
        * bindings/v8/V8WorkerContextErrorHandler.h: Removed.
        * bindings/v8/V8WorkerContextEventListener.cpp:
        (WebCore::V8WorkerContextEventListener::reportError):
        * bindings/v8/V8WorkerContextEventListener.h:
        * dom/EventListener.h:
        (WebCore::EventListener::reportError):
        * workers/WorkerContext.cpp:
        (WebCore::WorkerContext::WorkerContext):
        (WebCore::WorkerContext::reportException):
        * workers/WorkerContext.h:

2010-04-05  Dimitri Glazkov  <dglazkov@chromium.org>

        Reviewed by Darin Adler.

        Style update done due to mutation event dispatching in textarea can be
        used to corrupt the render tree.
        https://bugs.webkit.org/show_bug.cgi?id=36864

        Tests: fast/forms/select-change-listbox-to-popup-roundtrip.html
               fast/forms/select-change-popup-to-listbox-roundtrip.html
               fast/forms/textarea-and-mutation-events.html

        * dom/Node.cpp:
        (WebCore::Node::dispatchGenericEvent): Removed invocation of
            Document::updateStyleForAllDocuments
        * html/HTMLSelectElement.cpp:
        (WebCore::HTMLSelectElement::parseMappedAttribute): Added explicit
            recalc to ensure accuracy of representation, especially for
            menuList/listBox switches.

2010-04-01  Kenneth Rohde Christiansen  <kenneth@webkit.org>

        Reviewed by Dave Hyatt.

        iframe flattening doesn't flatten
        https://bugs.webkit.org/show_bug.cgi?id=36798

        Fixed to the iframe flattening code so that the iframes on
        http://www.samisite.com/test-csb2nf/id43.htm are actually
        flattened.

        Covered by current tests.

        * page/FrameView.cpp: Propagate contents changes of iframes
        and subframes in framesets to the parent so that it is relayouted
        (WebCore::FrameView::setContentsSize):
        (WebCore::FrameView::adjustViewSize):
        (WebCore::FrameView::scheduleRelayout):
        * rendering/RenderPart.cpp: HTMLIFrameElement do not inherit from
        HTMLFrameElement, but HTMLFrameElementBase, correct cast. Correct
        the use of inset border values. Avoid a sometimes unnecessary
        relayout.
        (WebCore::RenderPart::layoutWithFlattening):
        * rendering/RenderPartObject.cpp: Make the calcHeight and calcWidth
        return the right values, considering scrolling and fixed width/height
        (WebCore::RenderPartObject::flattenFrame):
        (WebCore::RenderPartObject::calcHeight):
        (WebCore::RenderPartObject::calcWidth):
        (WebCore::RenderPartObject::layout):

2010-04-05  Vitaly Repeshko  <vitalyr@chromium.org>

        Reviewed by Yury Semikhatsky.

        [V8] Extend the set of types supported by SerializedScriptValue
        https://bugs.webkit.org/show_bug.cgi?id=37052

        New types include sparse arrays, Uint32, Date, and ImageData.

        Serialization process became more flexible. A state can either
        directly write primitive values (instead of returning them like
        iterator) or construct a new state for serializing complex values
        that will return to the current state when done.

        Deserialization process now avoids exposing the tags using a set
        of factory functions for complex objects instead.

        Internal buffer type changed to uint8_t to be independent of
        whether char is signed or not.

        * bindings/v8/SerializedScriptValue.cpp:
        (WebCore::):
        (WebCore::Writer::Writer):
        (WebCore::Writer::writeString):
        (WebCore::Writer::writeUint32):
        (WebCore::Writer::writeDate):
        (WebCore::Writer::writeNumber):
        (WebCore::Writer::writeImageData):
        (WebCore::Writer::writeArray):
        (WebCore::Writer::writeObject):
        (WebCore::Writer::writeSparseArray):
        (WebCore::Writer::doWriteUint32):
        (WebCore::Writer::doWriteNumber):
        (WebCore::Writer::append):
        (WebCore::Writer::fillHole):
        (WebCore::Writer::byteAt):
        (WebCore::Serializer::Serializer):
        (WebCore::Serializer::serialize):
        (WebCore::Serializer::writeArray):
        (WebCore::Serializer::writeObject):
        (WebCore::Serializer::writeSparseArray):
        (WebCore::Serializer::StateBase::StateBase):
        (WebCore::Serializer::ErrorState::ErrorState):
        (WebCore::Serializer::ErrorState::advance):
        (WebCore::Serializer::State::composite):
        (WebCore::Serializer::State::State):
        (WebCore::Serializer::ArrayState::ArrayState):
        (WebCore::Serializer::ArrayState::advance):
        (WebCore::Serializer::AbstractObjectState::AbstractObjectState):
        (WebCore::Serializer::AbstractObjectState::advance):
        (WebCore::Serializer::ObjectState::ObjectState):
        (WebCore::Serializer::ObjectState::objectDone):
        (WebCore::Serializer::SparseArrayState::SparseArrayState):
        (WebCore::Serializer::SparseArrayState::objectDone):
        (WebCore::Serializer::push):
        (WebCore::Serializer::pop):
        (WebCore::Serializer::handleError):
        (WebCore::Serializer::checkComposite):
        (WebCore::Serializer::writeString):
        (WebCore::Serializer::writeImageData):
        (WebCore::Serializer::newArrayState):
        (WebCore::Serializer::newObjectState):
        (WebCore::Serializer::doSerialize):
        (WebCore::Reader::Reader):
        (WebCore::Reader::read):
        (WebCore::Reader::readString):
        (WebCore::Reader::readUint32):
        (WebCore::Reader::readDate):
        (WebCore::Reader::readNumber):
        (WebCore::Reader::readImageData):
        (WebCore::Reader::doReadUint32):
        (WebCore::Reader::doReadNumber):
        (WebCore::Deserializer::Deserializer):
        (WebCore::Deserializer::createArray):
        (WebCore::Deserializer::createObject):
        (WebCore::Deserializer::createSparseArray):
        (WebCore::Deserializer::initializeObject):
        (WebCore::Deserializer::doDeserialize):
        (WebCore::Deserializer::stackDepth):
        (WebCore::SerializedScriptValue::deserialize):

2010-04-05  Yury Semikhatsky  <yurys@chromium.org>

        Reviewed by Pavel Feldman.

        Refactored error reporting mechanizm on Worker Global Objects.
        Unlike other event listeners which accept single argument(Event)
        onerror handler on worker global object should be a function
        accepting three arguments. This error reporting was implementedas
        EventListener::reportError method which had custom implementations
        for v8 and JSC. This patch removes EventListener::reportError and
        moves its functionality into custom bindings(V8WorkerContextErrorHandler
        and JSWorkerContextErrorHandler) that implement EventListener inerface
        for the onerror handler.

        This patch also makes uncaught exceptions that happen in the onerror
        listener be reported to the Worker's onerror handler.

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

        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSEventListener.cpp:
        * bindings/js/JSEventListener.h:
        * bindings/js/JSWorkerContextErrorHandler.cpp: Added.
        (WebCore::JSWorkerContextErrorHandler::JSWorkerContextErrorHandler):
        (WebCore::JSWorkerContextErrorHandler::~JSWorkerContextErrorHandler):
        (WebCore::JSWorkerContextErrorHandler::handleEvent):
        * bindings/js/JSWorkerContextErrorHandler.h: Added.
        (WebCore::JSWorkerContextErrorHandler::create):
        (WebCore::createJSWorkerContextErrorHandler):
        * bindings/scripts/CodeGeneratorJS.pm:
        * bindings/scripts/CodeGeneratorV8.pm:
        * bindings/v8/V8WorkerContextErrorHandler.cpp: Added.
        (WebCore::V8WorkerContextErrorHandler::V8WorkerContextErrorHandler):
        (WebCore::V8WorkerContextErrorHandler::callListenerFunction):
        * bindings/v8/V8WorkerContextErrorHandler.h: Added.
        (WebCore::V8WorkerContextErrorHandler::create):
        * bindings/v8/V8WorkerContextEventListener.cpp:
        * bindings/v8/V8WorkerContextEventListener.h:
        * dom/EventListener.h: Removed reportError method that was used only for reporting worker errors.
        * workers/WorkerContext.cpp:
        (WebCore::WorkerContext::WorkerContext):
        (WebCore::WorkerContext::reportException):
        * workers/WorkerContext.h:

2010-04-05  Antonio Gomes  <tonikitoo@webkit.org>

        Reviewed by Darin Adler.

        Fix some  "explicit braces to avoid ambiguous 'else'" warnings
        https://bugs.webkit.org/show_bug.cgi?id=37088

        * dom/Node.cpp:
        (WebCore::Node::dispatchGenericEvent):
        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::dispatchEvent):

2010-04-05  Laszlo Gombos  <laszlo.1.gombos@nokia.com>

        Reviewed by Kenneth Rohde Christiansen.

        Consolidate the definition of SKIP_STATIC_CONSTRUCTORS_ON_GCC

        Instead of defining and undefining it later, let's not
        define SKIP_STATIC_CONSTRUCTORS_ON_GCC for WINSCW.

        No new tests as there is no new functionality.

        * config.h:

2010-04-05  Laszlo Gombos  <laszlo.1.gombos@nokia.com>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] [Symbian] Remove obsolete build flags for Symbian
        https://bugs.webkit.org/show_bug.cgi?id=37083

        Symbian port of QtWebKit port does not use icu, so it does 
        not need U_HAVE_* defines.

        Symbian now has inttypes.h as part of OpenC.

        stdio.h, limits.h and MathExtras.h are already included in
        more appropriate locations.

        No new tests as there is no new functionality.

        * config.h:

2010-04-05  Pavel Feldman  <pfeldman@chromium.org>

        Not reviewed: chromium build fix.

        * bindings/v8/custom/V8InspectorFrontendHostCustom.cpp:
        (WebCore::V8InspectorFrontendHost::platformCallback):
        (WebCore::V8InspectorFrontendHost::portCallback):

2010-04-05  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Yury Semikhatsky.

        Web Inspector: [REGRESSION] platform detection in Chromium
        has regressed to unknown.

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

        * bindings/js/JSInspectorFrontendHostCustom.cpp:
        (WebCore::JSInspectorFrontendHost::platform):
        (WebCore::JSInspectorFrontendHost::port):
        * bindings/v8/custom/V8InspectorFrontendHostCustom.cpp:
        (WebCore::V8InspectorFrontendHost::platform):
        (WebCore::V8InspectorFrontendHost::port):
        * inspector/InspectorFrontendHost.cpp:
        * inspector/InspectorFrontendHost.h:
        * inspector/InspectorFrontendHost.idl:

2010-04-05  Andrey Kosyakov  <caseq@chromium.org>

        Reviewed by Yury Semikhatsky.

        Remove logging of successful XHR and worker's importScript()
        to inspector console
        https://bugs.webkit.org/show_bug.cgi?id=37078

        * bindings/js/JSWorkerContextCustom.cpp:
        (WebCore::JSWorkerContext::importScripts):
        * bindings/v8/custom/V8WorkerContextCustom.cpp:
        (WebCore::V8WorkerContext::importScriptsCallback):
        * workers/DedicatedWorkerContext.cpp:
        (WebCore::DedicatedWorkerContext::importScripts):
        * workers/DedicatedWorkerContext.h:
        * workers/WorkerContext.cpp:
        (WebCore::WorkerContext::importScripts):
        * workers/WorkerContext.h:
        * xml/XMLHttpRequest.cpp:
        (WebCore::XMLHttpRequest::didFinishLoading):

2010-04-04  Pavel Feldman  <pfeldman@chromium.org>

        Not reviewed. Rolling out chromium changes r57028 and r57032
        for breaking chromium layout tests.

        * WebCore.gyp/WebCore.gyp:
        * WebCore.gypi:
        * platform/chromium/DragImageChromium.cpp: Added.
        (WebCore::dragImageSize):
        (WebCore::deleteDragImage):
        (WebCore::scaleDragImage):
        (WebCore::dissolveDragImageToFraction):
        (WebCore::createDragImageFromImage):
        (WebCore::createDragImageIconForCachedImage):
        * platform/chromium/DragImageChromiumMac.cpp: Removed.
        * platform/chromium/DragImageChromiumSkia.cpp: Removed.
        * platform/chromium/DragImageRef.h:

2010-03-29  Antonio Gomes  <tonikitoo@webkit.org>

        Reviewed by Simon Fraser.
        Patch by Antonio Gomes <tonikitoo@webkit.org>

        Spatial Navigation: Initial code simplification in FocusController.cpp and SpatialNavigation.cpp

        WebCore::distanceInDirection method was handling much of the logic not
        strictly only related to the distance between nodes acquisition. This
        method was simplified and renamed to 'WebCore::distanceDataForNode'.
        The latter is now responsible for only getting the distance and alignment
        data, while all assignement logic previously in distanceInDirection method
        was moved place to updateFocusCandidateIfCloser.

        Parent document distance and alignment acquisitions, in turn, have also
        changed location: they are both got from deepFindFocusableNodeInDirection,
        and passed in a recursive call to findFocusableNodeInDirection via the
        candidateParent variable (optional parameter). In addition, the need for
        the 'focusCandidateCopy' variable in deepFindFocusableNodeInDirection method
        was removed, making the code much cleaner.

        No behaviour change at this point. Mostly moving code around to the place
        where it should live in.

        * page/FocusController.cpp:
        (WebCore::FocusController::advanceFocusDirectionally):
        (WebCore::updateFocusCandidateIfCloser):
        (WebCore::FocusController::findFocusableNodeInDirection):
        (WebCore::FocusController::deepFindFocusableNodeInDirection):
        * page/FocusController.h:
        * page/SpatialNavigation.cpp:
        (WebCore::distanceDataForNode):
        (WebCore::renderRectRelativeToRootDocument):
        * page/SpatialNavigation.h:

2010-04-04  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Timothy Hatcher.

        Web Inspector: In the inherited styles, do not render non-inherited properties as overriden.

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

        * inspector/front-end/StylesSidebarPane.js:
        (WebInspector.StylePropertiesSection.prototype.isPropertyOverloaded):

2010-04-03  yael aharon  <yael.aharon@nokia.com>

        Reviewed by Darin Adler.

        Enable HTMLProgressElement for Safari on OSX
        https://bugs.webkit.org/show_bug.cgi?id=36961

        * Configurations/FeatureDefines.xcconfig:
        * WebCore.xcodeproj/project.pbxproj:
        * rendering/RenderThemeMac.h:
        * rendering/RenderThemeMac.mm:
        (WebCore::RenderThemeMac::animationRepeatIntervalForProgressBar):
        (WebCore::RenderThemeMac::animationDurationForProgressBar):
        (WebCore::RenderThemeMac::adjustProgressBarStyle):
        (WebCore::RenderThemeMac::paintProgressBar):

2010-04-03  Jakub Wieczorek  <jwieczorek@webkit.org>

        Unreviewed.

        Fix debug build with GCC >= 4.3.

        * platform/graphics/GraphicsLayer.cpp: Include stdio.h explicitly.

2010-04-03  Kenneth Russell  <kbr@google.com>

        Reviewed by Darin Fisher.

        Inconsistent failure modes from uniform[Matrix]* with null WebGLUniformLocation
        https://bugs.webkit.org/show_bug.cgi?id=36574

        Fixed bugs in JavaScript bindings for uniform[Matrix]* entry
        points causing them to throw exceptions rather than synthesize GL
        errors. Fixed the implementations to synthesize INVALID_VALUE
        rather than INVALID_OPERATION to comply to the WebGL spec. Updated
        uniform-location-expected.txt to incorporate the correct error.
        Tested in Safari and Chromium.

        Test: fast/canvas/webgl/null-uniform-location.html

        * bindings/v8/custom/V8WebGLRenderingContextCustom.cpp:
        (WebCore::V8WebGLRenderingContext::getUniformCallback):
        (WebCore::vertexAttribAndUniformHelperf):
        (WebCore::uniformHelperi):
        (WebCore::uniformMatrixHelper):
        * html/canvas/WebGLRenderingContext.cpp:
        (WebCore::WebGLRenderingContext::uniform1f):
        (WebCore::WebGLRenderingContext::uniform1fv):
        (WebCore::WebGLRenderingContext::uniform1i):
        (WebCore::WebGLRenderingContext::uniform1iv):
        (WebCore::WebGLRenderingContext::uniform2f):
        (WebCore::WebGLRenderingContext::uniform2fv):
        (WebCore::WebGLRenderingContext::uniform2i):
        (WebCore::WebGLRenderingContext::uniform2iv):
        (WebCore::WebGLRenderingContext::uniform3f):
        (WebCore::WebGLRenderingContext::uniform3fv):
        (WebCore::WebGLRenderingContext::uniform3i):
        (WebCore::WebGLRenderingContext::uniform3iv):
        (WebCore::WebGLRenderingContext::uniform4f):
        (WebCore::WebGLRenderingContext::uniform4fv):
        (WebCore::WebGLRenderingContext::uniform4i):
        (WebCore::WebGLRenderingContext::uniform4iv):
        (WebCore::WebGLRenderingContext::uniformMatrix2fv):
        (WebCore::WebGLRenderingContext::uniformMatrix3fv):
        (WebCore::WebGLRenderingContext::uniformMatrix4fv):

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

        Reviewed by Adam Barth.

        The previous mechanism for testing whether an event was due to a user
        gesture only checked the event type, not the source of the event.  This
        allowed scripts to defeat popup blocking by programatically emitting
        certain types of events.

        Change the user gesture detection to check for a flag that is only set
        when the event in question was generated through the platform and not
        through the DOM.

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

        Tests: fast/events/popup-allowed-from-gesture-initiated-event.html
               fast/events/popup-blocked-from-fake-button-click.html
               fast/events/popup-blocked-from-fake-focus.html

        * Android.mk: Add UserGestureIndicator.{cpp, h}.
        * GNUmakefile.am: Same.
        * WebCore.gypi: Same.
        * WebCore.pro: Same.
        * WebCore.vcproj/WebCore.vcproj: Same.
        * WebCore.xcodeproj/project.pbxproj: Same.
        * bindings/v8/ScriptController.cpp:
        (WebCore::ScriptController::processingUserGesture): Check the value of
        UserGesureIndicator::processingUserGesture().
        * dom/Document.cpp:
        (WebCore::Document::createEvent): Remove call to
        Event::setCreatedByDOM().
        * dom/Event.cpp:
        (WebCore::Event::Event): Remove initializers for m_createdByDOM.
        (WebCore::Event::fromUserGesture): Check the value of
        UserGestureIndicator::processingUserGesture().
        * dom/Event.h: Remove m_createdByDOM.
        * dom/UserGestureIndicator.cpp: Added.
        (WebCore::UserGestureIndicator::UserGestureIndicator): Save the previous
        value of s_processingUserGesture before setting it to true.
        (WebCore::UserGestureIndicator::~UserGestureIndicator): Restore
        s_processingUserGesture to its previous value.
        * dom/UserGestureIndicator.h: Added.
        (WebCore::UserGestureIndicator::processingUserGesture): Return the value
        of s_processingUserGesture.
        * page/EventHandler.cpp:
        (WebCore::EventHandler::handleMousePressEvent): Instantiate a
        UserGestureIndicator object on the stack to indicate a user gesture is
        being processed.
        (WebCore::EventHandler::handleMouseDoubleClickEvent): Same.
        (WebCore::EventHandler::handleMouseReleaseEvent): Same.
        (WebCore::EventHandler::keyEvent): Same.
        (WebCore::EventHandler::handleTouchEvent): Same.

2010-04-02  Justin Schuh  <jschuh@chromium.org>

        Reviewed by Alexey Proskuryakov.

        XHR allows arbitrary XSRF across domains 
        https://bugs.webkit.org/show_bug.cgi?id=36843

        Added a one-line change to prevent bypassing the XDC check on
        synchronous preflighted requests. Added layout tests to cover
        variations of this problem.

        Tests: http/tests/xmlhttprequest/access-control-preflight-async-header-denied.html
               http/tests/xmlhttprequest/access-control-preflight-async-method-denied.html
               http/tests/xmlhttprequest/access-control-preflight-sync-header-denied.html
               http/tests/xmlhttprequest/access-control-preflight-sync-method-denied.html

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

2010-04-02  Nayan Kumar K  <nayankk@gmail.com>

        Reviewed by Eric Seidel.

        Fix for WML enabled build failure.

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

        * wml/WMLOptionElement.cpp:
        (WebCore::WMLOptionElement::disabled):
        * wml/WMLOptionElement.h:
        * wml/WMLSelectElement.cpp:
        (WebCore::WMLSelectElement::listBoxSelectItem):
        * wml/WMLSelectElement.h:

2010-04-02  MORITA Hajime  <morrita@google.com>

        Reviewed by Alexey Proskuryakov.

        https://bugs.webkit.org/show_bug.cgi?id=37011
        Position::primaryDirection() should not use its own accessor.

        No new tests. This is small clenaup with no behaviour change.

        * dom/Position.cpp:
        (WebCore::Position::primaryDirection):

2010-04-02  Eric Uhrhane  <ericu@chromium.org>

        Reviewed by Brady Eidson.

        window.openDatabase() always fails for new databases when using WebKit nightly with Safari 4.0.5.  This is caused by a SecurityOrigin pointer comparison that I should have switched to be a hash comparison in r56293 [bug 34991].
        https://bugs.webkit.org/show_bug.cgi?id=36671

        No new tests.  Requires testing on Safari on Windows.

        * storage/DatabaseTracker.cpp:
        (WebCore::DatabaseTracker::fullPathForDatabaseNoLock): Convert a pointer comparison to use SecurityOriginHash::hash() instead, and move it to the end of the clause for speed in the easy-out case.

2010-04-02  Michael Nordman  <michaeln@google.com>

        Reviewed by Nate Chapin.

        Set the close policy used by the DatabaseCloseTask in a constructor argument
        instead of hard coding it.
        https://bugs.webkit.org/show_bug.cgi?id=37037

        No new tests, new new functionality.

        * storage/Database.cpp: This callsite passes in DoNotRemoveFromDatabaseContext to retain its current behavior.
        (WebCore::Database::markAsDeletedAndClose):
        * storage/DatabaseTask.cpp:
        (WebCore::DatabaseCloseTask::DatabaseCloseTask):
        (WebCore::DatabaseCloseTask::doPerformTask):
        * storage/DatabaseTask.h:
        (WebCore::DatabaseCloseTask::create):

2010-04-02  James Robinson  <jamesr@chromium.org>

        Reviewed by Simon Fraser.

        Remove an ASSERT that sometimes flakes due to time dependent animations
        https://bugs.webkit.org/show_bug.cgi?id=37048

        The outline repaint rectangle for a layer might change between two calls
        if there are animations involved, even if nothing in the DOM has actually
        changed between the calls.

        No change in behavior, no new tests.

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

2010-04-02  Evan Stade  <estade@chromium.org>

        Reviewed by Adam Barth.

        [chromium] need DragImage implementation
        https://bugs.webkit.org/show_bug.cgi?id=35811

        Add two files that failed to get added in my previous patch.

        * platform/chromium/DragImageChromiumMac.cpp: Added.
        (WebCore::dragImageSize):
        (WebCore::deleteDragImage):
        (WebCore::scaleDragImage):
        (WebCore::dissolveDragImageToFraction):
        (WebCore::createDragImageFromImage):
        (WebCore::createDragImageIconForCachedImage):
        * platform/chromium/DragImageChromiumSkia.cpp: Added.
        (WebCore::dragImageSize):
        (WebCore::deleteDragImage):
        (WebCore::scaleDragImage):
        (WebCore::dissolveDragImageToFraction):
        (WebCore::createDragImageFromImage):
        (WebCore::createDragImageIconForCachedImage):

2010-04-02  Jer Noble  <jer.noble@apple.com>

        Reviewed by Eric Carlson.

        Configure multi-language movies: when QuickTime has sufficiently loaded
        the movie, call into wkQTMovieSelectPreferredAlternates to select the
        movie's alternate tracks according to the user's language preferences.

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

        * WebCore.base.exp:
        * platform/graphics/mac/MediaPlayerPrivateQTKit.mm: 
        (WebCore::MediaPlayerPrivate::updateStates): If the movie is sufficiently loaded,
        call wkQTMovieSelectPreferredAlternates to set up the alternate tracks.
        * platform/mac/WebCoreSystemInterface.h: Declare WKQTMovieSelectPreferredAlternates.
        * platform/mac/WebCoreSystemInterface.mm: Add WKQTMovieSelectPreferredAlternates.

2010-04-02  James Robinson  <jamesr@chromium.org>

        Reviewed by Darin Adler.

        Splits RenderBlock::layoutInline into smaller functions
        https://bugs.webkit.org/show_bug.cgi?id=36921

        RenderBlock::layoutInlineChildren is 351 lines long and very difficult
        to comprehend or edit safely. This patch splits it up into a few
        slightly smaller functions.  Most of the code is now in the 241 line
        layoutRunsAndFloats() which is a slight improvement.

        Perf neutral on the page cyclers.  This doesn't introduce any function
        calls into the hottest layout paths inside layoutRunsAndFloats and
        findNextLineBreak.

        No change in behavior, no new tests.

        * rendering/RenderBlock.h:
        (WebCore::RenderBlock::FloatWithRect::FloatWithRect):
        * rendering/RenderBlockLineLayout.cpp:
        (WebCore::RenderBlock::layoutReplacedElements):
        (WebCore::RenderBlock::createLineBoxesForResolver):
        (WebCore::RenderBlock::layoutRunsAndFloats):
        (WebCore::RenderBlock::layoutInlineChildren):

2010-04-02  Evan Stade  <estade@chromium.org>

        Reviewed by Eric Seidel.

        [chromium] need DragImage implementation
        https://bugs.webkit.org/show_bug.cgi?id=35811

        Basic implementation using SkBitmap. Transformations are not supported
        yet. No implementation for mac.

        * WebCore.gyp/WebCore.gyp:
        * WebCore.gypi:
        * platform/chromium/DragImageChromium.cpp:
        * platform/chromium/DragImageRef.h:

2010-04-02  Evan Martin  <evan@chromium.org>

        Reviewed by Eric Seidel.

        [chromium] font fallback for generic fonts picks wrong font
        https://bugs.webkit.org/show_bug.cgi?id=37033

        When a page specifies the generic "monospace" font and the user's
        browser-configured monospace font doesn't exist, we previously relied
        on getLastResortFallbackFont to eventually pick a monospace font for us.

        But that doesn't quite work: WebKit first falls back to the user's
        "preferred standard font" before hitting the last resort code path.
        So if the above conditions hold but this font exists, we'll end up
        never hitting the last resort codepath.

        The fix is to allow OS-level font fallback when first attempting to
        resolve monospace.  The existing code tried to do this, but the logic
        was wrong.  We would eventually fall back to the correct font anyway
        so we didn't notice the logic was wrong.

        This code is all handling cases where particular fonts aren't installed,
        so I can't think of a way to test it; existing tests should still pass.

        * platform/graphics/chromium/FontCacheLinux.cpp:
        (WebCore::FontCache::createFontPlatformData):

2010-04-02  Andrew Scherkus  <scherkus@chromium.org>

        Reviewed by Eric Carlson and Eric Seidel.

        Don't stop the playback event timer when media resource loading has suspended.
        https://bugs.webkit.org/show_bug.cgi?id=37003

        When a user agent decides to suspend media resource loading and enters the
        NETWORK_IDLE state we are supposed to only stop the progress event timer but
        keep the playback timer running.

        Test: http/tests/media/video-play-suspend.html

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::setNetworkState): Only stop the progress event timer.

2010-04-02  Darin Adler  <darin@apple.com>

        Fix mispelling that broke the build.

        * html/canvas/CanvasRenderingContext2D.cpp:
        * html/canvas/CanvasRenderingContext2D.h:
        Dashbard -> Dashboard.

2010-04-02  David Levin  <levin@chromium.org>

        Reviewed by Darin Adler.

        (non-generated) code should only use CanvasRenderingContext::canvas as a CanvasSurface.
        https://bugs.webkit.org/show_bug.cgi?id=36906

        * dom/CanvasSurface.cpp: Added methods for items that depended on
        CanvasRenderingContext::canvas() being an HTMLElement(), so that this usage
        can be dealt with in one place.
        (WebCore::CanvasSurface::securityOrigin): Only used by methods that are
        only run in the document context.
        (WebCore::CanvasSurface::renderBox): Will likely return 0 in a worker context.
        (WebCore::CanvasSurface::computedStyle): Used by setFont. Return value is TBD for
        the worker context.
        (WebCore::CanvasSurface::styleSelector): Ditto.
        * dom/CanvasSurface.h:
        * html/HTMLCanvasElement.cpp:
        (WebCore::HTMLCanvasElement::getContext): Passing in information into
        the CanvasRenderingContext2D constructor to eliminate some uses of document
        inside of the CanvasRenderingContext2D class.
        * html/HTMLCanvasElement.h:
        (WebCore::HTMLCanvasElement::renderBox): Added to disambiguate between the
        two parent class versions of the method.
        (WebCore::HTMLCanvasElement::computedStyle): Ditto.
        * html/canvas/CanvasRenderingContext2D.cpp: All of these changes are about
        removing document usage either by using a bool that is set in the constructor or
        by calling one of the new methods added to CanvasSurface.
        (WebCore::CanvasRenderingContext2D::CanvasRenderingContext2D):
        (WebCore::CanvasRenderingContext2D::clearPathForDashboardBackwardCompatibilityMode):
        (WebCore::CanvasRenderingContext2D::checkOrigin):
        (WebCore::CanvasRenderingContext2D::prepareGradientForDashboard):
        (WebCore::CanvasRenderingContext2D::createPattern):
        (WebCore::CanvasRenderingContext2D::setFont):
        (WebCore::CanvasRenderingContext2D::drawTextInternal):
        * html/canvas/CanvasRenderingContext2D.h:
        * html/canvas/WebGLRenderingContext.cpp: Removed some duplicate includes.
        (WebCore::WebGLRenderingContext::markContextChanged): Reduced calls to renderBox
         as it may become slightly more expensive in the future.
        (WebCore::WebGLRenderingContext::reshape): Ditto.

2010-04-02  Zhenyao Mo  <zmo@google.com>

        Reviewed by Eric Seidel.

        Implement and test new framebuffer object attachment behavior.
        https://bugs.webkit.org/show_bug.cgi?id=35611

        Test: fast/canvas/webgl/framebuffer-object-attachment.html

        * html/canvas/WebGLFramebuffer.cpp: Keep track of attached stencil/depth renderbuffers in WebGLFramebuffer.
        (WebCore::WebGLFramebuffer::WebGLFramebuffer):
        (WebCore::WebGLFramebuffer::setIsAttached):
        * html/canvas/WebGLFramebuffer.h: Ditto.
        (WebCore::WebGLFramebuffer::isDepthAttached):
        (WebCore::WebGLFramebuffer::isStencilAttached):
        (WebCore::WebGLFramebuffer::isDepthStencilAttached):
        * html/canvas/WebGLRenderbuffer.cpp: Keep track of internalformat.
        (WebCore::WebGLRenderbuffer::WebGLRenderbuffer):
        * html/canvas/WebGLRenderbuffer.h: Ditto.
        (WebCore::WebGLRenderbuffer::setInternalformat):
        (WebCore::WebGLRenderbuffer::getInternalformat):
        * html/canvas/WebGLRenderingContext.cpp:
        (WebCore::WebGLRenderingContext::framebufferRenderbuffer): Detect stencil/depth buffer conflicts.
        (WebCore::WebGLRenderingContext::getFramebufferAttachmentParameter): Handling DEPTH_STENCIL case.
        (WebCore::WebGLRenderingContext::getRenderbufferParameter): Get correct WebGL internalformat.
        (WebCore::WebGLRenderingContext::renderbufferStorage): Detect illegal enums.
        * html/canvas/WebGLRenderingContext.idl: Add DEPTH_STENCIL enums.
        * platform/graphics/GraphicsContext3D.h: Add DEPTH_STENCIL enums.
        (WebCore::GraphicsContext3D::):
        * platform/graphics/mac/GraphicsContext3DMac.cpp: Map to correct DEPTH_STENCIL format.
        (WebCore::GraphicsContext3D::framebufferRenderbuffer):
        (WebCore::GraphicsContext3D::renderbufferStorage):
        (WebCore::GraphicsContext3D::getFramebufferAttachmentParameteriv):

2010-04-02  Kent Tamura  <tkent@chromium.org>

        Reviewed by Darin Adler.

        Form control state shouldn't be restored for hidden inputs.
        https://bugs.webkit.org/show_bug.cgi?id=26241

        To fix this issue, we don't save values if it is not changed from
        the default value.

        Updating the value IDL attribute of some controls such as
        type=hidden also updates the value content attribute, and it's
        impossible to distinguish the initial value and the current
        value. The values of such controls are not saved. It won't be a
        problem because we want to save and restore user-edited values.

        Test: fast/forms/state-restore-to-non-edited-controls.html

        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::saveFormControlState):
          Do not save the value if it is same as the default value.
        * html/HTMLTextAreaElement.cpp:
        (WebCore::HTMLTextAreaElement::saveFormControlState): ditto.

2010-04-02  Kent Tamura  <tkent@chromium.org>

        Reviewed by Darin Adler.

        Forms with autocomplete=off should not consume saved state
        https://bugs.webkit.org/show_bug.cgi?id=36762
        
        Introduce Element::shouldSaveAndRestoreFormControlState() to check
        if we should save and restore control state.

        Test: fast/forms/state-restore-to-non-autocomplete-form.html

        * dom/Document.cpp:
        (WebCore::Document::formElementsState): Check shouldSaveAndRestoreFormControlState().
        * dom/Element.h:
        (WebCore::Element::shouldSaveAndRestoreFormControlState): Added. It just returns true.
        * html/HTMLFormControlElement.cpp:
        (WebCore::HTMLFormControlElementWithState::autoComplete):
          Added. It return autocomplete state of the form.
        (WebCore::HTMLFormControlElementWithState::shouldSaveAndRestoreFormControlState):
          Added. It returns the result of autoComplete().
        (WebCore::HTMLFormControlElementWithState::finishParsingChildren):
          Do not restore state if shouldSaveAndRestoreFormControlState() is false.
        * html/HTMLFormControlElement.h: Declare autoComplete() and overriding methods.
        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::autoComplete):
          Reduce code by using autoComplete() of the parent class.
        (WebCore::HTMLInputElement::saveFormControlState):
          Remove the autoComplete() check. Document::formElementsState() does equivalent check.

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

        Reviewed by Darin Adler.

        Very bad scrolling-performance with the Trackpad at http://www.apple.com/ipad/app-store/
        https://bugs.webkit.org/show_bug.cgi?id=36978

        When we update compositing layers (which can happen on scrolling, when there are fixed position elements
        on the page), we can end up redundantly setting images as layer contents if we have to color-correct
        the image. This is because we call CGImageCreateCopyWithColorSpace(), which hands back a new image
        every time.
        
        Avoid this by storing a reference to the original uncorrected image, which is used to then
        avoid work if the image does not change.

        * platform/graphics/mac/GraphicsLayerCA.h:
        * platform/graphics/mac/GraphicsLayerCA.mm:
        (WebCore::GraphicsLayerCA::setContentsToImage):

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

        Reviewed by Darin Adler.

        Avoid doing work in FrameView::scrollPositionChanged() if there are no fixed position elements
        https://bugs.webkit.org/show_bug.cgi?id=36994
        
        r55890 added knowledge to FrameView about whether it contains any fixed-position elements. We can
        use this to avoid updating widget positions, and compositing layer positions when possible.

        * page/FrameView.cpp:
        (WebCore::FrameView::scrollPositionChanged):
        * page/FrameView.h:
        (WebCore::FrameView::hasFixedObjects):

2010-04-02  Nate Chapin  <japhet@chromium.org>

        Rubber-stamped by Dimitri Glazkov.

        http://trac.webkit.org/changeset/57004 caused
        fast/dom/console-log-stack-overflow.html to fail for Chromium.
        Add check for empty wrappers before using them to create a hidden reference.

        * bindings/scripts/CodeGeneratorV8.pm:

2010-04-01  Nate Chapin  <japhet@chromium.org>

        Reviewed by Dimitri Glazkov.

        [V8] Generalize (and generate!) the creation of hidden references
        between JS wrappers.
        
        https://bugs.webkit.org/show_bug.cgi?id=36777

        * Android.v8bindings.mk:
        * WebCore.gypi:
        * bindings/scripts/CodeGeneratorV8.pm: Generate calls to setHiddenReference() in
        attribute getters.
        * bindings/v8/V8DOMWrapper.cpp:
        (WebCore::V8DOMWrapper::setHiddenReference): Split common logic out of hidden setHiddenWindowReference
        (WebCore::V8DOMWrapper::setHiddenWindowReference): Now contains logic specific to putting a 
        hidden reference on a global object.
        (WebCore::globalObjectPrototypeIsDOMWindow): Be more thorough in the COMPILE_ASSERTs.
        (WebCore::V8DOMWrapper::convertEventTargetToV8Object): Cleanup: Remove a duplicate if statement.
        * bindings/v8/V8DOMWrapper.h:
        * bindings/v8/WrapperTypeInfo.h:
        * bindings/v8/custom/V8BarInfoCustom.cpp: Removed.
        * bindings/v8/custom/V8CSSStyleSheetCustom.cpp:
        (WebCore::toV8):
        * bindings/v8/custom/V8DOMSelectionCustom.cpp: Removed.
        * bindings/v8/custom/V8HistoryCustom.cpp:
        * bindings/v8/custom/V8LocationCustom.cpp:
        * bindings/v8/custom/V8MessageChannelConstructor.cpp:
        (WebCore::V8MessageChannel::constructorCallback):
        * bindings/v8/custom/V8NamedNodeMapCustom.cpp:
        (WebCore::toV8):
        * bindings/v8/custom/V8NavigatorCustom.cpp: Removed.
        * bindings/v8/custom/V8ScreenCustom.cpp: Removed.
        * bindings/v8/custom/V8StyleSheetCustom.cpp:
        (WebCore::toV8):
        * loader/appcache/DOMApplicationCache.h:
        (WebCore::DOMApplicationCache::frame): Add frame() accessor.


2010-04-01  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Timothy Hatcher.

        Web Inspector: start editing DOM and styles on click-and-pause.

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

        * inspector/front-end/ElementsTreeOutline.js:
        (WebInspector.ElementsTreeElement.prototype.onattach):
        (WebInspector.ElementsTreeElement.prototype.selectOnMouseDown):
        (WebInspector.ElementsTreeElement.prototype.ondblclick):
        (WebInspector.ElementsTreeElement.prototype._handleClickAndPause):
        (WebInspector.ElementsTreeElement.prototype._startEditingTarget):
        (WebInspector.ElementsTreeElement.prototype._startEditingAttribute):
        (WebInspector.ElementsTreeElement.prototype._startEditingTextNode):
        (WebInspector.ElementsTreeElement.prototype._startEditingTagName):
        (WebInspector.ElementsTreeElement.prototype._startEditingAsHTML):
        * inspector/front-end/StylesSidebarPane.js:
        (WebInspector.StylePropertiesSection.prototype._handleEmptySpaceDoubleClick):
        (WebInspector.StylePropertiesSection.prototype._handleSelectorClick):
        (WebInspector.StylePropertiesSection.prototype._handleSelectorClickAndPause):
        (WebInspector.StylePropertiesSection.prototype._handleSelectorDoubleClick):
        (WebInspector.StylePropertiesSection.prototype._startEditingOnMouseEvent):
        (WebInspector.StylePropertyTreeElement.prototype.onattach):
        (WebInspector.StylePropertyTreeElement.prototype):
        * inspector/front-end/inspector.css:
        * inspector/front-end/inspector.js:
        * inspector/front-end/treeoutline.js:
        (TreeElement.prototype._attach):
        (TreeElement.treeElementMouseDown):
        (TreeElement.prototype.selectOnMouseDown):

2010-04-02  Laszlo Gombos  <laszlo.1.gombos@nokia.com>

        Unreviewed build fix when building --no-svg.

        Build fix after r56941. Add ENABLE(SVG) guard.

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

2010-04-02  Yury Semikhatsky  <yurys@chromium.org>

        Reviewed by Pavel Feldman.

        Implement InspectorFrontendHost::showContextMenu for Chromium.
 
        Move inspector frontend context menu code from InspectorFrontendClient to InspectorFrontendHost as it's platform independent.
 
        https://bugs.webkit.org/show_bug.cgi?id=36817

        * WebCore.Inspector.exp:
        * bindings/v8/custom/V8InspectorFrontendHostCustom.cpp:
        (WebCore::V8InspectorFrontendHost::showContextMenuCallback):
        * inspector/InspectorFrontendClient.h:
        * inspector/InspectorFrontendClientLocal.cpp:
        (WebCore::InspectorFrontendClientLocal::InspectorFrontendClientLocal):
        (WebCore::InspectorFrontendClientLocal::~InspectorFrontendClientLocal):
        (WebCore::InspectorFrontendClientLocal::windowObjectCleared):
        * inspector/InspectorFrontendClientLocal.h:
        * inspector/InspectorFrontendHost.cpp:
        (WebCore::FrontendMenuProvider::create):
        (WebCore::FrontendMenuProvider::disconnect):
        (WebCore::FrontendMenuProvider::FrontendMenuProvider):
        (WebCore::FrontendMenuProvider::~FrontendMenuProvider):
        (WebCore::FrontendMenuProvider::populateContextMenu):
        (WebCore::FrontendMenuProvider::contextMenuItemSelected):
        (WebCore::FrontendMenuProvider::contextMenuCleared):
        (WebCore::InspectorFrontendHost::InspectorFrontendHost):
        (WebCore::InspectorFrontendHost::disconnectClient):
        (WebCore::InspectorFrontendHost::showContextMenu):
        * inspector/InspectorFrontendHost.h:
        (WebCore::InspectorFrontendHost::create):

2010-04-02  Ilya Tikhonovsky  <loislo@chromium.org>

        Reviewed by Pavel Feldman.

        WebInspector: Timeline Overview pane should support short records filtering.
        https://bugs.webkit.org/show_bug.cgi?id=37020

        * English.lproj/localizedStrings.js:
        * inspector/front-end/TimelineOverviewPane.js:
        (WebInspector.TimelineOverviewPane.prototype.update.markTimeline):
        (WebInspector.TimelineOverviewPane.prototype.update):
        * inspector/front-end/TimelinePanel.js:
        (WebInspector.TimelinePanel):
        (WebInspector.TimelinePanel.prototype._createStatusbarButtons):
        (WebInspector.TimelinePanel.prototype._toggleFilterButtonClicked):
        (WebInspector.TimelinePanel.prototype._refresh):
        (WebInspector.TimelinePanel.prototype._addToRecordsWindow):
        (WebInspector.TimelinePanel.FormattedRecord.prototype.isLong):

2010-04-02  Laszlo Gombos  <laszlo.1.gombos@nokia.com>

        Reviewed by Eric Seidel.

        Accept XHTML-MP content type as XHTML content
        https://bugs.webkit.org/show_bug.cgi?id=34262

        Enable processing XHTML-MP mime type as an XHTML document
        even if XHTML-MP support is not enabled.

        * platform/MIMETypeRegistry.cpp:
        (WebCore::initializeSupportedNonImageMimeTypes):

2010-04-02  Adam Barth  <abarth@webkit.org>

        Reviewed by Daniel Bates.

        Make XSSAuditor go fast with large POST data
        https://bugs.webkit.org/show_bug.cgi?id=36694

        There were two things slowing down this bechmark:

        1) Searching the large POST data for each inline event handler.  To
           make this faster, we now use a suffix tree to fast-reject strings
           that don't appear as substrings of the POST data.

        2) The next largest cost was flattening the form data into a string.
           To make this fater, we now use the form data object itself as a key
           and only flatten once.

        * GNUmakefile.am:
        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * page/XSSAuditor.cpp:
        (WebCore::XSSAuditor::CachingURLCanonicalizer::canonicalizeURL):
        (WebCore::XSSAuditor::CachingURLCanonicalizer::clear):
        (WebCore::XSSAuditor::XSSAuditor):
        (WebCore::XSSAuditor::findInRequest):
        * page/XSSAuditor.h:
        (WebCore::XSSAuditor::CachingURLCanonicalizer::CachingURLCanonicalizer):
        (WebCore::XSSAuditor::CachingURLCanonicalizer::generation):
        * platform/text/SuffixTree.h: Added.
        (WebCore::UnicodeCodebook::codeWord):
        (WebCore::UnicodeCodebook::):
        (WebCore::ASCIICodebook::codeWord):
        (WebCore::ASCIICodebook::):
        (WebCore::SuffixTree::SuffixTree):
        (WebCore::SuffixTree::mightContain):
        (WebCore::SuffixTree::Node::Node):
        (WebCore::SuffixTree::Node::~Node):
        (WebCore::SuffixTree::Node::at):
        (WebCore::SuffixTree::build):

2010-04-02  Roland Steiner  <rolandsteiner@chromium.org>

        Reviewed by Eric Seidel.

        Bug 36741 -  Duplicate, slightly divergent implementation of Position[Iterator]::isCandidate()
        https://bugs.webkit.org/show_bug.cgi?id=36741
        
        Patch: change Position::isCandididate() to call the PositionIterator::isCandidate() version.
        Update PositionIterator::isCandidate() to mirror Position::isCandidate().

        Rationale: PositionIterator::isCandidate() is called in a tight loop within
        next/previousCandidate(). Also, creation of a PositionIterator from a Position
        is cheaper than vice-versa.

        Tests: ran all tests in 'editing'.

        * dom/Position.cpp:
        (WebCore::Position::isCandidate):
        * dom/PositionIterator.cpp:
        (WebCore::PositionIterator::isCandidate):

2010-04-02  Steve Falkenburg  <sfalken@apple.com>

        Reviewed by Dan Bernstein.

        Database code falsely returns errors due to errant pointer check
        https://bugs.webkit.org/show_bug.cgi?id=37014

        r56943 introduced a check to see if there were any unprocessed
        SQL commands after calling sqlite3_prepare16_v2.

        Accessing the remaining data via pointer wasn't possible since
        the query string is deallocated immediately after the
        query runs. The String returned from strippedWhiteSpace
        goes out of scope at that point.

        Fix is to store the strippedWhiteSpace in a temporary String
        so we can access it via character ptr later in the function.

        * platform/sql/SQLiteStatement.cpp:
        (WebCore::SQLiteStatement::prepare):

2010-04-01  MORITA Hajime  <morrita@google.com>

        Reviewed by Darin Adler.

        setting document.title doesn't change document.title value 
        https://bugs.webkit.org/show_bug.cgi?id=36802

        An entity of "value" argument on HTMLTitleElement::setTitle() could be
        Document::m_title and be changed during HTMLTitleElement::setText(). 
        Fix copying the argument to keep the original value.
        
        Test: fast/dom/Document/title-with-multiple-children.html

        * html/HTMLTitleElement.cpp:
        (WebCore::HTMLTitleElement::setText):

2010-04-01  Luiz Agostini  <luiz.agostini@openbossa.org>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] Maemo5 theme - <select multiple> custom rendering
        https://bugs.webkit.org/show_bug.cgi?id=36369

        Customizing rendering of <select multiple> elements in Maemo5.

        * platform/qt/Maemo5Webstyle.cpp:
        (Maemo5WebStyle::drawMultipleComboButton):
        (Maemo5WebStyle::drawSimpleComboButton):
        (Maemo5WebStyle::getButtonImageSize):
        (Maemo5WebStyle::findComboButton):
        (Maemo5WebStyle::drawComplexControl):
        * platform/qt/Maemo5Webstyle.h:

2010-04-01  Kinuko Yasuda  <kinuko@chromium.org>

        Reviewed by Dmitry Titov.

        Add FileThread for async file operation support in FileReader and FileWriter
        https://bugs.webkit.org/show_bug.cgi?id=36896

        Add FileThread for async file operation support for FileReader and
        FileWriter.  The patch also adds ENABLE_FILE_READER or
        ENABLE_FILE_WRITER build flags/defines.  Both flags are disabled
        by default.

        No new tests, will add ones when after adding modules which use the thread.

        * Configurations/FeatureDefines.xcconfig:
        * GNUmakefile.am:
        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * dom/ScriptExecutionContext.cpp:
        (WebCore::ScriptExecutionContext::~ScriptExecutionContext):
        (WebCore::ScriptExecutionContext::fileThread):
        * dom/ScriptExecutionContext.h:
        * html/FileThread.cpp: Added.
        (WebCore::FileThread::FileThread):
        (WebCore::FileThread::~FileThread):
        (WebCore::FileThread::start):
        (WebCore::FileThread::stop):
        (WebCore::FileThread::postTask):
        (WebCore::SameFilePredicate::SameFilePredicate):
        (WebCore::SameFilePredicate::operator()):
        (WebCore::FileThread::removeTask):
        (WebCore::FileThread::fileThreadStart):
        (WebCore::FileThread::runLoop):
        * html/FileThread.h: Added.
        (WebCore::FileThread::create):
        (WebCore::FileThread::Task::Task):
        (WebCore::FileThread::Task::~Task):
        (WebCore::FileThread::Task::fileHandle):
        * platform/Logging.cpp:
        (WebCore::):
        (WebCore::getChannelFromName):
        * platform/Logging.h:

2010-04-01  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed. Rollout of http://trac.webkit.org/changeset/56930
        https://bugs.webkit.org/show_bug.cgi?id=36977

        * accessibility/AccessibilityImageMapLink.cpp:
        (WebCore::AccessibilityImageMapLink::accessibilityDescription):

2010-04-01  MORITA Hajime  <morrita@google.com>

        Reviewed by Darin Adler.

        WebCore::Document::updateLayoutIgnorePendingStylesheets NULL pointer
        https://bugs.webkit.org/show_bug.cgi?id=31680
        Ownerless nodes leads a crash on DOMSelection APIs
        https://bugs.webkit.org/show_bug.cgi?id=36800

        Added guards nodes from foreign documents to DOMSelection APIs.

        Tests: editing/selection/DOMSelection-DocumentType.html
               editing/selection/DOMSelection-crossing-document.html

        * editing/VisiblePosition.cpp:
        (WebCore::VisiblePosition::canonicalPosition):
        * page/DOMSelection.cpp:
        (WebCore::DOMSelection::collapse):
        (WebCore::DOMSelection::setBaseAndExtent):
        (WebCore::DOMSelection::setPosition):
        (WebCore::DOMSelection::extend):
        (WebCore::DOMSelection::containsNode):
        (WebCore::DOMSelection::isValidForPosition):
        * page/DOMSelection.h:

2010-04-01  Chris Evans  <cevans@chromium.org>

        Reviewed by Adam Barth.

        Fix a NULL pointer crash if @import fails to load a stylesheet.

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

        Test: fast/xsl/xslt-bad-import-uri.html

        * xml/XSLStyleSheetLibxslt.cpp:
        (WebCore::XSLStyleSheet::parseString):
          Handle an empty string gracefully. An empty string has a NULL
          buffer, which we pass in to xmlCreateMemoryParserCtxt(). It returns
          NULL if it is passed a NULL buffer.
          In the top-level XSL case, the current code does not crash "by luck"
          because the other APIs used can handle a NULL argument. In the
          @import case, additional code runs which will deference the NULL.

2010-04-01  Alexey Proskuryakov  <ap@apple.com>

        Reviewed by Darin Adler.

        https://bugs.webkit.org/show_bug.cgi?id=36854
        <rdar://problem/7811668> REGRESSION (r47291): Body from cross origin preflight response
        is prepended to the actual response body

        Tests: http/tests/xmlhttprequest/access-control-response-with-body-sync.html
               http/tests/xmlhttprequest/access-control-response-with-body.html

        * loader/DocumentThreadableLoader.cpp: (WebCore::DocumentThreadableLoader::didReceiveData):
        Don't send data to the client when handling a preflight request.

2010-04-01  Ada Chan  <adachan@apple.com>

        Reviewed by Darin Adler.
        
        Change DatabaseTracker::deleteOrigin() to return true if there are no errors in deleting the origin.
        Ditto for DatabaseTracker::deleteDatabase().
        
        https://bugs.webkit.org/show_bug.cgi?id=36988

        * storage/DatabaseTracker.cpp:
        (WebCore::DatabaseTracker::deleteOrigin):
        (WebCore::DatabaseTracker::deleteDatabase):
        * storage/DatabaseTracker.h:

2010-04-01  Simon Fraser  <simon.fraser@apple.com>

        No review.

        Remove some casts that I indended to remove before committing r56948.

        * rendering/RenderTreeAsText.cpp:
        (WebCore::writeRenderObject):
        (WebCore::write):

2010-04-01  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Darin Adler.

        Assertion failure (willBeComposited == needsToBeComposited(layer)) in
        RenderLayerCompositor::computeCompositingRequirements() on hulu.com
        https://bugs.webkit.org/show_bug.cgi?id=36516
        
        Fix assertions added in r56017. That changed replaced calls to needsToBeComposited()
        with use of the local 'willBeComposited' variable, but that fails to take into
        account the fact that needsToBeComposited() also tests layer->isSelfPaintingLayer().
        
        Fix by adding a canBeComposited() method that we call before testing
        whether the layer should go into compositing mode.

        Test: compositing/self-painting-layers2.html

        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::calculateCompositedBounds): Repace use of isSelfPaintingLayer()
        with a call to canBeComposited().
        (WebCore::RenderLayerCompositor::computeCompositingRequirements): Call canBeComposited() to ensure
        that we only toggle 'willBeComposited' for layers that can.
        (WebCore::RenderLayerCompositor::needsToBeComposited): Call canBeComposited().
        (WebCore::RenderLayerCompositor::canBeComposited): Test if compositing is enabled, and whether
        the layer is self-painting.
        * rendering/RenderLayerCompositor.h: Add canBeComposited().

2010-04-01  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Darin Adler.

        https://bugs.webkit.org/show_bug.cgi?id=36980
        Add object addresses to debug showLayerTree() output.
        
        Add the ability to print RenderLayer and RenderObject addresses in the showLayerTree()
        output.

        * platform/text/TextStream.cpp:
        (WebCore::TextStream::operator<<):
        * platform/text/TextStream.h:
        * rendering/RenderLayer.cpp:
        (showLayerTree):
        * rendering/RenderTreeAsText.cpp:
        (WebCore::writeRenderObject):
        (WebCore::write):
        * rendering/RenderTreeAsText.h:

2010-03-29  Dumitru Daniliuc  <dumi@chromium.org>

        Reviewed by Dimitri Glazkov.

        Changing SQLiteStatement::prepare() to return an error when it's
        given a string that has more than one statement in it. Currently,
        everything past the first statement is silently ignored.

        Test: storage/executesql-accepts-only-one-statement.html

        * platform/sql/SQLiteStatement.cpp:
        (WebCore::SQLiteStatement::prepare):

2010-04-01  James Robinson  <jamesr@chromium.org>

        Reviewed by Simon Fraser.

        Keeps a transient optimistic offset to the root in RenderLayer::updateLayerPositions
        https://bugs.webkit.org/show_bug.cgi?id=33520

        RenderLayer::updateLayerPositions() makes a recursive walk through all RenderLayers and updates the repaint rectangles on each.
        These rectangles have to be calculated in the repaint container's coordinates using RenderObject::mapLocalToContainer to walk
        up to the repaint container.  This patch keeps track of the offset to the root and uses that offset instead of walking back up to
        the root every time.

        Tests: fast/layers/nested-layers-1.html
               fast/layers/nested-layers-2.html
               fast/layers/nested-layers-3.html
               fast/layers/nested-layers-4.html

        * page/FrameView.cpp:
        (WebCore::FrameView::layout):
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::outlineBoundsForRepaint):
        * rendering/RenderBox.h:
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::updateLayerPositions):
        * rendering/RenderLayer.h:
        * rendering/RenderObject.h:
        (WebCore::RenderObject::outlineBoundsForRepaint):
        * rendering/RenderSVGModelObject.cpp:
        (WebCore::RenderSVGModelObject::outlineBoundsForRepaint):
        * rendering/RenderSVGModelObject.h:

2010-04-01  Daniel Bates  <dbates@rim.com>

        Reviewed by Darin Adler.

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

        Removed functions Range::operator == and Range::operator != as they
        were using C++ code that was not sound and hence may have undefined
        behavior.

        Test case: manual-tests/crash-on-find-with-no-selection.html

        * dom/Range.cpp:
        (WebCore::areRangesEqual): Added.
        * dom/Range.h:
        * editing/markup.cpp:
        (WebCore::createMarkup): Modified to call WebCore::areRangesEqual.
        * manual-tests/crash-on-find-with-no-selection.html: Added.
        * page/Frame.cpp:
        (WebCore::Frame::findString): Modified to call WebCore::areRangesEqual.

2010-04-01  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Sam Weinig.

        Synchronous rendering when setting form control values slows down JavaScript
        https://bugs.webkit.org/show_bug.cgi?id=36967

        This patch basically reverts http://trac.webkit.org/changeset/19006.
        
        Dan asked me to investigate why 19006 is no longer needed. I have two answers:

            (1) I was also able to remove the synchronous call to updateFromElement().
            That call was the proximate cause of the crash that 19006 fixed.

            (2) updateFromElement() no longer calls HTMLElement::setInnerText()
            in the way that it used to. (However, it doesn't seem prudent to
            rely on this happy coincidence.)

        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::setValue): Simplified some logic here. Moved
        setNeedsValidityCheck() outside of individual 'if' clauses, since they all
        called it.
        
        Removed call to updateStyleIfNeeded(), which does rendering synchronously,
        since that was the performance problem. (setNeedsStyleRecalc() ensures
        that rendering will happen asynchronously.) Also removed comment about
        ordering dangers introduced by updateStyleIfNeeded().
        
        Removed call to updateFromElement(), since it's dangerous and also a minor
        performance problem. (setNeedsStyleRecalc() ensures that updateFromElement()
        will happen asynchronously, too.)

        * html/HTMLTextAreaElement.cpp:
        (WebCore::HTMLTextAreaElement::setNonDirtyValue): Ditto. Here, I had to
        add a call to setNeedsStyleRecalc(), since there wasn't one before.

2010-04-01  Ilya Tikhonovsky  <loislo@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: Sometimes js code can detach page from it's frame and in that case
        Dispatch Events will stay in the TimelineAgent's events stack. Only immediate events will
        appear at frontend.
        https://bugs.webkit.org/show_bug.cgi?id=36890

        * bindings/v8/V8Proxy.cpp:
        (WebCore::V8Proxy::callFunction):
        * dom/Node.cpp:
        (WebCore::Node::dispatchGenericEvent):
        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::dispatchEvent):

2010-04-01  Chris Fleizach  <cfleizach@apple.com>

        Reviewed by Beth Dakin.

        Bug 36977 - aria-label doesn't work on image map area
        https://bugs.webkit.org/show_bug.cgi?id=36977

        Test: platform/mac/accessibility/area-with-aria-label.html

        * accessibility/AccessibilityImageMapLink.cpp:
        (WebCore::AccessibilityImageMapLink::accessibilityDescription):

2010-04-01  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Dan Bernstein.

        Assertion failure: !repaintContainer || repaintContainer == this
        https://bugs.webkit.org/show_bug.cgi?id=36672
        
        RenderText's implementation of clippedOverflowRectForRepaint() uses containingBlock()
        to get the renderer to use for computing the repaint rect. However, the renderer returned
        by containingBlock() may be an ancestor of the repaintContainer, and containingBlock()
        doesn't have the 'repaintContainerSkipped' logic that container() has.
        
        So in this case, check to see whether repaintContainer is actually a descendant of the
        containing block, and in that case just repaint the entire repaintContainer.

        Test: compositing/repaint/inline-repaint-container.html

        * rendering/RenderText.cpp:
        (WebCore::RenderText::clippedOverflowRectForRepaint):

2010-04-01  Csaba Osztrogonác  <ossy@webkit.org>

        Reviewed by Jian Li.

        [Qt] REGRESSION(r56869): Windows build is broken
        https://bugs.webkit.org/show_bug.cgi?id=36929

        * WebCore.pro: LIBS += -lOle32 added.
        * platform/UUID.cpp: Define ARRAYSIZE macro if it isn't defined before.

2010-04-01  Chris Fleizach  <cfleizach@apple.com>

        Reviewed by Beth Dakin.

        Bug 36968 - 1 crash in Safari at com.apple.WebCore: WebCore::Element::getAttribute const
        https://bugs.webkit.org/show_bug.cgi?id=36968

        Test: accessibility/crash-with-noelement-selectbox.html

        When a <select> element had no options, the selectedIndex == -1 and that was being
        used to index into an empty array.

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

2010-04-01  MORITA Hajime  <morrita@google.com>

        Reviewed by Shinichiro Hamaji.

        https://bugs.webkit.org/show_bug.cgi?id=36948
        Refactoring: Position::primaryDirection() should be extracted.

        No new tests. No functinal change.

        * dom/Position.cpp:
        (WebCore::Position::getInlineBoxAndOffset):
        (WebCore::Position::primaryDirection): Added
        * dom/Position.h:
        * editing/VisiblePosition.cpp:
        (WebCore::VisiblePosition::leftVisuallyDistinctCandidate):
        (WebCore::VisiblePosition::rightVisuallyDistinctCandidate):

2010-04-01  Alexander Pavlov  <apavlov@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: Audits: fix parsing of injected script-evaluated result for CssInHeadRule
        https://bugs.webkit.org/show_bug.cgi?id=36952

        * inspector/front-end/AuditRules.js:
        (WebInspector.AuditRules.CssInHeadRule.prototype.doRun):

2010-03-31  Jeremy Orlow  <jorlow@chromium.org>

        Reviewed by Nate Chapin.

        Misc IndexedDatabase cleanup
        https://bugs.webkit.org/show_bug.cgi?id=36889

        No functional changes.

        * bindings/v8/custom/V8CustomIDBCallbacks.h:  
        (WebCore::V8CustomIDBCallbacks::onSuccess):
        (WebCore::V8CustomIDBCallbacks::onError):
        (WebCore::V8CustomIDBCallbacks::V8CustomIDBCallbacks):
            Get rid of 2 largely redundant bools

        * storage/IndexedDatabase.h:
        * storage/IndexedDatabaseImpl.cpp:
        (WebCore::IndexedDatabaseImpl::open):
        * storage/IndexedDatabaseImpl.h:
        * storage/IndexedDatabaseRequest.cpp:
        (WebCore::IndexedDatabaseRequest::open):
        * storage/IndexedDatabaseRequest.h:
            Plumb the Frame* and style cleanups.

2010-03-31  Nikolas Zimmermann  <nzimmermann@rim.com>

        Reviewed by Dirk Schulze.

        REGRESSION: document.documentElement.getScreenCTM() returns incorrect matrix.
        https://bugs.webkit.org/show_bug.cgi?id=27183

        Rewrite getCTM() / getScreenCTM() handling in an iterative way, fixing all known problems/limitations.
        The bug mentioned above is actually not a regression, getScreenCTM() only worked before, because we
        did not handle non-SVG CSS box parents properly. When support was added to handle those cases, the
        getScreenCTM() handling was completly off, causing a lot of trouble in real-life SVG applications (carto.net for instance)

        Tests: svg/custom/svgsvgelement-ctm.xhtml (fixed typo, missing unit identifier in CSS 'height' property, leading to incorrect results)
               svg/custom/svgsvgelement-ctm2.xhtml
               svg/custom/svgsvgelement-ctm3.xhtml
               svg/custom/svgsvgelement-ctm4.xhtml
               svg/custom/svgsvgelement-ctm5.xhtml

        * svg/SVGLocatable.cpp:
        (WebCore::SVGLocatable::getBBox):
        (WebCore::SVGLocatable::computeCTM):
        * svg/SVGLocatable.h:
        (WebCore::SVGLocatable::localCoordinateSpaceTransform):
        * svg/SVGSVGElement.cpp:
        (WebCore::SVGSVGElement::localCoordinateSpaceTransform):
        (WebCore::SVGSVGElement::createRenderer):
        * svg/SVGSVGElement.h:
        * svg/SVGStyledElement.cpp:
        (WebCore::SVGStyledElement::localCoordinateSpaceTransform):
        * svg/SVGStyledElement.h:
        * svg/SVGStyledLocatableElement.cpp:
        (WebCore::SVGStyledLocatableElement::getCTM):
        (WebCore::SVGStyledLocatableElement::getScreenCTM):
        * svg/SVGStyledLocatableElement.h:
        (WebCore::SVGStyledLocatableElement::localCoordinateSpaceTransform):
        * svg/SVGStyledTransformableElement.cpp:
        (WebCore::SVGStyledTransformableElement::getCTM):
        (WebCore::SVGStyledTransformableElement::getScreenCTM):
        * svg/SVGStyledTransformableElement.h:
        (WebCore::SVGStyledTransformableElement::localCoordinateSpaceTransform):
        * svg/SVGTextElement.cpp:
        (WebCore::SVGTextElement::getCTM):
        (WebCore::SVGTextElement::getScreenCTM):
        * svg/SVGTextElement.h:
        (WebCore::SVGTextElement::localCoordinateSpaceTransform):
        * svg/SVGTransformable.cpp:
        (WebCore::SVGTransformable::SVGTransformable):
        * svg/SVGTransformable.h:
        (WebCore::SVGTransformable::localCoordinateSpaceTransform):

2010-04-01  Vitaly Repeshko  <vitalyr@chromium.org>

        Reviewed by Darin Fisher.

        [V8] Quick fix for failure in SerializedScriptValue
        https://bugs.webkit.org/show_bug.cgi?id=36943

        This allows the web worker layout tests to pass again.

        * bindings/v8/SerializedScriptValue.h:
        (WebCore::SerializedScriptValue::deserializeAndSetProperty):

2010-03-31  MORITA Hajime  <morrita@google.com>
        
        Reviewed by Darin Adler.

        Crash when writing into a detached TITLE element
        https://bugs.webkit.org/show_bug.cgi?id=25567
        
        Document::setTitle() invoked HTMLTitleElement::setText(), which
        contains DOM tree modification, even when setTitle() is called
        from HTMLTitleElement::childrenChanged().  Fix to skip setText()
        when setTitle() is called childrenChanged() to avoid cascading
        DOM mutations between Document and HTMLTitleElement.

        Test: fast/dom/title-content-write-set.html

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

2010-04-01  Roland Steiner  <rolandsteiner@chromium.org>

        Reviewed by Darin Adler.

        Bug 36803 - 'Inline-table' workaround for <ruby> broken with ruby support
        https://bugs.webkit.org/show_bug.cgi?id=36803

        Don't use ruby rendering if the underlying 'display' property has been
        changed into a value other than 'inline' or 'block' (such as 'inline-table').

        Test: fast/ruby/ruby-inline-table.html

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

2010-03-31  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Darin Adler.

        Crash submitting display:none textarea in a form
        https://bugs.webkit.org/show_bug.cgi?id=36905

        Test: fast/forms/textarea-submit-crash.html

        * html/HTMLTextAreaElement.cpp:
        (WebCore::HTMLTextAreaElement::appendFormData): Do update layout before
        asking our renderer for its text, since we can't rely on our renderer's
        text if layout is needed.

        * rendering/RenderTextControl.cpp:
        (WebCore::RenderTextControl::textWithHardLineBreaks): Don't update layout
        while being asked for our text, since doing so may delete us, causing a crash.

2010-03-31  Chris Fleizach  <cfleizach@apple.com>

        Reviewed by Darin Adler.

        Bug 36845 - AX: need a way to set the label of a AXWebArea through WebKit
        https://bugs.webkit.org/show_bug.cgi?id=36845

        Provide a way through WebKit to set an accessible label that describes the web area.

        Test: platform/mac/accessibility/html-with-aria-label.html

        * accessibility/AccessibilityObject.h:
        (WebCore::AccessibilityObject::setAccessibleName):
        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::accessibilityDescription):
        (WebCore::AccessibilityRenderObject::setAccessibleName):
        * accessibility/AccessibilityRenderObject.h:

2010-03-31  Mark Rowe  <mrowe@apple.com>

        Reviewed by Darin Adler.

        <http://webkit.org/b/36878> REGRESSION: Trailing colon on hostnames (with no port specified) causes "Not allowed to use restricted network port"

        * platform/KURL.cpp:
        (WebCore::KURL::port): Explicitly handle the case of a colon being present in the URL after the host name but with
        no port number before the path.  This is handled in the same manner as the colon and port being omitted completely.

2010-03-31  Gavin Barraclough  <barraclough@apple.com>

        Reviewed by Oliver Hunt.

        Remove dependency on TextBreakIterator from StringImpl.cpp,
        and from member methods of String.

        Make 'numGraphemeClusters' & 'numCharactersInGraphemeClusters'
        global function defined in PlatformString.h, rather than
        member methods on String (these can be implemented purely
        using the characters() and length() public interface),
        and make 'makeCapitalized' a static function in RenderText.cpp.

        * dom/InputElement.cpp:
        (WebCore::InputElement::sanitizeUserInputValue):
        (WebCore::InputElement::handleBeforeTextInsertedEvent):
        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::tooLong):
        * html/HTMLTextAreaElement.cpp:
        (WebCore::HTMLTextAreaElement::handleBeforeTextInsertedEvent):
        (WebCore::HTMLTextAreaElement::sanitizeUserInputValue):
        (WebCore::HTMLTextAreaElement::tooLong):
        * platform/text/PlatformString.h:
        (WebCore::String::makeSecure):
        * platform/text/String.cpp:
        (WebCore::numGraphemeClusters):
        (WebCore::numCharactersInGraphemeClusters):
        * platform/text/StringImpl.cpp:
        * platform/text/StringImpl.h:
        * rendering/RenderText.cpp:
        (WebCore::makeCapitalized):
        (WebCore::RenderText::setTextInternal):

2010-03-31  Vitaly Repeshko  <vitalyr@chromium.org>

        Reviewed by David Levin.

        [V8] SerializedScriptValue must be deserialized only once and in the right context
        https://bugs.webkit.org/show_bug.cgi?id=36892

        See also https://bugs.webkit.org/show_bug.cgi?id=34227 for the
        corresponding JSC change.

        General idea: SerializedScriptValue must be deserialized only once
        and in the context of the intended MessageEvent recepient. The
        approach we take for now is to eagerly deserialize when a
        JavaScript wrapper for MessageEvent is created.

        A better fix would be to keep a reference to the context in
        MessageEvent and use it when lazily deserializing. It's harder to
        do since the API doesn't have a clean method to have such a reference.

        Tested by fast/dom/Window/window-postmessage-clone-frames.html. This
        test still fails but only for the types which we can't serialize yet.

        * bindings/scripts/CodeGeneratorV8.pm:
        * bindings/v8/SerializedScriptValue.h:
        (WebCore::SerializedScriptValue::deserializeAndSetProperty):
        * bindings/v8/custom/V8MessageEventCustom.cpp:
        (WebCore::V8MessageEvent::initMessageEventCallback):

2010-03-31  Adam Barth  <abarth@webkit.org>

        Reviewed by Darin Fisher.

        Cleanup RedirectScheduler
        https://bugs.webkit.org/show_bug.cgi?id=36874

        Removed the nutty ScheduledRedirection struct in favor of a hierarchy
        of classes to represent the various kinds of scheduled redirects.
        Doing this lets us get rid of the pseudo RTTI switch statements on
        "type" in favour of calling virtual functions.

        No new tests because this change should be API identical with the
        existing RedirectScheduler.

        * loader/RedirectScheduler.cpp:
        (WebCore::ScheduledNavigation::ScheduledNavigation):
        (WebCore::ScheduledNavigation::~ScheduledNavigation):
        (WebCore::ScheduledNavigation::isLocationChange):
        (WebCore::ScheduledNavigation::shouldStartTimer):
        (WebCore::ScheduledNavigation::didStartTimer):
        (WebCore::ScheduledNavigation::didStopTimer):
        (WebCore::ScheduledNavigation::delay):
        (WebCore::ScheduledNavigation::lockHistory):
        (WebCore::ScheduledNavigation::lockBackForwardList):
        (WebCore::ScheduledNavigation::wasDuringLoad):
        (WebCore::ScheduledURLNavigation::ScheduledURLNavigation):
        (WebCore::ScheduledURLNavigation::fire):
        (WebCore::ScheduledURLNavigation::didStartTimer):
        (WebCore::ScheduledURLNavigation::didStopTimer):
        (WebCore::ScheduledURLNavigation::url):
        (WebCore::ScheduledURLNavigation::referrer):
        (WebCore::ScheduledURLNavigation::wasUserGesture):
        (WebCore::ScheduledRedirect::ScheduledRedirect):
        (WebCore::ScheduledRedirect::isLocationChange):
        (WebCore::ScheduledRedirect::shouldStartTimer):
        (WebCore::ScheduledLocationChange::ScheduledLocationChange):
        (WebCore::ScheduledRefresh::ScheduledRefresh):
        (WebCore::ScheduledRefresh::fire):
        (WebCore::ScheduledHistoryNavigation::ScheduledHistoryNavigation):
        (WebCore::ScheduledHistoryNavigation::fire):
        (WebCore::ScheduledFormSubmission::ScheduledFormSubmission):
        (WebCore::ScheduledFormSubmission::fire):
        (WebCore::RedirectScheduler::redirectScheduledDuringLoad):
        (WebCore::RedirectScheduler::clear):
        (WebCore::RedirectScheduler::scheduleRedirect):
        (WebCore::RedirectScheduler::mustLockBackForwardList):
        (WebCore::RedirectScheduler::scheduleLocationChange):
        (WebCore::RedirectScheduler::scheduleFormSubmission):
        (WebCore::RedirectScheduler::scheduleRefresh):
        (WebCore::RedirectScheduler::locationChangePending):
        (WebCore::RedirectScheduler::scheduleHistoryNavigation):
        (WebCore::RedirectScheduler::timerFired):
        (WebCore::RedirectScheduler::schedule):
        (WebCore::RedirectScheduler::startTimer):
        (WebCore::RedirectScheduler::cancel):
        * loader/RedirectScheduler.h:

2010-03-31  Zhenyao Mo  <zmo@google.com>

        Reviewed by Darin Fisher.

        Hook up WebGLContextAttributes to OpenGL context creation code
        https://bugs.webkit.org/show_bug.cgi?id=33416

        Test: fast/canvas/webgl/context-attributes-alpha-depth-stencil-antialias.html

        * bindings/v8/custom/V8HTMLCanvasElementCustom.cpp: Fix an index bug.
        (WebCore::V8HTMLCanvasElement::getContextCallback):
        * platform/graphics/GraphicsContext3D.h: Add members/functions for multisampling/stencil buffer purpose.
        * platform/graphics/mac/Canvas3DLayer.h: Add GraphicsContext3D as a member of Canvas3DLayer.
        * platform/graphics/mac/Canvas3DLayer.mm: Add multisampling support.
        (-[Canvas3DLayer drawInCGLContext:pixelFormat:forLayerTime:displayTime:]):
        * platform/graphics/mac/GraphicsContext3DMac.cpp: Hook up WebGLContextAttributes to OpenGL context creation code for Mac.
        (WebCore::GraphicsContext3D::GraphicsContext3D):
        (WebCore::GraphicsContext3D::~GraphicsContext3D):
        (WebCore::GraphicsContext3D::validateAttributes):
        (WebCore::GraphicsContext3D::reshape):
        (WebCore::GraphicsContext3D::prepareTexture):
        (WebCore::GraphicsContext3D::bindFramebuffer):
        (WebCore::GraphicsContext3D::readPixels):
        * platform/graphics/mac/GraphicsLayerCA.mm: Adjust to modified Canvas3DLayer init call.
        (WebCore::GraphicsLayerCA::setContentsToGraphicsContext3D):

2010-03-31  Jian Li  <jianli@chromium.org>

        Reviewed by Dmitry Titov.

        Add support to create UUID string.
        https://bugs.webkit.org/show_bug.cgi?id=36472

        * GNUmakefile.am:
        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * platform/UUID.cpp: Added.
        (WebCore::createCanonicalUUIDString):
        * platform/UUID.h: Added.

2010-03-31  Darin Adler  <darin@apple.com>

        * rendering/RenderThemeChromiumWin.h: Fix inconsistent line endings.

2010-03-31  Luiz Agostini  <luiz.agostini@openbossa.org>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] Maemo5 theme - form controls style
        https://bugs.webkit.org/show_bug.cgi?id=36370

        Adjusting Mameo5 form elements rendering.

        * WebCore.pri:
        * WebCore.pro:
        * css/themeQtMaemo5.css: Added.
        (select):
        (select:disabled):
        (select:active):
        (select:active:disabled):
        (textarea):
        (textarea:disabled):
        (textarea:active):
        * platform/qt/Maemo5Webstyle.cpp: Added.
        (Maemo5WebStyle::Maemo5WebStyle):
        (drawRectangularControlBackgorund):
        (Maemo5WebStyle::drawChecker):
        (Maemo5WebStyle::findChecker):
        (Maemo5WebStyle::drawRadio):
        (Maemo5WebStyle::findRadio):
        (Maemo5WebStyle::drawControl):
        (Maemo5WebStyle::drawComplexControl):
        * platform/qt/Maemo5Webstyle.h: Added.
        * platform/qt/RenderThemeQt.cpp:
        (WebCore::RenderThemeQt::RenderThemeQt):
        (WebCore::RenderThemeQt::isControlStyled):
        (WebCore::RenderThemeQt::popupInternalPaddingBottom):
        (WebCore::RenderThemeQt::extraDefaultStyleSheet):
        (WebCore::RenderThemeQt::adjustMenuListButtonStyle):
        * platform/qt/RenderThemeQt.h:

2010-03-31  Alexey Proskuryakov  <ap@apple.com>

        https://bugs.webkit.org/show_bug.cgi?id=36897
        <rdar://problem/7804018> REGRESSION (r56429): Flash ads are clipped when main page is scrolled (boxofficemojo.com)

        Addressing additional review comments.

        * rendering/RenderWidget.cpp: Removed an unneeded include.
        * rendering/RenderWidget.h: Reworded the new comment.

2010-03-31  Alexey Proskuryakov  <ap@apple.com>

        Reviewed by Dan Bernstein.

        https://bugs.webkit.org/show_bug.cgi?id=36897
        <rdar://problem/7804018> REGRESSION (r56429): Flash ads are clipped when main page is scrolled (boxofficemojo.com)

        * manual-tests/plugin-in-iframe-scroll.html: Added.
        * manual-tests/resources/plugin-in-iframe-scroll-iframe.html: Added.

        * rendering/RenderWidget.cpp:
        (WebCore::RenderWidget::setWidgetGeometry): This method isn't called when an iframe containing
        the widget moves, so we should store a value that is not dependent on current scroll offset.
        (WebCore::RenderWidget::windowClipRect): Apply scroll offset and window clip now.

        * rendering/RenderWidget.h: Renamed m_windowClipRect to m_clipRect, because it is no longer
        in window coordinates.

        * WebCore.base.exp: Export RenderWidget::windowClipRect(), since it's no longer inline.

2010-03-31  Kenneth Rohde Christiansen  <kenneth@webkit.org>

        Unreviewed crash fix.

        Crash with frame flattening on after r56854
        https://bugs.webkit.org/show_bug.cgi?id=36894

        Solution tested by Greg Bolsinga, thanks.

        * page/FrameView.cpp:
        (WebCore::FrameView::avoidScrollbarCreation):
        * platform/ScrollView.cpp:
        (WebCore::ScrollView::setHasHorizontalScrollbar):
        (WebCore::ScrollView::setHasVerticalScrollbar):

2010-03-31  Kenneth Rohde Christiansen  <kenneth@webkit.org>

        Reviewed by Antti Koivisto.

        iframe flattening doesn't flatten
        https://bugs.webkit.org/show_bug.cgi?id=36798

        Do not draw scrollbars for subframes when frame flattening is
        enabled. Implemented using a virtual method in ScrollView as
        suggested by Dave Hyatt.

        Do not suppress scrollbars as that is wrong according to
        Dave Hyatt.

        Covered by current tests.

        * page/FrameView.cpp:
        (WebCore::FrameView::avoidScrollbarCreation):
        * page/FrameView.h:
        * platform/ScrollView.cpp:
        (WebCore::ScrollView::setHasHorizontalScrollbar):
        (WebCore::ScrollView::setHasVerticalScrollbar):
        * platform/ScrollView.h:
        (WebCore::ScrollView::avoidScrollbarCreation):
        * rendering/RenderPart.cpp:
        (WebCore::RenderPart::layoutWithFlattening):

2010-03-30  Kenneth Rohde Christiansen  <kenneth@webkit.org>

        Reviewed by Antti Koivisto.

        iframe flattening doesn't flatten
        https://bugs.webkit.org/show_bug.cgi?id=36798

        Fix wrongly reversing logic in frame flattening check.

        Tests:
        fast/frames/flattening/iframe-flattening-fixed-height.html
        fast/frames/flattening/iframe-flattening-fixed-width.html
        fast/frames/flattening/iframe-flattening-fixed-width-and-height.html
        fast/frames/flattening/iframe-flattening-fixed-width-and-height-no-scrolling.html

        * rendering/RenderPartObject.cpp:
        (WebCore::RenderPartObject::flattenFrame):

2010-03-31  Marcus Bulach  <bulach@chromium.org>

        Reviewed by Jeremy Orlow.

        Implements cancelGeolocationPermissionRequestForFrame.
        Similar to requestGeolocationPermissionForFrame(), passes Geolocation* to cancelGeolocationPermissionRequestForFrame(),
        so that the embedder can identify which Geolocation object is cancelling the pending permission request.
        Calls cancelGeolocationPermissionRequestForFrame() before stopUpdating() so it better matches the startUpdating() / requestPermission() flow.
        https://bugs.webkit.org/show_bug.cgi?id=35031

        * loader/EmptyClients.h:
        (WebCore::EmptyChromeClient::cancelGeolocationPermissionRequestForFrame):
        * page/Chrome.cpp:
        (WebCore::Chrome::cancelGeolocationPermissionRequestForFrame):
        * page/Chrome.h:
        * page/ChromeClient.h:
        * page/Geolocation.cpp:
        (WebCore::Geolocation::disconnectFrame):

2010-03-31  Yael Aharon  <yael.aharon@nokia.com>

        Reviewed by Antti Koivisto.

        Add animation to progress element
        https://bugs.webkit.org/show_bug.cgi?id=36664

        Add a timer to control the animation. The timer is started after painting
        or a state change in the progress bar, to prevent animation from running
        when the progress bar is not visible.

        * html/HTMLProgressElement.cpp:
        (WebCore::HTMLProgressElement::createRenderer):
        * manual-tests/dom: Added.
        * manual-tests/dom/progressbar.html: Added.
        * platform/qt/RenderThemeQt.cpp:
        (WebCore::RenderThemeQt::animationRepeatIntervalForProgressBar):
        (WebCore::RenderThemeQt::animationDurationForProgressBar):
        (WebCore::RenderThemeQt::paintProgressBar):
        * platform/qt/RenderThemeQt.h:
        * rendering/RenderProgress.cpp:
        (WebCore::RenderProgress::RenderProgress):
        (WebCore::RenderProgress::layout):
        (WebCore::RenderProgress::updateFromElement):
        (WebCore::RenderProgress::animationProgress):
        (WebCore::RenderProgress::animationTimerFired):
        (WebCore::RenderProgress::paint):
        (WebCore::RenderProgress::updateAnimationState):
        * rendering/RenderProgress.h:
        * rendering/RenderTheme.cpp:
        (WebCore::RenderTheme::animationRepeatIntervalForProgressBar):
        (WebCore::RenderTheme::animationDurationForProgressBar):
        * rendering/RenderTheme.h:

2010-03-31  Pavel Feldman  <pfeldman@chromium.org>

        Not reviewed. Rolling out r56829 since it broke chromium layout tests.

        [REGRESSION] Inspector tests started crashing since r56829
        https://bugs.webkit.org/show_bug.cgi?id=36888

        * bindings/scripts/CodeGeneratorV8.pm:
        * bindings/v8/V8Utilities.cpp:
        * bindings/v8/V8Utilities.h:
        * loader/FrameLoaderClient.h:

2010-03-31  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Timothy Hatcher.

        Web Inspector: creating new style bugfixing.

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

        - InspectorDOMAgent should clear internal state upon reset (we are re-using
          single dom agent instance throughout entire inspector controller lifetime) 
        - Brought back blank style 'refresh' processing logic - remove it by mistake earlier
        - Blocked couple of click handlers so that double-click to edit was not
          expanding / collapsing the pane
        - There is no need to reach out for matched rules upon 'refresh' update -
          getting computed style is sufficient.

        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::matchRulesForList):
        * inspector/InspectorDOMAgent.cpp:
        (WebCore::InspectorDOMAgent::discardBindings):
        * inspector/front-end/StylesSidebarPane.js:
        (WebInspector.StylesSidebarPane.prototype.update.getStylesCallback):
        (WebInspector.StylesSidebarPane.prototype.update.getComputedStyleCallback):
        (WebInspector.StylesSidebarPane.prototype.update):
        (WebInspector.StylesSidebarPane.prototype._refreshUpdate):
        (WebInspector.StylesSidebarPane.prototype._rebuildUpdate):
        (WebInspector.StylesSidebarPane.prototype._refreshStyleRules):
        (WebInspector.StylesSidebarPane.prototype.addBlankSection):
        (WebInspector.StylePropertiesSection.prototype._dblclickEmptySpace):
        (WebInspector.StylePropertiesSection.prototype._clickSelector):

2010-03-31  Yury Semikhatsky  <yurys@chromium.org>

        Unreviewed. Chromium build fix: create missing v8::HandleScope.

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

        * bindings/v8/custom/V8InjectedScriptHostCustom.cpp:
        (WebCore::InjectedScriptHost::canAccessInspectedWindow):

2010-03-31  Yury Semikhatsky  <yurys@chromium.org>

        Reviewed by Pavel Feldman.

        Check that injected script can still access inspected window object when wrapping console object. When the window cannot be access serialize objects as strings. Also don't call InjectedScript.dispatch if the window cannot be accessed (due to frame navigation).

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

        * bindings/js/JSInjectedScriptHostCustom.cpp:
        (WebCore::InjectedScriptHost::canAccessInspectedWindow):
        * bindings/v8/custom/V8InjectedScriptHostCustom.cpp:
        (WebCore::InjectedScriptHost::canAccessInspectedWindow):
        * inspector/InjectedScript.cpp:
        (WebCore::InjectedScript::wrapForConsole):
        * inspector/InjectedScriptHost.h:
        * inspector/front-end/InjectedScript.js:
        (injectedScriptConstructor):

2010-03-31  Mattias Nissler  <mnissler@google.com>

        Reviewed by Pavel Feldman.

        Allow generic resource URLs for cookie handling in the inspector. This
        enables display of all cookies, not only those that are associated
        with resources accessed through http, https or file.
        https://bugs.webkit.org/show_bug.cgi?id=36877

        * inspector/front-end/CookieItemsView.js:
        (WebInspector.CookieItemsView.prototype._filterCookiesForDomain):
        * inspector/front-end/DOMAgent.js:
        (WebInspector.Cookies.cookieMatchesResourceURL):
        * inspector/front-end/inspector.js:
        (WebInspector.updateResource):

2010-03-30  Jeremy Orlow  <jorlow@chromium.org>

        Reviewed by Nate Chapin.

        IndexedDB: Finish hooking up bindings for IndexedDatabaseRequest
        https://bugs.webkit.org/show_bug.cgi?id=36830

        Still not enough hooked up to test.  Soon!

        * WebCore.gypi:
        * bindings/v8/custom/V8CustomIDBCallback.h: Removed.
        * bindings/v8/custom/V8CustomIDBCallbacks.h: Added.
        (WebCore::V8CustomIDBCallbacks::create):
        (WebCore::V8CustomIDBCallbacks::~V8CustomIDBCallbacks):
        (WebCore::V8CustomIDBCallbacks::onSuccess):
        (WebCore::V8CustomIDBCallbacks::onError):
        (WebCore::V8CustomIDBCallbacks::V8CustomIDBCallbacks):
        * bindings/v8/custom/V8IndexedDatabaseRequestCustom.cpp:
        (WebCore::V8IndexedDatabaseRequest::openCallback):
        * storage/IDBDatabaseRequest.cpp: Added.
        (WebCore::IDBDatabaseRequest::IDBDatabaseRequest):
        (WebCore::IDBDatabaseRequest::~IDBDatabaseRequest):
        * storage/IDBDatabaseRequest.h:
        (WebCore::IDBDatabaseRequest::create):
        * storage/IndexedDatabaseRequest.cpp:
        (WebCore::IndexedDatabaseRequest::open):
        * storage/IndexedDatabaseRequest.h:

2010-03-31  Zhenyao Mo  <zmo@google.com>

        Reviewed by Darin Fisher.

        Implement memmove behavior for WebGLArray set()
        https://bugs.webkit.org/show_bug.cgi?id=35619

        New test cases are added to fast/canvas/webgl/array-setters.html.

        * html/canvas/WebGLArray.cpp: Use memmove instead of memcpy; with memmove, copying takes place as if an intermediate buffer was used, allowing the destination and source to overlap.
        (WebCore::WebGLArray::setImpl):

2010-03-31  Benjamin Poulain  <benjamin.poulain@nokia.com>

        Reviewed by Darin Adler.

        tryLayoutDoingPositionedMovementOnly does not have to be in RenderObject or be virtual
        https://bugs.webkit.org/show_bug.cgi?id=36810

        Move tryLayoutDoingPositionedMovementOnly as a regular method of RenderBox

        * rendering/RenderBox.h:
        (WebCore::RenderBox::tryLayoutDoingPositionedMovementOnly):
        * rendering/RenderObject.h:

2010-03-31  John Gregg  <johnnyg@google.com>

        Reviewed by Darin Fisher.

        [chromium] add logging of cross-frame property accesses for site isolation
        https://bugs.webkit.org/show_bug.cgi?id=35773

        No new tests as no new functionality.

        * bindings/scripts/CodeGeneratorV8.pm:
        * bindings/v8/V8Utilities.cpp:
        (WebCore::logPropertyAccess):
        * bindings/v8/V8Utilities.h:
        * loader/FrameLoaderClient.h:
        (WebCore::FrameLoaderClient::logCrossFramePropertyAccess):

2010-03-30  Gavin Barraclough  <barraclough@apple.com>

        Rubber stamped by Sam Weinig.

        https://bugs.webkit.org/show_bug.cgi?id=36866
        Move CString to WTF

        * Android.mk:
        * ForwardingHeaders/wtf/text: Added.
        * ForwardingHeaders/wtf/text/CString.h: Added.
        * GNUmakefile.am:
        * WebCore.base.exp:
        * WebCore.gypi:
        * WebCore.order:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * accessibility/gtk/AccessibilityObjectWrapperAtk.cpp:
        * bindings/js/JSDOMWindowBase.cpp:
        * bindings/js/ScheduledAction.cpp:
        * bindings/js/ScriptController.cpp:
        * bindings/v8/ScriptController.cpp:
        * bindings/v8/V8Binding.cpp:
        * bindings/v8/V8DOMWindowShell.cpp:
        * bridge/jni/JNIBridge.cpp:
        * bridge/jni/v8/JavaStringV8.h:
        (JSC::Bindings::JavaStringImpl::init):
        * css/CSSParser.cpp:
        * dom/CharacterData.cpp:
        * dom/Document.cpp:
        * dom/Element.cpp:
        * dom/Node.cpp:
        * dom/Position.cpp:
        * dom/Range.cpp:
        * dom/Text.cpp:
        * dom/XMLTokenizer.cpp:
        * dom/XMLTokenizerLibxml2.cpp:
        * dom/XMLTokenizerQt.cpp:
        * editing/SelectionController.cpp:
        * editing/VisiblePosition.cpp:
        * editing/VisibleSelection.cpp:
        * history/CachedFrame.cpp:
        * history/HistoryItem.cpp:
        * history/qt/HistoryItemQt.cpp:
        * html/FormDataList.h:
        (WebCore::FormDataList::appendData):
        (WebCore::FormDataList::Item::Item):
        (WebCore::FormDataList::Item::data):
        * html/HTMLDocument.cpp:
        * html/PreloadScanner.cpp:
        * inspector/InspectorController.cpp:
        * inspector/InspectorDOMAgent.cpp:
        * loader/DocLoader.cpp:
        * loader/FTPDirectoryDocument.cpp:
        * loader/FrameLoader.cpp:
        * loader/HistoryController.cpp:
        * loader/ProgressTracker.cpp:
        * loader/appcache/ApplicationCacheStorage.cpp:
        * loader/archive/cf/LegacyWebArchive.cpp:
        * loader/icon/wince/IconDatabaseWince.cpp:
        * loader/loader.cpp:
        * page/Console.cpp:
        * page/DOMWindow.cpp:
        * page/SecurityOrigin.cpp:
        * page/XSSAuditor.cpp:
        * page/animation/AnimationBase.cpp:
        * platform/ContextMenu.cpp:
        * platform/FileSystem.h:
        * platform/KURL.cpp:
        * platform/KURLGoogle.cpp:
        * platform/KURLGooglePrivate.h:
        * platform/Pasteboard.h:
        * platform/android/FileSystemAndroid.cpp:
        * platform/android/TemporaryLinkStubs.cpp:
        * platform/brew/KURLBrew.cpp:
        * platform/cf/FileSystemCF.cpp:
        * platform/chromium/MIMETypeRegistryChromium.cpp:
        * platform/efl/FileSystemEfl.cpp:
        * platform/efl/PasteboardEfl.cpp:
        * platform/efl/PlatformKeyboardEventEfl.cpp:
        * platform/efl/PlatformScreenEfl.cpp:
        * platform/efl/RenderThemeEfl.cpp:
        * platform/efl/ScrollbarEfl.cpp:
        * platform/efl/SharedBufferEfl.cpp:
        * platform/efl/WidgetEfl.cpp:
        * platform/graphics/GlyphPageTreeNode.cpp:
        * platform/graphics/cairo/FontPlatformDataCairo.cpp:
        * platform/graphics/cg/ImageBufferCG.cpp:
        * platform/graphics/chromium/FontCacheLinux.cpp:
        * platform/graphics/chromium/FontPlatformDataLinux.h:
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:
        * platform/graphics/gstreamer/WebKitWebSourceGStreamer.cpp:
        * platform/graphics/gtk/FontPlatformDataPango.cpp:
        * platform/graphics/gtk/IconGtk.cpp:
        * platform/graphics/gtk/ImageGtk.cpp:
        * platform/graphics/haiku/GraphicsContextHaiku.cpp:
        * platform/graphics/mac/GraphicsContext3DMac.cpp:
        * platform/graphics/mac/GraphicsLayerCA.mm:
        * platform/graphics/qt/GraphicsContext3DQt.cpp:
        * platform/graphics/qt/ImageBufferQt.cpp:
        * platform/graphics/qt/MediaPlayerPrivatePhonon.cpp:
        * platform/graphics/qt/MediaPlayerPrivateQt.cpp:
        * platform/graphics/skia/GraphicsLayerSkia.cpp:
        * platform/graphics/win/GraphicsLayerCACF.cpp:
        * platform/graphics/win/WKCACFLayer.cpp:
        * platform/graphics/wx/FontPlatformData.h:
        * platform/gtk/ClipboardGtk.cpp:
        * platform/gtk/ContextMenuItemGtk.cpp:
        * platform/gtk/DataObjectGtk.h:
        * platform/gtk/FileChooserGtk.cpp:
        * platform/gtk/FileSystemGtk.cpp:
        * platform/gtk/GeolocationServiceGtk.cpp:
        * platform/gtk/KURLGtk.cpp:
        * platform/gtk/Language.cpp:
        * platform/gtk/LocalizedStringsGtk.cpp:
        * platform/gtk/PasteboardGtk.cpp:
        * platform/gtk/PopupMenuGtk.cpp:
        * platform/gtk/RenderThemeGtk.cpp:
        * platform/gtk/SharedBufferGtk.cpp:
        * platform/haiku/FileSystemHaiku.cpp:
        * platform/haiku/PlatformKeyboardEventHaiku.cpp:
        * platform/network/CredentialStorage.cpp:
        * platform/network/FormData.cpp:
        * platform/network/FormData.h:
        * platform/network/FormDataBuilder.cpp:
        * platform/network/FormDataBuilder.h:
        * platform/network/HTTPParsers.cpp:
        * platform/network/android/ResourceHandleAndroid.cpp:
        * platform/network/cf/FormDataStreamCFNet.cpp:
        * platform/network/cf/ResourceHandleCFNet.cpp:
        * platform/network/chromium/ResourceResponse.h:
        * platform/network/curl/FormDataStreamCurl.cpp:
        * platform/network/curl/ResourceHandleManager.cpp:
        * platform/network/curl/ResourceHandleManager.h:
        * platform/network/mac/FormDataStreamMac.mm:
        * platform/network/mac/ResourceHandleMac.mm:
        * platform/network/qt/QNetworkReplyHandler.cpp:
        * platform/network/soup/CookieJarSoup.cpp:
        * platform/network/soup/ResourceHandleSoup.cpp:
        * platform/network/soup/ResourceRequestSoup.cpp:
        * platform/network/soup/ResourceResponseSoup.cpp:
        * platform/network/win/ResourceHandleWin.cpp:
        * platform/posix/FileSystemPOSIX.cpp:
        * platform/qt/FileSystemQt.cpp:
        * platform/qt/KURLQt.cpp:
        * platform/qt/TemporaryLinkStubs.cpp:
        * platform/sql/chromium/SQLiteFileSystemChromium.cpp:
        * platform/text/CString.cpp: Removed.
        * platform/text/CString.h: Removed.
        * platform/text/PlatformString.h:
        * platform/text/String.cpp:
        * platform/text/StringImpl.cpp:
        * platform/text/TextCodec.h:
        * platform/text/TextCodecICU.cpp:
        * platform/text/TextCodecLatin1.cpp:
        * platform/text/TextCodecUTF16.cpp:
        * platform/text/TextCodecUserDefined.cpp:
        * platform/text/TextEncoding.cpp:
        * platform/text/TextEncoding.h:
        * platform/text/chromium/TextBreakIteratorInternalICUChromium.cpp:
        * platform/text/gtk/TextCodecGtk.cpp:
        * platform/text/haiku/StringHaiku.cpp:
        * platform/text/mac/TextCodecMac.cpp:
        * platform/text/qt/TextCodecQt.cpp:
        * platform/text/wx/StringWx.cpp:
        * platform/win/ClipboardUtilitiesWin.cpp:
        * platform/win/ClipboardWin.cpp:
        * platform/win/ContextMenuItemWin.cpp:
        * platform/win/ContextMenuWin.cpp:
        * platform/win/FileSystemWin.cpp:
        * platform/win/GDIObjectCounter.cpp:
        * platform/win/Language.cpp:
        * platform/win/PasteboardWin.cpp:
        * platform/wince/FileSystemWince.cpp:
        * platform/wince/KeygenWince.cpp:
        * platform/wince/PasteboardWince.cpp:
        * platform/wx/FileSystemWx.cpp:
        * platform/wx/LoggingWx.cpp:
        * plugins/PluginDebug.h:
        * plugins/PluginPackage.cpp:
        * plugins/PluginStream.cpp:
        * plugins/PluginStream.h:
        * plugins/PluginView.h:
        * plugins/gtk/PluginPackageGtk.cpp:
        * plugins/mac/PluginPackageMac.cpp:
        * plugins/qt/PluginPackageQt.cpp:
        * plugins/symbian/PluginPackageSymbian.cpp:
        * plugins/win/PluginPackageWin.cpp:
        * rendering/RenderLayer.cpp:
        * rendering/RenderLayerCompositor.cpp:
        * rendering/RenderTreeAsText.cpp:
        * storage/Database.cpp:
        * storage/SQLTransactionCoordinator.cpp:
        * storage/SQLTransactionCoordinator.h:
        * storage/StorageAreaSync.cpp:
        * storage/StorageSyncManager.cpp:
        * storage/chromium/DatabaseTrackerChromium.cpp:
        * storage/chromium/QuotaTracker.cpp:
        * storage/chromium/QuotaTracker.h:
        * svg/SVGFontFaceElement.cpp:
        * svg/SVGStyledElement.cpp:
        * svg/SVGUseElement.cpp:
        * websockets/WebSocket.cpp:
        * websockets/WebSocketChannel.cpp:
        * websockets/WebSocketHandshake.cpp:
        * wml/WMLErrorHandling.cpp:
        * wml/WMLGoElement.cpp:
        * wml/WMLPageState.cpp:
        * wml/WMLPostfieldElement.cpp:
        * wml/WMLSelectElement.cpp:
        * xml/XMLHttpRequest.cpp:
        * xml/XSLStyleSheetLibxslt.cpp:
        * xml/XSLTProcessorLibxslt.cpp:

2010-03-30  Kent Tamura  <tkent@chromium.org>

        Reviewed by Brady Eidson.

        REGRESSION (r56439) - Crash when a renderer for a file upload control
        with a selected file is recreated
        https://bugs.webkit.org/show_bug.cgi?id=36723

        RenderFileUploadControl::chooseIconForFiles was called before
        m_fileChooser was initialized.

        * platform/FileChooser.cpp:
        (WebCore::FileChooser::FileChooser): Introduce m_isInitializing flag to
          avoid FileChooserClient::repaint() call.
        (WebCore::FileChooser::loadIcon):
        (WebCore::FileChooser::iconLoaded):
        * platform/FileChooser.h: Add a FielChooser parameter to
          FileChooserClient::chooseIconForFiles().
        * rendering/RenderFileUploadControl.cpp:
        (WebCore::RenderFileUploadControl::chooseIconForFiles):
        (WebCore::RenderFileUploadControl::paintObject): Add an assertion.
        * rendering/RenderFileUploadControl.h:

2010-03-30  Stanislav Paltis  <Stanislav.Paltis@nokia.com>

        Reviewed by Laszlo Gombos.

        [Qt] qmake/symbian build failure
        https://bugs.webkit.org/show_bug.cgi?id=36745

        Fix build break in Symbian build introduced in r56714,
        by modifying comment escape character from ";" to "#".

        * WebCore.pro:

2010-03-30  Kevin Ollivier  <kevino@theolliviers.com>

        [wx] Build fix after new localized string addition.

        * platform/wx/LocalizedStringsWx.cpp:
        (WebCore::missingPluginText):

2010-03-30  Sam Weinig  <sam@webkit.org>

        Reviewed by Anders Carlsson.

        Add missing export.

        * WebCore.base.exp:

2010-03-30  Enrica Casucci  <enrica@apple.com>

        Reviewed by Darin Adler.

        Incorrect insertion position after typing THAI CHARACTER SARA AM = 0E33.
        <rdar://problem/7810749>
        https://bugs.webkit.org/show_bug.cgi?id=36858

        Test: fast/text/multiglyph-characters.html

        Characters with multiple glyph were not supported correctly.
        Computing the advance width was producing a division by zero.
        
        * platform/graphics/mac/ComplexTextController.cpp:
        (WebCore::ComplexTextController::advance):

2010-03-30  Chris Evans  <cevans@chromium.org>

        Reviewed by Adam Barth.

        Taint the canvas if an SVG-derived pattern is rendered into it.

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

        Test: fast/canvas/svg-taint.html

        * html/canvas/CanvasRenderingContext2D.cpp:
        (WebCore::CanvasRenderingContext2D::createPattern):
          Take into account the image's hasSingleSecurityOrigin() property.

2010-03-30  Alexey Proskuryakov  <ap@apple.com>

        Reviewed by Darin Adler.

        https://bugs.webkit.org/show_bug.cgi?id=36616
        Dvorak-Qwerty keyboard layout gives unexpected results in javascript keydown

        https://bugs.webkit.org/show_bug.cgi?id=36797
        For non-Roman layouts, keydown Event.keyCode is always 0

        * platform/cocoa/KeyEventCocoa.mm:
        (WebCore::windowsKeyCodeForKeyCode): This is now the primary function for determining
        Windows key code - there is no reason to round trip a virtual key code via character code to
        get Windows virtual key code, and this can't work for non-Roman alphabets.
        (WebCore::windowsKeyCodeForCharCode): Removed keys that are now handled in windowsKeyCodeForKeyCode(),
        only keeping those for which we don't have known key codes (yet?).

        * platform/mac/KeyEventMac.mm: (WebCore::windowsKeyCodeForKeyEvent): Added comments.

2010-03-30  Marcus Bulach  <bulach@chromium.org>

        Reviewed by Darin Fisher.

        Rename / tidy up Geolocation bridge
        Uses Geoposition instead of individual params for setLastPosition.
        https://bugs.webkit.org/show_bug.cgi?id=36535

        * platform/chromium/GeolocationServiceChromium.cpp:
        (WebCore::GeolocationServiceChromium::GeolocationServiceChromium):
        (WebCore::GeolocationServiceChromium::setIsAllowed):
        (WebCore::GeolocationServiceChromium::setLastPosition):
        * platform/chromium/GeolocationServiceChromium.h:

2010-03-30  Adam Langley  <agl@chromium.org>

        Reviewed by David Levin.

        [chromium] linux: prefer the "hinting" fontconfig preference.

        fontconfig can give contradictory hinting information, setting
        "hinting" to zero and "hintstyle" to non-zero. In this case we
        should take the "hinting" preference.

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

        * platform/graphics/chromium/FontPlatformDataLinux.cpp:
        (WebCore::FontPlatformData::setupPaint):

2010-03-30  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Timothy Hatcher.

        Web Inspector: Copying from the Content tab in Resources includes line numbers.

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

        * inspector/front-end/TextViewer.js:
        (WebInspector.TextViewer):
        (WebInspector.TextViewer.prototype._beforeCopy):
        (WebInspector.TextViewer.prototype._copy):

2010-03-30  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Timothy Hatcher.

        Web Inspector: Do not send empty matching rules for pseudo elements to frontend.

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

        * inspector/InspectorDOMAgent.cpp:
        (WebCore::InspectorDOMAgent::buildArrayForPseudoElements):
        * inspector/front-end/StylesSidebarPane.js:
        (WebInspector.StylesSidebarPane.prototype._update):

2010-03-30  Dirk Schulze  <krit@webkit.org>

        Reviewed by Nikolas Zimmermann.

        Cannot animate "points" attribute for <svg:polygon>
        https://bugs.webkit.org/show_bug.cgi?id=21371

        Add animation support for 'points' on polygons in SVG. 

        Test: svg/animations/animate-points.html

        * svg/SVGAnimateElement.cpp:
        (WebCore::SVGAnimateElement::determinePropertyType):
        (WebCore::SVGAnimateElement::calculateAnimatedValue):
        (WebCore::SVGAnimateElement::calculateFromAndToValues):
        (WebCore::SVGAnimateElement::resetToBaseValue):
        (WebCore::SVGAnimateElement::applyResultsToTarget):
        * svg/SVGAnimateElement.h:
        (WebCore::SVGAnimateElement::): added PropertyType PointsProperty
        * svg/SVGPointList.cpp:
        (WebCore::blendFunc):
        (WebCore::SVGPointList::createAnimated): calculates animated PointList
        * svg/SVGPointList.h:

2010-03-30  Alexander Pavlov  <apavlov@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: Audits: bad CSS selector results in exception inside evaluated code
        https://bugs.webkit.org/show_bug.cgi?id=36821

        * inspector/front-end/AuditRules.js:
        (WebInspector.AuditRules.UnusedCssRule.prototype.doRun.evalCallback.routine):
        (WebInspector.AuditRules.UnusedCssRule.prototype.doRun.evalCallback):

2010-03-29  Janne Koskinen  <janne.p.koskinen@digia.com>

        Reviewed by Simon Hausmann.

        [Qt] Package build fixes for Symbian

        * enable building standalone QtWebkit for Symbian using qtlibinfix configuration option

        qtlibinfix adds possibility having multiple versions of Qt in Symbian devices.
        Fix also allows unfrozen DLL exports during development.

        * Removed heap size configuration. DLLs don't have a heap.

        * Removed enforcement to def files for package builds. Instead inherit the setting from
        Qt's qconfig.pri whether to use def files or not. It's still possible to override this
        also at qmake time by passing CONFIG+=def_files.

        * WebCore.pro:

2010-03-30  Ilya Tikhonovsky  <loislo@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: Title for show/hide short records button was adjusted.
        Some unused code was removed.
        https://bugs.webkit.org/show_bug.cgi?id=36823

        * inspector/front-end/TimelinePanel.js:
        (WebInspector.TimelinePanel.prototype._createStatusbarButtons):
        (WebInspector.TimelinePanel.prototype._toggleFilterButtonClicked):
        (WebInspector.TimelinePanel.prototype._innerAddRecordToTimeline):

2010-03-30  Adam Roben  <aroben@apple.com>

        Enable extra Direct3D debugging information in Debug builds

        This makes it easier to track down memory leaks and misuses of the D3D
        APIs in Debug builds.

        Fixes <http://webkit.org/b/36820>

        Reviewed by John Sullivan.

        * platform/graphics/win/WKCACFLayerRenderer.cpp: Define D3D_DEBUG_INFO
        in Debug builds before #including d3d9.h so that extra D3D debugging
        information will be enabled.

2010-03-30  Luiz Agostini  <luiz.agostini@openbossa.org>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] Maemo5 theme - QtMaemoWebPopup class
        https://bugs.webkit.org/show_bug.cgi?id=36790

        Moving maemo5 theme related code from WebCore.pri to WebCore.pro and adding
        new maemo menu lists popup class source and header to the project.

        The code was in .pri file because of a theme css that was conditionally included.
        As the css file is been included unconditionally there is no need to this
        code to be kept in webcore.pri.

        * WebCore.pri:
        * WebCore.pro:

2010-03-30  Laszlo Gombos  <laszlo.1.gombos@nokia.com>

        Reviewed by David Kilzer.

        Guard Geolocation files with ENABLE_GEOLOCATION
        https://bugs.webkit.org/show_bug.cgi?id=25756

        The intent is to guard the Geolocation implementation files 
        and minimize the impact on on clients/call sites.

        * DerivedSources.make:
        * WebCore.Geolocation.exp: Added. Exported interfaces if GEOLOCATION
        is enabled.
        * WebCore.base.exp:
        * bindings/js/JSCustomPositionCallback.cpp:
        * bindings/js/JSCustomPositionErrorCallback.cpp:
        * bindings/js/JSGeolocationCustom.cpp:
        * page/Geolocation.cpp:
        (WebCore::Geolocation::disconnectFrame): Stub implementation if
        GEOLOCATION is turned off.
        (WebCore::Geolocation::Geolocation): Ditto.
        (WebCore::Geolocation::~Geolocation): Ditto.
        (WebCore::Geolocation::setIsAllowed): Ditto.
        * page/Geolocation.h: 
        * page/Geolocation.idl:
        * page/GeolocationPositionCache.cpp:
        * page/Geoposition.idl:
        * page/PositionError.idl:
        * platform/GeolocationService.cpp:
        * platform/mock/GeolocationServiceMock.cpp:

2010-03-30  Andrey Kosyakov  <caseq@chromium.org>

        Reviewed by Pavel Feldman.

        Support EventTarget interface in fake workers (both for Worker object
        and WorkerContext). Use MessagePort to implement message passing to
        support passing ports in PostMessage.
        https://bugs.webkit.org/show_bug.cgi?id=36763

        * inspector/front-end/InjectedFakeWorker.js:
        (InjectedFakeWorker.Worker.onmessageGetter):
        (InjectedFakeWorker.Worker.onmessageSetter):
        (InjectedFakeWorker.Worker):
        (InjectedFakeWorker.FakeWorker):
        (InjectedFakeWorker.FakeWorker.prototype.postMessage):
        (InjectedFakeWorker.FakeWorker.prototype.terminate):
        (InjectedFakeWorker.FakeWorker.prototype._onWorkerFrameLoaded):
        (InjectedFakeWorker.FakeWorker.prototype._setupWorkerContext.onmessageGetter):
        (InjectedFakeWorker.FakeWorker.prototype._setupWorkerContext.onmessageSetter):
        (InjectedFakeWorker.FakeWorker.prototype._setupWorkerContext):
        (InjectedFakeWorker.FakeWorker.prototype._addEventListener):
        (InjectedFakeWorker.FakeWorker.prototype._removeEventListener):
        (InjectedFakeWorker.FakeWorker.prototype._callbackWrapper):
        (InjectedFakeWorker.FakeWorker.prototype._handleException):

2010-03-30  Kristian Monsen  <kristianm@google.com>

        Reviewed by David Levin.

        [v8] Add if ENABLE guard for Worker specific code.
        https://bugs.webkit.org/show_bug.cgi?id=36597

        Build fix only, no new tests.

        * bindings/v8/V8DOMWrapper.h:

2010-03-29  Jeremy Orlow  <jorlow@chromium.org>

        Reviewed by Darin Fisher.

        More IndexedDB work
        https://bugs.webkit.org/show_bug.cgi?id=36770

        Add the "singleton" IndexedDatabase object to PageGroup
        IndexedDatabase now has a create() method since PageGroup can own the instance (at least for now)
        Rip out the IDBRequest stuff (now obsolete).
        DOMWindow now can instantiate indexedDatabase objects on demand.

        New layout tests starting with the next patch (which should make indexedDB.open() "work").

        * WebCore.gypi:
        * bindings/v8/custom/V8IDBRequestCustom.cpp: Removed.
        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::indexedDB):
        * page/DOMWindow.h:
        * page/PageGroup.cpp:
        (WebCore::PageGroup::indexedDatabase):
        * page/PageGroup.h:
        * storage/IDBDatabase.cpp:
        * storage/IDBDatabaseRequest.h:
        (WebCore::IDBDatabaseRequest::createObjectStore):
        * storage/IDBDatabaseRequest.idl:
        * storage/IDBRequest.cpp: Removed.
        * storage/IDBRequest.h: Removed.
        * storage/IDBRequest.idl: Removed.
        * storage/IndexedDatabase.cpp:
        (WebCore::IndexedDatabase::create):
        * storage/IndexedDatabase.h:
        * storage/IndexedDatabaseImpl.cpp:
        (WebCore::IndexedDatabaseImpl::create):
        (WebCore::IndexedDatabaseImpl::IndexedDatabaseImpl):
        (WebCore::IndexedDatabaseImpl::~IndexedDatabaseImpl):
        * storage/IndexedDatabaseImpl.h:
        * storage/IndexedDatabaseRequest.cpp:
        (WebCore::IndexedDatabaseRequest::IndexedDatabaseRequest):
        * storage/IndexedDatabaseRequest.h:
        (WebCore::IndexedDatabaseRequest::create):
        * storage/IndexedDatabaseRequest.idl:
        * storage/chromium/IndexedDatabase.cpp:
        (WebCore::IndexedDatabase::create):

2010-03-30  Dirk Schulze  <krit@webkit.org>

        Reviewed by Nikolas Zimmermann.

        SVG Glyph transformations wrong on use of SVGFont
        https://bugs.webkit.org/show_bug.cgi?id=36731

        Kerning on SVGFonts should be applied to the userSpace of the current Char
        and not to the userSpace of the viewport. This means scaling the kerning
        to match the current userSpace.

        Test: svg/custom/glyph-transformation-with-hkern.svg

        * rendering/SVGRootInlineBox.cpp:
        (WebCore::SVGRootInlineBox::buildLayoutInformationForTextBox):

2010-03-30  Dirk Schulze  <krit@webkit.org>

        Reviewed by Nikolas Zimmermann.

        SVG Animation doesn't respect 'currentColor'
        https://bugs.webkit.org/show_bug.cgi?id=36695

        Test: svg/custom/animation-currentColor.svg

        SVG Animation can't handle currentColor at the moment. This patch catches the
        color value of the target element and replaces 'currentColor' with it's color string.

        * svg/SVGAnimationElement.cpp:
        (WebCore::adjustForCurrentColor):
        (WebCore::SVGAnimationElement::startedActiveInterval):

2010-03-30  Ilya Tikhonovsky  <loislo@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: Visible/captured records counter should be implemented in Timeline panel.
        https://bugs.webkit.org/show_bug.cgi?id=36708

        * English.lproj/localizedStrings.js:
        * inspector/front-end/TimelinePanel.js:
        (WebInspector.TimelinePanel.prototype.get statusBarItems):
        (WebInspector.TimelinePanel.prototype._createStatusbarButtons):
        (WebInspector.TimelinePanel.prototype._updateRecordsCounter):
        (WebInspector.TimelinePanel.prototype._innerAddRecordToTimeline):
        (WebInspector.TimelinePanel.prototype._createRootRecord):
        (WebInspector.TimelinePanel.prototype._refresh):
        (WebInspector.TimelinePanel.prototype._filterRecords):
        * inspector/front-end/inspector.css:
        (.timeline-records-counter):

2010-03-30  Philippe Normand  <pnormand@igalia.com>

        [GStreamer] define static variables with DEFINE_STATIC_LOCAL macro
        https://bugs.webkit.org/show_bug.cgi?id=36653

        Unreviewed, don't define the bool variable with
        DEFINE_STATIC_LOCAL, it makes sense only for objects which have a
        destructor. Thanks to Dan Bernstein for spotting this.

        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:
        (WebCore::mimeTypeCache):

2010-03-29  Gyuyoung Kim  <gyuyoung.kim@samsung.com>

        Reviewed by Eric Seidel.

        There is a build break due to the disabled() when wml feature is
        enabled. This break comes from the Bug 35056 - Disabled menu options
        are still submitted.(https://bugs.webkit.org/show_bug.cgi?id=35056)
        The WMLOptionElement.h needs to define the disabled() as well.
        And, there is an additional break due to Bug 36177 -  Multiselect Popup
        - Listbox click simulation. (https://bugs.webkit.org/show_bug.cgi?id=36177)
        virtual void listBoxSelectItem() should be added to WMLSelectElement.h as well.

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

        * wml/WMLOptionElement.h:
        (WebCore::WMLOptionElement::disabled):
        * wml/WMLSelectElement.h:
        (WebCore::WMLSelectElement::listBoxSelectItem):

2010-03-29  Shinichiro Hamaji  <hamaji@chromium.org>

        Reviewed by David Hyatt.

        No vertical scrollbar after the CSS class change
        https://bugs.webkit.org/show_bug.cgi?id=36461

        Don't suppress scrollbar change for non-first layouts.
        In the first layout, the scrollbar change will happen in later
        adjustViewSize() call, but in other layouts, adjustViewSize() may
        not be called when the size of contents doesn't change.

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

2010-03-29  Chris Evans  <cevans@chromium.org>

        Reviewed by Adam Barth.

        Don't use unique domains for file:// separation: it breaks local
        databases, and access to your own same-origin iframes. Instead, use
        path-based access checks.

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

        Test: fast/xmlhttprequest/xmlhttprequest-no-file-access.html

        * dom/Document.cpp:
        (WebCore::Document::initSecurityContext): renamed API.
        * page/SecurityOrigin.h:
        * page/SecurityOrigin.cpp:
        (WebCore::SecurityOrigin::SecurityOrigin):
          Initialize new flag. Take note of file:// path.
          Copy new fields in copy constructor.
        (WebCore::SecurityOrigin::canAccess):
          Take into account path-based origin separation for file://
        (WebCore::SecurityOrigin::enforceFilePathSeparation):
          New method to enable file:// path origin separation.
        (WebCore::SecurityOrigin::toString):
          Return a null domain for an isolated file origin.
        (WebCore::SecurityOrigin::isSameSchemeHostPort):
          Take into account path-based origin separation for file://
        (WebCore::SecurityOrigin::passesFileCheck):
          Abstraction of common logic for file:// access checks.

2010-03-29  Rafael Weinstein  <rafaelw@chromium.org>

        Reviewed by Adam Barth.

        Change NotificationPresenter::checkPermission() to take the source frames full KURL,
        rather than its SecurityOrigin. This will aid chromium in having more fine grained
        permissions to control notification spam.

        * notifications/Notification.cpp:
        (WebCore::Notification::Notification):
        * notifications/NotificationCenter.cpp:
        (WebCore::NotificationCenter::checkPermission):
        * notifications/NotificationPresenter.h:

2010-03-29  Luiz Agostini  <luiz.agostini@openbossa.org>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] Multiselect - Adding method itemIsSelected() to QtAbstractWebPopup
        https://bugs.webkit.org/show_bug.cgi?id=36769

        Adding method itemIsSelected() to QtAbstractWebPopup.

        * platform/qt/QtAbstractWebPopup.h:
        (WebCore::QtAbstractWebPopup::itemIsSelected):

2010-03-29  Dawit Alemayehu  <adawit@kde.org>

        Reviewed by Simon Hausmann.

        Added a function, WebCore::shouldTreatAsAttachment, to HTTPParsers.*

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

        This function, which was moved from WebKit/chromium/src/FrameClientImpl.cpp,
        is used to check whether or not a request is supposed to be rendered or
        simply downloaded based on the "Content-Disposition" header sent by the
        web server. The intent of code refactoring is to avoid code duplication
        so that this piece of code can be used by other implementations such as
        QtWebKit.

        * platform/network/HTTPParsers.cpp:
        (WebCore::shouldTreatAsAttachment):
        * platform/network/HTTPParsers.h:

2010-03-29  Chris Fleizach  <cfleizach@apple.com>

        Reviewed by Beth Dakin.

        Bug 36735 - Live regions don't send out notifications when the element changing is the live region
        https://bugs.webkit.org/show_bug.cgi?id=36735

        Test: platform/mac/accessibility/aria-liveregion-on-image.html

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

2010-03-29  Stephen White  <senorblanco@chromium.org>

        Reviewed by Dave Hyatt.

        In order to speed up multiple calls to CSSPrimitiveValue::cssText(),
        this CL caches the String result.  When m_value is changed, the
        cached string is cleared.  This gives a good speedup on benchmarks
        which do a lot of CSS property gets, such as Peacekeeper.
        The processing cost should be negligible, since the strings are 
        refcounted.  The memory cost is an additional 4 bytes per
        CSSPrimitiveValue, and the extended lifetime of the computed string
        (potentially, the same as the lifetime of the CSSPrimitiveValue).

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

        Covered by fast/css/cssText-cache.html, and more.

        * css/CSSPrimitiveValue.cpp:
        (WebCore::CSSPrimitiveValue::CSSPrimitiveValue):
        (WebCore::CSSPrimitiveValue::cleanup):
        (WebCore::CSSPrimitiveValue::cssText):
        * css/CSSPrimitiveValue.h:

2010-03-22  Kenneth Rohde Christiansen  <kenneth@webkit.org>

        Reviewed by Simon Fraser.

        Add support for Widgets 1.0: View Mode Media Feature
        https://bugs.webkit.org/show_bug.cgi?id=35446

        When enabling Web Widgets, add support for the view-mode media
        feature (http://www.w3.org/TR/widgets-vmmf/).

        Test: fast/media/media-feature-wgt-view-mode.html

        * css/CSSValueKeywords.in:
        * css/MediaFeatureNames.h:
        * css/MediaQueryEvaluator.cpp:
        (WebCore::view_modeMediaFeatureEval):
        * page/ChromeClient.h:
        (WebCore::ChromeClient::isDocked):
        (WebCore::ChromeClient::isFloating):
        (WebCore::ChromeClient::isApplication):
        (WebCore::ChromeClient::isFullscreen):

2010-03-29  Kenneth Russell  <kbr@google.com>

        Reviewed by Darin Fisher.

        Eliminate use of GL_BGRA in GraphicsContext3DSkia.cpp
        https://bugs.webkit.org/show_bug.cgi?id=36737

        No new tests; ran WebGL demos in Chromium on Windows to verify fix.

        * platform/graphics/skia/GraphicsContext3DSkia.cpp:
        (WebCore::GraphicsContext3D::getImageData):

2010-03-29  Alexander Pavlov  <apavlov@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: Cover the Audits panel with tests
        https://bugs.webkit.org/show_bug.cgi?id=36613

        Sort results, add a few drive-by fixes and refactorings to improve testability.

        Test: inspector/audits-panel-functional.html

        * English.lproj/localizedStrings.js:
        * inspector/front-end/AuditResultView.js:
        (WebInspector.AuditResultView):
        (WebInspector.AuditCategoryResultPane.ruleSorter):
        (WebInspector.AuditCategoryResultPane):
        * inspector/front-end/AuditRules.js:
        (WebInspector.AuditRules.GzipRule.prototype.doRun):
        (WebInspector.AuditRules.CombineExternalResourcesRule.prototype.doRun):
        (WebInspector.AuditRules.UnusedCssRule.prototype.doRun.evalCallback.selectorsCallback):
        (WebInspector.AuditRules.ImageDimensionsRule.prototype.doRun):
        (WebInspector.AuditRules.CssInHeadRule.prototype.doRun):
        (WebInspector.AuditRules.CookieSizeRule.prototype.processCookies):
        * inspector/front-end/AuditsPanel.js:
        (WebInspector.AuditRuleResult.linkifyDisplayName):
        (WebInspector.AuditRuleResult.resourceDomain):
        (WebInspector.AuditRuleResult.prototype.addURL):
        * inspector/front-end/inspector.js:
        (WebInspector.displayNameForURL):

2010-03-29  Jocelyn Turcotte  <jocelyn.turcotte@nokia.com>

        Reviewed by nobody, build fix.

        [Qt] Fix build break introduced in r56724.

        * WebCore.pro:

2010-03-29  Alexander Pavlov  <apavlov@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector should highlight when clicking a node's closing tag
        https://bugs.webkit.org/show_bug.cgi?id=16258

        * inspector/front-end/ElementsTreeOutline.js:
        (WebInspector.ElementsTreeOutline.prototype.set suppressRevealAndSelect):
        (WebInspector.ElementsTreeOutline.prototype.revealAndSelectNode):
        (WebInspector.ElementsTreeOutline.prototype._keyDown):
        (WebInspector.ElementsTreeOutline.prototype._onmousemove):
        (WebInspector.ElementsTreeElement):
        (WebInspector.ElementsTreeElement.prototype.showChild):
        (WebInspector.ElementsTreeElement.prototype.onpopulate):
        (WebInspector.ElementsTreeElement.prototype.updateChildren):
        (WebInspector.ElementsTreeElement.prototype.insertChildElement):
        (WebInspector.ElementsTreeElement.prototype.moveChild):
        (WebInspector.ElementsTreeElement.prototype._updateChildren):
        (WebInspector.ElementsTreeElement.prototype.onexpand):
        (WebInspector.ElementsTreeElement.prototype.oncollapse):
        (WebInspector.ElementsTreeElement.prototype.onselect):
        (WebInspector.ElementsTreeElement.prototype.ondblclick):
        ():

2010-03-29  Marcus Bulach  <bulach@chromium.org>

        Reviewed by Jeremy Orlow.

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

        Remove obsolete Geolocation::m_currentPosition
        (follow up on https://bugs.webkit.org/show_bug.cgi?id=30676)

        * page/Geolocation.cpp:
        (WebCore::Geolocation::positionChanged):
        (WebCore::Geolocation::makeSuccessCallbacks):
        * page/Geolocation.h:
        * platform/chromium/GeolocationServiceChromium.cpp:
        (WebCore::GeolocationServiceChromium::GeolocationServiceChromium):

2010-03-29  Jocelyn Turcotte  <jocelyn.turcotte@nokia.com>

        Reviewed by Simon Hausmann.

        [Qt] Do not generate INSTALLS for webkit when building inside Qt.
        Qt will do this for us.

        * WebCore.pro:

2010-03-29  Antti Koivisto  <koivisto@iki.fi>

        Reviewed by Kenneth Rohde Christiansen.

        https://bugs.webkit.org/show_bug.cgi?id=36703
        Timer restart loop during page loading
        
        Fix regression introduced in http://trac.webkit.org/changeset/54526. 
        Restarting the request timer unconditionally from the timer callback is a bad idea. 
        Instead, start the timer when a non-cached request completes.

        * loader/loader.cpp:
        (WebCore::Loader::Host::nonCacheRequestComplete):
        (WebCore::Loader::Host::servePendingRequests):

2010-03-29  Thomas Zander  <t.zander@nokia.com>

        Reviewed by Simon Hausmann.

        [Qt] Shadowbuilds of WebCore with Qt on Symbian fails.

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

        Doing a 'make sis' expects the dll in the libdir, so place it
        there. This fixes out-of-source building to always put the dll
        in the expected dir.

        * WebCore.pro: Fix for shadow builds inside Qt.

2010-03-26  Kenneth Rohde Christiansen  <kenneth@webkit.org>

        Reviewed by Antti Koivisto.

        Implement flattening for iframes.

        Refactoring of frameset flattening code to reuse it for
        iframe flattening.

        Tests: fast/frames/flattening/iframe-flattening-simple.html

        * WebCore.base.exp:
        * page/FrameView.cpp:
        (WebCore::FrameView::layout):
        (WebCore::FrameView::scheduleRelayout):
        * page/Settings.cpp:
        (WebCore::Settings::Settings):
        (WebCore::Settings::setFrameFlatteningEnabled):
        * page/Settings.h:
        (WebCore::Settings::frameFlatteningEnabled):
        * rendering/RenderFrame.cpp:
        * rendering/RenderFrame.h:
        * rendering/RenderFrameSet.cpp:
        (WebCore::RenderFrameSet::flattenFrameSet):
        * rendering/RenderFrameSet.h:
        * rendering/RenderPart.cpp:
        (WebCore::RenderPart::layoutWithFlattening):
        * rendering/RenderPart.h:
        * rendering/RenderPartObject.cpp:
        (WebCore::RenderPartObject::flattenFrame):
        (WebCore::RenderPartObject::calcHeight):
        (WebCore::RenderPartObject::calcWidth):
        (WebCore::RenderPartObject::layout):
        * rendering/RenderPartObject.h:

2010-03-29  Andrei Popescu  <andreip@google.com>

        Reviewed by Adam Barth.

        Page Cache does not work on Android with V8
        https://bugs.webkit.org/show_bug.cgi?id=36665

        No new tests, existing tests should suffice, this is platform code.

        This implementation simply saves the context and the global object
        just before the frame is navigated to a new url. At restore time,
        the global object is reattached to the context and the context
        is attached to the window shell of the frame.

        Note that isolated worlds are not taken into account in any way,
        as Android does not use them.

        * bindings/v8/ScriptCachedFrameData.cpp: Added.
        (WebCore::ScriptCachedFrameData::ScriptCachedFrameData):
        (WebCore::ScriptCachedFrameData::domWindow):
        (WebCore::ScriptCachedFrameData::~ScriptCachedFrameData):
        (WebCore::ScriptCachedFrameData::restore):
        (WebCore::ScriptCachedFrameData::clear):
        * bindings/v8/ScriptCachedFrameData.h:
        * bindings/v8/V8DOMWindowShell.cpp:
        (WebCore::V8DOMWindowShell::setContext):
        * bindings/v8/V8DOMWindowShell.h:

2010-03-29  Thomas Zander  <t.zander@nokia.com>

        Reviewed by Simon Hausmann.

        [Qt] Make it possible to build using both Windows and Linux for Symbian
        https://bugs.webkit.org/show_bug.cgi?id=36748

        * WebCore.pro: don't assume Windows buildsystem is the only one
        and exclude the windows-only setters from the linux builds.

2010-03-29  Thomas Zander  <t.zander@nokia.com>

        Reviewed by Simon Hausmann.

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

        [Qt] Fix def file builds with Qt 4.7.

        Switched to using DEF_FILE, which is the official variable.

        * WebCore.pro: Use DEF_FILE

2010-03-24  Jeremy Orlow  <jorlow@chromium.org>

        Reviewed by Darin Fisher.

        A few more steps towards IndexedDB
        https://bugs.webkit.org/show_bug.cgi?id=36546

        Add a callback interface to be used by all async methods.
        Add the first fragments of IDBDatabase.
        Clean up on IDBDatabaseError.
        Flesh out IndexedDatabase further.

        Not enough hooked up yet to test.  Soon though...

        * WebCore.gypi:
        * storage/IDBCallbacks.h: Added.
        (WebCore::IDBCallbacks::~IDBCallbacks):
        * storage/IDBDatabase.cpp: Added.
        * storage/IDBDatabase.h: Added.
        (WebCore::IDBDatabase::~IDBDatabase):
        * storage/IDBDatabaseError.h:
        (WebCore::IDBDatabaseError::create):
        (WebCore::IDBDatabaseError::message):
        (WebCore::IDBDatabaseError::IDBDatabaseError):
        * storage/IndexedDatabase.h:
        * storage/IndexedDatabaseImpl.cpp:
        (WebCore::IndexedDatabaseImpl::IndexedDatabaseImpl):
        (WebCore::IndexedDatabaseImpl::~IndexedDatabaseImpl):
        (WebCore::IndexedDatabaseImpl::open):
        * storage/IndexedDatabaseImpl.h:
        * storage/IndexedDatabaseRequest.cpp:
        (WebCore::IndexedDatabaseRequest::open):

2010-03-29  Mikhail Naganov  <mnaganov@chromium.org>

        Reviewed by Pavel Feldman.

        Remove a possibility of confusion from Profiles panel Welcome screen
        by turning buttons into non-clickable glyphs. Also, span instructions
        alongside panel width.

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

        * English.lproj/localizedStrings.js:
        * inspector/front-end/ProfileView.js:
        (WebInspector.CPUProfileType.prototype.get welcomeMessage):
        * inspector/front-end/ProfilesPanel.js:
        (WebInspector.ProfilesPanel.prototype._addWelcomeMessage):
        * inspector/front-end/inspector.css:
        (.panel-enabler-view.welcome .instructions):
        (.panel-enabler-view.welcome button.status-bar-item):

2010-03-26  Philippe Normand  <pnormand@igalia.com>

        Reviewed by Eric Seidel.

        [GStreamer] define static variables with DEFINE_STATIC_LOCAL macro
        https://bugs.webkit.org/show_bug.cgi?id=36653

        Defined the static variables using DEFINE_STATIC_GLOBAL.

        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:
        (WebCore::mimeTypeCache):

2010-03-26  Philippe Normand  <pnormand@igalia.com>

        Reviewed by Eric Seidel.

        [GStreamer] player header cleanups
        https://bugs.webkit.org/show_bug.cgi?id=36656

        Destructor made private and added missing
        mediaPlayerPrivateMuteChangedCallback declaration.

        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.h:

2010-03-29  Yury Semikhatsky  <yurys@chromium.org>

        Reviewed by Pavel Feldman.

        Protect global object from being GC'ed if there are messages written to console from the iframe with that global object.

        Whent serializing objects in the injected script check that global object properties are still defined before using them as arguments. The may become undefined if owning frame navigated to a different domain.

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

        Test: http/tests/inspector-enabled/console-log-before-frame-navigation.html

        * bindings/js/ScriptState.h:
        (WebCore::ScriptStateProtectedPtr::ScriptStateProtectedPtr):
        (WebCore::ScriptStateProtectedPtr::get):
        * bindings/v8/ScriptState.h:
        (WebCore::ScriptStateProtectedPtr::ScriptStateProtectedPtr):
        (WebCore::ScriptStateProtectedPtr::~ScriptStateProtectedPtr):
        (WebCore::ScriptStateProtectedPtr::get):
        * inspector/ConsoleMessage.cpp:
        (WebCore::ConsoleMessage::addToFrontend):
        * inspector/ConsoleMessage.h:
        * inspector/front-end/InjectedScript.js:
        (injectedScriptConstructor):
        (injectedScriptConstructor.):

2010-03-26  Philippe Normand  <pnormand@igalia.com>

        Reviewed by Eric Carlson.

        It should be possible to use GStreamer in addition to another media engine
        https://bugs.webkit.org/show_bug.cgi?id=36654

        Renamed gstreamer player and added a WTF_USE_GSTREAMER
        define. Made the MediaPlayer register the GStreamer backend only
        if it's enabled (true by default on WebKitGTK+).

        * GNUmakefile.am:
        * platform/graphics/MediaPlayer.cpp:
        (WebCore::installedMediaEngines):
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:
        (WebCore::mediaPlayerPrivateMessageCallback):
        (WebCore::mediaPlayerPrivateSourceChangedCallback):
        (WebCore::mediaPlayerPrivateVolumeChangedCallback):
        (WebCore::mediaPlayerPrivateMuteChangedCallback):
        (WebCore::mediaPlayerPrivateRepaintCallback):
        (WebCore::MediaPlayerPrivateGStreamer::create):
        (WebCore::MediaPlayerPrivateGStreamer::registerMediaEngine):
        (WebCore::MediaPlayerPrivateGStreamer::isAvailable):
        (WebCore::MediaPlayerPrivateGStreamer::MediaPlayerPrivateGStreamer):
        (WebCore::MediaPlayerPrivateGStreamer::~MediaPlayerPrivateGStreamer):
        (WebCore::MediaPlayerPrivateGStreamer::load):
        (WebCore::MediaPlayerPrivateGStreamer::commitLoad):
        (WebCore::MediaPlayerPrivateGStreamer::changePipelineState):
        (WebCore::MediaPlayerPrivateGStreamer::prepareToPlay):
        (WebCore::MediaPlayerPrivateGStreamer::play):
        (WebCore::MediaPlayerPrivateGStreamer::pause):
        (WebCore::MediaPlayerPrivateGStreamer::duration):
        (WebCore::MediaPlayerPrivateGStreamer::currentTime):
        (WebCore::MediaPlayerPrivateGStreamer::seek):
        (WebCore::MediaPlayerPrivateGStreamer::startEndPointTimerIfNeeded):
        (WebCore::MediaPlayerPrivateGStreamer::cancelSeek):
        (WebCore::MediaPlayerPrivateGStreamer::endPointTimerFired):
        (WebCore::MediaPlayerPrivateGStreamer::paused):
        (WebCore::MediaPlayerPrivateGStreamer::seeking):
        (WebCore::MediaPlayerPrivateGStreamer::naturalSize):
        (WebCore::MediaPlayerPrivateGStreamer::hasVideo):
        (WebCore::MediaPlayerPrivateGStreamer::hasAudio):
        (WebCore::MediaPlayerPrivateGStreamer::setVolume):
        (WebCore::MediaPlayerPrivateGStreamer::volumeChangedTimerFired):
        (WebCore::MediaPlayerPrivateGStreamer::volumeChanged):
        (WebCore::MediaPlayerPrivateGStreamer::setRate):
        (WebCore::MediaPlayerPrivateGStreamer::networkState):
        (WebCore::MediaPlayerPrivateGStreamer::readyState):
        (WebCore::MediaPlayerPrivateGStreamer::buffered):
        (WebCore::MediaPlayerPrivateGStreamer::processBufferingStats):
        (WebCore::MediaPlayerPrivateGStreamer::fillTimerFired):
        (WebCore::MediaPlayerPrivateGStreamer::maxTimeSeekable):
        (WebCore::MediaPlayerPrivateGStreamer::maxTimeLoaded):
        (WebCore::MediaPlayerPrivateGStreamer::bytesLoaded):
        (WebCore::MediaPlayerPrivateGStreamer::totalBytes):
        (WebCore::MediaPlayerPrivateGStreamer::cancelLoad):
        (WebCore::MediaPlayerPrivateGStreamer::updateStates):
        (WebCore::MediaPlayerPrivateGStreamer::mediaLocationChanged):
        (WebCore::MediaPlayerPrivateGStreamer::loadNextLocation):
        (WebCore::MediaPlayerPrivateGStreamer::loadStateChanged):
        (WebCore::MediaPlayerPrivateGStreamer::sizeChanged):
        (WebCore::MediaPlayerPrivateGStreamer::timeChanged):
        (WebCore::MediaPlayerPrivateGStreamer::didEnd):
        (WebCore::MediaPlayerPrivateGStreamer::durationChanged):
        (WebCore::MediaPlayerPrivateGStreamer::supportsMuting):
        (WebCore::MediaPlayerPrivateGStreamer::setMuted):
        (WebCore::MediaPlayerPrivateGStreamer::muteChangedTimerFired):
        (WebCore::MediaPlayerPrivateGStreamer::muteChanged):
        (WebCore::MediaPlayerPrivateGStreamer::loadingFailed):
        (WebCore::MediaPlayerPrivateGStreamer::setSize):
        (WebCore::MediaPlayerPrivateGStreamer::setVisible):
        (WebCore::MediaPlayerPrivateGStreamer::repaint):
        (WebCore::MediaPlayerPrivateGStreamer::paint):
        (WebCore::MediaPlayerPrivateGStreamer::getSupportedTypes):
        (WebCore::MediaPlayerPrivateGStreamer::supportsType):
        (WebCore::MediaPlayerPrivateGStreamer::hasSingleSecurityOrigin):
        (WebCore::MediaPlayerPrivateGStreamer::supportsFullscreen):
        (WebCore::MediaPlayerPrivateGStreamer::setPreload):
        (WebCore::MediaPlayerPrivateGStreamer::createGSTPlayBin):
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.h:

2010-03-28  Alexey Proskuryakov  <ap@apple.com>

        Reviewed by Sam Weinig.

        https://bugs.webkit.org/show_bug.cgi?id=36733
        Use a common header for Windows virtual key codes on all platforms

        No change in functionality, so no new tests.

        * platform/WindowsKeyboardCodes.h: Added. Define VK_* key codes as macros, matching Windows.

        * platform/KeyboardCodes.h: Removed.
        * platform/android/KeyboardCodes.h: Removed.
        * platform/chromium/KeyboardCodesPosix.h: Removed.
        * platform/chromium/KeyboardCodesWin.h: Removed.
        * platform/haiku/KeyboardCodes.h: Removed.
        * platform/wx/KeyboardCodes.h: Removed.
        Removed platform specific attempts to do the same thing. In fact, platform/KeyboardCodes.h
        was supposed to be cross-platform, but it didn't have a sufficiently descriptive name, and
        its name was the same as platform-specific versions, so I chose a new one.

        * platform/chromium/KeyboardCodes.h: Copied from WebCore/platform/chromium/KeyboardCodesWin.h.
        Chromium redefines Windows constants to different names; keeping the header doing that to
        avoid breaking Chromium code.

        * GNUmakefile.am:
        * WebCore.gypi:
        Replaced KeyboardCodes.h with WindowsKeyboardCodes.h.

        * WebCore.xcodeproj/project.pbxproj:
        * platform/cocoa/KeyEventCocoa.mm:
        (WebCore::windowsKeyCodeForKeyCode):
        (WebCore::windowsKeyCodeForCharCode):
        Mac used to hardcode the key codes; changed to use VK_* macros.

        * config.h: Removed a hack to include KeyboardCodes.h, it shouldn't be necessary any more.

        * platform/android/KeyEventAndroid.cpp:
        * platform/brew/PlatformKeyboardEventBrew.cpp:
        * platform/efl/PlatformKeyboardEventEfl.cpp:
        * platform/gtk/KeyEventGtk.cpp:
        * platform/haiku/PlatformKeyboardEventHaiku.cpp:
        * platform/qt/PlatformKeyboardEventQt.cpp:
        * platform/wx/KeyboardEventWx.cpp:
        Changed to include WindowsKeyboardCodes.h.

2010-03-28  Laszlo Gombos  <laszlo.1.gombos@nokia.com>

        Reviewed by Simon Hausmann.

        [Qt] Remove the definition of WTF_CHANGES guards from the build system
        https://bugs.webkit.org/show_bug.cgi?id=31670

        No new tests as there is no new functionality.

        * WebCore.pri: Remove the definition of WTF_CHANGES
        as it is already defined in config.h

2010-03-28  Sam Weinig  <sam@webkit.org>

        Reviewed by Dan Bernstein.

        Clean up the Xcode project a bit.

        * WebCore.xcodeproj/project.pbxproj:

2010-03-28  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Timothy Hatcher.

        Web Inspector: Toggling style properties on/off does not always work.

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

        * inspector/InspectorController.cpp:
        * inspector/InspectorDOMAgent.cpp:
        (WebCore::InspectorDOMAgent::toggleStyleEnabled):
        (WebCore::InspectorDOMAgent::buildObjectForStyle):
        (WebCore::InspectorDOMAgent::buildArrayForDisabledStyleProperties):
        * inspector/InspectorDOMAgent.h:
        * inspector/front-end/DOMAgent.js:
        (WebInspector.CSSStyleDeclaration):

2010-03-28  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Timothy Hatcher.

        Web Inspector: resource links should navigate to resource panel enabler when resource tracking is off.

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

        * English.lproj/localizedStrings.js:
        * inspector/front-end/inspector.js:
        (WebInspector.documentMouseOver):
        (WebInspector.documentClick.followLink):
        (WebInspector.documentClick):

2010-03-28  Dirk Schulze  <krit@webkit.org>

        Unreviewed build-fix for chromium linux.

        SVGResourceMarker needs to be moved to RenderersSVGResourceMarker
        https://bugs.webkit.org/show_bug.cgi?id=36185

        * svg/SVGStyledElement.cpp:
        (WebCore::SVGStyledElement::invalidateResources):

2010-03-28  Dirk Schulze  <krit@webkit.org>

        Reviewed by Nikolas Zimmermann.

        SVGResourceMarker needs to be moved to RenderersSVGResourceMarker
        https://bugs.webkit.org/show_bug.cgi?id=36185

        This moves SVGResourceMarker to RenderersSVGResourceMarker. This follows other
        SVG resources like masker and clipper and makes DRT results more readable and
        adds additonal informations.
        Some marker specific code also moved out from RenderSVGViewportContainer to 
        RenderersSVGResourceMarker.

        * Android.mk:
        * GNUmakefile.am:
        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * rendering/RenderPath.cpp:
        (WebCore::RenderPath::calculateMarkerBoundsIfNeeded):
        * rendering/RenderSVGImage.cpp:
        (WebCore::RenderSVGImage::destroy):
        * rendering/RenderSVGResource.h:
        (WebCore::):
        * rendering/RenderSVGResourceMarker.cpp: Added.
        (WebCore::RenderSVGResourceMarker::RenderSVGResourceMarker):
        (WebCore::RenderSVGResourceMarker::~RenderSVGResourceMarker):
        (WebCore::RenderSVGResourceMarker::layout):
        (WebCore::RenderSVGResourceMarker::addClient):
        (WebCore::RenderSVGResourceMarker::invalidateClients):
        (WebCore::RenderSVGResourceMarker::invalidateClient):
        (WebCore::RenderSVGResourceMarker::applyViewportClip):
        (WebCore::RenderSVGResourceMarker::markerBoundaries):
        (WebCore::RenderSVGResourceMarker::localToParentTransform):
        (WebCore::RenderSVGResourceMarker::referencePoint):
        (WebCore::RenderSVGResourceMarker::angle):
        (WebCore::RenderSVGResourceMarker::markerTransformation):
        (WebCore::RenderSVGResourceMarker::draw):
        (WebCore::RenderSVGResourceMarker::markerContentTransformation):
        (WebCore::RenderSVGResourceMarker::viewportTransform):
        (WebCore::RenderSVGResourceMarker::calcViewport):
        * rendering/RenderSVGResourceMarker.h: Added.
        (WebCore::RenderSVGResourceMarker::renderName):
        (WebCore::RenderSVGResourceMarker::applyResource):
        (WebCore::RenderSVGResourceMarker::resourceBoundingBox):
        (WebCore::RenderSVGResourceMarker::markerUnits):
        (WebCore::RenderSVGResourceMarker::resourceType):
        * rendering/RenderSVGViewportContainer.cpp:
        (WebCore::RenderSVGViewportContainer::calcViewport):
        (WebCore::RenderSVGViewportContainer::viewportTransform):
        * rendering/RenderSVGViewportContainer.h:
        * rendering/SVGMarkerData.h:
        (WebCore::SVGMarkerData::SVGMarkerData):
        (WebCore::SVGMarkerData::marker):
        (WebCore::SVGMarkerData::updateTypeAndMarker):
        * rendering/SVGMarkerLayoutInfo.cpp:
        (WebCore::processStartAndMidMarkers):
        (WebCore::SVGMarkerLayoutInfo::calculateBoundaries):
        (WebCore::SVGMarkerLayoutInfo::addLayoutedMarker):
        * rendering/SVGMarkerLayoutInfo.h:
        (WebCore::MarkerLayout::MarkerLayout):
        (WebCore::SVGMarkerLayoutInfo::midMarker):
        * rendering/SVGRenderSupport.cpp:
        (WebCore::deregisterFromResources):
        * rendering/SVGRenderSupport.h:
        * rendering/SVGRenderTreeAsText.cpp:
        (WebCore::operator<<):
        (WebCore::writeSVGResource):
        * svg/SVGMarkerElement.cpp:
        (WebCore::SVGMarkerElement::svgAttributeChanged):
        (WebCore::SVGMarkerElement::childrenChanged):
        (WebCore::SVGMarkerElement::setOrientToAuto):
        (WebCore::SVGMarkerElement::setOrientToAngle):
        (WebCore::SVGMarkerElement::createRenderer):
        * svg/SVGMarkerElement.h:
        (WebCore::SVGMarkerElement::):
        * svg/SVGStyledElement.cpp:
        (WebCore::SVGStyledElement::invalidateResources):
        * svg/graphics/SVGResource.h:
        (WebCore::):
        (WebCore::SVGResource::isFilter):
        * svg/graphics/SVGResourceMarker.cpp: Removed.
        * svg/graphics/SVGResourceMarker.h: Removed.

2010-03-28  Joseph Pecoraro  <joepeck@webkit.org>

        Reviewed by Pavel Feldman.

        Web Inspector: Consolidate Tree Hierarchy Attribute HTML Generation
        https://bugs.webkit.org/show_bug.cgi?id=36719

          Consolidates the generation of Element Tree Hierarchy attribute code
          generation to a single function: _attributeHTML.

        * inspector/front-end/ElementsTreeOutline.js:
        (WebInspector.ElementsTreeElement.prototype._addNewAttribute): convert to use attributeHTML.
        (WebInspector.ElementsTreeElement.prototype._attributeEditingCommitted.regenerateStyledAttribute): convert to use attributeHTML.
        (WebInspector.ElementsTreeElement.prototype._attributeEditingCommitted):
        (WebInspector.ElementsTreeElement.prototype._attributeHTML): a single point for generating the html for attributes.

2010-03-28  Joseph Pecoraro  <joepeck@webkit.org>

        Reviewed by Pavel Feldman.

        Web Inspector: Edit Tag Names
        https://bugs.webkit.org/show_bug.cgi?id=36481

          Ensure blacklisting happens by checking it in _startEditingTagName
          instead of all the possible entry points.

        * inspector/front-end/ElementsTreeOutline.js:
        (WebInspector.ElementsTreeElement.prototype._startEditingFromEvent): don't check blacklist here.
        (WebInspector.ElementsTreeElement.prototype._startEditingTagName): check blacklist here.

2010-03-28  Kim Grönholm  <kim.gronholm@nomovok.com>

        Reviewed by Simon Hausmann.

        [Qt] GraphicsLayer: Timing functions don't work with transitions
        https://bugs.webkit.org/show_bug.cgi?id=36589

        If the animation value doesn't have timing function set, we need to
        use the animation's timing function.
        
        Fixed also a bug in passing the duration to solveCubicBezierFunction.
        The duration was divided two times by 1000 and meanwhile casted to int.
        It needs to be kept as double and divided by 1000 only once.

        Test case: https://bugs.webkit.org/attachment.cgi?id=51619

        * platform/graphics/qt/GraphicsLayerQt.cpp:
        (WebCore::applyTimingFunction):
        (WebCore::AnimationQt:::AnimationQtBase):
        (WebCore::AnimationQt::updateCurrentTime):

2010-03-27  Joseph Pecoraro  <joepeck@webkit.org>

        Reviewed by Pavel Feldman.

        Web Inspector: Edit Tag Names
        https://bugs.webkit.org/show_bug.cgi?id=36481

        Allow tabbing back and forth between the tag name and element
        attributes when editing. Also, fixed a number of minor issues with
        editing attributes and tabbing.

        * inspector/front-end/ElementsTreeOutline.js:
        (WebInspector.ElementsTreeElement.prototype._startEditingTagName): find the tag name if it wasn't provided.
        (WebInspector.ElementsTreeElement.prototype._attributeEditingCommitted): fix tabbing issues, enable tab to tag name.
        (WebInspector.ElementsTreeElement.prototype._attributeEditingCommitted.regenerateStyledAttribute): cleanup styles when tabbing.
        * inspector/front-end/inspector.css: do not display <br>s while editing

2010-03-27  Joseph Pecoraro  <joepeck@webkit.org>

        Reviewed by Pavel Feldman.

        Web Inspector: Edit Tag Names
        https://bugs.webkit.org/show_bug.cgi?id=36481
        
        Allow editing an Element's Tag Name by double clicking
        on the tag name in the Element's Tree Hierarchy.
        
          The usual asynchronous InspectorBackend, InspectorDOMAgent, InspectorFrontend flow.

        * inspector/InspectorBackend.cpp: moved DOM manipulation to InspectorDOMAgent
        (WebCore::InspectorBackend::removeNode):
        (WebCore::InspectorBackend::changeTagName):
        * inspector/InspectorBackend.h:
        * inspector/InspectorBackend.idl:
        * inspector/InspectorDOMAgent.cpp:
        (WebCore::InspectorDOMAgent::removeNode):
        (WebCore::InspectorDOMAgent::changeTagName):
        * inspector/InspectorDOMAgent.h:
        * inspector/InspectorFrontend.cpp:
        (WebCore::InspectorFrontend::didChangeTagName):
        * inspector/InspectorFrontend.h:

        * inspector/front-end/DOMAgent.js:

          Handle the UI for editing an Element's tag name.

        * inspector/front-end/ElementsTreeOutline.js:
        (WebInspector.ElementsTreeElement.prototype._startEditingFromEvent): allow editing from double click.
        (WebInspector.ElementsTreeElement.prototype._startEditingTagName.keyupListener): update the closing tag
        (WebInspector.ElementsTreeElement.prototype._startEditingTagName.editingComitted): remove extra listener and commit
        (WebInspector.ElementsTreeElement.prototype._startEditingTagName.editingCancelled): remove extra listener and cancel
        (WebInspector.ElementsTreeElement.prototype._startEditingTagName):
        (WebInspector.ElementsTreeElement.prototype._tagNameEditingCommitted.cancel):
        (WebInspector.ElementsTreeElement.prototype._tagNameEditingCommitted.moveToNextAttributeIfNeeded):
        (WebInspector.ElementsTreeElement.prototype._tagNameEditingCommitted.editTagNameCallback):
        (WebInspector.ElementsTreeElement.prototype._tagNameEditingCommitted):
        (WebInspector.ElementsTreeElement.prototype._distinctClosingTagElement): get the closing tag for an opening tag
        (WebInspector.ElementsTreeElement.prototype._nodeTitleInfo): wrap the tagName in span.webkit-html-tag-name

          Miscellaneous updates.

        * inspector/front-end/treeoutline.js: fixed a typo.

2010-03-27  Dmitry Gorbik  <socket.h@gmail.com>

        Reviewed by Pavel Feldman.

        Fix the regression caused by r28078: a global variable
        definition masks a local one in an inspector console
        https://bugs.webkit.org/show_bug.cgi?id=32442

        * inspector/front-end/InjectedScript.js:
        (injectedScriptConstructor):

2010-03-27  Dan Bernstein  <mitz@apple.com>

        Reviewed by Darin Adler.

        <rdar://problem/7801598> REGRESSION (r56182): iWeb shadow drawn around image rectangle, not around opaque part of the image
        https://bugs.webkit.org/show_bug.cgi?id=36700

        * css/CSSPrimitiveValue.cpp:
        (WebCore::CSSPrimitiveValue::createColor): Reverted to returning an RGB color value rather than an
        identifier for the transparent color.

2010-03-26  Joseph Pecoraro  <joepeck@webkit.org>

        Reviewed by Pavel Feldman.

        Web Inspector: Converge Inspector ids to be long, not ints
        https://bugs.webkit.org/show_bug.cgi?id=36706

          Part 1: Converge on `long` for callIds, nodeIds, and other Ids.

        * inspector/InspectorController.cpp:
        * inspector/InspectorController.h:
        * inspector/InspectorDOMAgent.cpp:
        * inspector/InspectorFrontend.cpp:
        * inspector/InspectorFrontend.h:

2010-03-27  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Timothy Hatcher.

        Web Inspector: add layout test for styles panel.

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

        Test: inspector/elements-panel-styles.html

        * inspector/front-end/inspector.css:
        (#elements-content):
        (#elements-sidebar):
        * inspector/front-end/inspector.js:
        (WebInspector.displayNameForURL):
        * inspector/front-end/utilities.js:
        (String.prototype.trimURL):

2010-03-27  Mark Rowe  <mrowe@apple.com>

        Reviewed by Darin Adler.

        CSSPrimitiveValue::setFloatValue/setStringValue should throw an exception if passed an incorrect unit type.
        <http://webkit.org/b/36680> / <rdar://problem/7801016>

        Test: fast/dom/setPrimitiveValue-exceptions.html

        * css/CSSPrimitiveValue.cpp:
        (WebCore::CSSPrimitiveValue::setFloatValue): Throw an INVALID_ACCESS_ERR if either of our type or the passed-in
        type is not a numeric type.
        (WebCore::CSSPrimitiveValue::setStringValue): Throw an INVALID_ACCESS_ERR if either of our type or the passed-in
        type is not a string type.

2010-03-27  Robert Hogan  <robert@webkit.org>

        Reviewed by nobody, fix typo in previous commit.

        Allow plugins implemented by the application, such as mimetype 'x-qt-plugin',
         when pluginsEnabled is false

        Fix parentheses typo in r56661. This happened while rebasing and was not present
        in the reviewed patch, so committing unreviewed.

        https://bugs.webkit.org/attachment.cgi?id=49515

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::requestObject):

2010-03-26  Robert Hogan  <robert@roberthogan.net>

        Reviewed by Simon Hausmann.

        Allow plugins implemented by the application, such as mimetype 'x-qt-plugin',
         when pluginsEnabled is false.

        The purpose of disabling plugins is to prevent the execution of third-party code
        that may be untrustworthy. Qt plugins are implemented by the client rather than
        loaded from an external source, so the client should have the opportunity to
        consider them separately from other plugins.

        Add a function MimeTypeRegistry::isApplicationPluginMIMEType() that WebKit
        uses in conjunction with arePluginsEnabled() to determine if it should attempt
        to load a plugin. If isApplicationPluginMIMEType() returns true, WebKit will load
        the plugin even if arePluginsEnabled() is false.

        Currently, only Qt has application-implemented plugins: these use the mimetype
        'x-qt-plugin' and 'x-qt-styled-widget'. This patch permits Qt clients'
        reimplementation of QWebPage::createPlugin() to decide whether or not
        to create a Qt plugin, even when arePluginsEnabled is false.

        For all platforms apart from Qt, isApplicationPluginMIMEType() returns false.

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

        Test: plugins/application-plugin-plugins-disabled.html

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::requestObject):
        * platform/MIMETypeRegistry.h:
        * platform/brew/MIMETypeRegistryBrew.cpp:
        (WebCore::MIMETypeRegistry::isApplicationPluginMIMEType):
        * platform/chromium/MIMETypeRegistryChromium.cpp:
        (WebCore::MIMETypeRegistry::isApplicationPluginMIMEType):
        * platform/gtk/MIMETypeRegistryGtk.cpp:
        (WebCore::MIMETypeRegistry::isApplicationPluginMIMEType):
        * platform/haiku/MIMETypeRegistryHaiku.cpp:
        (WebCore::MIMETypeRegistry::isApplicationPluginMIMEType):
        * platform/mac/MIMETypeRegistryMac.mm:
        (WebCore::MIMETypeRegistry::isApplicationPluginMIMEType):
        * platform/qt/MIMETypeRegistryQt.cpp:
        (WebCore::MIMETypeRegistry::isApplicationPluginMIMEType):
        * platform/win/MIMETypeRegistryWin.cpp:
        (WebCore::MIMETypeRegistry::isApplicationPluginMIMEType):
        * platform/wince/MIMETypeRegistryWince.cpp:
        (WebCore::MIMETypeRegistry::isApplicationPluginMIMEType):
        * platform/wx/MimeTypeRegistryWx.cpp:
        (WebCore::MIMETypeRegistry::isApplicationPluginMIMEType):

2010-03-27  Dan Bernstein  <mitz@apple.com>

        Reviewed by Mark Rowe.

        Fix Acid3 text-shadow rendering regression introduced in r56597.

        * platform/graphics/mac/FontMac.mm:
        (WebCore::Font::drawGlyphs): Revert to using the simple shadow logic for zero-blur shadows,
        except for color bitmap fonts.

2010-03-26  Daniel Bates  <dbates@rim.com>

        Reviewed by Beth Dakin.

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

        As per sections 14.2 (http://www.w3.org/TR/CSS2/colors.html#background)
        and 17.5.1 (http://www.w3.org/TR/CSS2/tables.html#table-layers) of the
        CSS 2.1 spec., the background-image of a table-row should span the
        entire area of the table-row (i.e cover all the <td>'s). Moreover,
        fixes background image painting with respect to row-groups, columns
        and column-groups (*).

        Currently, the background-image of a table row, row-group, and column-group
        is inherited by the table cells. This directly contradicts section 14.2.
        Instead, the background-image should cover the entire area of the table row,
        row-group, column, or column-group, respectively as described in section 17.5.1.

        (*) A follow up patch to compute the absolute content box of a column, and
        column-group is needed so that background image positioning for these table
        elements works. See bug #36104.

        Tests: fast/table/table-background.html
               fast/table/table-cell-border-draws-on-top-of-col-background.html
               fast/table/table-cell-border-draws-on-top-of-col-group-background.html
               fast/table/table-cell-border-draws-on-top-of-row-background.html
               fast/table/table-cell-border-draws-on-top-of-row-group-background.html
               fast/table/table-cell-overrides-row-background.html
               fast/table/table-col-background.html
               fast/table/table-col-group-background.html
               fast/table/table-col-group-col-span-background.html
               fast/table/table-col-group-span-background.html
               fast/table/table-col-span-background.html
               fast/table/table-row-background-left-50px.html
               fast/table/table-row-background-right-100percent.html
               fast/table/table-row-background-right-50px.html
               fast/table/table-row-background.html
               fast/table/table-row-group-background-positioned.html
               fast/table/table-row-group-background.html

        * rendering/RenderBoxModelObject.cpp:
        (WebCore::RenderBoxModelObject::paintFillLayerExtended):
        (WebCore::RenderBoxModelObject::calculateBackgroundImageGeometry): Modified
        to call RenderObject::adjustBackgroundImagePosition.
        * rendering/RenderBoxModelObject.h:
        * rendering/RenderObject.h:
        (WebCore::RenderObject::adjustBackgroundImagePosition): Added.
        * rendering/RenderTableCell.cpp:
        (WebCore::RenderTableCell::adjustBackgroundImagePosition): Added.
        * rendering/RenderTableCell.h:

2010-03-26  Laszlo Gombos  <laszlo.1.gombos@nokia.com>

        Unreviewed, minor build fix.

        [Gtk] Guard defined but not used function
        
        Eliminate the "defined but not used" warning after r52684.
        No new tests as there is no new functionality.

        * platform/ContextMenu.cpp:

2010-03-26  Justin Schuh  <jschuh@chromium.org>

        Reviewed by Adam Barth.

        Security: iFrame.src accepts JavaScript URL via nodeValue or textContent
        https://bugs.webkit.org/show_bug.cgi?id=36502

        Overrode inherited nodeValue and textContent in Attr.idl so they proxy 
        to value, which performs a security check.

        Test: http/tests/security/xss-DENIED-iframe-src-alias.html

        * bindings/js/JSAttrCustom.cpp:
        (WebCore::JSAttr::nodeValue):
        (WebCore::JSAttr::setNodeValue):
        (WebCore::JSAttr::textContent):
        (WebCore::JSAttr::setTextContent):
        * bindings/v8/custom/V8AttrCustom.cpp:
        (WebCore::V8Attr::nodeValueAccessorSetter):
        (WebCore::V8Attr::nodeValueAccessorGetter):
        (WebCore::V8Attr::textContentAccessorSetter):
        (WebCore::V8Attr::textContentAccessorGetter):
        * dom/Attr.idl:

2010-03-26  Eric Carlson  <eric.carlson@apple.com>

        <rdar://problem/7320584> 
        https://bugs.webkit.org/show_bug.cgi?id=36681
        "new Audio()" doesn't work with plug-in backed media engine.

        Don't require plug-in backed <video> and <audio> elements to be in the document to play.

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::HTMLMediaElement): Initialize m_proxyWidget
        (WebCore::HTMLMediaElement::createRenderer): Set renderer widget if it has already been
        allocated.
        (WebCore::HTMLMediaElement::scheduleLoad): Call createMediaPlayerProxy to make sure we
        have a plug-in proxy.
        (WebCore::HTMLMediaElement::loadResource): Ditto.
        (WebCore::HTMLMediaElement::ensureMediaPlayer): Allocate media player.
        (WebCore::HTMLMediaElement::setMediaPlayerProxy): Call ensureMediaPlayer.
        (WebCore::HTMLMediaElement::getPluginProxyParams): New, return the url and params vectors.
        (WebCore::HTMLMediaElement::finishParsingChildren): Call createMediaPlayerProxy.
        (WebCore::HTMLMediaElement::createMediaPlayerProxy): New, allocate the proxy widget if necessary.
        * html/HTMLMediaElement.h:

        * loader/EmptyClients.h:
        (WebCore::EmptyFrameLoaderClient::createMediaPlayerProxyPlugin): Add declaration.

        * loader/FrameLoader.cpp:
        (WebCore::toPlugInElement): Don't allow an audio or video element to be cast to a plug-in element.
        (WebCore::FrameLoader::loadPlugin):
        (WebCore::FrameLoader::loadMediaPlayerProxyPlugin): New, allocate a media player proxy plug-in.

        * loader/FrameLoader.h: Declare loadMediaPlayerProxyPlugin.

        * loader/FrameLoaderClient.h: Declare createMediaPlayerProxyPlugin.

        * rendering/RenderEmbeddedObject.cpp:
        (WebCore::RenderEmbeddedObject::updateWidget): Call loadMediaPlayerProxyPlugin when passed an
        audio or video node.

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

         * rendering/RenderVideo.cpp:
         (WebCore::RenderVideo::RenderVideo): Get default width and height from defaultSize.
         (WebCore::RenderVideo::defaultSize): New, return the spec defined default width and height.
         * rendering/RenderVideo.h:

2010-03-26  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Dan Bernstein, Darin Adler.

        Re-entrant layout via plug-ins may cause crashes with bad RenderWidgets
        https://bugs.webkit.org/show_bug.cgi?id=36675
        <rdar://problem/7787617>
        
        Fix two places in the code where RenderWidgets can get destroyed while being iterated over.
        This can happen when plug-ins execute script from NPP_SetWindow, and that script makes a change
        to the page that destroys a RenderWidget.

        Tests: plugins/reentrant-update-widget-positions.html
               plugins/update-widgets-crash.html

        * page/FrameView.cpp:
        (WebCore::FrameView::updateWidgets): ref() the RenderEmbeddedObjects that are put into the
        vector before iterating of them, and deref() them at the end. Rather than checking the m_widgetUpdateSet
        to see if the RenderWidget is still live, test object->node().
        
        * rendering/RenderView.cpp:
        (WebCore::RenderView::RenderView): Initialize some data members to make it more obvious in the debugger
        that the object is not garbage.
        (WebCore::RenderView::updateWidgetPositions): Use a Vector of RenderWidget* to keep the RenderWidgets
        alive during iteration, by reffing and dereffing them.
        * rendering/RenderWidget.h:
        (WebCore::RenderWidget::ref): Make this and deref() public.

2010-03-26 Beth Dakin <bdakin@apple.com>

        Reviewed by Darin Adler.

        Partial fix for https://bugs.webkit.org/show_bug.cgi?id=36564 
        Performance regression for setting content of <text> in SVG
        -and corresponding-
        <rdar://problem/7693963>

        toClipPath() is extremely inefficient, so this patch removes the 
        call to it from RenderSVGResourceClipper::resourceBoundingBox() 
        which is very hot code in SVG with clip-paths. It is sufficient to 
        call unite with the objectBoundingBox(), which will return early if 
        objectBoundingBox() is empty.

        * rendering/RenderSVGResourceClipper.cpp:
        (WebCore::RenderSVGResourceClipper::resourceBoundingBox):

2010-03-26  Joseph Pecoraro  <joepeck@webkit.org>

        Reviewed by Dave Hyatt.

        Generated run-in Content is Mistakenly Getting Deleted
        https://bugs.webkit.org/show_bug.cgi?id=36505
        <rdar://problem/7767161>

        Test: fast/runin/generated2.html
        Test: fast/runin/generated3.html
        Test: fast/runin/generated4.html

        Do not destroy :before/:after generated content with display run-in
        when relaying out different nodes. Have their real owners correctly
        handle them.

        * rendering/RenderObjectChildList.cpp:
        (WebCore::RenderObjectChildList::updateBeforeAfterContent): simplified logic
        (WebCore::RenderObjectChildList::beforeAfterContainer): skip generated run-ins when checking children, check for them in grandchildren

2010-03-25  Ojan Vafai  <ojan@chromium.org>

        Reviewed by Darin Adler.

        shift+home/end and cmd+shift+left/right don't extend the selection correctly
        https://bugs.webkit.org/show_bug.cgi?id=36539

        * WebCore.base.exp:
        * editing/SelectionController.cpp:
        (WebCore::SelectionController::modify):
        * editing/SelectionController.h:

2010-03-26  Janne Koskinen  <janne.p.koskinen@digia.com>

        Reviewed by Laszlo Gombos.

        Don't undefine SKIP_STATIC_CONSTRUCTORS_ON_GCC for Symbian HW targets.
        https://bugs.webkit.org/show_bug.cgi?id=34081

        Defining StringImpl instances as globals will cause a crash on process exit as 
        StringImpl::Remove expects TLS which was already deleted at time of exiting main and ends up
        constructing one exiting thread.

        * config.h:

2010-03-26  Andrey Kosyakov  <caseq@chromium.org>

        Reviewed by Pavel Feldman.


        Send worker resource content to inspector to enable display of web
        workers in inspector's resource tab.
        https://bugs.webkit.org/show_bug.cgi?id=36658

        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::resourceRetrievedByXMLHttpRequest):
        (WebCore::InspectorController::scriptImported):
        * inspector/InspectorResource.cpp:
        (WebCore::InspectorResource::type):
        (WebCore::InspectorResource::setOverrideContent):
        (WebCore::InspectorResource::sourceString):
        * inspector/InspectorResource.h:
        * workers/DefaultSharedWorkerRepository.cpp:
        (WebCore::SharedWorkerScriptLoader::notifyFinished):
        * workers/Worker.cpp:
        (WebCore::Worker::notifyFinished):

2010-03-26  Yael Aharon  <yael.aharon@nokia.com>

        Reviewed by Antti Koivisto.

        Fix the rendering of HTMLProgressElement
        https://bugs.webkit.org/show_bug.cgi?id=36206

        Update the rendering and css to conform to
        http://www.whatwg.org/specs/web-apps/current-work/complete.html#the-progress-element-0.
        Updated the tests and the expected results accordingly.

        * css/html.css:
        (progress):
        * rendering/RenderProgress.cpp:
        (WebCore::RenderProgress::RenderProgress):
        (WebCore::RenderProgress::updateFromElement):
        * rendering/RenderProgress.h:
        (WebCore::RenderProgress::isProgress):

2010-03-26  Julien Chaffraix  <jchaffraix@webkit.org>

        Unreviewed build fix.

        FontPlatformDataPango.cpp: prototype for
        'WebCore::FontPlatformData::FontPlatformData(cairo_font_face_t*, int, bool, bool)'
        does not match any in class
        https://bugs.webkit.org/show_bug.cgi?id=36496

        * platform/graphics/gtk/FontPlatformDataPango.cpp:
        (WebCore::FontPlatformData::FontPlatformData): The 'size' parameter
        should be a float to match the declaration and the other definitions.

2010-03-26  Shu Chang  <chang.shu@nokia.com>

        Reviewed by Eric Seidel.

        [Qt] Prevent referring d->m_job in the future because calling abort()
        deletes the instance itself.
        https://bugs.webkit.org/show_bug.cgi?id=36618

        Test: http/tests/appcache/fallback.html

        * platform/network/qt/ResourceHandleQt.cpp:
        (WebCore::ResourceHandle::cancel):

2010-03-26  Stephen White  <senorblanco@chromium.org>

        Unreviewed; build fix.

        Rolling out 56620; too many layout test failures.

        Covered by fast/css/*.

        * css/CSSPrimitiveValue.cpp:
        (WebCore::CSSPrimitiveValue::cleanup):
        (WebCore::CSSPrimitiveValue::cssText):
        * css/CSSPrimitiveValue.h:
        (WebCore::CSSPrimitiveValue::):

2010-03-26  Jocelyn Turcotte  <jocelyn.turcotte@nokia.com>

        Reviewed by Simon Hausmann.

        [Qt] Build JavaScriptCore as a static library.
        https://bugs.webkit.org/show_bug.cgi?id=36590

        This patch takes what was left of the unused JavaScriptCore.pro
        and moved the compilation logic from JavaScriptCore.pri to
        JavaScriptCore.pro.

        * WebCore.pro:

2010-03-26  Olivier Goffart  <ogoffart@trolltech.com>

        Reviewed by Simon Hausmann.

        [Qt] Fix compilation on Windows

        For some reason, the MSVC compiler choose the
        operator+(const QString &, const QString &) instead of
        operator+(const WebCore::String &, const WebCore::String &)
        resulting in errors when QT_USE_FAST_OPERATOR_PLUS is used.

        * dom/XMLTokenizerQt.cpp:
        (WebCore::handleElementNamespaces):

2010-03-24  Stephen White  <senorblanco@chromium.org>

        Reviewed by Darin Adler.

        In order to speed up multiple calls to CSSPrimitiveValue::cssText(),
        this CL caches the String result.  When m_value is changed, the
        cached string is cleared.  This gives a good speedup on benchmarks
        which do a lot of CSS property gets, such as Peacekeeper.
        The processing cost should be negligible, since the strings are 
        refcounted.  The memory cost is an additional 4 bytes per
        CSSPrimitiveValue, and the extended lifetime of the computed string
        (potentially, the same as the lifetime of the CSSPrimitiveValue).

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

        Covered by fast/css/large-number-round-trip.html, and more.

        * css/CSSPrimitiveValue.cpp:
        (WebCore::CSSPrimitiveValue::CSSPrimitiveValue):
        (WebCore::CSSPrimitiveValue::cleanup):
        (WebCore::CSSPrimitiveValue::cssText):
        * css/CSSPrimitiveValue.h:

2010-03-26  Qi Zhang  <qi.2.zhang@nokia.com>

        Reviewed by Laszlo Gombos.

        [Qt] fast/canvas/drawImage-with-negative-source-destination.html failed
        https://bugs.webkit.org/show_bug.cgi?id=35005

        To support negative width or height at context.drawImage

        * platform/graphics/qt/StillImageQt.cpp:
        (WebCore::StillImage::draw):

2010-03-08  Philippe Normand  <pnormand@igalia.com>

        Reviewed by Gustavo Noronha.

        [GStreamer] soften dependency on libsoup in the http src element
        https://bugs.webkit.org/show_bug.cgi?id=35864

        Replaced SoupURI calls with KURL and pause/resume internal soup
        messages only if the element is compiled for a port depending on
        libsoup.

        * platform/graphics/gstreamer/WebKitWebSourceGStreamer.cpp:
        (webkit_web_src_init):
        (webKitWebSrcSetUri):
        (webKitWebSrcNeedDataMainCb):
        (webKitWebSrcEnoughDataMainCb):

2010-03-25  Ilya Tikhonovsky  <loislo@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: Shot record filter is implemented in Timeline Panel.
        https://bugs.webkit.org/show_bug.cgi?id=36606

        * English.lproj/localizedStrings.js:
        * inspector/front-end/TimelinePanel.js:
        (WebInspector.TimelinePanel):
        (WebInspector.TimelinePanel.prototype.get statusBarItems):
        (WebInspector.TimelinePanel.prototype._createStatusbarButtons):
        (WebInspector.TimelinePanel.prototype._toggleFilterButtonClicked):
        (WebInspector.TimelinePanel.prototype._innerAddRecordToTimeline):
        (WebInspector.TimelinePanel.prototype._addToRecordsWindow):
        (WebInspector.TimelineRecordGraphRow.prototype.update):
        (WebInspector.TimelinePanel.FormattedRecord.prototype.get _isLongEvent):
        * inspector/front-end/inspector.css:

2010-03-25  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Timothy Hatcher.

        Web Inspector: Implement CSSStyleSelector::pseudoStyleForElement and use it in the InspectorDOMAgent.

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

        This change provides pseudo elements information into the inspector styles sidebar pane.
        Changes applied:
        - CSSStyleSelector::pseudoStyleRulesForElement implemented. I changed the signature to accept
          PseudoId instead of a String since it better reflected the needs;
        - Accompanied elementStyle checks with m_collectRulesOnly checks;
        - Removed pseudoStyleRulesForElement usage from DOMWindow::getMatchedCSSRules. It was anyways
          returning 0, while I would need to convert String to PseudoId in order to leave the call in place;
        - Needed to introduce AFTER_LAST_INTERNAL_PSEUDOID marker const in RenderStyleConstants' PseudoId enum
        - InspectorDOMAgent is now iterating over all pseudo ids to get all styles (including internal ones).
        - Brushed up front-end code so that proper overriding took place locally within pseudo id categories.

        * English.lproj/localizedStrings.js:
        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::styleRulesForElement):
        (WebCore::CSSStyleSelector::pseudoStyleRulesForElement):
        (WebCore::CSSStyleSelector::SelectorChecker::checkSelector):
        (WebCore::CSSStyleSelector::SelectorChecker::checkOneSelector):
        * css/CSSStyleSelector.h:
        * inspector/InspectorDOMAgent.cpp:
        (WebCore::InspectorDOMAgent::getStyles):
        (WebCore::InspectorDOMAgent::buildObjectForAttributeStyles):
        (WebCore::InspectorDOMAgent::buildArrayForCSSRules):
        (WebCore::InspectorDOMAgent::buildArrayForPseudoElements):
        * inspector/InspectorDOMAgent.h:
        * inspector/front-end/StylesSidebarPane.js:
        (WebInspector.StylesSidebarPane.prototype.update.callback):
        (WebInspector.StylesSidebarPane.prototype.update):
        (WebInspector.StylesSidebarPane.prototype._update):
        (WebInspector.StylesSidebarPane.prototype._refreshStyleRules):
        (WebInspector.StylesSidebarPane.prototype._rebuildStyleRules.insertInheritedNodeSeparator):
        (WebInspector.StylesSidebarPane.prototype._rebuildStyleRules):
        (WebInspector.StylesSidebarPane.prototype._markUsedProperties):
        (WebInspector.StylesSidebarPane.prototype._refreshSectionsForStyleRules):
        (WebInspector.StylesSidebarPane.prototype._rebuildSectionsForStyleRules):
        (WebInspector.StylesSidebarPane.prototype._changeColorFormat):
        (WebInspector.StylesSidebarPane.prototype.addBlankSection):
        (WebInspector.StylesSidebarPane.prototype.removeSection):
        * inspector/front-end/inspector.css:
        (.styles-sidebar-separator):
        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::getMatchedCSSRules):
        * rendering/style/RenderStyleConstants.h:
        (WebCore::):

2010-03-25  Charlie Reis  <creis@chromium.org>

        Reviewed by Adam Barth.

        onbeforeunload not called at window close + frame or iframe focused
        https://bugs.webkit.org/show_bug.cgi?id=27481

        Test: fast/events/onbeforeunload-focused-iframe.html

        Replaces initial manual tests with a layout test.

        * manual-tests/onbeforeunload-focused-iframe.html: Removed.
        * manual-tests/resources/focused-iframe.html: Removed.

2010-03-25  Eric Uhrhane  <ericu@chromium.org>

        Reviewed by David Levin.

        Missing lock in call to doneCreatingDatabase
        https://bugs.webkit.org/show_bug.cgi?id=36473

        Added new test storage/open-database-over-quota.html.

        * storage/DatabaseTracker.cpp:
        (WebCore::DatabaseTracker::canEstablishDatabase):  Added missing lock call.

2010-03-25  Ojan Vafai  <ojan@chromium.org>

        Reviewed by Eric Seidel.

        [chromium] REGRESSION: Some LayoutTests fail after r56567
        https://bugs.webkit.org/show_bug.cgi?id=36630

        Fix boolean logic goofup. This was a last minute code review
        change that didn't get tested on Windows before commit.

        * editing/SelectionController.cpp:
        (WebCore::SelectionController::setIsDirectional):

2010-03-25  Dan Bernstein  <mitz@apple.com>

        Reviewed by Darin Adler.

        <rdar://problem/7728903> Support color bitmap fonts

        Test: platform/mac/fonts/color-bitmap.html

        * platform/graphics/mac/FontMac.mm:
        (WebCore::showGlyphsWithAdvances): Added. Calls CGContextShowGlyphsWithAdvances()
        or CTFontShowGlyphs() depending on whether the font is a color bitmap font.
        (WebCore::Font::drawGlyphs): Use showGlyphsWithAdvances(). Don’t include the font’s matrix in
        the context’s text matrix when drawing with a color bitmap font, because CTFontShowGlyphs()
        factors it in.
        * platform/graphics/mac/FontPlatformData.h:
        (WebCore::FontPlatformData::FontPlatformData): Added m_isColorBitmapFont member
        and initialized it in constructors.
        (WebCore::FontPlatformData::isColorBitmapFont): Added this getter.
        * platform/graphics/mac/FontPlatformDataMac.mm:
        (WebCore::FontPlatformData::FontPlatformData): Initialize m_isColorBitmapFont.
        (WebCore::FontPlatformData::operator=): Copy m_isColorBitmapFont.
        (WebCore::FontPlatformData::setFont): Set m_isColorBitmapFont.

2010-03-25  Adam Barth  <abarth@webkit.org>

        Reviewed by Sam Weinig.

        Implement allow-top-navigation for HTML5 sandbox attribute
        https://bugs.webkit.org/show_bug.cgi?id=36549

        Tests: fast/frames/sandboxed-iframe-navigation-top-by-constant-name.html
               fast/frames/sandboxed-iframe-navigation-top-by-constant-name2.html
               fast/frames/sandboxed-iframe-navigation-top-by-name-denied.html
               fast/frames/sandboxed-iframe-navigation-top-by-name.html
               fast/frames/sandboxed-iframe-navigation-top-denied.html
               fast/frames/sandboxed-iframe-navigation-top.html

        * bindings/generic/BindingDOMWindow.h:
        (WebCore::::createWindow):
        * bindings/js/JSDOMWindowCustom.cpp:
        (WebCore::createWindow):
          Moved the security check to FrameLoader because we need to allow
          window.open navigation to succeed sometimes when the
          SandboxNavigation bit is set.
        * html/HTMLIFrameElement.cpp:
        (WebCore::parseSandboxAttribute):
          Added allow-top-navigation to the parser.
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::createWindow):
          The SandboxNavigation check now occurs after we search for the frame
          by name.  Notice that the named frame navigation case is caught by
          the generic navigation access check.
        (WebCore::FrameLoader::shouldAllowNavigation):
          Update the navigation access check to allow navigating of top unless
          it's forbidden.
        * loader/FrameLoaderTypes.h:
          Introduce a bit for SandboxedTopNavigation.
        (WebCore::):

2010-03-25  Dumitru Daniliuc  <dumi@chromium.org>

        Unreviewed, Chromium build fix.

        V8CustomVoidCallback should not check if a return value is a
        boolean. It should only convert the value to a boolean.

        * bindings/v8/custom/V8CustomVoidCallback.cpp:
        (WebCore::invokeCallback):

2010-03-25  Dmitry Titov  <dimich@chromium.org>

        No review, rolling out r56585.
        http://trac.webkit.org/changeset/56585
        https://bugs.webkit.org/show_bug.cgi?id=36621

        Broke Chromium builds on waterfall

        * plugins/PluginView.cpp:
        (WebCore::PluginView::getValue):
        * plugins/PluginView.h:
        * plugins/PluginViewNone.cpp:
        (WebCore::PluginView::setJavaScriptPaused):

2010-03-25  Laszlo Gombos  <laszlo.1.gombos@nokia.com>

        Reviewed by Darin Adler.

        Fix build if NPAPI support is disabled
        https://bugs.webkit.org/show_bug.cgi?id=36621

        No new tests, this is a build fix.

        * plugins/PluginView.cpp: Guard getValueStatic() with
        NETSCAPE_PLUGIN_API
        (WebCore::PluginView::getValue):
        * plugins/PluginView.h: Guard getValue() with NETSCAPE_PLUGIN_API
        * plugins/PluginViewNone.cpp: Guard platformGetValue() and
        platformGetValueStatic with NETSCAPE_PLUGIN_API;
        Guard privateBrowsingStateChanged() and setJavaScriptPaused() with
        PLATFORM(MAC)

2010-03-25  Drew Wilson  <atwilson@chromium.org>

        Reviewed by Nate Chapin.

        [v8] Error in getScriptExecutionContext() when worker context is terminating.
        https://bugs.webkit.org/show_bug.cgi?id=36565

        Removed WorkerScriptExecutionProxy::retrieve() and added WorkerScriptController::controllerForContext(). This allows
        callers to differentiate between "the current context is shutting down" vs "the current context is not a worker context".

        Test: Existing worker tests suffice.

        * bindings/v8/V8DOMWrapper.cpp:
        (WebCore::V8DOMWrapper::getConstructor):
        Changed to use WorkerScriptController::controllerForContext() instead of WorkerScriptExecutionProxy::retrieve().
        * bindings/v8/V8Utilities.cpp:
        (WebCore::getScriptExecutionContext):
        Changed to use WorkerScriptController::controllerForContext() instead of WorkerScriptExecutionProxy::retrieve().
        * bindings/v8/WorkerContextExecutionProxy.cpp:
        Removed WorkerScriptExecutionProxy::retrieve().
        * bindings/v8/WorkerContextExecutionProxy.h:
        Removed WorkerScriptExecutionProxy::retrieve().
        * bindings/v8/WorkerScriptController.cpp:
        (WebCore::WorkerScriptController::controllerForContext):
        Added helper function to get the WorkerScriptController for the current context.
        * bindings/v8/WorkerScriptController.h:
        Added declaration for controllerForContext().

2010-03-25  Simon Hausmann  <simon.hausmann@nokia.com>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] Fix the package build on Maemo 5

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

        Always embed the stylesheet for the no-listbox rendering. This way it'll be
        included in the generated files for the package generation.

        * WebCore.pri:

2010-03-24  Dumitru Daniliuc  <dumi@chromium.org>

        Reviewed by Dimitri Glazkov.

        Changing the V8 and JSC implementations of
        SQLStatementErrorCallback to interpret as false all results that
        could be converted to a false boolean. Pretty much a revert of
        r54981.

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

        * bindings/js/JSCustomSQLStatementErrorCallback.cpp:
        (WebCore::JSCustomSQLStatementErrorCallback::handleEvent):
        * bindings/v8/custom/V8CustomSQLStatementErrorCallback.cpp:
        (WebCore::V8CustomSQLStatementErrorCallback::handleEvent):
        * bindings/v8/custom/V8CustomVoidCallback.cpp:
        (WebCore::invokeCallback):
        * bindings/v8/custom/V8CustomVoidCallback.h:

2010-03-25  Dmitry Titov  <dimich@chromium.org>

        Unreviewed, fix Chromium tests.

        Recent http://trac.webkit.org/changeset/56489 made all urls in Chromium that
        have unspecified port to return invalidPortNumber from KURL::port().

        * platform/KURLGoogle.cpp: Return 0 for unspecified ports, mimic WebKit KURL behavior for invalid ports.
        (WebCore::KURL::port):

2010-03-25  Dirk Schulze  <krit@webkit.org>

        Reviewed by Nikolas Zimmermann.

        This is a follow up of:
        https://bugs.webkit.org/show_bug.cgi?id=30055
        Bad DOM performance in large SVG files

        Just save and restore the GraphicsContext, if we realy modify it.
        (Cairo)Path::contains checks if a point is in the boundingBox
        as a heuristic. The intention was to make the process faster for
        points outside of this rect, but it rather causes the
        opposite.

        No new test cases added. No change in functionality.

        * platform/graphics/cairo/PathCairo.cpp:
        (WebCore::Path::contains):
        * rendering/RenderPath.cpp:
        (WebCore::RenderPath::paint):

2010-03-25  Ojan Vafai  <ojan@chromium.org>

        Reviewed by David Levin.

        mouse-based selections are always directional on Windows/Linux
        https://bugs.webkit.org/show_bug.cgi?id=25195

        Change m_lastChangeWasHorizontalExtension to m_isDirectional
        and make m_isDirectional always be true for Windows/Linux.

        * editing/SelectionController.cpp:
        (WebCore::SelectionController::SelectionController):
        (WebCore::SelectionController::setSelection):
        (WebCore::SelectionController::setIsDirectional):
        (WebCore::SelectionController::willBeModified):
        When double-clicking, the base/extent will be in the middle
        of the selection instead of the start/end of it. Changed to
        maintain that modifications after double-click still move the
        start/end of the selection, not the base/extent.
        (WebCore::SelectionController::modify):
        * editing/SelectionController.h:
        * page/EventHandler.cpp:
        (WebCore::EventHandler::handleMousePressEventSingleClick):
        (WebCore::EventHandler::updateSelectionForMouseDrag):

2010-03-25  Simon Fraser  <simon.fraser@apple.com>

        Revert r56565 which was based on an incorrect premise.

        * page/animation/CompositeAnimation.cpp:
        (WebCore::CompositeAnimation::clearRenderer):
        (WebCore::CompositeAnimation::updateKeyframeAnimations):
        (WebCore::CompositeAnimation::getAnimatedStyle):
        (WebCore::CompositeAnimation::setAnimating):
        (WebCore::CompositeAnimation::timeToNextService):
        (WebCore::CompositeAnimation::getAnimationForProperty):
        (WebCore::CompositeAnimation::suspendAnimations):
        (WebCore::CompositeAnimation::resumeAnimations):
        (WebCore::CompositeAnimation::isAnimatingProperty):
        (WebCore::CompositeAnimation::pauseAnimationAtTime):
        (WebCore::CompositeAnimation::numberOfActiveAnimations):

2010-03-25  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Eric Carlson.

        Make calls to m_keyframeAnimations.checkConsistency() debug-only
        https://bugs.webkit.org/show_bug.cgi?id=36555

        Remove lots of calls to m_keyframeAnimations.checkConsistency(); which were left after some earlier
        debugging. Leave one in CompositeAnimation::animate() to catch any future issues, which is OK since
        these calls are no-ops in release builds.
        
        * page/animation/CompositeAnimation.cpp:
        (WebCore::CompositeAnimation::clearRenderer):
        (WebCore::CompositeAnimation::updateKeyframeAnimations):
        (WebCore::CompositeAnimation::getAnimatedStyle):
        (WebCore::CompositeAnimation::setAnimating):
        (WebCore::CompositeAnimation::timeToNextService):
        (WebCore::CompositeAnimation::getAnimationForProperty):
        (WebCore::CompositeAnimation::suspendAnimations):
        (WebCore::CompositeAnimation::resumeAnimations):
        (WebCore::CompositeAnimation::isAnimatingProperty):
        (WebCore::CompositeAnimation::pauseAnimationAtTime):
        (WebCore::CompositeAnimation::numberOfActiveAnimations):

2010-03-25  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Geoffrey Garen.

        https://bugs.webkit.org/show_bug.cgi?id=36557
        Animations use the wrong timing-function sometimes
        
        Fix an issue where animations picked the wrong style for their "unanimated" value.
        
        Previously, the "unanimated" style was considered to be the style before the animation
        was applied. This caused us to pick up stale values for animation timing functions, for
        blending when a property is missing from the first keyframe, and for resuming transitions
        once an animation ends.
        
        Instead, we need to use the "current" style, which is the one that causes the animation
        to kick off.

        Tests: animations/longhand-timing-function.html
               animations/transition-and-animation-3.html
               animations/unanimated-style.html

        * page/animation/CompositeAnimation.cpp:
        (WebCore::CompositeAnimation::updateKeyframeAnimations):

2010-03-25  Gavin Barraclough  <barraclough@apple.com>

        Reviewed by Geoff Garen.

        Bug 36611 - Cleanup JSC::CString
        Rename CString::c_str() -> CString::data(), CString::size() -> CString::length(),
        remove UString::getCString() (all uses are wrong, should use UString::UTF8String()).

        * bridge/NP_jsobject.cpp:
        (_NPN_Enumerate):
        * bridge/c/c_utility.cpp:
        (JSC::Bindings::convertValueToNPVariant):
        * bridge/jni/jsc/JNIBridgeJSC.cpp:
        (JavaField::valueFromInstance):
        (JavaField::setValueToInstance):
        * bridge/jni/jsc/JavaInstanceJSC.cpp:
        (JavaInstance::invokeMethod):
        * bridge/jni/jsc/JavaStringJSC.h:
        (JSC::Bindings::JavaStringImpl::UTF8String):

2010-03-25  Jakub Wieczorek  <jwieczorek@webkit.org>

        Reviewed by Eric Seidel.

        [Qt] RenderTheme: fix size adjustment for text fields
        https://bugs.webkit.org/show_bug.cgi?id=36413

        To match other ports, remove the hardcoded dimensions for text fields so that
        the default ones from WebCore can be used.
        Properly apply the correct padding to text areas - this fixes their appearance
        with the Oxygen style.

        * platform/qt/RenderThemeQt.cpp:
        (WebCore::RenderThemeQt::computeSizeBasedOnStyle):

2010-03-25  Tor Arne Vestbø  <tor.arne.vestbo@nokia.com>

        Reviewed by Simon Hausmann.

        [Qt] Implement ChromeClient::windowResizerRect()

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

        The helper function geometryRelativeToOwnerWidget() in the page
        client is used to clip the resize rect to the actual size of the
        viewport, not the size of the QGraphicsView.

        * platform/qt/QWebPageClient.h:

2010-03-25  Joseph Pecoraro  <joepeck@webkit.org>

        Reviewed by Pavel Feldman.

        Web Inspector: reloading debug target window with cmd-R from inspector window produces beep.
        https://bugs.webkit.org/show_bug.cgi?id=36554

        * inspector/front-end/inspector.js:
        (WebInspector.documentKeyDown): prevent the default behavior, if handled, which would result in a system beep.

2010-03-25  Jochen Eisinger  <jochen@chromium.org>

        Reviewed by Jeremy Orlow.

        Forward DatabaseTracker::canEstablishDatabase to chromium layer.
        https://bugs.webkit.org/show_bug.cgi?id=36595

        * storage/chromium/DatabaseObserver.h:
        * storage/chromium/DatabaseTrackerChromium.cpp:
        (WebCore::DatabaseTracker::canEstablishDatabase):

2010-03-25  yael aharon  <yael.aharon@nokia.com>

        Reviewed by Laszlo Gombos.

        [Qt] Windowed netscape plugins don't work with QGraphicsWebView on Symbian
        https://bugs.webkit.org/show_bug.cgi?id=35112

        Add a proxy widget when loading a QWidget based plugin in a QGraphicsWebView.

        * plugins/symbian/PluginContainerSymbian.cpp:
        (PluginContainerSymbian::PluginContainerSymbian):
        (PluginContainerSymbian::focusInEvent):
        * plugins/symbian/PluginContainerSymbian.h:
        (WebCore::PluginContainerSymbian::proxy):
        * plugins/symbian/PluginViewSymbian.cpp:
        (WebCore::PluginView::updatePluginWidget):
        (WebCore::PluginView::platformStart):
        (WebCore::PluginView::platformDestroy):

2010-03-25  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Adele Peterson.

        https://bugs.webkit.org/show_bug.cgi?id=35714
        Computed style on delayed transform animations is incorrect
        
        When fetching computed style while a delayed accelerated animation is in effect,
        we would get the value form the first keyframe, rather than getting the current
        style.
        
        Fix by checking to see whether we've in the delay phase (with no backwards-fill)
        in KeyframeAnimation::getAnimatedStyle().

        Test: compositing/animation/computed-style-during-delay.html

        * page/animation/KeyframeAnimation.cpp:
        (WebCore::KeyframeAnimation::getAnimatedStyle):

2010-03-25  Yury Semikhatsky  <yurys@chromium.org>

        Reviewed by Pavel Feldman.

        Initialize Web Inspector title with inspected page URL when opening Web Inspector.

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

        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::setFrontend):

2010-03-25  Antti Koivisto  <koivisto@iki.fi>

        Reviewed by Kenneth Rohde Christiansen.

        https://bugs.webkit.org/show_bug.cgi?id=36316
        Tiles of selected content do not update if not in viewport
        
        Don't clip repaints to viewport when tiling is enabled.

        * page/Frame.cpp:
        (WebCore::Frame::setView):
        (WebCore::Frame::setTiledBackingStoreEnabled):

2010-03-25  Diego Gonzalez  <diego.gonzalez@openbossa.org>

        Reviewed by Eric Seidel.

        Missing forward ENABLE_DATALIST macro to JavaScript enabled features macros
        on WebKit.pri

        [Qt] Forward ENABLE_DATALIST macro to JavaScript enabled macros
        https://bugs.webkit.org/show_bug.cgi?id=36547

        * WebCore.pri:

2010-03-25  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Timothy Hatcher.

        Web Inspector: Expect console object wrapping to fail.

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

        * inspector/front-end/InjectedScript.js:
        (injectedScriptConstructor):

2010-03-25  Joanmarie Diggs  <joanmarie.diggs@gmail.com>

        Reviewed by Eric Seidel.

        https://bugs.webkit.org/show_bug.cgi?id=36371
        [Gtk] Elements with a title attribute should not be ignored

        * accessibility/AccessibilityRenderObject.cpp:
        (AccessibilityRenderObject::accessibilityIsIgnored):

2010-03-24  Steve Block  <steveblock@google.com>

        Reviewed by David Levin.

        Adds a missing ENABLE(WORKERS) guards to the V8 bindings.
        https://bugs.webkit.org/show_bug.cgi?id=36550

        Build fix only, no new tests.

        * bindings/v8/V8DOMWrapper.cpp:
        (WebCore::V8DOMWrapper::instantiateV8Object):

2010-03-25  Leandro Pereira  <leandro@profusion.mobi>

        Reviewed by Eric Seidel.

        Add EFL-specific code to platform/ScrollView.cpp and
        platform/Scrollbar.cpp.
        http://webkit.org/b/36305

        * platform/ScrollView.cpp:
        * platform/Scrollbar.cpp:

2010-03-25  Tasuku Suzuki  <tasuku.suzuki@nokia.com>

        Reviewed by Eric Seidel.

        [Qt]Fix compile error with QT_NO_LIBRARY
        https://bugs.webkit.org/show_bug.cgi?id=36533

        * platform/FileSystem.h:
        * platform/qt/FileSystemQt.cpp:
        (WebCore::unloadModule):

2010-03-25  Tasuku Suzuki  <tasuku.suzuki@nokia.com>

        Reviewed by Eric Seidel.

        [Qt]Fix compile error with QT_NO_ANIMATION
        https://bugs.webkit.org/show_bug.cgi?id=36526

        * platform/graphics/qt/GraphicsLayerQt.cpp:
        (WebCore::GraphicsLayerQtImpl::~GraphicsLayerQtImpl):
        * platform/graphics/qt/GraphicsLayerQt.h:

2010-03-25  Tony Chang  <tony@chromium.org>

        Reviewed by Eric Seidel.

        https://bugs.webkit.org/show_bug.cgi?id=33697
        Have dragOpFromIEOp("move") return DragOperationGeneric | DragOperationMove
        because only returning Generic doesn't work for platforms that don't
        have a generic operation.

        Covered by existing tests (fast/events/drag-and-drop.html).

        * dom/Clipboard.cpp:
        (WebCore::dragOpFromIEOp):
        (WebCore::Clipboard::destinationOperation):
        (WebCore::Clipboard::setDestinationOperation):

2010-03-25  Fumitoshi Ukai  <ukai@chromium.org>

        Reviewed by Eric Seidel.

        [Qt] websocket/tests/long-invalid-header.html fails
        https://bugs.webkit.org/show_bug.cgi?id=36492

        trim message at most 128 bytes from the current position.
        I believe it's enough data to investigate the error reason and
        it makes test not depend on buffered size.

        * websockets/WebSocketHandshake.cpp:
        (WebCore::trimConsoleMessage):
        (WebCore::WebSocketHandshake::readServerHandshake):
        (WebCore::WebSocketHandshake::readHTTPHeaders):

2010-03-24  Jon Honeycutt  <jhoneycutt@apple.com>

        <rdar://problem/7780798> Missing plug-ins should be represented by text
        only, instead of lego block

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

        Reviewed by Dan Bernstein.

        * rendering/RenderEmbeddedObject.cpp:
        (WebCore::RenderEmbeddedObject::paintReplaced):
        Set the font rendering mode and the computed size, so that the text will
        draw properly on Windows.

2010-03-24  Vangelis Kokkevis  <vangelis@chromium.org>

        Reviewed by Dimitri Glazkov.

        Removing unecessary redraws of LayerSkia contents:
        https://bugs.webkit.org/show_bug.cgi?id=36470

        Test: No new functionality added, no tests.

        * platform/graphics/skia/LayerRendererSkia.cpp:
        (WebCore::LayerRendererSkia::drawLayerInCanvasRecursive):
        Debug borders now rendered at composite time rather than update time.
        * platform/graphics/skia/LayerSkia.cpp:
        (WebCore::LayerSkia::updateContents):
        (WebCore::LayerSkia::drawDebugBorder):
        Debug border drawing removed from updateContents and split into a separate method that
        can be called at composite time.
        (WebCore::LayerSkia::setBounds):
        Resetting the bounds causes the layer to redraw its contents.
        (WebCore::LayerSkia::setNeedsDisplay):
        * platform/graphics/skia/LayerSkia.h:
        Added declaration for drawDebugBorders method.

2010-03-24  Mark Rowe  <mrowe@apple.com>

        Revert the portion of r56489 that dealt with port zero as it introduced some test failures.

        * platform/KURL.cpp:
        (WebCore::KURL::port): Use the "ok" argument to charactersToUIntStrict to determine whether
        it was able to successfully parse the string as an unsigned integer, rather than relying on
        the fact it returned zero when it failed.

2010-03-24  Gavin Barraclough  <barraclough@apple.com>

        Reviewed by Sam Weinig.

        * platform/text/String.cpp:
        (WebCore::putUTF8Triple): Correct capitalization of function name.
        (WebCore::String::utf8): Fix C-style casts.
        (WebCore::String::fromUTF8): Remove unnecessary newline.
        (WebCore::String::fromUTF8WithLatin1Fallback): Use early return.

2010-03-24  Mark Rowe  <mrowe@apple.com>

        Reviewed by Darin Adler.

        WebKit should treat port numbers outside the valid range as being blacklisted
        <http://webkit.org/b/36571> / <rdar://problem/7790908>

        * platform/KURL.cpp:
        (WebCore::KURL::port): Map invalid port numbers to invalidPortNumber.
        (WebCore::portAllowed): Add invalidPortNumber to the blacklist.
        * platform/KURLGoogle.cpp:  invalid port numbers to invalidPortNumber.
        (WebCore::KURL::port): Add invalidPortNumber to the blacklist.
        Also bring this in to sync with KURL.  Having this identical code in two places is stupid.

2010-03-24  Sam Weinig  <sam@webkit.org>

        Reviewed by Mark Rowe.

        Add some missing exports.

        * WebCore.base.exp:

2010-03-24  Gavin Barraclough  <barraclough@apple.com>

        Reviewed by Sam Weinig.

        Switch String::latin1, String::utf8, String::fromUTF8 to
        use WTF's Unicode conversion methods rather than TextEncoder.
        These methods only perform simple conversion, and don't need
        really require TextEncoder's full capability (to look up arbitrary
        encodings by name), switching to only be dependent on WTF will
        make it easier if we chose to move WebCore::String to WTF.

        * platform/text/String.cpp:
        (WebCore::String::latin1):
        (WebCore::putUTF8triple):
        (WebCore::String::utf8):
        (WebCore::String::fromUTF8):

2010-03-24  Dmitry Titov  <dimich@chromium.org>

        No review, rolling out r56453.
        http://trac.webkit.org/changeset/56453
        https://bugs.webkit.org/show_bug.cgi?id=36426

        In Chromium port, it broke invalid-image-data-standalone.html
        invalid-image-data.html multipart-wait-before-boundary.html
        stop-crash.html win-boundary-crash.html

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::finishedLoadingDocument):

2010-03-24  Ilya Tikhonovsky  <loislo@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: Significant scroll speed degradation if Timeline has
        an expanded record with significant number of children.
        https://bugs.webkit.org/show_bug.cgi?id=36543


        * inspector/front-end/TimelinePanel.js:
        (WebInspector.TimelinePanel.prototype._updateBoundaries):
        (WebInspector.TimelinePanel.prototype._addToRecordsWindow):
        (WebInspector.TimelinePanel.prototype._filterRecords):
        (WebInspector.TimelinePanel.prototype._refreshRecords):

2010-03-24  Gustavo Noronha Silva  <gustavo.noronha@collabora.co.uk>

        Reviewed by Eric Carlson.

        [GStreamer] Fails to go to Loaded state because of floating point discrepancies
        https://bugs.webkit.org/show_bug.cgi?id=35891

        Use the m_fillStatus variable, which is more reliable, instead of
        using the calculation, for the completed case.

        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:
        (WebCore::MediaPlayerPrivate::fillTimerFired):

2010-03-24  Dmitry Titov  <dimich@chromium.org>

        Unreviewed, Chromium test fix.

        Recent r56445 added CustomEvent and a test but it didn't work on Chromium bots.
        Test crashed due to infinte recursion because the compiler did not have the right definition of toV8(CustomEvent*)
        and was substituting toV8(Event*).

        Fixing test fast/events/custom-event.html

        * bindings/v8/custom/V8EventCustom.cpp:

2010-03-24  MORITA Hajime  <morrita@google.com>

        Reviewed by Darin Adler.

        Refactoring: HTMLFormControlElement should not have redundant null check
        https://bugs.webkit.org/show_bug.cgi?id=36487
        
        No new tests as there is no new functionality.        

        * html/HTMLFormControlElement.cpp:
        (WebCore::HTMLFormControlElement::dispatchFocusEvent):
        (WebCore::HTMLFormControlElement::dispatchBlurEvent):

2010-03-24  Eric Uhrhane  <ericu@chromium.org>

        Reviewed by Alexey Proskuryakov.

        DOMCoreException needs NoStaticTables modifier
        https://bugs.webkit.org/show_bug.cgi?id=36458

        No new tests, but this shows up in tests of Database accesses from the
        Worker thread that I'll be checking in soon.  The symptom is that
        DOMCoreException.toString() returns [object DOMException] instead of
        something more helpful.

        * dom/DOMCoreException.idl:  Added NoStaticTables.

2010-03-24  Drew Wilson  <atwilson@chromium.org>

        Reviewed by Dmitry Titov.

        Failed assertion in V8Proxy::setDOMException() if worker is shutting down.
        https://bugs.webkit.org/show_bug.cgi?id=36514

        Test: none (existing worker tests suffice)

        * bindings/v8/V8Proxy.cpp:
        (WebCore::V8Proxy::setDOMException):
        Updated setDOMException() to check for an empty exception (due to no active context) and avoid throwing in that case.

2010-03-23  Evan Martin  <evan@chromium.org>

        Reviewed by Dmitry Titov.

        [chromium] use integral glyph widths
        https://bugs.webkit.org/show_bug.cgi?id=36510

        Despite WebKit (and Skia, to an extent) supporting non-integral
        glyph widths, the font code path we hit in Skia only supports
        integral glyph positions.  This means that we would accumulate
        offsets when drawing a sequence up non-integer-width glyphs
        which would cause gaps when snapped to the pixel grid when drawing.

        * platform/graphics/chromium/SimpleFontDataLinux.cpp:
        (WebCore::SimpleFontData::platformWidthForGlyph):
        round glyph widths to integers.

2010-03-24  Dean Jackson  <dino@apple.com>

        Reviewed by Kevin Decker.

        <rdar://problem/7785305>
        Fix regression caused by r55576. It turned out that ensuring
        CoreAnimation always gets a correct fill parameter caused flashing
        as non-filled animations ended (CA briefly showed the initial animation
        value before the style system set the final value).

        * platform/graphics/mac/GraphicsLayerCA.mm:
        (WebCore::GraphicsLayerCA::setupAnimation):

2010-03-24  Hayato Ito  <hayato@chromium.org>

        Reviewed by Shinichiro Hamaji.

        Refactor computePageRects so that Mac can make use of it.
        https://bugs.webkit.org/show_bug.cgi?id=36159

        Refactoring only, so no new tests.

        * WebCore.base.exp:
        * page/PrintContext.cpp:
        (WebCore::PrintContext::computePageRects):
        (WebCore::PrintContext::computePageRectsWithPageSize):
        (WebCore::PrintContext::computePageRectsWithPageSizeInternal):
        (WebCore::PrintContext::pageNumberForElement):
        (WebCore::PrintContext::numberOfPages):
        * page/PrintContext.h:

2010-03-24  Jeremy Moskovich  <jeremy@chromium.org>

        Reviewed by Jeremy Orlow.

        Add some diagnostics to try to track down cause of crash in ArchiveFactory::isArchiveMimeType().

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

        No new tests as there is no new functionality.

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::finishedLoadingDocument): Make copy of mimeType string to isolate crash.

2010-03-24  Anton Muhin  <antonm@chromium.org>

        Reviewed by Nate Chapin.

        Use newly introduced SetPrototype method to deal with global objects.
        https://bugs.webkit.org/show_bug.cgi?id=36497

        No new tests, should be covered by the current test infrastructure.

        * bindings/v8/V8DOMWindowShell.cpp:
        (WebCore::V8DOMWindowShell::installDOMWindow):
        * bindings/v8/V8DOMWrapper.cpp:
        (WebCore::V8DOMWrapper::getConstructor):
        * bindings/v8/WorkerContextExecutionProxy.cpp:
        (WebCore::WorkerContextExecutionProxy::initContextIfNeeded):

2010-03-24  Dmitry Titov  <dimich@chromium.org>

        Unreviewed, Chromium build fix.

        * platform/chromium/PopupMenuChromium.cpp:
        (WebCore::PopupContainer::PopupContainer): Fix order of initializers.
        (WebCore::PopupContainer::layout): Remove unused variable.

2010-03-23  Kenneth Rohde Christiansen  <kenneth@webkit.org>

        Reviewed by Simon Hausmann.

        Add a way to check if the page client is making use of
        a QWidget.

        * platform/qt/QWebPageClient.h:
        (QWebPageClient::isQWidgetClient):

2010-03-24  Jay Campan  <jcampan@google.com>

        Reviewed by Darin Fisher.

        Making Chromium select popups not steal activation from the browser.
        Select popups are now like autocomplete popups, shown in non-activated
        windows.
        https://bugs.webkit.org/show_bug.cgi?id=36062

        * page/chromium/ChromeClientChromium.h:
        * platform/chromium/PopupMenuChromium.cpp:
        (WebCore::):
        (WebCore::PopupListBox::setMaxHeight):
        (WebCore::PopupListBox::disconnectClient):
        (WebCore::PopupListBox::PopupListBox):
        (WebCore::PopupContainer::create):
        (WebCore::PopupContainer::PopupContainer):
        (WebCore::PopupContainer::showPopup):
        (WebCore::PopupContainer::showExternal):
        (WebCore::PopupContainer::hidePopup):
        (WebCore::PopupContainer::layout):
        (WebCore::PopupContainer::chromeClientChromium):
        (WebCore::PopupListBox::hidePopup):
        (WebCore::PopupListBox::layout):
        (WebCore::PopupMenu::~PopupMenu):
        (WebCore::PopupMenu::show):
        * platform/chromium/PopupMenuChromium.h:
        (WebCore::PopupItem::):
        (WebCore::PopupItem::PopupItem):
        (WebCore::PopupContainerSettings::):
        (WebCore::PopupContainer::):
        (WebCore::PopupContainer::listBox):
        (WebCore::PopupContainer::popupType):

2010-03-10  David Levin  <levin@chromium.org>

        Reviewed by Oliver Hunt.

        Need to move items that CanvasRenderingContext2D depends on into CanvasSurface.
        https://bugs.webkit.org/show_bug.cgi?id=35453

        Prepartory changes to allow for an OffscreenCanvas which may be used in a worker
        or outside of the DOM.

        No change in functionality, so new tests.

        * dom/CanvasSurface.cpp: Moved functionality that CanvasRenderingContext2D depends on
        into this class (and removed dependencies on document/html element).
        (WebCore::CanvasSurface::CanvasSurface):
        (WebCore::CanvasSurface::~CanvasSurface): Put the desctructor in the cpp file
        to avoid needing access to ~ImageBuffer in the header file.
        (WebCore::CanvasSurface::setSurfaceSize): Does basic items needed
        when the size changes. It is protected to force outside callers to go
        through HTMLCanvasElement::setSize.
        (WebCore::CanvasSurface::toDataURL): Just moved from HTMLCanvasElement and
        made a note about a method to fix for worker usage.
        (WebCore::CanvasSurface::willDraw): Made this virtual to allow an overide
        which uses the renderbox and tracks a dirtyRect.
        (WebCore::CanvasSurface::convertLogicalToDevice): Moved and changed to
        rely on a member variable for page scale (to avoid using the document).
        (WebCore::CanvasSurface::createImageBuffer):
        (WebCore::CanvasSurface::drawingContext): Simple move from HTMLCanvasElement.
        (WebCore::CanvasSurface::buffer): Ditto.
        (WebCore::CanvasSurface::baseTransform): Ditto.
        * dom/CanvasSurface.h:
        (WebCore::CanvasSurface::width): Simple move from HTMLCanvasElement.
        (WebCore::CanvasSurface::height): Ditto.
        (WebCore::CanvasSurface::size): Ditto.
        (WebCore::CanvasSurface::setOriginTainted): Ditto.
        (WebCore::CanvasSurface::originClean): Ditto.
        (WebCore::CanvasSurface::hasCreatedImageBuffer): Ditto (with small name change).
        * html/HTMLCanvasElement.cpp:
        (WebCore::HTMLCanvasElement::HTMLCanvasElement): Pass in the scale factor to CanvasSurface
        so it doesn't need the document.
        (WebCore::HTMLCanvasElement::willDraw): Moved the relevant portion to CanvasSurface.
        (WebCore::HTMLCanvasElement::reset): Small changes due to refactoring.
        (WebCore::HTMLCanvasElement::paint): Ditto.
        * html/HTMLCanvasElement.h:
        (WebCore::HTMLCanvasElement::setSize): Ditto.
        * platform/MIMETypeRegistry.cpp:
        (WebCore::MIMETypeRegistry::isSupportedImageMIMETypeForEncoding): Added assert
        to verify that this is only called on the main thread.
        * platform/graphics/Image.cpp:
        (WebCore::Image::nullImage): Ditto.
        * platform/graphics/cg/ImageBufferCG.cpp:
        (WebCore::utiFromMIMEType): Ditto.

2010-03-24  Alexander Pavlov  <apavlov@chromium.org>

        Reviewed by Pavel Feldman.

        Inspector: XML Tags should not be converted to lowercase
        https://bugs.webkit.org/show_bug.cgi?id=28600

        * inspector/front-end/ElementsPanel.js:
        (WebInspector.ElementsPanel.prototype.updateBreadcrumb):
        (WebInspector.ElementsPanel.prototype.decorateNodeLabel):
        * inspector/front-end/ElementsTreeOutline.js:
        (WebInspector.ElementsTreeOutline.prototype.nodeNameToCorrectCase):
        (WebInspector.ElementsTreeElement.prototype._updateChildren):
        (WebInspector.ElementsTreeElement.prototype._nodeTitleInfo):

2010-03-03  Kenneth Rohde Christiansen  <kenneth@webkit.org>

        Reviewed by Antti Koivisto.

        Add support for DOM Level 3 Custom Event
        http://www.w3.org/TR/DOM-Level-3-Events

        V8 Generator change by Nate Chapin <japhet@chromium.org>, Thanks!

        Test: fast/events/custom-event.html

        * DerivedSources.cpp:
        * GNUmakefile.am:
        * WebCore.gypi:
        * WebCore.pri:
        * WebCore.pro:
        * WebCore/DerivedSources.make:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSEventCustom.cpp:
        (WebCore::toJS):
        * bindings/scripts/CodeGeneratorJS.pm:
        * bindings/scripts/CodeGeneratorV8.pm:
        * dom/CustomEvent.cpp: Added.
        (WebCore::CustomEvent::CustomEvent):
        (WebCore::CustomEvent::initCustomEvent):
        (WebCore::CustomEvent::isCustomEvent):
        * dom/CustomEvent.h: Added.
        (WebCore::CustomEvent::create):
        (WebCore::CustomEvent::detail):
        * dom/Document.cpp:
        (WebCore::Document::createEvent):
        * dom/Event.cpp:
        (WebCore::Event::isCustomEvent):
        * dom/Event.h:

2010-03-24  Alexander Pavlov  <apavlov@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: Error when highlighting JavaScript with an invalid mime type
        https://bugs.webkit.org/show_bug.cgi?id=36530

        * inspector/front-end/SourceTokenizer.js:
        (WebInspector.SourceTokenizer.Registry):
        * inspector/front-end/SourceView.js:
        (WebInspector.SourceView.prototype._contentLoaded):
        (WebInspector.SourceView.prototype._canonicalMimeType):
        * inspector/front-end/TextEditorHighlighter.js:
        (WebInspector.TextEditorHighlighter):

2010-03-24  Pavel Feldman  <pfeldman@chromium.org>

        Not reviewed. Chromium test fix: added a frameCount check to the
        debugger function call.

        * bindings/v8/V8Proxy.cpp:
        (WebCore::V8Proxy::createUtilityContext):

2010-03-19  Miikka Heikkinen  <miikka.heikkinen@digia.com>

        Reviewed by Simon Hausmann.

        [Qt] Support for QT_LIBINFIX in Symbian builds

        Configuring Qt with -qtlibinfix parameter will enable installing
        an alternate version of Qt on devices that already have it on ROM.
        This patch provides support for infixed builds of Webkit.

        * WebCore.pro:

2010-03-24  Kent Tamura  <tkent@chromium.org>

        Reviewed by Darin Adler.

        Make Icon::createIconForFiles() optional.
        https://bugs.webkit.org/show_bug.cgi?id=35072

        r54923 made Icon::createIconForFiles() deprecated. However moving
        existing icon loading code to outside of WebCore is not good.  So,
        we assume:
        - ChromeClient::chooseIconForFiles(), renamed from iconForFiles(), is
          the primary API to load icons.
        - Icon::createIconForFiles() is an optional API to help
          implementing ChromeClient::iconForFiles().

        This patch removes a call to Icon::createIconForFiles() from
        FileChooser::loadIcon(), and ChromeClient::chooseIconForFiles() of
        non-Chromium ports calls Icon::createIconForFiles().

        * WebCore.base.exp: Export FileChooser::iconLoaded(),
          Icon::createIconForFiles(), and Icon::~Icon().
        * WebCore.xcodeproj/project.pbxproj: Export Icon.h
        * loader/EmptyClient.h: Rename iconForFiles() to chooseIconForFiles().
        * page/Chrome.cpp: ditto.
        * page/Chrome.h: ditto.
        * page/ChromeClient.h: ditto.
        * platform/FileChooser.cpp:
        (WebCore::FileChooser::loadIcon):
        * platform/graphics/Icon.h: Remove a comment on createIconForFiles().
        * platform/graphics/chromium/IconChromiumLinux.cpp: Remove createIconForFiles().
        * platform/graphics/chromium/IconChromiumMac.cpp: ditto.
        * platform/graphics/chromium/IconChromiumWin.cpp: ditto.
        * rendering/RenderFileUploadControl.cpp: Rename iconForFiles() to chooseIconForFiles().
        * rendering/RenderFileUploadControl.h: ditto.

2010-03-23  Dan Bernstein  <mitz@apple.com>

        Fixed typos.

        * manual-tests/plugin-visible-rect-change.html:

2010-03-23  Dan Bernstein  <mitz@apple.com>

        Reviewed by John Sullivan.

        WebCore part of
        <rdar://problem/7197736> Plug-in clip rect does not update when overflow
        clip changes
        https://bugs.webkit.org/show_bug.cgi?id=36479.

        * manual-tests/plugin-visible-rect-change.html: Added.
        * platform/mac/WidgetMac.mm:
        (WebCore::WidgetPrivate::WidgetPrivate): Added previousVisibleRect.
        (WebCore::Widget::setFrameRect): If the visible rect changed but the
        frame rect did not, send a -visibleRectDidChange message to the view,
        if it responds to it.
        (WebCore::Widget::releasePlatformWidget): Reset previousVisibleRect.
        * rendering/RenderWidget.cpp:
        (WebCore::RenderWidget::setWidgetGeometry): Track changes to the clip rect
        imposed by the enclosing layer. Call Widget::setFrameRect when it changes,
        even if the frame rect did not.
        * rendering/RenderWidget.h:
        (WebCore::RenderWidget::windowClipRect): Added this accessor.

2010-03-23  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Dan Bernstein.

        Assertion ASSERTION FAILED: rootLayer == m_clipRectsRoot at hulu.com
        https://bugs.webkit.org/show_bug.cgi?id=34065
        
        Fix another cause of assertions related to the clip rects root. Embeds
        with zero size caused the overlap testing to fail, yet we require them to work
        for correct compositing, so when the composited bounds is empty, use a 1x1 rect
        for overlap testing.

        Test: compositing/geometry/empty-embed-rects.html

        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::addToOverlapMap):
        (WebCore::RenderLayerCompositor::computeCompositingRequirements):

2010-03-23  David Levin  <levin@chromium.org>

        Reviewed by Nate Chapin.

        [chromium] XMLHttpRequest.send sends 'undefined' string when passed undefined value.
        https://bugs.webkit.org/show_bug.cgi?id=36506

        Test: http/tests/xmlhttprequest/send-undefined-and-null.html

        * bindings/v8/custom/V8XMLHttpRequestCustom.cpp:
        (WebCore::isDocumentType): Unrelated style fix: fixed the casing of the method.
        (WebCore::V8XMLHttpRequest::sendCallback): Added check for null/undefined to do the send.
        This mirrors what is done in the JSC bindings. Previously, sending 'null' worked because
        the last case, which did "toWebCoreStringWithNullCheck", resulted in sending an empty
        request body.

2010-03-23  Chris Evans  <cevans@chromium.org>

        Reviewed by Darin Adler.

        Fix hard-to-see crash due to incorrect libxml API usage.

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

        Test: fast/text/bad-encoding.html

        * dom/XMLTokenizerLibxml2.cpp:
        (WebCore::XMLTokenizer::doEnd): Avoid operations on a closed context.

2010-03-23  Nate Chapin  <japhet@chromium.org>

        Unreviewed, revert r56376.

        This revision introduced a crash in a couple of layout tests
        on Chromium Linux.

        * page/chromium/ChromeClientChromium.h:
        * platform/chromium/PopupMenuChromium.cpp:
        (WebCore::):
        (WebCore::PopupContainer::create):
        (WebCore::PopupContainer::PopupContainer):
        (WebCore::PopupContainer::showPopup):
        (WebCore::PopupContainer::showExternal):
        (WebCore::PopupContainer::hidePopup):
        (WebCore::PopupMenu::show):
        * platform/chromium/PopupMenuChromium.h:
        (WebCore::PopupItem::):
        (WebCore::PopupItem::PopupItem):
        (WebCore::PopupContainerSettings::):
        (WebCore::PopupContainer::listBox):

2010-03-23  David Hyatt  <hyatt@apple.com>

        Reviewed by Simon Fraser and Darin Adler.

        https://bugs.webkit.org/show_bug.cgi?id=36272, make sure nth-child can work when the portion with "n" is omitted.

        Added fast/css/nth-child-implied-step.html

        * css/CSSGrammar.y:
        * css/tokenizer.flex:

2010-03-23  Darin Adler  <darin@apple.com>

        Reviewed by Sam Weinig.

        Reduce and straighten internal use of DOMImplementation
        https://bugs.webkit.org/show_bug.cgi?id=36501

        * WebCore.xcodeproj/project.pbxproj: Xcode decided to
        re-sort this file.

        * dom/Clipboard.cpp: Removed unneeded include of DOMImplementation.h.

        * dom/DOMImplementation.cpp: Removed unneeded createDocument and
        createHTMLDocument functions. These should be done directly instead
        of involving the DOMImplementation class.
        * dom/DOMImplementation.h: Ditto.

        * dom/DocumentType.cpp: Removed unneeded include of DOMImplementation.h.

        * html/HTMLViewSourceDocument.cpp:
        (WebCore::HTMLViewSourceDocument::createTokenizer): Don't allocate a
        DOMImplementation object just to use a class member function.

        * loader/CachedFont.cpp: Removed unneeded include of DOMImplementation.h.

        * xml/XMLHttpRequest.cpp:
        (WebCore::XMLHttpRequest::responseXML): Use Document::create to create a
        new document instead of involving DOMImplementation.
        * xml/XSLTProcessor.cpp:
        (WebCore::XSLTProcessor::createDocumentFromSource): Ditto. And in the case
        where we do need to call DOMImplementation to interpret the MIME type,
        don't allocate a DOMImplementation object just to use a class member
        function.

2010-03-23  Luiz Agostini  <luiz.agostini@openbossa.org>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] Maemo5 theme - all <select> elements should be rendered as menu lists.
        https://bugs.webkit.org/show_bug.cgi?id=36367

        Enabling NO_LISTBOX_RENDERING in WebCore.pri for Maemo5.

        * WebCore.pri:

2010-03-22  Joseph Pecoraro  <joepeck@webkit.org>

        Reviewed by David Kilzer.

        Upstream iPhone KeyEvent platform code and share with Mac platform
        https://bugs.webkit.org/show_bug.cgi?id=35870

        * platform/iphone/KeyEventCodesIPhone.h: Improper comment for #endif.
        * platform/iphone/KeyEventIPhone.mm: Fixed headers.

2010-03-23  David Hyatt  <hyatt@apple.com>

        Reviewed by Jeremy Orlow.

        https://bugs.webkit.org/show_bug.cgi?id=36277, make sure nth-child supports the positive unary prefix (+) as well as the negative
        one (-).

        Added fast/css/nth-child-unary-prefix.html

        * css/tokenizer.flex:

2010-03-23  Andrey Kosyakov  <caseq@chromium.org>

        Reviewed by Dmitry Titov.

        Change notification sent to inspector frontend on workers creation / destruction
        to be posted asynchronously to avoid JS reenterability problems. Also, renamed
        willDestroyWorker to didDestroyWorker to reflect that it gets called later and got
        rid of explicit IDs for workers (use addresses instead).
        https://bugs.webkit.org/show_bug.cgi?id=36213

        * inspector/InjectedScriptHost.cpp:
        (WebCore::InjectedScriptHost::didDestroyWorker):
        * inspector/InjectedScriptHost.h:
        * inspector/InjectedScriptHost.idl:
        * inspector/InspectorController.cpp:
        (WebCore::PostWorkerNotificationToFrontendTask::create):
        (WebCore::PostWorkerNotificationToFrontendTask::PostWorkerNotificationToFrontendTask):
        (WebCore::PostWorkerNotificationToFrontendTask::performTask):
        (WebCore::InspectorController::postWorkerNotificationToFrontend):
        (WebCore::InspectorController::didCreateWorker):
        (WebCore::InspectorController::didDestroyWorker):
        * inspector/InspectorController.h:
        (WebCore::InspectorController::):
        * inspector/InspectorFrontend.cpp:
        (WebCore::InspectorFrontend::didDestroyWorker):
        * inspector/InspectorFrontend.h:
        * inspector/InspectorWorkerResource.h:
        (WebCore::InspectorWorkerResource::create):
        (WebCore::InspectorWorkerResource::id):
        (WebCore::InspectorWorkerResource::InspectorWorkerResource):
        * inspector/front-end/InjectedFakeWorker.js:
        (InjectedFakeWorker.FakeWorker.prototype.terminate):
        * inspector/front-end/WorkersSidebarPane.js:
        (WebInspector.didDestroyWorker):
        * workers/AbstractWorker.cpp:
        (WebCore::AbstractWorker::AbstractWorker):
        (WebCore::AbstractWorker::onDestroyWorker):
        * workers/AbstractWorker.h:
        (WebCore::AbstractWorker::asID):
        * workers/SharedWorker.cpp:
        (WebCore::SharedWorker::SharedWorker):
        * workers/Worker.cpp:
        (WebCore::Worker::Worker):

2010-03-22  David Hyatt  <hyatt@apple.com>

        Reviewed by Sam Weinig.

        https://bugs.webkit.org/show_bug.cgi?id=36266, support DOM Level 3 focusin/focusout events.  Add support for
        IE onfocusin/onfocusout extensions to HTML.  The old DOM level 2 names (DOMFocusIn/DOMFocusOut are still supported).

        Added fast/events/focusinout.html

        * dom/Document.cpp:
        (WebCore::Document::setFocusedNode):
        * dom/Event.cpp:
        (WebCore::Event::aliasedType):
        (WebCore::Event::hasAliasedType):
        * dom/Event.h:
        * dom/EventNames.h:
        * dom/EventTarget.cpp:
        (WebCore::EventTarget::fireEventListeners):
        * dom/EventTarget.h:
        * dom/Node.cpp:
        (WebCore::Node::dispatchUIEvent):
        * html/HTMLAttributeNames.in:
        * html/HTMLButtonElement.cpp:
        (WebCore::HTMLButtonElement::parseMappedAttribute):
        * html/HTMLElement.cpp:
        (WebCore::HTMLElement::parseMappedAttribute):
        * html/HTMLFormControlElement.cpp:
        (WebCore::HTMLTextFormControlElement::parseMappedAttribute):
        * html/HTMLFrameSetElement.cpp:
        (WebCore::HTMLFrameSetElement::parseMappedAttribute):
        * html/HTMLSelectElement.cpp:
        (WebCore::HTMLSelectElement::parseMappedAttribute):
        * svg/SVGElement.cpp:
        (WebCore::SVGElement::parseMappedAttribute):

2010-03-23  MORITA Hajime  <morrita@google.com>

        Reviewed by Alexey Proskuryakov.

        WebCore::SelectionController::setSelection NULL pointer
        https://bugs.webkit.org/show_bug.cgi?id=31545

        Added missing NULL-check that other APIs have.

        Test: svg/dom/frame-related-api-during-load.html

        * svg/SVGSVGElement.cpp:
        (WebCore::SVGSVGElement::deselectAll):

2010-03-23  Qi Zhang  <qi.2.zhang@nokia.com>

        Reviewed by Simon Hausmann.

        [Qt] LayoutTests/fast/canvas/fillrect_gradient.html failed
        https://bugs.webkit.org/show_bug.cgi?id=36444

        Handle duplicated or unsorted colorStop at platformDestory

        * platform/graphics/qt/GradientQt.cpp:
        (WebCore::Gradient::platformGradient):

2010-03-23  Julien Chaffraix  <jchaffraix@webkit.org>

        Unreviewed build fix.

        Try to make the window buildbot happy.

        * xml/XMLHttpRequestProgressEventThrottle.cpp:
        * xml/XMLHttpRequestProgressEventThrottle.h: Move initialization of the
        static const in the cpp file.

2010-03-23  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Timothy Hatcher.

        Web Inspector: make gear menu appear on styles panel at all times.

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

        * inspector/front-end/inspector.css:

2010-03-23  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Timothy Hatcher.

        Web Inspector: render nodes in inherited style bars as links.

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

        * English.lproj/localizedStrings.js:
        * inspector/front-end/BreakpointsSidebarPane.js:
        (WebInspector.BreakpointsSidebarPane.prototype._appendBreakpointElement.breakpointClicked):
        (WebInspector.BreakpointsSidebarPane.prototype._appendBreakpointElement):
        * inspector/front-end/StylesSidebarPane.js:
        (WebInspector.StylesSidebarPane.prototype._update.else.insertInheritedNodeSeparator):
        (WebInspector.StylesSidebarPane.prototype._update):
        (WebInspector.StylesSidebarPane.prototype._selectNode):
        * inspector/front-end/inspector.js:

2010-03-23  Julien Chaffraix  <jchaffraix@webkit.org>

        Reviewed by Alexey Proskuryakov.

        [XHR] onProgress event needs to be dispatched according to what the specification states
        https://bugs.webkit.org/show_bug.cgi?id=18654

        Test: http/tests/xmlhttprequest/xmlhttprequest-50ms-download-dispatch.html

        * Android.mk:
        * GNUmakefile.am:
        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        Added XMLHttpRequestProgressEventThrottle to the build systems.

        * xml/XMLHttpRequest.cpp:
        (WebCore::XMLHttpRequest::XMLHttpRequest): Created the throttle.
        (WebCore::XMLHttpRequest::callReadyStateChangeListener): The 'readyState' event are
        dispatched using the XMLHttpRequestProgressEventThrottle now. For the DONE state, we
        need to flush any pending progress event as we do not want it to be dispatched after
        the DONE readyState event.
        (WebCore::XMLHttpRequest::createRequest): Made this event use the
        XMLHttpRequestProgressEventThrottle for event dispatching.
        (WebCore::XMLHttpRequest::abort): Ditto.
        (WebCore::XMLHttpRequest::networkError): Ditto.
        (WebCore::XMLHttpRequest::abortError): Ditto.
        (WebCore::XMLHttpRequest::didReceiveData): Ditto. Also fixed a potential warning.
        (WebCore::XMLHttpRequest::suspend):
        (WebCore::XMLHttpRequest::resume): Implemented the logic for suspend / resume.
        * xml/XMLHttpRequest.h:
        * xml/XMLHttpRequestProgressEventThrottle.cpp: Added.
        (WebCore::XMLHttpRequestProgressEventThrottle::XMLHttpRequestProgressEventThrottle):
        (WebCore::XMLHttpRequestProgressEventThrottle::~XMLHttpRequestProgressEventThrottle):
        (WebCore::XMLHttpRequestProgressEventThrottle::dispatchProgressEvent): Implemented the bulk
        of the event throttling here: we use a timer to do so, as long as the timer is active it means
        that events are coming faster than the throttling time and we coalesce them.
        (WebCore::XMLHttpRequestProgressEventThrottle::dispatchEvent): Generic method to dispatch an event.
        (WebCore::XMLHttpRequestProgressEventThrottle::flushProgressEvent): Called when we want to dispatch
        any pending events and stopping any further dispatching.
        (WebCore::XMLHttpRequestProgressEventThrottle::dispatchPausedEvent): Used to dispatch the event
        that was queued due to the object being suspended.
        (WebCore::XMLHttpRequestProgressEventThrottle::fired): Used to dispatch any coalesced event.
        (WebCore::XMLHttpRequestProgressEventThrottle::hasEventToDispatch): Used to check if we have
        an event to dispatch.
        (WebCore::XMLHttpRequestProgressEventThrottle::suspend): Marked the object as suspended.
        (WebCore::XMLHttpRequestProgressEventThrottle::resume): Dispatched the event that was queued.
        * xml/XMLHttpRequestProgressEventThrottle.h: Added.
        (WebCore::):
        (WebCore::XMLHttpRequestProgressEventThrottle::suspended):

2010-03-23  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Timothy Hatcher.

        Web Inspector: Element inspector search funtion: Error dispatching: performSearch.

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

        Test: inspector/elements-panel-search.html

        * inspector/front-end/ElementsPanel.js:
        (WebInspector.ElementsPanel.prototype.performSearch):
        (WebInspector.ElementsPanel.prototype.addNodesToSearchResult):
        * inspector/front-end/InjectedScript.js:
        (injectedScriptConstructor.):
        (injectedScriptConstructor):

2010-03-23  Qi Zhang  <qi.2.zhang@nokia.com>

        Reviewed by Simon Hausmann.

        [Qt]  fast/canvas/patternfill-repeat.html failed.
        https://bugs.webkit.org/show_bug.cgi?id=34477

        Change Pattern to expose the repeatX and repeatY
        At GraphicsContextQt to apply repeatX and repeatY

        * platform/graphics/Pattern.h:
        (WebCore::Pattern::repeatX):
        (WebCore::Pattern::repeatY):
        * platform/graphics/qt/GraphicsContextQt.cpp:
        (WebCore::GraphicsContext::drawLine):
        (WebCore::GraphicsContext::fillRect):
        (WebCore::GraphicsContext::rotate):

2010-03-23  Alex Milowski  <alex@milowski.com>

        Reviewed by Kenneth Rohde Christiansen.

        Removed the use of beta STIX fonts.

        * css/mathml.css:

2010-03-23  Gustavo Noronha Silva  <gustavo.noronha@collabora.co.uk>

        Reviewed by Holger Freyther.

        [GTK] Does not build with latest GTK+ development release
        https://bugs.webkit.org/show_bug.cgi?id=36398

        Fix building with newest GTK+ versions.

        * GNUmakefile.am:
        * platform/gtk/GtkPluginWidget.cpp:
        (WebCore::GtkPluginWidget::invalidateRect):
        (WebCore::GtkPluginWidget::paint):
        * platform/gtk/GtkVersioning.h: Added.
        * platform/gtk/PlatformScreenGtk.cpp:
        (WebCore::getVisual):
        (WebCore::screenRect):
        (WebCore::screenAvailableRect):
        * platform/gtk/ScrollbarGtk.cpp:
        (ScrollbarGtk::paint):
        * plugins/gtk/gtk2xtbin.c:
        (gtk_xtbin_set_position):
        (gtk_xtbin_unrealize):

2010-03-23  Laszlo Gombos  <laszlo.1.gombos@nokia.com>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] Remove support for Qt v4.4
        https://bugs.webkit.org/show_bug.cgi?id=36389

        No new tests as there is no new functionality.

        * WebCore.pri:
        * WebCore.pro:
        * platform/network/qt/ResourceHandleQt.cpp:
        (WebCore::ResourceHandle::willLoadFromCache):
        * platform/qt/CookieJarQt.cpp:
        (WebCore::setCookies):
        (WebCore::cookies):
        * platform/qt/KURLQt.cpp:
        (WebCore::KURL::operator QUrl):
        * platform/qt/ScrollbarThemeQt.cpp:
        (WebCore::ScrollbarThemeQt::paintScrollCorner):
        * plugins/mac/PluginViewMac.cpp:

2010-03-23  Kent Tamura  <tkent@chromium.org>

        Reviewed by Adam Barth.

        Add checks if setNeedsWillValidateCheck() and
        setNeedsValidityCheck() are called correctly.
        https://bugs.webkit.org/show_bug.cgi?id=34924

        Introduce HTMLFormControlElement::m_willValidate and
        m_isValid. They are the caches of willValidate() and
        isValidFormControlElement(). setNeedsWillValidateCheck() updates
        m_willValidate and setNeedsValidityCheck() updates m_isValid.

        willValidate() and isValidFormControlElement() have assertions to
        check m_willvalidate or m_isValid has the correct state. If
        setNeedsWillValidateCheck() or setNeedsValidityCheck() is needed
        to be called and is not called, these assertions fail.

        * html/HTMLButtonElement.h:
        (WebCore::HTMLButtonElement::recalcWillValidate):
        * html/HTMLFieldSetElement.h:
        (WebCore::HTMLFieldSetElement::recalcWillValidate):
        * html/HTMLFormControlElement.cpp:
        (WebCore::HTMLFormControlElement::HTMLFormControlElement):
        (WebCore::HTMLFormControlElement::parseMappedAttribute):
        (WebCore::HTMLFormControlElement::recalcWillValidate):
        (WebCore::HTMLFormControlElement::willValidate):
        (WebCore::HTMLFormControlElement::setNeedsWillValidateCheck):
        (WebCore::HTMLFormControlElement::validationMessage):
        (WebCore::HTMLFormControlElement::isValidFormControlElement):
        (WebCore::HTMLFormControlElement::setNeedsValidityCheck):
        * html/HTMLFormControlElement.h:
        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::setInputType):
        (WebCore::HTMLInputElement::parseMappedAttribute):
        (WebCore::HTMLInputElement::setValue):
        (WebCore::HTMLInputElement::recalcWillValidate):
        * html/HTMLInputElement.h:
        * html/HTMLTextAreaElement.cpp:
        (WebCore::HTMLTextAreaElement::setNonDirtyValue):

2010-03-22  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Dave Hyatt.

        Web Inspector: display CSS selector source line in the styles sidebar pane.

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

        This change adds a sourceLine field into the CSSStyleRule that is populated
        from within the parser. CSSParser is now keeping track of the line numbers
        and last selector line number that is being used while creating CSSStyleRules.

        Test: inspector/styles-source-lines.html

        * css/CSSGrammar.y:
        * css/CSSParser.cpp:
        (WebCore::CSSParser::CSSParser):
        (WebCore::CSSParser::lex):
        (WebCore::CSSParser::countLines):
        (WebCore::CSSParser::createStyleRule):
        * css/CSSParser.h:
        (WebCore::CSSParser::updateLastSelectorLine):
        * css/CSSStyleRule.cpp:
        (WebCore::CSSStyleRule::CSSStyleRule):
        * css/CSSStyleRule.h:
        (WebCore::CSSStyleRule::create):
        (WebCore::CSSStyleRule::sourceLine):
        * css/tokenizer.flex:
        * inspector/InspectorDOMAgent.cpp:
        (WebCore::InspectorDOMAgent::buildObjectForRule):
        * inspector/front-end/DOMAgent.js:
        (WebInspector.CSSStyleDeclaration.parseRule):
        * inspector/front-end/StylesSidebarPane.js:
        (WebInspector.StylePropertiesSection):

2010-03-22  Qi Zhang  <qi.2.zhang@nokia.com>

        Reviewed by Laszlo Gombos.

        [Qt] Fix arc function in canvas
        https://bugs.webkit.org/show_bug.cgi?id=36296

        Based on HTLM5 spec (4.8.10.1.8 Complex shapes), arc function should draw a line to previous point, not only the arc.

        * platform/graphics/qt/PathQt.cpp:
        (WebCore::Path::addArc):

2010-03-19  Abhishek Arya  <inferno@chromium.org>

        Reviewed by Adam Barth.

        https://bugs.webkit.org/show_bug.cgi?id=36339
        Off-by-one memory corruption fix for long invalid websockets upgrade header

        Test: websocket/tests/long-invalid-header.html

        * websockets/WebSocketHandshake.cpp:
        (WebCore::WebSocketHandshake::readServerHandshake):

2010-03-22  Fumitoshi Ukai  <ukai@chromium.org>

        Unreviewed build fix for Chromim Mac at r56376

        Fix initializer order  of PopupContainer.

        * platform/chromium/PopupMenuChromium.cpp:
        (WebCore::PopupContainer::PopupContainer):

2010-03-22  Jay Campan  <jcampan@google.com>

        Reviewed by Darin Fisher.

        Making Chromium select popups not steal activation from the browser.
        Select popups are now like autocomplete popups, shown in non-activated
        windows.
        https://bugs.webkit.org/show_bug.cgi?id=36062

        * page/chromium/ChromeClientChromium.h:
        * platform/chromium/PopupMenuChromium.cpp:
        (WebCore::):
        (WebCore::PopupContainer::create):
        (WebCore::PopupContainer::PopupContainer):
        (WebCore::PopupContainer::~PopupContainer):
        (WebCore::PopupContainer::showPopup):
        (WebCore::PopupContainer::showExternal):
        (WebCore::PopupContainer::hidePopup):
        (WebCore::PopupMenu::show):
        * platform/chromium/PopupMenuChromium.h:
        (WebCore::PopupContainer::):
        (WebCore::PopupContainer::popupType):

2010-03-22  Dmitry Titov  <dimich@chromium.org>

        Reviewed by Nate Chapin.

        [v8] Crash if the worker is terminated before its initial script is executed.
        https://bugs.webkit.org/show_bug.cgi?id=36336

        Test: fast/workers/termination-early.html

        * bindings/v8/WorkerContextExecutionProxy.cpp:
        (WebCore::WorkerContextExecutionProxy::initContextIfNeeded): Check for 0 context. When terminated, the v8 heap initialization returns 0.
        (WebCore::WorkerContextExecutionProxy::evaluate): Don't execute script if initialization failed.
        * bindings/v8/WorkerContextExecutionProxy.h:

2010-03-22  Andrey Kosyakov  <caseq@chromium.org>

        Reviewed by Pavel Feldman.

        Support creation of fake workers before document is loaded by deferring
        attaching of fake workers iframe until document is loaded and buffering all
        messages addressed to worker.
        https://bugs.webkit.org/show_bug.cgi?id=36445

        * inspector/front-end/InjectedFakeWorker.js:
        (InjectedFakeWorker.FakeWorker.prototype.postMessage):
        (InjectedFakeWorker.FakeWorker.prototype._buildWorker):
        (InjectedFakeWorker.FakeWorker.prototype._attachWorkerFrameToDocument):
        (InjectedFakeWorker.FakeWorker.prototype._onWorkerFrameLoaded):

2010-03-22  Darin Fisher  <darin@chromium.org>

        Reviewed by Brady Eidson.

        HistoryController::replaceState() should modify m_currentItem
        instead of the current HistoryItem of the BackForwardList.

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

        Test: fast/loader/stateobjects/replacestate-in-iframe.html

        * loader/HistoryController.cpp:
        (WebCore::HistoryController::replaceState):

2010-03-22  Joseph Pecoraro  <joepeck@webkit.org>

        Reviewed by David Kilzer.

        Upstream Part of the iPhone Platform sharing code with the Mac Platform
        https://bugs.webkit.org/show_bug.cgi?id=35870
        <rdar://problem/7707283> and <rdar://problem/7707318>

        Part 3 of 3: Shared code between iphone and mac. The shared code was
        refactored to be usable by both platforms without platform specific
        typing, meaning no NSEvent versus WebEvent special cases.

          Shared code usable by either mac or iphone platforms.

        * platform/cocoa/KeyEventCocoa.h:
        * platform/cocoa/KeyEventCocoa.mm:
        (WebCore::keyIdentifierForCharCode):
        (WebCore::windowsKeyCodeForKeyCode):
        (WebCore::windowsKeyCodeForCharCode):

          Make use of the shared code. Keep anything platform specific in the
          original file before calling the shared code.

        * platform/iphone/KeyEventIPhone.mm:
        (WebCore::keyIdentifierForKeyEvent):
        * platform/mac/KeyEventMac.mm:
        (WebCore::keyIdentifierForKeyEvent):
        (WebCore::windowsKeyCodeForKeyEvent):

2010-03-22  Kevin Decker  <kdecker@apple.com>

        Reviewed by Simon Fraser.

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

        * rendering/RenderEmbeddedObject.cpp:
        (WebCore::RenderEmbeddedObject::RenderEmbeddedObject): Fix a find/repalce mistake from my earlier patch.
        Rename m_setShowsMissingPluginIndicator -> m_showsMissingPluginIndicator. 
        (WebCore::RenderEmbeddedObject::updateWidget): Don't update the widget if we're showing
        the missing plug-in indicator.
        (WebCore::RenderEmbeddedObject::paint):Fix a find/repalce mistake from my earlier patch.
        Rename m_setShowsMissingPluginIndicator -> m_showsMissingPluginIndicator. 
        (WebCore::RenderEmbeddedObject::paintReplaced): Ditto.
        * rendering/RenderEmbeddedObject.h: Ditto.
        (WebCore::RenderEmbeddedObject::setShowsMissingPluginIndicator): Ditto.
        (WebCore::RenderEmbeddedObject::showsMissingPluginIndicator): Ditto.

2010-03-22  Joseph Pecoraro  <joepeck@webkit.org>

        Reviewed by David Kilzer.

        Upstream Part of the iPhone Platform sharing code with the Mac Platform
        https://bugs.webkit.org/show_bug.cgi?id=35870
        <rdar://problem/7707283>

        Part 2 of 3: No changes other than moving code around.
        Copied KeyEvent function from platform/mac to a platform/cocoa shared directory.

        * WebCore.xcodeproj/project.pbxproj: Added cocoa group and new files.
        * platform/cocoa/KeyEventCocoa.h: Added.
        * platform/cocoa/KeyEventCocoa.mm: Copied from WebCore/platform/mac/KeyEventMac.mm.
        (WebCore::keyIdentifierForKeyEvent):
        (WebCore::windowsKeyCodeForKeyEvent): Include the shared code.
        * platform/mac/KeyEventMac.mm:

2010-03-22  Joseph Pecoraro  <joepeck@webkit.org>

        Reviewed by David Kilzer.

        Part 1 of 3: Upstream iPhone KeyEvent platform code and share with Mac platform
        https://bugs.webkit.org/show_bug.cgi?id=35870
        <rdar://problem/7707283>

        * WebCore.xcodeproj/project.pbxproj: Added iphone group and new files.
        * platform/iphone: Added.
        * platform/iphone/KeyEventCodesIPhone.h: Added.
        * platform/iphone/KeyEventIPhone.mm: Added. Ensure PLATFORM(IPHONE)
        * platform/mac/KeyEventMac.mm: Ensure PLATFORM(MAC)

2010-03-22  Kevin Decker  <kdecker@apple.com>
    
        Attempt to fix the Leopard build.
        * rendering/RenderEmbeddedObject.cpp: Add ".f" to contants.

2010-03-22  Justin Schuh  <jschuh@chromium.org>

        Reviewed by Dirk Schulze.

        Out of bounds read in SVG feColorMatrix filter
        https://bugs.webkit.org/show_bug.cgi?id=32714

        Prevents an invalid read when a valid values attribute is not
        supplied for an feColorMatrix SVG filter. Also fixes general
        handling of missing or invalid values attribute.

        Tests: svg/filters/feColorMatrix-invalid-value.svg
               svg/filters/feColorMatrix-values.svg

        * svg/SVGFEColorMatrixElement.cpp:
        (WebCore::SVGFEColorMatrixElement::build):

2010-03-22  Philippe Normand  <pnormand@igalia.com>

        Reviewed by Eric Carlson.

        [GStreamer] Use ImageBuffer API to do painting
        https://bugs.webkit.org/show_bug.cgi?id=35783

        New ImageGStreamer class abstracting the conversion of GStreamer
        buffers to cairo surfaces. Using this makes the painting code of
        the player more generic.

        * GNUmakefile.am:
        * platform/graphics/gstreamer/ImageGStreamer.h: Added.
        (WebCore::ImageGStreamer::image):
        * platform/graphics/gstreamer/ImageGStreamerCairo.cpp: Added.
        (ImageGStreamer::createImage):
        (ImageGStreamer::ImageGStreamer):
        (ImageGStreamer::~ImageGStreamer):
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:
        (WebCore::MediaPlayerPrivate::paint):
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.h:

2010-03-22  Beth Dakin  <bdakin@apple.com>

        Reviewed by Darin Adler.

        Fix for <rdar://problem/7766437> With Web Inspector opened, a crash 
        occurs at Webcore:getMatchedCSSRules() when navigating to a 
        previous page

        defaultView() can legitimately by null (as it is in this case), so 
        it must be null-checked.

        * inspector/InspectorDOMAgent.cpp:
        (WebCore::InspectorDOMAgent::getStyles):
        (WebCore::InspectorDOMAgent::getComputedStyle):
        (WebCore::InspectorDOMAgent::getMatchedCSSRules):

2010-03-22  Kevin Decker  <kdecker@apple.com>

        Reviewed by Darin.

        https://bugs.webkit.org/show_bug.cgi?id=36328
        
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::loadPlugin): Call setShowsMissingPluginIndicator(true) in cases that fail
        to generate a widget.
        * rendering/RenderEmbeddedObject.cpp: Added new missing plug-in related static constants
        (WebCore::RenderEmbeddedObject::RenderEmbeddedObject): Initialize newly boolean to false.
        (WebCore::RenderEmbeddedObject::paint): Added.
        (WebCore::RenderEmbeddedObject::paintReplaced): Added. Draws a subtle rounded rectangle
        containing the text "Missing Plug-in".
        * rendering/RenderEmbeddedObject.h: Added the following two methods below.
        (WebCore::RenderEmbeddedObject::setShowsMissingPluginIndicator):
        (WebCore::RenderEmbeddedObject::showsMissingPluginIndicator):
        * rendering/RenderWidget.h: Moved paint(PaintInfo&, int, int) from private to protected.

2010-03-22  Jakub Wieczorek  <faw217@gmail.com>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] Phonon media backend: expose supported MIME types to WebCore

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

        MediaPlayerPrivate should expose the MIME types that are supported
        by the underlying backend in Phonon.

        * platform/graphics/qt/MediaPlayerPrivatePhonon.cpp:
        (WebCore::MediaPlayerPrivate::supportedTypesCache):
        (WebCore::MediaPlayerPrivate::getSupportedTypes):
        (WebCore::MediaPlayerPrivate::supportsType):
        * platform/graphics/qt/MediaPlayerPrivatePhonon.h:

2010-03-22  Alexander Pavlov  <apavlov@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: AuditRules still use getMatchedCSSRules as a part of the img-related audit.
        https://bugs.webkit.org/show_bug.cgi?id=36424

        * inspector/front-end/AuditRules.js:
        (WebInspector.AuditRules.ImageDimensionsRule.prototype.doRun):
        (WebInspector.AuditRules.ImageDimensionsRule.prototype.doRun.receivedImages):
        (WebInspector.AuditRules.ImageDimensionsRule.prototype.doRun.pushImageNodes):
        * inspector/front-end/InjectedScript.js:
        (injectedScriptConstructor):

2010-03-22  Darin Adler  <darin@apple.com>

        Reviewed by Dan Bernstein.

        TextBreakIteratorICU.cpp is incompatible with new UBreakIterator type in ICU 4.4
        https://bugs.webkit.org/show_bug.cgi?id=36381

        * platform/text/TextBreakIteratorICU.cpp:
        (WebCore::setUpIterator): Use reinterpret_cast instead of static_cast or relying
        on conversion to void*.
        (WebCore::textBreakFirst): Ditto.
        (WebCore::textBreakLast): Ditto.
        (WebCore::textBreakNext): Ditto.
        (WebCore::textBreakPrevious): Ditto.
        (WebCore::textBreakPreceding): Ditto.
        (WebCore::textBreakFollowing): Ditto.
        (WebCore::textBreakCurrent): Ditto.
        (WebCore::isTextBreak): Ditto.
        (WebCore::setUpIteratorWithRules): Ditto.

2010-03-22  Eric Carlson  <eric.carlson@apple.com>

        Reviewed by Sam Weinig.

        Typo in GPL license text
        https://bugs.webkit.org/show_bug.cgi?id=36442

        Fix typo - "aint with this library" -> "along with this library".

        * bindings/scripts/CodeGenerator.pm:
        * bindings/scripts/CodeGeneratorJS.pm:
        * bindings/scripts/CodeGeneratorObjC.pm:
        * bindings/scripts/CodeGeneratorV8.pm:
        * bindings/scripts/IDLParser.pm:
        * bindings/scripts/IDLStructure.pm:
        * bindings/scripts/generate-bindings.pl:

2010-03-22  Jakub Wieczorek  <jwieczorek@webkit.org>

        Reviewed by Simon Hausmann.

        [Qt] Don't construct a QLineEdit every time when painting a text field
        https://bugs.webkit.org/show_bug.cgi?id=36373

        Instead, keep one instance per RenderTheme around.

        * platform/qt/RenderThemeQt.cpp:
        (WebCore::findFrameLineWidth):

2010-03-22  Luiz Agostini  <luiz.agostini@openbossa.org>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] Multiselect Popup - adjusting QtAbstractWebPopup
        https://bugs.webkit.org/show_bug.cgi?id=36186

        QtAbstractWebPopup must provide new methods to be used by its descendants that
        wish to handle <select multiple> elements.

        * platform/qt/QtAbstractWebPopup.cpp:
        (WebCore::QtAbstractWebPopup::selectItem):
        (WebCore::QtAbstractWebPopup::multiple):
        * platform/qt/QtAbstractWebPopup.h:

2010-03-22  Alex Milowski  <alex@milowski.com>

        Reviewed by Kenneth Rohde Christiansen.

        Added basic support for mfrac (fractions)

        Test: mathml/presentation/fractions.xhtml

        * WebCore.xcodeproj/project.pbxproj:
        * mathml/MathMLInlineContainerElement.cpp:
        (WebCore::MathMLInlineContainerElement::createRenderer):
        * mathml/RenderMathMLFraction.cpp: Added.
        (WebCore::RenderMathMLFraction::RenderMathMLFraction):
        (WebCore::RenderMathMLFraction::updateFromElement):
        (WebCore::RenderMathMLFraction::addChild):
        * mathml/RenderMathMLFraction.h: Added.

2010-03-22  Kevin Decker  <kdecker@apple.com>

        Reviewed by John Sullivan.

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

        * page/mac/WebCoreViewFactory.h: Added -missingPluginText method 
        * platform/LocalizedStrings.h: Added missingPluginText()
        * platform/gtk/LocalizedStringsGtk.cpp: Likewise.
        * platform/mac/LocalizedStringsMac.mm: Same here.
        * platform/qt/Localizations.cpp: Ditto.

2010-03-22  Yury Semikhatsky  <yurys@chromium.org>

        Reviewed by Pavel Feldman.

        Handle worker exceptions in V8MessageHandler like it's done in regular documents. This way all worker exceptions will be logged in the console not only those which happen in event listeners. 

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

        * bindings/v8/V8AbstractEventListener.cpp:
        (WebCore::V8AbstractEventListener::invokeEventHandler): Removed explicit call to reportException.
        * bindings/v8/V8Utilities.cpp: reportException function was removed since it's not used.
        (WebCore::getScriptExecutionContext):
        * bindings/v8/V8Utilities.h:
        * bindings/v8/WorkerContextExecutionProxy.cpp:
        (WebCore::v8MessageHandler):
        (WebCore::WorkerContextExecutionProxy::initContextIfNeeded): Setup message handler when first worker context is created.

2010-03-22  Leandro Pereira  <leandro@profusion.mobi>

        Reviewed by Simon Hausmann.

        Add EFL-specific code to page/EventHandler.cpp.
        http://webkit.org/b/36306

        * page/EventHandler.cpp:

2010-03-22  Leandro Pereira  <leandro@profusion.mobi>

        Reviewed by Simon Hausmann.

        Add EFL-specific code to platform/DragImage.h and
        platform/DragData.h.
        http://webkit.org/b/36310

        * platform/DragImage.h:
        * platform/DragData.h:

2010-03-22  Leandro Pereira  <leandro@profusion.mobi>

        Reviewed by Simon Hausmann.

        Add EFL-specific code to platform/FileSystem.h.
        http://webkit.org/b/36313

        * platform/FileSystem.h:

2010-03-22  Leandro Pereira  <leandro@profusion.mobi>

        Reviewed by Simon Hausmann.

        Add EFL-specific code to platform/Cursor.h.
        http://webkit.org/b/36319

        * platform/Cursor.h:

2010-03-22  Leandro Pereira  <leandro@profusion.mobi>

        Reviewed by Simon Hausmann.

        Add EFL-specific code to platform/NotImplemented.h.
        http://webkit.org/b/36320

        * platform/NotImplemented.h:

2010-03-21  Kim Grönholm  <kim.gronholm@nomovok.com>

        Reviewed by Simon Hausmann.

        [Qt] GraphicsLayer: matrix interpolations in transform-animations don't behave correctly
        https://bugs.webkit.org/show_bug.cgi?id=35520
        
        The case where the list of source and target transform operations are 
        not the same but have the same size needs to be special-cased in
        GraphicsLayerQt, as well as the case where the source or target
        operation list is empty. The URLs listed here render correctly after
        applying the patch.

        Tests: https://bug-35520-attachments.webkit.org/attachment.cgi?id=49890
               https://bug-35520-attachments.webkit.org/attachment.cgi?id=49889
            

        * platform/graphics/qt/GraphicsLayerQt.cpp:
        (WebCore::TransformAnimationQt::applyFrame):

2010-03-21  Dmitry Gorbik  <socket.h@gmail.com>

        <http://webkit.org/b/14858> <col> width ignored when not tied to a single cell

        Reviewed by David Kilzer.

        Fixed width calculation for cells with span when <col> is defined.

        Test: fast/table/col-width-span-expand.html

        * rendering/RenderTableCell.cpp:
        (WebCore::RenderTableCell::styleOrColWidth): Added the calculation of cell width
        in case of <col> defined and span > 1.

2010-03-20  Antonio Gomes  <tonikitoo@webkit.org>

        Reviewed by Kenneth Christiansen.
        Patch by Antonio Gomes <tonikitoo@webkit.org>

        Spatial Navigation: Code simplification in FocusController.cpp and SpatialNavigation.cpp (part I)
        https://bugs.webkit.org/show_bug.cgi?id=36168

        Make use of isNull and document methods introduced in FocusCandidate class by patch in bug 36167.
        No functionalty change.

        * page/FocusController.cpp:
        (WebCore::updateFocusCandidateIfCloser):
        * page/SpatialNavigation.cpp:
        (WebCore::distanceInDirection):

2010-03-20  Kevin Ollivier  <kevino@theolliviers.com>

        [wx] Build fixes after recent changes.

        * platform/graphics/wx/ImageWx.cpp:
        * wscript:

2010-03-20  Joseph Pecoraro  <joepeck@webkit.org>

        Reviewed by David Kilzer.

        Assertion failure in media/video-controls-with-mutation-event-handler.html
        https://bugs.webkit.org/show_bug.cgi?id=36376

        Test: media/video-controls-with-mutation-event-handler.html

        Break early (when not attached) in the defaultEventHandler before the
        slider is completely set up.

        * rendering/MediaControlElements.cpp:
        (WebCore::MediaControlTimelineElement::defaultEventHandler):
        (WebCore::MediaControlVolumeSliderElement::defaultEventHandler):
        * rendering/RenderMedia.cpp:
        (WebCore::RenderMedia::createVolumeSlider):

2010-03-19  Shinichiro Hamaji  <hamaji@chromium.org>

        Reviewed by Dan Bernstein.

        WebCore::RenderButton::styleDidChange ReadAV@NULL (6739b7fe455ecb54a6812c0866c3b47c)
        https://bugs.webkit.org/show_bug.cgi?id=34641

        Don't dig into buttons and menu lists when finding which element
        should be modified by :first-letter pseudo class.  Even before
        this change, we didn't dig into inline buttons and menu lists as
        they are replaced so this issue wasn't found long time.

        Test: fast/css/first-letter-block-form-controls-crash.html

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

2010-03-19  Adam Barth  <abarth@webkit.org>

        Reviewed by Daniel Bates.

        Change XSSAuditor block syntax
        https://bugs.webkit.org/show_bug.cgi?id=34436

        Update our blocking syntax to something more reasonable.  Also,
        implemented a way for a web site to disable the filter.

        Tests: http/tests/security/xssAuditor/no-protection-script-tag.html
               http/tests/security/xssAuditor/xss-protection-parsing-01.html

        * page/XSSAuditor.cpp:
        (WebCore::XSSAuditor::xssProtection):
        (WebCore::XSSAuditor::findInRequest):
        * page/XSSAuditor.h:
        * platform/network/HTTPParsers.cpp:
        (WebCore::skipToken):
        (WebCore::parseXSSProtectionHeader):
        * platform/network/HTTPParsers.h:
        (WebCore::):

2010-03-19  Eric Uhrhane  <ericu@chromium.org>

        Reviewed by Dmitry Titov.

        Refactor DatabaseTracker.cpp for thread safety
        https://bugs.webkit.org/show_bug.cgi?id=34991

        This enables calling into DatabaseTracker from multiple context threads,
        as will happen once Workers can access the Database.  It required a fair
        amount of reshuffling of locks.  I ended up splitting the public
        interface [calls that take locks and call private functions] from the
        implementations [calls that assert that locks are already held] in order
        to avoid lock conflicts.  I also had to make sure we weren't sharing
        Strings or SecurityOrigins across threads.

        No new tests.

        Allow access to database handles from multiple threads IFF SQLite is new enough and the user requests it.

        * platform/sql/SQLiteDatabase.cpp:
        (WebCore::SQLiteDatabase::SQLiteDatabase):
        (WebCore::SQLiteDatabase::disableThreadingChecks):
        * platform/sql/SQLiteDatabase.h:
        (WebCore::SQLiteDatabase::sqlite3Handle):
        (WebCore::SQLiteDatabase::disableThreadingChecks):

        Remove an asynchronous call from Database::close back to the execution thread, so that cleanup can be more deterministic.

        * storage/Database.cpp:
        (WebCore::Database::markAsDeletedAndClose):
        (WebCore::Database::close):
        * storage/Database.h:
        (WebCore::Database::):
        * storage/DatabaseDetails.h:
        (WebCore::DatabaseDetails::DatabaseDetails):
        (WebCore::DatabaseDetails::thread):
        * storage/DatabaseTask.cpp:
        (WebCore::DatabaseCloseTask::doPerformTask):
        * storage/DatabaseThread.cpp:
        (WebCore::DatabaseThread::databaseThread):

        Any Strings that get stored in DatabaseTracker, and any Strings returned from DatabaseTracker, are now threadsafeCopies.
        Public functions now take all needed locks, then generally call only private functions [there are a few exceptions: deletion functions and origins()].
        Private functions no longer take locks.
        m_quotaMapGuard becomes m_databaseGuard, and now protects m_database, m_quotaMap, m_proposedDatabases, m_databaseDirectoryPath, m_originsBeingDeleted, m_beingCreated, and m_beingDeleted.
        m_proposedDatabases replaces m_proposedDatabase, to account for reentrancy.

        * storage/DatabaseTracker.h:
        * storage/DatabaseTracker.cpp:
        (WebCore::DatabaseTracker::originQuotaManagerNoLock):
        (WebCore::DatabaseTracker::originQuotaManager):
        (WebCore::DatabaseTracker::DatabaseTracker):
        (WebCore::DatabaseTracker::setDatabaseDirectoryPath):
        (WebCore::DatabaseTracker::databaseDirectoryPath):
        (WebCore::DatabaseTracker::trackerDatabasePath):
        (WebCore::DatabaseTracker::openTrackerDatabase):
        (WebCore::DatabaseTracker::canEstablishDatabase):
        (WebCore::DatabaseTracker::hasEntryForOriginNoLock):
        (WebCore::DatabaseTracker::hasEntryForOrigin):
        (WebCore::DatabaseTracker::hasEntryForDatabase):
        (WebCore::DatabaseTracker::originPath):
        (WebCore::DatabaseTracker::fullPathForDatabaseNoLock):
        (WebCore::DatabaseTracker::fullPathForDatabase):
        (WebCore::DatabaseTracker::populateOrigins):
        (WebCore::DatabaseTracker::origins):
        (WebCore::DatabaseTracker::databaseNamesForOriginNoLock):
        (WebCore::DatabaseTracker::databaseNamesForOrigin):
        (WebCore::DatabaseTracker::detailsForNameAndOrigin):
        (WebCore::DatabaseTracker::setDatabaseDetails):
        (WebCore::DatabaseTracker::usageForDatabase):
        (WebCore::DatabaseTracker::addOpenDatabase):
        (WebCore::DatabaseTracker::removeOpenDatabase):
        (WebCore::DatabaseTracker::usageForOriginNoLock):
        (WebCore::DatabaseTracker::usageForOrigin):
        (WebCore::DatabaseTracker::quotaForOriginNoLock):
        (WebCore::DatabaseTracker::quotaForOrigin):
        (WebCore::DatabaseTracker::setQuota):
        (WebCore::DatabaseTracker::addDatabase):
        (WebCore::DatabaseTracker::deleteAllDatabases):
        (WebCore::DatabaseTracker::deleteOrigin):
        (WebCore::DatabaseTracker::deleteDatabase):
        (WebCore::DatabaseTracker::deleteDatabaseFile):
        (WebCore::DatabaseTracker::setClient):
        (WebCore::DatabaseTracker::scheduleNotifyDatabaseChanged):
        (WebCore::DatabaseTracker::notifyDatabasesChanged):

        These functions keep track of in-progress deletions and creations, so that we can make sure nobody every deletes a database file while a live database is using it.
        (WebCore::DatabaseTracker::canCreateDatabase):
        (WebCore::DatabaseTracker::recordCreatingDatabase):
        (WebCore::DatabaseTracker::doneCreatingDatabase):
        (WebCore::DatabaseTracker::creatingDatabase):
        (WebCore::DatabaseTracker::canDeleteDatabase):
        (WebCore::DatabaseTracker::recordDeletingDatabase):
        (WebCore::DatabaseTracker::doneDeletingDatabase):
        (WebCore::DatabaseTracker::deletingDatabase):
        (WebCore::DatabaseTracker::canDeleteOrigin):
        (WebCore::DatabaseTracker::deletingOrigin):
        (WebCore::DatabaseTracker::recordDeletingOrigin):
        (WebCore::DatabaseTracker::doneDeletingOrigin):

        Any SecurityOrigins stored in OriginQuotaManager are now threadsafeCopies of inputs.  There's a new tryLock() function in addition to the existing lock().

        * storage/OriginQuotaManager.cpp:
        (WebCore::OriginQuotaManager::tryLock):
        (WebCore::OriginQuotaManager::trackOrigin):
        * storage/OriginQuotaManager.h:

        * page/SecurityOrigin.cpp:
        (WebCore::SecurityOrigin::databaseIdentifier):
        Removed DEFINE_STATIC_LOCAL wrapper on a local variable; it appears to have been a small optimization, but it's not thread-safe.

2010-03-19  Luiz Agostini  <luiz.agostini@openbossa.org>

        Reviewed by Antti Koivisto.

        Multiselect popups - rendering
        https://bugs.webkit.org/show_bug.cgi?id=36006

        The objective of this patch is to create a compile time flag that can be used
        to force all <select> elements to be rendered as menu lists.

        Theme stylesheet mechanism has been used to change the appearance of the elements.

        Class QtStyleOptionWebComboBox has been introduced to provide to QStyle objects
        the needed information to render <select multiple> comboboxes.

        * WebCore.pri:
        * WebCore.pro:
        * css/themeQtNoListboxes.css: Added.
        (select[size][multiple]):
        * dom/SelectElement.h:
        (WebCore::SelectElementData::usesMenuList):
        * platform/qt/QtStyleOptionWebComboBox.h: Added.
        (WebCore::QtStyleOptionWebComboBox::QtStyleOptionWebComboBox):
        (WebCore::QtStyleOptionWebComboBox::multiple):
        (WebCore::QtStyleOptionWebComboBox::checkMultiple):
        * platform/qt/RenderThemeQt.cpp:
        (WebCore::RenderThemeQt::extraDefaultStyleSheet):
        (WebCore::RenderThemeQt::paintMenuList):
        (WebCore::RenderThemeQt::paintMenuListButton):
        * platform/qt/RenderThemeQt.h:

2010-03-19  Zhenyao Mo  <zmo@google.com>

        Reviewed by Oliver Hunt.

        Update WebGLArray.slice() to new spec
        https://bugs.webkit.org/show_bug.cgi?id-35612

        * bindings/js/JSWebGLArrayCustom.cpp: Adding support for default inputs.
        (WebCore::JSWebGLArray::slice):
        * bindings/v8/custom/V8WebGLArrayCustom.cpp: Ditto.
        (WebCore::V8WebGLArray::sliceCallback):
        * html/canvas/WebGLArray.cpp: Map start/end to offset/length.
        (WebCore::WebGLArray::calculateOffsetAndLength):
        * html/canvas/WebGLArray.h: Modified slice parameters.
        * html/canvas/WebGLArray.idl: Define custom binding for slice().
        * html/canvas/WebGLByteArray.cpp: Modified slice parameters.
        (WebCore::WebGLByteArray::slice):
        * html/canvas/WebGLByteArray.h: Ditto.
        * html/canvas/WebGLFloatArray.cpp: Ditto.
        (WebCore::WebGLFloatArray::slice):
        * html/canvas/WebGLFloatArray.h: Ditto.
        * html/canvas/WebGLIntArray.cpp: Ditto.
        (WebCore::WebGLIntArray::slice):
        * html/canvas/WebGLIntArray.h: Ditto.
        * html/canvas/WebGLShortArray.cpp: Ditto.
        (WebCore::WebGLShortArray::slice):
        * html/canvas/WebGLShortArray.h: Ditto.
        * html/canvas/WebGLUnsignedByteArray.cpp: Ditto.
        (WebCore::WebGLUnsignedByteArray::slice):
        * html/canvas/WebGLUnsignedByteArray.h: Ditto.
        * html/canvas/WebGLUnsignedIntArray.cpp: Ditto.
        (WebCore::WebGLUnsignedIntArray::slice):
        * html/canvas/WebGLUnsignedIntArray.h: Ditto.
        * html/canvas/WebGLUnsignedShortArray.cpp: Ditto.
        (WebCore::WebGLUnsignedShortArray::slice):
        * html/canvas/WebGLUnsignedShortArray.h: Ditto.

2010-03-19  Yong Li <yong.li@torchmobile.com> and Andy Estes <aestes@apple.com>

        Reviewed by Darin Adler.

        Ensure the segments inside SharedBuffer are merged before constructing
        a CFData with it.

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

        * manual-tests/WebKitSite.webarchive: Added.
        * manual-tests/webarchive-test.html: Added.
        * platform/cf/SharedBufferCF.cpp:
        (WebCore::SharedBuffer::createCFData):

2010-03-19  Justin Schuh  <jschuh@chromium.org>

        Reviewed by Oliver Hunt.

        Security: ReadAV@NULL for negative feMorphology filter radius
        https://bugs.webkit.org/show_bug.cgi?id=34566

        Prevents building the filter if either radius is negative.
        Catches negative radii resulting from conversions.

        Test: svg/filters/feMorphology-invalid-radius.svg

        * svg/SVGFEMorphologyElement.cpp:
        (WebCore::SVGFEMorphologyElement::build):
        * svg/graphics/filters/SVGFEMorphology.cpp:
        (WebCore::FEMorphology::apply):

2010-03-19  Chris Marrin  <cmarrin@apple.com>

        Reviewed by Simon Fraser.

        Fixed a crash with AnimationController getting deleted out from under itself.
        
        It's possible for the Frame that owns an AnimationController to get deleted
        in the EndTransitionEvent (or other animation events) to get deleted in the
        event handler. Normally this case is protected against by preventing the Frame
        from getting deleted until the end of the runloop. But native uses of the 
        WebView can subvert this protection. So I added a protector to the 
        animation event dispatcher to protect it in those cases.

        Test: transitions/transition-end-event-destroy-iframe.html

        * page/animation/AnimationController.cpp:
        (WebCore::AnimationControllerPrivate::updateStyleIfNeededDispatcherFired):

2010-03-19  Luiz Agostini  <luiz.agostini@openbossa.org>

        Reviewed by Antti Koivisto.

        Multiselect Popup - PopupMenuClient extension
        https://bugs.webkit.org/show_bug.cgi?id=36178

        PopupMenuClient class is the interface used by combobox popup implementations.
        It needs to be extended to handle <select multiple> needs.

        A new interface named ListPopupMenuClient that inherits from PopupMenuClient was created.
        The use of this new class instead of adding methods to PopupMenuClient avoids changes
        in other non related implementations of PopupMenuClient.

        RenderMenuList has changed to inherit ListPopupMenuClient instead of PopupMenuClient
        and to have the new methods implemented.

        * platform/PopupMenuClient.h:
        * rendering/RenderMenuList.cpp:
        (WebCore::RenderMenuList::listBoxSelectItem):
        (WebCore::RenderMenuList::multiple):
        * rendering/RenderMenuList.h:

2010-03-19  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Dimitri Glazkov.

        https://bugs.webkit.org/show_bug.cgi?id=36387
        REGRESSION: Can "uncheck" radio buttons by clicking on them
        
        My change in r56174 caused radio buttons and checkboxes to go down the same code path by virtue
        of allowsIndeterminate(), but this broke save/restore behavior on radio buttons.
        
        Fix by saving and restoring both the intermediate and checked state for radio buttons
        and checkboxes, as well as the "current radio button" state.

        Test: fast/forms/radio-checkbox-restore-indeterminate.html

        * html/HTMLInputElement.cpp:
        (WebCore::EventHandlingState::EventHandlingState): New struct to hold state between preDispatchEventHandler()
        and postDispatchEventHandler().
        (WebCore::HTMLInputElement::preDispatchEventHandler): Store intermedate and checked state
        and the current radio button.
        (WebCore::HTMLInputElement::postDispatchEventHandler): Restore state as appropriate.
        * html/HTMLInputElement.h: Add a comment to clarify how 'intermediate' interacts with 'checked', according
        to the spec.

2010-03-19  Alexander Pavlov  <apavlov@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: caret moves past prompt in javascript console
        https://bugs.webkit.org/show_bug.cgi?id=26602

        Having noticed any Element children besides a leading <br> (which are empty
        text nodes), WebCore editing facility thinks it should delete the <br>,
        thus clearing away the text prompt contents.

        * inspector/front-end/TextPrompt.js:
        (WebInspector.TextPrompt.prototype.clearAutoComplete):
        (WebInspector.TextPrompt.prototype._completionsReady):
        * inspector/front-end/utilities.js:
        (Element.prototype.pruneEmptyTextNodes):

2010-03-19  Adam Roben  <aroben@apple.com>

        Windows clean build fix after r56192

        * WebCore.vcproj/WebCore.vcproj: Copy headers from
        platform/graphics/cg to $WebKitOutputDir as part of the post-build
        event so that WebKit can use them. (The only one we currently require
        is FontPlatformData.h.)

        * platform/graphics/win/FontPlatformDataCGWin.cpp: Touched to force a
        build.

2010-03-19  Joseph Pecoraro  <joepeck@webkit.org>

        Reviewed by David Kilzer.

        Assertion failure in media/video-controls-with-mutation-event-handler.html
        https://bugs.webkit.org/show_bug.cgi?id=36376

        Fix crashing test. Underlying the media element's volume slider is a
        range input, which sanitizes values before expected on the media control.

        * rendering/RenderMedia.cpp:
        (WebCore::RenderMedia::createVolumeSlider):

2010-03-19  Brady Eidson  <beidson@apple.com>

        Reviewed by Darin Adler.

        3 of the new HTML5 loading events need to be asynchronous.

        Laying the groundwork for:
        https://bugs.webkit.org/show_bug.cgi?id=36201
        https://bugs.webkit.org/show_bug.cgi?id=36202
        https://bugs.webkit.org/show_bug.cgi?id=36334
        https://bugs.webkit.org/show_bug.cgi?id=36335

        Document already had an asynchronous event delivery mechanism for storage events, so
        we can repurpose that for all async events.

        No new tests. (No change in behavior)

        * dom/Document.cpp:
        (WebCore::Document::Document):
        (WebCore::Document::implicitClose): Use Document::schedule* for the related events.
        (WebCore::Document::enqueueEvent): Renamed from enqueueStorageEvent
        (WebCore::Document::pendingEventTimerFired): Renamed from "storageEventTimerFired"
        (WebCore::Document::statePopped): Use Document::schedulePopstateEvent
        (WebCore::Document::enqueuePageshowEvent): All Pageshow events are piped through here.
          This will be made asynchronous in a separate patch.
        (WebCore::Document::enqueueHashchangeEvent): All Hashchange events are piped through here.
          This will be made asynchronous in a separate patch.
        (WebCore::Document::enqueuePopstateEvent): All Popstate events are piped through here.
          This will be made asynchronous in a separate patch.
        * dom/Document.h:
        (WebCore::):

        * history/CachedFrame.cpp:
        (WebCore::CachedFrameBase::restore): Use Document::enqueuePageshowEvent

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::loadInSameDocument): Use Document::enqueueHashchangeEvent

        * storage/StorageEventDispatcher.cpp:
        (WebCore::StorageEventDispatcher::dispatch): Use Document::enqueueEvent

2010-03-19  Kevin Decker  <kdecker@apple.com>

        Reviewed by Darin Adler and Brady Eidson.

        First step toward:
        https://bugs.webkit.org/show_bug.cgi?id=36328

        This is the first step torward eliminating the WebKit WebNullPluginView class. The responsibility for this will soon
        be in platform-independent code in WebCore. The plan is to change RenderEmbeddedObject and give it the capability of
        drawing the missing plug-in text. 

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::requestObject): Renamed the renderer parameter to requestEmbeddedObject and made it
        a RenderEmbeddedObject.
        (WebCore::FrameLoader::loadPlugin): Likewise.
        * loader/FrameLoader.h: Updated loadPlugin() and requestObject() method signatures accordingly. 

2010-03-19  Laszlo Gombos  <laszlo.1.gombos@nokia.com>

        Reviewed by Simon Hausmann.

        [Qt] Disable TILED_BACKING_STORE if Qt version is earlier than Qt4.6
        https://bugs.webkit.org/show_bug.cgi?id=36348

        Backing store implementation for QtWebKit requires at least Qt
        version 4.6.

        No new tests as there is no new functionality.

        * WebCore.pri:

2010-03-19  Joseph Pecoraro  <joepeck@webkit.org>

        Reviewed by David Kilzer.

        <input type=range> does not validate correctly without a renderer and the tests are incorrect
        https://bugs.webkit.org/show_bug.cgi?id=36259

        Setting value attribute on an <input type=range> to an out-of-range value fires oninput
        https://bugs.webkit.org/show_bug.cgi?id=16990

        Part 2 of 2: When setting the range element's value, overflows and underflows
        are automatically sanitized to valid values. Moved the general case
        sanitization code out of the Renderer into HTMLInputElement::sanitizeValue.

        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::value): when getting a default value on reset() ensure the defaultValue is provided
        (WebCore::HTMLInputElement::sanitizeValue): clamp the value within the max/min/step range constraints
        * html/StepRange.cpp:
        (WebCore::StepRange::StepRange): allow const element in the constructor
        (WebCore::StepRange::clampValue): clamp from a String value
        * html/StepRange.h:
        (WebCore::StepRange::defaultValue): easy calculation of the default value for max/min/step range constraints
        * rendering/RenderSlider.cpp:
        (WebCore::RenderSlider::updateFromElement): no longer handle the general case sanitization in the renderer

2010-03-19  Joseph Pecoraro  <joepeck@webkit.org>

        Reviewed by David Kilzer.

        <input type=range> does not validate correctly without a renderer and the tests are incorrect
        https://bugs.webkit.org/show_bug.cgi?id=36259

        Part 1 of 2: Refactoring the SliderRange struct out of RenderSlider
        into a more appropriate place. Changed the named to StepRange. Changed
        from a struct to a class.

          Added new files to the build.

        * GNUmakefile.am:
        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:

          Renamed and moved class SliderRange to StepRange.

        * html/StepRange.cpp: Added.
        (WebCore::StepRange::StepRange):
        (WebCore::StepRange::clampValue):
        (WebCore::StepRange::valueFromElement):
        (WebCore::sliderPosition):
        * html/StepRange.h: Added.
        (WebCore::StepRange::proportionFromValue):
        (WebCore::StepRange::valueFromProportion):
        * rendering/RenderSlider.cpp:
        (WebCore::RenderSlider::updateFromElement): updated to use StepRange
        (WebCore::RenderSlider::setValueForPosition): updated to use StepRange

2010-03-19  Antti Koivisto  <koivisto@iki.fi>

        Reviewed by Simon Hausmann.

        https://bugs.webkit.org/show_bug.cgi?id=36366
        Repaint loop when painting using scaled CTMs with different translations

        The code in RenderBoxModelScaleObserver::shouldPaintBackgroundAtLowQuality
        tests if the scaling has changed from the previous value by comparing the
        transformations. The test fails if the scale is the same but the translation 
        changes. This can lead to infinite repaint loop if the document is painted 
        in pieces using different translations (for example for tiling).

        * rendering/RenderBoxModelObject.cpp:
        (WebCore::RenderBoxModelScaleObserver::shouldPaintBackgroundAtLowQuality):

2010-03-19  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Timothy Hatcher.

        Web Inspector: editing shorthands does not always work.

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

        * inspector/InspectorDOMAgent.cpp:
        (WebCore::InspectorDOMAgent::applyStyleText):
        (WebCore::InspectorDOMAgent::populateObjectWithStyleProperties):
        (WebCore::InspectorDOMAgent::shorthandValue):
        * inspector/InspectorDOMAgent.h:
        * inspector/front-end/StylesSidebarPane.js:
        (WebInspector.StylePropertyTreeElement.prototype):
        * inspector/front-end/inspector.css:
        (.section .properties li.disabled .enabled-button):
        * inspector/front-end/inspector.js:
        (WebInspector.startEditing.editingCommitted):

2010-03-19  Tor Arne Vestbø  <tor.arne.vestbo@nokia.com>

        Reviewed by Simon Hausmann.

        [Qt] Don't replace clip when drawing complex text

        * platform/graphics/qt/FontQt.cpp:

2010-03-18  Darin Fisher  <darin@chromium.org>

        Reviewed by Adam Barth.

        If a frame is already in the document, then setting its "src" attribute
        should add the resultant navigation to history.

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

        This behavior is specified in section 4.8.2 of the HTML5 spec.

        Test: fast/loader/frame-src-change-added-to-history.html

        * html/HTMLFrameElementBase.cpp:
        (WebCore::HTMLFrameElementBase::openURL):
        (WebCore::HTMLFrameElementBase::setLocation):
        * html/HTMLFrameElementBase.h:
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::requestFrame):
        * loader/FrameLoader.h:

2010-03-18  Chris Evans  <cevans@chromium.org>

        Reviewed by Nikolas Zimmermann.

        Fix a minor crash with mismatched array sizes in SVG animation
        elements.

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

        Test: svg/animations/keypoints-mismatch.svg

        * svg/SVGAnimationElement.cpp:
        (WebCore::SVGAnimationElement::startedActiveInterval):
        Globally apply validations relevant to all animation types.

2010-03-18  Vangelis Kokkevis  <vangelis@chromium.org>

        Reviewed by Adam Barth.

        Implement software composited graphics layers in Chromium using the Skia library.
        https://bugs.webkit.org/show_bug.cgi?id=35557
        This is an initial step in the implementation. Layer compositing is functioning
        but not optimized in any way. Subsesquent check-ins will be necessary to fine tune
        it.

        Test: No new exposed functionality so no new tests.

        * WebCore.gypi:
          Added new source files to the chromium build
        * platform/graphics/GraphicsLayer.h:
          Added necessary typedef's and forward declarations for Chromium.
        * platform/graphics/skia/GraphicsLayerSkia.cpp: Added.
        * platform/graphics/skia/GraphicsLayerSkia.h: Added.
          Declaration and implementation of the platform-specific GraphicsLayer class.
        * platform/graphics/skia/LayerRendererSkia.cpp: Added.
        * platform/graphics/skia/LayerRendererSkia.h: Added.
          Declaration and implementation of the Skia-based software compositor.
        * platform/graphics/skia/LayerSkia.cpp: Added.
        * platform/graphics/skia/LayerSkia.h: Added.
          Declaration and implementation of a compositable layer that uses a Skia canvas
          for backing store.

2010-03-18  Kenneth Rohde Christiansen  <kenneth@webkit.org>

        Reviewed by Darin Adler.

        Make setPrinting() with printing=false, restore the previous
        media type in use.

        Test: fast/media/print-restores-previous-mediatype.html

        * page/Frame.cpp:
        (WebCore::Frame::setPrinting):
        * page/FrameView.cpp:
        (WebCore::FrameView::adjustMediaTypeForPrinting):
        * page/FrameView.h:

2010-03-18  David Kilzer  <ddkilzer@apple.com>

        <http://webkit.org/b/36338> Remove unused RenderReplaced::adjustOverflowForBoxShadowAndReflect() declaration

        Rubber-stamped by Darin Adler.

        This declaration should have been removed in r47440.

        * rendering/RenderReplaced.h:
        (WebCore::RenderReplaced::adjustOverflowForBoxShadowAndReflect): Removed.

2010-03-18  Jian Li  <jianli@chromium.org>

        Reviewed by Dmitry Titov.

        Dragging a PDF image triggers assertion in DragController::startDrag()
        https://bugs.webkit.org/show_bug.cgi?id=36247

        Test: fast/images/drag-pdf-as-image.html

        * platform/graphics/cg/PDFDocumentImage.cpp:
        (WebCore::PDFDocumentImage::filenameExtension):
        * platform/graphics/cg/PDFDocumentImage.h:

2010-03-18  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Dan Bernstein.

        Avoid taking a reference to a String owned by a temporary AtomicString.

        * css/CSSSelector.cpp:
        (WebCore::CSSSelector::RareData::parseNth):

2010-03-18  Chris Marrin  <cmarrin@apple.com>

        Reviewed by Simon Fraser.

        Fixed parenting issues with HW layers on Windows
        https://bugs.webkit.org/show_bug.cgi?id=32449
        
        CACF can't properly fix superlayer changes, so a layer added
        as a sublayer must have a null superlayer. I changed a couple of
        places that change sublayers to removeFromSuperlayer while adding
        to a new layer. This fixes both the problem of disappearing children
        and children getting doubled. Also got rid of removeSublayer(). Layers
        should always be removed from their parent with removeFromSuperlayer().
        
        This also removed moveLayer(), which is not used and may not be safe in how
        it copies.

        * platform/graphics/win/GraphicsLayerCACF.cpp:Changed setName to be like Mac, to give more debugging info (to fix problems like these)
        (WebCore::GraphicsLayerCACF::setName):
        * platform/graphics/win/WKCACFLayer.cpp:Make sure superlayer is null before adding
        (WebCore::WKCACFLayer::insertSublayer):
        (WebCore::WKCACFLayer::replaceSublayer):
        (WebCore::WKCACFLayer::removeFromSuperlayer):
        (WebCore::WKCACFLayer::setSublayers):
        (WebCore::WKCACFLayer::printLayer):print the superlayer for better debugging
        * platform/graphics/win/WKCACFLayer.h:

2010-03-18  Dimitri Glazkov  <dglazkov@chromium.org>

        Unreviewed, build fix.

        [Chromium] Change the order of mac/ and cg/ include dirs to fix compile break
        due to http://trac.webkit.org/changeset/56192,

        * WebCore.gyp/WebCore.gyp: Changed the order.

2010-03-18  David Hyatt  <hyatt@apple.com>

        Reviewed by Oliver Hunt.

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

        Add support for stopImmediatePropagation from DOM Level 3 Events.

        Added fast/events/stop-immediate-propagation.html.

        * dom/Event.cpp:
        (WebCore::Event::Event):
        * dom/Event.h:
        (WebCore::Event::timeStamp):
        (WebCore::Event::stopPropagation):
        (WebCore::Event::stopImmediatePropagation):
        (WebCore::Event::propagationStopped):
        (WebCore::Event::immediatePropagationStopped):
        * dom/Event.idl:
        * dom/EventTarget.cpp:
        (WebCore::EventTarget::fireEventListeners):

2010-03-18  Dimitri Glazkov  <dglazkov@chromium.org>

        Unreviewed, build fix.

        Return frame accessor back to Geolocation, it's used in GeolocationServiceChromium.
        The accessor was removed in http://trac.webkit.org/changeset/56188.

        * page/Geolocation.h:
        (WebCore::Geolocation::frame): Added back.

2010-03-18  Brent Fulgham  <bfulgham@webkit.org>

        Reviewed by Adam Roben.

        Help reduce build problems due to font declarations.
        https://bugs.webkit.org/show_bug.cgi?id=36190

        Functions unchanged, no new tests.

        * WebCore.vcproj/WebCore.vcproj: Add new file, and show
          movement of FontPlatformData.h to cg/ directory.
        * platform/graphics/cairo/FontPlatformData.h: Merge in
          WinCairo-specific declarations.  Correct constructor
          declaration to use type float for font size.
        (WebCore::FontPlatformData::FontPlatformData):
        (WebCore::FontPlatformData::hfont):
        (WebCore::FontPlatformData::useGDI):
        (WebCore::FontPlatformData::fontFace):
        (WebCore::FontPlatformData::setSize):
        (WebCore::FontPlatformData::hash):
        (WebCore::FontPlatformData::isHashTableDeletedValue):
        * platform/graphics/cairo/FontPlatformDataCairo.cpp:
        (WebCore::FontPlatformData::FontPlatformData): Correct
          constructor to accept type float for font size.
        * platform/graphics/cg/FontPlatformData.h: Copied from WebCore/platform/graphics/win/FontPlatformData.h.
        (WebCore::FontPlatformData::FontPlatformData):
        (WebCore::FontPlatformData::hfont):
        (WebCore::FontPlatformData::cgFont):
        (WebCore::FontPlatformData::operator==):
        * platform/graphics/win/FontPlatformData.h: Removed.
        * platform/graphics/win/FontPlatformDataCairoWin.cpp:
        (WebCore::FontPlatformData::operator==): Move implementation
          here (previously in header) to match other cairo-based ports.
        * platform/graphics/win/RefCountedHFONT.h: Added.  This
          was extracted from win/FontPlatformData.h, and is now shared
          by the cg/FontPlatformData.h and cairo/FontPlatformData.h
        (WebCore::RefCountedHFONT::create):
        (WebCore::RefCountedHFONT::createDeleted):
        (WebCore::RefCountedHFONT::~RefCountedHFONT):
        (WebCore::RefCountedHFONT::hfont):
        (WebCore::RefCountedHFONT::hash):
        (WebCore::RefCountedHFONT::RefCountedHFONT):

2010-03-18  Simon Fraser  <simon.fraser@apple.com>

        No review.

        Fix brace style after r56170.
        
        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::SelectorChecker::checkOneSelector):

2010-03-18  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Dave Hyatt.

        https://bugs.webkit.org/show_bug.cgi?id=36274
        CSS3 :nth-child selector 'odd' keyword case sensitivity test fails
        
        The tests for "odd", "even" etc. for nth-child selectors should be case insensitive.

        Test: fast/css/nth-child-odd-case-insensitive.html

        * css/CSSSelector.cpp:
        (WebCore::CSSSelector::RareData::parseNth):

2010-03-18  David Hyatt  <hyatt@apple.com>

        Reviewed by Oliver Hunt.

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

        Add support for event.defaultPrevented from DOM level 3.
    
        Added fast/events/defaultprevented.html

        * dom/Event.idl:

2010-03-18  Darin Adler  <darin@apple.com>

        Reviewed by Kenneth Rohde Christiansen.

        Remove Geolocation.lastPosition, no longer in the spec.
        https://bugs.webkit.org/show_bug.cgi?id=36255
        rdar://problem/7746357

        * WebCore.base.exp: Updated since Geolocation's destructor is now non-virtual.

        * page/Geolocation.cpp:
        (WebCore::Geolocation::lastPosition): Add an assertion; it's only legal to
        call this if access to the location is allowed.

        * page/Geolocation.h: Removed unneeded includes. Made destructor non-virtual,
        although it will still be virtual if any of the base classes have a virtual
        destructor. Made lastPosition, isAllowed, and isDenied functions private.
        Removed unused suspend, resume, setShouldClearCache, shouldClearCache,
        and frame functions.

        * page/Geolocation.idl: Removed lastPosition read-only attribute. No longer in
        the Geolocation specification.

2010-03-18  David Hyatt  <hyatt@apple.com>

        Reviewed by Simon Fraser.

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

        Make sure :not does not allow pseudo-elements inside it. (Hooray for another pointless
        restriction on :not.)

        Added fast/css/invalid-not-with-pseudo-element.html

        * css/CSSGrammar.y:
        * css/CSSSelector.h:
        (WebCore::CSSSelector::matchesPseudoElement):

2010-03-18  Dan Bernstein  <mitz@apple.com>

        Reviewed by Darin Adler.

        <rdar://problem/7761400> Rework the fix for
        https://bugs.webkit.org/show_bug.cgi?id=18722

        Test: fast/dynamic/float-remove-above-line-2.html

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::removeFloatingObject): Treat 0- and less-than-0-height floats
        as having a height of 1 so that they intersect with the line they originate on.
        (WebCore::RenderBlock::clearFloats): Use numeric_limits.
        * rendering/RenderBlockLineLayout.cpp:
        (WebCore::RenderBlock::layoutInlineChildren): Removed the intersection checks here,
        so that a float is always included in the float list of the line it originates on, even
        if it does not intersect that line. This ensures that every float is accounted for, which
        is necessary during incremental layout when adding floats from clean lines.

2010-03-18  Antti Koivisto  <koivisto@iki.fi>

        Reviewed by Kenneth Rohde Christiansen.

        https://bugs.webkit.org/show_bug.cgi?id=36102
        [Qt] Scaling control API for tiled backing store
        
        Commit the new scale synchronously after unfreeze to avoid ugliness.

        * platform/graphics/TiledBackingStore.cpp:
        (WebCore::TiledBackingStore::TiledBackingStore):
        (WebCore::TiledBackingStore::setContentsScale):
        (WebCore::TiledBackingStore::commitScaleChange):
        (WebCore::TiledBackingStore::setContentsFrozen):
        * platform/graphics/TiledBackingStore.h:

2010-03-18  David Hyatt  <hyatt@apple.com>

        Reviewed by Simon Fraser.

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

        Make sure an exception is raised if an @import rule is inserted in the wrong place.
        
        Also make sure (so that this particular test case passes) that rgba(0, 0, 0, 0) is dumped
        as transparent by getComputedStyle, since it most commonly occurs in background-color and
        that default makes more sense than dumping rgba values.

        Added fast/css/invalid-import-insertion.html

        * css/CSSPrimitiveValue.cpp:
        (WebCore::CSSPrimitiveValue::createColor):
        * css/CSSStyleSheet.cpp:
        (WebCore::CSSStyleSheet::insertRule):

2010-03-18  Luiz Agostini  <luiz.agostini@openbossa.org>

        Reviewed by Kenneth Rohde Christiansen.

        Multiselect Popup - Listbox click simulation
        https://bugs.webkit.org/show_bug.cgi?id=36177

        Listbox popups will need to notify the corresponding select elements that a
        selection change happened. The current HTMLSelectElement interface does not
        allow multiple selections.

        The new method  listBoxSelectItem will be used for that. I have refactored part
        of the mouse handling code in bug 36124 and I am now reusing it here for
        <select multiple> popups. All the other cases will handled as they were before to be
        sure that no side effects will show up.

        * dom/SelectElement.cpp:
        (WebCore::SelectElement::updateListBoxSelection):
        (WebCore::SelectElement::listBoxOnChange):
        * dom/SelectElement.h:
        * html/HTMLSelectElement.cpp:
        (WebCore::HTMLSelectElement::listBoxPopupClick):
        * html/HTMLSelectElement.h:

2010-03-12  Ojan Vafai  <ojan@chromium.org>

        Reviewed by David Levin.

        smartdelete should only occur after double-click
        https://bugs.webkit.org/show_bug.cgi?id=35314

        1. Consolidate all notions of selection-granularity into SelectionController.
        2. Now only mouse-based selections store a selection-granularity. This matches NSTextView.

        New tests were added in http://trac.webkit.org/changeset/55913.

        * WebCore.base.exp:
        * editing/MoveSelectionCommand.cpp:
        (WebCore::MoveSelectionCommand::MoveSelectionCommand):
        (WebCore::MoveSelectionCommand::doApply):
        * editing/MoveSelectionCommand.h:
        (WebCore::MoveSelectionCommand::create):
        * editing/SelectionController.cpp:
        (WebCore::SelectionController::SelectionController):
        (WebCore::SelectionController::setSelection):
        (WebCore::SelectionController::modify):
        (WebCore::SelectionController::clear):
        * editing/SelectionController.h:
        (WebCore::SelectionController::setSelection):
        (WebCore::SelectionController::granularity):
        * editing/VisibleSelection.cpp:
        (WebCore::VisibleSelection::VisibleSelection):
        (WebCore::VisibleSelection::expandUsingGranularity):
        (WebCore::VisibleSelection::setStartAndEndFromBaseAndExtentRespectingGranularity):
        (WebCore::VisibleSelection::validate):
        * editing/VisibleSelection.h:
        (WebCore::operator==):
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::clear):
        * page/DOMSelection.cpp:
        (WebCore::DOMSelection::extend):
        * page/DragController.cpp:
        (WebCore::DragController::concludeEditDrag):
        * page/EventHandler.cpp:
        (WebCore::EventHandler::selectClosestWordFromMouseEvent):
        (WebCore::EventHandler::selectClosestWordOrLinkFromMouseEvent):
        (WebCore::EventHandler::handleMousePressEventTripleClick):
        (WebCore::EventHandler::handleMousePressEventSingleClick):
        (WebCore::EventHandler::updateSelectionForMouseDrag):
        * page/Frame.cpp:
        (WebCore::Frame::Frame):
        (WebCore::Frame::selectionGranularity):
        * page/Frame.h:
        * rendering/RenderTextControl.cpp:
        (WebCore::RenderTextControl::setSelectionRange):

2010-03-18  Dimitri Glazkov  <dglazkov@chromium.org>

        Unreviewed, build fix.

        [V8] Turn npObjectTypeInfo into a function, make everyone happy.

        * bindings/v8/NPV8Object.cpp:
        (WebCore::npObjectTypeInfo): Added new function.
        (npCreateV8ScriptObject):
        * bindings/v8/NPV8Object.h: Turned npObjectTypeInfo into function.
        * bindings/v8/V8NPObject.cpp: Replaced references to function

2010-03-18  David Hyatt  <hyatt@apple.com>

        Reviewed by Simon Fraser.

        https://bugs.webkit.org/show_bug.cgi?id=36283
        
        The wrong constants were being used for the code that attempted to compact the background-repeat shorthand to
        a single value.

        Added fast/backgrounds/background-repeat-computed-style.html

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::fillRepeatToCSSValue):

2010-03-18  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Dave Hyatt.

        https://bugs.webkit.org/show_bug.cgi?id=36273
        CSS3 :indeterminate and input type=radio test fails

        The :indeterminate pseudo-class should apply to both radio buttons and checkboxes.

        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::setIndeterminate): Use allowsIndeterminate() to determine if the input
        supports the indeterminate state.
        (WebCore::HTMLInputElement::preDispatchEventHandler): Use allowsIndeterminate() to determine whether
        to handle the indeterminate state.
        (WebCore::HTMLInputElement::postDispatchEventHandler): Ditto.
        * html/HTMLInputElement.h:
        (WebCore::HTMLInputElement::allowsIndeterminate): New utility method, returns true for radio buttons
        and checkboxes.

2010-03-18  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Dave Hyatt.

        https://bugs.webkit.org/show_bug.cgi?id=36271
        CSS3 :enabled on an input type=hidden element fails
        
        The CSS3 selectors spec now makes it clear that hidden inputs should respect
        the :enabled and :disabled pseudo-classes.

        Test: fast/forms/hidden-input-enabled.html

        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::SelectorChecker::checkOneSelector): Remove checks for hidden inputs.

2010-03-18  Enrica Casucci  <enrica@apple.com>

        Reviewed by Simon Fraser.

        Intro text at Star Wars demo is clipped.
        <rdar://problem/7560979>
        https://bugs.webkit.org/show_bug.cgi?id=33909
        
        Test: compositing/repaint/layer-repaint.html
        
        We are flipping the coordinates for drawing, therefore
        we must flip them also when we invalidate the rectangles.

        * platform/graphics/win/GraphicsLayerCACF.cpp:
        (WebCore::WebLayer::setNeedsDisplay):

2010-03-18  Nate Chapin  <japhet@chromium.org>

        Unreviewed, Chromium build fix.

        Missed a #include in V8Collection.h.

        * bindings/v8/V8Collection.h:

2010-03-18  David Hyatt  <hyatt@apple.com>

        Reviewed by Simon Fraser.

        Fix for https://bugs.webkit.org/show_bug.cgi?id=36284.
        
        Make sure the CSS parser properly rejects negative border widths.

        Added fast/borders/negative-border-width.html

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

2010-03-18  Nate Chapin  <japhet@chromium.org>

        Reviewed by Dimitri Glazkov.

        [V8] Remove V8Index.h and all references to V8ClassIndex.
        
        https://bugs.webkit.org/show_bug.cgi?id=33477

        * WebCore.gypi:
        * bindings/scripts/CodeGeneratorV8.pm:
        * bindings/v8/NPV8Object.cpp:
        * bindings/v8/NPV8Object.h:
        * bindings/v8/V8Collection.h:
        * bindings/v8/V8DOMWindowShell.cpp:
        * bindings/v8/V8DOMWindowShell.h:
        * bindings/v8/V8DOMWrapper.cpp:
        * bindings/v8/V8DOMWrapper.h:
        * bindings/v8/V8GCController.cpp:
        * bindings/v8/V8Helpers.cpp:
        * bindings/v8/V8Index.h: Removed.
        * bindings/v8/V8IsolatedContext.h:
        * bindings/v8/V8NPObject.cpp:
        * bindings/v8/V8Proxy.cpp:
        * bindings/v8/V8Proxy.h:
        * bindings/v8/V8SVGPODTypeWrapper.h:
        * bindings/v8/WorkerContextExecutionProxy.cpp:
        * bindings/v8/WorkerContextExecutionProxy.h:
        * bindings/v8/WrapperTypeInfo.h: Move WrapperTypeInfo struct into its own file from V8Index.h.
        * bindings/v8/custom/V8CanvasRenderingContext2DCustom.cpp:
        * bindings/v8/custom/V8DOMWindowCustom.cpp:
        * bindings/v8/custom/V8EventSourceConstructor.cpp:
        * bindings/v8/custom/V8HTMLAudioElementConstructor.cpp:
        * bindings/v8/custom/V8HTMLAudioElementConstructor.h:
        * bindings/v8/custom/V8HTMLImageElementConstructor.cpp:
        * bindings/v8/custom/V8HTMLImageElementConstructor.h:
        * bindings/v8/custom/V8HTMLOptionElementConstructor.cpp:
        * bindings/v8/custom/V8HTMLOptionElementConstructor.h:
        * bindings/v8/custom/V8HistoryCustom.cpp:
        * bindings/v8/custom/V8LocationCustom.cpp:
        * bindings/v8/custom/V8WebGLArrayCustom.h:
        * bindings/v8/custom/V8WebGLByteArrayCustom.cpp:
        * bindings/v8/custom/V8WebGLFloatArrayCustom.cpp:
        * bindings/v8/custom/V8WebGLIntArrayCustom.cpp:
        * bindings/v8/custom/V8WebGLRenderingContextCustom.cpp:
        * bindings/v8/custom/V8WebGLShortArrayCustom.cpp:
        * bindings/v8/custom/V8WebGLUnsignedByteArrayCustom.cpp:
        * bindings/v8/custom/V8WebGLUnsignedIntArrayCustom.cpp:
        * bindings/v8/custom/V8WebGLUnsignedShortArrayCustom.cpp:
        * bindings/v8/custom/V8WebKitPointConstructor.cpp:

2010-03-18  Yury Semikhatsky  <yurys@chromium.org>

        Reviewed by Pavel Feldman.

        Preserve console history between debugging sessions.

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

        * inspector/front-end/ConsoleView.js:
        (WebInspector.ConsoleView.prototype._settingsLoaded):
        (WebInspector.ConsoleView.prototype._enterKeyPressed.printResult):
        (WebInspector.ConsoleView.prototype._enterKeyPressed):
        * inspector/front-end/Settings.js:
        (WebInspector.Settings.prototype._load):

2010-03-18  Kim Grönholm  <kim.gronholm@nomovok.com>

        Reviewed by Simon Hausmann.

        [Qt] GraphicsLayer: Pausing and resuming of animations don't work as expected
        https://bugs.webkit.org/show_bug.cgi?id=36219
        
        addAnimation and pauseAnimation were handling animation state changes in
        the wrong way.
        Apparently WebCore calls addAnimation for resuming, so we have to make 
        sure to resume an existing animation if that happens. Also, timeOffset 
        is now used for synchronization of the Qt animation clock with the 
        WebCore clock, as opposed to using it as a delay timer. 
        Both those fixes were necessary to get the layout test to work.
        
        LayoutTests/animations/play-state.html now passed on Qt.

        * platform/graphics/qt/GraphicsLayerQt.cpp:
        (WebCore::AnimationQtBase::AnimationQtBase):
        (WebCore::TransformAnimationQt::updateState):
        (WebCore::GraphicsLayerQt::addAnimation):
        (WebCore::GraphicsLayerQt::pauseAnimation):

2010-03-18  Adam Langley  <agl@chromium.org>

        Reviewed by David Levin.

        [chromium] Fix inverted logic in per-strike renderer patch.

        I screwed up in r55089 and got one of the conditions backwards. Thanks
        to Roman Tsisyk for pointing it out.

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

        Test: platform/chromium/fast/text/chromium-linux-fontconfig-renderstyle.html

        * platform/graphics/chromium/FontPlatformDataLinux.cpp:
        (WebCore::FontPlatformData::querySystemForRenderStyle):

2010-03-18  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Timothy Hatcher.

        Web Inspector: Show inherited styles for a selected DOM element

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

        * English.lproj/localizedStrings.js:
        * inspector/InspectorDOMAgent.cpp:
        (WebCore::InspectorDOMAgent::getStyles):
        (WebCore::InspectorDOMAgent::populateObjectWithStyleProperties):
        * inspector/front-end/DOMAgent.js:
        (WebInspector.CSSStyleDeclaration):
        * inspector/front-end/StylesSidebarPane.js:
        (WebInspector.StylesSidebarPane.prototype._update):
        (WebInspector.StylesSidebarPane.prototype._containsInherited):
        (WebInspector.StylePropertiesSection):
        (WebInspector.StylePropertiesSection.prototype.isPropertyInherited):
        (WebInspector.StylePropertiesSection.prototype.onpopulate):

2010-03-15  Antonio Gomes  <tonikitoo@webkit.org>

        Reviewed by Gustavo Noronha.
        Patch by Antonio Gomes <tonikitoo@webkit.org>

        Spatial Navigation: Add isNull() and document() convenience methods to FocusCandidate.
        https://bugs.webkit.org/show_bug.cgi?id=36167

        It turns out that Spatial Navigation related code (in FocusController.cpp for
        instance) can be simplified and look better if FocusCandidate class offer some
        convenience method. This patch introduces a couple of them (isNull and a Document
        getter). It also adds another constructor that receives a Node as parameter.

        A followup refactoring patch will be making use of these helper methods.

        * page/SpatialNavigation.h:
        (WebCore::FocusCandidate::FocusCandidate): Added a "Node*" parameter
        to FocusCandidate's constructor.
        (WebCore::FocusCandidate::isNull): In the Spatial Navigation logic, a NULL
        FocusCandidate object is one that does not hold a valid reference to a "Node*".
        (WebCore::FocusCandidate::document): This method returns a pointer for the FocusCandidate
        node's document, if |node| is a valid pointer.

2010-03-18  Noam Rosenthal  <noam.rosenthal@nokia.com>

        Reviewed by Antti Koivisto.

        [Qt] [Performance] GraphicsLayerQt updates the scene too often
        https://bugs.webkit.org/show_bug.cgi?id=36158

        This fix makes sure that flushChanges is only called when necessary,
        by calling the notifySync function asynchronously, which makes sure flushChanges() is called
        after the WebCore compositor has made all its changes.

        This has shown a visual improvement on several test-cases.

        * Makefile:
        * platform/graphics/qt/GraphicsLayerQt.cpp:
        (WebCore::GraphicsLayerQtImpl::):
        (WebCore::GraphicsLayerQtImpl::notifySyncRequired):
        (WebCore::GraphicsLayerQtImpl::notifyChange):
        (WebCore::GraphicsLayerQtImpl::flushChanges):
        (WebCore::GraphicsLayerQt::setMaskLayer):
        (WebCore::GraphicsLayerQt::setPosition):
        (WebCore::GraphicsLayerQt::setAnchorPoint):
        (WebCore::GraphicsLayerQt::setSize):
        (WebCore::GraphicsLayerQt::setTransform):
        (WebCore::GraphicsLayerQt::setChildrenTransform):
        (WebCore::GraphicsLayerQt::setPreserves3D):
        (WebCore::GraphicsLayerQt::setMasksToBounds):
        (WebCore::GraphicsLayerQt::setDrawsContent):
        (WebCore::GraphicsLayerQt::setBackgroundColor):
        (WebCore::GraphicsLayerQt::clearBackgroundColor):
        (WebCore::GraphicsLayerQt::setContentsOpaque):
        (WebCore::GraphicsLayerQt::setBackfaceVisibility):
        (WebCore::GraphicsLayerQt::setOpacity):
        (WebCore::GraphicsLayerQt::setContentsRect):

2010-03-18  Stephen White  <senorblanco@chromium.org>

        Reviewed by Oliver Hunt.

        Parsing of rgb() colors in HTML canvas is still fairly slow.
        findNamedColor() was showing up as hot, so this patch attempts to
        avoid calling it by putting the rgb() check ahead of the named
        colors.  It also removes a call to Color::Color() from
        CanvasStyle, which was doing a redundant check for the hex
        color and named colors, which CSSParser already does.  Finally, it
        changes the ad-hoc parser to check for negative values, and clamps them
        at zero.  This avoids the lex/yacc path for rgb() colors with
        negative color components.

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

        Covered by fast/canvas/set-colors.html.

        * css/CSSParser.cpp:
        (WebCore::parseInt):
        (WebCore::CSSParser::parseColor):
        * html/canvas/CanvasStyle.cpp:
        (WebCore::CanvasStyle::applyFillColor):

2010-03-18  David Kilzer  <ddkilzer@apple.com>

        <http://webkit.org/b/36246> Node::removeAllEventListenersSlowCase is declared but not used

        Reviewed by Sam Weinig.

        * dom/Node.h:
        (WebCore::Node::removeAllEventListenersSlowCase): Removed
        declaration.  Implementation was removed in r48701.

2010-03-17  Stephan Aßmus  <superstippi@gmx.de>

        Reviewed by Oliver Hunt.

        [Haiku] Implement ImageBuffer support
        https://bugs.webkit.org/show_bug.cgi?id=35288

        Covered by existing tests.

        The StillImage class implements WebCore::Image by wrapping a native
        BBitmap. It will be needed to implement WebCore::ImageBuffer. This
        solution is just like it's done in the Qt port.

        * platform/graphics/haiku/StillImageHaiku.cpp: Added.
        (WebCore::StillImage::StillImage):
        (WebCore::StillImage::destroyDecodedData):
        (WebCore::StillImage::decodedSize):
        (WebCore::StillImage::size):
        (WebCore::StillImage::nativeImageForCurrentFrame):
        (WebCore::StillImage::draw):
        * platform/graphics/haiku/StillImageHaiku.h: Added.
        (WebCore::StillImage::create):

2010-03-17  Holger Hans Peter Freyther  <zecke@selfish.org>

        Rubber stamped by Gustavo Noronha Silva.

        [Gtk+] Avoid making a copy of the HTTPHeaderMap.

        ResourceRequest::httpHeaderFields() is returning a const
        reference but we are storing it as a simple value. This
        means that we run either the copy constructor or the assignment
        operator and make a copy of the RefPtrs.

        This extra copy can be avoided easily by storing
        the result as a const reference.

        * platform/network/soup/ResourceRequestSoup.cpp:
        (WebCore::ResourceRequest::toSoupMessage):
        * platform/network/soup/ResourceResponseSoup.cpp:
        (WebCore::ResourceResponseSoup::toSoupMessage):

2010-03-17  Alexander Pavlov  <apavlov@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: When switching resources in the Resources panel, the Content tab is always selected
        https://bugs.webkit.org/show_bug.cgi?id=36222

        * inspector/front-end/ResourcesPanel.js:
        (WebInspector.ResourcesPanel.prototype.showResource):

2010-03-17  Brady Eidson  <beidson@apple.com>

        Reviewed by Darin Adler.

        databaseIdentifiers are not filtered for slashes
        <rdar://problem/7708789> and https://bugs.webkit.org/show_bug.cgi?id=36243

        In addition to filtering for '/' and '\', to remove the directory vulnerability
        on all platforms, it seems worth it to also escape other characters that are
        obviously dangerous or illegal to have in a filename (mostly inspired by the 
        Windows illegal-character list).

        No new tests - It's unclear how a test could possibly work into our testing
        infrastructure.

        * page/SecurityOrigin.cpp:
        (WebCore::): Added a 128-bool table "needsEscaping" that has a true/false answer
          for lower-ASCII.
        (WebCore::SecurityOrigin::SecurityOrigin):
        (WebCore::SecurityOrigin::createFromDatabaseIdentifier): "Unescape" the host
          component using the KURL utility.
        (WebCore::shouldEscapeUChar): If the char is lower-ASCII, look it up in the 
          needsEscaping table. Otherwise, let it pass.
        (WebCore::encodedHost): Modeled after KURL's host escaping method, but targeted 
          for the escaping considerations for the host component. We don't use the KURL
          version because this one is "different" enough because it operates on UTF16 and
          has its own "is bad character?" decider.
        (WebCore::SecurityOrigin::databaseIdentifier): Create the escaped host if needed,
          and use it instead of the unescaped host.
        * page/SecurityOrigin.h:

2010-03-17  Dmitry Titov  <dimich@chromium.org>

        Reviewed by Dimitri Glazkov.

        [v8] Avoid reentry into v8 after TerminateExecution() on a worker thread.
        https://bugs.webkit.org/show_bug.cgi?id=36239

        Test: fast/workers/termination-with-port-messages.html

        * bindings/v8/V8Proxy.h:
        (WebCore::throwError): Avoid throwing if v8 execution is terminated anyways.
        * bindings/v8/WorkerScriptController.h:
        (WebCore::WorkerScriptController::proxy): Return V8 proxy as 0 if execution is terminating. Callers to check for 0 before invoking v8.
        * bindings/v8/custom/V8WorkerContextCustom.cpp:
        (WebCore::SetTimeoutOrInterval): Bail out if v8 proxy is 0.
        (WebCore::toV8): Ditto

2010-03-17  José Millán Soto  <jmillan@igalia.com>

        Reviewed by Adam Barth.

        Change the way of prefetching DNS to allow prefetching function to use full URL
        https://bugs.webkit.org/show_bug.cgi?id=35589

        Creates a new function, ResourceHandle::prepareForURL, whose default implementation
        calls prefetchDNS with the host of the given URL as the parameter.
        Soup implementation of ResourceHandle::prepareForURL executes soup_session_prepare_for_uri.
        Soup implementation of prefetchDNS is removed.
        Changed various prefetchDNS calls to ResourceHandle::prepareForURL calls.

        * GNUmakefile.am:
        * html/HTMLAnchorElement.cpp:
        (WebCore::HTMLAnchorElement::parseMappedAttribute):
        * html/HTMLLinkElement.cpp:
        (WebCore::HTMLLinkElement::process):
        * page/Chrome.cpp:
        (WebCore::Chrome::mouseDidMoveOverElement):
        * platform/network/DNS.h:
        * platform/network/ResourceHandle.cpp:
        (WebCore::ResourceHandle::prepareForURL):
        * platform/network/ResourceHandle.h:
        * platform/network/chromium/DNSChromium.cpp:
        (WebCore::ResourceHandle::prepareForURL):
        * platform/network/soup/DNSSoup.cpp: Removed.
        * platform/network/soup/ResourceHandleSoup.cpp:
        (WebCore::ResourceHandle::prepareForURL):
        * wml/WMLAElement.cpp:
        (WebCore::WMLAElement::parseMappedAttribute):

2010-03-17  Kenneth Russell  <kbr@google.com>

        Reviewed by Darin Fisher.

        Revert WebGL context attributes changes 33416 / r56074 and 36200 / r56093
        https://bugs.webkit.org/show_bug.cgi?id=36233

        The patch for bug 33416, which added multisampling support to the
        WebGL back buffer, uncovered some OpenGL driver bugs on the build
        bots which need further investigation to determine the appropriate
        workaround. Reverting this change, the minor build fix in 36189,
        and the skipping of the affected tests in bug 36200.

        Built and tested WebKit and Chromium and ran all WebGL layout
        tests in both.

        * bindings/v8/custom/V8HTMLCanvasElementCustom.cpp:
        (WebCore::V8HTMLCanvasElement::getContextCallback):
        * platform/graphics/GraphicsContext3D.h:
        * platform/graphics/mac/Canvas3DLayer.h:
        * platform/graphics/mac/Canvas3DLayer.mm:
        (-[Canvas3DLayer drawInCGLContext:pixelFormat:forLayerTime:displayTime:]):
        * platform/graphics/mac/GraphicsContext3DMac.cpp:
        (WebCore::GraphicsContext3D::GraphicsContext3D):
        (WebCore::GraphicsContext3D::~GraphicsContext3D):
        (WebCore::GraphicsContext3D::reshape):
        (WebCore::GraphicsContext3D::bindFramebuffer):
        (WebCore::GraphicsContext3D::readPixels):
        * platform/graphics/mac/GraphicsLayerCA.mm:
        (WebCore::GraphicsLayerCA::setContentsToGraphicsContext3D):

2010-03-17  Yael Aharon  <yael.aharon@nokia.com>

        Reviewed by Darin Adler.

        Optimize painting for HTMLProgressElement
        https://bugs.webkit.org/show_bug.cgi?id=36113
        Cache the progress bar's position, so it is not required to recalculate
        it for each repaint. 
        Call repaintRectangle() when the position changes.

        No new tests, as no new functionality introduced.

        * html/HTMLProgressElement.cpp:
        (WebCore::HTMLProgressElement::parseMappedAttribute):
        * platform/qt/RenderThemeQt.cpp:
        (WebCore::RenderThemeQt::getNumberOfPixelsForProgressPosition):
        (WebCore::RenderThemeQt::paintProgressBar):
        * platform/qt/RenderThemeQt.h:
        * rendering/RenderProgress.cpp:
        (WebCore::RenderProgress::RenderProgress):
        (WebCore::RenderProgress::updateFromElement):
        * rendering/RenderProgress.h:
        (WebCore::RenderProgress::position):
        * rendering/RenderTheme.cpp:
        (WebCore::RenderTheme::getNumberOfPixelsForProgressPosition):
        * rendering/RenderTheme.h:

2010-03-17  Antonio Gomes  <tonikitoo@webkit.org>

        Mac Buildfix: Using ASSERT_UNUSED instead of ASSERT.

        Reviewed by Simon fraser.
        Patch by Antonio Gomes <tonikitoo@webkit.org>

        * dom/SelectElement.cpp:
        (WebCore::SelectElement::listBoxDefaultEventHandler):

2010-03-17  Enrica Casucci  <enrica@apple.com>

        Reviewed by Darin Adler.

        Missing support for showing compositing layers borders and repaint count on Windows.
        <rdar://problem/7760736>
        <https://bugs.webkit.org/show_bug.cgi?id=36197>

        * platform/graphics/win/GraphicsLayerCACF.cpp:
        (WebCore::WebLayer::drawInContext): Modified to use the correct font on Windows.

2010-03-16  Luiz Agostini  <luiz.agostini@openbossa.org>

        Reviewed by Antti Koivisto.

        [Qt] Multiselect Popup - SelectElement refactoring.
        https://bugs.webkit.org/show_bug.cgi?id=36124

        As it is today it is not possible to the menulists popups to tell SelectElement
        that more then one option is selected. If you select one the other ones
        selected state will turn off.

        For <select multiple> I needed to extend the API used by menulist popups. This
        is the first step. Just refactoring SelectElement without any behavior change.
        Separating code that will be reused in future patches.

        * dom/SelectElement.cpp:
        (WebCore::SelectElement::updateSelectedState):
        (WebCore::SelectElement::listBoxDefaultEventHandler):
        * dom/SelectElement.h:

2010-03-17  Nate Chapin  <japhet@chromium.org>

        Unreviewed, Chromium build fix.

        Delete the correct file this time.

        * bindings/v8/custom/V8XMLHttpRequestCustom.cpp: Copied from WebCore/bindings/v8/custom/V8XMLHttpRequestCustom.cpp.
        * bindings/v8/custom/V8XMLHttpRequestUploadCustom.cpp: Removed.

2010-03-17  Nate Chapin  <japhet@chromium.org>

        Reviewed by Dimitri Glazkov.

        [V8] Remove custom bindings callbacks that aren't in use.
        (The relevant .idl doesn't mark them as V8Custom or Custom).
        
        https://bugs.webkit.org/show_bug.cgi?id=33066

        * Android.v8bindings.mk:
        * WebCore.gypi:
        * bindings/scripts/CodeGeneratorV8.pm:
        * bindings/v8/custom/V8DOMWindowCustom.cpp:
        * bindings/v8/custom/V8WebGLArrayCustom.h:
        * bindings/v8/custom/V8WebGLByteArrayCustom.cpp:
        * bindings/v8/custom/V8WebGLFloatArrayCustom.cpp:
        * bindings/v8/custom/V8WebGLIntArrayCustom.cpp:
        * bindings/v8/custom/V8WebGLShortArrayCustom.cpp:
        * bindings/v8/custom/V8WebGLUnsignedByteArrayCustom.cpp:
        * bindings/v8/custom/V8WebGLUnsignedIntArrayCustom.cpp:
        * bindings/v8/custom/V8WebGLUnsignedShortArrayCustom.cpp:
        * bindings/v8/custom/V8XMLHttpRequestCustom.cpp:
        * bindings/v8/custom/V8XMLHttpRequestUploadCustom.cpp: Removed.

2010-03-17  Steve Block  <steveblock@google.com>

        Reviewed by Dimitri Glazkov.

        Adds ENABLE(WORKERS) guards to V8 bindings
        https://bugs.webkit.org/show_bug.cgi?id=36221

        Build fix only, no new tests.

        * bindings/v8/V8DOMWrapper.cpp:
        (WebCore::V8DOMWrapper::instantiateV8Object):
        * bindings/v8/V8Proxy.cpp:
        (WebCore::toV8Context):

2010-03-17  Yury Semikhatsky  <yurys@chromium.org>

        Reviewed by Pavel Feldman.

        Remove unused reference to InspectorController from InspectorFrontend.

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

        * inspector/InspectorFrontend.h:

2010-03-17 Ilya Tikhonovsky  <loislo@chromium.org>

        Reviewed by Pavel Feldman.

        WebInspector: Timeline improvements - next iteration.

        The top level records should be collapsed.
        Virtually linked events should be nested in Timeline like Send Request and
        corresponding Received Responce, Timer Install and Timer Fire etc.
        It should be possible to see Main Resource request.

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

        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::resetScriptObjects):
        (WebCore::InspectorController::didReceiveResponse):
        * inspector/InspectorTimelineAgent.cpp:
        (WebCore::InspectorTimelineAgent::willReceiveResourceResponse):
        (WebCore::InspectorTimelineAgent::didReceiveResourceResponse):
        * inspector/InspectorTimelineAgent.h:
        * inspector/front-end/TimelinePanel.js:
        (WebInspector.TimelinePanel):
        (WebInspector.TimelinePanel.prototype._createStatusbarButtons):
        (WebInspector.TimelinePanel.prototype.addRecordToTimeline):
        (WebInspector.TimelinePanel.prototype._findParentRecord):
        (WebInspector.TimelinePanel.prototype._innerAddRecordToTimeline):
        (WebInspector.TimelinePanel.prototype.resize):
        (WebInspector.TimelinePanel.prototype._createTopLevelRecord):
        (WebInspector.TimelinePanel.prototype.reset):
        (WebInspector.TimelinePanel.prototype._clean):
        (WebInspector.TimelinePanel.prototype._refresh):
        (WebInspector.TimelinePanel.prototype._refreshRecords):
        (WebInspector.TimelinePanel.prototype._addToRecordsWindow):
        (WebInspector.TimelineCalculator.prototype.computeBarGraphPercentages):
        (WebInspector.TimelineCalculator.prototype.updateBoundaries):
        (WebInspector.TimelineRecordGraphRow):
        (WebInspector.TimelineRecordGraphRow.prototype.update):
        (WebInspector.TimelinePanel.FormattedRecord):
        (WebInspector.TimelinePanel.FormattedRecord.prototype.get children):
        (WebInspector.TimelinePanel.FormattedRecord.prototype._generatePopupContent):
        * inspector/front-end/inspector.css:
        * loader/ResourceLoader.cpp:
        (WebCore::ResourceLoader::didReceiveResponse):

2010-03-17  Alexander Pavlov  <apavlov@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: Reimplement style-related audits using native API
        https://bugs.webkit.org/show_bug.cgi?id=36172

        * inspector/InspectorBackend.cpp:
        (WebCore::InspectorBackend::getAllStyles):
        * inspector/InspectorBackend.h:
        * inspector/InspectorBackend.idl:
        * inspector/InspectorDOMAgent.cpp:
        (WebCore::InspectorDOMAgent::getAllStyles):
        (WebCore::InspectorDOMAgent::getMatchedCSSRules):
        (WebCore::InspectorDOMAgent::buildObjectForStyleSheet):
        (WebCore::InspectorDOMAgent::buildObjectForRule):
        * inspector/InspectorDOMAgent.h:
        * inspector/InspectorFrontend.cpp:
        (WebCore::InspectorFrontend::didGetAllStyles):
        * inspector/InspectorFrontend.h:
        * inspector/front-end/AuditRules.js:
        (WebInspector.AuditRules.evaluateInTargetWindow):
        (WebInspector.AuditRules.UnusedCssRule.prototype.doRun.evalCallback.selectorsCallback):
        (WebInspector.AuditRules.UnusedCssRule.prototype.doRun.evalCallback.routine):
        (WebInspector.AuditRules.UnusedCssRule.prototype.doRun.evalCallback):
        (WebInspector.AuditRules.UnusedCssRule.prototype.doRun.routine):
        (WebInspector.AuditRules.UnusedCssRule.prototype.doRun):
        (WebInspector.AuditRules.ImageDimensionsRule.prototype.doRun):
        (WebInspector.AuditRules.CssInHeadRule.prototype.doRun):
        (WebInspector.AuditRules.StylesScriptsOrderRule.prototype.doRun):
        * inspector/front-end/DOMAgent.js:
        * inspector/front-end/InjectedScript.js:
        (injectedScriptConstructor):

2010-03-17  Steve Block  <steveblock@google.com>

        Reviewed by Jeremy Orlow.

        Replace instances of bzero in WebCore/bridge common code with memset
        https://bugs.webkit.org/show_bug.cgi?id=36214

        Syntax change only, no new tests.

        * bridge/jni/JNIUtility.cpp:
        (JSC::Bindings::getJNIField):
        * bridge/jni/jsc/JNIBridgeJSC.cpp:
        (JavaField::dispatchValueFromInstance):
        * bridge/jni/jsc/JNIUtilityPrivate.cpp:
        (JSC::Bindings::convertValueToJValue):
        * bridge/jni/v8/JNIUtilityPrivate.cpp:
        (JSC::Bindings::convertNPVariantToJValue):
        * bridge/jni/v8/JavaNPObjectV8.cpp:
        (JSC::Bindings::AllocJavaNPObject):

2010-03-17  Yury Semikhatsky  <yurys@chromium.org>

        Reviewed by Pavel Feldman.

        Mark inspector resources as changed so that they are reloaded on the next frontend connection.
        
        Split resetScriptObjects into code specific for page navigation and insepctor frontend disconnection.

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

        * WebCore.xcodeproj/project.pbxproj: Added InspectorWorkerResource.h to the project file.
        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::disconnectFrontend):
        (WebCore::InspectorController::unbindAllResources):
        (WebCore::InspectorController::didCommitLoad):
        * inspector/InspectorController.h:
        * inspector/InspectorResource.cpp:
        (WebCore::InspectorResource::releaseScriptObject):

2010-03-17  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Timothy Hatcher.

        Web Inspector: Capture main resource load events in timeline panel.

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

        * inspector/front-end/TimelinePanel.js:
        (WebInspector.TimelinePanel.prototype._createStatusbarButtons):
        (WebInspector.TimelinePanel.prototype._toggleTimelineButtonClicked):
        (WebInspector.TimelinePanel.prototype.timelineWasStopped):
        (WebInspector.TimelinePanel.prototype.addRecordToTimeline):
        (WebInspector.TimelinePanel.prototype._clearPanel):
        (WebInspector.TimelinePanel.FormattedRecord):

2010-03-17  Zoltan Horvath  <zoltan@webkit.org>

        Reviewed by Eric Seidel.

        Allow custom memory allocation control for AtomicString class
        https://bugs.webkit.org/show_bug.cgi?id=35907

        Inherits the following class from FastAllocBase because it is
        instantiated by 'new':

        class name   - instantiated at: WebCore/'location'
        AtomicString - WebCore/html/HTMLTableElement.cpp:525

        * platform/text/AtomicString.h:

2010-03-16  John Abd-El-Malek  <jam@chromium.org>

        Reviewed by Darin Fisher.

        Give keyboard focus to PluginDocuments by default
        https://bugs.webkit.org/show_bug.cgi?id=36147

        Test: http/tests/plugins/plugin-document-has-focus.html

        * loader/PluginDocument.cpp:
        (WebCore::PluginDocument::pluginNode):
        * loader/PluginDocument.h:
        * page/EventHandler.cpp:
        (WebCore::eventTargetNodeForDocument):

2010-03-16  Chris Fleizach  <cfleizach@apple.com>

        Reviewed by Darin Adler.

        REGRESSION (r53857): Crash when tabbing to <map>
        https://bugs.webkit.org/show_bug.cgi?id=36017

        Test: fast/events/imagemap-norender-crash.html

        * html/HTMLMapElement.cpp:
        (WebCore::HTMLMapElement::imageElement):

2010-03-16  Brent Fulgham  <bfulgham@webkit.org>

        Build fix.  No Review.

        Correct missing includes in cURL network backend introduced
        by recent changes in WebKit.

        * platform/network/curl/ResourceHandleCurl.cpp: Add missing
          includes for SharedBuffer and PassRefPtr.
        (WebCore::ResourceHandle::loadResourceSynchronously): Correct
          constructor signature for ResourceHandle to match @r55688.
        * platform/network/curl/ResourceHandleManager.cpp: Add missing
          include for RetainPtr.

2010-03-16  Zhenyao Mo  <zmo@google.com>

        Reviewed by Darin Fisher.

        Hook up WebGLContextAttributes to OpenGL context creation code
        https://bugs.webkit.org/show_bug.cgi?id=33416

        Test: fast/canvas/webgl/context-attributes-alpha-depth-stencil-antialias.html

        * bindings/v8/custom/V8HTMLCanvasElementCustom.cpp: Fix an index bug.
        * platform/graphics/GraphicsContext3D.h: Add members/functions for multisampling/stencil buffer purpose.
        * platform/graphics/mac/Canvas3DLayer.h: Add GraphicsContext3D as a member of Canvas3DLayer.
        * platform/graphics/mac/Canvas3DLayer.mm: Add multisampling support.
        * platform/graphics/mac/GraphicsContext3DMac.cpp: Hook up WebGLContextAttributes to OpenGL context creation code for Mac.
        * platform/graphics/mac/GraphicsLayerCA.mm: Adjust to modified Canvas3DLayer init call.

2010-03-16  Joanmarie Diggs  <joanmarie.diggs@gmail.com>

        Reviewed by Xan Lopez.

        https://bugs.webkit.org/show_bug.cgi?id=35504
        [Gtk] Evaluate and fix AtkTable for layout tables

        Causes "layout tables" to be exposed as AccessibilityTables for Gtk.

        * accessibility/AccessibilityTable.cpp:
        (AccessibilityTable::isTableExposableThroughAccessibility):

2010-03-16  Gustavo Noronha Silva  <gustavo.noronha@collabora.co.uk>

        Unreviewed. Build fix for distcheck.

        * GNUmakefile.am:

2010-03-15  Darin Fisher  <darin@chromium.org>

        Reviewed by Adam Barth.

        https://bugs.webkit.org/show_bug.cgi?id=36152
        [chromium] Add support for history.pushState and history.replaceState

        This is covered by the existing tests in fast/loader/stateobjects

        * bindings/v8/SerializedScriptValue.cpp:
        (WebCore::ZigZag::Deserializer::deserialize):
        (WebCore::SerializedScriptValue::deserialize):
        * bindings/v8/SerializedScriptValue.h:
        Switch to returning v8::Null instead of the empty value to match JSC
        and the spec.

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::loadInSameDocument): Call
        dispatchDidNavigateWithinPage just before dispatching events to the
        page.  This ordering is important since the event handlers could
        destroy the page or start another navigation.

        * loader/FrameLoaderClient.h: Add dispatchDidNavigateWithinPage to
        notify the client whenever a navigation occurs without changing any of
        the documents in the page.

2010-03-16  Adam Roben  <aroben@apple.com>

        Fix linker warnings when building WebCore on Windows

        Rubber-stamped by Steve Falkenburg.

        * WebCore.vcproj/WebCore.vcproj: Exclude JSDOMFormData.cpp from the
        build, since it's already included in DerivedSources.cpp. Also let VS
        sort this file as it saw fit.

2010-03-15  Antti Koivisto  <koivisto@iki.fi>

        Reviewed by Simon Hausmann.

        https://bugs.webkit.org/show_bug.cgi?id=36121
        [Qt] Make WebKit scrollbars work with tiling
         
        Translate coordinates correctly.

        * page/Frame.cpp:
        (WebCore::Frame::tiledBackingStorePaintEnd):

2010-03-16  Jakub Wieczorek  <jwieczorek@webkit.org>

        Reviewed by Eric Seidel.

        [Qt] MediaPlayerPrivate: Initialize m_mediaPlayerControl to 0 to avoid crashes
        when no media services can be found.

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

        * platform/graphics/qt/MediaPlayerPrivateQt.cpp:
        (WebCore::MediaPlayerPrivate::MediaPlayerPrivate):

2010-03-16  Adam Barth  <abarth@webkit.org>

        Unreviewed.

        noscript tag should render when @sandbox disables JavaScript
        https://bugs.webkit.org/show_bug.cgi?id=36092

        Add missing "!" in plugin code.  Should fix plugins/embed-inside-object
        on Gtk and Qt.

        * plugins/PluginView.cpp:
        (WebCore::PluginView::load):

2010-03-16  Nate Chapin  <japhet@chromium.org>

        Reviewed by Dimitri Glazkov.

        [V8] Delete DerivedSourcesAllInOne.cpp.

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

        * Android.v8bindings.mk:
        * bindings/v8/DerivedSourcesAllInOne.cpp: Removed.

2010-03-16  Gustavo Noronha Silva  <gustavo.noronha@collabora.co.uk>

        Revert r56006 as it caused functional issues. We will work on a
        testcase, and rework the fix, and land when we have this a bit
        more testable.

        * platform/gtk/RenderThemeGtk.cpp:
        (WebCore::RenderThemeGtk::paintMediaPlayButton):

2010-03-16  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Timothy Hatcher.

        Web Inspector: Errors when inspecting styles of non-renderable elements in XHTML.

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

        * inspector/InspectorDOMAgent.cpp:
        (WebCore::InspectorDOMAgent::getStyles):
        * inspector/front-end/DOMAgent.js:
        (WebInspector.DOMNode.prototype._addAttribute):
        (WebInspector.DOMWindow.prototype.Object):
        * inspector/front-end/MetricsSidebarPane.js:
        * inspector/front-end/StylesSidebarPane.js:
        (WebInspector.StylesSidebarPane.prototype.update.callback):
        (WebInspector.StylesSidebarPane.prototype.update):
        (WebInspector.StylesSidebarPane.prototype._update):

2010-03-12  Antonio Gomes  <tonikitoo@webkit.org>

        Reviewed by Simon Fraser.
        Patch by Antonio Gomes <tonikitoo@webkit.org>

        Spatial Navigation: Add a scrollIntoView call when focusing an element.
        https://bugs.webkit.org/show_bug.cgi?id=36020

        When focusing an element in Spatial Navigation logic, it is desired to make
        this element visible in the current viewport. For that to happen, there
        could be a call to Element's scrollIntoView method at focusing time. However
        for visual aspects, it is preferable to scroll to an inflated rect of |element|
        in order to consider the focus outline width.
        As Element's scrollIntoView method does not provide this flexibility, patch adds
        a custom scrollIntoView method to SpatialNavigation.h .

        * page/FocusController.cpp:
        (WebCore::FocusController::advanceFocusDirectionally):
        * page/SpatialNavigation.cpp:
        (WebCore::scrollIntoView):
        * page/SpatialNavigation.h:

2010-03-10  Gustavo Noronha Silva  <gustavo.noronha@collabora.co.uk>

        Reviewed by Eric Seidel.

        [GTK] Position queries are lagging
        https://bugs.webkit.org/show_bug.cgi?id=34372

        Normalize timeout priorities through the GStreamer media player as
        a whole. This should help avoid that any of them is starved.

        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:
        (WebCore::MediaPlayerPrivate::volumeChanged):
        (WebCore::MediaPlayerPrivate::processBufferingStats):
        (WebCore::MediaPlayerPrivate::muteChanged):
        * platform/graphics/gstreamer/VideoSinkGStreamer.cpp:
        (webkit_video_sink_render):
        * platform/graphics/gstreamer/WebKitWebSourceGStreamer.cpp:
        (webKitWebSrcNeedDataCb):
        (webKitWebSrcEnoughDataCb):
        (webKitWebSrcSeekDataCb):

2010-03-10  Gustavo Noronha Silva  <gustavo.noronha@collabora.co.uk>

        Reviewed by Eric Seidel.

        [GTK] Position queries are lagging
        https://bugs.webkit.org/show_bug.cgi?id=34372

        Use default priority also for parsing data: URIs.

        * platform/network/soup/ResourceHandleSoup.cpp:
        (WebCore::startData):

2010-03-10  Gustavo Noronha Silva  <gustavo.noronha@collabora.co.uk>

        Reviewed by Eric Seidel.

        [GTK] Position queries are lagging
        https://bugs.webkit.org/show_bug.cgi?id=34372

        Normalize SharedTimers priorities to always be
        G_PRIORITY_DEFAULT. As it is currently, timers that should happen
        immediately (0 miliseconds delay) end up delayed by a lot of time
        due to glib starving lower priority sources.

        * platform/gtk/SharedTimerGtk.cpp:
        (WebCore::setSharedTimerFireTime):

2010-03-16  Xan Lopez  <xlopez@igalia.com>

        Reviewed by Gustavo Noronha.

        Add support for Fast Mobile Scrolling in the build system.

        * GNUmakefile.am:

2010-03-11  Yury Semikhatsky <yurys@chromium.org>

        Reviewed by Pavel Feldman.

        Introduce InspectorFrontendClient that provides InspectorFrontend with an interface to the embedder. InspectorClient now serves as a delegate for InspectorController and does not contain methods for managing inspector frontend window. That allows to create remote InspectorFrontendHost.

        Introduce InspectorFrontendClient that would provide InspectorFrontend with an interface to the embedder
        https://bugs.webkit.org/show_bug.cgi?id=35036

        * GNUmakefile.am:
        * WebCore.Inspector.exp:
        * WebCore.base.exp:
        * WebCore.gypi:
        * WebCore.order:
        * WebCore.pro:
        * WebCore.xcodeproj/project.pbxproj:
        * inspector/ConsoleMessage.cpp:
        (WebCore::ConsoleMessage::addToFrontend):
        * inspector/ConsoleMessage.h:
        * inspector/InspectorClient.h:
        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::InspectorController):
        (WebCore::InspectorController::~InspectorController):
        (WebCore::InspectorController::inspectedPageDestroyed):
        (WebCore::InspectorController::windowVisible):
        (WebCore::InspectorController::frontendReady):
        (WebCore::InspectorController::willCloseFrontend):
        (WebCore::InspectorController::addConsoleMessage):
        (WebCore::InspectorController::setInspectorFrontendClient):
        (WebCore::InspectorController::inspectedWindowScriptObjectCleared):
        (WebCore::InspectorController::setFrontend):
        (WebCore::InspectorController::show):
        (WebCore::InspectorController::close):
        (WebCore::InspectorController::releaseDOMAgent):
        (WebCore::InspectorController::populateScriptObjects):
        (WebCore::InspectorController::didCommitLoad):
        (WebCore::InspectorController::getProfile):
        (WebCore::InspectorController::enableDebugger):
        * inspector/InspectorController.h:
        (WebCore::InspectorController::hasInspectorFrontendClient):
        * inspector/InspectorFrontend.cpp:
        (WebCore::InspectorFrontend::InspectorFrontend):
        (WebCore::InspectorFrontend::~InspectorFrontend):
        (WebCore::InspectorFrontend::addConsoleMessage):
        (WebCore::InspectorFrontend::bringToFront):
        (WebCore::InspectorFrontend::inspectedURLChanged):
        * inspector/InspectorFrontend.h:
        * inspector/InspectorFrontendClient.h: Added.
        (WebCore::InspectorFrontendClient::~InspectorFrontendClient):
        * inspector/InspectorFrontendClientLocal.cpp: Added.
        (WebCore::FrontendMenuProvider::create):
        (WebCore::FrontendMenuProvider::disconnect):
        (WebCore::FrontendMenuProvider::FrontendMenuProvider):
        (WebCore::FrontendMenuProvider::~FrontendMenuProvider):
        (WebCore::FrontendMenuProvider::populateContextMenu):
        (WebCore::FrontendMenuProvider::contextMenuItemSelected):
        (WebCore::FrontendMenuProvider::contextMenuCleared):
        (WebCore::InspectorFrontendClientLocal::InspectorFrontendClientLocal):
        (WebCore::InspectorFrontendClientLocal::~InspectorFrontendClientLocal):
        (WebCore::InspectorFrontendClientLocal::windowObjectCleared):
        (WebCore::InspectorFrontendClientLocal::frontendLoaded):
        (WebCore::InspectorFrontendClientLocal::canAttachWindow):
        (WebCore::InspectorFrontendClientLocal::changeAttachedWindowHeight):
        (WebCore::InspectorFrontendClientLocal::moveWindowBy):
        (WebCore::InspectorFrontendClientLocal::showContextMenu):
        (WebCore::InspectorFrontendClientLocal::setAttachedWindow):
        (WebCore::InspectorFrontendClientLocal::restoreAttachedWindowHeight):
        (WebCore::InspectorFrontendClientLocal::constrainedAttachedWindowHeight):
        * inspector/InspectorFrontendClientLocal.h: Added.
        * inspector/InspectorFrontendHost.cpp:
        (WebCore::InspectorFrontendHost::InspectorFrontendHost):
        (WebCore::InspectorFrontendHost::~InspectorFrontendHost):
        (WebCore::InspectorFrontendHost::loaded):
        (WebCore::InspectorFrontendHost::attach):
        (WebCore::InspectorFrontendHost::detach):
        (WebCore::InspectorFrontendHost::closeWindow):
        (WebCore::InspectorFrontendHost::bringToFront):
        (WebCore::InspectorFrontendHost::inspectedURLChanged):
        (WebCore::InspectorFrontendHost::canAttachWindow):
        (WebCore::InspectorFrontendHost::setAttachedWindowHeight):
        (WebCore::InspectorFrontendHost::moveWindowBy):
        (WebCore::InspectorFrontendHost::showContextMenu):
        * inspector/InspectorFrontendHost.h:
        (WebCore::InspectorFrontendHost::create):
        * inspector/InspectorFrontendHost.idl:
        * inspector/front-end/InspectorFrontendHostStub.js:
        (.WebInspector.InspectorFrontendHostStub.prototype.bringToFront):
        (.WebInspector.InspectorFrontendHostStub.prototype.inspectedURLChanged):
        * inspector/front-end/inspector.js:
        (WebInspector.loaded):
        (WebInspector.close):
        (WebInspector.bringToFront):
        (WebInspector.inspectedURLChanged):
        * loader/EmptyClients.h:
        (WebCore::EmptyInspectorClient::openInspectorFrontend):
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::dispatchDidClearWindowObjectInWorld):
        * page/Page.cpp:
        (WebCore::Page::Page):
        (WebCore::Page::~Page):
        * page/Page.h:
        * platform/ContextMenu.cpp:
        (WebCore::ContextMenu::populate):
        (WebCore::ContextMenu::addInspectElementItem):

2010-03-16  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Timothy Hatcher.

        Web Inspector: migrate to native styles inspector in
        order to inspect styles from foreighn domains.

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

        * inspector/InspectorBackend.cpp:
        (WebCore::InspectorBackend::getStyles):
        (WebCore::InspectorBackend::getInlineStyle):
        (WebCore::InspectorBackend::getComputedStyle):
        (WebCore::InspectorBackend::applyStyleText):
        (WebCore::InspectorBackend::setStyleText):
        (WebCore::InspectorBackend::setStyleProperty):
        (WebCore::InspectorBackend::toggleStyleEnabled):
        (WebCore::InspectorBackend::setRuleSelector):
        (WebCore::InspectorBackend::addRule):
        * inspector/InspectorBackend.h:
        * inspector/InspectorBackend.idl:
        * inspector/InspectorDOMAgent.cpp:
        (WebCore::InspectorDOMAgent::InspectorDOMAgent):
        (WebCore::InspectorDOMAgent::getStyles):
        (WebCore::InspectorDOMAgent::getInlineStyle):
        (WebCore::InspectorDOMAgent::getComputedStyle):
        (WebCore::InspectorDOMAgent::getMatchedCSSRules):
        (WebCore::InspectorDOMAgent::getAttributeStyles):
        (WebCore::InspectorDOMAgent::applyStyleText):
        (WebCore::InspectorDOMAgent::setStyleText):
        (WebCore::InspectorDOMAgent::setStyleProperty):
        (WebCore::InspectorDOMAgent::toggleStyleEnabled):
        (WebCore::InspectorDOMAgent::setRuleSelector):
        (WebCore::InspectorDOMAgent::addRule):
        (WebCore::InspectorDOMAgent::bindStyle):
        (WebCore::InspectorDOMAgent::bindRule):
        (WebCore::InspectorDOMAgent::buildObjectForStyle):
        (WebCore::InspectorDOMAgent::populateObjectWithStyleProperties):
        (WebCore::InspectorDOMAgent::buildObjectForRule):
        (WebCore::InspectorDOMAgent::uniqueStyleProperties):
        (WebCore::InspectorDOMAgent::longhandProperties):
        (WebCore::InspectorDOMAgent::shorthandPriority):
        (WebCore::InspectorDOMAgent::ruleAffectsNode):
        (WebCore::InspectorDOMAgent::toArray):
        * inspector/InspectorDOMAgent.h:
        * inspector/InspectorFrontend.cpp:
        (WebCore::InspectorFrontend::didGetEventListenersForNode):
        (WebCore::InspectorFrontend::didGetStyles):
        (WebCore::InspectorFrontend::didGetComputedStyle):
        (WebCore::InspectorFrontend::didGetInlineStyle):
        (WebCore::InspectorFrontend::didApplyStyleText):
        (WebCore::InspectorFrontend::didSetStyleText):
        (WebCore::InspectorFrontend::didSetStyleProperty):
        (WebCore::InspectorFrontend::didToggleStyleEnabled):
        (WebCore::InspectorFrontend::didSetRuleSelector):
        (WebCore::InspectorFrontend::didAddRule):
        * inspector/InspectorFrontend.h:
        * inspector/front-end/DOMAgent.js:
        (WebInspector.CSSStyleDeclaration):
        * inspector/front-end/ElementsTreeOutline.js:
        * inspector/front-end/InjectedScript.js:
        * inspector/front-end/MetricsSidebarPane.js:
        (WebInspector.MetricsSidebarPane.prototype.update):
        (WebInspector.MetricsSidebarPane.prototype.editingCommitted):
        * inspector/front-end/StylesSidebarPane.js:
        (WebInspector.StylesSidebarPane.prototype.update):
        (WebInspector.StylePropertiesSection.prototype.editingSelectorCommitted.callback):
        (WebInspector.StylePropertiesSection.prototype.editingSelectorCommitted):
        (WebInspector.BlankStylePropertiesSection.prototype.editingSelectorCommitted.callback):
        (WebInspector.BlankStylePropertiesSection.prototype.editingSelectorCommitted):
        (WebInspector.StylePropertyTreeElement.prototype):
        (WebInspector.StylePropertyTreeElement.prototype.):

2010-03-16  Shinichiro Hamaji  <hamaji@chromium.org>

        Reviewed by Darin Adler.

        RenderText::m_text should be a String, not RefPtr<StringImpl>
        https://bugs.webkit.org/show_bug.cgi?id=36010

        Refactoring only, so no new tests.

        * platform/text/PlatformString.h:
        (WebCore::String::makeLower):
        (WebCore::String::makeUpper):
        (WebCore::String::makeSecure):
        (WebCore::String::makeCapitalized):
        (WebCore::String::containsOnlyASCII):
        * rendering/RenderText.cpp:
        (WebCore::RenderText::RenderText):
        (WebCore::RenderText::widthFromCache):
        (WebCore::RenderText::trimmedPrefWidths):
        (WebCore::RenderText::containsOnlyWhitespace):
        (WebCore::RenderText::setTextInternal):
        (WebCore::RenderText::setText):
        (WebCore::RenderText::previousOffset):
        (WebCore::RenderText::previousOffsetForBackwardDeletion):
        (WebCore::RenderText::nextOffset):
        * rendering/RenderText.h:
        (WebCore::RenderText::text):
        (WebCore::RenderText::characters):
        (WebCore::RenderText::textLength):

2010-03-16  Adam Barth  <abarth@webkit.org>

        Reviewed by Darin Adler.

        noscript tag should render when @sandbox disables JavaScript
        https://bugs.webkit.org/show_bug.cgi?id=36092

        Instead of talking to Settings directly to figure out if JavaScript is
        enabled in a frame, we need to talk to the ScriptController.  The
        ScriptController is better at answering that question because it knows
        about @sandbox.

        Test: fast/frames/sandboxed-iframe-noscript.html

        * dom/Document.cpp:
        (WebCore::Document::Document):
        * html/HTMLCanvasElement.cpp:
        (WebCore::HTMLCanvasElement::createRenderer):
        * html/HTMLElement.cpp:
        (WebCore::HTMLElement::rendererIsNeeded):
        * html/HTMLParser.cpp:
        (WebCore::HTMLParser::noscriptCreateErrorCheck):
        (WebCore::HTMLParser::isInline):
        * plugins/PluginView.cpp:
        (WebCore::PluginView::load):

2010-03-15  John Gregg  <johnnyg@google.com>

        Reviewed by David Levin.

        Notification object should expose absolute URL of icon
        https://bugs.webkit.org/show_bug.cgi?id=35800

        Covered by existing tests.

        * notifications/Notification.cpp:
        (WebCore::Notification::Notification):
        * notifications/Notification.h:
        (WebCore::Notification::iconURL):

2010-03-15  Leandro Pereira  <leandro@profusion.mobi>

        Reviewed by Holger Freyther.

        Add EFL port files to platform/efl.
        http://webkit.org/b/35887

        * platform/efl/ClipboardEfl.cpp: Added.
        * platform/efl/PasteboardEfl.cpp: Added.

2010-03-15  Kent Tamura  <tkent@chromium.org>

        Reviewed by Eric Seidel.

        Don't submit disabled menu options.
        https://bugs.webkit.org/show_bug.cgi?id=35056

        Test: fast/forms/menulist-disabled-selected-option.html

        * dom/OptionElement.h:
        * dom/SelectElement.cpp:
        (WebCore::SelectElement::appendFormData):
         If a selected option is disabled, skip it.
         Remove code for non-selected menulist because of compatibility with
         other browsers.

2010-03-15  Leandro Pereira  <leandro@profusion.mobi>

        Reviewed by Holger Freyther.

        Add EFL port files to platform/efl.
        http://webkit.org/b/35884

        * platform/efl/FileSystemEfl.cpp: Added.

2010-03-15  Leandro Pereira  <leandro@profusion.mobi>

        Reviewed by Holger Freyther.

        Add EFL port files to platform/efl.
        http://webkit.org/b/35882

        * platform/efl/ContextMenuItemEfl.cpp: Added.

2010-03-15  Joanmarie Diggs  <joanmarie.diggs@gmail.com>

        Reviewed by Holger Freyther.

        https://bugs.webkit.org/show_bug.cgi?id=35502
        [Gtk] Objects of ATK_ROLE_TABLE should not implement AtkText

        Simple change to stop tables from implementing AtkText.

        * accessibility/gtk/AccessibilityObjectAtk.cpp:
        (getInterfaceMaskFromObject):

2010-03-15  Adam Bergkvist  <adam.bergkvist@ericsson.com>

        Reviewed by Adam Barth.

        According to the updated specification, a data field should always
        result in a newline character being appended to the data buffer
        regardless if the data buffer contains any data or not. However, upon
        event dispatch, the last newline will be removed. This differs from an
        older version of the specification where a newline character was
        appended before the data value only if the buffer already contained
        data. As a result, EventSource now supports receiving events with empty
        data or newline characters only.
        https://bugs.webkit.org/show_bug.cgi?id=33210

        * page/EventSource.cpp:
        (WebCore::EventSource::parseEventStreamLine):

2010-03-15  Valters Svabe  <vsvabe@gmail.com>

        Reviewed by Darin Adler.

        :after selector displays in wrong place with nested div
        https://bugs.webkit.org/show_bug.cgi?id=32288
        
        Make sure we don't append things after :after-generated content, if
        it's inside an anonymous block.

        Test: fast/css-generated-content/block-after.html

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

2010-03-15  Leandro Pereira  <leandro@profusion.mobi>

        Reviewed by Eric Seidel.

        Add EFL port files to platform/efl.
        http://webkit.org/b/35885

        * platform/efl/KURLEfl.cpp: Added.

2010-03-15  Chris Fleizach  <cfleizach@apple.com>

        Reviewed by Beth Dakin.

        VO not able to perform a VO-spacebar on facebook links
        https://bugs.webkit.org/show_bug.cgi?id=36132

        When a label element is used as a click event handler, and it doesn't have any
        corresponding control, it should handle the action itself.

        Test: accessibility/label-element-press.html

        * html/HTMLLabelElement.cpp:
        (WebCore::HTMLLabelElement::accessKeyAction):

2010-03-15  Cameron Zwarich  <zwarich@apple.com>

        Reviewed by Geoff Garen.

        Bug 36135 - GCController::garbageCollectNow() crashes when called from garbage collection
        <https://bugs.webkit.org/show_bug.cgi?id=36135>
        <rdar://problem/7752552>

        * bindings/js/GCController.cpp:
        (WebCore::GCController::garbageCollectNow): Fail silently if garbage collection is
        active rather than hitting the CRASH() reentrancy guard.

2010-03-15  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Dan Bernstein.

        Drop out of compositing mode when no elements need to composite
        https://bugs.webkit.org/show_bug.cgi?id=36134

        When no more elements on the page need to be composited, drop out of compositing
        mode altogether, including removing the layer-backed view that hosts the layers.

        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::updateCompositingLayers): If the list of child layers to attach at
        the root is empty, we have no composited layers, and can drop out of compositing mode by calling
        willMoveOffscreen().
        
        (WebCore::RenderLayerCompositor::computeCompositingRequirements): In several places,
        use willBeComposited rather than calling needsToBeComposited(), because it avoids
        recomputing state that we know already (but assert that we're getting it right).
        When we're assessing the root layer in post-order, see if we have any child layers that
        are compositing, and also whether the root itself needs to composite. If neither are
        true, then we can drop out of compositing mode.
        
        (WebCore::RenderLayerCompositor::needsToBeComposited):
        (WebCore::RenderLayerCompositor::requiresCompositingLayer): Move the
        "inCompositingMode() && layer->isRootLayer()" test out of requiresCompositingLayer()
        and into needsToBeComposited() so that we can call requiresCompositingLayer() separately
        on the root layer above.

2010-03-15  Leandro Pereira  <leandro@profusion.mobi>

        Reviewed by Kenneth Rohde Christiansen.

        Add EFL port files to platform/efl.
        http://webkit.org/b/35888

        * platform/efl/SoundEfl.cpp: Added.

2010-03-15  Andy Estes  <aestes@apple.com>

        Reviewed by John Sullivan.

        For continuous scrolling devices on the Mac (trackpads and Mighty/Magic
        Mice), set the number of wheel ticks equal to the atomic increment of
        the device: a pixel.  This ensures that any scrolling action will
        generate at least one wheel tick, regardless of the speed/length of
        the gesture.

        https://bugs.webkit.org/show_bug.cgi?id=29601
        <rdar://problem/7453254>

        Tests: fast/events/continuous-platform-wheelevent-in-scrolling-div.html
               fast/events/platform-wheelevent-in-scrolling-div.html

        * platform/mac/WebCoreSystemInterface.h: Modify method signature.
        * platform/mac/WebCoreSystemInterface.mm: Ditto.
        * platform/mac/WheelEventMac.mm:
        (WebCore::PlatformWheelEvent::PlatformWheelEvent): Call into
        WebKitSystemInterface to determine both wheelTicksX/Y and deltaX/Y.
        WKSI will query the event system for number of wheel ticks and
        pixels/lines scrolled based on the device type.

2010-03-15  Philippe Normand  <pnormand@igalia.com>

        Reviewed by Gustavo Noronha Silva.

        [GStreamer] duration query optimizations
        https://bugs.webkit.org/show_bug.cgi?id=36116

        Don't reattempt duration queries that previously failed and cache
        media duration only if it's known.

        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:
        (WebCore::MediaPlayerPrivate::MediaPlayerPrivate):
        (WebCore::MediaPlayerPrivate::duration):
        (WebCore::MediaPlayerPrivate::updateStates):
        (WebCore::MediaPlayerPrivate::durationChanged):
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.h:

2010-03-11  Peter Kasting  <pkasting@google.com>

        Reviewed by Adam Barth.

        Clean up more bits of the open-source image decoders.  In addition to
        simplifying things somewhat, this makes all the decoders the same in
        terms of how they construct "image reader" subclasses and init scale
        data.

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

        No functional change, so no tests.

        * platform/image-decoders/ImageDecoder.h: Reorder a few declarations to try and group/order members slightly better.
        (WebCore::ImageDecoder::ImageDecoder):
        * platform/image-decoders/gif/GIFImageDecoder.cpp: Move reader construction into decode().  Prep scale data in setSize().  Remove useless comment.
        (WebCore::GIFImageDecoder::setData):
        (WebCore::GIFImageDecoder::setSize):
        (WebCore::GIFImageDecoder::frameBufferAtIndex):
        (WebCore::GIFImageDecoder::decode):
        * platform/image-decoders/gif/GIFImageDecoder.h: Prep scale data in setSize().
        * platform/image-decoders/gif/GIFImageReader.cpp: Prep scale data in setSize().
        (GIFImageReader::read):
        * platform/image-decoders/ico/ICOImageDecoder.cpp: Shorten code.
        (WebCore::ICOImageDecoder::setSize):
        * platform/image-decoders/jpeg/JPEGImageDecoder.cpp: Fix style.  Move reader construction into decode().
        (WebCore::JPEGImageReader::close):
        (WebCore::JPEGImageReader::skipBytes):
        (WebCore::JPEGImageDecoder::decode):
        * platform/image-decoders/jpeg/JPEGImageDecoder.h: Move reader construction into decode().
        (WebCore::JPEGImageDecoder::filenameExtension):
        * platform/image-decoders/png/PNGImageDecoder.cpp: Move reader construction into decode().  Track completion on decoder, not reader.  Prep scale data in setSize().  Remove useless comment.
        (WebCore::PNGImageReader::PNGImageReader):
        (WebCore::PNGImageReader::close):
        (WebCore::PNGImageReader::decode):
        (WebCore::PNGImageDecoder::setSize):
        (WebCore::PNGImageDecoder::frameBufferAtIndex):
        (WebCore::PNGImageDecoder::headerAvailable):
        (WebCore::PNGImageDecoder::pngComplete):
        (WebCore::PNGImageDecoder::decode):
        * platform/image-decoders/png/PNGImageDecoder.h: Move reader construction into decode().  Track completion on decoder, not reader.  Prep scale data in setSize().
        (WebCore::PNGImageDecoder::filenameExtension):
        (WebCore::PNGImageDecoder::isComplete):

2010-03-15  Philippe Normand  <pnormand@igalia.com>

        Reviewed by Gustavo Noronha Silva.

        [GStreamer] updateStates called for all elements posting a state-change
        https://bugs.webkit.org/show_bug.cgi?id=36115

        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:
        (WebCore::mediaPlayerPrivateMessageCallback): Update player state
        only for state-change messages coming from playbin2 directly.
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.h:
        (WebCore::MediaPlayerPrivate::pipeline): public accessor for the
        playbin element.

2010-03-15  Jian Li  <jianli@chromium.org>

        Reviewed by Nate Chapin.

        [v8] Add V8 bindings for DOMFormData.
        https://bugs.webkit.org/show_bug.cgi?id=36026

        Test: http/tests/local/send-form-data.html

        * Android.v8bindings.mk:
        * WebCore.gypi:
        * bindings/v8/V8Index.h:
        * bindings/v8/custom/V8DOMFormDataCustom.cpp: Added.
        * bindings/v8/custom/V8XMLHttpRequestCustom.cpp:
        (WebCore::V8XMLHttpRequest::sendCallback):

2010-03-15  Jian Li  <jianli@chromium.org>

        Reviewed by Sam Weinig.

        Add DOMFormData.idl to expose FormData interface.
        https://bugs.webkit.org/show_bug.cgi?id=36024
        
        The implementation is based on XMLHttpRequest 2 spec:
        http://dev.w3.org/2006/webapi/XMLHttpRequest-2/#formdata

        Test: http/tests/local/send-form-data.html

        * Android.derived.jscbindings.mk:
        * Android.derived.v8bindings.mk:
        * Android.jscbindings.mk:
        * DerivedSources.cpp:
        * DerivedSources.make:
        * GNUmakefile.am:
        * WebCore.pri:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSDOMFormDataCustom.cpp: Added.
        * bindings/js/JSXMLHttpRequestCustom.cpp:
        (WebCore::JSXMLHttpRequest::send):
        * bindings/scripts/CodeGeneratorJS.pm:
        * html/DOMFormData.idl: Added.
        * page/DOMWindow.idl:

2010-03-15  Patrik Persson  <patrik.j.persson@ericsson.com>

        Reviewed by Darin Adler.

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

        Revise iframe sandbox behavior to match the updated HTML5 spec.

        - Enables window.sessionStorage in sandboxed iframes.

        - Raises SECURITY_ERR exceptions when window.localStorage or
          window.openDatabase() is blocked by iframe sandboxing.

          Note: window.sessionStorage does not raise exceptions.

        WebKit would previously return null references in these cases.  The
        new behavior is in accordance with HTML5:

          http://dev.w3.org/html5/webstorage/   (sections 4.2 and 4.3)
          http://dev.w3.org/html5/webdatabase/  (section 4.1)
          http://www.mail-archive.com/whatwg@lists.whatwg.org/msg19786.html

        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::selectDOMStorage): exception handling
        * inspector/InspectorDOMStorageResource.cpp:
        (WebCore::InspectorDOMStorageResource::handleEvent): exception handling
        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::sessionStorage): re-enabled in iframe sandbox
        (WebCore::DOMWindow::localStorage): raise exception rather than return null
        (WebCore::DOMWindow::openDatabase): raise exception rather than return null
        * page/DOMWindow.h: added exceptions to interface
        * page/DOMWindow.idl: added exceptions to interface
        * page/SecurityOrigin.h:
        (WebCore::SecurityOrigin::canAccessLocalStorage): renamed function to reflect its purpose
        * storage/StorageEventDispatcher.cpp:
        (WebCore::StorageEventDispatcher::dispatch): exception handling

2010-03-15  Alexander Pavlov  <apavlov@chromium.org>

        Reviewed by Timothy Hatcher.

        Web Inspector: Implement a progress indicator in the Audits panel
        when resources are reloading
        https://bugs.webkit.org/show_bug.cgi?id=35971

        * English.lproj/localizedStrings.js:
        * GNUmakefile.am:
        * WebCore.gypi:
        * inspector/front-end/AuditLauncherView.js:
        (WebInspector.AuditLauncherView.prototype.updateResourceTrackingState):
        (WebInspector.AuditLauncherView.prototype.get totalResources):
        (WebInspector.AuditLauncherView.prototype.set totalResources):
        (WebInspector.AuditLauncherView.prototype.get loadedResources):
        (WebInspector.AuditLauncherView.prototype.set loadedResources):
        (WebInspector.AuditLauncherView.prototype._resetResourceCount):
        (WebInspector.AuditLauncherView.prototype.resourceStarted):
        (WebInspector.AuditLauncherView.prototype.resourceFinished):
        (WebInspector.AuditLauncherView.prototype.reset):
        (WebInspector.AuditLauncherView.prototype._setAuditRunning):
        (WebInspector.AuditLauncherView.prototype._launchButtonClicked):
        (WebInspector.AuditLauncherView.prototype._createCategoryElement):
        (WebInspector.AuditLauncherView.prototype._createLauncherUI):
        (WebInspector.AuditLauncherView.prototype._updateResourceProgress):
        (WebInspector.AuditLauncherView.prototype._updateButton):
        * inspector/front-end/AuditsPanel.js:
        (WebInspector.AuditsPanel.prototype.resourceStarted):
        (WebInspector.AuditsPanel.prototype.resourceFinished):
        (WebInspector.AuditsPanel.prototype.reset):
        * inspector/front-end/Images/spinner.gif: Added.
        * inspector/front-end/WebKit.qrc:
        * inspector/front-end/audits.css:
        (.audit-launcher-view .resource-progress > img):
        * inspector/front-end/inspector.js:
        (WebInspector.updateResource):

2010-03-15  Philippe Normand  <pnormand@igalia.com>

        Reviewed by Gustavo Noronha Silva.

        [GStreamer] replace g_idle_add / g_timeout_add calls with Timers in the gstreamer player
        https://bugs.webkit.org/show_bug.cgi?id=35735

        Replaced g_idle_add calls with Timers immediately started once
        only. The g_timeout_add was replaced by a periodic Timer.

        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:
        (WebCore::MediaPlayerPrivate::MediaPlayerPrivate):
        (WebCore::MediaPlayerPrivate::~MediaPlayerPrivate):
        (WebCore::MediaPlayerPrivate::volumeChangedTimerFired):
        (WebCore::MediaPlayerPrivate::volumeChanged):
        (WebCore::MediaPlayerPrivate::processBufferingStats):
        (WebCore::MediaPlayerPrivate::fillTimerFired):
        (WebCore::MediaPlayerPrivate::maxTimeLoaded):
        (WebCore::MediaPlayerPrivate::updateStates):
        (WebCore::MediaPlayerPrivate::muteChangedTimerFired):
        (WebCore::MediaPlayerPrivate::muteChanged):
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.h:

2010-03-12  Gustavo Noronha Silva  <gustavo.noronha@collabora.co.uk>

        Reviewed by Eric Carlson.

        media/video-preload.html fails
        https://bugs.webkit.org/show_bug.cgi?id=35793

        Only effectively load, and start buffering when playing, or when
        the preload attribute is set.

        Test: media/video-preload.html

        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:
        (WebCore::MediaPlayerPrivate::MediaPlayerPrivate):
        (WebCore::MediaPlayerPrivate::load):
        (WebCore::MediaPlayerPrivate::commitLoad):
        (WebCore::MediaPlayerPrivate::prepareToPlay):
        (WebCore::MediaPlayerPrivate::setPreload):
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.h:

2010-03-15  Shu Chang  <Chang.Shu@nokia.com>

        Reviewed by Holger Freyther.

        [Qt] The behavior of QGradient with no stops is defined differently from HTML5 spec,
        where the latter requires the gradient to be transparent black. Explicitly added a
        transparent black color stop to match the HTML5 behavior.
        https://bugs.webkit.org/show_bug.cgi?id=36060

        * platform/graphics/qt/GradientQt.cpp:
        (WebCore::Gradient::platformGradient):

2010-03-11  Antonio Gomes  <tonikitoo@webkit.org>

        Rubber-stamped by Holger Freyther.
        Patch by Antonio Gomes <tonikitoo@webkit.org>

        Some minor code clean ups in SpatialNavigation.cpp

        * page/SpatialNavigation.cpp:
        (WebCore::distanceInDirection):
        (WebCore::deflateIfOverlapped):

2010-03-13  Ilya Tikhonovsky  <loislo@chromium.org>

        Reviewed by Timothy Hatcher.

        WebInspector: Position of GraphBar elements is calculating more carefully
        and they fully visible at the bottom of Timeline panel.
       
        http://bugs.webkit.org/show_bug.cgi?id=35966

        * inspector/front-end/TimelinePanel.js:
        (WebInspector.TimelineRecordGraphRow.prototype.update):

2010-03-15  MORITA Hajime  <morrita@google.com>

        Reviewed by Alexey Proskuryakov.

        Selection.modify extends too far with 'lineboundary'.
        https://bugs.webkit.org/show_bug.cgi?id=33413

        Selection.modify() with 'lineboundary' granularity implies just
        "Go to the end of the line", unlike selection expansion with
        other type of granularities. This change handled LineGranularity
        as special case, to look-up end of line with UPSTREAM affinity. 
        Doing this prevents look-up algorithm to go next line.

        Test: editing/selection/extend-selection-expected.txt

        * dom/Position.cpp:
        (WebCore::Position::getInlineBoxAndOffset):
        Handled an edge case for node look-up with UPSTREAM.
        * editing/SelectionController.cpp:
        (WebCore::SelectionController::modifyExtendingForward):
        Added UPSTREAM tweak for the case for LineGranularity.
        
2010-03-14  Yuzo Fujishima  <yuzo@google.com>

        Reviewed by Shinichiro Hamaji.

        Always call PrintContext.end() from PrintContext::pageNumberForElement().

        Without this change, WebKit remains in printing mode after determining the page number if the specified element is found.

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

        Test: printing/return-from-printing-mode.html

        * page/PrintContext.cpp:
        (WebCore::PrintContext::pageNumberForElement):

2010-03-11  Philippe Normand  <pnormand@igalia.com>

        Reviewed by Gustavo Noronha Silva.

        [GStreamer] progressTimer never stopped after EOS
        https://bugs.webkit.org/show_bug.cgi?id=36007

        Mark the pipeline as paused only if playback hasn't ended
        yet. When didEnd() is triggered, the pipeline is paused (but
        paused() still returns false) and a timeupdate event is fired,
        those 2 conditions allow the HTMLMediaElement to stop the
        progressTimer (in updatePlayerState, via mediaPlayerTimeChanged).

        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:
        (WebCore::MediaPlayerPrivate::updateStates):

2010-03-14  Chang Shu  <chang.shu@nokia.com>

        Reviewed by Simon Hausmann.

        [Qt] [Symbian] Added block for ENABLE_SYMBIAN_DIALOG_PROVIDERS
        on Symbian platform.
        https://bugs.webkit.org/show_bug.cgi?id=35919

        * WebCore.pro:

2010-03-14  Yael Aharon  <yael.aharon@nokia.com>

        Reviewed by Darin Adler.

        Support for HTMLProgressElement
        https://bugs.webkit.org/show_bug.cgi?id=35937

        Added support for HTMLProgressElement.
        This implementation is enabled only for Qt, because only RenderThemeQt
        was modified to actually draw the progress element.
        The labels attribute of the progress element will be implemented in a
        separate patch.

        Tests: fast/dom/HTMLProgressElement/progress-element.html
               fast/dom/HTMLProgressElement/set-progress-properties.html

        * DerivedSources.cpp:
        * DerivedSources.make:
        * GNUmakefile.am:
        * WebCore.gypi:
        * WebCore.pri:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * css/CSSPrimitiveValueMappings.h:
        (WebCore::CSSPrimitiveValue::CSSPrimitiveValue):
        * css/CSSSelector.cpp:
        (WebCore::CSSSelector::extractPseudoType):
        * css/CSSValueKeywords.in:
        * css/html.css:
        * html/HTMLElement.cpp:
        (WebCore::inlineTagList):
        * html/HTMLElementsAllInOne.cpp:
        * html/HTMLFormControlElement.cpp:
        (WebCore::HTMLFormControlElement::HTMLFormControlElement):
        * html/HTMLFormControlElement.h:
        * html/HTMLProgressElement.cpp: Added.
        (WebCore::HTMLProgressElement::HTMLProgressElement):
        (WebCore::HTMLProgressElement::create):
        (WebCore::HTMLProgressElement::createRenderer):
        (WebCore::HTMLProgressElement::formControlType):
        (WebCore::HTMLProgressElement::parseMappedAttribute):
        (WebCore::HTMLProgressElement::value):
        (WebCore::HTMLProgressElement::setValue):
        (WebCore::HTMLProgressElement::max):
        (WebCore::HTMLProgressElement::setMax):
        (WebCore::HTMLProgressElement::position):
        * html/HTMLProgressElement.h: Added.
        (WebCore::HTMLProgressElement::isOptionalFormControl):
        * html/HTMLProgressElement.idl: Added.
        * html/HTMLTagNames.in:
        * page/DOMWindow.idl:
        * platform/ThemeTypes.h:
        * platform/qt/RenderThemeQt.cpp:
        (WebCore::RenderThemeQt::adjustProgressBarStyle):
        (WebCore::RenderThemeQt::paintProgressBar):
        * platform/qt/RenderThemeQt.h:
        * rendering/RenderObject.h:
        (WebCore::RenderObject::isProgress):
        * rendering/RenderProgress.cpp: Added.
        (WebCore::RenderProgress::RenderProgress):
        (WebCore::RenderProgress::baselinePosition):
        (WebCore::RenderProgress::calcPrefWidths):
        (WebCore::RenderProgress::layout):
        (WebCore::RenderProgress::updateFromElement):
        * rendering/RenderProgress.h: Added.
        (WebCore::RenderProgress::renderName):
        (WebCore::RenderProgress::isProgress):
        (WebCore::toRenderProgress):
        * rendering/RenderTheme.cpp:
        (WebCore::RenderTheme::adjustStyle):
        (WebCore::RenderTheme::paint):
        (WebCore::RenderTheme::paintBorderOnly):
        (WebCore::RenderTheme::paintDecorations):
        (WebCore::RenderTheme::adjustProgressBarStyle):
        * rendering/RenderTheme.h:
        (WebCore::RenderTheme::paintProgressBar):

2010-03-14  Oliver Hunt  <oliver@apple.com>

        Reviewed by Darin Adler.

        REGRESSION(r53287): drop event is not fired if dataTransfer.dropEffect is not explicitly set
        https://bugs.webkit.org/show_bug.cgi?id=36095

        The issue here is that while dropEffect is meant to be initialized
        to "none", the behaviour of the drag is differs between dragEffect
        not being set and dragEffect being explicitly set to "none"

        This patch corrects this behaviour by making Clipboard distinguish
        between the initial "none" value of dropEffect and an explicit "none".
        This alone is insufficient for correct behaviour, we also need to
        resurrect the removed defaultOperationForDrag function, but we now
        use the function only when dragEffect is uninitialized.  There are a
        few tweaks to the behaviour of the defaultOperationForDrag as well
        to ensure exactly the same set of outcomes for all cases that we
        may hit it.

        * dom/Clipboard.cpp:
        (WebCore::Clipboard::Clipboard):
        (WebCore::dragOpFromIEOp):
        (WebCore::Clipboard::destinationOperation):
        * dom/Clipboard.h:
        (WebCore::Clipboard::dropEffect):
        (WebCore::Clipboard::dropEffectIsUninitialized):
        * page/DragController.cpp:
        (WebCore::defaultOperationForDrag):
        (WebCore::DragController::tryDHTMLDrag):

2010-03-14  Antti Koivisto  <koivisto@iki.fi>

        Reviewed by Simon Hausmann.
        
        https://bugs.webkit.org/show_bug.cgi?id=35146
        Support tiled backing store

        Implements a basic tiled backing store mechanism. Tiles are created and 
        deleted on demand. The page content is cached to the tiles. Tile content
        is kept in sync with the document. Since the backing store covers area
        larger than the currently visible viewport, the document can be scrolled
        quickly without having to enter rendering tree painting.
        
        The tile management code is platform independent. This patch has simple QPixmap
        based tile implementation for Qt.
        
        The feature is behind ENABLE_TILED_BACKING_STORE flag.

        * WebCore.pri:
        * WebCore.pro:
        * page/Frame.cpp:
        (WebCore::Frame::Frame):
        (WebCore::Frame::setTiledBackingStoreEnabled):
        (WebCore::Frame::tiledBackingStorePaintBegin):
        (WebCore::Frame::tiledBackingStorePaint):
        (WebCore::Frame::tiledBackingStorePaintEnd):
        (WebCore::Frame::tiledBackingStoreContentsRect):
        * page/Frame.h:
        (WebCore::Frame::tiledBackingStore):
        * page/FrameView.cpp:
        (WebCore::FrameView::repaintContentRectangle):
        (WebCore::FrameView::doDeferredRepaints):
        * page/Settings.cpp:
        (WebCore::Settings::Settings):
        (WebCore::Settings::setTiledBackingStoreEnabled):
        * page/Settings.h:
        (WebCore::Settings::tiledBackingStoreEnabled):
        * platform/graphics/Tile.h: Added.
        (WebCore::Tile::create):
        (WebCore::Tile::coordinate):
        (WebCore::Tile::rect):
        * platform/graphics/TiledBackingStore.cpp: Added.
        (WebCore::TiledBackingStore::TiledBackingStore):
        (WebCore::TiledBackingStore::~TiledBackingStore):
        (WebCore::TiledBackingStore::invalidate):
        (WebCore::TiledBackingStore::updateTileBuffers):
        (WebCore::TiledBackingStore::paint):
        (WebCore::TiledBackingStore::viewportChanged):
        (WebCore::TiledBackingStore::setContentsScale):
        (WebCore::TiledBackingStore::tileDistance):
        (WebCore::TiledBackingStore::createTiles):
        (WebCore::TiledBackingStore::dropOverhangingTiles):
        (WebCore::TiledBackingStore::dropTilesOutsideRect):
        (WebCore::TiledBackingStore::tileAt):
        (WebCore::TiledBackingStore::setTile):
        (WebCore::TiledBackingStore::removeTile):
        (WebCore::TiledBackingStore::mapToContents):
        (WebCore::TiledBackingStore::mapFromContents):
        (WebCore::TiledBackingStore::contentsRect):
        (WebCore::TiledBackingStore::tileRectForCoordinate):
        (WebCore::TiledBackingStore::tileCoordinateForPoint):
        (WebCore::TiledBackingStore::startTileBufferUpdateTimer):
        (WebCore::TiledBackingStore::tileBufferUpdateTimerFired):
        (WebCore::TiledBackingStore::startTileCreationTimer):
        (WebCore::TiledBackingStore::tileCreationTimerFired):
        (WebCore::TiledBackingStore::setContentsFrozen):
        * platform/graphics/TiledBackingStore.h: Added.
        (WebCore::TiledBackingStore::contentsScale):
        (WebCore::TiledBackingStore::contentsFrozen):
        * platform/graphics/TiledBackingStoreClient.h: Added.
        * platform/graphics/qt/TileQt.cpp: Added.
        (WebCore::checkeredPixmap):
        (WebCore::Tile::Tile):
        (WebCore::Tile::~Tile):
        (WebCore::Tile::isDirty):
        (WebCore::Tile::isReadyToPaint):
        (WebCore::Tile::invalidate):
        (WebCore::Tile::updateBackBuffer):
        (WebCore::Tile::swapBackBufferToFront):
        (WebCore::Tile::paint):
        (WebCore::Tile::paintCheckerPattern):

2010-03-14  Dan Bernstein  <mitz@apple.com>

        Reviewed by Darin Adler.

        WebCore part of removing support for legacy versions of Core Graphics

        * WebCore.vcproj/WebCore.vcproj: Removed FontDatabase.{cpp,h}
        * platform/graphics/win/FontCGWin.cpp:
        (WebCore::Font::drawGlyphs): Removed call to wkCanCreateCGFontWithLOGFONT(),
        as it is now always true.
        * platform/graphics/win/FontCacheWin.cpp:
        (WebCore::FontCache::createFontPlatformData): Ditto.
        * platform/graphics/win/FontCustomPlatformData.cpp:
        (WebCore::FontCustomPlatformData::~FontCustomPlatformData): Updated for
        the removal of m_cgFont.
        (WebCore::FontCustomPlatformData::fontPlatformData): Removed call to
        wkCanCreateCGFontWithLOGFONT(), as it is now always true.
        (WebCore::createFontCustomPlatformData): Ditto. Also updated for change to
        the FontCustomPlatformData constructor.
        * platform/graphics/win/FontCustomPlatformData.h: Removed m_cgFont member.
        (WebCore::FontCustomPlatformData::FontCustomPlatformData): Removed cgFont
        parameter.
        * platform/graphics/win/FontDatabase.cpp: Removed.
        * platform/graphics/win/FontDatabase.h: Removed.
        * platform/graphics/win/FontPlatformDataCGWin.cpp:
        (WebCore::FontPlatformData::platformDataInit): Removed call to
        wkCanCreateCGFontWithLOGFONT(), as it is now always true.
        * platform/win/TemporaryLinkStubs.cpp:
        (WebCore::populateFontDatabase): Removed stub.

2010-03-14  Jessie Berlin  <jberlin@webkit.org>

        Reviewed by Sam Weinig.

        "event.ctrlKey" is always false when dragging an element with "ctrl" key down
        https://bugs.webkit.org/show_bug.cgi?id=17113

        No new tests.

        * page/DragController.cpp:
        (WebCore::createMouseEvent):
        Use the current state of the shift, ctrl, alt, and meta keys when creating the drag mouse event.

2010-03-13  Antonio Gomes  <tonikitoo@webkit.org>

        Not reviewed identation fix.

        * manual-tests/spatial-navigation/spatial-navigation-test-cases.html:

2010-03-13  Kim Grönholm  <kim.gronholm@nomovok.com>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] GraphicsLayer: Opacity change from zero to non-zero doesn't always have effect with AC
        https://bugs.webkit.org/show_bug.cgi?id=36034

        * platform/graphics/qt/GraphicsLayerQt.cpp:
        (WebCore::OpacityAnimationQt::applyFrame):

2010-03-13  Kim Grönholm  <kim.gronholm@nomovok.com>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] GraphicsLayer: Opacity transitions end with begin value
        https://bugs.webkit.org/show_bug.cgi?id=36019

        * platform/graphics/qt/GraphicsLayerQt.cpp:
        (WebCore::AnimationQt::updateCurrentTime):

2010-03-13  Dirk Schulze  <krit@webkit.org>

        No review, rolling out r55927.
        http://trac.webkit.org/changeset/55927
        https://bugs.webkit.org/show_bug.cgi?id=35793

        Breaks Gtk build bots.

        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:
        (WebCore::MediaPlayerPrivate::MediaPlayerPrivate):
        (WebCore::MediaPlayerPrivate::load):
        (WebCore::MediaPlayerPrivate::setPreload):
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.h:

2010-03-12  Dirk Schulze  <krit@webkit.org>

        Reviewed by Nikolas Zimmermann.

        SVG Glyphs - transform path not context
        https://bugs.webkit.org/show_bug.cgi?id=36070

        SVGFont should transform the path of a glyph, not the context. Modifying
        the context causes wrong gradient transformations. This bug doesn't
        influence CG because we generally fill or stroke texts with a mask image.
        All other platforms provide a direct way to make the drawings.

        * svg/SVGFont.cpp:
        (WebCore::Font::drawTextUsingSVGFont):

2010-03-12  Beth Dakin  <bdakin@apple.com>

        Reviewed by Simon Fraser.

        Fix for https://bugs.webkit.org/show_bug.cgi?id=34942 Fullscreen 
        API naming is inconsistent
        -and corresponding-
        <rdar://problem/7729165>

        This patch changes all occurrences of "fullScreen" to the more 
        popular "fullscreen." webkitEnterFullScreen and 
        webkitExitFullScreen have been maintained for now for backwards 
        compatibility. 

        * html/HTMLVideoElement.cpp:
        (WebCore::HTMLVideoElement::webkitEnterFullscreen):
        (WebCore::HTMLVideoElement::webkitExitFullscreen):
        * html/HTMLVideoElement.h:
        (WebCore::HTMLVideoElement::webkitEnterFullScreen):
        (WebCore::HTMLVideoElement::webkitExitFullScreen):
        * html/HTMLVideoElement.idl:
        * platform/graphics/mac/MediaPlayerProxy.h:

2010-03-12  James Robinson  <jamesr@chromium.org>

        Reviewed by Adam Barth.

        Add virtual destructor to DOMWrapperWorld
        https://bugs.webkit.org/show_bug.cgi?id=36077

        DOMWrapperWorld is RefCounted<DOMWrapperWorld>.  IsolatedWorld
        inherits from DOMWrapperWorld and has member variables
        with destructors, so DOMWrapperWorld needs to have a declared virtual
        d'tor to ensure that its derived class's destructors are called.

        No new tests, no change in behavior

        * bindings/v8/DOMWrapperWorld.h:
        (WebCore::DOMWrapperWorld::~DOMWrapperWorld):


2010-03-11  Gavin Barraclough  <barraclough@apple.com>

        Reviewed by Oliver Hunt.

        Bug 36075 - Clean up screwyness re static string impls & Identifiers.

        * platform/text/StringImpl.cpp:
        (WebCore::StringImpl::~StringImpl): Add ASSERT
        (WebCore::StringImpl::sharedBuffer): Add ASSERT
        * platform/text/StringImpl.h:
        (WebCore::StringImpl::setHash): Add ASSERT
        (WebCore::StringImpl::isStatic): added.

2010-03-12  Enrica Casucci  <enrica@apple.com>

        Reviewed by Simon Fraser.

        Content of 3D tests appears at the bottom right corner sometimes.
        <rdar://problem/7556244>
        <https://bugs.webkit.org/show_bug.cgi?id=36027>

        There were two problems to solve here:
        - the incorrect anchoring of the rootChildLayer that was causing the composited
          content to be positioned incorrectly
        - the failure to paint the non composited content into the backing store when
          animating composited content.
          
        The first problem has been solved by leaving the original anchor point for the
        rootChildLayer and splitting the tasks of clipping and scrolling using two separate layers.
        The second problem has been solved leveraging the knowledge that WebView has of the dirty region
        of the backing store to pass this information to the layer renderer. This allows the renderer to force
        a paint into the backing store before moving to the compositing.
        
        Tests: compositing/geometry/horizontal-scroll-composited.html
               compositing/geometry/vertical-scroll-composited.html

        * manual-tests/win/horizontal-scroll-composited.html: Removed. This is now a layout test.
        * manual-tests/win/milliondollar.html: Added.
        * platform/graphics/win/WKCACFLayerRenderer.cpp:
        (WebCore::WKCACFLayerRenderer::WKCACFLayerRenderer): Added initialization of dirty flag.
        (WebCore::WKCACFLayerRenderer::setScrollFrame): 
        (WebCore::WKCACFLayerRenderer::updateScrollFrame): Updated to resize and position the clip and scroll layers.
        (WebCore::WKCACFLayerRenderer::setRootChildLayer):
        (WebCore::WKCACFLayerRenderer::createRenderer): Added new layer hierarchy.
        (WebCore::WKCACFLayerRenderer::destroyRenderer): Remove clip layer on destroy.
        (WebCore::WKCACFLayerRenderer::resize):
        (WebCore::WKCACFLayerRenderer::paint): Forcing paint massage to trigger paint into the backing store.
        * platform/graphics/win/WKCACFLayerRenderer.h:
        (WebCore::WKCACFLayerRenderer::setBackingStoreDirty): Added.

2010-03-12  Robert Hogan  <robert@webkit.org>

        Not reviewed, build fix.

        Revert http://trac.webkit.org/projects/webkit/changeset/55374 which broke
        the !ENABLE(DATABASE) build on all platforms when attempting to fix the
        --minimal build on Qt.

        Support for SQLite now seems to be non-negotiable for the Qt build but making
        it mandatory requires review, so re-break --minimal Qt build for now.

        Qt build issue now tracked at https://bugs.webkit.org/show_bug.cgi?id=36073

        * page/GeolocationPositionCache.cpp:

2010-03-12  Dan Bernstein  <mitz@apple.com>

        Reviewed by Alexey Proskuryakov.

        <rdar://problem/7709115> REGRESSION: toolbar is missing at http://www.glom.org/
        https://bugs.webkit.org/show_bug.cgi?id=35507

        * css/CSSImportRule.cpp:
        (WebCore::CSSImportRule::setCSSStyleSheet): Extend the change made in
        <http://trac.webkit.org/changeset/48818> to detect the two variants of
        KHTMLFixes.css in @import rules as well as in <link> elements.

2010-03-12  Gavin Barraclough  <barraclough@apple.com>

        Reviewed by Geoff Garen.

        Bug 36052 - [Qt] REGRESSION(55878) 63 test cases crash

        r55878 changed UStringImpl::empty()->characters() to be non-null,
        so TextBreakIteratorQt.cpp now should check the length of strings
        (previously was assuming all strings with a non-null data pointer
        had a length of at least 1).

        * platform/text/qt/TextBreakIteratorQt.cpp:
        (WebCore::wordBreakIterator):
        (WebCore::characterBreakIterator):
        (WebCore::lineBreakIterator):
        (WebCore::sentenceBreakIterator):

2010-03-12  Dirk Schulze  <krit@webkit.org>

        Reviewed by Nikolas Zimmermann.

        SVG fallback color doesn't work for bogus gradients.
        https://bugs.webkit.org/show_bug.cgi?id=35479

        Use a given fallback color on ignored gradients if present. Gradients
        must be ignored, if one dimension of the objects boundingBox is zero.

        Test: svg/custom/gradient-with-1d-boundingbox.svg

        * svg/graphics/SVGPaintServer.cpp:
        (WebCore::SVGPaintServer::strokePaintServer):
        * svg/graphics/SVGPaintServerGradient.cpp:
        (WebCore::SVGPaintServerGradient::setup):

2010-03-12  David Hyatt  <hyatt@apple.com>

        Reviewed by Dan Bernstein.

        https://bugs.webkit.org/show_bug.cgi?id=36069
        
        Eliminate InlineRunBox.

        * WebCore.xcodeproj/project.pbxproj:
        * rendering/InlineFlowBox.cpp:
        (WebCore::InlineFlowBox::adjustPosition):
        (WebCore::InlineFlowBox::paintFillLayer):
        (WebCore::InlineFlowBox::paintBoxDecorations):
        (WebCore::InlineFlowBox::paintMask):
        * rendering/InlineFlowBox.h:
        (WebCore::InlineFlowBox::InlineFlowBox):
        (WebCore::InlineFlowBox::prevLineBox):
        (WebCore::InlineFlowBox::nextLineBox):
        (WebCore::InlineFlowBox::setNextLineBox):
        (WebCore::InlineFlowBox::setPreviousLineBox):
        * rendering/InlineRunBox.h: Removed.
        * rendering/InlineTextBox.h:
        (WebCore::InlineTextBox::InlineTextBox):
        (WebCore::InlineTextBox::prevTextBox):
        (WebCore::InlineTextBox::nextTextBox):
        (WebCore::InlineTextBox::setNextTextBox):
        (WebCore::InlineTextBox::setPreviousTextBox):
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::destroy):
        (WebCore::RenderBlock::rightmostPosition):
        (WebCore::RenderBlock::leftmostPosition):
        * rendering/RenderInline.cpp:
        (WebCore::RenderInline::destroy):
        (WebCore::RenderInline::absoluteRects):
        (WebCore::RenderInline::absoluteQuads):
        (WebCore::RenderInline::linesBoundingBox):
        (WebCore::RenderInline::linesVisibleOverflowBoundingBox):
        (WebCore::RenderInline::addFocusRingRects):
        (WebCore::RenderInline::paintOutline):
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::localBoundingBox):
        * rendering/RenderLineBoxList.cpp:
        (WebCore::RenderLineBoxList::deleteLineBoxTree):
        (WebCore::RenderLineBoxList::extractLineBox):
        (WebCore::RenderLineBoxList::attachLineBox):
        (WebCore::RenderLineBoxList::removeLineBox):
        (WebCore::RenderLineBoxList::deleteLineBoxes):
        (WebCore::RenderLineBoxList::dirtyLineBoxes):
        (WebCore::RenderLineBoxList::paint):
        (WebCore::RenderLineBoxList::hitTest):
        (WebCore::RenderLineBoxList::dirtyLinesFromChangedChild):
        (WebCore::RenderLineBoxList::checkConsistency):
        * rendering/RenderSVGInline.cpp:
        (WebCore::RenderSVGInline::absoluteRects):
        (WebCore::RenderSVGInline::absoluteQuads):
        * rendering/RenderSVGText.cpp:
        (WebCore::RenderSVGText::absoluteRects):
        (WebCore::RenderSVGText::absoluteQuads):
        (WebCore::RenderSVGText::objectBoundingBox):
        * rendering/RenderText.cpp:
        (WebCore::RenderText::extractTextBox):
        (WebCore::RenderText::attachTextBox):
        (WebCore::RenderText::removeTextBox):
        (WebCore::RenderText::createInlineTextBox):
        (WebCore::RenderText::positionLineBox):
        * rendering/RootInlineBox.h:
        (WebCore::RootInlineBox::nextRootBox):
        (WebCore::RootInlineBox::prevRootBox):

2010-03-12  Gustavo Noronha Silva  <gustavo.noronha@collabora.co.uk>

        Reviewed by Eric Carlson.

        media/video-preload.html fails
        https://bugs.webkit.org/show_bug.cgi?id=35793

        Only effectively load, and start buffering when playing, or when
        the preload attribute is set.

        Test: media/video-preload.html

        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:
        (WebCore::MediaPlayerPrivate::MediaPlayerPrivate):
        (WebCore::MediaPlayerPrivate::load):
        (WebCore::MediaPlayerPrivate::commitLoad):
        (WebCore::MediaPlayerPrivate::prepareToPlay):
        (WebCore::MediaPlayerPrivate::setPreload):
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.h:

2010-03-12  Dmitry Titov  <dimich@chromium.org>

        Not reviewed, build fix.

        Reverts 55920 and 55921. Landing for Jian Li.

        * Android.derived.jscbindings.mk:
        * Android.derived.v8bindings.mk:
        * DerivedSources.cpp:
        * DerivedSources.make:
        * GNUmakefile.am:
        * WebCore.gypi:
        * WebCore.pri:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSDOMFormDataCustom.cpp: Removed.
        * bindings/js/JSXMLHttpRequestCustom.cpp:
        (WebCore::JSXMLHttpRequest::send):
        * bindings/scripts/CodeGeneratorJS.pm:
        * bindings/v8/V8Index.h:
        * bindings/v8/custom/V8DOMFormDataCustom.cpp: Removed.
        * bindings/v8/custom/V8XMLHttpRequestCustom.cpp:
        (WebCore::V8XMLHttpRequest::sendCallback):
        * html/DOMFormData.idl: Removed.
        * page/DOMWindow.idl:

2010-03-12  Jakob Petsovits  <jpetsovits@rim.com>

        Reviewed by Dirk Schulze.

        [OpenVG] Add support for drawing text to PainterOpenVG
        https://bugs.webkit.org/show_bug.cgi?id=35581

        Doesn't come with any actual font classes, as OpenVG
        by itself doesn't provide any access to platform fonts
        but just the means to draw glyphs that have been loaded
        manually before.

        * platform/graphics/openvg/PainterOpenVG.cpp:
        (WebCore::PlatformPainterState::PlatformPainterState):
        (WebCore::PlatformPainterState::copyPaintState):
        (WebCore::PainterOpenVG::textDrawingMode):
        (WebCore::PainterOpenVG::setTextDrawingMode):
        (WebCore::PainterOpenVG::drawText):
        * platform/graphics/openvg/PainterOpenVG.h:

2010-03-12  Jakob Petsovits  <jpetsovits@rim.com>

        Reviewed by Dirk Schulze.

        [OpenVG] Use masks to implement non-rectilinear clipping
        https://bugs.webkit.org/show_bug.cgi?id=35544

        Requires some additional context switching logic to
        make sure the right context is current when dealing
        with the mask, because we don't store it by ourselves.

        Initial version of this code was written by
        Eli Fidler <efidler@rim.com>, I did a couple of
        bug fixes and efficiency improvements since then.

        * platform/graphics/openvg/GraphicsContextOpenVG.cpp:
        (WebCore::GraphicsContext::clipPath):
        (WebCore::GraphicsContext::clip):
        (WebCore::GraphicsContext::clipOut):
        (WebCore::GraphicsContext::clipOutEllipseInRect):
        (WebCore::GraphicsContext::addInnerRoundedRectClip):
        * platform/graphics/openvg/PainterOpenVG.cpp:
        (WebCore::PlatformPainterState::PlatformPainterState):
        (WebCore::PlatformPainterState::~PlatformPainterState):
        (WebCore::PlatformPainterState::maskingEnabled):
        (WebCore::PlatformPainterState::applyState):
        (WebCore::PlatformPainterState::saveMaskIfNecessary):
        (WebCore::PainterOpenVG::intersectClipRect):
        (WebCore::PainterOpenVG::clipPath):
        (WebCore::PainterOpenVG::save):
        * platform/graphics/openvg/PainterOpenVG.h:
        (WebCore::PainterOpenVG::):
        * platform/graphics/openvg/SurfaceOpenVG.cpp:
        (WebCore::SurfaceOpenVG::makeCurrent):
        (WebCore::SurfaceOpenVG::makeCompatibleCurrent):
        * platform/graphics/openvg/SurfaceOpenVG.h:
        (WebCore::SurfaceOpenVG::):

2010-03-12  Jian Li  <jianli@chromium.org>

        Reviewed by Sam Weinig.

        Add DOMFormData.idl to expose FormData interface.
        https://bugs.webkit.org/show_bug.cgi?id=36024
        
        The implementation is based on XMLHttpRequest 2 spec:
        http://dev.w3.org/2006/webapi/XMLHttpRequest-2/#formdata

        Test: http/tests/local/send-form-data.html

        * Android.derived.jscbindings.mk:
        * Android.derived.v8bindings.mk:
        * DerivedSources.cpp:
        * DerivedSources.make:
        * GNUmakefile.am:
        * WebCore.pri:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSDOMFormDataCustom.cpp: Added.
        * bindings/js/JSXMLHttpRequestCustom.cpp:
        (WebCore::JSXMLHttpRequest::send):
        * bindings/scripts/CodeGeneratorJS.pm:
        * html/DOMFormData.idl: Added.
        * page/DOMWindow.idl:

2010-03-12  Jakob Petsovits  <jpetsovits@rim.com>

        Reviewed by Dirk Schulze.

        [OpenVG] Add a SurfaceOpenVG constructor for EGL client buffer surfaces
        https://bugs.webkit.org/show_bug.cgi?id=35538

        SurfaceOpenVG can now not only encapsulate pbuffer
        and window surfaces but also VGImage-based ones.

        * platform/graphics/openvg/EGLDisplayOpenVG.cpp:
        (WebCore::EGLDisplayOpenVG::createPbufferFromClientBuffer):
        * platform/graphics/openvg/EGLDisplayOpenVG.h:
        * platform/graphics/openvg/SurfaceOpenVG.cpp:
        (WebCore::SurfaceOpenVG::SurfaceOpenVG):
        * platform/graphics/openvg/SurfaceOpenVG.h:

2010-03-12  Alpha Lam  <hclam@chromium.org>

        Reviewed by Eric Carlson.

        Fix a crash when resource loading of media element is canceled.
        https://bugs.webkit.org/show_bug.cgi?id=35992

        Use of HTMLMediaElement::duration() after resource loading was canceled
        will cause a crash. This is because HTMLMediaElement::m_player is used
        when NULL.
        Test: http/tests/media/video-cancel-load.html

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::duration):
        Avoid calling to m_player when it is null.
        (WebCore::HTMLMediaElement::userCancelledLoad):
        Set m_readyState to HAVE_NOTHING.

2010-03-12  Dan Bernstein  <mitz@apple.com>

        Reviewed by Darin Adler.

        <rdar://problem/7725534> CSSPrimitiveValue::parserValue() returns deleted memory
        https://bugs.webkit.org/show_bug.cgi?id=20069

        No test added, since with the CSS variables feature disabled, the pointer
        to the freed memory is never dereferenced.

        * css/CSSPrimitiveValue.cpp:
        (WebCore::valueOrPropertyName): Changed to return a const AtomicString& from
        a static table.
        (WebCore::CSSPrimitiveValue::parserValue): Updated for the above change.

2010-03-12  Dan Bernstein  <mitz@apple.com>

        Build fix.

        * platform/chromium/PlatformKeyboardEventChromium.cpp:

2010-03-12  Dan Bernstein  <mitz@apple.com>

        Reviewed by Darin Adler.

        <rdar://problem/7694674> Hover states not updated when overflow section scrolls under stationary mouse pointer
        https://bugs.webkit.org/show_bug.cgi?id=35949

        Test: fast/events/overflow-scroll-fake-mouse-move.html

        Soon after an overflow section scrolls under the mouse pointer, dispatch
        a fake mouse move event. This is similar to how frame scrolling is handled
        in WebKit, and has the effect of updating hover state, dispatching DOM mouse
        events, and updating the tool tip.

        * page/EventHandler.cpp:
        (WebCore::EventHandler::EventHandler): Initialize m_fakeMouseMoveEventTimer.
        (WebCore::EventHandler::~EventHandler): Assert that the timer is not active.
        (WebCore::EventHandler::clear): Stop the timer.
        (WebCore::EventHandler::handleMousePressEvent): Cancel pending fake mouse
        move events.
        (WebCore::EventHandler::handleMouseMoveEvent): Ditto.
        (WebCore::EventHandler::dispatchFakeMouseMoveEventSoonInQuad): If the mouse
        is in the passed-in quad, ensure that a fake mouse move event is scheduled
        to fire soon.
        (WebCore::EventHandler::cancelFakeMouseMoveEvent): Does what the name says.
        (WebCore::EventHandler::fakeMouseMoveEventTimerFired): Constructs a
        PlatformMouseEvent with the current mouse location, modifier key state and
        time stamp and calls mouseMoved().
        * page/EventHandler.h:
        * platform/PlatformKeyboardEvent.h: Declared getCurrentModifierState().
        * platform/android/KeyEventAndroid.cpp:
        (WebCore::PlatformKeyboardEvent::getCurrentModifierState): Stubbed out.
        * platform/brew/PlatformKeyboardEventBrew.cpp:
        (WebCore::PlatformKeyboardEvent::getCurrentModifierState): Ditto.
        * platform/chromium/PlatformKeyboardEventChromium.cpp:
        (WebCore::PlatformKeyboardEvent::getCurrentModifierState): Added.
        * platform/efl/PlatformKeyboardEventEfl.cpp:
        (WebCore::PlatformKeyboardEvent::getCurrentModifierState): Stubbed out.
        * platform/gtk/KeyEventGtk.cpp:
        (WebCore::PlatformKeyboardEvent::getCurrentModifierState): Ditto.
        * platform/haiku/PlatformKeyboardEventHaiku.cpp:
        (WebCore::PlatformKeyboardEvent::getCurrentModifierState): Added.
        * platform/mac/KeyEventMac.mm:
        (WebCore::PlatformKeyboardEvent::getCurrentModifierState): Ditto.
        * platform/qt/PlatformKeyboardEventQt.cpp:
        (WebCore::PlatformKeyboardEvent::getCurrentModifierState): Stubbed out.
        * platform/win/KeyEventWin.cpp:
        (WebCore::PlatformKeyboardEvent::getCurrentModifierState): Added.
        * platform/wx/KeyboardEventWx.cpp:
        (WebCore::PlatformKeyboardEvent::getCurrentModifierState): Ditto.
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::scrollToOffset): Call
        EventHandler::dispatchFakeMouseMoveEventSoonInQuad(). Moved things around
        a little to avoid computing the repaint rect twice.

2010-03-12  Kent Hansen  <kent.hansen@nokia.com>

        Reviewed by Darin Adler.

        Webkit doesn't build with workers on and database off
        https://bugs.webkit.org/show_bug.cgi?id=35997

        Added missing ENABLE(DATABASE) guards.

        * workers/WorkerThread.cpp:
        (WebCore::WorkerThreadShutdownStartTask::performTask):

2010-03-12  Dan Winship  <danw@gnome.org>

        Reviewed by Gustavo Noronha.

        Make the defaultCookieJar use a no-third-party policy. Most
        applications set their own cookie jar, but DumpRenderTree doesn't,
        so it was failing the new third-party-cookie test.

        * platform/network/soup/CookieJarSoup.cpp:
        (WebCore::defaultCookieJar):

2010-03-11  Simon Hausmann  <simon.hausmann@nokia.com>

        Reviewed by Laszlo Gombos.

        [Qt] Enable network state notifier when compiling against Qt 4.7
        https://bugs.webkit.org/show_bug.cgi?id=35983

        * WebCore.pri:
        * platform/network/qt/NetworkStateNotifierPrivate.h:
        * platform/network/qt/NetworkStateNotifierQt.cpp:

2010-03-11  Benjamin Poulain  <benjamin.poulain@nokia.com>

        Reviewed by Adam Treat.

        Do not render the full frame when there is some elements with fixed positioning
        https://bugs.webkit.org/show_bug.cgi?id=33150

        The frame view take into acount the list of fixed object when scrolling
        the view. If the number of object is lower than a certain threshold, the pixel
        are blitted, and the invalidated area updated.

        * page/FrameView.cpp:
        (WebCore::FrameView::FrameView):
        (WebCore::FrameView::useSlowRepaints):
        (WebCore::FrameView::useSlowRepaintsIfNotOverlapped):
        (WebCore::FrameView::addFixedObject):
        (WebCore::FrameView::removeFixedObject):
        (WebCore::FrameView::scrollContentsFastPath):
        * page/FrameView.h:
        * platform/ScrollView.cpp:
        (WebCore::ScrollView::scrollContents):
        (WebCore::ScrollView::scrollContentsFastPath):
        * platform/ScrollView.h:
        * rendering/RenderBlock.h:
        (WebCore::RenderBlock::positionedObjects):
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::styleWillChange):
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::styleWillChange):

2010-03-11  Aaron Boodman  <aa@chromium.org>

        Kill WebDocument::applicationID() (part 1).

        Modify interface to WebCore::NotificationPresenter::checkPermission()
        and remove implementation of WebDocument::applicationID(). Breaking
        API changes will be in a subsequent change.
        https://bugs.webkit.org/show_bug.cgi?id=35846

        * notifications/Notification.cpp:
        (WebCore::Notification::Notification):
        * notifications/NotificationCenter.cpp:
        (WebCore::NotificationCenter::checkPermission):
        * notifications/NotificationPresenter.h:

2010-03-11  Dmitry Titov  <dimich@chromium.org>

        Reviewed by David Levin.

        [v8] Remove obsolete code for delayed dereferencing of DOM objects for single-heap, multithread v8 usage.
        https://bugs.webkit.org/show_bug.cgi?id=36043

        No new tests, no changes in functionality.

        * bindings/v8/DOMData.cpp:
        (WebCore::DOMData::DOMData):
        * bindings/v8/DOMData.h:
        (WebCore::DOMData::handleWeakObject):
        * bindings/v8/DOMDataStore.cpp:
        * bindings/v8/DOMDataStore.h:
        (WebCore::DOMDataStore::domObjectMap):
        (WebCore::DOMDataStore::activeDomObjectMap):
        (WebCore::DOMDataStore::domSvgElementInstanceMap):
        (WebCore::DOMDataStore::domSvgObjectWithContextMap):
        * bindings/v8/ScopedDOMDataStore.cpp:
        (WebCore::ScopedDOMDataStore::ScopedDOMDataStore):
        * bindings/v8/StaticDOMDataStore.cpp:
        (WebCore::StaticDOMDataStore::StaticDOMDataStore):
        * bindings/v8/StaticDOMDataStore.h:
        * bindings/v8/V8DOMMap.cpp:
        (WebCore::removeAllDOMObjectsInCurrentThread):

2010-03-11  Gavin Barraclough  <barraclough@apple.com>

        Rubber stamped by Oliver Hunt.

        Remove nonsense comments used in development & commited in error.

        * platform/text/StringImpl.h:

2010-03-11  Gavin Barraclough  <barraclough@apple.com>

        Reviewed by Oliver Hunt.

        https://bugs.webkit.org/show_bug.cgi?id=36041
        Remove unnecessary differences in common code between WebCore::StringImpl & JSC::UStringImpl

        Much of the code in WebCore::StringImpl and JSC::UStringImpl is now very similar,
        but has trivial and unnecessary formatting differences, such as the exact wording
        of comments, missing ASSERTs, functions implemented in the .h vs .cpp etc.

        * platform/text/StringImpl.cpp:
        (WebCore::StringImpl::empty): Reordered in file, made empty()->characters() return a non-null value to match JSC.
        (WebCore::StringImpl::createUninitialized): Added overflow check.
        (WebCore::StringImpl::create): Reordered in file.
        (WebCore::StringImpl::sharedBuffer): Reordered in file.
        * platform/text/StringImpl.h:
        (WebCore::StringImpl::): Remove ThreadGlobalData as friend, move SharableUChar & SharedUChar to WebCore namespace.
        (WebCore::StringImpl::StringImpl): Made static constructor method (used to create empty string) take arguments, to match JSC & prevent accidental use.
        (WebCore::StringImpl::setHash): Added missing ASSERT.
        (WebCore::StringImpl::adopt): Make adpot work with Vectors with a non-zero inline capacity.
        (WebCore::StringImpl::characters): Mark as const to match JSC.
        (WebCore::StringImpl::hash): Use !m_hash instead of m_hash == 0.
        (WebCore::StringImpl::computeHash): Remove redundant 'inline'.

2010-03-11  Mark Rowe  <mrowe@apple.com>

        Reviewed by David Kilzer.

        <rdar://problem/7745082> Make it possible to build WebKit for older Mac OS X versions from the current Mac OS X version

        Default to using the appropriate SDK if the target Mac OS X version is not the current Mac OS X version.

        * Configurations/Base.xcconfig:

2010-03-11  Jungshik Shin  <jshin@chromium.org>

        [Chromium]: Plane 2 characters are rendered "blank" 
         (not even empty boxes) on Windows even when there are fonts to
         cover them. 

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

        Test:LayoutTests/fast/text/international/plane2.html 

        * platform/graphics/chromium/FontCacheChromiumWin.cpp:
        (WebCore::LookupAltName): Add two ExtB fonts to the array (namePairs) that are used for Plane 2 character rendering.
        (WebCore::FontCache::getFontDataForCharacters): Add two more fonts to the fallback font list
        * platform/graphics/chromium/FontUtilsChromiumWin.cpp:
        (WebCore::getFallbackFamily): Fix the fallback font lookup to cover Plane 2 (CJK ExtB).

2010-03-11  Leandro Pereira  <leandro@profusion.mobi>

        Reviewed by Holger Freyther.

        Add EFL port files to platform/efl.
        http://webkit.org/b/35889

        * platform/efl/SystemTimeEfl.cpp: Added.

2010-03-11  Mark Rowe  <mrowe@apple.com>

        Reviewed by Tim Hatcher.

        <rdar://problem/7745082> Make it possible to build WebKit for older Mac OS X versions from the current Mac OS X version

        Introduce TARGET_MAC_OS_X_VERSION_MAJOR to represent the Mac OS X version that is being targeted.  It defaults to the
        current Mac OS X version unless otherwise specified.

        Key off TARGET_MAC_OS_X_VERSION_MAJOR where we'd previously been keying off MAC_OS_X_VERSION_MAJOR.

        Explicitly map from the target Mac OS X version to the preferred compiler since Xcode's default compiler choice
        may not be usable when targetting a different Mac OS X version.

        Key off TARGET_GCC_VERSION rather than MAC_OS_X_VERSION_MAJOR in locations where we'd previously been keying off
        MAC_OS_X_VERSION_MAJOR but the decision is really related to the compiler version being used.

        * Configurations/Base.xcconfig:
        * Configurations/DebugRelease.xcconfig:
        * Configurations/FeatureDefines.xcconfig:
        * Configurations/Version.xcconfig:
        * Configurations/WebCore.xcconfig:

2010-03-11  Anders Carlsson  <andersca@apple.com>

        Reviewed by David Hyatt.

        Remove invalidateContents, it isn't used and it never makes sense to only invalidate the contents.

        * loader/EmptyClients.h:
        * page/Chrome.cpp:
        * page/Chrome.h:
        * page/ChromeClient.h:
        * platform/HostWindow.h:

2010-03-11  Nate Chapin  <japhet@chromium.org>

        Reviewed by Dimitri Glazkov.

        [V8] Remove DOMObjectsInclude.h and update headers accordingly.

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

        * WebCore.gypi:
        * bindings/v8/DOMData.h:
        * bindings/v8/DOMDataStore.h:
        * bindings/v8/DOMObjectsInclude.h: Removed.
        * bindings/v8/V8DOMMap.cpp:
        * bindings/v8/V8DOMWindowShell.cpp:
        * bindings/v8/V8DOMWrapper.cpp:
        * bindings/v8/V8GCController.cpp:
        * bindings/v8/V8Proxy.cpp:

2010-03-11  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Mark Rowe.

        Remove duplicate entries revealed after sorting.

        * WebCore.xcodeproj/project.pbxproj:

2010-03-11  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Mark Rowe.

        Sort the project file (also removing some bogus spaces that caused Xcode to rewrite the file
        every time you opened it).

        * WebCore.xcodeproj/project.pbxproj:

2010-03-11  Nate Chapin  <japhet@chromium.org>

        Reviewed by Dimitri Glazkov.

        Fix style issues and improve comments from 
        http://trac.webkit.org/changeset/55853.

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

        * platform/animation/TimingFunction.h:
        (WebCore::TimingFunction::TimingFunction):

2010-03-11  Chris Fleizach  <cfleizach@apple.com>

        Reviewed by Beth Dakin.

        accessibilityIsIgnoredBase() needs to respect when platform says include
        https://bugs.webkit.org/show_bug.cgi?id=36025

        Changed accessibilityIsIgnoredBase() to return a policy instead of a yes/no
        answer. This allows the platform to make a yes decision on an element.

        * accessibility/AccessibilityList.cpp:
        (WebCore::AccessibilityList::accessibilityIsIgnored):
        * accessibility/AccessibilityListBox.cpp:
        (WebCore::AccessibilityListBox::accessibilityIsIgnored):
        * accessibility/AccessibilityObject.h:
        (WebCore::):
        (WebCore::AccessibilityObject::accessibilityIgnoreAttachment):
        (WebCore::AccessibilityObject::accessibilityPlatformIncludesObject):
        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::accessibilityIsIgnoredBase):
        (WebCore::AccessibilityRenderObject::accessibilityIsIgnored):
        * accessibility/AccessibilityRenderObject.h:
        * accessibility/AccessibilitySlider.cpp:
        (WebCore::AccessibilitySlider::accessibilityIsIgnored):
        * accessibility/AccessibilityTable.cpp:
        (WebCore::AccessibilityTable::accessibilityIsIgnored):
        * accessibility/AccessibilityTableCell.cpp:
        (WebCore::AccessibilityTableCell::accessibilityIsIgnored):
        * accessibility/AccessibilityTableRow.cpp:
        (WebCore::AccessibilityTableRow::accessibilityIsIgnored):
        * accessibility/chromium/AccessibilityObjectChromium.cpp:
        (WebCore::AccessibilityObject::accessibilityPlatformIncludesObject):
        * accessibility/gtk/AccessibilityObjectAtk.cpp:
        (WebCore::AccessibilityObject::accessibilityPlatformIncludesObject):
        * accessibility/mac/AccessibilityObjectMac.mm:
        (WebCore::AccessibilityObject::accessibilityPlatformIncludesObject):
        * accessibility/qt/AccessibilityObjectQt.cpp:
        (WebCore::AccessibilityObject::accessibilityPlatformIncludesObject):
        * accessibility/win/AccessibilityObjectWin.cpp:
        (WebCore::AccessibilityObject::accessibilityPlatformIncludesObject):
        * accessibility/wx/AccessibilityObjectWx.cpp:
        (WebCore::AccessibilityObject::accessibilityPlatformIncludesObject):

2010-03-11  Kenneth Russell  <kbr@google.com>

        Reviewed by Dimitri Glazkov.

        Fix build breakage with ENABLE_3D_CANVAS=0
        https://bugs.webkit.org/show_bug.cgi?id=35995

        No new tests; verified in Chromium that WebGL is disabled in
        ENABLE_3D_CANVAS=0 builds.

        * bindings/v8/custom/V8DocumentCustom.cpp:
        * bindings/v8/custom/V8HTMLCanvasElementCustom.cpp:

2010-03-11  Nate Chapin  <japhet@chromium.org>

        Unreviewed, Chromium mac build fix.

        Add an explicit copy constructor to TimingFunction.
        http://trac.webkit.org/changeset/55835 trigged an inlining
        bug in gcc that the copy constructor resolves.

        * platform/animation/TimingFunction.h:
        (WebCore::TimingFunction::TimingFunction):

2010-03-11  Chris Fleizach  <cfleizach@apple.com>

        Fixing GTK. No review.

        support lang attribute on <option> elements
        https://bugs.webkit.org/show_bug.cgi?id=36021
 
        We don't need to cast to AccessibilityRenderObject to get language().

        * accessibility/gtk/AccessibilityObjectWrapperAtk.cpp:
        (webkit_accessible_document_get_locale):

2010-03-11  Chris Fleizach  <cfleizach@apple.com>

        Reviewed by Darin Adler.

        support lang attribute on <option> elements
        https://bugs.webkit.org/show_bug.cgi?id=36021

        Allow non AccessibilityRenderObject classes to access the lang
        attribute by moving the useful code into AccessibilityObject.

        Test: platform/mac/accessibility/option-with-lang.html

        * accessibility/AccessibilityListBoxOption.cpp:
        (WebCore::AccessibilityListBoxOption::language):
        * accessibility/AccessibilityListBoxOption.h:
        * accessibility/AccessibilityObject.cpp:
        (WebCore::AccessibilityObject::language):
        * accessibility/AccessibilityObject.h:
        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::language):
        * accessibility/AccessibilityRenderObject.h:

2010-03-11  Diego Gonzalez  <diego.gonzalez@openbossa.org>

        Reviewed by Simon Hausmann.

        [Qt] Access key modifier should be Ctrl+Alt for Darwin derived OS and Alt for the others
        https://bugs.webkit.org/show_bug.cgi?id=35993

        * page/qt/EventHandlerQt.cpp:
        (WebCore::EventHandler::accessKeyModifiers):

2010-03-08  Brett Wilson  <brettw@chromium.org>

        Reviewed by Adam Barth.

        Remove the deprecated argument to url_util::IsStandard in preparation
        for deleting that version of the function. Pull the latest googleurl
        with the new version for the Chromium builder.

        * platform/KURLGoogle.cpp:
        (WebCore::KURL::isHierarchical):

2010-03-11  Simon Hausmann  <simon.hausmann@nokia.com>

        Reviewed by Tor Arne Vestbø.

        [Qt] Make it possible to do builds with separate debug info in packages

        * WebCore.pro:

2010-03-11  Simon Hausmann  <simon.hausmann@nokia.com>

        Reviewed by Tor Arne Vestbø.

        [Qt] Avoid double-buffering with Qt image decoders

        Pass QIODevice::Unbuffered when opening the QBuffer that
        wraps the image data, to hint to Qt that no extra buffering
        is needed.

        * platform/graphics/qt/ImageDecoderQt.cpp:
        (WebCore::ImageDecoderQt::setData):

2010-03-10  Ben Murdoch  <benm@google.com>

        Reviewed by Jeremy Orlow.

        [Android] The platform touch events on Android are missing support
        for key modifiers.
        https://bugs.webkit.org/show_bug.cgi?id=35521

        Add support in PlatformToucHEventAndroid for the platform supplying
        key modifiers with touch events.

        Fixes Android so it now passes basic-single-touch-events.html.

        * page/EventHandler.cpp:
        (WebCore::EventHandler::handleTouchEvent): Fix two compiler warnings.
        * platform/PlatformTouchEvent.h:
        (WebCore::PlatformTouchEvent::PlatformTouchEvent): Add support for
            key modifiers on Android.
        * platform/android/PlatformTouchEventAndroid.cpp:
        (WebCore::PlatformTouchEvent::PlatformTouchEvent): ditto.

2010-03-10  Steve Block  <steveblock@google.com>

        Reviewed by Jeremy Orlow.

        Implements Geolocation maximumAge property
        https://bugs.webkit.org/show_bug.cgi?id=30676

        Test: fast/dom/Geolocation/maximum-age.html

        * WebCore.xcodeproj/project.pbxproj: Modified. Adds GeolocationPositionCache.h to Private headers
        * page/Geolocation.cpp: Modified.
        (WebCore::Geolocation::GeoNotifier::setUseCachedPosition): Added.
        (WebCore::Geolocation::GeoNotifier::runSuccessCallback): Added.
        (WebCore::Geolocation::GeoNotifier::timerFired): Modified. Added logic to handle using a cached position
        (WebCore::Geolocation::Watchers::contains): Added. Required to determine if a notifier is a watch request
        (WebCore::Geolocation::startRequest): Modified. Added logic to check for a cached position
        (WebCore::Geolocation::requestUsesCachedPosition): Added. Callback to Geolocation object when notifier uses a cached position
        (WebCore::Geolocation::makeCachedPositionCallbacks): Added.
        (WebCore::Geolocation::haveSuitableCachedPosition): Added.
        (WebCore::Geolocation::setIsAllowed): Modified.
        (WebCore::Geolocation::positionChanged): Modified. Make callbacks using cached position where appropriate
        (WebCore::Geolocation::geolocationServiceErrorOccurred): Modified. Make callbacks using cached position where appropriate
        * page/Geolocation.h: Modified.

2010-03-11  Csaba Osztrogonác  <ossy@webkit.org>

        Unreviewed buildfix after r55823. (To fix Qt --minimal build.)
        I have déjà vu, I'm sure that I did it before. (r55598)

        * bindings/js/JSDOMWindowCustom.cpp: Missing #if ENABLE(DATABASE) guard added. 

2010-03-11  Csaba Osztrogonác  <ossy@webkit.org>

        [Qt] Unreviewed buildfix after r55833.

        Rename all instances of data() to characters()

        * bridge/qt/qt_class.cpp:
        (JSC::Bindings::QtClass::fieldNamed):
        * bridge/qt/qt_runtime.cpp:
        (JSC::Bindings::convertValueToQVariant):

2010-03-11  Zoltan Horvath  <zoltan@webkit.org>

        Reviewed by Simon Hausmann.

        Allow custom memory allocation control for RenderLayerBacking class
        https://bugs.webkit.org/show_bug.cgi?id=35857

        Inherits the following class from Noncopyable because it is
        instantiated by 'new' and no need to be copyable:                                     

        class name    - instantiated at: WebCore/'location'
        RenderLayerBacking - rendering/RenderLayer.cpp:3047

        * rendering/RenderLayerBacking.h:

2010-03-11  Zoltan Horvath  <zoltan@webkit.org>

        Reviewed by Simon Hausmann.

        Allow custom memory allocation control for TimingFunction struct
        https://bugs.webkit.org/show_bug.cgi?id=35855

        Inherits the following struct from FastAllocBase because it is 
        instantiated by 'new':

        class name    - instantiated at: WebCore/'location'
        TimingFuction - platform/graphics/GraphicsLayer.h:89

        * platform/animation/TimingFunction.h:

2010-03-10  Gavin Barraclough  <barraclough@apple.com>

        Rubber stamped by Oliver Hunt.
        
        Rename JSC::UStringImpl::data() to characters(), to match WebCore::StringImpl.

        * bridge/jni/jsc/JavaStringJSC.h:
        (JSC::Bindings::JavaStringImpl::uchars):
        * platform/text/AtomicString.cpp:
        (WebCore::AtomicString::add):
        (WebCore::AtomicString::find):

2010-03-10  Gavin Barraclough  <barraclough@apple.com>

        Reviewed by Mark Rowe.

        Fix for r55825, threadsafeCopy no longer needs to special-case for
        empty strings (in fact, doing so results in leaks).

        * platform/text/StringImpl.cpp:
        (WebCore::StringImpl::threadsafeCopy):

2010-03-10  Chang Shu  <chang.shu@nokia.com>

        Reviewed by Darin Adler.

        While calculating alpha channel, convert the floating point value to
        an integer in [0, 256) with equal distribution.
        https://bugs.webkit.org/show_bug.cgi?id=22150

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

2010-03-10  Gavin Barraclough  <barraclough@apple.com>

        Reviewed by Darin Adler, Geoffrey Garen, Maciej Stachowiak.

        https://bugs.webkit.org/show_bug.cgi?id=35991
        Would be faster to not use a thread specific to implement StringImpl::empty()

        Copy JavaScriptCore in making 'static' strings threadsafe, make the empty string a static,
        shared by all threads.

        ~2% progression on Dromaeo DOM core & JS lib tests.

        * platform/ThreadGlobalData.cpp:
        (WebCore::ThreadGlobalData::ThreadGlobalData):
        (WebCore::ThreadGlobalData::~ThreadGlobalData):
        * platform/ThreadGlobalData.h:
        (WebCore::ThreadGlobalData::eventNames):
        * platform/text/StringImpl.cpp:
        (WebCore::StringImpl::StringImpl):
        (WebCore::StringImpl::empty):
        * platform/text/StringImpl.h:
        (WebCore::StringImpl::deref):
        (WebCore::StringImpl::hasOneRef):

2010-03-08  Dumitru Daniliuc  <dumi@chromium.org>

        Reviewed by Adam Barth.

        Adding support for the optional creation callback that could be
        passed to openDatabase().

        Tests: storage/open-database-creation-callback.html
               storage/open-database-creation-callback-isolated-world.html

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

        * Android.jscbindings.mk
        * Android.v8bindings.mk
        * GNUmakefile.am:
        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSDOMWindowCustom.cpp:
        (WebCore::JSDOMWindow::openDatabase):
        * bindings/js/JSDatabaseCallback.cpp: Added.
        (WebCore::JSDatabaseCallback::JSDatabaseCallback):
        (WebCore::JSDatabaseCallback::~JSDatabaseCallback):
        (WebCore::JSDatabaseCallback::handleEvent):
        * bindings/js/JSDatabaseCallback.h: Added.
        (WebCore::JSDatabaseCallback::create):
        * bindings/v8/custom/V8DOMWindowCustom.cpp:
        (WebCore::V8DOMWindow::openDatabaseCallback):
        * bindings/v8/custom/V8DatabaseCallback.cpp: Added.
        (WebCore::V8DatabaseCallback::V8DatabaseCallback):
        (WebCore::V8DatabaseCallback::~V8DatabaseCallback):
        (WebCore::V8DatabaseCallback::handleEvent):
        * bindings/v8/custom/V8DatabaseCallback.h: Added.
        (WebCore::V8DatabaseCallback::create):
        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::openDatabase):
        * page/DOMWindow.h:
        * page/DOMWindow.idl:
        * storage/Database.cpp:
        (WebCore::DatabaseCreationCallbackTask::create):
        (WebCore::DatabaseCreationCallbackTask::performTask):
        (WebCore::DatabaseCreationCallbackTask::DatabaseCreationCallbackTask):
        (WebCore::Database::openDatabase):
        (WebCore::Database::Database):
        (WebCore::Database::performOpenAndVerify):
        (WebCore::Database::performCreationCallback):
        * storage/Database.h:
        (WebCore::Database::isNew):
        * storage/DatabaseCallback.h: Added.
        (WebCore::DatabaseCallback::~DatabaseCallback):
        * workers/WorkerContext.cpp:
        (WebCore::WorkerContext::openDatabase):
        * workers/WorkerContext.h:

2010-03-10  Justin Schuh  <jschuh@chromium.org>

        Reviewed by Adam Barth.

        Make Chrome consistently handle leading format characters in URLs

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

        Test: http/tests/security/xss-DENIED-window-open-javascript-url-leading-format-char.html

        * platform/KURLGoogle.cpp:

2010-03-10  Jian Li  <jianli@chromium.org>

        Reviewed by Dmitry Titov.

        Implementing DOMFormData class.
        https://bugs.webkit.org/show_bug.cgi?id=35707

        This patch only addresses the implementation of DOMFormData class and
        moves the FormData construction logic from HTMLFormElement::createFormData
        to FormData::create() so that it can be used by both HTMLFormElement
        and XMLHttpRequest.

        The DOMFormData IDL interface will be exposed in another patch and the
        test will be added then.

        * Android.mk:
        * GNUmakefile.am:
        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * html/DOMFormData.cpp: Added.
        * html/DOMFormData.h: Added.
        * html/FormDataList.h:
        (WebCore::FormDataList::encoding):
        * html/HTMLFormElement.cpp:
        (WebCore::HTMLFormElement::createFormData):
        (WebCore::HTMLFormElement::submit):
        * html/HTMLFormElement.h:
        * platform/network/FormData.cpp:
        (WebCore::FormData::create):
        (WebCore::FormData::createMultiPart):
        (WebCore::FormData::appendDOMFormData):
        * platform/network/FormData.h:
        (WebCore::FormData::boundary):
        * xml/XMLHttpRequest.cpp:
        (WebCore::XMLHttpRequest::send):
        * xml/XMLHttpRequest.h:

2010-03-10  Chris Fleizach  <cfleizach@apple.com>

        Reviewed by Beth Dakin.

        VoiceOver can navigate to hidden content in widget (WAI-ARIA)
        https://bugs.webkit.org/show_bug.cgi?id=35986

        Elements that are subclassers of AXRenderObject have not been respecting
        aria-hidden and other cases that would make them ignored. This applies
        to tables, rows, cells, select boxes, sliders, and lists. Select boxes
        also need to make sure their option elements respect aria-hidden as well.

        Test: accessibility/aria-hidden-with-elements.html

        * accessibility/AccessibilityList.cpp:
        (WebCore::AccessibilityList::accessibilityIsIgnored):
        * accessibility/AccessibilityListBox.cpp:
        (WebCore::AccessibilityListBox::addChildren):
        (WebCore::AccessibilityListBox::accessibilityIsIgnored):
        (WebCore::AccessibilityListBox::doAccessibilityHitTest):
        * accessibility/AccessibilityListBox.h:
        * accessibility/AccessibilityListBoxOption.cpp:
        (WebCore::AccessibilityListBoxOption::accessibilityIsIgnored):
        * accessibility/AccessibilityListBoxOption.h:
        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::accessibilityIsIgnoredCommon):
        (WebCore::AccessibilityRenderObject::accessibilityIsIgnored):
        (WebCore::AccessibilityRenderObject::doAccessibilityHitTest):
        * accessibility/AccessibilityRenderObject.h:
        * accessibility/AccessibilitySlider.cpp:
        (WebCore::AccessibilitySlider::accessibilityIsIgnored):
        * accessibility/AccessibilitySlider.h:
        (WebCore::AccessibilitySlider::roleValue):
        (WebCore::AccessibilitySliderThumb::roleValue):
        (WebCore::AccessibilitySliderThumb::accessibilityIsIgnored):
        * accessibility/AccessibilityTable.cpp:
        (WebCore::AccessibilityTable::accessibilityIsIgnored):
        * accessibility/AccessibilityTableCell.cpp:
        (WebCore::AccessibilityTableCell::accessibilityIsIgnored):
        * accessibility/AccessibilityTableColumn.cpp:
        (WebCore::AccessibilityTableColumn::accessibilityIsIgnored):
        * accessibility/AccessibilityTableColumn.h:
        (WebCore::AccessibilityTableColumn::roleValue):
        * accessibility/AccessibilityTableHeaderContainer.cpp:
        (WebCore::AccessibilityTableHeaderContainer::accessibilityIsIgnored):
        * accessibility/AccessibilityTableHeaderContainer.h:
        * accessibility/AccessibilityTableRow.cpp:
        (WebCore::AccessibilityTableRow::accessibilityIsIgnored):

2010-03-10  Dmitry Titov  <dimich@chromium.org>

        Reviewed by Darin Adler.

        Make Document::postTask to use a single queue of tasks, to fire them in order
        https://bugs.webkit.org/show_bug.cgi?id=35943

        Test: existing worker-cloneport.html which was broken by initial patch in http://trac.webkit.org/changeset/55593.
        Additional test which indirectly verifies the order of execution will come as part of https://bugs.webkit.org/show_bug.cgi?id=34726

        * dom/Document.cpp:
        (WebCore::Document::postTask): Always use the same task queue, independent of what thread is posting the task.

2010-03-10  Sanjeev Radhakrishnan  <sanjeevr@chromium.org>

        Reviewed by Darin Fisher.

        Allow a plugin to participate in the browser's print workflow.
        https://bugs.webkit.org/show_bug.cgi?id=35550

        * loader/PluginDocument.cpp:
        * loader/PluginDocument.h:

2010-03-10  Ilya Tikhonovsky  <loislo@loislo-macbookpro.local>

        Reviewed by Pavel Feldman.

        Sidebar resize element height was adjusted.
        Display name for Function Call details was adjusted.

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

        * inspector/front-end/TimelinePanel.js:
        (WebInspector.TimelinePanel.prototype._refreshRecords):
        (WebInspector.TimelinePanel.FormattedRecord.prototype._getRecordDetails):

2010-03-10  Charles Wei  <charles.wei@torchmobile.com.cn>

        Reviewed by George Staikos.

        Fix https://bugs.webkig.org/show_bug.cgi?id=35207
        When XHTMLMP is enabled, all xhtml documents fail to render for webkit portings wich use libxml2 tokenizer.

        No new tests as all the xhtml test cases in LayoutTests/dom/xhtml fails without this fix when XHTMLMP is enabled.

        * dom/Document.cpp:
        (WebCore::Document::isXHTMLMPDocument):
        * dom/XMLTokenizerLibxml2.cpp:
        (WebCore::XMLTokenizer::internalSubset):
        (WebCore::externalSubsetHandler):

2010-03-10  Garret Kelly  <gdk@chromium.org>

        Reviewed by Darin Fisher.

        Adding all of the touch-related sources into Chromium's WebCore build.
        https://bugs.webkit.org/show_bug.cgi?id=35874

        Patch tested against the try bots, but the feature is exercised in the
        fast/events/touch tests.

        * WebCore.gypi:

2010-03-10  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Timothy Hatcher.

        Web Inspector: now that audits panel is added, add it to the
        enums (for storing last active, etc.).

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

        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::setWindowVisible):
        (WebCore::InspectorController::specialPanelForJSName):
        * inspector/InspectorController.h:
        (WebCore::InspectorController::):
        * inspector/InspectorFrontend.cpp:
        (WebCore::InspectorFrontend::showPanel):
        * inspector/front-end/inspector.js:
        (WebInspector.showAuditsPanel):

2010-03-10  Nate Chapin  <japhet@chromium.org>

        Reviewed by Dimitri Glazkov.

        [V8] Instead of describing the type of a wrapped v8 object
        with an enum value, use a pointer to struct with more complete
        information.

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

        Refactoring only, so new tests.

        * bindings/scripts/CodeGeneratorV8.pm:
        * bindings/v8/DOMData.cpp:
        * bindings/v8/DOMData.h:
        * bindings/v8/NPV8Object.cpp:
        * bindings/v8/V8Collection.h:
        * bindings/v8/V8DOMWindowShell.cpp:
        * bindings/v8/V8DOMWindowShell.h:
        * bindings/v8/V8DOMWrapper.cpp:
        * bindings/v8/V8DOMWrapper.h:
        * bindings/v8/V8GCController.cpp:
        * bindings/v8/V8Helpers.cpp:
        * bindings/v8/V8Helpers.h:
        * bindings/v8/V8Index.cpp: Removed.
        * bindings/v8/V8Index.h:
        * bindings/v8/V8NPObject.cpp:
        * bindings/v8/V8Proxy.cpp:
        * bindings/v8/V8Proxy.h:
        * bindings/v8/WorkerContextExecutionProxy.cpp:
        * bindings/v8/custom/V8DOMWindowCustom.cpp:
        * bindings/v8/custom/V8HTMLAudioElementConstructor.cpp:
        * bindings/v8/custom/V8HTMLAudioElementConstructor.h:
        * bindings/v8/custom/V8HTMLImageElementConstructor.cpp:
        * bindings/v8/custom/V8HTMLImageElementConstructor.h:
        * bindings/v8/custom/V8HTMLOptionElementConstructor.cpp:
        * bindings/v8/custom/V8HTMLOptionElementConstructor.h:
        * bindings/v8/custom/V8InjectedScriptHostCustom.cpp:
        * bindings/v8/custom/V8MessageChannelConstructor.cpp:
        * bindings/v8/custom/V8SharedWorkerCustom.cpp:
        * bindings/v8/custom/V8WebGLArrayBufferCustom.cpp:
        * bindings/v8/custom/V8WebGLArrayCustom.h:
        * bindings/v8/custom/V8WebGLByteArrayCustom.cpp:
        * bindings/v8/custom/V8WebGLFloatArrayCustom.cpp:
        * bindings/v8/custom/V8WebGLIntArrayCustom.cpp:
        * bindings/v8/custom/V8WebGLShortArrayCustom.cpp:
        * bindings/v8/custom/V8WebGLUnsignedByteArrayCustom.cpp:
        * bindings/v8/custom/V8WebGLUnsignedIntArrayCustom.cpp:
        * bindings/v8/custom/V8WebGLUnsignedShortArrayCustom.cpp:
        * bindings/v8/custom/V8WebKitCSSMatrixConstructor.cpp:
        * bindings/v8/custom/V8WebKitPointConstructor.cpp:
        * bindings/v8/custom/V8WebSocketCustom.cpp:
        * bindings/v8/custom/V8WorkerCustom.cpp:
        * bindings/v8/custom/V8XMLHttpRequestConstructor.cpp:
        * bindings/v8/custom/V8XSLTProcessorCustom.cpp:

2010-03-10  Antonio Gomes  <tonikitoo@webkit.org>

        Reviewed by Dave Hyatt.
        Patch by Antonio Gomes <tonikitoo@webkit.org>

        Extend keyboard navigation to allow directional navigation (Manual tests)
        https://bugs.webkit.org/show_bug.cgi?id=18662

        Adds a manual tests for the Spatial Navigation feature comprasing varios
        Html focusable elements (e.g. <a>, <table>, <iframe>) and much of the logic
        provided by the feature.

        * manual-tests/spatial-navigation/links.html: Added.
        * manual-tests/spatial-navigation/spatial-navigation-test-cases.html: Added.

2010-03-10  Leandro Pereira  <leandro@profusion.mobi>

        Reviewed by Kenneth Rohde Christiansen.

        Add EFL port files to platform/efl.
        http://webkit.org/b/35890

        * platform/efl/ScrollbarEfl.h: Added.
        * platform/efl/ScrollbarThemeEfl.h: Added.

2010-03-10  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Timothy Hatcher.

        Web Inspector: Audits panel needs an icon.
        Landing icon attached by Timothy. Enabling panel!

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

        * WebCore.gypi:
        * inspector/front-end/Images/auditsIcon.png: Added.
        * inspector/front-end/WebKit.qrc:
        * inspector/front-end/inspector.css:

2010-03-10  Gustavo Noronha Silva  <gustavo.noronha@collabora.co.uk>

        Roll-out r55657, as Xan noticed a bad degradation in playing
        youtube HTML5 videos with it, that is fixed with it
        reverted. Looks like we'll need to work a bit more on this.

        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:
        (WebCore::MediaPlayerPrivate::MediaPlayerPrivate):
        (WebCore::MediaPlayerPrivate::~MediaPlayerPrivate):
        (WebCore::MediaPlayerPrivate::volumeChangedTimerFired):
        (WebCore::MediaPlayerPrivate::volumeChanged):
        (WebCore::MediaPlayerPrivate::processBufferingStats):
        (WebCore::MediaPlayerPrivate::fillTimerFired):
        (WebCore::MediaPlayerPrivate::maxTimeLoaded):
        (WebCore::MediaPlayerPrivate::updateStates):
        (WebCore::MediaPlayerPrivate::muteChangedTimerFired):
        (WebCore::MediaPlayerPrivate::muteChanged):
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.h:

2010-03-10  Gustavo Noronha Silva  <gustavo.noronha@collabora.co.uk>

        Rubber-stamped by Xan Lopez.

        Fix ready state when buffering under PLAYING. We should not go
        back to HaveNothing in that case.

        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:
        (WebCore::MediaPlayerPrivate::updateStates):

2010-03-10  Ada Chan  <adachan@apple.com>

        Reviewed by Adam Roben.

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

        Retrieve any dwItemData that's set on the context menu item in contextMenuItemByIdOrPosition().

        * platform/win/ContextMenuWin.cpp:

2010-03-10  Jeremy Orlow  <jorlow@chromium.org>

        Reviewed by Darin Fisher.

        Add IndexedDatabase class and hook it up.
        https://bugs.webkit.org/show_bug.cgi?id=35927

        This change is mostly just adding the plumbing necessary for
        the IndexedDatabaseRequest and IndexedDatabaseSync (not written
        yet).

        This code is non-functional, so no tests (yet).

        * WebCore.gyp/WebCore.gyp:
        * WebCore.gypi:
        * platform/chromium/ChromiumBridge.h:
        * storage/IndexedDatabase.cpp: Added.
        (WebCore::IndexedDatabase::get):
        * storage/IndexedDatabase.h: Added.
        (WebCore::IndexedDatabase::~IndexedDatabase):
        * storage/IndexedDatabaseImpl.cpp: Added.
        (WebCore::IndexedDatabaseImpl::get):
        (WebCore::IndexedDatabaseImpl::IndexedDatabaseImpl):
        (WebCore::IndexedDatabaseImpl::~IndexedDatabaseImpl):
        (WebCore::IndexedDatabaseImpl::open):
        * storage/IndexedDatabaseImpl.h: Added.
        * storage/chromium/IndexedDatabase.cpp: Added.
        (WebCore::IndexedDatabase::get):

2010-03-05  Dimitri Glazkov  <dglazkov@chromium.org>

        Reviewed by Sam Weinig.

        Add one more parent check during node removal.
        https://bugs.webkit.org/show_bug.cgi?id=35818

        Test: fast/dom/Node/mutation-blur.html

        * dom/ContainerNode.cpp:
        (WebCore::ContainerNode::removeChild): Added check.

2010-03-10  Pavel Feldman  <pfeldman@chromium.org>

        Not reviewed: added missing quote into localized strings.

        * English.lproj/localizedStrings.js:

2010-03-10  Jeremy Orlow  <jorlow@chromium.org>

        Commit files that were supposed to go in with the last checkin.

2010-03-10  Jeremy Orlow  <jorlow@chromium.org>

        Reviewed by Dimitry Glazkov.

        Baby steps towards IndexedDB: Start implementing callbacks.
        https://bugs.webkit.org/show_bug.cgi?id=35911

        This patch adds some infastructure for IndexedDB callbacks in V8.
        It also adds a stub of IDBDatabaseRequest.  In the near future,
        I'll gut the event based implementation code, flesh out IDBReqest
        further, and start plumbing IndexedDatabaseRequest.

        Code is not testible because it doesn't work (yet).

        * WebCore.gypi:
        * bindings/v8/DOMObjectsInclude.h:
        * bindings/v8/V8Index.cpp:
        * bindings/v8/V8Index.h:
        * bindings/v8/custom/V8CustomIDBCallback.h: Added.
        (WebCore::V8CustomIDBCallback::create):
        (WebCore::V8CustomIDBCallback::~V8CustomIDBCallback):
        (WebCore::V8CustomIDBCallback::handleEvent):
        (WebCore::V8CustomIDBCallback::V8CustomIDBCallback):
        * bindings/v8/custom/V8IndexedDatabaseRequestCustom.cpp:
        (WebCore::V8IndexedDatabaseRequest::openCallback):
        * storage/IDBDatabaseRequest.h: Added.
        (WebCore::IDBDatabaseRequest::request):
        * storage/IDBDatabaseRequest.idl: Added.
        * storage/IndexedDatabaseRequest.idl:

2010-03-10  Holger Hans Peter Freyther  <zecke@selfish.org>

        Reviewed by Simon Hausmann.

        [Qt] Non animated gifs are animated in QtWebKit
        https://bugs.webkit.org/show_bug.cgi?id=35955

        Properly map Qt animated and non-animated values to WebCore's
        understanding of animated and non-animated images. Currently
        we can not map anything to the cAnimationLoopNone value.

        * manual-tests/qt/qt-anim.gif: Added.
        * manual-tests/qt/qt-gif-test.html: Added.
        * manual-tests/qt/qt-noanim.gif: Added.
        * platform/graphics/qt/ImageDecoderQt.cpp:
        (WebCore::ImageDecoderQt::repetitionCount):

2010-03-07  Holger Hans Peter Freyther  <zecke@selfish.org>

        Reviewed by Darin Adler.

        [CAIRO] DoS on iexploder test with high text stroke width.
        https://bugs.webkit.org/show_bug.cgi?id=33759

        Specifying a big text stroke width can make WebKitGTK+ spend
        a very long time in the cairo library for stroking the path of
        the text. The best way to prevent this from happening right now
        is to not stroke paths with a certain width. Samuel proposed to
        not stroke with a width that is twice the width of the text. The
        reason to use twice the text width is that even one stroke of
        any charachter to be drawn would cover the full width.

        Test: fast/text/text-stroke-width-cairo-dos.html

        * platform/graphics/cairo/FontCairo.cpp:
        (WebCore::Font::drawGlyphs):

2010-03-10  Andrey Kosyakov  <caseq@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: display list of active workers & support debugging
        with fake workers.
        https://bugs.webkit.org/show_bug.cgi?id=35568

        * English.lproj/localizedStrings.js:
        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * bindings/js/JSInjectedScriptHostCustom.cpp:
        (WebCore::InjectedScriptHost::createInjectedScript):
        (WebCore::InjectedScriptHost::injectedScriptFor):
        * bindings/v8/custom/V8InjectedScriptHostCustom.cpp:
        (WebCore::InjectedScriptHost::createInjectedScript):
        (WebCore::InjectedScriptHost::injectedScriptFor):
        * dom/Document.cpp:
        (WebCore::Document::inspectorController):
        * dom/Document.h:
        * dom/ScriptExecutionContext.h:
        (WebCore::ScriptExecutionContext::inspectorController):
        * inspector/InjectedScriptHost.cpp:
        (WebCore::InjectedScriptHost::InjectedScriptHost):
        (WebCore::InjectedScriptHost::injectScript):
        (WebCore::InjectedScriptHost::nextWorkerId):
        (WebCore::InjectedScriptHost::didCreateWorker):
        (WebCore::InjectedScriptHost::willDestroyWorker):
        * inspector/InjectedScriptHost.h:
        * inspector/InjectedScriptHost.idl:
        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::populateScriptObjects):
        (WebCore::InspectorController::resetScriptObjects):
        (WebCore::InspectorController::didCommitLoad):
        (WebCore::InspectorController::didCreateWorker):
        (WebCore::InspectorController::willDestroyWorker):
        * inspector/InspectorController.h:
        * inspector/InspectorFrontend.cpp:
        (WebCore::InspectorFrontend::didCreateWorker):
        (WebCore::InspectorFrontend::willDestroyWorker):
        * inspector/InspectorFrontend.h:
        * inspector/InspectorWorkerResource.h: Added.
        (WebCore::InspectorWorkerResource::create):
        (WebCore::InspectorWorkerResource::id):
        (WebCore::InspectorWorkerResource::url):
        (WebCore::InspectorWorkerResource::isSharedWorker):
        (WebCore::InspectorWorkerResource::InspectorWorkerResource):
        * inspector/front-end/Checkbox.js: Added.
        (WebInspector.Checkbox.callbackWrapper):
        (WebInspector.Checkbox):
        (WebInspector.Checkbox.prototype.checked):
        * inspector/front-end/InjectedFakeWorker.js:
        (InjectedFakeWorker.FakeWorker):
        (InjectedFakeWorker.FakeWorker.prototype.terminate):
        (InjectedFakeWorker.FakeWorker.prototype._handleException):
        (InjectedFakeWorker.FakeWorker.prototype._importScripts):
        (InjectedFakeWorker.FakeWorker.prototype._loadScript):
        (InjectedFakeWorker.FakeWorker.prototype._expandURLAndCheckOrigin):
        * inspector/front-end/ScriptsPanel.js:
        (WebInspector.ScriptsPanel):
        (WebInspector.ScriptsPanel.prototype.debuggerWasEnabled):
        (WebInspector.ScriptsPanel.prototype.debuggerWasDisabled):
        (WebInspector.ScriptsPanel.prototype.reset):
        * inspector/front-end/StylesSidebarPane.js:
        (WebInspector.StylePropertiesSection.showInheritedToggleFunction):
        (WebInspector.StylePropertiesSection):
        * inspector/front-end/WebKit.qrc:
        * inspector/front-end/WorkersSidebarPane.js: Added.
        (WebInspector.WorkersSidebarPane):
        (WebInspector.WorkersSidebarPane.prototype.addWorker):
        (WebInspector.WorkersSidebarPane.prototype.removeWorker):
        (WebInspector.WorkersSidebarPane.prototype.setInstrumentation):
        (WebInspector.WorkersSidebarPane.prototype.reset):
        (WebInspector.WorkersSidebarPane.prototype._onTriggerInstrument):
        (WebInspector.Worker):
        (WebInspector.didCreateWorker):
        (WebInspector.willDestroyWorker):
        * inspector/front-end/inspector.css:
        * inspector/front-end/inspector.html:
        * workers/AbstractWorker.cpp:
        (WebCore::AbstractWorker::AbstractWorker):
        (WebCore::AbstractWorker::~AbstractWorker):
        (WebCore::AbstractWorker::onDestroyWorker):
        (WebCore::AbstractWorker::contextDestroyed):
        * workers/AbstractWorker.h:
        (WebCore::AbstractWorker::id):
        * workers/SharedWorker.cpp:
        (WebCore::SharedWorker::SharedWorker):
        * workers/Worker.cpp:
        (WebCore::Worker::Worker):

2010-03-10  Roland Steiner  <rolandsteiner@chromium.org>

        Unreviewed build fix. Fix variable name change that somehow didn't
        make it into the patch.

2010-03-10  Roland Steiner  <rolandsteiner@chromium.org>

        Reviewed by David Levin.

        Bug 28293 -  [Chromium] event.datatransfer.getdata("text/uri-list") is treated the same as getdata("URL")
        https://bugs.webkit.org/show_bug.cgi?id=28293
        
        Change ChromiumDataObject such that it treats types "URL" and "text/uri-list"
        correctly for event.dataTransfer.getData/setData. Currently both are treated
        as synonyms, but for "URL", getData is supposed to only return the first valid URL
        contained within the data for "text/uri-list" (see HTML5 spec).

        Tests: editing/pasteboard/dataTransfer-setData-getData.html

        * platform/chromium/ChromiumDataObject.cpp:
        (WebCore::ChromiumDataObject::clear):
        (WebCore::ChromiumDataObject::clearAllExceptFiles):
        (WebCore::ChromiumDataObject::hasData):
        (WebCore::ChromiumDataObject::ChromiumDataObject):
        * platform/chromium/ChromiumDataObject.h:
        (WebCore::ChromiumDataObject::clearURL):
        (WebCore::ChromiumDataObject::hasValidURL):
        (WebCore::ChromiumDataObject::getURL):
        (WebCore::ChromiumDataObject::setURL):
        * platform/chromium/ClipboardChromium.cpp:
        (WebCore::):
        (WebCore::clipboardTypeFromMIMEType):
        (WebCore::ClipboardChromium::clearData):
        (WebCore::ClipboardChromium::getData):
        (WebCore::ClipboardChromium::setData):
        (WebCore::ClipboardChromium::types):
        * platform/chromium/DragDataChromium.cpp:
        (WebCore::DragData::asURL):
        (WebCore::DragData::canSmartReplace):

2010-03-09  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Timothy Hatcher.

        Web Inspector: REGRESSION: Tall image resources are cropped over the bottom.

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

        * inspector/front-end/inspector.css:

2010-03-09  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Timothy Hatcher.

        Web Inspector: REGRESSION: Pressing up/down arrow key to change numeric
        value in CSS property takes focus away.

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

        * inspector/front-end/StylesSidebarPane.js:
        (WebInspector.StylePropertyTreeElement.prototype):
        (WebInspector.StylePropertyTreeElement.prototype.):

2010-03-09  Tony Chang  <tony@chromium.org>

        Reviewed by Adam Barth.

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

        Fix an editing bug where replacing a selection would result in the
        new text ending up inside nodes that were not visibly included in the
        selection.  Instead, move our destination position out of nodes that
        were not visibly included.

        Tests: editing/deleting/backspace-avoid-preceding-style.html
               editing/inserting/replace-at-visible-boundary.html

        * editing/ReplaceSelectionCommand.cpp:
        (WebCore::positionAvoidingPrecedingNodes):
        (WebCore::ReplaceSelectionCommand::doApply):

2010-03-09  Brady Eidson  <beidson@apple.com>

        Reviewed by Tim Hatcher.

        REGRESSION: WebInspector docking busted on Windows
        <rdar://problem/7728433> and https://bugs.webkit.org/show_bug.cgi?id=35953

        First off, a bit of settings-key related cleanup. If they're shared over multiple files, these 
        things should be properly declared Strings, not random loose char*'s.

        Along with that change, we move the "inspectorStartsAttachedSettingName" from WebKit down to the
        InspectorController in WebCore.

        Finally, when the controller is ready to show the WebInspector window, it can use this newly
        exposed settings key to call "setWindowVisible" directly instead of relying on "showWindow" to do
        it indirectly.

        * WebCore.base.exp:

        * inspector/InspectorBackend.cpp:
        (WebCore::InspectorBackend::saveFrontendSettings):
        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::frontendSettingsSettingName):
        (WebCore::InspectorController::inspectorStartsAttachedSettingName):
        (WebCore::InspectorController::scriptObjectReady): Using the new inspectorStartsAttachedSettingName
          key and some "can I attach this?" logic, call setWindowVisible directly to display the inspector
          window.
        (WebCore::InspectorController::populateScriptObjects):
        * inspector/InspectorController.h:

2010-03-09  Alexey Proskuryakov  <ap@apple.com>

        Reviewed by Mark Rowe.

        https://bugs.webkit.org/show_bug.cgi?id=35951
        <rdar://problem/7327060> Frequent crashes in Dashcode at JSC::Bindings::ObjcInstance::~ObjcInstance + 80

        * bridge/objc/objc_instance.mm: (createInstanceWrapperCache): Fix Tiger code path, too.

2010-03-09  Alexey Proskuryakov  <ap@apple.com>

        Reviewed by Oliver Hunt.

        https://bugs.webkit.org/show_bug.cgi?id=35951
        <rdar://problem/7327060> Frequent crashes in Dashcode at JSC::Bindings::ObjcInstance::~ObjcInstance + 80

        * bridge/objc/objc_instance.mm: (createInstanceWrapperCache): It's not correct to use object
        personality for keys, because the key can be a mutable object, so its hash can change over its
        lifetime.

2010-03-09  Ojan Vafai  <ojan@chromium.org>

        Reviewed by Darin Adler.

        Fix review comment accidentally overlooked in bug 35713
        https://bugs.webkit.org/show_bug.cgi?id=35947

        * editing/DeleteSelectionCommand.cpp:
        (WebCore::DeleteSelectionCommand::setStartingSelectionOnSmartDelete):
        * editing/DeleteSelectionCommand.h:

2010-03-03  Ojan Vafai  <ojan@chromium.org>

        Reviewed by Adam Barth.

        undo after smartdelete should select the deleted space
        https://bugs.webkit.org/show_bug.cgi?id=35713

        TextEdit behavior is to select the deleted space after a smartdelete.

        Tests: editing/undo/undo-smart-delete-reversed-selection.html
               editing/undo/undo-smart-delete-word.html

        * editing/DeleteSelectionCommand.cpp:
        (WebCore::DeleteSelectionCommand::setStartingSelectionOnSmartDelete):
        (WebCore::DeleteSelectionCommand::initializePositionData):
        * editing/DeleteSelectionCommand.h:
        * editing/VisibleSelection.cpp:
        (WebCore::VisibleSelection::setWithoutValidation):
        This assert looks bogus to me. undo-smart-delete-reversed-selection.html hits it
        but not as a result of the other changes in this patch. The granularity when
        deleting after making a wordgranularity selection is wordgranularity, not charactergranularity.

2010-03-09  Steve Falkenburg  <sfalken@apple.com>

        Rubber stamped by Adam Roben.

        Load debug version of graphics library in Windows Debug_All builds.

        * platform/graphics/win/WKCACFLayerRenderer.cpp:
        (WebCore::WKCACFLayerRenderer::acceleratedCompositingAvailable):

2010-03-09  Brady Eidson  <beidson@apple.com>

        Reviewed by Darin Adler.

        Plug-ins don't always respect the cookie accept policy.
        <rdar://problem/7338359> and https://bugs.webkit.org/show_bug.cgi?id=26391

        The problem is that the various plug-in implementations call into a ResourceLoader
        directly instead of filtering the request through FrameLoader. This bypassed the step
        of adding extra fields to the requests, such as the firstPartyForCookies URL.

        Since plug-in code is currently so strewn about and very platform specific, I
        think reworking it needs to be a task for domain experts. I don't know the implications
        of adding *all* the extra fields to plug-in requests, for example.

        There's no harm in this targeted fix for the hole in our cookie accept policy until
        plug-ins can more fundamentally change.

        Test: http/tests/plugins/third-party-cookie-accept-policy.html

        * loader/ResourceLoader.cpp:
        (WebCore::ResourceLoader::load): Don't load a resource without first giving the request 
          a firstPartyForCookies URL.

2010-03-09  Andy Estes  <aestes@apple.com>

        Reviewed by Adele Peterson.

        Check for null renderer in scrollNode().
        https://bugs.webkit.org/show_bug.cgi?id=34700

        Test: fast/events/remove-child-onscroll.html

        * page/EventHandler.cpp:
        (WebCore::scrollNode): Return early if node->renderer() == 0

2010-03-09  Gustavo Noronha Silva  <gustavo.noronha@collabora.co.uk>

        Unreviewed distcheck fix.

        * GNUmakefile.am:

2010-03-09  Gustavo Noronha Silva  <gustavo.noronha@collabora.co.uk>

        Unreviewed build fix (only exposed by make distcheck). The
        SharedWorkers files are not built, they need to be distributed.

        * GNUmakefile.am:

2010-03-08  Gustavo Noronha Silva  <gustavo.noronha@collabora.co.uk>

        Reviewed by Dirk Schulze.

        [GStreamer] Buffering logic is not correct, and does not work very well
        https://bugs.webkit.org/show_bug.cgi?id=35706

        Fix buffering to match GStreamer expectancies regarding the
        pipeline state, so that videos which really need buffering to play
        correctly also work, while maintaining the convenience of
        on-disk-buffering. This required a bit of shuffling of state
        change handling.

        No behaviour change expected.

        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:
        (WebCore::MediaPlayerPrivate::MediaPlayerPrivate):
        (WebCore::MediaPlayerPrivate::processBufferingStats):
        (WebCore::MediaPlayerPrivate::fillTimerFired):
        (WebCore::MediaPlayerPrivate::updateStates):
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.h:

2010-03-09  Gustavo Noronha Silva  <gustavo.noronha@collabora.co.uk>

        Reviewed by Dirk Schulze.

        [GStreamer] Buffering logic is not correct, and does not work very well
        https://bugs.webkit.org/show_bug.cgi?id=35706

        Do not call pause(), but set the GStreamer state directly. This is
        just a GStreamer implementation detail, and this will avoid having
        side effects in case we change the pause implementation in the
        future.

        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:
        (WebCore::MediaPlayerPrivate::load):

2010-03-09  Chris Fleizach  <cfleizach@apple.com>

        Reviewed by Darin Adler.

        AX: hit testing a list box doesn't work anymore
        https://bugs.webkit.org/show_bug.cgi?id=35893

        Since <option> elements don't have renderers, their hit testing needs
        to be handled with a special case.

        Test: platform/mac/accessibility/listbox-hit-test.html

        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::ariaIsHidden):
        (WebCore::AccessibilityRenderObject::doAccessibilityHitTest):

2010-03-09  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Timothy Hatcher.

        Web Inspector: Refactor Audits panel presentation layer.
        This change removes unnecessary complexity:
          - Audit scores were not used
          - Audit rule parameters are passed as rule constructor arguments
          - View management aligned with the rest of the front-end
          - Single TreeOutline is used for category results (no need to create sections for those)
          - Rules code beautified and simplified where possible
          - Some UI improvements applied (see attached screenshot)

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

        * inspector/front-end/AuditCategories.js:
        (WebInspector.AuditCategories.PagePerformance.prototype.initialize):
        (WebInspector.AuditCategories.NetworkUtilization.prototype.initialize):
        * inspector/front-end/AuditResultView.js:
        (WebInspector.AuditResultView):
        (WebInspector.AuditCategoryResultPane):
        (WebInspector.AuditCategoryResultPane.prototype._appendResult):
        * inspector/front-end/AuditRules.js:
        (WebInspector.AuditRules.GzipRule.prototype.doRun):
        (WebInspector.AuditRules.CombineExternalResourcesRule):
        (WebInspector.AuditRules.CombineExternalResourcesRule.prototype.doRun):
        (WebInspector.AuditRules.CombineJsResourcesRule):
        (WebInspector.AuditRules.CombineCssResourcesRule):
        (WebInspector.AuditRules.MinimizeDnsLookupsRule):
        (WebInspector.AuditRules.MinimizeDnsLookupsRule.prototype.doRun):
        (WebInspector.AuditRules.ParallelizeDownloadRule):
        (WebInspector.AuditRules.ParallelizeDownloadRule.prototype.doRun):
        (WebInspector.AuditRules.UnusedCssRule):
        (WebInspector.AuditRules.UnusedCssRule.prototype.doRun.evalCallback):
        (WebInspector.AuditRules.UnusedCssRule.prototype.doRun.routine):
        (WebInspector.AuditRules.UnusedCssRule.prototype.doRun):
        (WebInspector.AuditRules.CacheControlRule):
        (WebInspector.AuditRules.CacheControlRule.prototype.doRun):
        (WebInspector.AuditRules.CacheControlRule.prototype.execCheck):
        (WebInspector.AuditRules.BrowserCacheControlRule):
        (WebInspector.AuditRules.BrowserCacheControlRule.prototype.handleNonCacheableResources):
        (WebInspector.AuditRules.BrowserCacheControlRule.prototype.runChecks):
        (WebInspector.AuditRules.ProxyCacheControlRule):
        (WebInspector.AuditRules.ProxyCacheControlRule.prototype.runChecks):
        (WebInspector.AuditRules.ImageDimensionsRule):
        (WebInspector.AuditRules.ImageDimensionsRule.prototype.doRun):
        (WebInspector.AuditRules.CssInHeadRule):
        (WebInspector.AuditRules.CssInHeadRule.prototype.doRun):
        (WebInspector.AuditRules.CssInHeadRule.prototype.doRun.routine):
        (WebInspector.AuditRules.StylesScriptsOrderRule):
        (WebInspector.AuditRules.StylesScriptsOrderRule.prototype.doRun):
        (WebInspector.AuditRules.StylesScriptsOrderRule.prototype.doRun.routine):
        (WebInspector.AuditRules.CookieRuleBase):
        (WebInspector.AuditRules.CookieRuleBase.prototype.doRun.resultCallback):
        (WebInspector.AuditRules.CookieRuleBase.prototype.doRun):
        (WebInspector.AuditRules.CookieSizeRule):
        (WebInspector.AuditRules.CookieSizeRule.prototype.processCookies):
        (WebInspector.AuditRules.StaticCookielessRule):
        (WebInspector.AuditRules.StaticCookielessRule.prototype.processCookies):
        * inspector/front-end/AuditsPanel.js:
        (WebInspector.AuditsPanel):
        (WebInspector.AuditsPanel.prototype._executeAudit.ruleResultReadyCallback):
        (WebInspector.AuditsPanel.prototype._executeAudit):
        (WebInspector.AuditsPanel.prototype._reloadResources):
        (WebInspector.AuditsPanel.prototype._didMainResourceLoad):
        (WebInspector.AuditsPanel.prototype.showResults):
        (WebInspector.AuditsPanel.prototype.showLauncherView):
        (WebInspector.AuditsPanel.prototype.get visibleView):
        (WebInspector.AuditsPanel.prototype.set visibleView):
        (WebInspector.AuditsPanel.prototype.show):
        (WebInspector.AuditsPanel.prototype._clearButtonClicked):
        (WebInspector.AuditCategory.prototype.addRule):
        (WebInspector.AuditRule):
        (WebInspector.AuditRule.prototype.set severity):
        (WebInspector.AuditRule.prototype.run):
        (WebInspector.AuditRule.prototype.doRun):
        (WebInspector.AuditCategoryResult):
        (WebInspector.AuditCategoryResult.prototype.addRuleResult):
        (WebInspector.AuditRuleResult):
        (WebInspector.AuditRuleResult.prototype.addChild):
        (WebInspector.AuditRuleResult.prototype.addURL):
        (WebInspector.AuditRuleResult.prototype.addURLs):
        (WebInspector.AuditRuleResult.prototype.addSnippet):
        * inspector/front-end/Settings.js:
        * inspector/front-end/audits.css:
        * inspector/front-end/inspector.js:
        (WebInspector._createPanels):
        (WebInspector.documentKeyDown):

2010-03-09  Yury Semikhatsky  <yurys@chromium.org>

        Reviewed by Pavel Feldman.
 
        When enable resource tracking state changes use the same method as
        location.reload for reloading inspected page.

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

        * inspector/InspectorBackend.cpp:
        (WebCore::InspectorBackend::reloadPage):
        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::enableResourceTracking):

2010-03-09  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Timothy Hatcher.

        Web Inspector: highlight text node containers while searching for node.

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

        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::mouseDidMoveOverElement):

2010-03-09  Philippe Normand  <pnormand@igalia.com>

        Reviewed by Gustavo Noronha Silva.

        [GStreamer] player code cleanups
        https://bugs.webkit.org/show_bug.cgi?id=35868

        Cleaned up the private instance variables of the player.

        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:
        (WebCore::MediaPlayerPrivate::MediaPlayerPrivate):
        (WebCore::MediaPlayerPrivate::fillTimerFired):
        (WebCore::MediaPlayerPrivate::mediaLocationChanged):
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.h:

2010-03-09  Philippe Normand  <pnormand@igalia.com>

        Reviewed by Gustavo Noronha Silva.

        [GStreamer] player code cleanups
        https://bugs.webkit.org/show_bug.cgi?id=35868

        Splitted GOwnPtrGtk.{cpp,h} to GOwnPtr{Soup,GStreamer}.{cpp,h}.

        * GNUmakefile.am:
        * platform/graphics/gstreamer/GOwnPtrGStreamer.cpp: Added.
        (WTF::GstElement):
        * platform/graphics/gstreamer/GOwnPtrGStreamer.h: Added.
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:
        * platform/gtk/GOwnPtrGtk.cpp: Removed.
        * platform/gtk/GOwnPtrGtk.h: Removed.
        * platform/network/soup/CookieJarSoup.cpp:
        * platform/network/soup/DNSSoup.cpp:
        * platform/network/soup/GOwnPtrSoup.cpp: Added.
        (WTF::SoupURI):
        * platform/network/soup/GOwnPtrSoup.h: Added.
        * platform/network/soup/ResourceHandleSoup.cpp:
        * platform/network/soup/ResourceRequestSoup.cpp:

2010-03-09  Shinichiro Hamaji  <hamaji@chromium.org>

        Reviewed by Eric Seidel.

        [Chromium] Should remove paddings of Win/Linux chromium's buttons
        https://bugs.webkit.org/show_bug.cgi?id=35629

        No new tests, but we may need to rebaseline bunch of expectation
        images in chromium's tree.

        * rendering/RenderThemeChromiumSkia.cpp:
        * rendering/RenderThemeChromiumSkia.h:

2010-03-08  Kent Tamura  <tkent@chromium.org>

        Reviewed by Adam Barth.

        Implement HTML5 <hgroup> element.
        https://bugs.webkit.org/show_bug.cgi?id=33369

        <hgroup> should behave the same as <nav>, <section>, <article>, and <aside>.
        <hgroup> has no specific parsing rules.

        Test: fast/html/hgroup-element.html

        * css/html.css: Add hgroup as a block element.
        * editing/htmlediting.cpp:
        (WebCore::validBlockTag): Add hgroupTag.
        * html/HTMLElement.cpp:
        (WebCore::createTagPriorityMap): Returns 5 for hgroupTag.
        (WebCore::blockTagList): Add hgroupTag.
        * html/HTMLParser.cpp:
        (WebCore::HTMLParser::getNode): Add hgroupTag.
        * html/HTMLTagNames.in: Add hgroup.

2010-03-08  Tony Chang  <tony@chromium.org>

        Reviewed by Adam Barth.

        https://bugs.webkit.org/show_bug.cgi?id=32131
        Crash when inserting an ordered list.

        Test: editing/execCommand/insert-ordered-list.html

        * editing/CompositeEditCommand.cpp:
        (WebCore::CompositeEditCommand::moveParagraphs):
        * editing/TextIterator.cpp:
        (WebCore::TextIterator::rangeFromLocationAndLength):

2010-03-08  Darin Adler  <darin@apple.com>

        Reviewed by Dan Bernstein.

        Added a test for crash when you quit inside an unload handler.
        rdar://problem/6958347

        * manual-tests/quit-inside-unload.html: Added.

2010-03-08  Darin Adler  <darin@apple.com>

        Reviewed by Jon Honeycutt.

        Don't auto-play <audio> and <video> elements loaded in background tabs
        https://bugs.webkit.org/show_bug.cgi?id=35886
        rdar://problem/7117745

        * manual-tests/video-in-non-frontmost-tab.html: Added.
        * manual-tests/resources/video-tab.html: Added.

        * html/HTMLMediaElement.h: Added MediaCanStartListener as a base class, and
        added the mediaCanStart function as well as a boolean,
        m_isWaitingUntilMediaCanStart.

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::HTMLMediaElement): Initialize
        m_isWaitingUntilMediaCanStart.
        (WebCore::HTMLMediaElement::~HTMLMediaElement): Call
        removeMediaCanStartListener if m_isWaitingUntilMediaCanStart is true. 
        (WebCore::HTMLMediaElement::loadInternal): Set m_isWaitingUntilMediaCanStart
        and call addMediaCanStartListener if canStartMedia is false.
        (WebCore::HTMLMediaElement::mediaCanStart): Clear m_isWaitingUntilMediaCanStart
        and call loadInternal.

2010-03-08  Csaba Osztrogonác  <ossy@webkit.org>

        [GTK] Unreviewed buildfix after r55688.

        * platform/graphics/gstreamer/WebKitWebSourceGStreamer.cpp:
        (webKitWebSrcStart):

2010-03-08  Csaba Osztrogonác  <ossy@webkit.org>

        [GTK] Unreviewed buildfix after r55688.

        * platform/network/soup/ResourceHandleSoup.cpp:
        (WebCore::):

2010-03-08  Csaba Osztrogonác  <ossy@webkit.org>

        [Qt] Unreviewed buildfix after r55688.

        * platform/network/qt/ResourceHandleQt.cpp:
        (WebCore::ResourceHandle::loadResourceSynchronously):

2010-03-08  Alexey Proskuryakov  <ap@apple.com>

        Reviewed by Darin Adler.

        https://bugs.webkit.org/show_bug.cgi?id=35879
        Eliminate m_mightDownloadFromHandle

        It was only used on Mac, and unnecessarily complicated the code.

        No change in behavior, thus no test.

        * loader/MainResourceLoader.cpp:
        (WebCore::MainResourceLoader::loadNow):
        * loader/ResourceLoader.cpp:
        (WebCore::ResourceLoader::load):
        * loader/appcache/ApplicationCacheGroup.cpp:
        (WebCore::ApplicationCacheGroup::createResourceHandle):
        * platform/network/ResourceHandle.cpp:
        (WebCore::ResourceHandle::ResourceHandle):
        (WebCore::ResourceHandle::create):
        * platform/network/ResourceHandle.h:
        * platform/network/ResourceHandleInternal.h:
        (WebCore::ResourceHandleInternal::ResourceHandleInternal):
        * platform/network/mac/ResourceHandleMac.mm:
        (WebCore::ResourceHandle::start):

2010-03-02  Peter Kasting  <pkasting@google.com>

        Reviewed by Adam Barth.

        Clean up usage of m_failed in open-source image decoders, part 1.
        https://bugs.webkit.org/show_bug.cgi?id=35411
        
        Makes setFailed() virtual so subclasses can override it (none do yet) to
        do automatic cleanup on failure; makes it return a bool for easy
        tailcalling; makes failed() the only way to access m_failed so
        subclasses are assured setFailed() won't be bypassed.  Plus one or two
        other tiny cleanup bits.

        Overriding setFailed() is coming in a subsequent patch because it can be
        hairy and needs close review.

        No functional change, so no tests.

        * platform/graphics/qt/ImageDecoderQt.cpp:
        (WebCore::ImageDecoderQt::setData):
        (WebCore::ImageDecoderQt::frameBufferAtIndex):
        (WebCore::ImageDecoderQt::internalDecodeSize):
        (WebCore::ImageDecoderQt::internalReadImage):
        (WebCore::ImageDecoderQt::internalHandleCurrentImage):
        (WebCore::ImageDecoderQt::forceLoadEverything):
        (WebCore::ImageDecoderQt::clearPointers):
        * platform/graphics/qt/ImageDecoderQt.h:
        * platform/image-decoders/ImageDecoder.h:
        (WebCore::ImageDecoder::ImageDecoder):
        (WebCore::ImageDecoder::setData):
        (WebCore::ImageDecoder::setSize):
        (WebCore::ImageDecoder::setFailed):
        (WebCore::ImageDecoder::failed):
        * platform/image-decoders/bmp/BMPImageDecoder.cpp:
        (WebCore::BMPImageDecoder::isSizeAvailable):
        (WebCore::BMPImageDecoder::frameBufferAtIndex):
        (WebCore::BMPImageDecoder::processFileHeader):
        * platform/image-decoders/gif/GIFImageDecoder.cpp:
        (WebCore::GIFImageDecoder::setData):
        (WebCore::GIFImageDecoder::isSizeAvailable):
        (WebCore::GIFImageDecoder::frameBufferAtIndex):
        (WebCore::GIFImageDecoder::decode):
        (WebCore::GIFImageDecoder::initFrameBuffer):
        * platform/image-decoders/ico/ICOImageDecoder.cpp:
        (WebCore::ICOImageDecoder::decodeAtIndex):
        (WebCore::ICOImageDecoder::processDirectory):
        (WebCore::ICOImageDecoder::processDirectoryEntries):
        * platform/image-decoders/jpeg/JPEGImageDecoder.cpp:
        (WebCore::JPEGImageReader::decode):
        (WebCore::JPEGImageDecoder::setData):
        (WebCore::JPEGImageDecoder::isSizeAvailable):
        (WebCore::JPEGImageDecoder::frameBufferAtIndex):
        (WebCore::JPEGImageDecoder::outputScanlines):
        (WebCore::JPEGImageDecoder::decode):
        * platform/image-decoders/png/PNGImageDecoder.cpp:
        (WebCore::decodingFailed):
        (WebCore::PNGImageReader::decode):
        (WebCore::PNGImageDecoder::setData):
        (WebCore::PNGImageDecoder::isSizeAvailable):
        (WebCore::PNGImageDecoder::frameBufferAtIndex):
        (WebCore::PNGImageDecoder::headerAvailable):
        (WebCore::PNGImageDecoder::rowAvailable):
        (WebCore::PNGImageDecoder::decode):
        * platform/image-decoders/png/PNGImageDecoder.h:

2010-03-08  Chris Marrin  <cmarrin@apple.com>

        Reviewed by Darin Adler.

        Disallow WebGL when HW comp is not turned on at runtime
        https://bugs.webkit.org/show_bug.cgi?id=35759

        When HW comp is turned off with the runtime flag, WebGL would still
        create a context, but silently fail to render. This prevents that.
        Now if HW comp is turned off getContext('webgl') will return null.

        * html/HTMLCanvasElement.cpp:
        (WebCore::HTMLCanvasElement::getContext):

2010-03-08  Darin Adler  <darin@apple.com>

        Reviewed by Jon Honeycutt.

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

        Fix minor style issues in HTMLMediaElement and classes derived from it.
        Made many public members private and protected.

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::screenRect): Got rid of a stray "const" and
        retstructured the function to use early return and get rid of a local.

        * html/HTMLMediaElement.h: Made lots of members private and some
        protected. Also use private inheritance instead of public. Removed
        some unneeded includes.

        * html/HTMLVideoElement.cpp:
        (WebCore::HTMLVideoElement::parseMappedAttribute): Use player() instead
        of m_player; HTMLMediaElement data members are now private, not protected.
        (WebCore::HTMLVideoElement::supportsFullscreen): Ditto.
        (WebCore::HTMLVideoElement::videoWidth): Ditto.
        (WebCore::HTMLVideoElement::videoHeight): Ditto.
        (WebCore::HTMLVideoElement::hasAvailableVideoFrame): Ditto.
        (WebCore::HTMLVideoElement::webkitEnterFullScreen): Use isFullscreen()
        instead of m_isFullscreen; same reason.
        (WebCore::HTMLVideoElement::webkitExitFullScreen): Ditto.
        (WebCore::HTMLVideoElement::webkitDisplayingFullscreen): Ditto.

        * html/HTMLVideoElement.h: Removed an unneeded include. Made many
        public functions private. Got rid of unused paint function, which was
        replaced with paintCurrentFrameInContext a while back.

2010-03-08  Joanmarie Diggs  <joanmarie.diggs@gmail.com>

        Reviewed by Xan Lopez.

        https://bugs.webkit.org/show_bug.cgi?id=30895
        [Gtk] The accessible hierarchy of tables is significantly incorrect for Atk

        Gives platforms the ability to exclude parts of an AccessibilityTable
        from the accessible hierarchy.

        * accessibility/gtk/AccessibilityObjectAtk.cpp:
        (AccessibilityObject::accessibilityPlatformIncludesObject):
        * accessibility/AccessibilityRenderObject.cpp:
        (AccessibilityRenderObject::determineAccessibilityRole):
        * accessibility/AccessibilityTable.cpp:
        (AccessibilityTable::addChildren):
        * accessibility/AccessibilityTableColumn.h:
        (accessibilityIsIgnored):
        * accessibility/AccessibilityTableHeaderContainer.h:
        (accessibilityIsIgnored):
        * accessibility/AccessibilityTableRow.cpp:
        (accessibilityIsIgnored):

2010-03-08  Jian Li  <jianli@chromium.org>

        No review. Fix build break on Tiger intel release.

        * html/Blob.cpp:
        * html/Blob.h:

2010-03-02  Adam Treat  <atreat@rim.com>

        Reviewed by Dave Hyatt.

        Refactor the HostWindow methods for repaint, scroll, invalidate and blit
        of backingstore and window by eliminating the three bools that currently
        exist as params of the repaint method.
        https://bugs.webkit.org/show_bug.cgi?id=34214

        I've added extra methods to provide the hosts with more semantic
        information of what is being requested thus eliminating the need for
        these bools.

        No tests as this change should not introduce any behavior changes in any
        of the ports.

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

        * loader/EmptyClients.h:
        (WebCore::EmptyChromeClient::invalidateContents):
        (WebCore::EmptyChromeClient::invalidateWindow):
        (WebCore::EmptyChromeClient::invalidateContentsAndWindow):
        (WebCore::EmptyChromeClient::invalidateContentsForSlowScroll):
        * page/Chrome.cpp:
        (WebCore::Chrome::invalidateContents):
        (WebCore::Chrome::invalidateWindow):
        (WebCore::Chrome::invalidateContentsAndWindow):
        (WebCore::Chrome::invalidateContentsForSlowScroll):
        * page/Chrome.h:
        * page/ChromeClient.h:
        * page/FrameView.cpp:
        (WebCore::FrameView::invalidateRect):
        * platform/HostWindow.h:
        * platform/ScrollView.cpp:
        (WebCore::ScrollView::scrollContents):
        (WebCore::ScrollView::wheelEvent):

2010-03-08  Adam Barth  <abarth@webkit.org>

        Reviewed by Nate Chapin.

        [V8] Block popups from inline script
        https://bugs.webkit.org/show_bug.cgi?id=35474

        Apparently, we're supposed to look at the sourceURL to figure out
        whether we're running a script tag or a hyperlink.  This logic is
        copied from the JSC version.

        Test: http/tests/security/popup-blocked-from-window-open.html

        * bindings/v8/ScriptController.cpp:
        (WebCore::ScriptController::processingUserGesture):
        (WebCore::ScriptController::evaluate):

2010-03-08  Stuart Morgan  <stuartmorgan@chromium.org>

        Reviewed by Darin Adler.

        Move the details of secure text mode into WebCore/platform.
        Move the higher-level logic for secure text mode from Frame
        to SelectionController.

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

        No new tests: no functional changes.

        * WebCore.gypi:
        * WebCore.xcodeproj/project.pbxproj:
        * dom/Document.cpp:
        (WebCore::Document::setUseSecureKeyboardEntryWhenActive):
        * editing/SelectionController.cpp:
        (WebCore::SelectionController::focusedOrActiveStateChanged):
        (WebCore::SelectionController::updateSecureKeyboardEntryIfActive):
        (WebCore::SelectionController::setUseSecureKeyboardEntry):
        * editing/SelectionController.h:
        * page/Frame.cpp:
        (WebCore::Frame::setDocument):
        * page/Frame.h:
        * platform/SecureTextInput.cpp: Added.
        (WebCore::enableSecureTextInput):
        (WebCore::disableSecureTextInput):
        * platform/SecureTextInput.h: Added.
        (WebCore::enableSecureTextInput):
        (WebCore::disableSecureTextInput):

2010-03-08  Brady Eidson  <beidson@apple.com>

        Reviewed by Anders Carlsson.

        Relax the 3rd party cookie policy in cases where it won't add a new tracking vector.
        <rdar://problem/7163012> and https://bugs.webkit.org/show_bug.cgi?id=35824

        Test: http/tests/cookies/third-party-cookie-relaxing.html

        If the 3rd-party domain in question already has a cookie set, allow changes
        by setting the first party url of the request to be the url of the request itself:        
        * platform/network/cf/ResourceHandleCFNet.cpp:
        (WebCore::makeFinalRequest):

        Ditto:
        * platform/network/mac/ResourceHandleMac.mm:
        (WebCore::ResourceHandle::start):
        (WebCore::ResourceHandle::loadResourceSynchronously):

        I've filed <rdar://problem/7728508> to track changing the policy in our networking layer.

2010-03-08  Jian Li  <jianli@chromium.org>

        Reviewed by Dmitry Titov.

        Blob.slice support.
        https://bugs.webkit.org/show_bug.cgi?id=32993
        
        The following semantic is adopted per the discussions on public-webapps:
        1) File.slice() does a synchronous IO to capture the current size and
           modification time and cache them in the resulting Blob.
        2) Subsequent Blob operations, like Blob.slice and Blob.size simply
           use the cached values.
        3) When the underlying file data are accessed, like in XHR.send(), the
           UA will check the cached modification time against the current
           modification time to determine if the file has been changed or not.
           An error or exception will be thrown if needed.

        Also add ENABLE_BLOB_SLICE feature define.

        Test: http/tests/local/send-sliced-dragged-file.html

        * Configurations/FeatureDefines.xcconfig:
        * GNUmakefile.am:
        * WebCore.pri:
        * html/Blob.cpp:
        (WebCore::Blob::Blob):
        (WebCore::Blob::size):
        (WebCore::Blob::slice):
        * html/Blob.h:
        (WebCore::Blob::start):
        (WebCore::Blob::length):
        (WebCore::Blob::modificationTime):
        * html/Blob.idl:
        * platform/network/FormData.cpp:
        (WebCore::FormData::deepCopy):
        (WebCore::FormData::appendFile):
        (WebCore::FormData::appendFileRange):
        * platform/network/FormData.h:
        (WebCore::FormDataElement::FormDataElement):
        (WebCore::operator==):
        * platform/network/mac/FormDataStreamMac.mm:
        (WebCore::advanceCurrentStream):
        (WebCore::openNextStream):
        (WebCore::formCreate):
        (WebCore::formOpen):
        (WebCore::formRead):
        (WebCore::setHTTPBody):
        * xml/XMLHttpRequest.cpp:
        (WebCore::XMLHttpRequest::send):

2010-03-08  Daniel Bates  <dbates@rim.com>

        Reviewed by Simon Fraser.

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

        Fixes an issue where we repaint the caret rectangle even if the associated
        selection is not in a content editable element. This is extraneous since the
        caret is only visible when the selection is in a content editable element.
        Hence, we should only repaint the caret rectangle when the associated selection
        is in a content editable element.

        Note, we always paint the caret when caret browsing is enabled.

        Test: fast/repaint/no-caret-repaint-in-non-content-editable-element.html

        * editing/SelectionController.cpp:
        (WebCore::SelectionController::recomputeCaretRect): Modified to call method
        SelectionController::shouldRepaintCaret.
        (WebCore::SelectionController::shouldRepaintCaret): Added.
        (WebCore::SelectionController::invalidateCaretRect): Modified to call method
        SelectionController::shouldRepaintCaret.
        * editing/SelectionController.h:

2010-03-08  Eric Carlson  <eric.carlson@apple.com>

        Reviewed by Darin Adler.

        YouTube HTML5 video never starts playing on Windows
        https://bugs.webkit.org/show_bug.cgi?id=33954

        * platform/graphics/win/MediaPlayerPrivateQuickTimeWin.cpp:
        (WebCore::MediaPlayerPrivate::rfc2616DateStringFromTime): New, create an rfc 2616 formatted
        string for an absolute time value.
        (WebCore::addCookieParam): New, add a cookie param and value to a string builder.
        (WebCore::MediaPlayerPrivate::setUpCookiesForQuickTime): Copy cookies for the movie to
            be loaded from CFNetwork into WinINet so they are available when QuickTime tries to
            download the movie.
        (WebCore::MediaPlayerPrivate::load): Call setupCookiesForQuickTime.
        * platform/graphics/win/MediaPlayerPrivateQuickTimeWin.h:

2010-03-08  Eric Uhrhane  <ericu@chromium.org>

        Reviewed by David Levin.

        Remove the now-redundant Settings fields for the Database
        https://bugs.webkit.org/show_bug.cgi?id=35763

        No new tests; this code isn't called.

        * WebCore.base.exp:
        * page/Settings.cpp:
        (WebCore::Settings::Settings):
        * page/Settings.h:

2010-03-07  David Levin  <levin@chromium.org>

        Chromium Linux build fix.

        * platform/graphics/chromium/FontPlatformDataLinux.h: Add "class String" since a debug
        only method returns a String.

2010-03-07  Mark Rowe  <mrowe@apple.com>

        Chromium build fix.

        * platform/chromium/ClipboardChromium.cpp: Include Image.h since we're using WebCore::Image.

2010-03-07  Mark Rowe  <mrowe@apple.com>

        Gtk build fix.

        * platform/network/soup/ResourceHandleSoup.cpp: Include SharedBuffer.h since we're using WebCore::SharedBuffer.

2010-03-07  Mark Rowe  <mrowe@apple.com>

        Gtk build fix.

        * platform/graphics/gtk/ImageGtk.cpp: Include SharedBuffer.h since we're using WebCore::SharedBuffer.

2010-03-07  Mark Rowe  <mrowe@apple.com>

        Fix builds where USE_CG_SHADING is set.

        * platform/graphics/cg/GradientCG.cpp: Include wtf/RetainPtr.h since WTF::RetainPtr is used when USE_CG_SHADING is set.

2010-03-07  Mark Rowe  <mrowe@apple.com>

        Windows build fix.  Add some required includes.

        * platform/graphics/win/ImageCGWin.cpp:
        * platform/network/cf/ResourceHandleCFNet.cpp:
        * platform/win/ClipboardWin.cpp:

2010-03-07  Mark Rowe  <mrowe@apple.com>

        Gtk build fix.

        * platform/graphics/GraphicsContext.h: Include wtf/PassOwnPtr.h since some platforms use WTF::PassOwnPtr in this header.

2010-03-07  Mark Rowe  <mrowe@apple.com>

        Qt build fix.

        * platform/network/qt/ResourceHandleQt.cpp: Include SharedBuffer.h since we're using WebCore::SharedBuffer.

2010-03-07  Mark Rowe  <mrowe@apple.com>

        Gtk build fix.

        * platform/gtk/ClipboardGtk.cpp: Include Image.h since we're using WebCore::Image.

2010-03-07  Mark Rowe  <mrowe@apple.com>

        Rubber-stamped by Cameron Zwarich.

        Remove unnecessary includes from header files, adding them to the handful of implementation files that need them.

        * loader/CachedCSSStyleSheet.cpp:
        * loader/CachedFont.cpp:
        * loader/CachedImage.cpp:
        * loader/CachedResource.cpp:
        * loader/CachedResource.h:
        * loader/CachedScript.cpp:
        * loader/CachedXSLStyleSheet.cpp:
        * loader/icon/IconFetcher.cpp:
        * loader/loader.cpp:
        * page/Page.cpp:
        * platform/graphics/Image.cpp:
        * platform/graphics/Image.h:
        * platform/graphics/cg/GraphicsContextPlatformPrivateCG.h:
        * platform/graphics/cg/PDFDocumentImage.cpp:
        * platform/graphics/cg/PathCG.cpp:
        * platform/graphics/mac/ImageMac.mm:

2010-03-07  Mark Rowe  <mrowe@apple.com>

        Chromium build fix.

        * platform/chromium/ChromiumDataObject.h: Include SharedBuffer.h since the inline constructor of this
        class means that the pointed-to type of the RefPtr member must be available.

2010-03-07  Mark Rowe  <mrowe@apple.com>

        Qt build fix.

        * platform/network/qt/DnsPrefetchHelper.cpp: Include PlatformString.h since we're using WebCore::String.

2010-03-07  Kent Tamura  <tkent@chromium.org>

        Reviewed by Eric Seidel.

        Fix a bug that validity.valueMissing for a radio button with required
        in a form element always returns true.
        https://bugs.webkit.org/show_bug.cgi?id=35472

        Test: fast/forms/ValidityState-valueMissing-radio.html

        * html/HTMLInputElement.cpp:
        (WebCore::checkedRadioButtons): Move the location to be used by valueMissing().
        (WebCore::HTMLInputElement::valueMissing):
          Use checkedRadioButtons() instead of document()->checkedRadioButtons().

2010-03-07  Mark Rowe  <mrowe@apple.com>

        Rubber-stamped by Cameron Zwarich.

        Remove unnecessary includes from header files, adding them to the handful of implementation files that need them.

        * bindings/objc/DOM.mm:
        * loader/CachedImage.h:
        * loader/EmptyClients.h:
        * platform/graphics/GlyphPageTreeNode.cpp:
        * platform/text/CString.h:
        * platform/text/String.cpp:
        * platform/text/mac/TextCodecMac.cpp:
        * svg/graphics/SVGResourceFilter.h:
        * svg/graphics/filters/SVGFEImage.h:

2010-03-07  Mark Rowe  <mrowe@apple.com>

        Completely remove two files that were deleted in r55635 from the Xcode project.

        * WebCore.xcodeproj/project.pbxproj:

2010-03-07  Sam Weinig  <sam@webkit.org>

        Reviewed by Dan Bernstein.

        Remove inconsistent "Too few arguments" handling for window.atob() and window.btoa()
        https://bugs.webkit.org/show_bug.cgi?id=35848

        - Take the opportunity to fully autogenerate window.atob() and window.btoa().

        * bindings/js/JSDOMWindowCustom.cpp:
        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::btoa):
        (WebCore::DOMWindow::atob):
        * page/DOMWindow.idl:

2010-03-07  Dan Bernstein  <mitz@apple.com>

        Reviewed by Simon Fraser.

        <rdar://problem/7722008> Column breaking ignores floats
        https://bugs.webkit.org/show_bug.cgi?id=35837

        Test: fast/multicol/float-truncation.html

        Introduce an earlier column-break if otherwise a float that could fit
        inside a single column will be split between columns.

        It is still possible for floats to be needlessly broken if initially
        they fit in the column, but normal flow truncation then shortens the
        column.

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::visibleTopOfHighestFloatExtendingBelow): Added.
        Returns the visible top of the highest descendant float that visibly
        extends below the given y offset, ignoring floats that are taller than
        the given maximum height.
        (WebCore::RenderBlock::layoutColumns): If the initial column height
        would cause a float to be split, truncate above the float.
        * rendering/RenderBlock.h:

2010-03-07  Dmitry Titov  <dimich@chromium.org>

        Not reviewed. Revert of r55593 which caused a regression of worker-cloneports.html.

        REGRESSION(55593?): fast/workers/worker-cloneport.html is timing out on Leopard
        https://bugs.webkit.org/show_bug.cgi?id=35819

        * Android.jscbindings.mk:
        * Android.v8bindings.mk:
        * GNUmakefile.am:
        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSDOMWindowCustom.cpp:
        * bindings/js/JSDatabaseCallback.cpp: Removed.
        * bindings/js/JSDatabaseCallback.h: Removed.
        * bindings/v8/custom/V8DOMWindowCustom.cpp:
        * bindings/v8/custom/V8DatabaseCallback.cpp: Removed.
        * bindings/v8/custom/V8DatabaseCallback.h: Removed.
        * dom/Document.cpp:
        (WebCore::Document::postTask):
        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::openDatabase):
        * page/DOMWindow.h:
        * page/DOMWindow.idl:
        * storage/Database.cpp:
        (WebCore::Database::openDatabase):
        (WebCore::Database::Database):
        (WebCore::Database::performOpenAndVerify):
        * storage/Database.h:
        * storage/DatabaseCallback.h: Removed.
        * workers/WorkerContext.cpp:
        (WebCore::WorkerContext::openDatabase):
        * workers/WorkerContext.h:

2010-03-06  Mark Rowe  <mrowe@apple.com>

        Rubber-stamped by Sam Weinig.

        Remove unnecessary includes of wtf/Platform.h.  This is already pulled in by config.h.

        * accessibility/AccessibilityObject.h:
        * dom/XMLTokenizer.cpp:
        * dom/XMLTokenizerLibxml2.cpp:
        * dom/XMLTokenizerQt.cpp:
        * editing/TextAffinity.h:
        * loader/FrameLoaderClient.h:
        * page/FocusController.cpp:
        * page/FrameTree.cpp:
        * page/Geolocation.h:
        * page/PositionCallback.h:
        * page/PositionErrorCallback.h:
        * platform/Cursor.h:
        * platform/FileSystem.h:
        * platform/FloatConversion.h:
        * platform/KeyboardCodes.h:
        * platform/PlatformKeyboardEvent.h:
        * platform/PlatformTouchPoint.h:
        * platform/SuddenTermination.h:
        * platform/Widget.h:
        * platform/graphics/Color.h:
        * platform/graphics/FloatPoint.h:
        * platform/graphics/FloatSize.h:
        * platform/graphics/GraphicsContext.h:
        * platform/graphics/IntPoint.h:
        * platform/graphics/IntRect.h:
        * platform/graphics/IntSize.h:
        * platform/graphics/openvg/PainterOpenVG.h:
        * platform/graphics/openvg/SurfaceOpenVG.h:
        * platform/network/ResourceHandleClient.h:
        * platform/text/Base64.cpp:
        * rendering/style/SVGRenderStyle.h:
        * xml/XSLTProcessor.cpp:
        * xml/XSLTProcessorLibxslt.cpp:
        * xml/XSLTProcessorQt.cpp:

2010-03-06  Sam Weinig  <sam@webkit.org>

        Reviewed by Dan Bernstein.

        Move debug only JS wrapper-set tracking code into its own file.
        https://bugs.webkit.org/show_bug.cgi?id=35839

        * GNUmakefile.am: Added new files.
        * WebCore.gypi: Ditto.
        * WebCore.pro: Ditto.
        * WebCore.vcproj/WebCore.vcproj: Ditto.
        * WebCore.xcodeproj/project.pbxproj: Ditto.

        * bindings/js/JSDOMBinding.cpp:
        (WebCore::cacheDOMObjectWrapper):
        (WebCore::forgetDOMObject):
        (WebCore::forgetDOMNode):
        (WebCore::cacheDOMNodeWrapper):
        (WebCore::takeWrappers):
        (WebCore::updateDOMNodeDocument):
        Updated for new signature for willCacheWrapper and didUncacheWrapper.

        * bindings/js/JSDOMWrapper.cpp: Added.
        (WebCore::DOMObject::~DOMObject):
        (WebCore::DOMObject::defineOwnProperty):
        Moved from JSDOMBinding.cpp.

        * bindings/js/JSDebugWrapperSet.cpp: Added.
        (WebCore::JSDebugWrapperSet::shared):
        (WebCore::JSDebugWrapperSet::JSDebugWrapperSet):
        * bindings/js/JSDebugWrapperSet.h: Added.
        (WebCore::JSDebugWrapperSet::add):
        (WebCore::JSDebugWrapperSet::remove):
        (WebCore::JSDebugWrapperSet::contains):
        (WebCore::JSDebugWrapperSet::willCacheWrapper):
        (WebCore::JSDebugWrapperSet::didUncacheWrapper):
        Moved from JSDOMBinding.cpp.

2010-03-06  Sam Weinig  <sam@webkit.org>

        Rubber-stamped by Dan Bernstein.

        Move DOMObjectHashTableMap, DOMWrapperWorld and WebCoreJSClientData into
        their own files.

        * GNUmakefile.am:
        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/DOMObjectHashTableMap.cpp: Copied from bindings/js/JSDOMBinding.cpp.
        * bindings/js/DOMObjectHashTableMap.h: Copied from bindings/js/JSDOMBinding.h.
        (WebCore::DOMObjectHashTableMap::~DOMObjectHashTableMap):
        (WebCore::DOMObjectHashTableMap::get):
        * bindings/js/DOMWrapperWorld.cpp: Copied from bindings/js/JSDOMBinding.cpp.
        (WebCore::forgetWorldOfDOMNodesForDocument):
        * bindings/js/DOMWrapperWorld.h: Copied from bindings/js/JSDOMBinding.h.
        (WebCore::DOMWrapperWorld::create):
        (WebCore::DOMWrapperWorld::rememberDocument):
        (WebCore::DOMWrapperWorld::forgetDocument):
        (WebCore::DOMWrapperWorld::isNormal):
        (WebCore::debuggerWorld):
        (WebCore::pluginWorld):
        (WebCore::currentWorld):
        (WebCore::Document::getWrapperCache):
        * bindings/js/JSDOMBinding.cpp:
        * bindings/js/JSDOMBinding.h:
        * bindings/js/JSDOMWindowBase.cpp:
        * bindings/js/ScriptController.cpp:
        * bindings/js/WebCoreJSClientData.h: Copied from bindings/js/JSDOMBinding.h.
        (WebCore::WebCoreJSClientData::WebCoreJSClientData):
        (WebCore::WebCoreJSClientData::~WebCoreJSClientData):
        (WebCore::WebCoreJSClientData::normalWorld):
        (WebCore::WebCoreJSClientData::getAllWorlds):
        (WebCore::WebCoreJSClientData::rememberWorld):
        (WebCore::WebCoreJSClientData::forgetWorld):
        * bindings/js/WorkerScriptController.cpp:

2010-03-06  Dan Bernstein  <mitz@apple.com>

        Rubber-stamped by Sam Weinig.

        Remove an unused method.

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::layoutBlock): Changed comment.
        (WebCore::RenderBlock::floatRect): Removed.
        * rendering/RenderBlock.h: Removed floatRect().

2010-03-06  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Timothy Hatcher.

        Web Inspector: make timeline overview bars transparent to mouse events.

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

        * inspector/front-end/inspector.css:

2010-03-06  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Jeremy Orlow.

        Web Inspector: switching to/from Timeline Panel moves scroller.
        (Also added couple of record details items as I was fixing it).

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

        * English.lproj/localizedStrings.js:
        * inspector/front-end/TimelinePanel.js:
        (WebInspector.TimelinePanel):
        (WebInspector.TimelinePanel.prototype.get defaultFocusedElement):
        (WebInspector.TimelinePanel.prototype.show):
        (WebInspector.TimelinePanel.prototype._refreshRecords):
        (WebInspector.TimelinePanel.FormattedRecord.prototype._generatePopupContent):

2010-03-06  Patrick Gansterer  <paroga@paroga.com>

        Reviewed by Eric Seidel.

        Removed unnecessary WinCE file.
        The same functionality is provided by platform/win/SystemTimeWin.cpp.
        https://bugs.webkit.org/show_bug.cgi?id=35799

        * platform/wince/SystemTimeWince.cpp: Removed.

2010-03-06  Joanmarie Diggs  <joanmarie.diggs@gmail.com>

        Reviewed by Eric Seidel.

        https://bugs.webkit.org/show_bug.cgi?id=30895
        [Gtk] The accessible hierarchy of tables is significantly incorrect for Atk

        This completes the fixing of the Atk table hierarchy which was started
        in bug #35418.

        * accessibility/gtk/AccessibilityObjectAtk.cpp:
        (AccessibilityObject::accessibilityPlatformIncludesObject):
        * accessibility/AccessibilityRenderObject.cpp:
        (AccessibilityRenderObject::determineAccessibilityRole):

2010-03-06  MORITA Hajime  <morrita@google.com>

        Reviewed by Darin Adler.

        Moved implementations of window.btoa() and window.atob() from
        JSDOMWindow to DOMWindow, and make V8DOMWindow use DOMWindow
        functions instead of having a separate implementation. As a side effect, the
        error message has changed from "Cannot decode base64" to one that
        indicates DOM Exception, which is compatible to Firefox.
        
        Refactoring: window.btoa() and window.atob() should be implemented on DOMWindow
        https://bugs.webkit.org/show_bug.cgi?id=35723

        No new test. No new functionality.

        * bindings/js/JSDOMWindowCustom.cpp:
        (WebCore::JSDOMWindow::atob):
        (WebCore::JSDOMWindow::btoa):
        Moved conversion code to DOMWindow and invoke it. Argument
        checking remains here.
        
        * bindings/v8/custom/V8DOMWindowCustom.cpp:
        (WebCore::V8DOMWindow::atobCallback):
        (WebCore::V8DOMWindow::btoaCallback):
        Remove conversion code and call DOMWindow APIs. Although argument
        checking remains here.
        
        * page/DOMWindow.cpp:
        (WebCore::hasMultibyteCharacters):
        (WebCore::DOMWindow::btoa):
        (WebCore::DOMWindow::atob):
        * page/DOMWindow.h:
        Moved Conversion code from JSDOMWindow, modifing to fit JSC independent.

2010-03-06  Yuta Kitamura  <yutak@chromium.org>

        Reviewed by Eric Seidel.

        Fix decoration position in search input field.

        This patch fixes rendering of input field of "search" type, whose decoration
        (loupe icon and close button) was wrongly positioned when the input field was
        contained in a block with -webkit-transform property.

        Chromium bug: http://crbug.com/20439

        [Chromium] Decoration of "search" input field is wrongly rendered
        https://bugs.webkit.org/show_bug.cgi?id=30245

        No new tests, since this patch fixes an existing test
        (fast/forms/search-transformed.html) in Chromium layout tests.

        * rendering/RenderThemeChromiumSkia.cpp:
        (WebCore::RenderThemeChromiumSkia::convertToPaintingRect): Added. This method
        does almost the same thing as RenderThemeMac::convertToPaintingRect.
        (WebCore::RenderThemeChromiumSkia::paintSearchFieldCancelButton): The position
        of the icon should not depend on its absolute position.
        (WebCore::RenderThemeChromiumSkia::paintSearchFieldResultsDecoration): Ditto.
        (WebCore::RenderThemeChromiumSkia::paintSearchFieldResultsButton): Ditto.
        * rendering/RenderThemeChromiumSkia.h: Added new method.

2010-03-06  Ilya Tikhonovsky  <loislo@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: in Timeline panel, click followed with mouse move resets popover.

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

        * inspector/front-end/Popover.js:
        (WebInspector.PopoverHelper.prototype._mouseDown):
        (WebInspector.PopoverHelper.prototype._mouseMove):
        (WebInspector.PopoverHelper.prototype._handleMouseAction):

2010-03-05  Tony Chang  <tony@chromium.org>

        Reviewed by Eric Seidel.

        https://bugs.webkit.org/show_bug.cgi?id=33247
        Backwards cursor movement incorrect when previous block ends with <br>.

        If the cursor is trying to move into a node that has a height of 0,
        skip over it.

        Test: editing/execCommand/move-selection-back-line.html

        * editing/visible_units.cpp:
        (WebCore::previousLinePosition):

2010-03-05  Andrey Kosyakov  <caseq@chromium.org>

        Reviewed by Eric Seidel.

        Enable resource loading callback while loading worker scripts
        https://bugs.webkit.org/show_bug.cgi?id=35744

        * workers/WorkerScriptLoader.cpp:
        (WebCore::WorkerScriptLoader::loadSynchronously):
        (WebCore::WorkerScriptLoader::loadAsynchronously):

2010-03-05  Chris Fleizach  <cfleizach@apple.com>

        Reviewed by Eric Seidel.

        WAI-ARIA live region doesn't appear when <div> only has a <div> child
        https://bugs.webkit.org/show_bug.cgi?id=35751

        Elements should not be ignored if they carry ARIA attributes in them.

        Test: platform/mac/accessibility/div-containing-div-with-aria.html

        * accessibility/AccessibilityObject.cpp:
        (WebCore::AccessibilityObject::supportsARIAAttributes):
        * accessibility/AccessibilityObject.h:
        (WebCore::AccessibilityObject::supportsARIADropping):
        (WebCore::AccessibilityObject::supportsARIADragging):
        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::supportsARIADropping):
        (WebCore::AccessibilityRenderObject::supportsARIADragging):
        (WebCore::AccessibilityRenderObject::accessibilityIsIgnored):
        * accessibility/AccessibilityRenderObject.h:

2010-03-05  Dmitry Titov  <dimich@chromium.org>

        Reviewed by Oliver Hunt.

        Add a manual test for crash in DOMWindow::clearTimeout when DOMWindow is not connected to Frame
        https://bugs.webkit.org/show_bug.cgi?id=32353

        * manual-tests/clearTimeout-crash-bug29832.html: Added.

2010-03-05  Dmitry Titov  <dimich@chromium.org>

        Reviewed by David Levin.

        [v8] Remove wrong assert in GC callback
        https://bugs.webkit.org/show_bug.cgi?id=35757

        Test: fast/workers/wrapper-map-gc.html

        * bindings/v8/DOMData.h:
        (WebCore::DOMData::handleWeakObject): remove ASSERT(isMainThread()), move another assert up to verify we are on the right thread.

2010-03-05  Alex Milowski  <alex@milowski.com>

        Reviewed by Kenneth Rohde Christiansen.

        Added support for row layout with stretchy operators and
        adjusted the over spacing for over and underover accordingly.

        Tests: mathml/presentation/mo.xhtml
               mathml/presentation/row.xhtml

        * WebCore.xcodeproj/project.pbxproj:
        * mathml/MathMLInlineContainerElement.cpp:
        * mathml/MathMLTextElement.cpp:
        * mathml/RenderMathMLMath.cpp: Added.
        * mathml/RenderMathMLMath.h: Added.
        * mathml/RenderMathMLOperator.cpp: Added.
        * mathml/RenderMathMLOperator.h: Added.
        * mathml/RenderMathMLRow.cpp: Added.
        * mathml/RenderMathMLRow.h: Added.
        * mathml/RenderMathMLUnderOver.cpp:
        * mathml/mathtags.in:

2010-03-05  Dean Jackson  <dino@apple.com>

        Reviewed by Simon Fraser.

        https://bugs.webkit.org/show_bug.cgi?id=35772
        Animation fill modes should be supported in the shorthand property

        Add CSSPropertyWebkitAnimationFillMode to the list of properties
        evaluated in the -webkit-animation shorthand.

        Test: animations/animation-shorthand.html

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

2010-03-05  Dean Jackson  <dino@apple.com>

        Reviewed by Simon Fraser

        https://bugs.webkit.org/show_bug.cgi?id=35815
        Animation Fill Modes fail on Windows

        * css/CSSComputedStyleDeclaration.cpp:
        * css/CSSStyleSelector.cpp:
        * platform/graphics/mac/GraphicsLayerCA.mm:
            - use new enum value
        * platform/animation/Animation.h:
            - change bitfield type
        * rendering/style/RenderStyleConstants.h:
            - add new enum for fill mode

2010-03-05  Csaba Osztrogonác  <ossy@webkit.org>

        Unreviewed buildfix after r55593. (To fix Qt --minimal build.)

        * bindings/js/JSDOMWindowCustom.cpp: Missing #if ENABLE(DATABASE) guard added.

2010-03-05  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Darin Adler.

        ASSERTION FAILED: rootLayer == m_clipRectsRoot at hulu.com
        https://bugs.webkit.org/show_bug.cgi?id=34065
        <rdar://problem/7573509>
        
        Fix one instance of this assertion (not necessarily the one seen on hulu.com).
        
        If the layer that clippingRoot() is being called on is itself compositing,
        then it acts as the clipping root. Without this, calls to RenderLayer::childrenClipRect()
        and RenderLayer::selfClipRect() via FrameView::windowClipRectForLayer(), for plug-ins,
        caused the caching of an incorrect clip rects root.

        Test: compositing/geometry/object-clip-rects-assertion.html

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

2010-03-05  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Dan Bernstein.

        Child clipping compositing layers don't show the blue debug color
        https://bugs.webkit.org/show_bug.cgi?id=35807

        Set a layer owner on the GraphicsLayers created for clipping children,
        so that they can get to the debug settings that give them the blue color.

        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::updateClippingLayers):

2010-03-05  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Dan Bernstein.

        MobileMe movie page is missing playback controls
        https://bugs.webkit.org/show_bug.cgi?id=35805
        <rdar://problem/7653169>
        
        On pages with video or plug-ins, we run overlap tests to determine which layers
        need to be composited. There was an ordering dependency bug in
        RenderLayerCompositor::computeCompositingRequirements() that caused us to fail
        to detect that a layer needed to be composited, resulting in page content
        not being visible.
        
        Specifically, layer->setHasCompositingDescendant() can change the answer
        to needsToBeComposited(), when a layer has to clip compositing descendants.
        So if we change setHasCompositingDescendant(), then we need to re-test
        clipsCompositingDescendants() and add the layer to the overlap map if so.

        Test: compositing/overflow/overflow-compositing-descendant.html

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

2010-03-04  Dumitru Daniliuc  <dumi@chromium.org>

        Reviewed by Adam Barth.

        Adding support for the optional creation callback that could be
        passed to openDatabase().

        Test: storage/open-database-creation-callback.html

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

        * Android.jscbindings.mk
        * Android.v8bindings.mk
        * GNUmakefile.am:
        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSDOMWindowCustom.cpp:
        (WebCore::JSDOMWindow::openDatabase):
        * bindings/js/JSDatabaseCallback.cpp: Added.
        (WebCore::JSDatabaseCallback::JSDatabaseCallback):
        (WebCore::JSDatabaseCallback::~JSDatabaseCallback):
        (WebCore::JSDatabaseCallback::handleEvent):
        * bindings/js/JSDatabaseCallback.h: Added.
        (WebCore::JSDatabaseCallback::create):
        * bindings/v8/custom/V8DOMWindowCustom.cpp:
        (WebCore::V8DOMWindow::openDatabaseCallback):
        * bindings/v8/custom/V8DatabaseCallback.cpp: Added.
        (WebCore::V8DatabaseCallback::V8DatabaseCallback):
        (WebCore::V8DatabaseCallback::~V8DatabaseCallback):
        (WebCore::V8DatabaseCallback::handleEvent):
        * bindings/v8/custom/V8DatabaseCallback.h: Added.
        (WebCore::V8DatabaseCallback::create):
        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::openDatabase):
        * page/DOMWindow.h:
        * page/DOMWindow.idl:
        * storage/Database.cpp:
        (WebCore::DatabaseCreationCallbackTask::create):
        (WebCore::DatabaseCreationCallbackTask::performTask):
        (WebCore::DatabaseCreationCallbackTask::DatabaseCreationCallbackTask):
        (WebCore::Database::openDatabase):
        (WebCore::Database::Database):
        (WebCore::Database::performOpenAndVerify):
        (WebCore::Database::performCreationCallback):
        * storage/Database.h:
        (WebCore::Database::isNew):
        * storage/DatabaseCallback.h: Added.
        (WebCore::DatabaseCallback::~DatabaseCallback):
        * workers/WorkerContext.cpp:
        (WebCore::WorkerContext::openDatabase):
        * workers/WorkerContext.h:

2010-03-05  Chris Marrin  <cmarrin@apple.com>

        Reviewed by Simon Fraser.

        Fixed infinite recursion of composited video on Windows
        https://bugs.webkit.org/show_bug.cgi?id=35798
        
        Due to a change in the way we get the platformLayer (WKCACFLayer)
        for video, the mediaplayer was in an infinite loop with WKCACFLayer
        bouncing notifySyncRequired calls back and forth. After discussion
        we decided it would be better to avoid notifySyncRequired entirely,
        which would walk up through WebCore calls and back down through
        WebKit calls to tell the WKCACFLayerRenderer to kick off a render cycle.
        
        I subclassed WKCACFLayer into a WKCACFRootLayer which has a pointer to
        the WKCACFLayerRenderer. When something changes, we get the rootLayer()
        by walking up the layers and make a virtual call which WKCACFRootLayer
        implements to tell WKCACFLayerRenderer to render.
        
        I also got rid of GraphicsLayer knowledge from WKCACFLayer. GraphicsLayerCACF
        now makes a WebLayer subclass which implements the drawInContext()
        virtual method.
        
        I also had to add protection to the platformLayer() call in 
        MediaPlayerPrivateQuickTimeWin because it gets called earlier than before
        when the layer is still null.

        * platform/graphics/win/GraphicsLayerCACF.cpp:Implement WebLayer
        (WebCore::WebLayer::create):
        (WebCore::WebLayer::drawInContext):
        (WebCore::WebLayer::WebLayer):
        (WebCore::GraphicsLayerCACF::GraphicsLayerCACF):
        (WebCore::GraphicsLayerCACF::setNeedsDisplayInRect):
        (WebCore::GraphicsLayerCACF::updateLayerPreserves3D):
        (WebCore::GraphicsLayerCACF::updateContentsImage):
        * platform/graphics/win/GraphicsLayerCACF.h:
        * platform/graphics/win/MediaPlayerPrivateQuickTimeWin.cpp:Protect platformLayer from a null qtLayer
        (WebCore::MediaPlayerPrivate::platformLayer):
        * platform/graphics/win/MediaPlayerPrivateQuickTimeWin.h:Got rid of no longer needed method
        (WebCore::MediaPlayerPrivate::notifyAnimationStarted):
        * platform/graphics/win/WKCACFLayer.cpp:Got rid of GraphicsLayer dependency. Made virtual.
        (WebCore::displayCallback):
        (WebCore::WKCACFLayer::create):
        (WebCore::WKCACFLayer::WKCACFLayer):
        (WebCore::WKCACFLayer::setNeedsCommit):
        (WebCore::WKCACFLayer::setNeedsDisplay):
        * platform/graphics/win/WKCACFLayer.h:
        (WebCore::WKCACFLayer::setNeedsRender):
        (WebCore::WKCACFLayer::drawInContext):
        * platform/graphics/win/WKCACFLayerRenderer.cpp:Create WKCACFRootLayer which tells WKCACFLayerRenderer to render
        (WebCore::WKCACFRootLayer::WKCACFRootLayer):
        (WebCore::WKCACFRootLayer::create):
        (WebCore::WKCACFRootLayer::setNeedsRender):
        (WebCore::WKCACFRootLayer::setNeedsDisplay):
        (WebCore::WKCACFLayerRenderer::rootLayer):
        (WebCore::WKCACFLayerRenderer::setRootChildLayer):
        (WebCore::WKCACFLayerRenderer::setNeedsDisplay):
        (WebCore::WKCACFLayerRenderer::createRenderer):
        * platform/graphics/win/WKCACFLayerRenderer.h:

2010-03-05  Dimitri Glazkov  <dglazkov@chromium.org>

        Reviewed by David Levin.

        [Chromium] Missing commas in WebCore.gypi file make building Geo unpossible.
        https://bugs.webkit.org/show_bug.cgi?id=35797

        No new tests, this is a latent compile break.

        * WebCore.gypi:

2010-03-04  Eric Carlson  <eric.carlson@apple.com>

        Reviewed by Adele Peterson.

        <rdar://problem/7718442> Implement 'preload=none'
        https://bugs.webkit.org/show_bug.cgi?id=35789

        Don't load any media data when preload is 'none'.

        Test: media/video-preload.html

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::loadResource): Don't call player's setPreload method
            when autoplay is set.

        * platform/graphics/MediaPlayer.cpp:
        (WebCore::MediaPlayer::setPreload): Set m_preload so we have the correct value when
            the media engine is created.

        * platform/graphics/mac/MediaPlayerPrivateQTKit.h:
        * platform/graphics/mac/MediaPlayerPrivateQTKit.mm:
        (WebCore::MediaPlayerPrivate::MediaPlayerPrivate): Initialize m_preload.
        (WebCore::MediaPlayerPrivate::resumeLoad): New, kick off postponed a load.
        (WebCore::MediaPlayerPrivate::load): Do nothing if preload is 'none'
        (WebCore::MediaPlayerPrivate::loadInternal): New, complete loading.
        (WebCore::MediaPlayerPrivate::prepareToPlay): New, resume a postponed load as someone
            has called play().
        (WebCore::MediaPlayerPrivate::setPreload): New, set m_preload.

2010-03-04  Nate Chapin  <japhet@chromium.org>

        Reviewed by Dimitri Glazkov.

        [V8] Give CodeGeneratorV8.pm a much-needed spring cleaning.

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

        * bindings/scripts/CodeGeneratorV8.pm: Remove unused code, fix style issues, make less hard-coded.
        * bindings/v8/custom/V8DOMWindowCustom.cpp:
        (WebCore::V8DOMWindow::addEventListenerCallback):
        (WebCore::V8DOMWindow::removeEventListenerCallback):

2010-03-05  Pavel Feldman  <pfeldman@chromium.org>

        Not reviewed. Roll back r55522 since it regreses performance
        according to chromium's page cycler.

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

2010-03-05  Dean Jackson  <dino@apple.com>

        Reviewed by Simon Fraser and Chris Marrin.

        Bug 26869: Add fill modes for CSS Animations
        https://bugs.webkit.org/show_bug.cgi?id=26869

        Tests: animations/fill-mode-removed.html
               animations/fill-mode-transform.html
               animations/fill-mode.html

        * css/CSSComputedStyleDeclaration.cpp:
        * css/CSSParser.cpp:
        * css/CSSParser.h:
        * css/CSSPropertyNames.in:
        * css/CSSStyleSelector.cpp:
        * css/CSSStyleSelector.h:
        * css/CSSValueKeywords.in:
            - parse, assign and retrieve the value of the new
              -webkit-animation-fill-mode property
        * page/animation/AnimationBase.cpp:
        * page/animation/AnimationBase.h:
            - new state in animation engine for a finished animation
              that is "filling" forwards in time. This allows the
              engine to keep the animation around and not revert to the
              old style.
            - update the timer code to indicate it doesn't need to
              keep animating if it is filling
            - now that animations can extend beyond their elapsed time,
              make sure progress works correctly with iteration counts
        * page/animation/KeyframeAnimation.cpp:
        (WebCore::KeyframeAnimation::animate):
            - ensure correct style value is returned at the right
              time by checking for fill mode
        (WebCore::KeyframeAnimation::onAnimationEnd):
            - continue to send the end event, but only remove the
              animation if it isn't filling forwards
        * platform/animation/Animation.cpp:
        * platform/animation/Animation.h:
            - new fill mode member property
        * platform/animation/AnimationList.cpp:
            - ensure the fill mode is propagated to a list of style valus
        * platform/graphics/mac/GraphicsLayerCA.mm:
            - make hardware layers use Core Animation's fill mode

2010-03-05  Ilya Tikhonovsky  <loislo@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: Do not show link helper in popovers and/or for external resources.

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

        * English.lproj/localizedStrings.js:
        * inspector/front-end/ResourcesPanel.js:
        (WebInspector.ResourcesPanel.prototype.canShowSourceLine):
        * inspector/front-end/ScriptsPanel.js:
        (WebInspector.ScriptsPanel.prototype._scriptOrResourceForURLAndLine):
        * inspector/front-end/TimelinePanel.js:
        (WebInspector.TimelinePanel.prototype.hide):
        * inspector/front-end/inspector.js:
        (WebInspector.documentMouseOver):
        (WebInspector.documentClick.followLink):
        (WebInspector.documentClick):
        (WebInspector.addMainEventListeners):

2010-03-05  Fumitoshi Ukai  <ukai@chromium.org>

        Reviewed by Alexey Proskuryakov.

        WebSocket onmessageerror event handler
        https://bugs.webkit.org/show_bug.cgi?id=35570

        Test: websocket/tests/error-detect.html

        * websockets/WebSocket.cpp:
        (WebCore::WebSocketChannel::didConnect): assert scriptExecutionContext.
        (WebCore::WebSocketChannel::didReceiveMessage): assert scriptExecutionContext.
        (WebCore::WebSocket::didReceiveMessageError):
        (WebCore::WebSocket::didClose): assert scriptExecutionContext.
        * websockets/WebSocket.h:
        * websockets/WebSocket.idl: Add onerror event listener
        * websockets/WebSocketChannel.cpp:
        (WebCore::WebSocketChannel::didReceiveData): call didReceiveMessageError if unknown frame tye is detected, or frame length overflowed.
        * websockets/WebSocketChannelClient.h:
        (WebCore::WebSocketChannelClient::didReceiveMessageError):

2010-03-04  Garret Kelly  <gdk@chromium.org>

        Reviewed by Darin Fisher.

        Changing private members from PlatformTouchEvent and PlatformTouchPoint
        to be protected, so that Chromium's PlatformTouchEventBuilder and
        PlatformTouchPointBuilder can access them. Exercised by the
        fast/events/touch tests.
        https://bugs.webkit.org/show_bug.cgi?id=35760

        * platform/PlatformTouchEvent.h:
        (WebCore::PlatformTouchEvent::~PlatformTouchEvent):
        * platform/PlatformTouchPoint.h:
        (WebCore::PlatformTouchPoint::~PlatformTouchPoint):

2010-03-04  Fumitoshi Ukai  <ukai@chromium.org>

        Reviewed by Alexey Proskuryakov.

        WebSocket crash bug when reloading the page while the WebSocket is busy
        https://bugs.webkit.org/show_bug.cgi?id=35732

        * websockets/WebSocketChannel.cpp:
        (WebCore::WebSocketChannel::disconnect): clear m_context from WebSocketChannel and WebSocketHandshake.
        (WebCore::WebSocketChannel::didOpen): check m_context
        (WebCore::WebSocketChannel::didClose): clear m_context
        (WebCore::WebSocketChannel::didReceiveData): check m_context, and check m_client early before appending to buffer
        * websockets/WebSocketHandshake.cpp:
        (WebCore::WebSocketHandshake::clearScriptExecutionContext): Added.
        * websockets/WebSocketHandshake.h:

2010-03-04  MORITA Hajime <morrita@google.com>

        Reviewed by Alexey Proskuryakov.

        Refactoring: XMLHTTPRequest.open() should have all overloaded implementations
        https://bugs.webkit.org/show_bug.cgi?id=35630

        Test: http/tests/xmlhttprequest/open-async-overload.html

        * bindings/js/JSXMLHttpRequestCustom.cpp:
        (WebCore::JSXMLHttpRequest::open):
        * bindings/v8/custom/V8XMLHttpRequestCustom.cpp:
        (WebCore::V8XMLHttpRequest::openCallback):
        * xml/XMLHttpRequest.cpp:
        (WebCore::XMLHttpRequest::open):
        * xml/XMLHttpRequest.h:

2010-03-04  James Robinson  <jamesr@google.com>

        Reviewed by Eric Seidel.

        Styles do not have to be synchronously rematched after every event dispatch

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

        * bindings/js/JSEventListener.cpp:
        (WebCore::JSEventListener::handleEvent):
        * bindings/v8/V8AbstractEventListener.cpp:
        (WebCore::V8AbstractEventListener::handleEvent):

2010-03-04  Luiz Agostini  <luiz.agostini@openbossa.org>

        Reviewed by Kenneth Rohde Christiansen.

        maemo spelled as mameo in WebCore.pro
        https://bugs.webkit.org/show_bug.cgi?id=35765

        Spelling corrected.

        * WebCore.pro:

2010-03-04  Tony Chang  <tony@chromium.org>

        Reviewed by Eric Seidel.

        https://bugs.webkit.org/show_bug.cgi?id=18819
        Pressing option+page{down,up} should move the cursor and scroll in
        content editable areas.  On other platforms, pressing page{down,up}
        should move the cursor and scroll in content editable areas.

        Test: editing/input/option-page-up-down.html

        * editing/EditorCommand.cpp:
        (WebCore::verticalScrollDistance):

2010-03-03  Oliver Hunt  <oliver@apple.com>

        Reviewed by Gavin Barraclough.

        Allow static property getters to interact with JSCs caching
        https://bugs.webkit.org/show_bug.cgi?id=35716

        Update the obviously safe getters to allow caching

        Test: fast/js/pic/cached-named-property-getter.html

        * bridge/runtime_array.cpp:
        (JSC::RuntimeArray::getOwnPropertySlot):
        * bridge/runtime_method.cpp:
        (JSC::RuntimeMethod::getOwnPropertySlot):

2010-03-04  Mark Rowe  <mrowe@apple.com>

        Reviewed by Sam Weinig.

        <rdar://problem/7717249> DOMSVG.h includes a non-existent DOMSVGFEMorphologyElement.h

        * WebCore.xcodeproj/project.pbxproj: Copy DOMSVGFEMorphologyElement.h and DOMSVGFEMorphologyElementInternal.h
        in to the framework wrapper.

2010-03-04  James Robinson  <jamesr@chromium.org>

        Reviewed by Dimitri Glazkov.

        Handles setting HTMLSelectElement.length with mutation handlers present
        https://bugs.webkit.org/show_bug.cgi?id=33983

        When setting an HTMLSelectElement's length attribute, option elements have to be added or removed to the select
        as appropriate.  This is a little tricky with mutation events since they might add, remove, or reorder elements
        while option elements are being added or deleted.

        Tests: fast/forms/select-set-length-optgroup.html
               fast/forms/select-set-length-with-mutation-remove.html
               fast/forms/select-set-length-with-mutation-reorder.html
               fast/forms/select-set-length-with-mutation-reparent.html
               fast/forms/select-set-length-with-mutation.html
               fast/forms/select-set-length.html

        * html/HTMLSelectElement.cpp:
        (WebCore::HTMLSelectElement::setLength):

2010-03-04  Csaba Osztrogonác  <ossy@webkit.org>

        [Qt] Unreviewed buildfix after r55542 on Windows.

        * WebCore.pro:
         - plugins/win/PluginDatabaseWin.cpp removed.
         - platform/win/WebCoreInstanceHandle.cpp added.

        * platform/win/WebCoreInstanceHandle.cpp: Remove explicit qualification in namespace declaration to make gcc happy.

2010-03-04  Nate Chapin  <japhet@chromium.org>

        Reviewed by Kenneth Rohde Christiansen.

        Fix the case where we do a same document navigation, scroll,
        then repeat the same document navigation.  Currently, the second
        navigation does nothing.

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

        Test: fast/loader/repeat-same-document-navigation.html

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::loadInSameDocument): Call scrollToFragment() whether or not the hash changed.

2010-03-04  Simon Fraser  <simon.fraser@apple.com>

        Build fix.
        
        const long long cMaxDistance = numeric_limits<long long>::max() created global
        initializers at the call sites, so replace with an inline function.

        * page/FocusController.cpp:
        (WebCore::updateFocusCandidateIfCloser):
        * page/SpatialNavigation.cpp:
        (WebCore::distanceInDirection):
        * page/SpatialNavigation.h:
        (WebCore::maxDistance):
        (WebCore::FocusCandidate::FocusCandidate):

2010-03-04  Antonio Gomes  <tonikitoo@webkit.org>

        Unreviewed attempt to fix Windows build.

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

2010-03-04  Simon Fraser  <simon.fraser@apple.com>

        Build fix.

        Delcare updateFocusCandidateIfCloser static to avoid warning.

        * page/FocusController.cpp:
        (WebCore::updateFocusCandidateIfCloser):

2010-03-04  Darin Fisher  <darin@chromium.org>

        Reviewed by Dmitry Titov.

        [chromium] make history.{push,replace}State enabled at runtime
        https://bugs.webkit.org/show_bug.cgi?id=35753

        * bindings/generic/RuntimeEnabledFeatures.cpp:
        * bindings/generic/RuntimeEnabledFeatures.h:
        (WebCore::RuntimeEnabledFeatures::setPushStateEnabled):
        (WebCore::RuntimeEnabledFeatures::pushStateEnabled):
        (WebCore::RuntimeEnabledFeatures::replaceStateEnabled):
        * page/History.idl:

2010-03-04  Antonio Gomes  <tonikitoo@webkit.org>

        Unreviewed attempt to (again) fix Mac build.

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

2010-03-04  Dan Bernstein  <mitz@apple.com>

        Based on a patch from Nick Jong.

        Reviewed by Simon Fraser.

        Improve selection in multi-column blocks when hitting points above or
        below a column rect.

        Test: fast/multicol/hit-test-above-or-below.html

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::adjustPointToColumnContents): If the point lies
        within the horizontal range for a column, constrain it to the column (if
        it is above) or the next column (if it is below).

2010-03-04  Antonio Gomes  <tonikitoo@webkit.org>

        Reviewed by Simon Fraser.

        Attempt to fix Mac build.

        * page/SpatialNavigation.cpp:

2010-03-04  Jesus Sanchez-Palencia  <jesus.palencia@openbossa.org>

        Add SpatialNavigation header and cpp to Mac XCode project file.

        Reviewed by Kenneth Christiansen.

        * WebCore.xcodeproj/project.pbxproj:

2010-03-02  Antonio Gomes  <tonikitoo@webkit.org>

        Reviewed by Simon Fraser, Eric Seidel and Darin Adler.
        Patch by Antonio Gomes <tonikitoo@webkit.org>
        Based on the initial work of Marco Barisione <marco.barisione@collabora.co.uk>

        Extend keyboard navigation to allow directional navigation
        https://bugs.webkit.org/show_bug.cgi?id=18662

        This patch implements the core logic of the 'Spatial Navigation' feature [1].
        It improves the accessibility support of WebCore by extending the basic keyboard
        navigation currently available (based on Tab forward and backward) with the
        addition of a two-dimensional directional navigation by using Left, Right, Up and
        Down arrow keys to move to the "nearest" element in the corresponding direction.

        Highlights:
        * Feature is turned off by default in Settings. Port specific APIs need to be added
          for toggling it on/off.
        * Only elements viewed in the current viewport can have focus move to it. If the
          "nearest" is not in viewport dimensions, then a scroll-in-direction action is
          performed.

        Known issues (to be covered in follow-up bugs):
        * Add port specific hooks to each DRT to enable/disable Spatial Navigation.
        * Support for spatial navigation through form elements (<input>, <select>, etc)
          is be added.
        * Make navigation keys customizable. It currently works with arrows keys only
          (up, down, right and left).
        * Make it support modifiers (Alt, Ctrl and Shift).
        * Improve support on scrollable content.

        [1] http://en.wikipedia.org/wiki/Spatial_navigation

        * Android.mk:
        * GNUmakefile.am:
        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * page/EventHandler.cpp:
        (WebCore::EventHandler::defaultKeyboardEventHandler):
        (WebCore::EventHandler::focusDirectionForKey):
        (WebCore::EventHandler::defaultArrowEventHandler):
        * page/EventHandler.h:
        * page/FocusController.cpp:
        (WebCore::FocusController::advanceFocus):
        (WebCore::FocusController::advanceFocusInDocumentOrder):
        (WebCore::FocusController::advanceFocusDirectionally):
        (WebCore::updateFocusCandidateIfCloser):
        (WebCore::FocusController::findFocusableNodeInDirection):
        (WebCore::FocusController::deepFindFocusableNodeInDirection):
        * page/FocusController.h:
        * page/FocusDirection.h:
        (WebCore::):
        * page/Settings.cpp:
        (WebCore::Settings::Settings):
        (WebCore::Settings::setSpatialNavigationEnabled):
        * page/Settings.h:
        (WebCore::Settings::isSpatialNavigationEnabled):
        * page/SpatialNavigation.cpp: Added.
        (WebCore::distanceInDirection):
        (WebCore::renderRectRelativeToRootDocument):
        (WebCore::alignmentForRects):
        (WebCore::isHorizontalMove):
        (WebCore::areRectsFullyAligned):
        (WebCore::areRectsPartiallyAligned):
        (WebCore::spatialDistance):
        (WebCore::isRectInDirection):
        (WebCore::hasOffscreenRect):
        (WebCore::scrollInDirection):
        (WebCore::isInRootDocument):
        (WebCore::deflateIfOverlapped):
        * page/SpatialNavigation.h: Added.
        (WebCore::):
        (WebCore::FocusCandidate::FocusCandidate):

2010-03-04  Beth Dakin  <bdakin@apple.com>

        Reviewed by Anders Carlsson.

        This fixes the layering violation I committed yesterday by moving 
        Page::instanceHandle into its own file just in the WebCore 
        namespace.

        Added WebCoreInstanceHandle.h + .cpp and removed PageWin.cpp
        * WebCore.vcproj/WebCore.vcproj:
        * page/win/PageWin.cpp: Removed.

        Remove all instance handle code from Page.
        * page/Page.h:

        New files.
        * platform/win/WebCoreInstanceHandle.cpp: Added.
        * platform/win/WebCoreInstanceHandle.h: Added.
        (WebCore::setInstanceHandle):
        (WebCore::instanceHandle):

        Switch to WebCore::instanceHandle() instead of 
        Page::instanceHandle() and include the new header.
        * platform/graphics/win/WKCACFLayerRenderer.cpp:
        (WebCore::WKCACFLayerRenderer::acceleratedCompositingAvailable):
        * platform/win/PasteboardWin.cpp:
        (WebCore::Pasteboard::Pasteboard):
        * platform/win/PopupMenuWin.cpp:
        (WebCore::PopupMenu::show):
        (WebCore::PopupMenu::registerClass):
        * platform/win/SharedTimerWin.cpp:
        (WebCore::initializeOffScreenTimerWindow):
        * plugins/win/PluginViewWin.cpp:
        (WebCore::registerPluginView):
        (WebCore::PluginView::platformStart):

2010-03-04  Antonio Gomes  <tonikitoo@webkit.org>

        Unreviewed build fix.
        Patch by Antonio Gomes <tonikitoo@webkit.org>

        'glib_file_name' renamed to 'gligFileName'.

        * platform/graphics/gtk/ImageGtk.cpp:
        (WebCore::Image::loadPlatformResource):

2010-03-04  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Timothy Hatcher.

        Web Inspector: Remove two last synchronous calls from front-end to InspectorBackend.

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

        * inspector/InspectorBackend.cpp:
        (WebCore::InspectorBackend::enableSearchingForNode):
        (WebCore::InspectorBackend::disableSearchingForNode):
        (WebCore::InspectorBackend::setPauseOnExceptionsState):
        * inspector/InspectorBackend.h:
        * inspector/InspectorBackend.idl:
        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::setWindowVisible):
        (WebCore::InspectorContorller::setSearchingForNode):
        (WebCore::InspectorController::populateScriptObjects):
        * inspector/InspectorController.h:
        * inspector/InspectorFrontend.cpp:
        (WebCore::InspectorFrontend::searchingForNodeWasEnabled):
        (WebCore::InspectorFrontend::searchingForNodeWasDisabled):
        (WebCore::InspectorFrontend::updatePauseOnExceptionsState):
        * inspector/InspectorFrontend.h:
        * inspector/front-end/ElementsPanel.js:
        (WebInspector.ElementsPanel):
        (WebInspector.ElementsPanel.prototype.get statusBarItems):
        (WebInspector.ElementsPanel.prototype.hide):
        (WebInspector.ElementsPanel.prototype.reset):
        (WebInspector.ElementsPanel.prototype.searchingForNodeWasEnabled):
        (WebInspector.ElementsPanel.prototype.searchingForNodeWasDisabled):
        (WebInspector.ElementsPanel.prototype._nodeSearchButtonClicked):
        * inspector/front-end/InspectorBackendStub.js:
        (.WebInspector.InspectorBackendStub.prototype.enableSearchingForNode):
        (.WebInspector.InspectorBackendStub.prototype.disableSearchingForNode):
        (.WebInspector.InspectorBackendStub.prototype.setPauseOnExceptionsState):
        * inspector/front-end/ScriptsPanel.js:
        (WebInspector.ScriptsPanel):
        (WebInspector.ScriptsPanel.prototype.get statusBarItems):
        (WebInspector.ScriptsPanel.prototype.updatePauseOnExceptionsState):
        (WebInspector.ScriptsPanel.prototype._updateDebuggerButtons):
        (WebInspector.ScriptsPanel.prototype._togglePauseOnExceptions):
        * inspector/front-end/inspector.js:
        (WebInspector.searchingForNodeWasEnabled):
        (WebInspector.searchingForNodeWasDisabled):
        (WebInspector.updatePauseOnExceptionsState):

2010-03-03  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Timothy Hatcher.

        Web Inspector: Clicking on an error should take me to the error

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

        * inspector/front-end/ResourceView.js:
        (WebInspector.ResourceView):
        (WebInspector.ResourceView.prototype._selectTab):
        (WebInspector.ResourceView.prototype.selectContentTab):
        * inspector/front-end/ResourcesPanel.js:
        (WebInspector.ResourcesPanel.prototype.showResource):

2010-03-03  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Timothy Hatcher.

        Web Inspector: Remove sync access to resourceTrackingEnabled.

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

        * inspector/InspectorBackend.cpp:
        * inspector/InspectorBackend.h:
        * inspector/InspectorBackend.idl:
        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::populateScriptObjects):
        * inspector/front-end/AuditsPanel.js:
        (WebInspector.AuditsPanel.prototype._reloadResources):
        (WebInspector.AuditsPanel.prototype.show):
        * inspector/front-end/InspectorBackendStub.js:
        (.WebInspector.InspectorBackendStub):
        (.WebInspector.InspectorBackendStub.prototype.enableResourceTracking):
        (.WebInspector.InspectorBackendStub.prototype.disableResourceTracking):
        (.WebInspector.InspectorBackendStub.prototype.enableDebugger):
        (.WebInspector.InspectorBackendStub.prototype.disableDebugger):
        (.WebInspector.InspectorBackendStub.prototype.enableProfiler):
        (.WebInspector.InspectorBackendStub.prototype.disableProfiler):
        * inspector/front-end/ResourcesPanel.js:
        (WebInspector.ResourcesPanel):
        (WebInspector.ResourcesPanel.prototype.get resourceTrackingEnabled):
        (WebInspector.ResourcesPanel.prototype.get visibleView):
        (WebInspector.ResourcesPanel.prototype.resourceTrackingWasEnabled):
        (WebInspector.ResourcesPanel.prototype.resourceTrackingWasDisabled):
        (WebInspector.ResourcesPanel.prototype.reset):
        (WebInspector.ResourcesPanel.prototype.showResource):
        (WebInspector.ResourcesPanel.prototype._enableResourceTracking):
        (WebInspector.ResourcesPanel.prototype._toggleResourceTracking):

2010-03-04  Antoine Quint  <ml@graougraou.com>

        Reviewed by Darin Adler.

        DOM insertion mutation events should dispatch after a node is attached to the render tree
        https://bugs.webkit.org/show_bug.cgi?id=35590

        Test: fast/events/domnodeinsertedintodocument-dispatched-post-rendering.html

        Split off the internal-to-WebCore node insertion notification code from the DOM mutation
        event dispatching, originally in dispatchChildInsertionEvents(), to a new static function
        called notifyChildInserted(). This allows us to dispatch the mutation events at a later
        time upon insertion of a child into to the tree, specifically _after_ attachment to the render
        tree.

        * dom/ContainerNode.cpp:
        (WebCore::ContainerNode::insertBefore):
        (WebCore::ContainerNode::replaceChild):
        (WebCore::ContainerNode::appendChild):
        (WebCore::notifyChildInserted):
        (WebCore::dispatchChildInsertionEvents):

2010-03-04  Fridrich Strba  <fridrich.strba@bluewin.ch>

        Reviewed by Holger Freyther.

        Make paths relocatable on runtime on Windows
        https://bugs.webkit.org/show_bug.cgi?id=32711

        * platform/graphics/gtk/ImageGtk.cpp:
        (get_webkit_datadir):
        (WebCore::Image::loadPlatformResource):

2010-03-04  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Timothy Hatcher.

        Web Inspector: Popup for Timeline panel will work in a tooltip mode

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

        * inspector/front-end/Popover.js:
        (WebInspector.Popover):
        (WebInspector.Popover.prototype.show):
        (WebInspector.Popover.prototype.hide):
        (WebInspector.Popover.prototype._positionElement):
        (WebInspector.PopoverHelper):
        (WebInspector.PopoverHelper.prototype._mouseDown):
        (WebInspector.PopoverHelper.prototype._mouseMove.doHide):
        (WebInspector.PopoverHelper.prototype._mouseMove):
        (WebInspector.PopoverHelper.prototype._resetHoverTimer):
        (WebInspector.PopoverHelper.prototype.hidePopup):
        (WebInspector.PopoverHelper.prototype._mouseHover):
        (WebInspector.PopoverHelper.prototype._killHidePopupTimer):
        * inspector/front-end/TimelineOverviewPane.js:
        (WebInspector.TimelineOverviewPane.prototype.reset):
        * inspector/front-end/TimelinePanel.js:
        (WebInspector.TimelinePanel):
        (WebInspector.TimelinePanel.prototype.get _recordStyles):
        (WebInspector.TimelinePanel.prototype._innerAddRecordToTimeline):
        (WebInspector.TimelinePanel.prototype._scheduleRefresh):
        (WebInspector.TimelinePanel.prototype._refreshRecords):
        (WebInspector.TimelinePanel.prototype._adjustScrollPosition):
        (WebInspector.TimelinePanel.prototype._getPopoverAnchor):
        (WebInspector.TimelinePanel.prototype._showPopover):
        (WebInspector.TimelinePanel.prototype._closeRecordDetails):
        (WebInspector.TimelineRecordListRow):
        (WebInspector.TimelineRecordListRow.prototype.update):
        (WebInspector.TimelineRecordGraphRow):
        (WebInspector.TimelineRecordGraphRow.prototype._onClick):
        (WebInspector.TimelinePanel.FormattedRecord):
        (WebInspector.TimelinePanel.FormattedRecord.prototype._createCell):
        (WebInspector.TimelinePanel.FormattedRecord.prototype._createRow):
        (WebInspector.TimelinePanel.FormattedRecord.prototype._createLinkRow):
        (WebInspector.TimelinePanel.FormattedRecord.prototype._generatePopupContent):
        (WebInspector.TimelinePanel.FormattedRecord.prototype._getRecordDetails):
        * inspector/front-end/inspector.css:

2010-03-04  Laszlo Gombos  <laszlo.1.gombos@nokia.com>

        Unreviewed build fix.

        Build fix after r55464.

        No new tests, no new functionality.

        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::populateScriptObjects):

2010-03-04  Leandro Pereira  <leandro@profusion.mobi>

        Reviewed by Kenneth Rohde Christiansen.

        Add EFL port files to platform/graphics/efl.
        http://webkit.org/b/35539

        * platform/graphics/efl/FloatRectEfl.cpp: Added.
        * platform/graphics/efl/FontEfl.cpp: Added.
        * platform/graphics/efl/IconEfl.cpp: Added.
        * platform/graphics/efl/ImageEfl.cpp: Added.
        * platform/graphics/efl/IntPointEfl.cpp: Added.
        * platform/graphics/efl/IntRectEfl.cpp: Added.

2010-03-04  Leandro Pereira  <leandro@profusion.mobi>

        Reviewed by Kenneth Rohde Christiansen.

        Add EFL port files to platform/text/efl.
        http://webkit.org/b/35740

        * platform/text/efl/TextBreakIteratorInternalICUEfl.cpp: Added.

2010-03-04  Fridrich Strba  <fridrich.strba@bluewin.ch>

        Reviewed by Holger Freyther.

        https://bugs.webkit.org/show_bug.cgi?id=35726
        Remove orphaned #ifdef WTF_USE_GLIB_ICU_UNICODE_HYBRID

        Removing orphaned #if USE.

        * platform/ThreadGlobalData.h:

2010-03-03  Jeremy Orlow  <jorlow@chromium.org>

        Reviewed by Darin Fisher.

        Throttle sync requests sent to the LocalStorage background thread
        https://bugs.webkit.org/show_bug.cgi?id=34943

        Currently, once a second LocalStorage takes all keys/values which have
        been changed and sends them to a background thread to sync.  The problem
        is that this background thread can get overwhelmed and stop being
        responsive.  This means that if any other page tries to start using
        LocalStorage (and thus initiates the initial import) that'll block on
        all the previous syncs completing.

        To mitigate this, I'm adding code so that we never schedule another
        sync task when another is still running.  In order to keep the sync
        tasks from growing exponentially when they do take longer than the
        storage sync interval, I've also added a basic rate limiter.  No effort
        is made to ensure fairness/ordering of what gets synced nor is there
        any way for this rate to be changed because most normal uses of
        LocalStorage really shouldn't be hitting these types of limits anyway.

        The only behavioral change that's observible in JavaScript is time based
        and thus it's not practical to make new tests that aren't racy.  The
        existing layout tests cover LocalStorage pretty well, though.

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

2010-03-04  Andrey Kosyakov  <caseq@chromium.org>

        Reviewed by Pavel Feldman.

        Added support for worker instrumentation in inspector
        (display list of active workers, allow debugging of workers
        by injecting fake JS implementation)

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

        * English.lproj/localizedStrings.js:
        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * bindings/js/JSInjectedScriptHostCustom.cpp:
        (WebCore::InjectedScriptHost::createInjectedScript):
        (WebCore::InjectedScriptHost::injectedScriptFor):
        * bindings/v8/custom/V8InjectedScriptHostCustom.cpp:
        (WebCore::InjectedScriptHost::createInjectedScript):
        (WebCore::InjectedScriptHost::injectedScriptFor):
        * dom/Document.cpp:
        (WebCore::Document::inspectorController):
        * dom/Document.h:
        * dom/ScriptExecutionContext.h:
        (WebCore::ScriptExecutionContext::inspectorController):
        * inspector/InjectedScriptHost.cpp:
        (WebCore::InjectedScriptHost::InjectedScriptHost):
        (WebCore::InjectedScriptHost::injectScript):
        (WebCore::InjectedScriptHost::nextWorkerId):
        (WebCore::InjectedScriptHost::didCreateWorker):
        (WebCore::InjectedScriptHost::willDestroyWorker):
        * inspector/InjectedScriptHost.h:
        * inspector/InjectedScriptHost.idl:
        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::populateScriptObjects):
        (WebCore::InspectorController::resetScriptObjects):
        (WebCore::InspectorController::didCommitLoad):
        (WebCore::InspectorController::didCreateWorker):
        (WebCore::InspectorController::willDestroyWorker):
        * inspector/InspectorController.h:
        * inspector/InspectorFrontend.cpp:
        (WebCore::InspectorFrontend::didCreateWorker):
        (WebCore::InspectorFrontend::willDestroyWorker):
        * inspector/InspectorFrontend.h:
        * inspector/InspectorWorkerResource.h: Added.
        (WebCore::InspectorWorkerResource::create):
        (WebCore::InspectorWorkerResource::id):
        (WebCore::InspectorWorkerResource::url):
        (WebCore::InspectorWorkerResource::isSharedWorker):
        (WebCore::InspectorWorkerResource::InspectorWorkerResource):
        * inspector/front-end/Checkbox.js: Added.
        (WebInspector.Checkbox.callbackWrapper):
        (WebInspector.Checkbox):
        (WebInspector.Checkbox.prototype.checked):
        * inspector/front-end/InjectedFakeWorker.js:
        (InjectedFakeWorker.FakeWorker):
        (InjectedFakeWorker.FakeWorker.prototype.terminate):
        (InjectedFakeWorker.FakeWorker.prototype._handleException):
        (InjectedFakeWorker.FakeWorker.prototype._importScripts):
        (InjectedFakeWorker.FakeWorker.prototype._loadScript):
        (InjectedFakeWorker.FakeWorker.prototype._expandURLAndCheckOrigin):
        * inspector/front-end/ScriptsPanel.js:
        (WebInspector.ScriptsPanel):
        (WebInspector.ScriptsPanel.prototype.debuggerWasEnabled):
        (WebInspector.ScriptsPanel.prototype.debuggerWasDisabled):
        (WebInspector.ScriptsPanel.prototype.reset):
        * inspector/front-end/WebKit.qrc:
        * inspector/front-end/WorkersSidebarPane.js: Added.
        (WebInspector.WorkersSidebarPane):
        (WebInspector.WorkersSidebarPane.prototype.addWorker):
        (WebInspector.WorkersSidebarPane.prototype.removeWorker):
        (WebInspector.WorkersSidebarPane.prototype.setInstrumentation):
        (WebInspector.WorkersSidebarPane.prototype.reset):
        (WebInspector.WorkersSidebarPane.prototype._onTriggerInstrument):
        (WebInspector.Worker):
        (WebInspector.didCreateWorker):
        (WebInspector.willDestroyWorker):
        * inspector/front-end/inspector.css:
        * inspector/front-end/inspector.html:
        * workers/AbstractWorker.cpp:
        (WebCore::AbstractWorker::AbstractWorker):
        (WebCore::AbstractWorker::~AbstractWorker):
        (WebCore::AbstractWorker::onDestroyWorker):
        (WebCore::AbstractWorker::contextDestroyed):
        * workers/AbstractWorker.h:
        (WebCore::AbstractWorker::id):
        * workers/SharedWorker.cpp:
        (WebCore::SharedWorker::SharedWorker):
        * workers/Worker.cpp:
        (WebCore::Worker::Worker):

2010-03-04  Jocelyn Turcotte  <jocelyn.turcotte@nokia.com>

        Reviewed by Tor Arne Vestbø.

        [Qt] Make the OUTPUT_DIR variable in qmake projects independent of build-webkit's logic.

        This also allows shadow builds relying only on qmake to work properly.

        * WebCore.pro:

2010-03-02  Holger Hans Peter Freyther  <zecke@selfish.org>

        Reviewed by Simon Hausmann.

        [Qt] Avoid calling QFont::detach too often from FontQt
        https://bugs.webkit.org/show_bug.cgi?id=35569

        The letter- and wordspacing is inside the WebCore::Font class,
        our QFont is located in the WebCore::FontPlatformData. Everytime
        we need to use a QFont inside WebCore::Font we are calling the
        font method which gets the QFont from the WebCore::FontPlatformData
        and is applying the letter- and wordspacing. Internally this
        will attempt to detach the QFont...

        Avoid calling setLetterSpacing and setWordSpacing on QFont if
        the WebCore::Font has the default applied.

        * platform/graphics/qt/FontQt.cpp:
        (WebCore::Font::font):

2010-03-04  Alexander Pavlov  <apavlov@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: Nothing happens on navigation to resource via a link if resource tracking is disabled
        https://bugs.webkit.org/show_bug.cgi?id=35574

        * English.lproj/localizedStrings.js:
        * inspector/front-end/ResourcesPanel.js:
        (WebInspector.ResourcesPanel.prototype.canShowSourceLine):
        (WebInspector.ResourcesPanel.prototype._toggleResourceTracking):
        * inspector/front-end/inspector.js:
        (WebInspector.documentMouseOver):
        (WebInspector.documentMouseOut):
        (WebInspector.hideBadLinkPopupIfNecessary):
        (WebInspector.documentClick.followLink):
        (WebInspector.documentClick):
        (WebInspector.showBadLinkPopup.popupOverOut):
        (WebInspector.showBadLinkPopup):
        (WebInspector.addMainEventListeners):

2010-03-04  Vangelis Kokkevis  <vangelis@chromium.org>

        Reviewed by Oliver Hunt.

        getUniformLocation() now returns null if uniform requested 
        is not found.
        https://bugs.webkit.org/show_bug.cgi?id=34669
        
        Test:LayoutTests/fast/canvas/webgl/uniform-location.html
        (added missing test)

        * html/canvas/WebGLRenderingContext.cpp:
        (WebCore::WebGLRenderingContext::getUniformLocation):

2010-03-04  John Abd-El-Malek  <jam@chromium.org>

        Reviewed by Adam Barth.

        Fix incorrect setup of DateExtension.
        https://bugs.webkit.org/show_bug.cgi?id=35710

        * bindings/v8/DateExtension.cpp:
        (WebCore::DateExtension::setAllowSleep):

2010-03-04  Oliver Hunt  <oliver@apple.com>

        Reviewed by Maciej Stachowiak.

        https://bugs.webkit.org/show_bug.cgi?id=35603
        SVG incorrectly allows nested <use> elements in a <use> shadow tree

        Simplify the handling of invalid or missing use-targets by cloning them
        to empty <g> elements rather than just allowing the <use> element to
        be copied into the shadow tree, as this violates a number of assumptions
        in the shadow tree handling code.

        Tests: svg/custom/use-nested-disallowed-target.svg
               svg/custom/use-nested-missing-target-added.svg
               svg/custom/use-nested-missing-target-removed.svg
               svg/custom/use-nested-missing-target.svg
               svg/custom/use-nested-notarget.svg

        * svg/SVGUseElement.cpp:
        (WebCore::SVGUseElement::buildPendingResource):
        (WebCore::SVGUseElement::buildShadowAndInstanceTree):
        (WebCore::SVGUseElement::expandUseElementsInShadowTree):

2010-03-04  Leandro Pereira  <leandro@profusion.mobi>

        Reviewed by Gustavo Noronha Silva.

        Move Cairo-related font code from platform/graphics/gtk to
        platform/graphics/cairo, so other ports may use them.
        http://webkit.org/b/35539

        * GNUmakefile.am:
        * platform/graphics/cairo/FontCacheCairo.cpp: Copied from WebCore/platform/graphics/gtk/FontCacheGtk.cpp.
        * platform/graphics/cairo/FontCustomPlatformData.cpp: Copied from WebCore/platform/graphics/gtk/FontCustomPlatformData.cpp.
        * platform/graphics/cairo/FontCustomPlatformData.h: Copied from WebCore/platform/graphics/gtk/FontCustomPlatformData.h.
        * platform/graphics/cairo/FontPlatformData.h: Copied from WebCore/platform/graphics/gtk/FontPlatformData.h.
        * platform/graphics/cairo/FontPlatformDataCairo.cpp: Copied from WebCore/platform/graphics/gtk/FontPlatformDataGtk.cpp.
        * platform/graphics/cairo/GlyphPageTreeNodeCairo.cpp: Copied from WebCore/platform/graphics/gtk/GlyphPageTreeNodeGtk.cpp.
        * platform/graphics/cairo/SimpleFontDataCairo.cpp: Copied from WebCore/platform/graphics/gtk/SimpleFontDataGtk.cpp.
        * platform/graphics/gtk/FontCacheGtk.cpp: Removed.
        * platform/graphics/gtk/FontCustomPlatformData.cpp: Removed.
        * platform/graphics/gtk/FontCustomPlatformData.h: Removed.
        * platform/graphics/gtk/FontPlatformData.h: Removed.
        * platform/graphics/gtk/FontPlatformDataGtk.cpp: Removed.
        * platform/graphics/gtk/GlyphPageTreeNodeGtk.cpp: Removed.
        * platform/graphics/gtk/SimpleFontDataGtk.cpp: Removed.

2010-03-04  Evan Stade  <estade@chromium.org>

        Reviewed by David Levin.

        https://bugs.webkit.org/show_bug.cgi?id=35261
        [skia] crash when attempting to render certain SVGs

        This fixes the crash, but the SVG still doesn't render properly.

        Test: svg/custom/tiling-regular-hexagonal-crash.svg

        * platform/graphics/skia/ImageSkia.cpp:
        (WebCore::BitmapImageSingleFrameSkia::create): don't return 0 when
        the copy fails; instead return a blank bitmap. The caller doesn't
        check for 0 before dereferencing.

2010-03-04  Tony Chang  <tony@chromium.org>

        Reviewed by Darin Fisher.

        Initialize m_isMultipartPayload in other ResourceResponse ctor.
        In r55451 (bug 35628) I added an extra bool, but only initialized
        it in one constructor.
        https://bugs.webkit.org/show_bug.cgi?id=35719

        * platform/network/chromium/ResourceResponse.h:
        (WebCore::ResourceResponse::ResourceResponse):

2010-03-03  Yuta Kitamura  <yutak@chromium.org>

        Reviewed by Alexey Proskuryakov.

        Add a new class that stores information about Web Socket handshake request.

        Instances of this class contain the necessary information to send a Web Socket
        handshake request. In the future, this class will provide request information
        to the Web Inspector.

        WebSocketHandshake needs to provide request information
        https://bugs.webkit.org/show_bug.cgi?id=34784

        No new tests, since the current tests will suffice (LayoutTests/websocket/*).

        * GNUmakefile.am:
        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * websockets/WebSocketChannel.cpp:
        * websockets/WebSocketHandshake.cpp:
        (WebCore::WebSocketHandshake::clientHandshakeMessage):
        (WebCore::WebSocketHandshake::clientHandshakeRequest):
        * websockets/WebSocketHandshake.h:
        * websockets/WebSocketHandshakeRequest.cpp: Added.
        (WebCore::WebSocketHandshakeRequest::WebSocketHandshakeRequest):
        (WebCore::WebSocketHandshakeRequest::~WebSocketHandshakeRequest):
        (WebCore::WebSocketHandshakeRequest::addExtraHeaderField):
        (WebCore::WebSocketHandshakeRequest::headerFields):
        (WebCore::WebSocketHandshakeRequest::host):
        * websockets/WebSocketHandshakeRequest.h: Added.

2010-03-03  Laszlo Gombos  <laszlo.1.gombos@nokia.com>

        Reviewed by Kenneth Rohde Christiansen.

        Build fix after r55452.

        No new tests, this is a build fix.

        * page/Settings.cpp:
        (WebCore::Settings::setDatabasesEnabled):

2010-03-03  Diego Gonzalez  <diego.gonzalez@openbossa.org>

        Reviewed by Kenneth Rohde Christiansen.

        Make keyIdentifierForQtKeyCode return the unicode backspace value on Qt PlatformKeyboardEvent

        LayoutTests:
            fast/events/key-events-in-input-text.html
            fast/events/special-key-events-in-input-text.html

        [Qt] Return the unicode backspace value in keyIdentifierForQtKeyCode on Qt PlatformKeyboardEvent
        https://bugs.webkit.org/show_bug.cgi?id=35694

        * platform/qt/PlatformKeyboardEventQt.cpp:
        (WebCore::keyIdentifierForQtKeyCode):

2010-03-03  Chad Faragher  <wyck@chromium.org>

        Reviewed by Darin Adler.
        Changed the double-click framework code to pass adjusted page
        coordinates for zoomed pages.  Added a new test to expose
        mistreatment of mouse click coordinates during a double-click.

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

        Test: fast/events/zoom-dblclick.html

        * dom/Node.cpp:
        (WebCore::Node::dispatchMouseEvent):

2010-03-03  David Levin  <levin@chromium.org>

        No review, rolling out r55474.

        The patch broke fast/frames/sandboxed-iframe-storage.html

        Last one (I hope).
        
        * WebCore.xcodeproj/project.pbxproj:

2010-03-03  David Levin  <levin@chromium.org>

        No review, rolling out r55474.

        The patch broke fast/frames/sandboxed-iframe-storage.html

        Unfortunately, (the webkit-patch rollout and) I missed these in r55485.

        * bindings/js/JSDatabaseCallback.cpp: Removed.
        * bindings/js/JSDatabaseCallback.h: Removed.
        * bindings/v8/custom/V8DatabaseCallback.cpp: Removed.
        * bindings/v8/custom/V8DatabaseCallback.h: Removed.
        * storage/DatabaseCallback.h: Removed.

2010-03-02  Dumitru Daniliuc  <dumi@chromium.org>

        Reviewed by Dimitri Glazkov.

        Fix a bug that could lead to a crash. Some parts of
        SQLTransaction::checkAndHandleClosedDatabase() should only be run
        when that method is invoked on the DB thread.

        We cannot test this fix with a test, because the crash happens
        only when all of the following conditions are met:
        1. A database is closing.
        2. A transaction on that database is in progress.
        3. The transaction is in a state where a statement/transaction
        success/error callback needs to be invoked (so there's a task for
        this transaction pending on the main thread).
        4. The DB thread finished processing all its tasks and called
        SQLTransactionCoordinator::shutdown() before the main thread go to
        that task.

        The closest thing we have to a test is running
        LayoutTests/storage/database-lock-after-reload.html 1000 times in
        a row. Without the patch, the probability of a crash happening in
        one of the runs is very high. With the patch, the test should
        reliably run 1000 times in a row without a single crash.

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

        * storage/SQLTransaction.cpp:
        (WebCore::SQLTransaction::checkAndHandleClosedDatabase):

2010-03-03  Darin Fisher  <darin@chromium.org>

        Reviewed by Mark Rowe.

        Page should not care about Chromium plug-in implementation details
        https://bugs.webkit.org/show_bug.cgi?id=35623

        * WebCore.gypi: Compile PluginViewNone.cpp
        * page/Page.cpp:
        (WebCore::Page::privateBrowsingStateChanged): Remove conditional
        compilation for PLATFORM(CHROMIUM).

2010-03-03  David Levin  <levin@chromium.org>

        No review, rolling out r55474.
        http://trac.webkit.org/changeset/55480

        The patch broke fast/frames/sandboxed-iframe-storage.html

        * Android.jscbindings.mk:
        * Android.v8bindings.mk:
        * GNUmakefile.am:
        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * bindings/js/JSDOMWindowCustom.cpp:
        * bindings/v8/custom/V8DOMWindowCustom.cpp:
        * dom/Document.cpp:
        (WebCore::Document::postTask):
        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::openDatabase):
        * page/DOMWindow.h:
        * page/DOMWindow.idl:
        * storage/Database.cpp:
        (WebCore::Database::openDatabase):
        (WebCore::Database::Database):
        (WebCore::Database::performOpenAndVerify):
        * storage/Database.h:
        * workers/WorkerContext.cpp:
        (WebCore::WorkerContext::openDatabase):
        * workers/WorkerContext.h:

2010-03-03  David Levin  <levin@chromium.org>

        No review, rolling out r55480.
        http://trac.webkit.org/changeset/55480

        The patch broke fast/frames/sandboxed-iframe-storage.html

        * storage/Database.cpp:
        * storage/Database.h:

2010-03-03  Mark Rowe  <mrowe@apple.com>

        Reviewed by Geoff Garen.

        Add virtual memory tags for TCMalloc and WebCore's purgeable buffers.

        * platform/mac/PurgeableBufferMac.cpp:
        (WebCore::PurgeableBuffer::create):  Use the VM tag.

2010-03-03  Dumitru Daniliuc  <dumi@chromium.org>

        Reviewed by nobody, build fix.

        Move #include "DatabaseCallback.h" from Database.h to
        Database.cpp.

        * storage/Database.cpp:
        * storage/Database.h:

2010-03-03  Darin Adler  <darin@apple.com>

        Fixed Mac build.

        * WebCore.xcodeproj/project.pbxproj: Marked a couple of headers "private" so they can
        be used in the WebKit project.

2010-03-03  Alexey Proskuryakov  <ap@apple.com>

        Reviewed by Adele Peterson.

        https://bugs.webkit.org/show_bug.cgi?id=35044
        Crash in XML tokenizer reloading zoom-coords-viewattr-01-b.svg

        I'm often getting a crash even when opening the test for the first time in Safari, but it
        doesn't seem to crash in DumpRenderTree. Still, I can't think of a stronger way to test for
        this condition, so no new regression test.

        * dom/XMLTokenizer.cpp: (WebCore::XMLTokenizer::end): Be prepared that parsing remaining
        input will pause parsing.

2010-03-03  Dumitru Daniliuc  <dumi@chromium.org>

        Reviewed by Adam Barth.

        Adding support for the optional creation callback that could be
        passed to openDatabase().

        Test: storage/open-database-creation-callback.html

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

        * Android.jscbindings.mk
        * Android.v8bindings.mk
        * GNUmakefile.am:
        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSDOMWindowCustom.cpp:
        (WebCore::JSDOMWindow::openDatabase):
        * bindings/js/JSDatabaseCallback.cpp: Added.
        (WebCore::JSDatabaseCallback::JSDatabaseCallback):
        (WebCore::JSDatabaseCallback::~JSDatabaseCallback):
        (WebCore::JSDatabaseCallback::handleEvent):
        * bindings/js/JSDatabaseCallback.h: Added.
        (WebCore::JSDatabaseCallback::create):
        * bindings/v8/custom/V8DOMWindowCustom.cpp:
        (WebCore::V8DOMWindow::openDatabaseCallback):
        * bindings/v8/custom/V8DatabaseCallback.cpp: Added.
        (WebCore::V8DatabaseCallback::V8DatabaseCallback):
        (WebCore::V8DatabaseCallback::~V8DatabaseCallback):
        (WebCore::V8DatabaseCallback::handleEvent):
        * bindings/v8/custom/V8DatabaseCallback.h: Added.
        (WebCore::V8DatabaseCallback::create):
        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::openDatabase):
        * page/DOMWindow.h:
        * page/DOMWindow.idl:
        * storage/Database.cpp:
        (WebCore::DatabaseCreationCallbackTask::create):
        (WebCore::DatabaseCreationCallbackTask::performTask):
        (WebCore::DatabaseCreationCallbackTask::DatabaseCreationCallbackTask):
        (WebCore::Database::openDatabase):
        (WebCore::Database::Database):
        (WebCore::Database::performOpenAndVerify):
        (WebCore::Database::performCreationCallback):
        * storage/Database.h:
        (WebCore::Database::isNew):
        * storage/DatabaseCallback.h: Added.
        (WebCore::DatabaseCallback::~DatabaseCallback):
        * workers/WorkerContext.cpp:
        (WebCore::WorkerContext::openDatabase):
        * workers/WorkerContext.h:

2010-03-03  Alexander Pavlov  <apavlov@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: resources panel only shows uncompressed resource size.
        https://bugs.webkit.org/show_bug.cgi?id=35403

        * English.lproj/localizedStrings.js:
        * inspector/InspectorResource.cpp:
        (WebCore::InspectorResource::updateScriptObject):
        * inspector/front-end/AbstractTimelinePanel.js:
        (WebInspector.AbstractTimelinePanel.prototype.refresh):
        * inspector/front-end/AuditRules.js:
        (WebInspector.AuditRules.GzipRule.prototype.doRun):
        (WebInspector.AuditRules.GzipRule.prototype._shouldCompress):
        * inspector/front-end/ImageView.js:
        (WebInspector.ImageView):
        * inspector/front-end/Resource.js:
        (WebInspector.Resource.prototype.get resourceSize):
        (WebInspector.Resource.prototype.set resourceSize):
        (WebInspector.Resource.prototype.get transferSize):
        (WebInspector.Resource.CompareBySize):
        (WebInspector.Resource.CompareByTransferSize):
        * inspector/front-end/ResourcesPanel.js:
        (WebInspector.ResourcesPanel.prototype.populateSidebar):
        (WebInspector.ResourceTimeCalculator.prototype.computeBarGraphLabels):
        (WebInspector.ResourceTransferSizeCalculator.prototype.computeBarGraphLabels):
        (WebInspector.ResourceTransferSizeCalculator.prototype.computeBarGraphPercentages):
        (WebInspector.ResourceTransferSizeCalculator.prototype._value):
        (WebInspector.ResourceTransferSizeCalculator.prototype._networkBytes):
        (WebInspector.ResourceSidebarTreeElement.CompareByDescendingTransferSize):
        (WebInspector.ResourceGraph.prototype.refreshLabelPositions):
        (WebInspector.ResourceGraph.prototype.refresh):
        * inspector/front-end/inspector.css:
        * inspector/front-end/inspector.js:
        (WebInspector.updateResource):

2010-03-03  Dan Bernstein  <mitz@apple.com>

        Build fix.

        * dom/ContainerNode.cpp:
        (WebCore::ContainerNode::removeChildren):

2010-03-03  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Timothy Hatcher.

        Web Inspector: Get rid of synchronous debuggerEnabled, profilerEnabled calls.

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

        * inspector/InspectorBackend.cpp:
        * inspector/InspectorBackend.h:
        * inspector/InspectorBackend.idl:
        * inspector/front-end/BreakpointsSidebarPane.js:
        (WebInspector.BreakpointsSidebarPane.prototype.addBreakpoint):
        (WebInspector.BreakpointsSidebarPane.prototype.removeBreakpoint):
        (WebInspector.BreakpointsSidebarPane.prototype._breakpointEnableChanged):
        * inspector/front-end/ProfilesPanel.js:
        (WebInspector.ProfilesPanel):
        (WebInspector.ProfilesPanel.prototype.profilerWasEnabled):
        (WebInspector.ProfilesPanel.prototype.profilerWasDisabled):
        (WebInspector.ProfilesPanel.prototype._updateInterface):
        (WebInspector.ProfilesPanel.prototype._enableProfiling):
        (WebInspector.ProfilesPanel.prototype._toggleProfiling):
        * inspector/front-end/ScriptsPanel.js:
        (WebInspector.ScriptsPanel):
        (WebInspector.ScriptsPanel.prototype.debuggerWasEnabled):
        (WebInspector.ScriptsPanel.prototype.debuggerWasDisabled):
        (WebInspector.ScriptsPanel.prototype.reset):
        (WebInspector.ScriptsPanel.prototype.canShowSourceLine):
        (WebInspector.ScriptsPanel.prototype._updateDebuggerButtons):
        (WebInspector.ScriptsPanel.prototype._enableDebugging):
        (WebInspector.ScriptsPanel.prototype._toggleDebugging):

2010-03-03  Eric Carlson  <eric.carlson@apple.com>

        Reviewed by Adele Peterson.

        Replace 'autobuffer' attribute with 'preload' to align with spec revision 4811.
        https://bugs.webkit.org/show_bug.cgi?id=35385
        rdar://problem/7689602

        Tests: media/audio-constructor-preload.html
               media/video-dom-preload.html

        * html/HTMLAttributeNames.in: Remove autobuffer, add preload

        * html/HTMLAudioElement.cpp:
        (WebCore::HTMLAudioElement::createForJSConstructor): set preload to 'auto' instead of 
            autobuffer to true.

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::HTMLMediaElement): Initialize m_preload.
        (WebCore::HTMLMediaElement::parseMappedAttribute): Deal with 'preload' attribute.
        (WebCore::HTMLMediaElement::loadResource): Call setPreload() on the newly created MediaPlayer,
            before calling load() so it can pass the setting through to the media engine.
        (WebCore::HTMLMediaElement::preload): New.
        (WebCore::HTMLMediaElement::setPreload): Ditto
        * html/HTMLMediaElement.h:
        * html/HTMLMediaElement.idl:

        * platform/graphics/MediaPlayer.cpp:
        (WebCore::MediaPlayer::MediaPlayer): Initialize m_preload.
        (WebCore::MediaPlayer::load): Pass m_preload to newly created media engine.
        (WebCore::MediaPlayer::preload): New, return m_preload.
        (WebCore::MediaPlayer::setPreload): New, set m_preload.
        * platform/graphics/MediaPlayer.h:
        (WebCore::MediaPlayer::):
        * platform/graphics/MediaPlayerPrivate.h:
        (WebCore::MediaPlayerPrivateInterface::setPreload):

        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:
        (WebCore::MediaPlayerPrivate::setPreload): Renamed from setAutoplay, fix logic for preload.
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.h:

2010-03-03  Dan Bernstein  <mitz@apple.com>

        Reviewed by Sam Weinig.

        <rdar://problem/7682756> Assertion failure when replacing the contents of a <select>

        Test: fast/dom/remove-children-notification-order.html

        * dom/ContainerNode.cpp:
        (WebCore::ContainerNode::removeChildren): Changed to call childrenChanged()
        before calling removedFromDocument() on each removed child, which matches
        the order removeChild() does things, and avoids the assertion. This required
        temporarily storing the removed children in a vector.
        Also added comments about other discrepancies between this function and
        removeChild().

2010-03-03  Adam Barth  <abarth@webkit.org>

        Reviewed by Darin Adler.

        Document cookieURL and firstPartyForCookies
        https://bugs.webkit.org/show_bug.cgi?id=35613

        Some folks asked what the cookieURL and the firstPartyForCookies were
        on IRC.  This patch documents these properties in the code so folks
        don't have to ask on IRC anymore.

        * dom/Document.h:

2010-03-03  Arno Renevier  <arno@renevier.net>

        Reviewed by Gustavo Noronha Silva.

        [Gtk]: assertion triggered when geolocation getCurrentPosition without an option argument.
        https://bugs.webkit.org/show_bug.cgi?id=35666

        * platform/gtk/GeolocationServiceGtk.cpp:
        (WebCore::GeolocationServiceGtk::startUpdating):

2010-03-03  Fridrich Strba  <fridrich.strba@bluewin.ch>

        Reviewed by Xan Lopez.

        Miscellaneous little fixes for the windows build of webkit-gtk
        https://bugs.webkit.org/show_bug.cgi?id=35640

        * GNUmakefile.am: dist two new files concerning mathml support.

2010-03-03  Xan Lopez  <xlopez@igalia.com>

        Unreviewed distcheck fix.

        Add new file to the build.

        * GNUmakefile.am:

2010-03-03  Antti Koivisto  <koivisto@iki.fi>

        Reviewed by Oliver Hunt.

        Make IntPoint usable as a hash key
        
        https://bugs.webkit.org/show_bug.cgi?id=35586

        * WebCore.pro:
        * WebCore.xcodeproj/project.pbxproj:
        * platform/graphics/IntPointHash.h: Added.
        (WTF::IntPointHash::hash):
        (WTF::IntPointHash::equal):
        (WTF::):

2010-03-02  Eric Uhrhane  <ericu@chromium.org>

        Reviewed by David Levin.

        Move database enable bit fully out of settings
        This is stage one of a three-stage commit [webkit, then chromium, then
        webkit again].  In this change I'm adding calls to
        Database::setIsAvailable inside Settings::setDatabaseEnabled and
        anywhere else that called it, and switching webkit fully over to using
        that flag [added in a previous checkin].  Phase two will remove
        Chromium's use of Settings for the Database, and phase three will remove
        the Setting for the Database enable entirely, leaving only
        Database::isAvailable/setIsAvailable.

        No new tests; tested by existing storage tests.

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

        * WebCore.base.exp: Export Database::setIsAvailable
        * WebCore.xcodeproj/project.pbxproj: Export needed headers as Private
        * page/DOMWindow.cpp: Read isAvailable, not Settings::isDatabaseEnabled
        (WebCore::DOMWindow::openDatabase):
        * page/Settings.cpp:  Add a call to Database::setIsAvailable.
        (WebCore::Settings::setDatabasesEnabled):

2010-03-02  Tony Chang  <tony@chromium.org>

        Reviewed by Darin Fisher.

        add a flag to WebURLResponse so we can identify multipart content
        https://bugs.webkit.org/show_bug.cgi?id=35628

        * platform/network/chromium/ResourceResponse.h:
        (WebCore::ResourceResponse::ResourceResponse):
        (WebCore::ResourceResponse::isMultipartPayload):
        (WebCore::ResourceResponse::setIsMultipartPayload):

2010-03-02  Tony Chang  <tony@chromium.org>

        Not reviewed, test fix.

        Revert r55447 because the new layout test is crashing consistently
        on Leopard Intel Debug (tests).
        https://bugs.webkit.org/show_bug.cgi?id=35261

        * platform/graphics/skia/ImageSkia.cpp:
        (WebCore::BitmapImageSingleFrameSkia::create):

2010-03-02  Adam Barth  <abarth@webkit.org>

        Reviewed by Darin Fisher.

        Google Analytics triggers "blocked plugin" UI
        https://bugs.webkit.org/show_bug.cgi?id=35565

        Just like for running script, we need to distinguish between querying
        whether plug-ins are enabled and actually blocking a page from
        instantiating a plugin.  We need to issue different callbacks to the
        FrameLoaderClient so that the client can inform us that plug-ins are
        disabled in some cases without showing the "plug-in blocked" UI.

        * dom/DOMImplementation.cpp:
        (WebCore::DOMImplementation::createDocument):
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::requestObject):
        (WebCore::FrameLoader::allowPlugins):
        * loader/FrameLoader.h:
        (WebCore::):
        * loader/FrameLoaderClient.h:
        (WebCore::FrameLoaderClient::didNotAllowPlugins):
        * loader/MainResourceLoader.cpp:
        (WebCore::MainResourceLoader::substituteMIMETypeFromPluginDatabase):
        * loader/PluginDocument.cpp:
        (WebCore::PluginTokenizer::writeRawData):
        * page/Page.cpp:
        (WebCore::Page::pluginData):
        * plugins/MimeType.cpp:
        (WebCore::MimeType::enabledPlugin):

2010-03-02  Andreas Kling  <andreas.kling@nokia.com>

        Reviewed by Simon Hausmann.

        [Qt] Support the HTTP OPTIONS verb (needed for preflight requests)

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

        * platform/network/qt/QNetworkReplyHandler.cpp:
        (WebCore::QNetworkReplyHandler::QNetworkReplyHandler):
        (WebCore::QNetworkReplyHandler::start):

2010-03-02  Evan Stade  <estade@chromium.org>

        Reviewed by David Levin.

        https://bugs.webkit.org/show_bug.cgi?id=35261
        [skia] crash when attempting to render certain SVGs

        This fixes the crash, but the SVG still doesn't render properly.

        Test: svg/custom/tiling-regular-hexagonal-crash.svg

        * platform/graphics/skia/ImageSkia.cpp:
        (WebCore::BitmapImageSingleFrameSkia::create): don't return 0 when
        the copy fails; instead return a blank bitmap. The caller doesn't
        check for 0 before dereferencing.

2010-03-02  Arno Renevier  <arno@renevier.net>

        Reviewed by Gustavo Noronha Silva.

        [Gtk] use geoclue providers with don't provide update
        https://bugs.webkit.org/show_bug.cgi?id=35191

        No new tests, behaviour depends on system.

        * platform/gtk/GeolocationServiceGtk.cpp:
        (WebCore::GeolocationServiceGtk::startUpdating):

2010-03-02  John Abd-El-Malek  <jam@chromium.org>

        Reviewed by Darin Adler.

        Remove unnecessary check.
        https://bugs.webkit.org/show_bug.cgi?id=35513

        * platform/ScrollView.cpp:
        (WebCore::ScrollView::updateScrollbars):

2010-03-02  Darin Fisher  <darin@chromium.org>

        Fix chromium build bustage.

        * page/Page.cpp:
        (WebCore::Page::privateBrowsingStateChanged): PluginView methods may
        not be called in the Chromium port.

2010-03-02  Beth Dakin  <bdakin@apple.com>

        Reviewed by Darin Adler and Adam Roben.

        Fix for <rdar://problem/7485289> WebKit crashes on systems that 
        don't support CoreAnimation

        WKCACFLayerRenderer::acceleratedCompositingAvailable() now creates 
        a dummy HWND so that it can step through the whole setHostWindow() 
        and createRenderer() process. createRenderer() also calls a new 
        function, hardwareCapabilitiesIndicateCoreAnimationSupport() which 
        can only be called  once we have a d3dDevice.

        setHostWindow() and createRenderer() now both return bools that 
        indicate whether or not they have succeeded.

        * platform/graphics/win/WKCACFLayerRenderer.cpp:
        (WebCore::hardwareCapabilitiesIndicateCoreAnimationSupport):
        (WebCore::CoreAnimationTesterWindowWndProc):
        (WebCore::WKCACFLayerRenderer::acceleratedCompositingAvailable):
        (WebCore::WKCACFLayerRenderer::shared):
        (WebCore::WKCACFLayerRenderer::createRenderer):
        * platform/graphics/win/WKCACFLayerRenderer.h:
        (WebCore::WKCACFLayerRenderer::setHostWindow):

2010-03-02  Mark Rowe  <mrowe@apple.com>

        Rubber-stamped by Jon Honeycutt.

        ScriptDebugServer shouldn't care that Mac does not use PluginView for plug-ins.

        * bindings/js/ScriptDebugServer.cpp:
        * plugins/PluginViewNone.cpp:
        (WebCore::PluginView::setJavaScriptPaused): Add an empty implementation of setJavaScriptPaused.

2010-03-02  Mark Rowe  <mrowe@apple.com>

        Rubber-stamped by Jon Honeycutt.

        Clean up the build fix r55437 by adding an empty implementation of privateBrowsingStateChanged in PluginViewNone.cpp

        * page/Page.cpp:
        * plugins/PluginViewNone.cpp:
        (WebCore::PluginView::privateBrowsingStateChanged):

2010-03-02  Mark Rowe  <mrowe@apple.com>

        Fix the Mac build.

        * page/Page.cpp:
        (WebCore::Page::privateBrowsingStateChanged): Mac doesn't use WebCore's PluginView class
        for plug-ins, so provide an empty implementation of privateBrowsingStateChanged for Mac.

2010-03-02  Andy Estes  <aestes@apple.com>

        Reviewed by Maciej Stachowiak.

        Add the capability to create and dispatch a WheelEvent in JavaScript.
        Ensure the event's default handler is triggered in the same way as it is
        during a PlatformWheelEvent.

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

        Test: fast/events/wheelevent-in-scrolling-div.html

        * dom/Node.cpp: Ensure that the default behavior (scrolling) occurs for
        wheel events originating both from the platform and from
        JavaScript/ObjC.
        (WebCore::Node::dispatchWheelEvent): Instantiate new WheelEvent with
        the graunularity of the PlatformWheelEvent.
        (WebCore::Node::defaultEventHandler): Add support for mousewheel events.
        * dom/WheelEvent.cpp: Add three new member variables: m_deltaX, m_deltaY
        and m_granularity.  m_deltaX and m_deltaY differ from m_wheelDeltaX and
        m_wheelDeltaY, which are the number of wheel ticks multiplied by 120 for
        IE compatibility.
        (WebCore::WheelEvent::WheelEvent): Initialize new member variables.
        (WebCore::WheelEvent::initWheelEvent): Same.
        (WebCore::WheelEvent::initWebKitWheelEvent): Same.
        * dom/WheelEvent.h: See WheelEvent.cpp.
        (WebCore::WheelEvent::): Add Granularity enum (Pixel, Line, Page).
        (WebCore::WheelEvent::create): Add new arguments.
        (WebCore::WheelEvent::deltaX): Amount of scroll in x direction.
        (WebCore::WheelEvent::deltaY): Amount of scroll in y direction.
        (WebCore::WheelEvent::granularity): Units of deltaX and deltaY.
        * dom/WheelEvent.idl: Add initWebKitWheelEvent() to JavaScript.  This is
        the same as the initWheelEvent ObjC method.  As the DOM Level 3 Events
        specification is still a working draft and subject to change, prefix
        'WebKit' to the method signature to indicate experimental support.
        * page/EventHandler.cpp: Move the scroll handling from
        handleWheelEvent() to defaultWheelEventHandler(), which is executed on
        both PlatformWheelEvents and JavaScript WheelEvents.
        (WebCore::scrollNode): Renamed from scrollAndAcceptEvent().  Remove
        the PlatformWheelEvent from the argument list and instead return a
        boolean indicating if the scroll event was accepted.
        (WebCore::EventHandler::handleWheelEvent): Move scrolling code from here
        (WebCore::EventHandler::defaultWheelEventHandler): ...to here.
        * page/EventHandler.h: Add function signature.

2010-03-02  Mark Rowe  <mrowe@apple.com>

        Reviewed by Darin Adler.

        Bug 35576: WebKit should tell plug-in instances when private browsing state changes
        <http://webkit.org/b/35576>

        Notify plug-in instances when the private browsing state changes to match the behavior of the
        Mac plug-in code.

        * page/Page.cpp:
        (WebCore::Page::privateBrowsingStateChanged): Walk the frame tree and notify each PluginView that
        the private browsing state has changed.
        * page/Page.h:
        * page/Settings.cpp:
        (WebCore::Settings::setPrivateBrowsingEnabled): Notify the page that the private browsing state
        has changed.
        * plugins/PluginView.cpp:
        (WebCore::PluginView::privateBrowsingStateChanged): Notify the plug-in instance of the new private
        browsing state.
        * plugins/PluginView.h:

2010-03-02  Mark Rowe  <mrowe@apple.com>

        Reviewed by Oliver Hunt.

        Bug 30348: Implement private mode for plug-ins on Windows
        <http://webkit.org/b/30348> / <rdar://problem/7562261>

        Rework PluginView::getValue and PluginView::getValueStatic to remove the amount of code that
        was duplicated across platforms.  getValue and getValueStatic now call in to platform-specific
        variants that indicate whether they handled the query.  If the query is not handled by the
        platform-specific variants then the cross-platform handler has a chance to handle it.

        * plugins/PluginView.cpp:
        (WebCore::PluginView::getValueStatic): Give the platform-specific variant a chance to handle the
        variable lookup.  If it does not handle it, return an error.
        (WebCore::PluginView::getValue): Give the platform-specific variant and platform-specific static
        variant a chance to handle the variable lookup.  If they do not handle it, apply the cross-platform
        handler.  At the moment the cross-platform code handles NPNVWindowNPObject, NPNVPluginElementNPObject,
        and NPNVprivateModeBool as they have an identical implementation across ports.
        * plugins/PluginView.h:
        * plugins/PluginViewNone.cpp:
        (WebCore::PluginView::platformGetValue): PluginViewNone does not handle any lookups.
        (WebCore::PluginView::platformGetValueStatic): Ditto.
        * plugins/gtk/PluginViewGtk.cpp:
        (WebCore::PluginView::platformGetValueStatic):
        (WebCore::PluginView::platformGetValue):
        platform-independent implementation.
        * plugins/mac/PluginViewMac.cpp:
        (WebCore::PluginView::platformGetValueStatic):
        (WebCore::PluginView::platformGetValue):
        * plugins/qt/PluginViewQt.cpp:
        (WebCore::PluginView::platformGetValueStatic):
        (WebCore::PluginView::platformGetValue): Fix a bug noticed while updating this code.
        The Qt implementation of the handler for NPNVToolkit was relying on case fall-through
        to have some values handled by the static handler.  When NPNVprivateModeBool was added
        it was placed before the default case, interferring with this fall-through.  It now
        explicitly indicates in this situation that it was not handled.
        * plugins/symbian/PluginViewSymbian.cpp:
        (WebCore::PluginView::platformGetValueStatic):
        (WebCore::PluginView::platformGetValue):
        * plugins/win/PluginViewWin.cpp:
        (WebCore::PluginView::platformGetValueStatic):
        (WebCore::PluginView::platformGetValue):

2010-03-02  Anders Carlsson  <andersca@apple.com>

        Reviewed by Sam Weinig.

        Make the default constructor available to all platforms.

        * platform/PlatformKeyboardEvent.h:
        (WebCore::PlatformKeyboardEvent::PlatformKeyboardEvent):
        * platform/mac/KeyEventMac.mm:

2010-03-02  Jeremy Orlow  <jorlow@chromium.org>

        Reviewed by David Levin.

        Revert database thread changes that are no longer required
        https://bugs.webkit.org/show_bug.cgi?id=35519

        Jochen Eisinger created 55214 and 55247 to track which database
        owns which thread.  Dmitry suggested that this could also
        be done via TLS, though.  After exploring the options, Jochen
        chose to go the TLS route, so these patches are no longer needed.

        * storage/DatabaseThread.cpp:
        (WebCore::DatabaseThread::DatabaseThread):
        (WebCore::DatabaseThread::databaseThread):
        * storage/DatabaseThread.h:
        (WebCore::DatabaseThread::getThreadID):

2010-03-02  Brady Eidson  <beidson@apple.com>

        Reviewed by Sam Weinig.

        Followup for REGRESSION(r51097) - Unable to log in to statefarm.com
        <rdar://problem/7672667> and https://bugs.webkit.org/show_bug.cgi?id=35556

        * dom/ScriptElement.cpp:
        (WebCore::ScriptElementData::shouldExecuteAsJavaScript): To more perfectly match Gecko's rule,
          strip whitespace from the attribute values before comparing to window/onload/onload().

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

        Reviewed by Beth Dakin.

        aria-label isn't respected on option elements
        https://bugs.webkit.org/show_bug.cgi?id=35400

        When aria-label is used on an <option> element, it can take three forms.
        An option in a multi-select list, a popup button and the menu that is displayed 
        from the popup button. This patches the three requisite locations so that if
        aria-label is used, the correct accessibility text is returned.

        Test: platform/mac/accessibility/option-with-arialabel.html

        * accessibility/AccessibilityListBoxOption.cpp:
        (WebCore::AccessibilityListBoxOption::stringValue):
        * accessibility/AccessibilityObject.cpp:
        (WebCore::AccessibilityObject::getAttribute):
        * accessibility/AccessibilityObject.h:
        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::getAttribute):
        (WebCore::AccessibilityRenderObject::stringValue):
        * platform/PopupMenuClient.h:
        * platform/mac/PopupMenuMac.mm:
        (WebCore::PopupMenu::populate):
        * rendering/RenderMenuList.cpp:
        (WebCore::RenderMenuList::itemAccessibilityText):
        * rendering/RenderMenuList.h:
        * rendering/RenderTextControlSingleLine.h:
        (WebCore::RenderTextControlSingleLine::itemAccessibilityText):

2010-03-02  Mads Ager  <ager@chromium.org>

        Reviewed by Adam Barth.

        [V8] V8 should be notified of context disposals
        https://bugs.webkit.org/show_bug.cgi?id=35526

        Notify V8 of context disposals to allow it to clean up memory from those
        contexts when idle.  When disposing a context, start a timer that will
        give V8 an idle notification after a while to force cleanup.  Use a timer
        to avoid performing an idle notification in the middle of navigation where
        we know we are not idle.

        * WebCore.gypi:
        * bindings/v8/V8DOMWindowShell.cpp:
        (WebCore::V8DOMWindowShell::disposeContextHandles):
        * bindings/v8/V8GCForContextDispose.cpp: Added.
        (WebCore::V8GCForContextDispose::V8GCForContextDispose):
        (WebCore::V8GCForContextDispose::notifyContextDisposed):
        (WebCore::V8GCForContextDispose::notifyIdleSooner):
        (WebCore::V8GCForContextDispose::instance):
        (WebCore::V8GCForContextDispose::pseudoIdleTimerFired):
        * bindings/v8/V8GCForContextDispose.h: Added.
        * bindings/v8/custom/V8DOMWindowCustom.cpp:
        (WebCore::WindowSetTimeoutImpl):

2010-03-02  Pavel Feldman  <pfeldman@chromium.org>

        Not reviewed: adding missing image files to WebKit.qrc and gypi.

        * WebCore.gypi:
        * inspector/front-end/WebKit.qrc:

2010-03-02  Kim Grönholm  <kim.gronholm@nomovok.com>

        Reviewed by Simon Hausmann.

        [Qt] GraphicsLayer: Video element with 3d transform crashes when AC is enabled.
        https://bugs.webkit.org/show_bug.cgi?id=35516

        No new tests.

        * platform/graphics/qt/GraphicsLayerQt.cpp:
        (WebCore::GraphicsLayerQt::setContentsToMedia):

2010-03-02  Fridrich Strba  <fridrich.strba@bluewin.ch>

        Reviewed by Xan Lopez.

        Use unsigned instead of uint which does not exist on windows
        https://bugs.webkit.org/show_bug.cgi?id=35546

        * platform/graphics/gtk/ImageGtk.cpp:
        (WebCore::getCairoSurfacePixel):
        (WebCore::getGdkPixbufPixel):

2010-03-02  Kenneth Russell  <kbr@google.com>

        Reviewed by Darin Fisher.

        Add EnabledAtRuntime attribute to WebGLArray constructors
        https://bugs.webkit.org/show_bug.cgi?id=35558

        New functionality verified manually in Chromium; not possible to
        write layout test. Ran WebGL tests in WebKit as well.

        * bindings/generic/RuntimeEnabledFeatures.cpp:
        * bindings/generic/RuntimeEnabledFeatures.h:
        (WebCore::RuntimeEnabledFeatures::setWebGLEnabled):
        (WebCore::RuntimeEnabledFeatures::webGLRenderingContextEnabled):
        (WebCore::RuntimeEnabledFeatures::webGLArrayBufferEnabled):
        (WebCore::RuntimeEnabledFeatures::webGLByteArrayEnabled):
        (WebCore::RuntimeEnabledFeatures::webGLUnsignedByteArrayEnabled):
        (WebCore::RuntimeEnabledFeatures::webGLShortArrayEnabled):
        (WebCore::RuntimeEnabledFeatures::webGLUnsignedShortArrayEnabled):
        (WebCore::RuntimeEnabledFeatures::webGLIntArrayEnabled):
        (WebCore::RuntimeEnabledFeatures::webGLUnsignedIntArrayEnabled):
        (WebCore::RuntimeEnabledFeatures::webGLFloatArrayEnabled):
        * page/DOMWindow.idl:

2010-03-02  Nate Chapin  <japhet@chromium.org>

        Reviewed by Dimitri Glazkov.

        [V8] Fail gracefully if NPN_GetProperty tries to retrieve a property that doesn't exist.

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

        Required for passing LayoutTests/plugins/netscape-plugin-property-access-exception.html on Chromium.

        * bindings/v8/NPV8Object.cpp:
        (_NPN_GetProperty): If the result is empty, don't try to convert it to an NPVariant and return false.

2010-03-02  Jian Li  <jianli@chromium.org>

        Reviewed by Nate Chapin.

        [V8] DOMCoreException should be visible as DOMException 
        https://bugs.webkit.org/show_bug.cgi?id=35552

        Fix V8 code generator to use the correct visible name.

        * bindings/scripts/CodeGeneratorV8.pm:

2010-03-02  Brady Eidson  <beidson@apple.com>

        Reviewed by Sam Weinig.

        REGRESSION(r51097) - Unable to log in to statefarm.com
        <rdar://problem/7672667> and https://bugs.webkit.org/show_bug.cgi?id=35556

        Test: fast/loader/for-window-event-onload-scripts.html

        Match Gecko's rules for executing "for/event" scripts:
          -If there's only a 'for' attribute, execute it.
          -If there's only an 'event' attribute, execute it.
          -If there's a 'for=window' and 'event=onload', execute it.
          -If there's a 'for=window' and 'event=onload()', execute it.
          -If there's any other combination of both 'for' and 'event', don't execute it.

        * dom/ScriptElement.cpp:
        (WebCore::ScriptElementData::shouldExecuteAsJavaScript):
        * dom/ScriptElement.h:

        * html/HTMLScriptElement.cpp:
        (WebCore::HTMLScriptElement::eventAttributeValue):
        * html/HTMLScriptElement.h:

        * svg/SVGScriptElement.cpp:
        (WebCore::SVGScriptElement::eventAttributeValue):
        * svg/SVGScriptElement.h:

        Add the event attribute name:
        * html/HTMLAttributeNames.in:


2010-03-02  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Dan Bernstein.

        https://bugs.webkit.org/show_bug.cgi?id=35555
        QuickTime plugin content can spill outside the <object> tag

        Set -masksToBounds on the layer that is handed to us by plug-ins, to ensure that sublayers
        of that layer don't spill outside the <object> contents rect.
        
        Manual test because it relies on QuickTime, and pixel results depend on movie loading timing.

        * manual-tests/plugins/object-clipping.html: Added.
        * platform/graphics/mac/GraphicsLayerCA.mm:
        (WebCore::GraphicsLayerCA::setupContentsLayer):

2010-03-02  Adam Roben  <aroben@apple.com>

        Export SecurityOrigin::registerURLSchemeAsSecure

        Fixes <http://webkit.org/b/35580> <rdar://problem/7706407> Expose
        SecurityOrigin::registerURLSchemeAsSecure as WebKit SPI

        Reviewed by Tim Hatcher.

        * WebCore.base.exp: Added symbol, sorted file.

2010-03-02  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Timothy Hatcher.

        Web Inspector: render breakpoints as border images instead of canvas.

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

        * inspector/front-end/Images/breakpointBorder.png: Added.
        * inspector/front-end/Images/breakpointConditionalBorder.png: Added.
        * inspector/front-end/Images/breakpointConditionalCounterBorder.png: Added.
        * inspector/front-end/Images/breakpointCounterBorder.png: Added.
        * inspector/front-end/Images/programCounterBorder.png: Added.
        * inspector/front-end/SourceFrame.js:
        (WebInspector.SourceFrame.prototype._updateExecutionLine):
        (WebInspector.SourceFrame.prototype._addBreakpointToSource):
        (WebInspector.SourceFrame.prototype.resize):
        * inspector/front-end/TextViewer.js:
        (WebInspector.TextChunk):
        * inspector/front-end/textViewer.css:

2010-01-28  Holger Hans Peter Freyther  <zecke@selfish.org>

        Reviewed by Ariya Hidayat.

        [Qt] Special case Font::floatWidthForComplexText for single space
        https://bugs.webkit.org/show_bug.cgi?id=33876

        For a single space we can go through the QFontMetric::width routine
        instead of converting the WebCore::String to a QString and then
        going through the QTextLine.

        * platform/graphics/qt/FontQt.cpp:
        (WebCore::Font::floatWidthForComplexText):

2010-02-28  Holger Hans Peter Freyther  <zecke@selfish.org>

        Reviewed by Gustavo Noronha.

        [Gtk] Support private browsing mode in plugins.
        https://bugs.webkit.org/show_bug.cgi?id=35500

        Integrate the PluginViewQt.cpp changes from r55358 into Gtk+.

        * plugins/gtk/PluginViewGtk.cpp:
        (WebCore::PluginView::getValue):

2010-03-02  Oliver Hunt  <oliver@apple.com>

        Reviewed by NOBODY (Build fix).

        Update Qt bridge to new named getter signature

        * bridge/qt/qt_runtime.cpp:
        (JSC::Bindings::QtRuntimeMetaMethod::lengthGetter):
        (JSC::Bindings::QtRuntimeMetaMethod::connectGetter):
        (JSC::Bindings::QtRuntimeMetaMethod::disconnectGetter):
        (JSC::Bindings::QtRuntimeConnectionMethod::lengthGetter):
        * bridge/qt/qt_runtime.h:

2010-03-01  Philippe Normand  <pnormand@igalia.com>

        Reviewed by Gustavo Noronha.

        [GTK] Move gstreamer-related source files to platform/graphics/gstreamer
        https://bugs.webkit.org/show_bug.cgi?id=35518

        Moved GStreamer-related files to platform/graphics/gstreamer so
        other ports could benefit from this media player implementation.

        * GNUmakefile.am:
        * platform/graphics/gstreamer/DataSourceGStreamer.cpp: Renamed from WebCore/platform/graphics/gtk/DataSourceGStreamer.cpp.
        (_do_init):
        (webkit_data_src_base_init):
        (webkit_data_src_class_init):
        (webkit_data_src_reset):
        (webkit_data_src_init):
        (webkit_data_src_finalize):
        (webkit_data_src_change_state):
        (webkit_data_src_uri_get_type):
        (webkit_data_src_uri_get_protocols):
        (webkit_data_src_uri_get_uri):
        (webkit_data_src_uri_set_uri):
        (webkit_data_src_uri_handler_init):
        * platform/graphics/gstreamer/DataSourceGStreamer.h: Renamed from WebCore/platform/graphics/gtk/DataSourceGStreamer.h.
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp: Renamed from WebCore/platform/graphics/gtk/MediaPlayerPrivateGStreamer.cpp.
        (WebCore::greatestCommonDivisor):
        (WebCore::mediaPlayerPrivateMessageCallback):
        (WebCore::mediaPlayerPrivateSourceChangedCallback):
        (WebCore::mediaPlayerPrivateVolumeChangedCallback):
        (WebCore::notifyVolumeIdleCallback):
        (WebCore::mediaPlayerPrivateMuteChangedCallback):
        (WebCore::notifyMuteIdleCallback):
        (WebCore::bufferingTimeoutCallback):
        (WebCore::playbackPosition):
        (WebCore::mediaPlayerPrivateRepaintCallback):
        (WebCore::MediaPlayerPrivate::create):
        (WebCore::MediaPlayerPrivate::registerMediaEngine):
        (WebCore::doGstInit):
        (WebCore::MediaPlayerPrivate::isAvailable):
        (WebCore::MediaPlayerPrivate::MediaPlayerPrivate):
        (WebCore::MediaPlayerPrivate::~MediaPlayerPrivate):
        (WebCore::MediaPlayerPrivate::load):
        (WebCore::MediaPlayerPrivate::changePipelineState):
        (WebCore::MediaPlayerPrivate::play):
        (WebCore::MediaPlayerPrivate::pause):
        (WebCore::MediaPlayerPrivate::duration):
        (WebCore::MediaPlayerPrivate::currentTime):
        (WebCore::MediaPlayerPrivate::seek):
        (WebCore::MediaPlayerPrivate::startEndPointTimerIfNeeded):
        (WebCore::MediaPlayerPrivate::cancelSeek):
        (WebCore::MediaPlayerPrivate::endPointTimerFired):
        (WebCore::MediaPlayerPrivate::paused):
        (WebCore::MediaPlayerPrivate::seeking):
        (WebCore::MediaPlayerPrivate::naturalSize):
        (WebCore::MediaPlayerPrivate::hasVideo):
        (WebCore::MediaPlayerPrivate::hasAudio):
        (WebCore::MediaPlayerPrivate::setVolume):
        (WebCore::MediaPlayerPrivate::volumeChangedCallback):
        (WebCore::MediaPlayerPrivate::volumeChanged):
        (WebCore::MediaPlayerPrivate::setRate):
        (WebCore::MediaPlayerPrivate::networkState):
        (WebCore::MediaPlayerPrivate::readyState):
        (WebCore::MediaPlayerPrivate::buffered):
        (WebCore::MediaPlayerPrivate::processBufferingStats):
        (WebCore::MediaPlayerPrivate::queryBufferingStats):
        (WebCore::MediaPlayerPrivate::maxTimeSeekable):
        (WebCore::MediaPlayerPrivate::maxTimeLoaded):
        (WebCore::MediaPlayerPrivate::bytesLoaded):
        (WebCore::MediaPlayerPrivate::totalBytes):
        (WebCore::MediaPlayerPrivate::cancelLoad):
        (WebCore::MediaPlayerPrivate::updateStates):
        (WebCore::MediaPlayerPrivate::mediaLocationChanged):
        (WebCore::MediaPlayerPrivate::loadNextLocation):
        (WebCore::MediaPlayerPrivate::loadStateChanged):
        (WebCore::MediaPlayerPrivate::sizeChanged):
        (WebCore::MediaPlayerPrivate::timeChanged):
        (WebCore::MediaPlayerPrivate::didEnd):
        (WebCore::MediaPlayerPrivate::durationChanged):
        (WebCore::MediaPlayerPrivate::supportsMuting):
        (WebCore::MediaPlayerPrivate::setMuted):
        (WebCore::MediaPlayerPrivate::muteChangedCallback):
        (WebCore::MediaPlayerPrivate::muteChanged):
        (WebCore::MediaPlayerPrivate::loadingFailed):
        (WebCore::MediaPlayerPrivate::setSize):
        (WebCore::MediaPlayerPrivate::setVisible):
        (WebCore::MediaPlayerPrivate::repaint):
        (WebCore::MediaPlayerPrivate::paint):
        (WebCore::mimeTypeCache):
        (WebCore::MediaPlayerPrivate::getSupportedTypes):
        (WebCore::MediaPlayerPrivate::supportsType):
        (WebCore::MediaPlayerPrivate::hasSingleSecurityOrigin):
        (WebCore::MediaPlayerPrivate::supportsFullscreen):
        (WebCore::MediaPlayerPrivate::setAutobuffer):
        (WebCore::MediaPlayerPrivate::createGSTPlayBin):
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.h: Renamed from WebCore/platform/graphics/gtk/MediaPlayerPrivateGStreamer.h.
        (WebCore::MediaPlayerPrivate::pipelineReset):
        * platform/graphics/gstreamer/VideoSinkGStreamer.cpp: Renamed from WebCore/platform/graphics/gtk/VideoSinkGStreamer.cpp.
        (webkit_video_sink_base_init):
        (webkit_video_sink_init):
        (webkit_video_sink_timeout_func):
        (webkit_video_sink_render):
        (webkit_video_sink_dispose):
        (unlock_buffer_mutex):
        (webkit_video_sink_unlock):
        (webkit_video_sink_unlock_stop):
        (webkit_video_sink_stop):
        (webkit_video_sink_start):
        (marshal_VOID__MINIOBJECT):
        (webkit_video_sink_class_init):
        (webkit_video_sink_new):
        * platform/graphics/gstreamer/VideoSinkGStreamer.h: Renamed from WebCore/platform/graphics/gtk/VideoSinkGStreamer.h.
        * platform/graphics/gstreamer/WebKitWebSourceGStreamer.cpp: Renamed from WebCore/platform/graphics/gtk/WebKitWebSourceGStreamer.cpp.
        (doInit):
        (webkit_web_src_base_init):
        (webkit_web_src_class_init):
        (webkit_web_src_init):
        (webKitWebSrcFinalize):
        (webKitWebSrcSetProperty):
        (webKitWebSrcGetProperty):
        (webKitWebSrcStop):
        (webKitWebSrcStart):
        (webKitWebSrcChangeState):
        (webKitWebSrcUriGetType):
        (webKitWebSrcGetProtocols):
        (webKitWebSrcGetUri):
        (webKitWebSrcSetUri):
        (webKitWebSrcUriHandlerInit):
        (webKitWebSrcNeedDataMainCb):
        (webKitWebSrcNeedDataCb):
        (webKitWebSrcEnoughDataMainCb):
        (webKitWebSrcEnoughDataCb):
        (webKitWebSrcSeekMainCb):
        (webKitWebSrcSeekDataCb):
        (webKitWebSrcSetFrame):
        (StreamingClient::StreamingClient):
        (StreamingClient::~StreamingClient):
        (StreamingClient::willSendRequest):
        (StreamingClient::didReceiveResponse):
        (StreamingClient::didReceiveData):
        (StreamingClient::didFinishLoading):
        (StreamingClient::didFail):
        (StreamingClient::wasBlocked):
        (StreamingClient::cannotShowURL):
        * platform/graphics/gstreamer/WebKitWebSourceGStreamer.h: Renamed from WebCore/platform/graphics/gtk/WebKitWebSourceGStreamer.h.

2010-03-01  Oliver Hunt  <oliver@apple.com>

        Reviewed by Maciej Stachowiak.

        Refactor named getter function signature to be in line with indexing getter signature
        https://bugs.webkit.org/show_bug.cgi?id=35563

        Fix up WebCore to use the new named getter function signature, update the
        codegenerator to the new calling convention, and fix the custom bindings.

        * bindings/js/JSCSSStyleDeclarationCustom.cpp:
        (WebCore::JSCSSStyleDeclaration::nameGetter):
        * bindings/js/JSDOMBinding.cpp:
        (WebCore::objectToStringFunctionGetter):
        * bindings/js/JSDOMBinding.h:
        * bindings/js/JSDOMWindowCustom.cpp:
        (WebCore::nonCachingStaticFunctionGetter):
        (WebCore::childFrameGetter):
        (WebCore::namedItemGetter):
        * bindings/js/JSDataGridColumnListCustom.cpp:
        (WebCore::JSDataGridColumnList::nameGetter):
        * bindings/js/JSHTMLAllCollectionCustom.cpp:
        (WebCore::JSHTMLAllCollection::nameGetter):
        * bindings/js/JSHTMLCollectionCustom.cpp:
        (WebCore::JSHTMLCollection::nameGetter):
        * bindings/js/JSHTMLDocumentCustom.cpp:
        (WebCore::JSHTMLDocument::nameGetter):
        * bindings/js/JSHTMLFormElementCustom.cpp:
        (WebCore::JSHTMLFormElement::nameGetter):
        * bindings/js/JSHTMLFrameSetElementCustom.cpp:
        (WebCore::JSHTMLFrameSetElement::nameGetter):
        * bindings/js/JSHistoryCustom.cpp:
        (WebCore::nonCachingStaticBackFunctionGetter):
        (WebCore::nonCachingStaticForwardFunctionGetter):
        (WebCore::nonCachingStaticGoFunctionGetter):
        * bindings/js/JSLocationCustom.cpp:
        (WebCore::nonCachingStaticReplaceFunctionGetter):
        (WebCore::nonCachingStaticReloadFunctionGetter):
        (WebCore::nonCachingStaticAssignFunctionGetter):
        * bindings/js/JSMimeTypeArrayCustom.cpp:
        (WebCore::JSMimeTypeArray::nameGetter):
        * bindings/js/JSNamedNodeMapCustom.cpp:
        (WebCore::JSNamedNodeMap::nameGetter):
        * bindings/js/JSNodeListCustom.cpp:
        (WebCore::JSNodeList::nameGetter):
        * bindings/js/JSPluginArrayCustom.cpp:
        (WebCore::JSPluginArray::nameGetter):
        * bindings/js/JSPluginCustom.cpp:
        (WebCore::JSPlugin::nameGetter):
        * bindings/js/JSPluginElementFunctions.cpp:
        (WebCore::runtimeObjectPropertyGetter):
        * bindings/js/JSPluginElementFunctions.h:
        * bindings/js/JSStorageCustom.cpp:
        (WebCore::JSStorage::nameGetter):
        * bindings/js/JSStyleSheetListCustom.cpp:
        (WebCore::JSStyleSheetList::nameGetter):
        * bindings/scripts/CodeGeneratorJS.pm:
        * bridge/runtime_array.cpp:
        (JSC::RuntimeArray::lengthGetter):
        * bridge/runtime_array.h:
        * bridge/runtime_method.cpp:
        (JSC::RuntimeMethod::lengthGetter):
        * bridge/runtime_method.h:
        * bridge/runtime_object.cpp:
        (JSC::Bindings::RuntimeObject::fallbackObjectGetter):
        (JSC::Bindings::RuntimeObject::fieldGetter):
        (JSC::Bindings::RuntimeObject::methodGetter):
        * bridge/runtime_object.h:

2010-03-01  Oliver Hunt  <oliver@apple.com>

        Reviewed by Gavin Barraclough.

        PropertySlot::getValue(ExecState, unsigned) unnecessarily converts index to an Identifier
        https://bugs.webkit.org/show_bug.cgi?id=35561

        Update bindings generation and the few manual indexing getters we have to use
        the new PropertySlot API.

        * bindings/js/JSDOMWindowCustom.cpp:
        (WebCore::indexGetter):
        * bindings/scripts/CodeGeneratorJS.pm:
        * bridge/runtime_array.cpp:
        (JSC::RuntimeArray::indexGetter):
        * bridge/runtime_array.h:

2010-03-01  Chris Fleizach  <cfleizach@apple.com>

        Reviewed by Darin Adler.

        AX: changes to WAI-ARIA grid aren't perceived correctly by VoiceOver
        https://bugs.webkit.org/show_bug.cgi?id=35514

        When a table's DOM is changed and an AX Table is not asked first for its children,
        it would return wrong information. A table needs to make sure children are up to date in
        all methods that can be called from the outside.

        Test: platform/mac/accessibility/stale-table-rows.html

        * accessibility/AccessibilityARIAGrid.cpp:
        (WebCore::AccessibilityARIAGrid::cellForColumnAndRow):
        * accessibility/AccessibilityObject.cpp:
        (WebCore::AccessibilityObject::clearChildren):
        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::clearChildren):
        (WebCore::AccessibilityRenderObject::updateChildrenIfNecessary):
        (WebCore::AccessibilityRenderObject::children):
        * accessibility/AccessibilityRenderObject.h:
        (WebCore::AccessibilityRenderObject::needsToUpdateChildren):
        (WebCore::AccessibilityRenderObject::setNeedsToUpdateChildren):
        * accessibility/AccessibilityTable.cpp:
        (WebCore::AccessibilityTable::clearChildren):
        (WebCore::AccessibilityTable::columns):
        (WebCore::AccessibilityTable::rows):
        (WebCore::AccessibilityTable::rowHeaders):
        (WebCore::AccessibilityTable::columnHeaders):
        (WebCore::AccessibilityTable::cells):
        (WebCore::AccessibilityTable::columnCount):
        (WebCore::AccessibilityTable::rowCount):
        (WebCore::AccessibilityTable::cellForColumnAndRow):

2010-03-01  Jakob Petsovits  <jpetsovits@rim.com>

        Reviewed by Adam Barth.

        Convert the zoom mode (page vs. text-only) into a proper enum.
        https://bugs.webkit.org/show_bug.cgi?id=35347

        * GNUmakefile.am:
        * WebCore.base.exp: Substituted symbols __ZN7WebCore5Frame13setZoomFactorEfNS_8ZoomModeE
        and __ZN7WebCore8Settings11setZoomModeENS_8ZoomModeE for __ZN7WebCore5Frame13setZoomFactorEfb
        and __ZN7WebCore8Settings16setZoomsTextOnlyEb, respectively.
        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * page/Frame.cpp:
        (WebCore::Frame::zoomMode):
        (WebCore::Frame::shouldApplyTextZoom):
        (WebCore::Frame::shouldApplyPageZoom):
        (WebCore::Frame::setZoomFactor):
        * page/Frame.h:
        * page/Settings.cpp:
        (WebCore::Settings::Settings):
        (WebCore::Settings::setZoomMode):
        * page/Settings.h:
        (WebCore::Settings::zoomMode):
        * page/ZoomMode.h: Added.
        (WebCore::):
        * svg/SVGSVGElement.cpp:
        (WebCore::SVGSVGElement::setCurrentScale):

2010-03-01  Alex Milowski  <alex@milowski.com>

        Reviewed by Kenneth Rohde Christiansen.

        Added support for the msubsup element that also handles the msup and msub elements.

        Test: mathml/presentation/subsup.xhtml

        * WebCore.xcodeproj/project.pbxproj:
        * mathml/MathMLInlineContainerElement.cpp:
        (WebCore::MathMLInlineContainerElement::createRenderer):
        * mathml/RenderMathMLSubSup.cpp: Added.
        (WebCore::RenderMathMLSubSup::RenderMathMLSubSup):
        (WebCore::RenderMathMLSubSup::addChild):
        (WebCore::RenderMathMLSubSup::stretchToHeight):
        (WebCore::RenderMathMLSubSup::nonOperatorHeight):
        (WebCore::RenderMathMLSubSup::layout):
        (WebCore::RenderMathMLSubSup::baselinePosition):
        * mathml/RenderMathMLSubSup.h: Added.
        (WebCore::RenderMathMLSubSup::hasBase):
        (WebCore::RenderMathMLSubSup::):

2010-03-01  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Timothy Hatcher.

        Web Inspector: use dejavu sans mono 11px on linux.

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

        * inspector/front-end/inspector.css:

2010-03-01  Thatcher Ulrich  <tulrich@google.com>

        Reviewed by Darin Fisher.

        Fix chromium iframe shims.  Add another test case to the
        iframes-shims test.  After r53637, the plugin widget doesn't get
        moved every paint.  This used to hide the bug that if an iframe
        gets added, the plugin's cutout rectangles don't get updated until
        a layout happens.
        https://bugs.webkit.org/show_bug.cgi?id=35184

        * platform/Widget.h:
        (WebCore::Widget::widgetPositionsUpdated): new virtual method
            widgetPositionsUpdated() to notify widgets when other widgets on
            the page have been repositioned.
        * rendering/RenderView.cpp:
        (WebCore::RenderView::updateWidgetPositions): call widgetPositionsUpdated() on the widgets
        * rendering/RenderWidget.cpp:
        (WebCore::RenderWidget::widgetPositionsUpdated): call widgetPositionsUpdated() on the widget
        * rendering/RenderWidget.h:

2010-03-01  Fridrich Strba  <fridrich.strba@bluewin.ch>

        Reviewed by Holger Freyther.

        Dist some mathml related files

        * GNUmakefile.am:

2010-03-01  Kenneth Russell  <kbr@google.com>

        Reviewed by Oliver Hunt.

        Integer overflow in WebGL arrays
        https://bugs.webkit.org/show_bug.cgi?id=35241

        Test: fast/canvas/webgl/webgl-array-invalid-ranges.html

        * bindings/js/JSWebGLArrayBufferConstructor.cpp:
        (WebCore::constructCanvasArrayBuffer):
        * bindings/js/JSWebGLArrayBufferConstructor.h:
        (WebCore::construct):
        * bindings/js/JSWebGLArrayHelper.h:
        (WebCore::setWebGLArrayFromArray):
        * bindings/js/JSWebGLByteArrayConstructor.cpp:
        (WebCore::constructCanvasByteArray):
        * bindings/js/JSWebGLFloatArrayConstructor.cpp:
        (WebCore::constructCanvasFloatArray):
        * bindings/js/JSWebGLIntArrayConstructor.cpp:
        (WebCore::constructCanvasIntArray):
        * bindings/js/JSWebGLShortArrayConstructor.cpp:
        (WebCore::constructCanvasShortArray):
        * bindings/js/JSWebGLUnsignedByteArrayConstructor.cpp:
        (WebCore::constructCanvasUnsignedByteArray):
        * bindings/js/JSWebGLUnsignedIntArrayConstructor.cpp:
        (WebCore::constructCanvasUnsignedIntArray):
        * bindings/js/JSWebGLUnsignedShortArrayConstructor.cpp:
        (WebCore::constructCanvasUnsignedShortArray):
        * bindings/v8/V8Binding.cpp:
        (WebCore::toUInt32):
        * bindings/v8/V8Binding.h:
        (WebCore::toUInt32):
        * bindings/v8/custom/V8WebGLArrayBufferCustom.cpp:
        (WebCore::V8WebGLArrayBuffer::constructorCallback):
        * bindings/v8/custom/V8WebGLArrayCustom.h:
        (WebCore::constructWebGLArray):
        (WebCore::getWebGLArrayElement):
        (WebCore::setWebGLArrayFromArray):
        (WebCore::setWebGLArray):
        * bindings/v8/custom/V8WebGLByteArrayCustom.cpp:
        (WebCore::V8WebGLByteArray::constructorCallback):
        * bindings/v8/custom/V8WebGLFloatArrayCustom.cpp:
        (WebCore::V8WebGLFloatArray::constructorCallback):
        * bindings/v8/custom/V8WebGLIntArrayCustom.cpp:
        (WebCore::V8WebGLIntArray::constructorCallback):
        * bindings/v8/custom/V8WebGLShortArrayCustom.cpp:
        (WebCore::V8WebGLShortArray::constructorCallback):
        * bindings/v8/custom/V8WebGLUnsignedByteArrayCustom.cpp:
        (WebCore::V8WebGLUnsignedByteArray::constructorCallback):
        * bindings/v8/custom/V8WebGLUnsignedIntArrayCustom.cpp:
        (WebCore::V8WebGLUnsignedIntArray::constructorCallback):
        * bindings/v8/custom/V8WebGLUnsignedShortArrayCustom.cpp:
        (WebCore::V8WebGLUnsignedShortArray::constructorCallback):
        * html/canvas/WebGLArray.cpp:
        (WebCore::WebGLArray::setImpl):
        * html/canvas/WebGLArray.h:
        (WebCore::WebGLArray::verifySubRange):
        (WebCore::WebGLArray::clampOffsetAndNumElements):
        * html/canvas/WebGLArrayBuffer.cpp:
        (WebCore::WebGLArrayBuffer::create):
        (WebCore::WebGLArrayBuffer::WebGLArrayBuffer):
        (WebCore::WebGLArrayBuffer::tryAllocate):
        * html/canvas/WebGLArrayBuffer.h:
        * html/canvas/WebGLByteArray.cpp:
        (WebCore::WebGLByteArray::create):
        (WebCore::WebGLByteArray::WebGLByteArray):
        (WebCore::WebGLByteArray::slice):
        * html/canvas/WebGLByteArray.h:
        * html/canvas/WebGLFloatArray.cpp:
        (WebCore::WebGLFloatArray::create):
        (WebCore::WebGLFloatArray::WebGLFloatArray):
        (WebCore::WebGLFloatArray::slice):
        * html/canvas/WebGLFloatArray.h:
        * html/canvas/WebGLIntArray.cpp:
        (WebCore::WebGLIntArray::create):
        (WebCore::WebGLIntArray::WebGLIntArray):
        (WebCore::WebGLIntArray::slice):
        * html/canvas/WebGLIntArray.h:
        * html/canvas/WebGLShortArray.cpp:
        (WebCore::WebGLShortArray::create):
        (WebCore::WebGLShortArray::WebGLShortArray):
        (WebCore::WebGLShortArray::slice):
        * html/canvas/WebGLShortArray.h:
        * html/canvas/WebGLUnsignedByteArray.cpp:
        (WebCore::WebGLUnsignedByteArray::create):
        (WebCore::WebGLUnsignedByteArray::WebGLUnsignedByteArray):
        (WebCore::WebGLUnsignedByteArray::slice):
        * html/canvas/WebGLUnsignedByteArray.h:
        * html/canvas/WebGLUnsignedIntArray.cpp:
        (WebCore::WebGLUnsignedIntArray::create):
        (WebCore::WebGLUnsignedIntArray::WebGLUnsignedIntArray):
        (WebCore::WebGLUnsignedIntArray::slice):
        * html/canvas/WebGLUnsignedIntArray.h:
        * html/canvas/WebGLUnsignedShortArray.cpp:
        (WebCore::WebGLUnsignedShortArray::create):
        (WebCore::WebGLUnsignedShortArray::WebGLUnsignedShortArray):
        (WebCore::WebGLUnsignedShortArray::slice):
        * html/canvas/WebGLUnsignedShortArray.h:

2010-03-01  Brady Eidson  <beidson@apple.com>

        Reviewed by Sam Weinig.

        REGRESSION: Telling a WebView to go to its current WebHistoryItem is broken.
        <rdar://problem/7699371> and https://bugs.webkit.org/show_bug.cgi?id=35532

        Test: fast/loader/api-test-go-to-current-back-forward-item.html

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::loadItem): If the current item is the same as the target item, don't
          consider this to be a same document navigation.

        * page/Page.cpp:
        (WebCore::Page::goToItem): Hard code the "going to the same item as the current item" relationship
          as a precondition for stopping all loaders, as that will be a new document load.

2010-03-01  Robert Hogan  <robert@webkit.org>

        Reviewed by nobody, build fix.

        Fix --minimal build. Add ENABLE(DATABASE) as compile time condition
        for building file GeolocationPositionCache.cpp.

        * page/GeolocationPositionCache.cpp:

2010-03-01  Jakob Petsovits  <jpetsovits@rim.com>

        Reviewed by Dirk Schulze.

        [OpenVG] Implement support for paths
        https://bugs.webkit.org/show_bug.cgi?id=34366

        Adds an implementation of the Path class -
        *almost* complete, but not quite because OpenVG
        does not provide access to the points in a VGPath
        unless one keeps track of all the points by
        themselves, which we decided not to do.

        Also hooked up to PainterOpenVG and GraphicsContext.

        Further introduced is SharedResourceOpenVG, which is
        intended as base class for paths and other OpenVG
        resources (images, fonts) that WebKit creates as
        long-lived objects. We are at a slight disadvantage
        here as WebKit doesn't have the concept of resources
        belonging to a specific (hardware graphics) context,
        which is the reason why EGLDisplayOpenVG had to
        provide a current display singleton; this class is
        what actually requires that functionality.

        Path::addArcTo() uses code by Yong Li <yoli@rim.com>.

        * platform/graphics/Path.cpp:
        * platform/graphics/Path.h:
        * platform/graphics/openvg/GraphicsContextOpenVG.cpp:
        (WebCore::GraphicsContext::fillPath):
        (WebCore::GraphicsContext::strokePath):
        (WebCore::GraphicsContext::drawPath):
        (WebCore::GraphicsContext::beginPath):
        (WebCore::GraphicsContext::addPath):
        * platform/graphics/openvg/PainterOpenVG.cpp:
        (WebCore::PainterOpenVG::PainterOpenVG):
        (WebCore::PainterOpenVG::~PainterOpenVG):
        (WebCore::PainterOpenVG::transformPath):
        (WebCore::PainterOpenVG::beginPath):
        (WebCore::PainterOpenVG::addPath):
        (WebCore::PainterOpenVG::currentPath):
        (WebCore::PainterOpenVG::drawPath):
        * platform/graphics/openvg/PainterOpenVG.h:
        * platform/graphics/openvg/PathOpenVG.cpp: Added.
        (WebCore::PlatformPathOpenVG::PlatformPathOpenVG):
        (WebCore::PlatformPathOpenVG::operator=):
        (WebCore::PlatformPathOpenVG::~PlatformPathOpenVG):
        (WebCore::PlatformPathOpenVG::clear):
        (WebCore::PlatformPathOpenVG::createPath):
        (WebCore::Path::Path):
        (WebCore::Path::~Path):
        (WebCore::Path::operator=):
        (WebCore::Path::contains):
        (WebCore::Path::strokeContains):
        (WebCore::Path::translate):
        (WebCore::Path::boundingRect):
        (WebCore::Path::strokeBoundingRect):
        (WebCore::Path::moveTo):
        (WebCore::Path::addLineTo):
        (WebCore::Path::addQuadCurveTo):
        (WebCore::Path::addBezierCurveTo):
        (WebCore::Path::addArcTo):
        (WebCore::Path::closeSubpath):
        (WebCore::Path::addArc):
        (WebCore::Path::addRect):
        (WebCore::Path::addEllipse):
        (WebCore::Path::clear):
        (WebCore::Path::isEmpty):
        (WebCore::Path::hasCurrentPoint):
        (WebCore::Path::debugString):
        (WebCore::Path::apply):
        (WebCore::Path::transform):
        (WebCore::Path::length):
        (WebCore::Path::pointAtLength):
        (WebCore::Path::normalAngleAtLength):
        * platform/graphics/openvg/PlatformPathOpenVG.h: Added.
        (WebCore::PlatformPathOpenVG::vgPath):
        * platform/graphics/openvg/SharedResourceOpenVG.cpp: Added.
        (WebCore::SharedResourceOpenVG::makeSharedContextCurrent):
        (WebCore::SharedResourceOpenVG::makeCompatibleContextCurrent):
        * platform/graphics/openvg/SharedResourceOpenVG.h: Added.

2010-03-01  Pavel Feldman  <pfeldman@chromium.org>

        Not reviewed, bring English.lproj/locallizedStrings.js back to binary (UTF) mode.

        * English.lproj/localizedStrings.js:

2010-03-01  Jakob Petsovits  <jpetsovits@rim.com>

        Reviewed by Nikolas Zimmermann.

        [OpenVG] Convert from TransformationMatrix to AffineTransform.
        https://bugs.webkit.org/show_bug.cgi?id=35445

        Dirk Schulze previously introduced AffineTransform as
        replacement for most TransformationMatrix occurrences
        in GraphicsContext & Co., but did not update the OpenVG
        graphics backend as there's no publicly available way
        to build it. This commit now takes care of that.

        * platform/graphics/openvg/GraphicsContextOpenVG.cpp:
        (WebCore::GraphicsContext::getCTM):
        (WebCore::GraphicsContext::roundToDevicePixels):
        (WebCore::GraphicsContext::origin):
        (WebCore::GraphicsContext::concatCTM):
        * platform/graphics/openvg/PainterOpenVG.cpp:
        (WebCore::isNonRotatedAffineTransformation):
        (WebCore::PlatformPainterState::PlatformPainterState):
        (WebCore::PlatformPainterState::applyState):
        (WebCore::PlatformPainterState::applyTransformation):
        (WebCore::PainterOpenVG::transformation):
        (WebCore::PainterOpenVG::concatTransformation):
        (WebCore::PainterOpenVG::setTransformation):
        (WebCore::PainterOpenVG::scale):
        (WebCore::PainterOpenVG::rotate):
        (WebCore::PainterOpenVG::translate):
        (WebCore::PainterOpenVG::intersectClipRect):
        * platform/graphics/openvg/PainterOpenVG.h:
        * platform/graphics/openvg/VGUtils.cpp:
        (WebCore::VGMatrix::VGMatrix):
        (WebCore::VGMatrix::operator AffineTransform):
        (WebCore::VGMatrix::operator TransformationMatrix):
        (WebCore::AffineTransform::operator VGMatrix):
        * platform/graphics/openvg/VGUtils.h:
        * platform/graphics/transforms/AffineTransform.h:

2010-03-01  Tor Arne Vestbø  <tor.arne.vestbo@nokia.com>

        Reviewed by Simon Hausmann.

        [Qt] Fix segfault when drawing NPAPI plugins on Mac

        Don't try to get a contexctRef for a null-pixmap. If the pixmap
        size is 0,0 the private pixmap data has not yet been initialized.

        * plugins/mac/PluginViewMac.cpp:

2010-03-01  Tor Arne Vestbø  <tor.arne.vestbo@nokia.com>

        Reviewed by Simon Hausmann.

        Fix the Qt build on Mac OS X/Cocoa 64-bit

        Use the proper event/drawing-model guards instead of global 64-bit
        guard for the NPAPI plugin implementation (view and package).

        * plugins/mac/PluginPackageMac.cpp: Change guards and fix warning
        * plugins/mac/PluginViewMac.cpp: Remove 64-bit guard

2010-02-27  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Timothy Hatcher.

        Web Inspector: disable breakpoint upon Shift-click.

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

        * inspector/front-end/ConsoleView.js:
        (WebInspector.ConsoleView.prototype._format):
        * inspector/front-end/SourceFrame.js:
        (WebInspector.SourceFrame.prototype._mouseDown):
        (WebInspector.SourceFrame.prototype._mouseMove):
        * inspector/front-end/textViewer.css:

2010-02-28  Alexey Proskuryakov  <ap@apple.com>

        Reviewed by Dan Bernstein.

        https://bugs.webkit.org/show_bug.cgi?id=35496
        <rdar://problem/7663444> Opening newsweek.com and youtube.com has become very slow in debug builds

        * css/CSSStyleSelector.cpp:
        (WebCore::CSSRuleSet::getIDRules):
        (WebCore::CSSRuleSet::getClassRules):
        (WebCore::CSSRuleSet::getTagRules):
        Removed consistency checks, as they affect performance too much in this case.

2010-02-28  Robert Hogan  <robert@roberthogan.net>

        Reviewed by Simon Hausmann.

        [Qt] Support private browsing mode in plugins

        Add support for NPNVprivateModeBool property in plugins.

        See also: https://developer.mozilla.org/En/Supporting_private_browsing_in_plugins

        The NPNVprivateModeBool property is supported as scriptable property privateBrowsingEnabled
        in the test WebKit plugin. The Mac platform also supports a cachedPrivateBrowsingEnabled
        property implemented in the test plugin. This allows the Layout test
        plugins/private-browsing-mode.html to retrieve the previous value of NPNVprivateModeBool
        in the test plugin. Due to the platform-specific overhead required to support this bespoke
        property it is not implemented as part of this patch, instead a new test,
        plugins/private-browsing-mode-2.html, is added to ensure that setting and resetting
        privateBrowsingEnabled works as expected.

        http://bugs.webkit.org/show_bug.cgi?id=33180

        Test: plugins/private-browsing-mode-2.html

        * plugins/qt/PluginViewQt.cpp:
        (WebCore::PluginView::getValue):


2010-02-27  Joseph Pecoraro  <joepeck@webkit.org>

        Reviewed by Timothy Hatcher.

        Web Inspector shouldn't show a white color box for "-webkit-line-break: after-white-space"
        https://bugs.webkit.org/show_bug.cgi?id=33478

        * inspector/front-end/StylesSidebarPane.js:

2010-02-27  Dan Bernstein  <mitz@apple.com>

        Reviewed by Maciej Stachowiak.

        <rdar://problem/7696607> Links do not respect -webkit-user-drag: none
        https://bugs.webkit.org/show_bug.cgi?id=35475

        Test: fast/css/user-drag-none.html

        * page/DragController.cpp:
        (WebCore::DragController::mayStartDragAtEventLocation): Added a node
        parameter. The image drag check is done against the node, rather than
        than against the hit test result. This prevents a non-draggable image
        with an auto-draggable ancestor from being dragged alone. The link drag
        check now ignores links that are -webkit-user-drag: none.
        * page/DragController.h:
        * page/EventHandler.cpp:
        (WebCore::EventHandler::shouldDragAutoNode): Pass the current node
        to mayStartDragAtEventLocation().

2010-02-27  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Timothy Hatcher.

        Web Inspector: REGRESSION: hangs when scrolling in Resource pane.

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

        * inspector/front-end/TextEditorHighlighter.js:
        (WebInspector.TextEditorHighlighter):
        (WebInspector.TextEditorHighlighter.prototype.highlight):
        (WebInspector.TextEditorHighlighter.prototype._highlightInChunks):
        (WebInspector.TextEditorHighlighter.prototype._highlightLines):

2010-02-27  Xan Lopez  <xlopez@igalia.com>

        Reviewed by Gustavo Noronha.

        Abort XEmbed plugin initialization if our parent is not anchored
        in a widget hierarchy. This can happen when the browser window is
        destroyed while the plugin is being loaded, and will lead to a
        crash.

        * plugins/gtk/PluginViewGtk.cpp:
        (WebCore::PluginView::platformStart):

2010-02-26  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Timothy Hatcher.

        Web Inspector: reload inspected page on Cmd+R / Ctrl+R / F5 key event in inspector.
        Drive-by fix for couple of minor front-end problems.

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

        * inspector/InspectorBackend.cpp:
        (WebCore::InspectorBackend::reloadPage):
        * inspector/InspectorBackend.h:
        * inspector/InspectorBackend.idl:
        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::didFinishLoading):
        (WebCore::InspectorController::didFailLoading):
        * inspector/front-end/InspectorBackendStub.js:
        (.WebInspector.InspectorBackendStub.prototype.reloadPage):
        * inspector/front-end/InspectorFrontendHostStub.js:
        (.WebInspector.InspectorFrontendHostStub.prototype.copyText):
        (.WebInspector.InspectorFrontendHostStub.prototype.canAttachWindow):
        * inspector/front-end/TextViewer.js:
        (WebInspector.TextViewer.prototype._paintLine):
        * inspector/front-end/inspector.js:
        (WebInspector.documentKeyDown):
        (WebInspector.toggleAttach):

2010-02-26  Leandro Pereira  <leandro@profusion.mobi>

        Reviewed by Kenneth Rohde Christiansen.

        Add EFL port files to platform/efl.
        http://webkit.org/b/35087

        * platform/efl/ScrollbarEfl.cpp: Added.
        * platform/efl/EventLoopEfl.cpp: Added.
        * platform/efl/PlatformKeyboardEventEfl.cpp: Added.
        * platform/efl/DragImageEfl.cpp: Added.
        * platform/efl/PlatformMouseEventEfl.cpp: Added.

2010-02-26  Leandro Pereira  <leandro@profusion.mobi>

        Reviewed by Kenneth Rohde Christiansen.

        Add EFL port files to platform/efl.
        http://webkit.org/b/35087

        * platform/efl/CursorEfl.cpp: Added.
        * platform/efl/LocalizedStringsEfl.cpp: Added.
        * platform/efl/SearchPopupMenuEfl.cpp: Added.

2010-02-26  Leandro Pereira  <leandro@profusion.mobi>

        Reviewed by Kenneth Rohde Christiansen.

        Add EFL port files to page/efl.
        http://webkit.org/b/35087

        * WebCore/page/efl/DragControllerEfl.cpp: Added.
        * WebCore/page/efl/FrameEfl.cpp: Added.
        * WebCore/page/efl/AccessibilityObjectEfl.cpp: Added.
        * WebCore/page/efl/EventHandlerEfl.cpp: Added.

2010-02-26  Leandro Pereira  <leandro@profusion.mobi>

        Reviewed by Kenneth Rohde Christiansen.

        Add EFL port files to platform/efl.
        http://webkit.org/b/35087

        * WebCore/platform/efl/LoggingEfl.cpp: Added.
        * WebCore/platform/efl/ScrollbarThemeEfl.cpp: Added.
        * WebCore/platform/efl/TemporaryLinkStubs.cpp: Added.
        * WebCore/platform/efl/ScrollViewEfl.cpp: Added.
        * WebCore/platform/efl/SharedBufferEfl.cpp: Added.
        * WebCore/platform/efl/DragDataEfl.cpp: Added.

2010-02-26  Leandro Pereira  <leandro@profusion.mobi>

        Reviewed by Kenneth Rohde Christiansen.

        Add EFL port files to platform/efl.
        http://webkit.org/b/35087

        * WebCore/platform/efl/RenderThemeEfl.cpp: Added.

2010-02-26  Leandro Pereira  <leandro@profusion.mobi>

        Reviewed by Kenneth Rohde Christiansen.

        Add EFL port files to platform/efl.
        http://webkit.org/b/35087

        * WebCore/platform/efl/PlatformWheelEventEfl.cpp: Added.
        * WebCore/platform/efl/FileChooserEfl.cpp: Added.
        * WebCore/platform/efl/ContextMenuEfl.cpp: Added.
        * WebCore/platform/efl/PlatformScreenEfl.cpp: Added.
        * WebCore/platform/efl/WidgetEfl.cpp: Added.

2010-02-26  Adam Barth  <abarth@webkit.org>

        Reviewed by Darin Fisher.

        Expose an API for ports to add schemes to the mixed content whitelist
        https://bugs.webkit.org/show_bug.cgi?id=35438

        Add a notion of a "secure" scheme that doesn't trigger mixed content
        warnings.  Let folks register new secure schemes in the same way they
        can register "local" schemes.

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::isMixedContent):
        * page/SecurityOrigin.cpp:
        (WebCore::secureSchemes):
        (WebCore::SecurityOrigin::registerURLSchemeAsSecure):
        (WebCore::SecurityOrigin::shouldTreatURLSchemeAsSecure):
        * page/SecurityOrigin.h:

2010-02-26  Noam Rosenthal  <noam.rosenthal@nokia.com>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] GraphicsLayerQt: artifacts and wrong transformOrigin
        This was due to wrong way of applying cache-mode and transformation
        on a graphics-item with HTML. Cache-mode should be updated
        when the content type updates, even if it was the same cache-mode
   
        https://bugs.webkit.org/show_bug.cgi?id=35382

        Test URL attached to the bug now works correctly.

        * platform/graphics/qt/GraphicsLayerQt.cpp:
        (WebCore::GraphicsLayerQtImpl::computeTransform):
        (WebCore::GraphicsLayerQtImpl::flushChanges):

2010-02-26  Luiz Agostini  <luiz.agostini@openbossa.org>

        Reviewed by Kenneth Rohde Christiansen.

        Qt/Mac: Revert null timer removal (r51105)
        https://bugs.webkit.org/show_bug.cgi?id=35396

        r51105 removed the null timer event of the carbon event model. This however
        breaks the flash of many sites.        

        Applying patch suggested by Girish Ramakrishnan in bug comment #1.

        * plugins/PluginView.h:
        * plugins/mac/PluginViewMac.cpp:
        (WebCore::PluginView::platformStart):
        (WebCore::PluginView::handleMouseEvent):
        (WebCore::PluginView::nullEventTimerFired):
        (WebCore::PluginView::mousePosForPlugin):

2010-02-26  Noam Rosenthal  <noam.rosenthal@nokia.com>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] Compile error with 3d-canvas
        Replaced a direct gl call with a getProcAddress call
        https://bugs.webkit.org/show_bug.cgi?id=35448

        No new tests.

        * platform/graphics/qt/GraphicsContext3DQt.cpp:
        (WebCore::GraphicsContext3D::blendColor):

2010-02-26  Kwang Yul Seo  <skyul@company100.net>

        Reviewed by Kenneth Rohde Christiansen.

        [BREWMP] Port EventHandler
        https://bugs.webkit.org/show_bug.cgi?id=34796

        Add platform-specific code required to implement EventHandler.

        * page/brew/EventHandlerBrew.cpp: Added.
        (WebCore::EventHandler::tabsToAllControls):
        (WebCore::EventHandler::focusDocumentView):
        (WebCore::EventHandler::passWidgetMouseDownEventToWidget):
        (WebCore::EventHandler::passMouseDownEventToWidget):
        (WebCore::EventHandler::eventActivatedView):
        (WebCore::EventHandler::passSubframeEventToSubframe):
        (WebCore::EventHandler::passWheelEventToWidget):
        (WebCore::EventHandler::passMousePressEventToSubframe):
        (WebCore::EventHandler::passMouseMoveEventToSubframe):
        (WebCore::EventHandler::passMouseReleaseEventToSubframe):
        (WebCore::EventHandler::accessKeyModifiers):

2010-02-26  Leandro Pereira  <leandro@profusion.mobi>

        Reviewed by Kenneth Rohde Christiansen.

        Add EFL port files to platform/efl.
        http://webkit.org/b/35087

        * WebCore/platform/efl/ClipboardEfl.cpp: Added.
        * WebCore/platform/efl/PopupMenuEfl.cpp: Added.
        * WebCore/platform/efl/SharedTimerEfl.cpp: Added.
        * WebCore/platform/efl/RenderThemeEfl.h: Added.
        * WebCore/platform/efl/Language.cpp: Added.
        * WebCore/platform/efl/CookieJarEfl.cpp: Added.
        * WebCore/platform/efl/MIMETypeRegistryEfl.cpp: Added.

2010-02-26  Robert Kroeger  <rjkroege@chromium.org>

        Reviewed by Nate Chapin

        To fire each event handler registered on an SVG node once per
        event, Chromium needs an implementation of wasCreatedFromMarkup
        added to V8LazyEventListener.h that matches the one in
        WebKit/WebCore/bindings/js/JSLazyEventListener.h.
        
        This patch adds such a matching implementation of wasCreatedFromMarkup
        to V8LazyEventListener.h.
        
        https://bugs.webkit.org/show_bug.cgi?id=35325

        * bindings/v8/V8LazyEventListener.h:
        (WebCore::V8LazyEventListener::wasCreatedFromMarkup):

2010-02-26  Arno Renevier  <arno@renevier.net>

        Reviewed by Gustavo Noronha Silva.

        [Gtk] use geoclue_position_get_position_async to get geolocation position.
        https://bugs.webkit.org/show_bug.cgi?id=35355

        No new tests, behaviour depends on system.

        * platform/gtk/GeolocationServiceGtk.cpp:
        (WebCore::GeolocationServiceGtk::startUpdating):
        (WebCore::GeolocationServiceGtk::get_position):
        * platform/gtk/GeolocationServiceGtk.h:

2010-02-26  Yaar Schnitman  <yaar@chromium.org>

        Chromium Win build fix.

        * WebCore.gyp/WebCore.gyp: Added missing file to action input.

2010-02-12  Brett Wilson  <brettw@chromium.org>

        Reviewed by Adam Barth.

        Update the Google-URL version of KURL and the V8 bindings to the new
        behavior of KURL.IsStandard.

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

        This is covered by fast/dom/Window/invalid-protocol.html

        * bindings/v8/custom/V8LocationCustom.cpp:
        (WebCore::V8Location::protocolAccessorSetter):
        * platform/KURLGoogle.cpp:
        (WebCore::KURL::setProtocol):
        (WebCore::KURL::isHierarchical):

2010-02-26  Gavin Barraclough  <barraclough@apple.com>

        Reviewed by NOBODY (Build fix following r55312).

        * bridge/qt/qt_pixmapruntime.cpp:
        (JSC::Bindings::QtPixmapInstance::invokeMethod):

2010-02-26  Yaar Schnitman  <yaar@chromium.org>

        Reviewed by Dimitri Glazkov.

        [V8] Auto-generate and split DerivedSourcesAllInOne.cpp
        https://bugs.webkit.org/show_bug.cgi?id=33048

        * WebCore.gyp/WebCore.gyp:
        * WebCore.gyp/scripts/action_derivedsourcesallinone.py: Added.
        * bindings/v8/DerivedSourcesAllInOne.cpp: Removed.

2010-02-26  Gavin Barraclough  <barraclough@apple.com>

        Reviewed by NOBODY (Build fix following r55312).

        * bridge/qt/qt_pixmapruntime.cpp:
        (JSC::Bindings::QtPixmapInstance::invokeMethod):

2010-02-26  Alexey Proskuryakov  <ap@apple.com>

        Reviewed by Anders Carlsson.

        https://bugs.webkit.org/show_bug.cgi?id=35450
        Crash when a Java array property accessor raises an exception

        Test: java/inaccessible-class.html

        * bridge/jni/jsc/JNIBridgeJSC.cpp: (JavaField::valueFromInstance): Check if the result
        is null before interpreting it as an object or array.

2010-02-26  Dirk Schulze  <krit@webkit.org>

        Reviewed by Nikolas Zimmermann.

        Extend AffineTransform to mapQuad
        https://bugs.webkit.org/show_bug.cgi?id=35444

        This makes mapQuad available for AffineTransform. So that platforms
        can make use of it after the switch from TransformationMatrix to
        AffineTransform in GraphicsContext.

        * platform/graphics/transforms/AffineTransform.cpp:
        (WebCore::AffineTransform::mapRect): mapRect already did the calculation for mapQuad but gave back the
                                             boundingBox of the resulting FloatQuad.
        (WebCore::AffineTransform::mapQuad):
        * platform/graphics/transforms/AffineTransform.h:

2010-02-26  Brady Eidson  <beidson@apple.com>

        Reviewed by Pavel Feldman.

        Arrow keys do not scroll source view in Resources pane or Scripts pane.
        <rdar://problem/7594367> and https://bugs.webkit.org/show_bug.cgi?id=34356

        Handle vertical scrolling in the Text Viewer:
        * inspector/front-end/TextViewer.js:
        (WebInspector.TextViewer): Listen for the keydown event.
        (WebInspector.TextViewer.prototype._handleKeyDown): If the event has no modifiers and refers
          to an arrow key, scroll. The horizontal values were ripped from the default "pixels per scroll line"
          value in ScrollBar.h.

2010-02-26  Gavin Barraclough  <barraclough@apple.com>

        Reviewed by Alexey Proskuryakov.

        Bug 35401 - Fix handling of errors in handling calls over bridge,
        where base object bridge-type does not match method bridge-type.

        The code assumes users will only attempt to invoke a Java method
        on a Java base object, etc.
        Add language specific subclasses of RuntimeMethod, and pass the
        RuntimeMethod into invokeMethod, so we can typecheck before
        casting.  Throw an exception on type mismatch.

        * WebCore.base.exp:
        * WebCore.xcodeproj/project.pbxproj:
        * bridge/c/c_instance.cpp:
        (JSC::Bindings::CRuntimeMethod::CRuntimeMethod):new class to distinguish this type of RuntimeMethod.
        (JSC::Bindings::CInstance::getMethod): create an appropriate sublclass of RuntimeMethod.
        (JSC::Bindings::CInstance::invokeMethod): dynamically check the type of the RuntimeMethod.
        * bridge/c/c_instance.h:
        * bridge/jni/jsc/JavaInstanceJSC.cpp:
        (JavaRuntimeMethod::JavaRuntimeMethod): new class to distinguish this type of RuntimeMethod.
        (JavaInstance::getMethod): create an appropriate sublclass of RuntimeMethod.
        (JavaInstance::invokeMethod): dynamically check the type of the RuntimeMethod.
        * bridge/jni/jsc/JavaInstanceJSC.h:
        * bridge/jsc/BridgeJSC.h:
        * bridge/objc/objc_instance.h:
        * bridge/objc/objc_instance.mm:
        (ObjcRuntimeMethod::ObjcRuntimeMethod): new class to distinguish this type of RuntimeMethod.
        (ObjcInstance::getMethod): create an appropriate sublclass of RuntimeMethod.
        (ObjcInstance::invokeMethod): dynamically check the type of the RuntimeMethod.
        (ObjcInstance::invokeObjcMethod): new method, takes an ObjcMethod* as an argument so that we don't need to dynamically determine the type.
        * bridge/objc/objc_runtime.mm:
        (JSC::Bindings::callObjCFallbackObject): use new invokeObjcMethod method.
        * bridge/runtime_method.cpp:
        (JSC::callRuntimeMethod): pass RuntimeMethod as argument to invokeMethod, rather than its MethodList.
        * bridge/runtime_object.cpp:
        (JSC::RuntimeObject::methodGetter): use new getMethod method.

2010-02-26  Oliver Hunt  <oliver@apple.com>

        Reviewed by Geoff Garen.

        Make the lookup table generator include an explicit cast to expected
        type of the function.  We do this because otherwise the blind intptr_t
        cast that is subsequently applied allows incorrectly typed functions
        to be inserted into the table, where they will only fail at runtime.
        This change makes such errors produce a compile time failure.

        * WebCore.xcodeproj/project.pbxproj:
        * bindings/scripts/CodeGeneratorJS.pm:

2010-02-26  Alex Milowski  <alex@milowski.com>

        Reviewed by Kenneth Rohde Christiansen.

        Added basic support for the munder, munderover, and mover elements.

        Tests: mathml/presentation/over.xhtml
               mathml/presentation/under.xhtml
               mathml/presentation/underover.xhtml

        * WebCore.xcodeproj/project.pbxproj:
        * mathml/MathMLInlineContainerElement.cpp:
        (WebCore::MathMLInlineContainerElement::createRenderer):
        * mathml/RenderMathMLUnderOver.cpp: Added.
        (WebCore::RenderMathMLUnderOver::RenderMathMLUnderOver):
        (WebCore::RenderMathMLUnderOver::addChild):
        (WebCore::getOffsetHeight):
        (WebCore::RenderMathMLUnderOver::stretchToHeight):
        (WebCore::RenderMathMLUnderOver::layout):
        (WebCore::RenderMathMLUnderOver::baselinePosition):
        (WebCore::RenderMathMLUnderOver::nonOperatorHeight):
        * mathml/RenderMathMLUnderOver.h: Added.
        (WebCore::RenderMathMLUnderOver::hasBase):
        (WebCore::RenderMathMLUnderOver::):

2010-02-24  Stephen White  <senorblanco@chromium.org>

        Reviewed by Darin Adler.

        This CL implements a simple ad-hoc parser for CSS rgb() values.
        If it fails, it returns false and the normal lex/yacc parser will
        be invoked.
        
        https://bugs.webkit.org/show_bug.cgi?id=35362

        Covered by fast/canvas/canvas-bg.html, fast/canvas/canvas-bg-zoom.html,
        and many more.

        * css/CSSParser.cpp:
        (WebCore::parseInt):
        (WebCore::CSSParser::parseColor):

2010-02-26  Jarkko Sakkinen  <jarkko.sakkinen@tieto.com>

        Reviewed by Kenneth Rohde Christiansen.

        https://bugs.webkit.org/show_bug.cgi?id=35419
        3D canvas did not update when WTF_USE_ACCELERATED_COMPOSITING
        was enabled but not from run-time settings. Added run-time 
        check that compositing is enabled.

        * html/canvas/WebGLRenderingContext.cpp:
        (WebCore::WebGLRenderingContext::markContextChanged):

2010-02-26  Jarkko Sakkinen  <jarkko.sakkinen@tieto.com>

        Reviewed by Kenneth Rohde Christiansen.

        Compilation failed because functions glSampleCoverage, glBlendEquation
        and glActiveTexture were not available.
        https://bugs.webkit.org/show_bug.cgi?id=35423

        * platform/graphics/qt/GraphicsContext3DQt.cpp:
        (WebCore::GraphicsContext3DInternal::GraphicsContext3DInternal):
        (WebCore::GraphicsContext3D::activeTexture):
        (WebCore::GraphicsContext3D::blendEquation):
        (WebCore::GraphicsContext3D::sampleCoverage):

2010-02-26  Jarkko Sakkinen  <jarkko.sakkinen@tieto.com>
 
         Reviewed by Kenneth Rohde Christiansen.

         https://bugs.webkit.org/show_bug.cgi?id=35380
         Fixed compilation error when WTF_USE_ACCELERATED_COMPOSITING=0
 
         * css/MediaQueryEvaluator.cpp:
         (WebCore::transform_3dMediaFeatureEval):

2010-02-26  Nicholas Young  <nicholas.young@nokia.com>

        Reviewed by Tor Arne Vestbø.

        [Qt] Incorrect painting after a size changed.
        https://bugs.webkit.org/show_bug.cgi?id=35412

        No new tests. Bug fix in backend.

        * platform/graphics/qt/MediaPlayerPrivateQt.cpp:
        (WebCore::MediaPlayerPrivate::paint): Provide the source rectangle, rather than inferring it.

2010-02-26  Nicholas Young  <nicholas.young@nokia.com>

        Reviewed by Tor Arne Vestbø.

        [Qt] Incorrect handling of MIME types in Media Player
        https://bugs.webkit.org/show_bug.cgi?id=35413

        No new tests. Bug fix in backend.

        * platform/graphics/qt/MediaPlayerPrivateQt.cpp:
        (WebCore::MediaPlayerPrivate::supportsType): Corrected logic.

2010-02-26  Joanmarie Diggs  <joanmarie.diggs@gmail.com>

        Reviewed by Xan Lopez.

        https://bugs.webkit.org/show_bug.cgi?id=35418
        [Gtk] Every table, including layout tables, should be exposed as a table

        This patch exposes layout tables as tables. (Addressing the problematic table
        hierarchy remains to be done.)

        * accessibility/gtk/AccessibilityObjectAtk.cpp:
        (AccessibilityObject::accessibilityPlatformIncludesObject):
        * accessibility/AccessibilityRenderObject.cpp:
        (AccessibilityRenderObject::determineAccessibilityRole):

2010-02-26  Adam Barth  <abarth@webkit.org>

        Reviewed by Darin Adler.

        XSSAuditor is super super super slow
        https://bugs.webkit.org/show_bug.cgi?id=35373

        In this patch, we separate the decoding cache for the page's URL and
        form data.  Previously, we used the same cache for both, which caused
        us miss the cache every time when the page had form data (because the
        cache only stored one entry).  When the form data is large, we were
        wasting a lot of time canonicalizing.

        * page/XSSAuditor.cpp:
        (WebCore::XSSAuditor::findInRequest):
        * page/XSSAuditor.h:

2010-02-26  Dirk Schulze  <krit@webkit.org>

        Reviewed by Nikolas Zimmermann.

        SVGResourceClipper needs to be moved to RenderSVGResourceClipper
        https://bugs.webkit.org/show_bug.cgi?id=35421

        Move SVGResourceClipper to RenderSVGResourceClipper. This follows the changes
        of Masker and helps to clean up the SVG code. Code snippets from SVGClipPathElement
        and SVGResourceClipper got combined in RenderSVGResourceClipper. DRT results are
        more readable for clipPath's now. It's possible to see the unit type of clipper, as
        well as it's childs instead of just one path.

        * Android.mk:
        * GNUmakefile.am:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * rendering/RenderSVGResource.h:
        (WebCore::):
        * rendering/RenderSVGResourceClipper.cpp: Added.
        (WebCore::RenderSVGResourceClipper::RenderSVGResourceClipper):
        (WebCore::RenderSVGResourceClipper::~RenderSVGResourceClipper):
        (WebCore::RenderSVGResourceClipper::invalidateClients):
        (WebCore::RenderSVGResourceClipper::invalidateClient):
        (WebCore::RenderSVGResourceClipper::applyResource):
        (WebCore::RenderSVGResourceClipper::resourceBoundingBox):
        * rendering/RenderSVGResourceClipper.h: Added.
        (WebCore::RenderSVGResourceClipper::renderName):
        (WebCore::RenderSVGResourceClipper::resourceType):
        (WebCore::RenderSVGResourceClipper::clipPathUnits):
        * rendering/SVGRenderSupport.cpp:
        (WebCore::SVGRenderBase::prepareToRenderSVGContent):
        (WebCore::SVGRenderBase::clipperBoundingBoxForRenderer):
        (WebCore::SVGRenderBase::deregisterFromResources):
        * rendering/SVGRenderTreeAsText.cpp:
        (WebCore::operator<<):
        (WebCore::writeStyle):
        (WebCore::writeSVGResource):
        (WebCore::writeResources):
        * svg/SVGClipPathElement.cpp:
        (WebCore::SVGClipPathElement::svgAttributeChanged):
        (WebCore::SVGClipPathElement::childrenChanged):
        (WebCore::SVGClipPathElement::createRenderer):
        * svg/SVGClipPathElement.h:
        (WebCore::SVGClipPathElement::isValid):
        * svg/SVGStyledElement.cpp:
        (WebCore::SVGStyledElement::invalidateResources):
        * svg/graphics/SVGResource.h:
        (WebCore::):
        (WebCore::SVGResource::isPaintServer):
        (WebCore::SVGResource::isFilter):
        (WebCore::SVGResource::isMarker):
        * svg/graphics/SVGResourceClipper.cpp: Removed.
        * svg/graphics/SVGResourceClipper.h: Removed.

2010-02-26  Ben Murdoch  <benm@google.com>

        Reviewed by Kenneth Rohde Christiansen.

        The element that a touchevent is dispatched to isn't always right
        https://bugs.webkit.org/show_bug.cgi?id=35431

        The element that touch events are dispatched on is not always the
        correct one, as the cached m_touchEventTarget member is only updated
        when the first element of the PlatformTouchEvent touch list is in the
        TouchPressed state.

        This patch changes this behavior to dispatch the event to the target
        of the touch that caused the event to be generated and eliminates the
        m_touchEventTarget in favour of using the touch target hashmap. It also
        simplifies the way in which the touchTargets list is generated as we
        no longer have m_touchEventTarget (which was used previously to build
        the list). The new behavior matches the observed behavior of the
        iPhone and Android.

        * page/EventHandler.cpp:
        (WebCore::assembleTargetTouches): Added. new function to build the
            targetTouches list. Filters a list of touches (passed) about
            another given touch.
        (WebCore::EventHandler::handleTouchEvent): Remove the
            m_touchEventTarget member, and simplify the generation of the
            TouchLists that are bundled with the TouchEVent object. Dispatch
            the event to the target of the touch that caused the event to be
            fired.
        * page/EventHandler.h: Remove m_touchEventTarget.

2010-02-26  Dirk Pranke  <dpranke@chromium.org>

        Reviewed by Darin Fisher.

        Fix the handling of updates to #hash fragments to check for differences
        post-canonicalization rather than comparing pre- to post-. Chromium
        had a bug where we would set the #hash on an about:blank URL and generate
        an onload event because we thought the URL (not just the fragment) was
        changing.

        http://bugs.webkit.org/show_bug.cgi?id=35180

        Test: fast/loader/about-blank-hash-change.html

        * bindings/v8/custom/V8LocationCustom.cpp:
        (WebCore::V8Location::hashAccessorSetter):

2010-02-26  Zhenyao Mo  <zmo@google.com>

        Reviewed by David Levin.

        texImage2D and texSubImage2D taking ImageData ignore flipY and premultiplyAlpha
        https://bugs.webkit.org/show_bug.cgi?id=34459

        Test: fast/canvas/webgl/tex-image-and-sub-image-2d-with-image-data.html

        * html/canvas/WebGLRenderingContext.cpp:
        (WebCore::WebGLRenderingContext::texImage2D): Apply flipY and premultiplyAlpha to the texture data.
        (WebCore::WebGLRenderingContext::texSubImage2D): Ditto.
        * platform/graphics/GraphicsContext3D.cpp:
        (WebCore::GraphicsContext3D::extractImageData): Extract data from ImageData, applying flipY and premultiplyAlpha.
        * platform/graphics/GraphicsContext3D.h: Add function extractImageData declaration.

2010-02-26  Zhenyao Mo  <zmo@google.com>

        Reviewed by David Levin.

        Set viewport to canvas size upon context creation
        https://bugs.webkit.org/show_bug.cgi?id=35057

        Covered by existing tests, in particular fast/canvas/webgl/gl-get-calls.html

        * html/canvas/WebGLRenderingContext.cpp:
        (WebCore::WebGLRenderingContext::WebGLRenderingContext): Set the viewport size to match the canvas size.

2010-02-26  Pavel Feldman  <pfeldman@chromium.org>

        Not reviewed: touch InspectorController to force front-end deployment.

        * inspector/InspectorController.cpp:

2010-02-26  Ilya Tikhonovsky  <loislo@chromium.org>

        Reviewed by Pavel Feldman.

        WebInspector: While the current timeline view in DevTools provides a great overview of
        things happening, we should make it easier to locate the cause of an event,
        e.g., link to JS where relevant.
        Caller info support for all kind of Timeline events and new Function Call event will be added.
        JSC can be patched the same way as it will be done for V8.

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

        * bindings/js/ScriptCallStack.cpp:
        (WebCore::ScriptCallStack::callLocation):
        * bindings/js/ScriptCallStack.h:
        * bindings/v8/ScriptCallStack.cpp:
        (WebCore::ScriptCallStack::create):
        (WebCore::ScriptCallStack::callLocation):
        * bindings/v8/ScriptCallStack.h:
        * bindings/v8/V8Proxy.cpp:
        (WebCore::V8Proxy::callFunction):
        * inspector/InspectorTimelineAgent.cpp:
        (WebCore::InspectorTimelineAgent::InspectorTimelineAgent):
        (WebCore::InspectorTimelineAgent::~InspectorTimelineAgent):
        (WebCore::InspectorTimelineAgent::willCallFunction):
        (WebCore::InspectorTimelineAgent::didCallFunction):
        (WebCore::InspectorTimelineAgent::pushCurrentRecord):
        * inspector/InspectorTimelineAgent.h:
        (WebCore::):
        (WebCore::InspectorTimelineAgent::instanceCount):
        * inspector/TimelineRecordFactory.cpp:
        (WebCore::TimelineRecordFactory::createGenericRecord):
        (WebCore::TimelineRecordFactory::createFunctionCallData):
        * inspector/TimelineRecordFactory.h:
        * inspector/front-end/Popover.js:
        (WebInspector.Popover.prototype.hideWhenClicked):
        (WebInspector.Popover.prototype._positionElement):
        * inspector/front-end/TimelineAgent.js:
        * inspector/front-end/TimelinePanel.js:
        (WebInspector.TimelinePanel):
        (WebInspector.TimelinePanel.prototype._innerAddRecordToTimeline):
        (WebInspector.TimelinePanel.prototype._formatRecord):
        (WebInspector.TimelinePanel.prototype._getRecordDetails):
        (WebInspector.TimelinePanel.prototype.reset):
        (WebInspector.TimelinePanel.prototype._closeRecordDetails):
        (WebInspector.TimelinePanel.prototype._onScroll):
        (WebInspector.TimelinePanel.prototype._refresh):
        (WebInspector.TimelinePanel.prototype._refreshRecords):
        (WebInspector.TimelineRecordListRow):
        (WebInspector.TimelineRecordListRow.prototype.update):
        (WebInspector.TimelineRecordListRow.prototype._createCell):
        (WebInspector.TimelineRecordListRow.prototype._createRow):
        (WebInspector.TimelineRecordListRow.prototype._createLinkRow):
        (WebInspector.TimelineRecordListRow.prototype._generateBubbleContent):
        (WebInspector.TimelineRecordListRow.prototype._onClick):
        * inspector/front-end/WebKit.qrc:
        * inspector/front-end/inspector.js:
        (WebInspector.linkifyResourceAsNode):

2010-02-26  Csaba Osztrogonác  <ossy@webkit.org>

        Unreviewed. Roll-out r55263 because it broke fast/forms/textarea-type-spaces-pretty-diff.html.
        https://bugs.webkit.org/show_bug.cgi?id=30946

        * editing/CompositeEditCommand.cpp:
        (WebCore::isWhitespace):
        (WebCore::CompositeEditCommand::rebalanceWhitespaceAt):
        * editing/InsertTextCommand.cpp:
        (WebCore::InsertTextCommand::input):
        * editing/InsertTextCommand.h:
        * editing/htmlediting.cpp:
        * editing/htmlediting.h:

2010-02-25  Mark Rowe  <mrowe@apple.com>

        Reviewed by Brady Eidson.

        <rdar://problem/7688455> REGRESSION(r55205): Crash inside dispatchEventsOnWindowAndFocusedNode when clicking link from bookmarks view

        Null-check the document's page to avoid dereferencing a null page.

        No regression test is added as this appears to be dependent on an interaction with Safari's bookmarks view that is
        not testable from within DumpRenderTree.

        * page/FocusController.cpp:
        (WebCore::dispatchEventsOnWindowAndFocusedNode):

2010-02-25  Oliver Hunt  <oliver@apple.com>

        Reviewed by Simon Fraser.

        Multiple repaints on apple.com
        https://bugs.webkit.org/show_bug.cgi?id=35409

        apple.com was triggering the fast scaling path for background images due to
        repeated repaints as more content came in.  This occured due to a two problems
        in the logic to detect scaling.  The first is that the main context is flipped
        on mac so fails the identity or translation check.  We work around this by adding
        an function that allows the scaling for a flipped CTM.  The other problem was that
        we were looking at the destination rect size instead of the destination tile size
        when deciding if the size we were drawn at would cause scaling.

        * platform/graphics/transforms/AffineTransform.h:
        (WebCore::AffineTransform::isIdentityOrTranslationOrFlipped):
        * rendering/RenderBoxModelObject.cpp:
        (WebCore::RenderBoxModelScaleObserver::shouldPaintBackgroundAtLowQuality):
        (WebCore::RenderBoxModelObject::paintFillLayerExtended):

2010-02-25  Enrica Casucci  <enrica@apple.com>

        Reviewed by Adele Peterson.

        Extra layout on keypress after a space (problem with rebalanceWhitespaceAt in InsertTextCommand).
        https://bugs.webkit.org/show_bug.cgi?id=30946
        <rdar://problem/7639184>

        Do text insertion and whitespace rebalancing around the insertion in one step so that there's only one layout.
        This patch was originally made by Justin Garcia.
        
        Test: editing/inserting/rebalance-whitespace-1.html

        * editing/CompositeEditCommand.cpp:
        (WebCore::CompositeEditCommand::rebalanceWhitespaceAt): No behavior changes here,
        just pushed the code that determined the extent of whitespace surrounding a position
        to its own helper function.
        * editing/InsertTextCommand.cpp:
        (WebCore::InsertTextCommand::insertTextIntoNodeAndRebalanceWhitespace): Added.  Find 
        whitespace surrounding the insertion position, add the text to insert, rebalance that entire
        string, then insert it into the document.
        (WebCore::InsertTextCommand::input):
        * editing/InsertTextCommand.h:
        * editing/htmlediting.cpp:
        (WebCore::isWhitespace): Moved from CompositeEditCommand.cpp.
        (WebCore::extentOfWhitespaceForRebalancingAt): Moved code from rebalanceWhitespaceAt into this helper
        function.  Obtains the offset of the start and end of whitespace around a particular position.
        * editing/htmlediting.h:

2010-02-25  Alexey Proskuryakov  <ap@apple.com>

        Reviewed by Anders Carlsson.

        https://bugs.webkit.org/show_bug.cgi?id=35406
        <rdar://problem/6945502> Make generic array methods work with JavaArray

        Test: java/array-sort.html

        Made RuntimeArray inherit from JSArray, keeping the promise given in ClassInfo.

        * bridge/runtime_array.cpp:
        (JSC::RuntimeArray::RuntimeArray):
        (JSC::RuntimeArray::~RuntimeArray):
        * bridge/runtime_array.h:
        (JSC::RuntimeArray::classInfo):
        (JSC::RuntimeArray::getConcreteArray):

2010-02-25  Dan Bernstein  <mitz@apple.com>

        Reviewed by Alexey Proskuryakov.

        Fixed a regression introduced in r44243, which made the assertion in checkListItems()
        ineffective.

        * dom/SelectElement.cpp:
        (WebCore::SelectElementData::checkListItems): Copy the items vector before recomputing it,
        then assert that the newly-computed vector is equal to the copy.

2010-02-25  Dirk Schulze  <krit@webkit.org>

        Reviewed by Nikolas Zimmermann.

        SVG's tspan is no member of SVGRenderBase, this can cause crashes on filters
        https://bugs.webkit.org/show_bug.cgi?id=35354

        This makes the base class RenderSVGInline of RenderSVGTSpan and RenderSVGInlineText
        dependent on SVGBaseRenderer.
        The SVG spec want as to use the object bounding box of the text root as the bounding box
        for text-childs. So we search for the text root and use it's bounding box, stroke rect and
        repaint rect for further calculations.

        Test: svg/filters/filter-on-tspan.svg

        * rendering/RenderSVGInline.cpp:
        (WebCore::RenderSVGInline::objectBoundingBox): Find the text root and give back it's bounding box.
        (WebCore::RenderSVGInline::strokeBoundingBox): same for stroke rect
        (WebCore::RenderSVGInline::repaintRectInLocalCoordinates): same for repaint rect
        * rendering/RenderSVGInline.h:
        (WebCore::RenderSVGInline::toSVGRenderBase): RenderSVGInline is part of SVGRenderBase now.
        * rendering/RenderSVGTSpan.h:
        (WebCore::RenderSVGTSpan::renderName): Removed bounding box code. Was just a hack for filters and maskers.
        * rendering/SVGRenderSupport.cpp:
        (WebCore::findTextRootObject): Search for the text root.
        * rendering/SVGRenderSupport.h:
        * svg/graphics/SVGPaintServerGradient.cpp: moved findTextRootObject to SVGRenderSupport

2010-02-25  Dirk Schulze  <krit@webkit.org>

        Reviewed by Nikolas Zimmermann.

        Use-element doesn't transform clipPath
        https://bugs.webkit.org/show_bug.cgi?id=35375

        If the use element is a child of clipPath, any settings on x, y or transform does not
        transform the clipPath it references.
        The use-element just misses this transformation in toClipPath.

        Test: svg/custom/use-on-clip-path-with-transformation.svg

        * platform/graphics/cairo/PathCairo.cpp: Gtk port translated the path to the wrong direction.
        (WebCore::Path::translate):
        * svg/SVGUseElement.cpp:
        (WebCore::SVGUseElement::toClipPath):

2010-02-25  Jian Li  <jianli@chromium.org>

        Reviewed by Dmitry Titov.

        File.type support.
        https://bugs.webkit.org/show_bug.cgi?id=35361

        Test: LayoutTests/editing/pasteboard/file-input-files-access.html

        * html/File.cpp:
        (WebCore::File::File):
        * html/File.h:
        (WebCore::File::type):
        * html/File.idl:

2010-02-25  Alexander Pavlov  <apavlov@chromium.org>

        Reviewed by Pavel Feldman.

        Javascript console should not attempt to scroll to end of console if console is not visible

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

        * inspector/front-end/ConsoleView.js:
        (WebInspector.ConsoleView.prototype._scheduleScrollIntoView.scrollIntoView):
        (WebInspector.ConsoleView.prototype._scheduleScrollIntoView):
        (WebInspector.ConsoleView.prototype.addMessage):

2010-02-25  Alexey Proskuryakov  <ap@apple.com>

        Qt and Gtk build fixes.

        * GNUmakefile.am:
        * WebCore.pro:
        Added CRuntimeObject.{c,cpp}.

2010-02-25  Alexey Proskuryakov  <ap@apple.com>

        Windows build fix.

        * WebCore.vcproj/WebCore.vcproj: Added CRuntimeObject.{c,cpp}.

2010-02-25  Alexey Proskuryakov  <ap@apple.com>

        Reviewed by Geoffrey Garen.

        https://bugs.webkit.org/show_bug.cgi?id=35394
        <rdar://problem/7685262> Make passing objects between Java and plug-ins work

        * WebCore.PluginHostProcess.exp: WebKit now subclasses RuntimeObject, so it needed more exports.

        * bridge/runtime_object.cpp:
        (JSC::Bindings::callRuntimeObject):
        (JSC::Bindings::callRuntimeConstructor):
        Assert that a runtime object is passed as function.

        * bridge/runtime_object.h: Moved RuntimeObject into Bindings namespace, matching other
        related classes.

        * bridge/jni/jni_jsobject.mm:
        (JavaJSObject::toString): Pass rootObject to convertValueToJValue(). It's not needed when
        constructing a string, but this function now takes it for the sake of Object.
        (JavaJSObject::convertValueToJObject): Check that object class is JavaRuntimeObject, not
        just RuntimeObject.

        * bridge/jni/jsc/JNIBridgeJSC.cpp:
        (JavaField::setValueToInstance): Pass rootObject to convertValueToJValue().
        (JavaArray::setValueAt): Ditto.

        * bridge/jni/jsc/JNIUtilityPrivate.h: convertValueToJValue() now takes a RootObject argument,
        because one is needed to gcProtect an object ghtat is wrapped into JSObject.

        * bridge/jni/jsc/JNIUtilityPrivate.cpp: (JSC::Bindings::convertValueToJValue): Convert
        JavaScript objects to Java JSObject ones. This was already happening in other code paths,
        which we should change to use common code.

        * bridge/jni/jsc/JavaInstanceJSC.cpp:
        (JavaInstance::newRuntimeObject): Create an appropriate RuntimeObject subclass,
        which is JavaRuntimeObject for Java.
        (JavaInstance::invokeMethod): Unwrap returned JavaObjects that contain JS objects.

        * WebCore.xcodeproj/project.pbxproj:
        * bindings/objc/WebScriptObject.mm:
        (+[WebScriptObject _convertValueToObjcValue:originRootObject:rootObject:]):
        * bridge/c/CRuntimeObject.cpp: Added.
        (JSC::Bindings::CRuntimeObject::CRuntimeObject):
        (JSC::Bindings::CRuntimeObject::~CRuntimeObject):
        (JSC::Bindings::CRuntimeObject::getInternalCInstance):
        * bridge/c/CRuntimeObject.h: Added.
        (JSC::Bindings::CRuntimeObject::classInfo):
        * bridge/c/c_instance.cpp:
        (JSC::Bindings::CInstance::newRuntimeObject):
        * bridge/c/c_instance.h:
        * bridge/c/c_utility.cpp:
        (JSC::Bindings::convertValueToNPVariant):
        * bridge/jni/jsc/JavaInstanceJSC.h:
        * bridge/jni/jsc/JavaRuntimeObject.cpp: Added.
        (JSC::Bindings::):
        (JSC::Bindings::JavaRuntimeObject::JavaRuntimeObject):
        (JSC::Bindings::JavaRuntimeObject::~JavaRuntimeObject):
        (JSC::Bindings::JavaRuntimeObject::getInternalJavaInstance):
        * bridge/jni/jsc/JavaRuntimeObject.h: Added.
        (JSC::Bindings::JavaRuntimeObject::classInfo):
        * bridge/jsc/BridgeJSC.h:
        * bridge/objc/ObjCRuntimeObject.h: Added.
        (JSC::Bindings::ObjCRuntimeObject::classInfo):
        * bridge/objc/ObjCRuntimeObject.mm: Added.
        (JSC::Bindings::):
        (JSC::Bindings::ObjCRuntimeObject::ObjCRuntimeObject):
        (JSC::Bindings::ObjCRuntimeObject::~ObjCRuntimeObject):
        (JSC::Bindings::ObjCRuntimeObject::getInternalObjCInstance):
        * bridge/objc/objc_instance.h:
        * bridge/objc/objc_instance.mm:
        (ObjcInstance::newRuntimeObject):
        * bridge/objc/objc_runtime.mm:
        (JSC::Bindings::callObjCFallbackObject):
        * bridge/runtime_root.h:
        Added RuntimeObject subclasses for each instance type, and use them for type casting.

2010-02-25  Gustavo Noronha Silva  <gustavo.noronha@collabora.co.uk>

        Rubber-stamped by Xan Lopez.

        Adopt the same string as the one that is expected by
        fast/parser/fragment-parser.html for the description used by the
        <isindex> element.

        * platform/gtk/LocalizedStringsGtk.cpp:
        (WebCore::searchableIndexIntroduction):

2010-02-25  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Timothy Hatcher.

        Web Inspector: evaluate-on-hover does not work on HTML files.

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

        * inspector/front-end/SourceCSSTokenizer.re2js:
        * inspector/front-end/SourceHTMLTokenizer.js:
        (WebInspector.SourceHTMLTokenizer):
        (WebInspector.SourceHTMLTokenizer.prototype.set line):
        (WebInspector.SourceHTMLTokenizer.prototype._isExpectingAttribute):
        (WebInspector.SourceHTMLTokenizer.prototype._isExpectingAttributeValue):
        (WebInspector.SourceHTMLTokenizer.prototype._setExpectingAttribute):
        (WebInspector.SourceHTMLTokenizer.prototype._setExpectingAttributeValue):
        (WebInspector.SourceHTMLTokenizer.prototype._attrValueTokenType):
        (WebInspector.SourceHTMLTokenizer.prototype.nextToken):
        * inspector/front-end/SourceHTMLTokenizer.re2js:
        * inspector/front-end/SourceJavaScriptTokenizer.js:
        (WebInspector.SourceJavaScriptTokenizer):
        * inspector/front-end/SourceJavaScriptTokenizer.re2js:
        * inspector/front-end/SourceTokenizer.js:
        (WebInspector.SourceTokenizer.prototype.set condition):
        (WebInspector.SourceTokenizer.prototype.get condition):
        (WebInspector.SourceTokenizer.prototype.get subTokenizer):
        (WebInspector.SourceTokenizer.prototype.getLexCondition):
        (WebInspector.SourceTokenizer.prototype.setLexCondition):
        * inspector/front-end/TextEditorHighlighter.js:
        (WebInspector.TextEditorHighlighter):
        (WebInspector.TextEditorHighlighter.prototype.set mimeType):
        (WebInspector.TextEditorHighlighter.prototype.highlight):
        (WebInspector.TextEditorHighlighter.prototype._highlightInChunks):
        (WebInspector.TextEditorHighlighter.prototype._highlightLines):
        (WebInspector.TextEditorHighlighter.prototype._highlightLine):
        * inspector/front-end/TextViewer.js:
        (WebInspector.TextViewer.prototype._paintLine):

2010-02-25  Xan Lopez  <xlopez@igalia.com>

        Reviewed by Gustavo Noronha.

        Simple style cleanups.

        * plugins/gtk/PluginViewGtk.cpp:
        (WebCore::plugRemovedCallback):
        (WebCore::plugAddedCallback):
        (WebCore::PluginView::platformStart):

2010-02-25  Andreas Kling  <andreas.kling@nokia.com>

        Reviewed by Darin Adler.

        Optimize decoding of Latin-1 text by exploiting the fact that most of it will
        be ASCII-only data.

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

        * platform/text/TextCodecLatin1.cpp:
        (WebCore::TextCodecLatin1::decode):

2010-02-25  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Dimitri Glazkov.

        Web Inspector: make script lines count calculation lazy.

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

        * inspector/front-end/Script.js:
        (WebInspector.Script):
        (WebInspector.Script.prototype.get linesCount):
        * inspector/front-end/ScriptsPanel.js:
        * inspector/front-end/SourceView.js:
        (WebInspector.SourceView.prototype._addBreakpoint):

2010-02-25  James Choi  <jchoi42@pha.jhu.edu>

        Reviewed by David Levin.

        Change hardcoded gcc paths to be Solaris friendly
        https://bugs.webkit.org/show_bug.cgi?id=35213

        * bindings/scripts/CodeGeneratorObjC.pm:
        * bindings/scripts/IDLParser.pm:
        * css/make-css-file-arrays.pl:
        * dom/make_names.pl:

2010-02-25  Xan Lopez  <xlopez@igalia.com>

        Reviewed by Gustavo Noronha.

        Workaround Java plugins not drawing themselves properly on first
        expose by doing a late size-allocate after 'plug-added' has been
        emitted on the embedding GtkSocket. It's unclear to me if this is
        a bug in our side or theirs, but this should be pretty safe and
        fixes the annoyance while we investigate it further.

        * plugins/gtk/PluginViewGtk.cpp:
        (WebCore::plugAddedCallback):
        (WebCore::PluginView::platformStart):

2010-02-23  Jocelyn Turcotte  <jocelyn.turcotte@nokia.com>

        Reviewed by Tor Arne Vestbø.

        Add missing include guards

        * loader/CrossOriginPreflightResultCache.h:
        * loader/MainResourceLoader.h:

2010-02-25  Jocelyn Turcotte  <jocelyn.turcotte@nokia.com>

        Reviewed by Tor Arne Vestbø.

        [Qt] Restrict the optimization flags for Symbian to release builds.

        * WebCore.pro:

2010-02-25  Jarkko Sakkinen  <jarkko.sakkinen@tieto.com>

        Reviewed by Kenneth Rohde Christiansen.

        Qt WebGL support

        Adds GraphicsContext3D QtWebKit implementation.
        https://bugs.webkit.org/show_bug.cgi?id=35153

        * WebCore.pri:
        * WebCore.pro:
        * platform/graphics/GraphicsContext3D.h:
        * platform/graphics/qt/GraphicsContext3DQt.cpp: Added.
        (WebCore::GraphicsContext3DInternal::isValid):
        (WebCore::GraphicsContext3DInternal::GraphicsContext3DInternal):
        (WebCore::GraphicsContext3DInternal::~GraphicsContext3DInternal):
        (WebCore::GraphicsContext3DInternal::getProcAddress):
        (WebCore::GraphicsContext3D::create):
        (WebCore::GraphicsContext3D::GraphicsContext3D):
        (WebCore::GraphicsContext3D::~GraphicsContext3D):
        (WebCore::GraphicsContext3D::platformGraphicsContext3D):
        (WebCore::GraphicsContext3D::platformTexture):
        (WebCore::GraphicsContext3D::makeContextCurrent):
        (WebCore::GraphicsContext3D::beginPaint):
        (WebCore::GraphicsContext3D::endPaint):
        (WebCore::GraphicsContext3D::reshape):
        (WebCore::GraphicsContext3D::activeTexture):
        (WebCore::GraphicsContext3D::attachShader):
        (WebCore::GraphicsContext3D::bindAttribLocation):
        (WebCore::GraphicsContext3D::bindBuffer):
        (WebCore::GraphicsContext3D::bindFramebuffer):
        (WebCore::GraphicsContext3D::bindRenderbuffer):
        (WebCore::GraphicsContext3D::bindTexture):
        (WebCore::GraphicsContext3D::blendColor):
        (WebCore::GraphicsContext3D::blendEquation):
        (WebCore::GraphicsContext3D::blendEquationSeparate):
        (WebCore::GraphicsContext3D::blendFunc):
        (WebCore::GraphicsContext3D::blendFuncSeparate):
        (WebCore::GraphicsContext3D::bufferData):
        (WebCore::GraphicsContext3D::bufferSubData):
        (WebCore::GraphicsContext3D::checkFramebufferStatus):
        (WebCore::GraphicsContext3D::clearColor):
        (WebCore::GraphicsContext3D::clear):
        (WebCore::GraphicsContext3D::clearDepth):
        (WebCore::GraphicsContext3D::clearStencil):
        (WebCore::GraphicsContext3D::colorMask):
        (WebCore::GraphicsContext3D::compileShader):
        (WebCore::GraphicsContext3D::copyTexImage2D):
        (WebCore::GraphicsContext3D::copyTexSubImage2D):
        (WebCore::GraphicsContext3D::cullFace):
        (WebCore::GraphicsContext3D::depthFunc):
        (WebCore::GraphicsContext3D::depthMask):
        (WebCore::GraphicsContext3D::depthRange):
        (WebCore::GraphicsContext3D::detachShader):
        (WebCore::GraphicsContext3D::disable):
        (WebCore::GraphicsContext3D::disableVertexAttribArray):
        (WebCore::GraphicsContext3D::drawArrays):
        (WebCore::GraphicsContext3D::drawElements):
        (WebCore::GraphicsContext3D::enable):
        (WebCore::GraphicsContext3D::enableVertexAttribArray):
        (WebCore::GraphicsContext3D::finish):
        (WebCore::GraphicsContext3D::flush):
        (WebCore::GraphicsContext3D::framebufferRenderbuffer):
        (WebCore::GraphicsContext3D::framebufferTexture2D):
        (WebCore::GraphicsContext3D::frontFace):
        (WebCore::GraphicsContext3D::generateMipmap):
        (WebCore::GraphicsContext3D::getActiveAttrib):
        (WebCore::GraphicsContext3D::getActiveUniform):
        (WebCore::GraphicsContext3D::getAttribLocation):
        (WebCore::GraphicsContext3D::getContextAttributes):
        (WebCore::GraphicsContext3D::getError):
        (WebCore::GraphicsContext3D::getString):
        (WebCore::GraphicsContext3D::hint):
        (WebCore::GraphicsContext3D::isBuffer):
        (WebCore::GraphicsContext3D::isEnabled):
        (WebCore::GraphicsContext3D::isFramebuffer):
        (WebCore::GraphicsContext3D::isProgram):
        (WebCore::GraphicsContext3D::isRenderbuffer):
        (WebCore::GraphicsContext3D::isShader):
        (WebCore::GraphicsContext3D::isTexture):
        (WebCore::GraphicsContext3D::lineWidth):
        (WebCore::GraphicsContext3D::linkProgram):
        (WebCore::GraphicsContext3D::pixelStorei):
        (WebCore::GraphicsContext3D::polygonOffset):
        (WebCore::GraphicsContext3D::readPixels):
        (WebCore::GraphicsContext3D::releaseShaderCompiler):
        (WebCore::GraphicsContext3D::renderbufferStorage):
        (WebCore::GraphicsContext3D::sampleCoverage):
        (WebCore::GraphicsContext3D::scissor):
        (WebCore::GraphicsContext3D::shaderSource):
        (WebCore::GraphicsContext3D::stencilFunc):
        (WebCore::GraphicsContext3D::stencilFuncSeparate):
        (WebCore::GraphicsContext3D::stencilMask):
        (WebCore::GraphicsContext3D::stencilMaskSeparate):
        (WebCore::GraphicsContext3D::stencilOp):
        (WebCore::GraphicsContext3D::stencilOpSeparate):
        (WebCore::GraphicsContext3D::texParameterf):
        (WebCore::GraphicsContext3D::texParameteri):
        (WebCore::GraphicsContext3D::uniform1f):
        (WebCore::GraphicsContext3D::uniform1fv):
        (WebCore::GraphicsContext3D::uniform2f):
        (WebCore::GraphicsContext3D::uniform2fv):
        (WebCore::GraphicsContext3D::uniform3f):
        (WebCore::GraphicsContext3D::uniform3fv):
        (WebCore::GraphicsContext3D::uniform4f):
        (WebCore::GraphicsContext3D::uniform4fv):
        (WebCore::GraphicsContext3D::uniform1i):
        (WebCore::GraphicsContext3D::uniform1iv):
        (WebCore::GraphicsContext3D::uniform2i):
        (WebCore::GraphicsContext3D::uniform2iv):
        (WebCore::GraphicsContext3D::uniform3i):
        (WebCore::GraphicsContext3D::uniform3iv):
        (WebCore::GraphicsContext3D::uniform4i):
        (WebCore::GraphicsContext3D::uniform4iv):
        (WebCore::GraphicsContext3D::uniformMatrix2fv):
        (WebCore::GraphicsContext3D::uniformMatrix3fv):
        (WebCore::GraphicsContext3D::uniformMatrix4fv):
        (WebCore::GraphicsContext3D::useProgram):
        (WebCore::GraphicsContext3D::validateProgram):
        (WebCore::GraphicsContext3D::vertexAttrib1f):
        (WebCore::GraphicsContext3D::vertexAttrib1fv):
        (WebCore::GraphicsContext3D::vertexAttrib2f):
        (WebCore::GraphicsContext3D::vertexAttrib2fv):
        (WebCore::GraphicsContext3D::vertexAttrib3f):
        (WebCore::GraphicsContext3D::vertexAttrib3fv):
        (WebCore::GraphicsContext3D::vertexAttrib4f):
        (WebCore::GraphicsContext3D::vertexAttrib4fv):
        (WebCore::GraphicsContext3D::vertexAttribPointer):
        (WebCore::GraphicsContext3D::viewport):
        (WebCore::GraphicsContext3D::getBooleanv):
        (WebCore::GraphicsContext3D::getBufferParameteriv):
        (WebCore::GraphicsContext3D::getFloatv):
        (WebCore::GraphicsContext3D::getFramebufferAttachmentParameteriv):
        (WebCore::GraphicsContext3D::getIntegerv):
        (WebCore::GraphicsContext3D::getProgramiv):
        (WebCore::GraphicsContext3D::getProgramInfoLog):
        (WebCore::GraphicsContext3D::getRenderbufferParameteriv):
        (WebCore::GraphicsContext3D::getShaderiv):
        (WebCore::GraphicsContext3D::getShaderInfoLog):
        (WebCore::GraphicsContext3D::getShaderSource):
        (WebCore::GraphicsContext3D::getTexParameterfv):
        (WebCore::GraphicsContext3D::getTexParameteriv):
        (WebCore::GraphicsContext3D::getUniformfv):
        (WebCore::GraphicsContext3D::getUniformiv):
        (WebCore::GraphicsContext3D::getUniformLocation):
        (WebCore::GraphicsContext3D::getVertexAttribfv):
        (WebCore::GraphicsContext3D::getVertexAttribiv):
        (WebCore::GraphicsContext3D::getVertexAttribOffset):
        (WebCore::GraphicsContext3D::texImage2D):
        (WebCore::GraphicsContext3D::texSubImage2D):
        (WebCore::GraphicsContext3D::createBuffer):
        (WebCore::GraphicsContext3D::createFramebuffer):
        (WebCore::GraphicsContext3D::createProgram):
        (WebCore::GraphicsContext3D::createRenderbuffer):
        (WebCore::GraphicsContext3D::createShader):
        (WebCore::GraphicsContext3D::createTexture):
        (WebCore::GraphicsContext3D::deleteBuffer):
        (WebCore::GraphicsContext3D::deleteFramebuffer):
        (WebCore::GraphicsContext3D::deleteProgram):
        (WebCore::GraphicsContext3D::deleteRenderbuffer):
        (WebCore::GraphicsContext3D::deleteShader):
        (WebCore::GraphicsContext3D::deleteTexture):
        (WebCore::GraphicsContext3D::sizeInBytes):
        (WebCore::GraphicsContext3D::synthesizeGLError):
        (WebCore::GraphicsContext3D::getImageData):

2010-02-25  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Timothy Hatcher.

        Web Inspector: Swap images for activate and deactivate breakpoints.

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

        * WebCore.gypi:
        * inspector/front-end/Images/breakpointsActivateButtonGlyph.png: Renamed from WebCore/inspector/front-end/Images/deactivateBreakpointsButtonGlyph.png.
        * inspector/front-end/Images/breakpointsDeactivateButtonGlyph.png: Renamed from WebCore/inspector/front-end/Images/deactivateBreakpointsDisabledButtonGlyph.png.
        * inspector/front-end/WebKit.qrc:
        * inspector/front-end/inspector.css:

2010-02-25  Gustavo Noronha Silva  <gustavo.noronha@collabora.co.uk>

        Reviewed by Xan Lopez.

        Go back on symlink resolution if we are loading the flash plugin,
        and the path contains /netscape/, following what Chromium does.

        Thanks to Evan Martin for the help on this!

        * plugins/gtk/PluginPackageGtk.cpp:
        (WebCore::PluginPackage::load):

2010-02-25  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Timothy Hatcher.

        Web Inspector: Scripts panel shows blank source when stopping on a breakpoint on refresh.

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

        * inspector/front-end/Panel.js:
        (WebInspector.Panel.prototype.canShowSourceLine):
        (WebInspector.Panel.prototype.showSourceLine):
        * inspector/front-end/ResourcesPanel.js:
        (WebInspector.ResourcesPanel.prototype.canShowSourceLine):
        (WebInspector.ResourcesPanel.prototype.showSourceLine):
        * inspector/front-end/Script.js:
        (WebInspector.Script):
        * inspector/front-end/ScriptView.js:
        (WebInspector.ScriptView.prototype.setupSourceFrameIfNeeded):
        * inspector/front-end/ScriptsPanel.js:
        (WebInspector.ScriptsPanel.prototype.show):
        (WebInspector.ScriptsPanel.prototype.get searchableViews):
        (WebInspector.ScriptsPanel.prototype.addScript):
        (WebInspector.ScriptsPanel.prototype._resourceLoadingFinished):
        (WebInspector.ScriptsPanel.prototype.addBreakpoint):
        (WebInspector.ScriptsPanel.prototype.removeBreakpoint):
        (WebInspector.ScriptsPanel.prototype.reset):
        (WebInspector.ScriptsPanel.prototype.canShowSourceLine):
        (WebInspector.ScriptsPanel.prototype.showSourceLine):
        (WebInspector.ScriptsPanel.prototype._scriptOrResourceForURLAndLine):
        (WebInspector.ScriptsPanel.prototype.showView):
        (WebInspector.ScriptsPanel.prototype._sourceFrameForScriptOrResource):
        (WebInspector.ScriptsPanel.prototype._showScriptOrResource):
        (WebInspector.ScriptsPanel.prototype._addScriptToFilesMenu.optionCompare):
        (WebInspector.ScriptsPanel.prototype._addScriptToFilesMenu):
        * inspector/front-end/SourceView.js:
        (WebInspector.SourceView.prototype._addBreakpoint):
        * inspector/front-end/inspector.js:
        (WebInspector.documentClick.followLink):
        (WebInspector.documentClick):
        (WebInspector._choosePanelToShowSourceLine):
        (WebInspector.canShowSourceLine):
        (WebInspector.showSourceLine):

2010-02-25  Ben Murdoch  <benm@google.com>

        Reviewed by Kenneth Rohde Christiansen.

        The target element of a Touch should be the target where that touch originated, not where it is now.
        https://bugs.webkit.org/show_bug.cgi?id=34585

        Currently the target of a touch is set to the resulting node of the hit test where the touch currently
        is. This does not match the behavior of iPhone or Android. This patch uses a hashmap on the EventHandler
        to keep track of the target element when a touch is first started. This target is then used as the target
        for subsequent touches with the same id. This matches observed behavior on iPhone and Android.

        Tests:
        fast/events/touch/touch-target.html: Added.
        fast/events/touch/basic-single-touch-events.html: Updated.

        * page/EventHandler.cpp:
        (WebCore::EventHandler::handleTouchEvent): Store the originating target element of a touch in a hashmap
            so that we can reuse that target for future events caused by that touch. This matches observed behavior
            on iPhone and Android.
        * page/EventHandler.h: Add hashmap as a member.
        * platform/PlatformTouchPoint.h:
        (WebCore::PlatformTouchPoint::id): Store the touch point id as unsigned.
        * platform/qt/PlatformTouchPointQt.cpp: 
        (WebCore::PlatformTouchPoint::PlatformTouchPoint): Cast platform touch id from signed to unsigned. Qt API
            docs state that it will always be >= 0.

2010-02-24  Antonio Gomes  <tonikitoo@webkit.org>

        Reviewed by Simon Fraser.
        Patch by Antonio Gomes <tonikitoo@webkit.org>

        Add a convenient center() method to IntRect
        https://bugs.webkit.org/show_bug.cgi?id=35346

        As it is a convenience method, and implemention is
        based on FloatRect's one, patch does not provide a
        layout test.

        * platform/graphics/IntRect.h:
        (WebCore::IntRect::center):

2010-02-25  Andrey Kosyakov  <caseq@chromium.org>

        Reviewed by Pavel Feldman.

        Fake workers implementation that simulates workers using iframe and timer,
        needed to support workers debugging. Also, a facility to inject scripts into
        inspected page upon load.
        https://bugs.webkit.org/show_bug.cgi?id=35148

        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * inspector/InspectorBackend.cpp:
        (WebCore::InspectorBackend::addScriptToEvaluateOnLoad):
        (WebCore::InspectorBackend::removeAllScriptsToEvaluateOnLoad):
        * inspector/InspectorBackend.h:
        * inspector/InspectorBackend.idl:
        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::didCommitLoad):
        (WebCore::InspectorController::addScriptToEvaluateOnLoad):
        (WebCore::InspectorController::removeAllScriptsToEvaluateOnLoad):
        * inspector/InspectorController.h:
        * inspector/front-end/InjectedFakeWorker.js: Added.
        (InjectedFakeWorker.Worker):
        (InjectedFakeWorker.FakeWorker):
        (InjectedFakeWorker.FakeWorker.prototype.postMessage):
        (InjectedFakeWorker.FakeWorker.prototype.terminate):
        (InjectedFakeWorker.FakeWorker.prototype._onmessageWrapper):
        (InjectedFakeWorker.FakeWorker.prototype._dispatchMessage):
        (InjectedFakeWorker.FakeWorker.prototype._handleException):
        (InjectedFakeWorker.FakeWorker.prototype._buildWorker):
        (InjectedFakeWorker.FakeWorker.prototype._setupWorkerContext.handler):
        (InjectedFakeWorker.FakeWorker.prototype._setupWorkerContext):
        (InjectedFakeWorker.FakeWorker.prototype._importScripts):
        (InjectedFakeWorker.FakeWorker.prototype._loadScript):
        (InjectedFakeWorker.URL):
        (InjectedFakeWorker.URL.prototype.urlRegEx.split):
        (InjectedFakeWorker.URL.prototype.mockLocation):
        (InjectedFakeWorker.URL.prototype.completeWith):
        (InjectedFakeWorker.URL.prototype.sameOrigin):
        (InjectedFakeWorker.DOMCoreException.formatError):
        (InjectedFakeWorker.DOMCoreException):
        (InjectedFakeWorker.noop):
        * inspector/front-end/InspectorBackendStub.js:
        (.WebInspector.InspectorBackendStub.prototype.setInjectedScriptSource):
        (.WebInspector.InspectorBackendStub.prototype.addScriptToEvaluateOnLoad):
        (.WebInspector.InspectorBackendStub.prototype.removeAllScriptsToEvaluateOnLoad):
        * inspector/front-end/WebKit.qrc:
        * inspector/front-end/inspector.html:

2010-02-24  Nicholas Young  <nicholas.young@nokia.com>

        Reviewed by Eric Carlson.

        Add mediaPlayerOwningDocument() to MediaPlayerClient.
        https://bugs.webkit.org/show_bug.cgi?id=35374

        No new tests. These are interface changes only.

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::mediaPlayerOwningDocument): Implementation for media element.
        * html/HTMLMediaElement.h:
        * platform/graphics/MediaPlayer.h:
        (WebCore::MediaPlayerClient::mediaPlayerOwningDocument): New virtual method.

2010-02-24  Andreas Kling  <andreas.kling@nokia.com>

        Reviewed by Kenneth Rohde Christiansen.

        Optimized Font::normalizeSpaces() by caching the String::characters()
        instead of repeatedly calling operator[]

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

        * platform/graphics/Font.cpp:
        (WebCore::Font::normalizeSpaces):

2010-02-24  Jungshik Shin  <jshin@chromium.org>

        Reviewed by David Levin.

        [Chromium] Traditional Chinese Chrome on Windows should use PMingLiu instead of Simsun for Han characters
        https://bugs.webkit.org/show_bug.cgi?id=35319

        No visible change in the layout test.

        * platform/graphics/chromium/FontUtilsChromiumWin.cpp:
        (WebCore::):

2010-02-24  Anthony Ricaud  <rik@webkit.org>

        Reviewed by Pavel Feldman.

        Web Inspector: Reduce the timer to show the eval popover
        https://bugs.webkit.org/show_bug.cgi?id=35344

        * inspector/front-end/SourceFrame.js:
        (WebInspector.SourceFrame.prototype._mouseMove):

2010-02-24  Jay Campan  <jcampan@google.com>

        Reviewed by David Levin.

        Don't show the autofill popup when the input text is disabled or read only.

        Test: manual-tests/chromium/no-autofill-on-readonly.html

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

        * src/EditorClientImpl.cpp:
        (WebKit::EditorClientImpl::autofill):
        *  manual-tests/chromium/no-autofill-on-readonly.html: Added.

2010-02-24  Dominic Mazzoni  <dmazzoni@chromium.org>

        Reviewed by Jeremy Orlow.

        Wraps includes of SVG headers so that it's possible to
        compile the V8 bindings with SVG disabled, e.g. 'enable_svg=0'.
        https://bugs.webkit.org/show_bug.cgi?id=35345

        No new tests.

        * bindings/v8/V8DOMWrapper.cpp:
        * bindings/v8/V8Proxy.cpp:
        * bindings/v8/custom/V8CSSValueCustom.cpp:
        * bindings/v8/custom/V8DocumentCustom.cpp:
        * bindings/v8/custom/V8ElementCustom.cpp:
        * bindings/v8/custom/V8EventCustom.cpp:
        * bindings/v8/custom/V8SVGElementCustom.cpp:

2010-02-24  Maciej Stachowiak  <mjs@apple.com>

        Unreviewed build fix.

        Fix gtk build.

        Include JSC headers as runtime/ instead of JavaScriptCore/

        * bindings/js/JSDOMWrapper.h:
        * bindings/js/ScriptWrappable.h:

2010-02-24  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Oliver Hunt.

        Cache JavaScript wrappers inline in DOM nodes
        https://bugs.webkit.org/show_bug.cgi?id=35226

        <rdar://problem/7664202>
        
        7.4% speedup on Dromaeo DOM Core tests.
        2.3% speedup on Hixie DOM Core tests.

        This fixes the following things from the last attempt:
        - Now builds in both debug and release and passes all tests
        - Properly use a WeakGCPtr, not just a raw pointer, in ScriptWrappable
        - Properly look in the appropriate per-document or per-world map
        - Added an assert that would have caught any of the problems I found
        - Handle clearing the inline cache properly in all cases
        
        * bindings/js/JSDOMBinding.cpp:
        (WebCore::cacheDOMObjectWrapper): Adjust for name changes.
        (WebCore::forgetDOMNode): Clear wrapper pointer.
        (WebCore::cacheDOMNodeWrapper): Cache inline too if caching for normal world.
        * bindings/js/JSDOMBinding.h:
        (WebCore::Document::getWrapperCache): Inlined.
        (WebCore::domObjectWrapperMapFor): Renamed to start with lowercase. Moved to header to inline.
        * bindings/js/JSDOMWrapper.h: Added.
        (WebCore::DOMObject::DOMObject): Factored this out of JSDOMBinding.h to avoid include
        cycle. I think the class should be renamed, I picked a forward-looking header name because
        we already have a DOMObject.h
        * bindings/js/JSNodeCustom.cpp:
        (WebCore::createWrapperInline): Renamed version of original createWrapper.
        (WebCore::createWrapper): Call createWrapperInline. Out-of-line version.
        (WebCore::toJSNewlyCreated): Call createWrapperInline instead of createWrapper.
        * bindings/js/JSNodeCustom.h: Added.
        (WebCore::getCachedDOMNodeWrapper): Moved from JSDOMBinding.cpp and moved here,
        so it could inline everywhere without creating an include cycle. Consider inline
        cache.
        (WebCore::toJS): Moved to header to inline.
        * bindings/js/ScriptWrappable.h:
        (WebCore::ScriptWrappable::ScriptWrappable): Implement this in the obvious
        way for JavaScriptCore. (Using a WeakGCPtr).
        (WebCore::ScriptWrappable::wrapper):
        (WebCore::ScriptWrappable::setWrapper):
        (WebCore::ScriptWrappable::clearWrapper):
        * bindings/scripts/CodeGeneratorJS.pm: Include CustomHeader heaaders
        in the header, not just the impl file, so they can add inlining.
        * dom/Node.idl: Add CustomHeader directive.
        
        Add new files to build.

        * GNUmakefile.am:
        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:


2010-02-24  Jochen Eisinger  <jochen@chromium.org>

        Reviewed by Jeremy Orlow.

        Expose Database object of currently active task on the database thread
        https://bugs.webkit.org/show_bug.cgi?id=35341

        * storage/DatabaseThread.cpp:
        (WebCore::DatabaseThread::DatabaseThread):
        (WebCore::DatabaseThread::databaseThread):
        * storage/DatabaseThread.h:
        (WebCore::DatabaseThread::getDatabaseOfCurrentTask):

2010-02-24  Nicholas Young  <nicholas.young@nokia.com>

        Reviewed by Eric Carlson.

        supportsMuting() should be an internal interface between MediaPlayer and MediaPlayerPrivate.
        https://bugs.webkit.org/show_bug.cgi?id=35327

        No new tests. Refactoring Only.

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::setMuted): Do not check supportsMuting()
        (WebCore::HTMLMediaElement::updateVolume): Set volume and muted
        * platform/graphics/MediaPlayer.cpp:
        (WebCore::MediaPlayer::setVolume): Check supportsMuting()
        (WebCore::MediaPlayer::setMuted): Check supportsMuting()
        * platform/graphics/MediaPlayer.h: Remove supportsMuting()

2010-02-24  Adam Barth  <abarth@webkit.org>

        Reviewed by Darin Fisher.

        [Chromium API] Disambiguate allowJavaScript from didNotAllowScript
        https://bugs.webkit.org/show_bug.cgi?id=35205

        For clients that want to show a user interface element when JavaScript
        was blocked on a page, we need to disambiguate between querying the
        client for whether JavaScript is enabled from actually failing to
        execute some script.

        This patch adds a new FrameLoaderClient callback for when WebCore would
        like to execute JavaScript but fails to because JavaScript is disabled.

        This patch also touches every client of canExecuteScripts so they can
        indicate whether we should make this callback.  I was hoping there was
        a better choke point, but my first two attempts were wrong in subtle
        ways.  pkasting points out that this will be easy to screw up in the
        future, so it's better to make all the clients be explicit.

        * WebCore.PluginHostProcess.exp:
        * bindings/ScriptControllerBase.cpp:
        (WebCore::ScriptController::canExecuteScripts):
        (WebCore::ScriptController::executeScript):
        * bindings/js/JSEventListener.cpp:
        (WebCore::JSEventListener::handleEvent):
        * bindings/js/JSLazyEventListener.cpp:
        (WebCore::JSLazyEventListener::initializeJSFunction):
        * bindings/js/ScheduledAction.cpp:
        (WebCore::ScheduledAction::execute):
        * bindings/js/ScriptController.cpp:
        (WebCore::ScriptController::bindingRootObject):
        (WebCore::ScriptController::windowScriptNPObject):
        (WebCore::ScriptController::jsObjectForPluginElement):
        (WebCore::ScriptController::executeScriptInWorld):
        * bindings/js/ScriptController.h:
        (WebCore::):
        * bindings/js/ScriptControllerMac.mm:
        (WebCore::ScriptController::windowScriptObject):
        * bindings/js/ScriptDebugServer.cpp:
        (WebCore::ScriptDebugServer::setJavaScriptPaused):
        * bindings/js/ScriptEventListener.cpp:
        (WebCore::createAttributeEventListener):
        * bindings/js/ScriptState.cpp:
        (WebCore::scriptStateFromNode):
        * bindings/v8/ScriptController.cpp:
        (WebCore::ScriptController::windowScriptNPObject):
        (WebCore::ScriptController::createScriptObjectForPluginElement):
        * bindings/v8/ScriptController.h:
        (WebCore::):
        * bindings/v8/ScriptEventListener.cpp:
        (WebCore::createAttributeEventListener):
        * bindings/v8/V8Proxy.cpp:
        (WebCore::V8Proxy::retrieve):
        * dom/ScriptElement.cpp:
        (WebCore::ScriptElementData::evaluateScript):
        * dom/XMLTokenizerLibxml2.cpp:
        (WebCore::XMLTokenizer::startElementNs):
        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::controls):
        * html/HTMLTokenizer.cpp:
        (WebCore::HTMLTokenizer::parseTag):
        (WebCore::HTMLTokenizer::processToken):
        * inspector/InspectorController.cpp:
        (WebCore::canPassNodeToJavaScript):
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::isProcessingUserGesture):
        (WebCore::FrameLoader::open):
        (WebCore::FrameLoader::dispatchDidClearWindowObjectsInAllWorlds):
        (WebCore::FrameLoader::dispatchDidClearWindowObjectInWorld):
        * loader/FrameLoaderClient.h:
        (WebCore::FrameLoaderClient::didNotAllowScript):

2010-02-24  Adam Barth  <abarth@webkit.org>

        Reviewed by Darin Fisher.

        Add call to FrameLoaderClient::allowPlugins everywhere arePluginsEnabled is called
        https://bugs.webkit.org/show_bug.cgi?id=34997

        If we want to let the FrameLoaderClient override arePluginsEnabled,
        then we need to call out to the FrameLoaderClient every time we read
        the setting.

        We don't have testing infrustructure for these changes, which is lame.
        I'm supposed to fix that in Bug 33991.

        * dom/DOMImplementation.cpp:
        (WebCore::DOMImplementation::createDocument):
        * loader/MainResourceLoader.cpp:
        (WebCore::MainResourceLoader::substituteMIMETypeFromPluginDatabase):
        * loader/PluginDocument.cpp:
        (WebCore::PluginTokenizer::writeRawData):
        * page/Page.cpp:
        (WebCore::Page::pluginData):
        * plugins/MimeType.cpp:
        (WebCore::MimeType::enabledPlugin):

2010-02-24  James Robinson  <jamesr@chromium.org>

        Reviewed by Dmitry Titov.

        Do not fire focus events while a modal dialog is up.
        https://bugs.webkit.org/show_bug.cgi?id=33962

        Modifies the FocusController to check the frame's page's defersLoading() flag before firing blur/focus events.
        This flag is set while a modal dialog (like a window.alert or window.confirm) is up.  Firing the events causes
        assertion failures, since when the dialog is dismissed the PageGroupLoadDeferrer assumes that no script has run.

        Manual tests only as DumpRenderTree does not support modal dialogs

        * manual-tests/modal-dialog-blur-selfclose.html: Added.
        * manual-tests/modal-dialog-blur.html: Added.
        * page/FocusController.cpp:
        (WebCore::dispatchEventsOnWindowAndFocusedNode):

2010-02-24  Dan Bernstein  <mitz@apple.com>

        Reviewed by Anders Carlsson.

        <rdar://problem/7018611> innerHTML applies meta/link/title tags from a detached html element

        Test: fast/parser/fragment-parser.html

        Ensure that fragment parsing has no side effects on the fragment’s owner
        document.

        * html/HTMLParser.cpp:
        (WebCore::HTMLParser::insertNode): Don’t call
        dispatchDocumentElementAvailable() for fragments.
        (WebCore::HTMLParser::handleError): Don’t copy attributes to the owner
        document’s <html> and <body> elements when a redundant <html> or <body>
        is encountered while parsing a fragment.
        (WebCore::HTMLParser::framesetCreateErrorCheck): Don’t change the owner
        document’s <body> element’s style when parsing a fragment.
        (WebCore::HTMLParser::createHead): Don’t attach the new <head> to the
        ownder document of a fragment.

2010-02-24  David Levin  <levin@chromium.org>

        Reviewed by Darin Adler.

        Need to create a CanvasSurface base class for HTMLCanvasElement.
        https://bugs.webkit.org/show_bug.cgi?id=35322

        This is an initial step in making the OffscreenCanvas object.

        No new functionality so no new tests.

        * GNUmakefile.am: Added CanvasSurface to the build.
        * WebCore.gypi: ditto
        * WebCore.pro: ditto
        * WebCore.vcproj/WebCore.vcproj: ditto
        * WebCore.xcodeproj/project.pbxproj: ditto
        * dom/CanvasSurface.cpp: Added.
        * dom/CanvasSurface.h: Added.
        * html/HTMLCanvasElement.h: Made HTMLCanvasElement inherit from CanvasSurface.

2010-02-24  Peter Kasting  <pkasting@google.com>

        Reviewed by Adam Barth.

        Fix regression in calculating an animated image's start time.
        https://bugs.webkit.org/show_bug.cgi?id=35115

        * platform/graphics/BitmapImage.cpp:
        (WebCore::BitmapImage::startAnimation):

2010-02-24  Dan Bernstein  <mitz@apple.com>

        Reviewed by Simon Fraser.

        <rdar://problem/7682827> Text with :first-letter lingers after being removed

        Test: fast/css/first-letter-set-text.html

        * rendering/RenderTextFragment.cpp:
        (WebCore::RenderTextFragment::setTextInternal): Set this back as the
        text node’s renderer, as removing the first letter has resets the node’s
        renderer.

2010-02-24  Ariya Hidayat  <ariya.hidayat@gmail.com>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] Faster cut-off for rectangle fill without shadow.
        https://bugs.webkit.org/show_bug.cgi?id=35337

        * platform/graphics/qt/GraphicsContextQt.cpp:

2010-02-24  Jocelyn Turcotte  <jocelyn.turcotte@nokia.com>

        Reviewed by nobody, build fix.

        [Qt] Corrects build break of QtLauncher on Windows.
        The VERSION variable was not set anymore while building in trunk.

        * WebCore.pro:

2010-02-24  Alexander Pavlov  <apavlov@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: Activate/Deactivate breaks does not look consistent with rest of the toolbar.

        Fix style and add the new images to the related file sets.
        https://bugs.webkit.org/show_bug.cgi?id=35307

        * WebCore.gypi:
        * inspector/front-end/Images/deactivateBreakpointsButtonGlyph.png:
        * inspector/front-end/Images/deactivateBreakpointsDisabledButtonGlyph.png:
        * inspector/front-end/WebKit.qrc:
        * inspector/front-end/inspector.css:

2010-02-24  Xan Lopez  <xlopez@igalia.com>

        Reviewed by Gustavo Noronha.

        Get rid of an extra call to
        setNPWindowIfNeeded. updatePluginWidget already calls this for us
        if needed.

        * plugins/gtk/PluginViewGtk.cpp:
        (WebCore::PluginView::platformStart):

2010-02-24  Xan Lopez  <xlopez@igalia.com>

        Reviewed by Gustavo Noronha.

        Try to sanitize a bit the geometry management of plugins.

        Stop doing contradictory things in updatePluginWidget (we were at
        the same time pretending the geometry setting was delayed until
        ::paint and setting the geometry not once but twice) and just set
        it any time the windowRect or clipRect for the plugin has changed.

        This is closer to what the Mac port does, and fixes instances of
        the plugins not being drawn until the window is resized or
        scrolled. Other than that all manual and layout tests seems to
        still work.

        * plugins/gtk/PluginViewGtk.cpp:
        (WebCore::PluginView::updatePluginWidget):
        (WebCore::PluginView::setNPWindowIfNeeded):

2010-02-23  Geoff Garen  <ggaren@apple.com>

        Reviewed by Oliver Hunt.

        Simplify animation lifetime handling.  Previously we manually
        determined whether our base element was safe when we unregistered
        our listener, now we simply ensure that the base element itself
        registers and unregisters the animation listener.

        * svg/animation/SVGSMILElement.cpp:
        (WebCore::ConditionEventListener::create):
        (WebCore::ConditionEventListener::disconnectAnimation):
        (WebCore::ConditionEventListener::ConditionEventListener):
        (WebCore::ConditionEventListener::operator==):
        (WebCore::ConditionEventListener::handleEvent):
        (WebCore::SVGSMILElement::eventBaseFor):
        (WebCore::SVGSMILElement::connectConditions):
        (WebCore::SVGSMILElement::disconnectConditions):
        * svg/animation/SVGSMILElement.h:

2010-02-23  Dmitry Titov  <dimich@chromium.org>

        Reviewed by David Levin.

        Chromium: Use V8::TerminateExecution to actually terminate workers.
        https://bugs.webkit.org/show_bug.cgi?id=35137

        Test: existing fast/workers/stress-js-execution.html which is currently failing
        on Mac and Linux bots for Chromium.

        * bindings/v8/WorkerContextExecutionProxy.cpp:
        (WebCore::WorkerContextExecutionProxy::evaluate):
        * bindings/v8/WorkerScriptController.cpp:
        (WebCore::WorkerScriptController::forbidExecution):

2010-02-23  Enrica Casucci  <enrica@apple.com>

        Reviewed by Simon Fraser.

        REGRESSION: WebKit crashes when deleting images on blogger.com (34957)
        <rdar://problem/7651935>
        https://bugs.webkit.org/show_bug.cgi?id=34957

        Fixing a regression introduced with revision 53085. Anchor elements should not be considered
        in editable content when calculating the position in the parent before the node.
        
        Test: editing/execCommand/delete-image-in-anchor.html

        * dom/Position.cpp:
        (WebCore::Position::getInlineBoxAndOffset):

2010-02-23  Tony Chang  <tony@chromium.org>

        Reviewed by Eric Seidel.

        https://bugs.webkit.org/show_bug.cgi?id=34634
        Pasting a list into the middle of another list item should split the target
        list item into two separate list items.  This matches the behavior in other
        browsers.

        Test: editing/pasteboard/paste-list-004.html

        * editing/ReplaceSelectionCommand.cpp:
        (WebCore::ReplaceSelectionCommand::insertAsListItems):

2010-02-23  Brady Eidson  <beidson@apple.com>

        Reviewed by Tim Hatcher and Pavel Feldman.

        Regression (r55107) - WebInspector docking is busted.
        https://bugs.webkit.org/show_bug.cgi?id=35274

        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::canAttachWindow): Use the minimum height for this calculation,
          not the preferred height.
        (WebCore::InspectorController::attachWindow): attachWindow() shouldn't decide the policy, as it is
          often called partway through the show or dock procedure after some of the initial conditions have
          changed. Let the front-end itself and the InspectorClient's make the policy decision at the start
          of the show/dock operation.

        * inspector/InspectorFrontendHost.cpp:
        (WebCore::InspectorFrontendHost::canAttachWindow):
        * inspector/InspectorFrontendHost.h:
        * inspector/InspectorFrontendHost.idl:

        * inspector/front-end/inspector.js:
        (WebInspector.toggleAttach): Before attaching, ask the front-end-host if attaching is allowed.

2010-02-23  Mark Rowe  <mrowe@apple.com>

        Reviewed by Geoff Garen.

        <http://webkit.org/b/35287> ImageSourceCG::frameIsCompleteAtIndex returns false for all frames until image has completed loading

        CGImageSourceGetStatusAtIndex claims that all frames of a multi-frame image are incomplete when we've not yet received the
        complete data for an image that is using an incremental data source (<rdar://problem/7679174>). We work around this by
        special-casing all frames except the last in an image and treating them as complete if they are present and reported as
        being incomplete. We do this on the assumption that loading new data can only modify the existing last frame or append new
        frames. The last frame is only treated as being complete if the image source reports it as such. This ensures that it is
        truly the last frame of the image rather than just the last that we currently have data for.

        * platform/graphics/cg/ImageSourceCG.cpp:
        (WebCore::ImageSource::frameIsCompleteAtIndex):

2010-02-23  Enrica Casucci  <enrica@apple.com>

        Reviewed by Darin Adler.

        Crash in createContextualFragment when inserting a list in a non HTML document.
        <rdar://problem/7666670>
        https://bugs.webkit.org/show_bug.cgi?id=35305
        
        createFragmentFromMarkup did not handle correctly the case where documentElement is
        not an HTMLElement. The static cast to HTMLElement was causing createContextualFragment to
        crash.
        
        Test: editing/execCommand/insert-list-xml.xhtml

        * dom/Element.cpp:
        (WebCore::Element::createContextualFragment): Added.
        * dom/Element.h: Added createContextualFragment virtual function.
        * editing/markup.cpp:
        (WebCore::createFragmentFromMarkup): Removed static cast to HTMLElement.
        * html/HTMLElement.cpp:
        (WebCore::HTMLElement::createContextualFragment): Modified to perform only checks
        that are specific for an HTMLElement object. The rest of the logic has been moved to the
        corresponding method in the Element class.

2010-02-23  Steve Falkenburg  <sfalken@apple.com>

        Reviewed by Adam Roben.

        WebCore should stop throwing away the CGImageSourceRef on Windows to improve GIF performance
        https://bugs.webkit.org/show_bug.cgi?id=35309

        * platform/graphics/cg/ImageSourceCG.cpp:
        (WebCore::ImageSource::clear):

2010-02-23  Leandro Pereira  <leandro@profusion.mobi>

        Reviewed by Gustavo Noronha Silva.

        Changes references of GOwnPtr to reflect their new place.
        http://webkit.org/b/35084

        * WebCore/platform/KURL.cpp
        * WebCore/platform/TextEncoding.cpp:
        * WebCore/platform/text/gtk/TextBreakIteratorGtk.cpp: 
        * WebCore/platform/text/gtk/TextCodecGtk.cpp:

2010-02-23  Brady Eidson  <beidson@apple.com>

        Reviewed by Alexey Proskuryakov.

        HTTP 307 after a 303 after a POST re-sends POST data from the original request.
        <rdar://problem/7390251> and https://bugs.webkit.org/show_bug.cgi?id=31410

        Test: http/tests/loading/307-after-303-after-post.html

        Remember the last HTTP method send out during a redirect chain for a resource handle:
        * platform/network/ResourceHandle.cpp:
        (WebCore::ResourceHandle::lastHTTPMethod):
        * platform/network/ResourceHandle.h:
        * platform/network/ResourceHandleInternal.h:
        (WebCore::ResourceHandleInternal::ResourceHandleInternal):

        Refer to the last HTTP method used instead of the original method:
        * platform/network/cf/ResourceHandleCFNet.cpp:
        (WebCore::willSendRequest):
        (WebCore::ResourceHandle::willSendRequest):
        * platform/network/mac/ResourceHandleMac.mm:
        (WebCore::ResourceHandle::willSendRequest):
        (-[WebCoreResourceHandleAsDelegate connection:willSendRequest:redirectResponse:]):

2010-02-23  Crystal Zhang  <haizhang@rim.com>

        Unreviewed build fix.

        Fix build error when enable plugin proxy: 'toRenderEmbeddedObject' identifier not found.
        As RenderEmbeddedObject inherits RenderPartObject and 'toRenderEmbeddedObject' belongs
        to former one.

        * html/HTMLMediaElement.cpp:

2010-02-23  Evan Martin  <evan@chromium.org>

        Reviewed by Jeremy Orlow.

        [chromium] fix previous SVG-disabling patch
        https://bugs.webkit.org/show_bug.cgi?id=35298

        * WebCore.gypi: rename variable
        * WebCore.gyp/WebCore.gyp: actually use the variable

2010-02-23  Michael Lotz <mmlr@mlotz.ch>

        Reviewed by David Levin.

        [Haiku] Fix conversion from BString to String
        https://bugs.webkit.org/show_bug.cgi?id=35082

        The previous patch to this file was broken (sorry). First of all,
        the conversion from UTF8 was accidentally removed. Second, for
        empty strings, we need to point the implementation at StringImpl::empty().

        Covered by existing tests.

        * platform/text/haiku/StringHaiku.cpp:
        (WebCore::String::String):

2010-02-23  Tor Arne Vestbø  <tor.arne.vestbo@nokia.com>

        Reviewed by Eric Carlson.

        [Qt] Prevent the media backend from handling non-audio or -video mime types

        * platform/graphics/qt/MediaPlayerPrivateQt.cpp:

2010-02-23  Evan Martin  <evan@chromium.org>

        Reviewed by Jeremy Orlow.

        [chromium] Allow building without SVG
        https://bugs.webkit.org/show_bug.cgi?id=31522

        * WebCore.gyp/WebCore.gyp, WebCore.gypi: test enable_svg flag.
        * bindings/v8/custom/V8SVGDocumentCustom.cpp,
          bindings/v8/custom/V8SVGPathSegCustom.cpp: test ENABLE(SVG).

2010-02-23  Leandro Pereira  <leandro@profusion.mobi>

        Reviewed by Gustavo Noronha Silva.

        Fixes references to GOwnPtr and GRefPtr so the GTK+ port builds
        again.
        http://webkit.org/b/35084

        * WebCore/platform/gtk/DataObjectGtk.h:
        * WebCore/platform/graphics/gtk/MediaPlayerPrivateGStreamer.cpp:

2010-02-23  Ariya Hidayat  <ariya.hidayat@gmail.com>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] Faster cut-off for rectangle drawing without shadow.
        https://bugs.webkit.org/show_bug.cgi?id=35267

        * platform/graphics/qt/GraphicsContextQt.cpp:
        (WebCore::GraphicsContext::drawRect):

2010-02-23  Steve Block  <steveblock@google.com>

        Reviewed by Jeremy Orlow.

        Removes redundant Settings::setGeolocationEnabled and Settings::geolocationEnabled
        https://bugs.webkit.org/show_bug.cgi?id=35242

        No new tests, removing dead code only.

        * page/Settings.cpp:
        * page/Settings.h:

2010-02-23  Ben Murdoch  <benm@google.com>

        Reviewed by Eric Seidel.

        pageX/Y co-ordinates of TouchEvent should be 0,0
        https://bugs.webkit.org/show_bug.cgi?id=35239

        The co-ordinates attached to a touch event are not used for tracking touch motion, rather the co-ordinates attached to Touches within the touch event should be used. Set the co-ordinates on the event itself to 0 to avoid confusion and match observed iPhone behavior.

        * page/EventHandler.cpp:
        (WebCore::EventHandler::handleTouchEvent): Set the pageX/Y and screenX/Y co-ordinates attached to the touch event to 0,0 to match observed behavior on the iPhone.
        * page/EventHandler.h: Remove now unused members m_firstTouchScreenPos and m_firstTouchPagePos.

2010-02-23  Stephan Aßmus  <superstippi@gmx.de>

        Reviewed by Eric Seidel.

        [Haiku] Various improvements to EventHandlerHaiku.
        https://bugs.webkit.org/show_bug.cgi?id=34685

        Covered by existing tests.

        Fix the build by not including PlatformScrollBar.h.

        * page/haiku/EventHandlerHaiku.cpp:
        (WebCore::isKeyboardOptionTab):
            Use the correct keycode for tab keys.
        (WebCore::EventHandler::focusDocumentView):
            Use proper locking. In any case, Haiku doesn't append platform
            widgets to WebCore widgets. But if it did, this implementation
            would be correct.
        (WebCore::EventHandler::passWidgetMouseDownEventToWidget):
            Implemented.
        (WebCore::EventHandler::eventActivatedView):
            Removed notImplemented() and added note.
        (WebCore::EventHandler::passMousePressEventToSubframe):
            Implemented.
        (WebCore::EventHandler::passMouseMoveEventToSubframe):
            Implemented.
        (WebCore::EventHandler::passMouseReleaseEventToSubframe):
            Implemented.
        (WebCore::EventHandler::accessKeyModifiers):
            Added note.

2010-02-23  Tony Chang  <tony@chromium.org>

        Not reviewed.
        Revert r55135 because the layout test is failing on all the bots.
        https://bugs.webkit.org/show_bug.cgi?id=34634

        * editing/ReplaceSelectionCommand.cpp:
        (WebCore::ReplaceSelectionCommand::insertAsListItems):

2010-02-17  Steve Block  <steveblock@google.com>

        Reviewed by Ariya Hidayat.

        Adds cache to store Geolocation positions between browser sessions.
        https://bugs.webkit.org/show_bug.cgi?id=34084

        This is required to fully implement the Geolocation maximumAge property.
        See Bug 30676.

        No new tests, will add tests for maximumAge once complete.

        * Android.mk: Modified. Added GeolocationPositionCache.cpp
        * GNUmakefile.am: Modified. Added GeolocationPositionCache.[cpp|h]
        * WebCore.gypi: Modified. Added GeolocationPositionCache.[cpp|h]
        * WebCore.pro: Modified. Added GeolocationPositionCache.[cpp|h]
        * WebCore.vcproj/WebCore.vcproj: Modified. Added GeolocationPositionCache.[cpp|h]
        * WebCore.xcodeproj/project.pbxproj: Modified. Added GeolocationPositionCache.[cpp|h]
        * page/GeolocationPositionCache.cpp: Added.
        (WebCore::GeolocationPositionCache::GeolocationPositionCache):
        (WebCore::GeolocationPositionCache::~GeolocationPositionCache):
        (WebCore::GeolocationPositionCache::setCachedPosition):
        (WebCore::GeolocationPositionCache::cachedPosition):
        (WebCore::GeolocationPositionCache::setDatabasePath):
        (WebCore::GeolocationPositionCache::readFromDB):
        (WebCore::GeolocationPositionCache::writeToDB):
        * page/GeolocationPositionCache.h: Added.

2010-02-23  Yuta Kitamura  <yutak@chromium.org>

        Reviewed by Dan Bernstein.

        Fix alignment of vertical-align: text-bottom inside an inline-block.
        
        This patch is based on a fix provided by Takahito Hirano.

        display: inline-block + vertical-align: text-bottom causes misalignment.
        https://bugs.webkit.org/show_bug.cgi?id=30846

        Test: fast/inline-block/inline-block-vertical-align-2.html

        * rendering/RenderBoxModelObject.cpp:
        (WebCore::RenderBoxModelObject::verticalPosition): Fixed vpos calculation.
        We cannot cut corners for inline blocks, since they may have their own
        text metrics.

2010-02-23  Steve Block  <steveblock@google.com>

        Reviewed by David Levin.

        Sets default values of V8 runtime enabler flags to match behavior with JSC
        https://bugs.webkit.org/show_bug.cgi?id=35095

        No new tests, modifies a Chromium feature only.

        * bindings/generic/RuntimeEnabledFeatures.cpp: Modified. Sets appcache and geolocation flag defaults to 'on'
        * storage/Database.cpp: Modified. Sets database flag default to 'on'.

2010-02-23  Stephan Aßmus  <superstippi@gmx.de>

        Reviewed by Eric Seidel.

        [Haiku] Fix various issues in keyboard event generation.
        https://bugs.webkit.org/show_bug.cgi?id=34685

        Covered by existing tests.

        Fixed backspace keycode.
        Fixed using the appropriate fields from the Haiku event for mapping
        to the VK_* codes and added mapping a great deal more codes.
        Added extraction of modifier key flags.
        Completed implementation of disambiguateKeyDownEvent()
        Implemented currentCapsLockState().

        * platform/haiku/PlatformKeyboardEventHaiku.cpp:
        (WebCore::keyIdentifierForHaikuKeyCode):
        (WebCore::windowsKeyCodeForKeyEvent):
        (WebCore::PlatformKeyboardEvent::PlatformKeyboardEvent):
        (WebCore::PlatformKeyboardEvent::disambiguateKeyDownEvent):
        (WebCore::PlatformKeyboardEvent::currentCapsLockState):

2010-02-23  Steve Block  <steveblock@google.com>

        Reviewed by Darin Adler.

        Adds Client::cancelGeolocationPermissionRequestForFrame and ChromeClient::cancelGeolocationPermissionRequestForFrame
        https://bugs.webkit.org/show_bug.cgi?id=34962

        These methods are required so that a Geolocation object can cancel an
        asynchronous permission request. This allows the chrome client to cancel
        any UI it is showing for the permission request.

        No new tests, as this is for the purposes of browser UI only.

        * loader/EmptyClients.h: Modified
        (WebCore::EmptyChromeClient::cancelGeolocationPermissionRequestForFrame): Added
        * page/Chrome.cpp: Modified.
        (WebCore::Chrome::cancelGeolocationPermissionRequestForFrame): Added
        * page/Chrome.h: Modified.
        * page/ChromeClient.h: Modified.
        (WebCore::ChromeClient::cancelGeolocationPermissionRequestForFrame): Added
        * page/Geolocation.cpp: Modified.
        (WebCore::Geolocation::disconnectFrame): Modified. Call cancelGeolocationPermissionRequestForFrame

2010-02-23  Tony Chang  <tony@chromium.org>

        Reviewed by Eric Seidel.

        https://bugs.webkit.org/show_bug.cgi?id=34634
        Pasting a list into the middle of another list item should split the target
        list item into two separate list items.  This matches the behavior in other
        browsers.

        Test: editing/pasteboard/paste-list-004.html

        * editing/ReplaceSelectionCommand.cpp:
        (WebCore::ReplaceSelectionCommand::insertAsListItems):

2010-02-23  Jocelyn Turcotte  <jocelyn.turcotte@nokia.com>

        Reviewed by Laszlo Gombos.

        [Qt] Correct build problems while building QtWebKit inside Qt.
        https://bugs.webkit.org/show_bug.cgi?id=34975

        * WebCore.pro: Change the condition !standalone_package to !QTDIR_build

2010-02-23  Noam Rosenthal  <noam.rosenthal@nokia.com>

        Reviewed by Ariya Hidayat.

        [Qt] Connect video with accelerated compositing
        https://bugs.webkit.org/show_bug.cgi?id=35276

        MediaControlPrivate and GraphicsLayer are patched together via
        a shared PlatformLayer (QGraphicsItem). This patch makes sure that the
        QGraphicsVideoItem from MediaControl becomes part of the scene 
        associsated with GraphicsLayer

        Test: http://double.co.nz/video_test/test1.html with AC turned on

        * platform/graphics/qt/GraphicsLayerQt.cpp:
        (WebCore::GraphicsLayerQtImpl::): mediaLayer member
        (WebCore::GraphicsLayerQtImpl::opaqueArea): video is opaque
        (WebCore::GraphicsLayerQtImpl::paint): don't paint video
        (WebCore::GraphicsLayerQtImpl::flushChanges): flush mediaLayer
        (WebCore::GraphicsLayerQt::setContentsToMedia): notify
        * platform/graphics/qt/GraphicsLayerQt.h: reimp setContentsToMedia
        * platform/graphics/qt/MediaPlayerPrivateQt.cpp:
        (WebCore::MediaPlayerPrivate::MediaPlayerPrivate): m_compositing
        (WebCore::MediaPlayerPrivate::paint): don't paint if compositing
        (WebCore::MediaPlayerPrivate::acceleratedRenderingStateChanged):
        reimp from MediaPlayerPrivateInterface to support AC
        (WebCore::MediaPlayerPrivate::platformLayer): ditto
        * platform/graphics/qt/MediaPlayerPrivateQt.h: 
        (WebCore::MediaPlayerPrivate::supportsAcceleratedRendering): ditto

2010-02-23  Stephan Aßmus  <superstippi@gmx.de>

        Reviewed by Eric Seidel.

        Fix various issues in PlatformWheelEventHaiku.
        https://bugs.webkit.org/show_bug.cgi?id=34685

        Covered by existing tests.
        
        Fixed coding style violations.
        Synced extracting the correct coordinates with Haiku WebKit implementation.
        Added extracting modifier key flags.

        * platform/haiku/PlatformWheelEventHaiku.cpp:
        (WebCore::PlatformWheelEvent::PlatformWheelEvent):

2010-02-23  Laszlo Gombos  <laszlo.1.gombos@nokia.com>

        Reviewed by Eric Seidel.

        Build fix for PluginView
        https://bugs.webkit.org/show_bug.cgi?id=35230

        No new tests, build fix only.

        * plugins/PluginView.cpp:
        * plugins/PluginView.h:
        * plugins/PluginViewNone.cpp:

2010-02-23  Kwang Yul Seo  <skyul@company100.net>

        Reviewed by Eric Seidel.

        [BREWMP] Port ScriptController::createScriptInstanceForWidget
        https://bugs.webkit.org/show_bug.cgi?id=34413

        * bindings/js/ScriptControllerBrew.cpp: Added.
        (WebCore::ScriptController::createScriptInstanceForWidget):

2010-02-23  José Millán Soto  <jmillan@igalia.com>

        Reviewed by Eric Seidel.

        [Gtk] Webkit crashes when using orca
        https://bugs.webkit.org/show_bug.cgi?id=35169

        Made webkit_accessible_text_get_caret_offset check if end selection
        node is null.

        * accessibility/gtk/AccessibilityObjectWrapperAtk.cpp:
        (webkit_accessible_text_get_caret_offset):

2010-02-22  Stephan Aßmus  <superstippi@gmx.de>

        Reviewed by Eric Seidel.

        [Haiku] Implemented PopupMenu support.
        https://bugs.webkit.org/show_bug.cgi?id=35078

        Covered by existing tests.

        The implementation is currently very simple: Added a PopupMenuHaiku
        class that derives from a native BPopUpMenu. It attaches a BHandler
        derivative to the BApplication (WebCore main thread) which receives
        the item invokation and menu hidden events and informs the PopupMenuClient
        accordingly.

        * platform/PopupMenu.h:
            Changed type of m_menu for Haiku.
        * platform/haiku/PopupMenuHaiku.cpp:
        (WebCore::PopupMenuHandler::PopupMenuHandler):
        (WebCore::PopupMenuHandler::MessageReceived):
        (WebCore::PopupMenuHaiku::PopupMenuHaiku):
        (WebCore::PopupMenuHaiku::~PopupMenuHaiku):
        (WebCore::PopupMenuHaiku::show):
        (WebCore::PopupMenuHaiku::hide):
        (WebCore::PopupMenuHaiku::Hide):
        (WebCore::PopupMenu::PopupMenu):
        (WebCore::PopupMenu::~PopupMenu):
            Removed bogus code.
        (WebCore::PopupMenu::show):
            Implemented using new PopupMenuHaiku class.
        (WebCore::PopupMenu::hide):
            Implemented using new PopupMenuHaiku class.
        (WebCore::PopupMenu::updateFromElement):
            Implemented.
        (WebCore::PopupMenu::itemWritingDirectionIsNatural):
            Implemented according to Gtk port.

2010-02-22  Stephan Aßmus  <superstippi@gmx.de>

        Reviewed by Eric Seidel.

        Fix various issues in PlatformMouseEventHaiku.
        https://bugs.webkit.org/show_bug.cgi?id=34685

        Covered by existing tests.
        
        Mapping Haiku button constants (bit field) to WebCore buttons was broken.
        Extracting event time was broken (supposed to be in seconds).
        Wrong coordinate was being extracted, needs to be content local.
        Added extracting modifier key flags.

        * platform/haiku/PlatformMouseEventHaiku.cpp:
        (WebCore::PlatformMouseEvent::PlatformMouseEvent):

2010-02-22  Stephan Aßmus  <superstippi@gmx.de>

        Reviewed by Eric Seidel.

        [Haiku] Implement creating and filling platform gradients.
        https://bugs.webkit.org/show_bug.cgi?id=34683

        Covered by existing tests.

        * platform/graphics/Gradient.h:
            Typedef PlatformGradient to BGradient
        * platform/graphics/haiku/GradientHaiku.cpp:
        (WebCore::Gradient::platformDestroy):
            Delete the cached BGradient object.
        (WebCore::Gradient::platformGradient):
            Create a BGradient object according to the type of Gradient.
            Return the cached object.
        (WebCore::Gradient::fill):
            use BView API to fill with the platform gradient.

2010-02-22  Stephan Aßmus  <superstippi@gmx.de>

        Reviewed by Eric Seidel.

        Build fix for debug builds of GlyphPageTreeNode.cpp
        https://bugs.webkit.org/show_bug.cgi?id=34528

        Covered by existing tests.

        * platform/graphics/GlyphPageTreeNode.cpp:
            include <stdio.h> since printf() is used if NDEBUG is not defined.

2010-02-22  Nate Chapin  <japhet@chromium.org>

        Unreviewed, Chromium build fix.

        Add special case in CodeGeneratorV8.pm for named getters for html plugin-related elements.

        CodeGeneratorV8.pm was relying on HasOverridingNameGetter to hint
        that a custom named getter was needed. That hint was removed in
        http://trac.webkit.org/changeset/55104.

        * bindings/scripts/CodeGeneratorV8.pm:

2010-02-22  Alexey Proskuryakov  <ap@apple.com>

        Rubber-stamped by Geoff Garen.

        Rename RuntimeObjectImp to RuntimeObject.

        * WebCore.PluginHostProcess.exp:
        * bindings/js/JSPluginElementFunctions.cpp:
        (WebCore::getRuntimeObject):
        (WebCore::runtimeObjectPropertyGetter):
        (WebCore::runtimeObjectCustomGetOwnPropertySlot):
        (WebCore::runtimeObjectCustomGetOwnPropertyDescriptor):
        (WebCore::runtimeObjectCustomPut):
        * bindings/objc/WebScriptObject.mm:
        (+[WebScriptObject _convertValueToObjcValue:originRootObject:rootObject:]):
        * bridge/c/c_utility.cpp:
        (JSC::Bindings::convertValueToNPVariant):
        * bridge/jni/jni_jsobject.mm:
        (JavaJSObject::convertValueToJObject):
        * bridge/jni/jsc/JNIUtilityPrivate.cpp:
        (JSC::Bindings::convertValueToJValue):
        * bridge/jsc/BridgeJSC.cpp:
        (JSC::Bindings::Instance::createRuntimeObject):
        (JSC::Bindings::Instance::newRuntimeObject):
        * bridge/jsc/BridgeJSC.h:
        * bridge/objc/objc_runtime.mm:
        (JSC::Bindings::callObjCFallbackObject):
        * bridge/qt/qt_instance.cpp:
        (JSC::Bindings::QtRuntimeObject::markChildren):
        (JSC::Bindings::):
        (JSC::Bindings::QtRuntimeObject::QtRuntimeObject):
        (JSC::Bindings::QtInstance::getInstance):
        (JSC::Bindings::QtInstance::newRuntimeObject):
        * bridge/qt/qt_instance.h:
        * bridge/qt/qt_pixmapruntime.cpp:
        (JSC::Bindings::QtPixmapRuntimeObject::QtPixmapRuntimeObject):
        (JSC::Bindings::):
        (JSC::Bindings::QtPixmapInstance::variantFromObject):
        (JSC::Bindings::QtPixmapInstance::createRuntimeObject):
        * bridge/qt/qt_runtime.cpp:
        (JSC::Bindings::valueRealType):
        * bridge/runtime_method.cpp:
        (JSC::callRuntimeMethod):
        * bridge/runtime_object.cpp:
        (JSC::RuntimeObject::RuntimeObject):
        (JSC::RuntimeObject::~RuntimeObject):
        (JSC::RuntimeObject::invalidate):
        (JSC::RuntimeObject::fallbackObjectGetter):
        (JSC::RuntimeObject::fieldGetter):
        (JSC::RuntimeObject::methodGetter):
        (JSC::RuntimeObject::getOwnPropertySlot):
        (JSC::RuntimeObject::getOwnPropertyDescriptor):
        (JSC::RuntimeObject::put):
        (JSC::RuntimeObject::deleteProperty):
        (JSC::RuntimeObject::defaultValue):
        (JSC::callRuntimeObject):
        (JSC::RuntimeObject::getCallData):
        (JSC::callRuntimeConstructor):
        (JSC::RuntimeObject::getConstructData):
        (JSC::RuntimeObject::getOwnPropertyNames):
        (JSC::RuntimeObject::throwInvalidAccessError):
        * bridge/runtime_object.h:
        * bridge/runtime_root.cpp:
        (JSC::Bindings::RootObject::invalidate):
        (JSC::Bindings::RootObject::addRuntimeObject):
        (JSC::Bindings::RootObject::removeRuntimeObject):
        * bridge/runtime_root.h:

2010-02-19  Peter Kasting  <pkasting@google.com>

        Reviewed by Eric Seidel.

        Avoid recursion when trying to get the size of a PNG; it's unnecessary
        and in the worst case can lead to heap corruption.
        https://bugs.webkit.org/show_bug.cgi?id=35167

        Test: fast/images/bad-png.html

        * platform/image-decoders/png/PNGImageDecoder.cpp:
        (WebCore::PNGImageReader::decode):

2010-02-22  Brady Eidson  <beidson@apple.com>

        Reviewed by Tim Hatcher.

        Disable WebView docking to views that are too small.
        <rdar://problem/7248409> and https://bugs.webkit.org/show_bug.cgi?id=35254

        * WebCore.base.exp:
        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::canAttachWindow): Provide a utility for WebKits to make a showWindow()
          decision based on if attachment would be allowed or not.
        (WebCore::InspectorController::attachWindow): Don't attach if the view is too small to attach to.
        * inspector/InspectorController.h:

2010-02-22  Alexey Proskuryakov  <ap@apple.com>

        Build fix.

        * WebCore.base.exp: Export Instance::newRuntimeObject, it's virtual!

2010-02-22  Alexey Proskuryakov  <ap@apple.com>

        Undo a small part of the previous commit.

        * bridge/runtime_method.cpp: (JSC::callRuntimeMethod): Let's keep the instance local
        variable as RefPtr for safety.

2010-02-22  Alexey Proskuryakov  <ap@apple.com>

        Reviewed by Darin Adler.

        https://bugs.webkit.org/show_bug.cgi?id=35260
        Eliminate __apple_runtime_object

        No change in functionality, so no tests.

        * WebCore.base.exp: Don't export Instance::newRuntimeObject, WebKit doesn't need it.

        * bindings/js/JSHTMLAppletElementCustom.cpp:
        * bindings/js/JSHTMLEmbedElementCustom.cpp:
        * bindings/js/JSHTMLObjectElementCustom.cpp:
        * html/HTMLAppletElement.idl:
        * html/HTMLEmbedElement.idl:
        * html/HTMLObjectElement.idl:
        These objects no longer need overriding name getters, as they no longer intercept the
        __apple_runtime_object property.

        * bindings/js/JSPluginElementFunctions.cpp:
        (WebCore::pluginInstance): This is no longer static. It was used for callPlugin() in
        this file, and now it's also used elsewhere when calling plug-in methods.
        (WebCore::runtimeObjectGetter): Removed. This function was only used by the intercepting
        name getters.

        * bindings/js/JSPluginElementFunctions.h: Export pluginInstance().

        * bindings/objc/WebScriptObject.mm:
        (+[WebScriptObject _convertValueToObjcValue:originRootObject:rootObject:]):
        * bridge/runtime_method.cpp:
        (JSC::callRuntimeMethod):
        Take plug-in element's instance directly, without relying on fake attribute lookup.
        One change resulting from this is that RuntimeObjectImp may not be created in some cases -
        this code only needs an instance, but the old code had to pass the instance wrapped into
        RuntimeObjectImp.

2010-02-22  John Sullivan  <sullivan@apple.com>
        
        Reviewed by Tim Hatcher.

        https://bugs.webkit.org/show_bug.cgi?id=35256
        HTMLSelectElement::setSelectedIndexByUser() can trigger unnecessary JS when there is no change to the selected index

        No new tests because this code path is not used for JS-initiated changes.

        * html/HTMLSelectElement.cpp:
        (WebCore::HTMLSelectElement::setSelectedIndexByUser):
        Bail out if the to-be-selected index matches the already-selected index.

2010-02-22  Enrica Casucci  <enrica@apple.com>

        Reviewed by Dan Bernstein.

        Reproducible crash in WebCore::nextLinePosition on Tweeteorites.com
        <rdar://problem/7615758>
        https://bugs.webkit.org/show_bug.cgi?id=35060

        Test: editing/selection/extend-byline-withfloat.html

        * editing/visible_units.cpp:
        (WebCore::previousLinePosition): Skip elements with zero height.
        (WebCore::nextLinePosition): Skip elements with zero height.

2010-02-22  Nate Chapin  <japhet@chromium.org>

        Unreviewed, Chromium build fix.

        * bindings/scripts/CodeGeneratorV8.pm: Compile break due to bad patch merge.

2010-02-22  Nate Chapin  <japhet@chromium.org>

        Reviewed by Dimitri Glazkov.

        [V8] Streamline V8 event listener code. Merge all the variants of
        V8DOMWrapper::getEventListner() into a single version and generate
        addEventListener() and removeEventListener() bindings for all objects 
        except DOMWindow.

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

        * Android.v8bindings.mk:
        * WebCore.gypi:
        * bindings/scripts/CodeGeneratorV8.pm:
        * bindings/v8/V8DOMWrapper.cpp:
        (WebCore::V8DOMWrapper::getEventListener):
        * bindings/v8/V8DOMWrapper.h:
        * bindings/v8/WorkerContextExecutionProxy.cpp:
        * bindings/v8/WorkerContextExecutionProxy.h:
        * bindings/v8/custom/V8AbstractWorkerCustom.cpp: Removed.
        * bindings/v8/custom/V8DOMApplicationCacheCustom.cpp: Removed.
        * bindings/v8/custom/V8DOMWindowCustom.cpp:
        (WebCore::V8DOMWindow::addEventListenerCallback):
        (WebCore::V8DOMWindow::removeEventListenerCallback):
        * bindings/v8/custom/V8EventSourceCustom.cpp: Removed.
        * bindings/v8/custom/V8MessagePortCustom.cpp:
        * bindings/v8/custom/V8NodeCustom.cpp:
        * bindings/v8/custom/V8NotificationCenterCustom.cpp:
        * bindings/v8/custom/V8SVGElementInstanceCustom.cpp: Removed.
        * bindings/v8/custom/V8WebSocketCustom.cpp:
        * bindings/v8/custom/V8WorkerContextCustom.cpp:
        * bindings/v8/custom/V8XMLHttpRequestCustom.cpp:
        * bindings/v8/custom/V8XMLHttpRequestUploadCustom.cpp:
        * dom/MessagePort.idl:
        * dom/Node.idl:
        * loader/appcache/DOMApplicationCache.idl:
        * notifications/Notification.idl:
        * page/EventSource.idl:
        * svg/SVGElementInstance.idl:
        * websockets/WebSocket.idl:
        * workers/AbstractWorker.idl:
        * workers/WorkerContext.idl:
        * xml/XMLHttpRequest.idl:
        * xml/XMLHttpRequestUpload.idl:

2010-02-22  Chris Fleizach  <cfleizach@apple.com>

        Reviewed by Beth Dakin.

        AX: AXFocused is not writable like it should be on nodes
        https://bugs.webkit.org/show_bug.cgi?id=35186

        Test: platform/mac/accessibility/element-focus.html

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

2010-02-22  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Dan Bernstein, Darin Adler.

        Remove addScrolledContentOffset/subtractScrolledContentOffset
        https://bugs.webkit.org/show_bug.cgi?id=35225

        Remove RenderLayer's addScrolledContentOffset() and subtractScrolledContentOffset()
        methods, and instead use the existing scrolledContentOffset(), and use
        IntSize and IntPoint instead of lots of x, y variables.
        
        Added new IntPoint toPoint(const IntSize&) method as a convenience to convert a size to a point,
        which is needed in a few places.
        
        * page/EventHandler.cpp:
        (WebCore::EventHandler::handleDrag): Use the new toPoint() convenience.
        * platform/graphics/IntPoint.h:
        (WebCore::toPoint): New convenience method to convert an IntSize to an IntPoint.
        * rendering/LayoutState.cpp:
        (WebCore::LayoutState::LayoutState):
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::layoutBlock):
        (WebCore::RenderBlock::paintObject):
        (WebCore::RenderBlock::selectionGapRectsForRepaint):
        (WebCore::RenderBlock::nodeAtPoint):
        (WebCore::RenderBlock::offsetForContents):
        * rendering/RenderBoxModelObject.cpp:
        (WebCore::RenderBoxModelObject::paintFillLayerExtended):
        * rendering/RenderInline.cpp:
        (WebCore::RenderInline::clippedOverflowRectForRepaint):
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::updateLayerPosition):
        * rendering/RenderLayer.h:
        (WebCore::RenderLayer::size):
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::computeRectForRepaint):
        * rendering/TextControlInnerElements.cpp:
        (WebCore::RenderTextControlInnerBlock::positionForPoint):

2009-02-22  Adam Langley  <agl@google.com>

        Reviewed by Darin Fisher.

        fontconfig on Linux can change the render preferences on a per strike
        basis (a strike a combination of face and size). Because of this, we
        need to query fontconfig each time a new FontPlatformData is created
        for a new size.

        This patch adds support for querying this via ChromiumBridge.

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

        * platform/chromium/ChromiumBridge.h: add getRenderStyleForStrike
        * platform/graphics/chromium/FontCacheLinux.cpp:
        (WebCore::FontCache::createFontPlatformData):
        * platform/graphics/chromium/FontCustomPlatformData.cpp:
        (WebCore::FontCustomPlatformData::fontPlatformData):
        * platform/graphics/chromium/FontPlatformDataLinux.cpp:
        (WebCore::FontPlatformData::FontPlatformData):
        (WebCore::FontPlatformData::operator=):
        (WebCore::FontPlatformData::setupPaint):
        (WebCore::FontPlatformData::queryStyle):
          add code to query fontconfig via ChromiumBridge
        * platform/graphics/chromium/FontPlatformDataLinux.h:

2010-02-22  Gustavo Noronha Silva  <gustavo.noronha@collabora.co.uk>

        Build fix for make distcheck.

        * GNUmakefile.am:

2010-02-22  Laszlo Gombos  <laszlo.1.gombos@nokia.com>

        Reviewed by Kenneth Rohde Christiansen.

        Fix compiler warning "suggest parentheses around"
        https://bugs.webkit.org/show_bug.cgi?id=35197

        No new tests as there is no new functionality.

        * wml/WMLVariables.cpp:
        (WebCore::substituteVariableReferences):

2010-02-22  Gustavo Noronha Silva  <gns@gnome.org>

        Reviewed by Xan Lopez.

        [Soup] loses information related to message flags when converting from/to Resource{Request,Response}
        https://bugs.webkit.org/show_bug.cgi?id=35093

        Store message flags in WebCore objects, and set them on the
        SoupMessage, when creating one from them.

        No behaviour change.

        * platform/network/soup/ResourceHandleSoup.cpp:
        (WebCore::fillResponseFromMessage):
        * platform/network/soup/ResourceRequest.h:
        (WebCore::ResourceRequest::soupMessageFlags):
        (WebCore::ResourceRequest::setSoupMessageFlags):
        * platform/network/soup/ResourceRequestSoup.cpp:
        (WebCore::ResourceRequest::toSoupMessage):
        (WebCore::ResourceRequest::updateFromSoupMessage):
        * platform/network/soup/ResourceResponse.h:
        (WebCore::ResourceResponse::soupMessageFlags):
        (WebCore::ResourceResponse::setSoupMessageFlags):
        * platform/network/soup/ResourceResponseSoup.cpp:
        (WebCore::ResourceResponse::toSoupMessage):
        (WebCore::ResourceResponse::updateFromSoupMessage):

2010-02-22  Steve Block  <steveblock@google.com>

        Reviewed by Nate Chapin.

        Shared worker types used in globalObjectPrototypeIsDOMWindow are not properly guarded
        https://bugs.webkit.org/show_bug.cgi?id=35238

        No new tests, build fix only.

        * bindings/v8/V8DOMWrapper.cpp:
        (WebCore::globalObjectPrototypeIsDOMWindow):

2010-02-22  Steve Block  <steveblock@google.com>

        Reviewed by Simon Fraser.

        Simplifies calculation of the transform in RenderLayer::paintLayer
        https://bugs.webkit.org/show_bug.cgi?id=35101

        No new tests, optimization only.

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

2010-02-22  Nicholas Young  <nicholas.young@nokia.com>

        Reviewed by Tor Arne Vestbø.

        [Qt] Switching from Phonon to QtMultimedia Backend for Qt 4.7

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

        No new tests. This patch only affects multimedia backend.

        * WebCore.pro: Build depends on Qt version.
        * css/mediaControlsQt.css: Updated media controls.
        * platform/graphics/MediaPlayer.cpp: Different backend included depending on Qt version.
        * platform/graphics/qt/MediaPlayerPrivateQt.cpp: Added new QtMultimedia Backend.
        (WebCore::MediaPlayerPrivate::create):
        (WebCore::MediaPlayerPrivate::registerMediaEngine):
        (WebCore::MediaPlayerPrivate::getSupportedTypes):
        (WebCore::MediaPlayerPrivate::supportsType):
        (WebCore::MediaPlayerPrivate::MediaPlayerPrivate):
        (WebCore::MediaPlayerPrivate::~MediaPlayerPrivate):
        (WebCore::MediaPlayerPrivate::hasVideo):
        (WebCore::MediaPlayerPrivate::hasAudio):
        (WebCore::MediaPlayerPrivate::load):
        (WebCore::MediaPlayerPrivate::cancelLoad):
        (WebCore::MediaPlayerPrivate::play):
        (WebCore::MediaPlayerPrivate::pause):
        (WebCore::MediaPlayerPrivate::paused):
        (WebCore::MediaPlayerPrivate::seek):
        (WebCore::MediaPlayerPrivate::seeking):
        (WebCore::MediaPlayerPrivate::duration):
        (WebCore::MediaPlayerPrivate::currentTime):
        (WebCore::MediaPlayerPrivate::buffered):
        (WebCore::MediaPlayerPrivate::maxTimeSeekable):
        (WebCore::MediaPlayerPrivate::bytesLoaded):
        (WebCore::MediaPlayerPrivate::totalBytes):
        (WebCore::MediaPlayerPrivate::setRate):
        (WebCore::MediaPlayerPrivate::setVolume):
        (WebCore::MediaPlayerPrivate::supportsMuting):
        (WebCore::MediaPlayerPrivate::setMuted):
        (WebCore::MediaPlayerPrivate::networkState):
        (WebCore::MediaPlayerPrivate::readyState):
        (WebCore::MediaPlayerPrivate::setVisible):
        (WebCore::MediaPlayerPrivate::mediaStatusChanged):
        (WebCore::MediaPlayerPrivate::handleError):
        (WebCore::MediaPlayerPrivate::stateChanged):
        (WebCore::MediaPlayerPrivate::nativeSizeChanged):
        (WebCore::MediaPlayerPrivate::queuedSeekTimeout):
        (WebCore::MediaPlayerPrivate::seekTimeout):
        (WebCore::MediaPlayerPrivate::positionChanged):
        (WebCore::MediaPlayerPrivate::durationChanged):
        (WebCore::MediaPlayerPrivate::volumeChanged):
        (WebCore::MediaPlayerPrivate::mutedChanged):
        (WebCore::MediaPlayerPrivate::updateStates):
        (WebCore::MediaPlayerPrivate::setSize):
        (WebCore::MediaPlayerPrivate::naturalSize):
        (WebCore::MediaPlayerPrivate::paint):
        (WebCore::MediaPlayerPrivate::repaint):
        * platform/graphics/qt/MediaPlayerPrivateQt.h: Added new QtMultimedia Backend.
        (WebCore::MediaPlayerPrivate::isAvailable):
        (WebCore::MediaPlayerPrivate::supportsFullscreen):
        * platform/qt/RenderThemeQt.cpp:
        (WebCore::RenderThemeQt::mediaControlsBaselineOpacity): New method.
        (WebCore::RenderThemeQt::paintMediaBackground): Background depends on baseline opacity.
        (WebCore::RenderThemeQt::paintMediaMuteButton): Changed styling.
        (WebCore::RenderThemeQt::paintMediaCurrentTime): Added current time display.
        (WebCore::RenderThemeQt::formatMediaControlsCurrentTime): Added time formatting.
        (WebCore::RenderThemeQt::formatMediaControlsRemainingTime): Added time formatting.
        (WebCore::RenderThemeQt::paintMediaVolumeSliderTrack): Volume slider added.
        (WebCore::RenderThemeQt::paintMediaVolumeSliderThumb): Volume slider added.
        (WebCore::RenderThemeQt::paintMediaSliderTrack): Updated for QtMultimedia.
        (WebCore::RenderThemeQt::paintMediaSliderThumb): Dropped an unnecessary check.
        (WebCore::RenderThemeQt::adjustSliderThumbSize): Handle a missing case.
        * platform/qt/RenderThemeQt.h: Reimplemented a few more methods.

2010-02-22  Alexander Pavlov  <apavlov@chromium.org>

        Not reviewed: mac build fix

        * bindings/js/ScriptDebugServer.cpp:
        (WebCore::ScriptDebugServer::ScriptDebugServer):

2010-02-22  Alexander Pavlov  <apavlov@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: there should be a way to "deactivate" or "skip" all breakpoints while debugging.
        https://bugs.webkit.org/show_bug.cgi?id=33217

        * English.lproj/localizedStrings.js:
        * bindings/js/ScriptDebugServer.cpp:
        (WebCore::ScriptDebugServer::ScriptDebugServer):
        (WebCore::ScriptDebugServer::hasBreakpoint):
        (WebCore::ScriptDebugServer::setBreakpointsActivated):
        * bindings/js/ScriptDebugServer.h:
        * bindings/v8/ScriptDebugServer.h:
        (WebCore::ScriptDebugServer::setBreakpointsActivated):
        * inspector/InspectorBackend.cpp:
        (WebCore::InspectorBackend::activateBreakpoints):
        (WebCore::InspectorBackend::deactivateBreakpoints):
        * inspector/InspectorBackend.h:
        * inspector/InspectorBackend.idl:
        * inspector/front-end/Images/deactivateBreakpointsButtonGlyph.png: Added.
        * inspector/front-end/Images/deactivateBreakpointsDisabledButtonGlyph.png: Added.
        * inspector/front-end/InspectorBackendStub.js:
        (.WebInspector.InspectorBackendStub.prototype.activateBreakpoints):
        (.WebInspector.InspectorBackendStub.prototype.deactivateBreakpoints):
        * inspector/front-end/ScriptsPanel.js:
        (WebInspector.ScriptsPanel):
        (WebInspector.ScriptsPanel.prototype.get breakpointsActivated):
        (WebInspector.ScriptsPanel.prototype.addBreakpoint):
        (WebInspector.ScriptsPanel.prototype._stepOutClicked):
        (WebInspector.ScriptsPanel.prototype._toggleBreakpointsClicked):
        * inspector/front-end/inspector.css:
        * inspector/front-end/textViewer.css:

2010-02-22  Mark Rowe  <mrowe@apple.com>

        Rubber-stamped by Sam Weinig and Maciej Stachowiak.

        REGRESSION (r55039): Animation starts from near end when loaded over slow network
        <http://webkit.org/b/35222> / <rdar://problem/7673523>

        Roll out r55039 (related to <http://webkit.org/b/35115>) as it causes animated GIFs
        to skip intermediate frames when loading over a slower network.

        * platform/graphics/BitmapImage.cpp:
        (WebCore::BitmapImage::startAnimation):

2010-02-22  Maciej Stachowiak  <mjs@apple.com>

        Not reviewed, build fix.
        
        Revert the previous change.
        
2010-02-21  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Darin Adler.

        Cache JavaScript wrappers inline in DOM nodes
        https://bugs.webkit.org/show_bug.cgi?id=35226
        <rdar://problem/7664202>

        8.8% speedup on Dromaeo DOM Core tests.
        3.3% speedup on Hixie DOM Core tests.
        
        * bindings/js/JSDOMBinding.cpp:
        (WebCore::forgetDOMNode): Clear wrapper pointer.
        (WebCore::cacheDOMNodeWrapper): Cache inline too if caching for normal world.
        * bindings/js/JSDOMBinding.h:
        (WebCore::DOMObjectWrapperMapFor): 
        * bindings/js/JSDocumentCustom.cpp:
        (WebCore::toJS): Remove unneeded argument from getCachedDOMNodeWrapper.
        * bindings/js/JSNodeCustom.cpp:
        (WebCore::createWrapperInline): Renamed version of original createWrapper.
        (WebCore::createWrapper): Call createWrapperInline. Out-of-line version.
        (WebCore::toJSNewlyCreated): Call createWrapperInline instead of createWrapper.
        * bindings/js/JSNodeCustom.h: Added.
        (WebCore::getCachedDOMNodeWrapper): Moved here so it can be inlined.
        (WebCore::toJS): Moved here so it can be inlined.
        * bindings/js/ScriptWrappable.h:
        (WebCore::ScriptWrappable::ScriptWrappable): Implement this in the obvious
        way for JavaScriptCore.
        (WebCore::ScriptWrappable::wrapper):
        (WebCore::ScriptWrappable::setWrapper):
        (WebCore::ScriptWrappable::clearWrapper):
        * bindings/scripts/CodeGeneratorJS.pm: Include CustomHeader heaaders
        in the header, not just the impl file, so they can add inlining.
        * dom/Node.idl: Add CustomHeader directive.
        
        Add new files to build.

        * GNUmakefile.am:
        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:

2010-02-22  Pavel Feldman  <pfeldman@chromium.org>

        Not reviewed: windows build fix.

2010-02-21  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Timothy Hatcher.

        Web Inspector: stop on inline breakpoints on reload.
        - ScriptBreakpoint struct has been introduced and reused in InspectorController
          and debug server.
        - JavaScriptDebugServer was moved to bindings/js and renamed to ScriptDebugServer
          There were no changes to semantics, only some mechanical changes:
            - addBreakpoint and updateBreakpoint were merged into setBreakpoint
            - ScriptDebugServer now operates ScriptBreakpoint instances instead of
              BreakpointInfo.
            - It no longer allocates maps and breakpoint info in heap - all done on stack.
            - JavaScriptDebugListener is now ScriptDebugServer::Listener
            - Listener methods no longer have ExecState (was unused).
            - addListener/removeListener pair wuth no page argument removed (was unused).
        - InspectorController now binds sourceID to url and maintains a map of 'sticky'
          breakpoints. Whenever script is loaded and there is a sticky breakpoint url matching,
          breakpoint is being 'restored' synchronously in debug server and pushed to frontend.
          Front-end no longer stores map of sticky breakpoints.
            - setBreakpoint/removeBreakpoint/didParseSource trio handle this logic.
        - A bunch of if(USE_JSC/V8/other) forks removed.
        - InspectorFrontend now operates primitive types only, got rid of USE_JSC as well.

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

        * GNUmakefile.am:
        * WebCore.base.exp:
        * WebCore.gypi:
        * WebCore.order:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSInjectedScriptHostCustom.cpp:
        (WebCore::JSInjectedScriptHost::currentCallFrame):
        (WebCore::JSInjectedScriptHost::isActivation):
        * bindings/js/ScriptDebugServer.cpp:
        (WebCore::ScriptDebugServer::shared):
        (WebCore::ScriptDebugServer::ScriptDebugServer):
        (WebCore::ScriptDebugServer::~ScriptDebugServer):
        (WebCore::ScriptDebugServer::addListener):
        (WebCore::ScriptDebugServer::removeListener):
        (WebCore::ScriptDebugServer::pageCreated):
        (WebCore::ScriptDebugServer::hasListenersInterestedInPage):
        (WebCore::ScriptDebugServer::setBreakpoint):
        (WebCore::ScriptDebugServer::removeBreakpoint):
        (WebCore::ScriptDebugServer::hasBreakpoint):
        (WebCore::ScriptDebugServer::clearBreakpoints):
        (WebCore::ScriptDebugServer::setPauseOnExceptionsState):
        (WebCore::ScriptDebugServer::pauseProgram):
        (WebCore::ScriptDebugServer::continueProgram):
        (WebCore::ScriptDebugServer::stepIntoStatement):
        (WebCore::ScriptDebugServer::stepOverStatement):
        (WebCore::ScriptDebugServer::stepOutOfFunction):
        (WebCore::ScriptDebugServer::currentCallFrame):
        (WebCore::ScriptDebugServer::currentCallFrameState):
        (WebCore::ScriptDebugServer::dispatchDidParseSource):
        (WebCore::ScriptDebugServer::dispatchFailedToParseSource):
        (WebCore::toPage):
        (WebCore::ScriptDebugServer::detach):
        (WebCore::ScriptDebugServer::sourceParsed):
        (WebCore::ScriptDebugServer::dispatchFunctionToListeners):
        (WebCore::ScriptDebugServer::setJavaScriptPaused):
        (WebCore::ScriptDebugServer::pauseIfNeeded):
        (WebCore::ScriptDebugServer::callEvent):
        (WebCore::ScriptDebugServer::atStatement):
        (WebCore::ScriptDebugServer::returnEvent):
        (WebCore::ScriptDebugServer::exception):
        (WebCore::ScriptDebugServer::willExecuteProgram):
        (WebCore::ScriptDebugServer::didExecuteProgram):
        (WebCore::ScriptDebugServer::didReachBreakpoint):
        (WebCore::ScriptDebugServer::recompileAllJSFunctionsSoon):
        (WebCore::ScriptDebugServer::recompileAllJSFunctions):
        (WebCore::ScriptDebugServer::didAddListener):
        (WebCore::ScriptDebugServer::didRemoveListener):
        (WebCore::ScriptDebugServer::didRemoveLastListener):
        * bindings/js/ScriptDebugServer.h:
        (WebCore::ScriptDebugServer::Listener::~Listener):
        (WebCore::ScriptDebugServer::):
        (WebCore::ScriptDebugServer::pauseOnExceptionsState):
        (WebCore::ScriptDebugServer::hasListeners):
        (WebCore::ScriptDebugServer::hasGlobalListeners):
        * bindings/v8/ScriptDebugServer.cpp:
        (WebCore::ScriptDebugServer::shared):
        * bindings/v8/ScriptDebugServer.h:
        (WebCore::ScriptDebugServer::Listener::~Listener):
        (WebCore::ScriptDebugServer::addListener):
        (WebCore::ScriptDebugServer::removeListener):
        (WebCore::ScriptDebugServer::setBreakpoint):
        (WebCore::ScriptDebugServer::removeBreakpoint):
        (WebCore::ScriptDebugServer::clearBreakpoints):
        (WebCore::ScriptDebugServer::):
        (WebCore::ScriptDebugServer::pauseOnExceptionsState):
        (WebCore::ScriptDebugServer::setPauseOnExceptionsState):
        (WebCore::ScriptDebugServer::pauseProgram):
        (WebCore::ScriptDebugServer::continueProgram):
        (WebCore::ScriptDebugServer::stepIntoStatement):
        (WebCore::ScriptDebugServer::stepOverStatement):
        (WebCore::ScriptDebugServer::stepOutOfFunction):
        (WebCore::ScriptDebugServer::recompileAllJSFunctionsSoon):
        (WebCore::ScriptDebugServer::recompileAllJSFunctions):
        (WebCore::ScriptDebugServer::currentCallFrameState):
        (WebCore::ScriptDebugServer::pageCreated):
        (WebCore::ScriptDebugServer::ScriptDebugServer):
        (WebCore::ScriptDebugServer::~ScriptDebugServer):
        * bindings/v8/custom/V8InjectedScriptHostCustom.cpp:
        (WebCore::V8InjectedScriptHost::currentCallFrameCallback):
        (WebCore::V8InjectedScriptHost::isActivationCallback):
        * inspector/InjectedScriptHost.cpp:
        * inspector/InjectedScriptHost.h:
        * inspector/InjectedScriptHost.idl:
        * inspector/InspectorBackend.cpp:
        (WebCore::InspectorBackend::setBreakpoint):
        (WebCore::InspectorBackend::removeBreakpoint):
        (WebCore::InspectorBackend::pauseInDebugger):
        (WebCore::InspectorBackend::stepOverStatementInDebugger):
        (WebCore::InspectorBackend::stepIntoStatementInDebugger):
        (WebCore::InspectorBackend::stepOutOfFunctionInDebugger):
        (WebCore::InspectorBackend::pauseOnExceptionsState):
        (WebCore::InspectorBackend::setPauseOnExceptionsState):
        * inspector/InspectorBackend.h:
        * inspector/InspectorBackend.idl:
        * inspector/ScriptBreakpoint.h: Added.
        (WebCore::InspectorBreakpoint::InspectorBreakpoint):
        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::InspectorController):
        (WebCore::InspectorController::setWindowVisible):
        (WebCore::InspectorController::scriptObjectReady):
        (WebCore::InspectorController::close):
        (WebCore::InspectorController::didCommitLoad):
        (WebCore::InspectorController::addProfile):
        (WebCore::InspectorController::startUserInitiatedProfiling):
        (WebCore::InspectorController::stopUserInitiatedProfiling):
        (WebCore::InspectorController::enableProfiler):
        (WebCore::InspectorController::disableProfiler):
        (WebCore::InspectorController::enableDebuggerFromFrontend):
        (WebCore::InspectorController::disableDebugger):
        (WebCore::InspectorController::resumeDebugger):
        (WebCore::InspectorController::setBreakpoint):
        (WebCore::InspectorController::removeBreakpoint):
        (WebCore::InspectorController::didParseSource):
        (WebCore::InspectorController::failedToParseSource):
        (WebCore::InspectorController::didPause):
        * inspector/InspectorController.h:
        * inspector/InspectorFrontend.cpp:
        (WebCore::InspectorFrontend::parsedScriptSource):
        (WebCore::InspectorFrontend::restoredBreakpoint):
        (WebCore::InspectorFrontend::failedToParseScriptSource):
        (WebCore::InspectorFrontend::resumedScript):
        * inspector/InspectorFrontend.h:
        * inspector/JavaScriptDebugListener.h: Removed.
        * inspector/JavaScriptDebugServer.cpp: Removed.
        * inspector/JavaScriptDebugServer.h: Removed.
        * inspector/front-end/Breakpoint.js:
        (WebInspector.Breakpoint.prototype.set condition):
        * inspector/front-end/BreakpointsSidebarPane.js:
        (WebInspector.BreakpointsSidebarPane.prototype.addBreakpoint):
        (WebInspector.BreakpointsSidebarPane.prototype._breakpointEnableChanged):
        * inspector/front-end/InspectorBackendStub.js:
        (.WebInspector.InspectorBackendStub.prototype.addBreakpoint):
        * inspector/front-end/ResourcesPanel.js:
        (WebInspector.ResourcesPanel.prototype.sourceFrameForResource):
        * inspector/front-end/ScriptsPanel.js:
        (WebInspector.ScriptsPanel):
        (WebInspector.ScriptsPanel.prototype.addScript):
        (WebInspector.ScriptsPanel.prototype.addBreakpoint):
        (WebInspector.ScriptsPanel.prototype.removeBreakpoint):
        (WebInspector.ScriptsPanel.prototype._showScriptOrResource):
        * inspector/front-end/inspector.js:
        (WebInspector.restoredBreakpoint):
        * page/Page.cpp:
        (WebCore::Page::Page):
        * platform/android/TemporaryLinkStubs.cpp:

2010-02-21  Gavin Barraclough  <barraclough@apple.com>

        Reviewed by Oliver Hunt.

        Make the UChar owned/ref-counted by StringImpl::CrossThreadRefCounted be const.

        * platform/text/StringImpl.cpp:
        (WebCore::StringImpl::sharedBuffer):
        * platform/text/StringImpl.h:

2010-02-07  Yuzo Fujishima  <yuzo@google.com>

        Reviewed by Eric Seidel.

        When page-break-{after,before} is set to always, force page breaks even for overflow-specified elements.
        RenderBlock::inRootBlockContext() was introduced by Changeset 5611. Although it is a reasonable criteria for choosing an optional page break location, it is not for a mandatory page break as specified by http://dev.w3.org/csswg/css3-page/#forced-pg-brk. The method is removed because it is not used anywhere else.
        Note: this patch makes page break work for overflow-specified elements. For tables and floated elements, more work is needed.
        https://bugs.webkit.org/show_bug.cgi?id=9526

        Test: printing/page-break-always-for-overflow.html

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::paintChildren):
        * rendering/RenderBlock.h:

2010-02-21  Julien Chaffraix  <jchaffraix@webkit.org>

        Reviewed by Eric Seidel.

        Remove auto_ptr usage in WebCore.
        https://bugs.webkit.org/show_bug.cgi?id=35157

        The changes consists of:

        - Changing auto_ptr arguments or return types to PassOwnPtr.

        - Replacing local auto_ptr by OwnPtr.

        - Removing now unneeded <memory> inclusion.

        * css/CSSParser.cpp:
        (WebCore::CSSParser::addProperty):
        * loader/WorkerThreadableLoader.cpp:
        (WebCore::WorkerThreadableLoader::MainThreadBridge::mainThreadCreateLoader):
        (WebCore::workerContextDidReceiveResponse):
        (WebCore::workerContextDidReceiveData):
        (WebCore::WorkerThreadableLoader::MainThreadBridge::didReceiveData):
        (WebCore::workerContextDidReceiveAuthenticationCancellation):
        * loader/WorkerThreadableLoader.h:
        * loader/icon/IconLoader.cpp:
        (WebCore::IconLoader::create):
        * loader/icon/IconLoader.h:
        * platform/ContextMenu.cpp:
        (WebCore::separatorItem):
        * platform/CrossThreadCopier.h:
        (WebCore::):
        * platform/network/HTTPHeaderMap.cpp:
        (WebCore::HTTPHeaderMap::copyData):
        (WebCore::HTTPHeaderMap::adopt):
        * platform/network/HTTPHeaderMap.h:
        * platform/network/ResourceRequestBase.cpp:
        (WebCore::ResourceRequestBase::adopt):
        (WebCore::ResourceRequestBase::copyData):
        * platform/network/ResourceRequestBase.h:
        * platform/network/ResourceResponseBase.cpp:
        (WebCore::ResourceResponseBase::adopt):
        (WebCore::ResourceResponseBase::copyData):
        * platform/network/ResourceResponseBase.h:
        * svg/SVGDocumentExtensions.cpp:
        (WebCore::SVGDocumentExtensions::removePendingResource):
        * svg/SVGDocumentExtensions.h:
        * svg/SVGElement.cpp:
        (WebCore::SVGElement::insertedIntoDocument):
        * workers/GenericWorkerTask.h:
        * workers/WorkerThread.cpp:
        (WebCore::WorkerThreadStartupData::create):

2010-02-21  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Dan Bernstein.

        https://bugs.webkit.org/show_bug.cgi?id=22215
        Avoid calling absoluteClippedOverflowRect() so many times

        RenderLayer::updateLayerPositions() computes the clipped overflow rect
        and the outline bounds for repaint, and then calls repaintAfterLayoutIfNeeded()
        which can compute the same rects all over again. Avoid this by passing
        these two rects into repaintAfterLayoutIfNeeded() if known. This measurably
        reduces the time spent in updateLayerPositions() for some content.

        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::updateLayerPositions):
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::repaintAfterLayoutIfNeeded):
        * rendering/RenderObject.h:

2010-02-20  Alexey Proskuryakov  <ap@apple.com>

        Reviewed by Maciej Stachowiak.

        https://bugs.webkit.org/show_bug.cgi?id=35202
        <rdar://problem/4856597> Calling Java method which accepts Object always passes a null argument

        * bridge/jni/jsc/JNIUtilityPrivate.cpp: (JSC::Bindings::convertValueToJValue): Add cases for
        other JS types.

2010-02-20  Laszlo Gombos  <laszlo.1.gombos@nokia.com>

        Reviewed by Darin Adler.

        Fix compiler warning "suggest parentheses around"
        https://bugs.webkit.org/show_bug.cgi?id=35197

        No new tests as there is no new functionality.

        * html/DateComponents.cpp:
        (WebCore::beforeGregorianStartDate):
        * plugins/PluginDatabase.cpp:
        (WebCore::PluginDatabase::findPlugin):

2010-02-20  Noam Rosenthal  <noam.rosenthal@nokia.com>

        Reviewed by Laszlo Gombos.

        [Qt] ENABLE_3D_RENDERING should be optional
        https://bugs.webkit.org/show_bug.cgi?id=35100

        No new tests: this is a build fix.

        * WebCore.pri: ENABLE_3D_RENDERING is now a proper feature test

2010-02-20  Alexey Proskuryakov  <ap@apple.com>

        Reviewed by Maciej Stachowiak.

        https://bugs.webkit.org/show_bug.cgi?id=23742
        Applet methods can not return arrays to JS

        * bridge/jni/jsc/JNIBridgeJSC.cpp: (JavaArray::JavaArray): Don't accidentally zero out
        m_rootObject (that's how PassRefPtr works). Without m_rootObject, we crash quickly.

        * bridge/jni/jsc/JavaInstanceJSC.cpp: (JavaInstance::invokeMethod): Do handle returned arrays.
        Also, added an ifdef around  code that's only needed on Tiger, and removed a comment saying
        it can be removed when "new" plugin ships. I doubt that anyone can remember what "new"
        could refer to back then.

2010-02-20  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Timothy Hatcher.

        Web Inspector: re-creating view in ResourcesPanel confuses ScriptsPanel's visibleView logic.

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

        * inspector/front-end/ResourcesPanel.js:
        (WebInspector.ResourcesPanel.prototype.recreateViewForResourceIfNeeded):
        * inspector/front-end/ScriptsPanel.js:
        (WebInspector.ScriptsPanel.prototype.show):
        (WebInspector.ScriptsPanel.prototype.viewRecreated):

2010-02-20  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Timothy Hatcher.

        Web Inspector: need to highlight the evaluated expression used for popovers.

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

        * inspector/front-end/SourceFrame.js:
        (WebInspector.SourceFrame.prototype._mouseMove):
        (WebInspector.SourceFrame.prototype._hidePopup):
        (WebInspector.SourceFrame.prototype._mouseHover):
        (WebInspector.SourceFrame.prototype._showPopup.showObjectPopup):
        (WebInspector.SourceFrame.prototype._showPopup):
        * inspector/front-end/inspector.css:

2010-02-20  Gustavo Noronha Silva  <gns@gnome.org>

        Roll out 55047 because it causes layout, and API tests to fail

2010-02-19  Gustavo Noronha Silva  <gustavo.noronha@collabora.co.uk>

        Reviewed by Xan Lopez.

        [Soup] loses information related to message flags when converting from/to Resource{Request,Response}
        https://bugs.webkit.org/show_bug.cgi?id=35093

        Refactor updating of ResourceResponse objects from soup message
        objects, to avoid code duplication.

        No behaviour change.

        * platform/network/soup/ResourceHandleSoup.cpp:
        (WebCore::fillResponseFromMessage):
        * platform/network/soup/ResourceResponseSoup.cpp:
        (WebCore::ResourceResponse::updateFromSoupMessage):

2010-02-20  Alexey Proskuryakov  <ap@apple.com>

        Reviewed by Maciej Stachowiak.

        https://bugs.webkit.org/show_bug.cgi?id=35190
        Don't use system malloc in Java bindings

        * bridge/jni/jsc/JavaInstanceJSC.cpp: (JavaInstance::invokeMethod): Switched to WTF::Vector.

2010-02-20  Alexey Proskuryakov  <ap@apple.com>

        Reviewed by Maciej Stachowiak.

        https://bugs.webkit.org/show_bug.cgi?id=9761
        LiveConnect string conversion fails for java.lang.Object

        Can't test Java in DRT (I wonder why).

        * bridge/jni/jsc/JNIUtilityPrivate.cpp: (JSC::Bindings::convertValueToJValue):
        Added the necessary conversion. Also, removed CONVERT_NULL_TO_EMPTY_STRING dead code.

2010-02-19  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by David Levin.

        Add an ENABLE flag for sandboxed iframes to make it possible to disable it in releases
        https://bugs.webkit.org/show_bug.cgi?id=35147

        I made ENABLE(SANDBOX) only control the sandbox attribute itself;
        I did not ifdef the infrastructure to make sandboxing
        switchable. This is because the likely concerns about sandboxing
        are not stability of the infrastructure code, but rather the fact
        that the security model exposed to authors is still evolving.

        * Configurations/FeatureDefines.xcconfig:
        * GNUmakefile.am:
        * WebCore.pri:
        * html/HTMLIFrameElement.cpp:
        (WebCore::HTMLIFrameElement::parseMappedAttribute):

2010-02-19  Alexey Proskuryakov  <ap@apple.com>

        Reviewed by Maciej Stachowiak.

        https://bugs.webkit.org/show_bug.cgi?id=35132
        <rdar://problem/7664353> Mouse cursor sometimes flickers over Flash content (35132)

        * page/EventHandler.cpp: (WebCore::EventHandler::handleMouseMoveEvent): Don't set mouse
        pointer when above a plug-in or applet to prevent flicker.

2010-02-18  Peter Kasting  <pkasting@google.com>

        Reviewed by Adam Barth.

        Fix regression in calculating an animated image's start time.
        https://bugs.webkit.org/show_bug.cgi?id=35115

        * platform/graphics/BitmapImage.cpp:
        (WebCore::BitmapImage::startAnimation):

2010-02-19  Alexey Proskuryakov  <ap@apple.com>

        Reviewed by Geoffrey Garen.

        https://bugs.webkit.org/show_bug.cgi?id=35178
        LiveConnect code uses hand-rolled fprintf logging

        Changed to use LOG, LOG_ERROR and ASSERT.

        * platform/Logging.cpp:
        (WebCore::getChannelFromName):
        * platform/Logging.h:
        * platform/mac/LoggingMac.mm:
        (WebCore::InitializeLoggingChannelsIfNecessary):
        * platform/win/LoggingWin.cpp:
        (WebCore::InitializeLoggingChannelsIfNecessary):
        TextConversion channel was (almost) unused, renamed to LiveConnect.

        * platform/text/gtk/TextCodecGtk.cpp: (WebCore::TextCodecGtk::registerEncodingNames):
        The only use of this channel was in platform specific code, commandeered it for cross-platform
        needs.

        * bridge/jni/JNIBridge.cpp:
        * bridge/jni/JNIUtility.cpp:
        (JSC::Bindings::getJavaVM):
        (JSC::Bindings::getJNIEnv):
        (JSC::Bindings::getJNIField):
        * bridge/jni/JNIUtility.h:
        (JSC::Bindings::callJNIMethodV):
        (JSC::Bindings::callJNIStaticMethod):
        * bridge/jni/jni_jsobject.mm:
        (completedJavaScriptAccess):
        (dispatchToJavaScriptThread):
        (performJavaScriptAccess):
        (JavaJSObject::invoke):
        (JavaJSObject::call):
        (JavaJSObject::eval):
        (JavaJSObject::getMember):
        (JavaJSObject::setMember):
        (JavaJSObject::removeMember):
        (JavaJSObject::getSlot):
        (JavaJSObject::setSlot):
        (JavaJSObject::toString):
        (JavaJSObject::createNative):
        * bridge/jni/jsc/JNIBridgeJSC.cpp:
        (JavaField::valueFromInstance):
        (JavaField::setValueToInstance):
        * bridge/jni/jsc/JavaClassJSC.cpp:
        (JavaClass::JavaClass):
        * bridge/jni/jsc/JavaInstanceJSC.cpp:
        (JavaInstance::invokeMethod):
        (JObjectWrapper::JObjectWrapper):
        (JObjectWrapper::~JObjectWrapper):

2010-02-19  Dirk Schulze  <krit@webkit.org>

        Reviewed by Nikolas Zimmermann.

        RenderSVGResourceMasker causes an Assert on Wind builds during DRT
        https://bugs.webkit.org/show_bug.cgi?id=35182

        We remove the Assert for now and return earlier, if the HashMap of the Masker
        does not contain the RenderObject. The RenderObject is an identifiert to get
        a already calculated mask.
        A race condition during parsing can cause the invalidation call, before the mask
        got calculated (only during DRT on Win build bots).
        The real bug will be fixed with: https://bugs.webkit.org/show_bug.cgi?id=35181

        * rendering/RenderSVGResourceMasker.cpp:
        (WebCore::RenderSVGResourceMasker::invalidateClient):

2010-02-18  Peter Kasting  <pkasting@google.com>

        Reviewed by Darin Fisher.

        Make Pasteboard::writeImage() safe against NULL cachedImages, and clean
        up some code.
        https://bugs.webkit.org/show_bug.cgi?id=35136

        * loader/ImageLoader.cpp:
        (WebCore::ImageLoader::updateRenderer): Shorten some code.
        * page/DragController.cpp:
        (WebCore::getImage): Shorten some code.
        * platform/chromium/PasteboardChromium.cpp:
        (WebCore::Pasteboard::writeImage): NULL-check cachedImage().
        * platform/gtk/PasteboardGtk.cpp:
        (WebCore::Pasteboard::writeImage): NULL-check cachedImage().
        * platform/mac/PasteboardMac.mm:
        (WebCore::Pasteboard::writeImage): NULL-check cachedImage().
        * platform/qt/PasteboardQt.cpp:
        (WebCore::Pasteboard::writeImage): NULL-check cachedImage().
        * platform/win/PasteboardWin.cpp:
        (WebCore::Pasteboard::writeImage): NULL-check cachedImage().

2010-02-19  Kenneth Rohde Christiansen  <kenneth@webkit.org>

        Rubberstamped by Noam Rosenthal, who wrote the original code.

        Make mouse wheel scrolling work when using the GraphicsLayer.

        * platform/graphics/qt/GraphicsLayerQt.cpp:
        (WebCore::GraphicsLayerQtImpl::GraphicsLayerQtImpl):

2010-02-19  Nate Chapin  <japhet@chromium.org>

        Reviewed by Dimitri Glazkov.

        [V8] Fix Worker crash regression in r54972

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

        * bindings/v8/V8DOMWrapper.cpp:
        (WebCore::V8DOMWrapper::instantiateV8Object): Properly unwrap global objects when inside a WorkerContext.

2010-02-19  Steve Block  <steveblock@google.com>

        Not reviewed. Reverts r55020 which causes crashes in Chromium LayoutTests

        * bindings/generic/RuntimeEnabledFeatures.cpp:
        * storage/Database.cpp:

2010-02-19  Steve Block  <steveblock@google.com>

        Reviewed by David Levin.

        Sets default values of V8 runtime enabler flags to match behavior with JSC
        https://bugs.webkit.org/show_bug.cgi?id=35095

        No new tests, modifies a Chromium feature only.

        * bindings/generic/RuntimeEnabledFeatures.cpp: Modified. Sets appcache and geolocation flag defaults to 'on'
        * storage/Database.cpp: Modified. Sets database flag default to 'on'.

2010-02-19  Alexander Pavlov  <apavlov@chromium.org>

        Reviewed by Pavel Feldman.

        WebInspector: Elements panel: Correctly show empty elements' ending tags
        for XML and HTML documents.
        https://bugs.webkit.org/show_bug.cgi?id=26315

        Test: inspector/elements-panel-xhtml-structure.xhtml

        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::populateScriptObjects):
        * inspector/front-end/ElementsTreeOutline.js:
        (WebInspector.ElementsTreeOutline.prototype.set rootDOMNode):
        (WebInspector.ElementsTreeOutline.prototype.get isXMLMimeType):
        (WebInspector.ElementsTreeOutline.prototype._contextMenuEventFired):
        (WebInspector.ElementsTreeElement.prototype.onexpand):
        (WebInspector.ElementsTreeElement.prototype.oncollapse):
        (WebInspector.ElementsTreeElement.prototype.updateTitle.callback):
        (WebInspector.ElementsTreeElement.prototype.updateTitle):
        (WebInspector.ElementsTreeElement.prototype._nodeTitleInfo):

2010-02-19  Pavel Feldman  <pfeldman@chromium.org>

        Not reviewed. Chromium build fix: reverting r54997 and r54998.

        * bindings/v8/custom/V8LocationCustom.cpp:
        (WebCore::V8Location::protocolAccessorSetter):
        * platform/KURLGoogle.cpp:
        (WebCore::KURL::setProtocol):
        (WebCore::KURL::isHierarchical):

2010-02-17  Philippe Normand  <pnormand@igalia.com>

        Reviewed by Eric Seidel.

        [GTK] RTP/RTSP streams playback support
        https://bugs.webkit.org/show_bug.cgi?id=33662

        Added live pipelines support in updateStates().

        * manual-tests/video-rtsp.html: Added.
        * platform/graphics/gtk/MediaPlayerPrivateGStreamer.cpp:
        (WebCore::MediaPlayerPrivate::seek):
        (WebCore::MediaPlayerPrivate::updateStates):

2010-02-18  Yaar Schnitman  <yaar@chromium.org>

        Reviewed by Darin Adler.

        Normalize custom ctors for Image, Option, Audio
        https://bugs.webkit.org/show_bug.cgi?id=34782

        Test: fast/js/custom-constructors.html

        * bindings/js/JSAudioConstructor.cpp:
        (WebCore::JSAudioConstructor::JSAudioConstructor):
        (WebCore::constructAudio):
        * bindings/js/JSImageConstructor.cpp:
        (WebCore::constructImage):
        * bindings/js/JSOptionConstructor.cpp:
        (WebCore::constructHTMLOptionElement):
        * bindings/v8/custom/V8HTMLAudioElementConstructor.cpp:
        (WebCore::v8HTMLAudioElementConstructorCallback):
        * bindings/v8/custom/V8HTMLImageElementConstructor.cpp:
        (WebCore::v8HTMLImageElementConstructorCallback):
        * bindings/v8/custom/V8HTMLOptionElementConstructor.cpp:
        (WebCore::v8HTMLOptionElementConstructorCallback):
        * html/HTMLAudioElement.cpp:
        (WebCore::HTMLAudioElement::HTMLAudioElement):
        (WebCore::HTMLAudioElement::createForJSConstructor):
        * html/HTMLAudioElement.h:
        * html/HTMLImageElement.cpp:
        (WebCore::HTMLImageElement::createForJSConstructor):
        (WebCore::HTMLImageElement::mapToEntry):
        (WebCore::HTMLImageElement::createRenderer):
        (WebCore::HTMLImageElement::attach):
        (WebCore::HTMLImageElement::width):
        (WebCore::HTMLImageElement::height):
        (WebCore::HTMLImageElement::naturalHeight):
        * html/HTMLImageElement.h:
        * html/HTMLOptionElement.cpp:
        (WebCore::HTMLOptionElement::HTMLOptionElement):
        (WebCore::HTMLOptionElement::createForJSConstructor):
        (WebCore::HTMLOptionElement::ownerSelectElement):
        (WebCore::HTMLOptionElement::nonRendererRenderStyle):
        (WebCore::HTMLOptionElement::disabled):
        (WebCore::HTMLOptionElement::insertedIntoTree):
        * html/HTMLOptionElement.h:

2010-02-18  Simon Fraser  <simon.fraser@apple.com>

        No Review.

        Remove a couple of extraneous spaces that got added to the project file
        by hand-ending.

        * WebCore.xcodeproj/project.pbxproj:

2010-02-18  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Dan Bernstein.

        <rdar://problem/7535894> Page contents missing from snapshot on Newsweek.com article
        
        Add logic to determine when painting via the software rendering path will give an equivalent
        result to the accelerated compositing presentation. This tests for the presence of 3D transforms
        via the existing RenderLayerCompositor::has3DContent() method.
        
        * WebCore.base.exp: Export FrameView's isSoftwareRenderable(), paintBehavior() and setPaintBehavior().
        * page/FrameView.h:
        * page/FrameView.cpp:
        (WebCore::FrameView::isSoftwareRenderable): New method.
        (WebCore::FrameView::paintBehavior): Make this non-inline so that we can reliably export it.

2010-02-18  Dan Bernstein  <mitz@apple.com>

        Reviewed by John Sullivan.

        <rdar://problem/7658811> Multiple style recalcs due to getComputedStyle() on “display: none;” element
        when there are pending style sheets

        Test: fast/css/getComputedStyle/pending-stylesheet.html

        When querying a property of a computed style declaration for a non-rendered element,
        CSSStyleSelector::styleForElement() was called, and if there were pending style sheet, it
        would behave as if the lack of renderer is due to FOUC suppression, and set a flag on
        the document causing it to recalculate style. On the next computed style property access,
        style would be recalculated for the document, but then the flag would get set again if the
        element did not have a renderer.

        * dom/Document.cpp:
        (WebCore::Document::styleForElementIgnoringPendingStylesheets): Added. Temporarily sets
        m_ignorePendingStylesheets around the call to CSSStyleSelector::styleForElement().
        * dom/Document.h:
        * dom/Element.cpp:
        (WebCore::Element::computedStyle): Use Document::styleForElementIgnoringPendingStylesheets().

2010-02-18  Dirk Schulze  <krit@webkit.org>

        Reviewed by Nikolas Zimmermann.

        Move SVGResources to Renderers, starting with Masker
        https://bugs.webkit.org/show_bug.cgi?id=35020

        We have rendering specific code in WebCore/svg/graphics. The goal is to move
        this code into suitable Renderers. This helps us to clean up the code and makes
        maintenance easier. It also makes it possible to remove rendering specific code
        from SVG*Elements into this renderers. So the Renderer contains everything that
        is needed to use the resource.
        RenderSVGResource will be the base class for all new resource render classes like
        RenderSVGResourceMasker, RenderSVGResourceClipper and the other resources.

        This patch starts moving SVGResourceMasker to RenderSVGResourceMasker.
        Another benefit is the much more useful result in DRT on using masker.

        * Android.mk:
        * GNUmakefile.am:
        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::toRenderSVGResource): Conversion to RenderSVGResource base class.
        * rendering/RenderObject.h:
        (WebCore::RenderObject::isSVGResource): Check if renderer is a resource.
        * rendering/RenderPath.cpp:
        * rendering/RenderSVGImage.cpp:
        (WebCore::RenderSVGImage::destroy): Renderer gets destroyed, unregister it from it's resources.
        * rendering/RenderSVGImage.h: Some code clean up according to the webkit style.
        (WebCore::RenderSVGImage::toSVGRenderBase):
        (WebCore::RenderSVGImage::renderName):
        (WebCore::RenderSVGImage::isSVGImage):
        (WebCore::RenderSVGImage::localToParentTransform):
        (WebCore::RenderSVGImage::strokeBoundingBox):
        (WebCore::RenderSVGImage::requiresLayer):
        (WebCore::RenderSVGImage::localTransform):
        * rendering/RenderSVGInlineText.h:
        (WebCore::RenderSVGInlineText::objectBoundingBox): Needed for SVGRenderTreeAsText
        * rendering/RenderSVGModelObject.cpp:
        (WebCore::RenderSVGModelObject::destroy): Renderer gets destroyed, unregister it from it's resources.
        * rendering/RenderSVGModelObject.h:
        * rendering/RenderSVGResource.h: Added.
        (WebCore::): Base class for all Resource renderers like masker, clipper and others.
        (WebCore::RenderSVGResource::RenderSVGResource):
        (WebCore::RenderSVGResource::cast):
        (WebCore::RenderSVGResource::toRenderSVGResource):
        (WebCore::RenderSVGResource::isSVGResource): 
        (WebCore::RenderSVGResource::drawsContents):
        (WebCore::getRenderSVGResourceById):
        * rendering/RenderSVGResourceMasker.cpp: Added.
        (WebCore::RenderSVGResourceMasker::RenderSVGResourceMasker):
        (WebCore::RenderSVGResourceMasker::~RenderSVGResourceMasker):
        (WebCore::RenderSVGResourceMasker::invalidateClients): Status of masker changed, remove all clients.
        (WebCore::RenderSVGResourceMasker::invalidateClient): Status of an object changed, remove pending client.
        (WebCore::RenderSVGResourceMasker::applyResource): Apply masker to object.
        (WebCore::RenderSVGResourceMasker::resourceBoundingBox): boundingBox of the resource, depending on the object.
        (WebCore::RenderSVGResourceMasker::createMaskImage): Creates the mask image, the context gets clipped with.
        * rendering/RenderSVGResourceMasker.h: Added.
        (WebCore::MaskerData::MaskerData):
        (WebCore::RenderSVGResourceMasker::renderName):
        (WebCore::RenderSVGResourceMasker::maskUnits): Unit of mask for DRT.
        (WebCore::RenderSVGResourceMasker::maskContentUnits): Unit of childs from mask for DRT.
        (WebCore::RenderSVGResourceMasker::resourceType):
        * rendering/RenderSVGRoot.cpp:
        (WebCore::RenderSVGRoot::destroy): Renderer gets destroyed, unregister it from it's resources.
        * rendering/RenderSVGRoot.h:
        * rendering/RenderSVGText.cpp:
        (WebCore::RenderSVGText::destroy): dito.
        * rendering/RenderSVGText.h:
        * rendering/RenderTreeAsText.cpp:
        (WebCore::write):
        * rendering/SVGRenderSupport.cpp:
        (WebCore::SVGRenderBase::prepareToRenderSVGContent):
        (WebCore::SVGRenderBase::maskerBoundingBoxForRenderer):
        (WebCore::SVGRenderBase::deregisterFromResources): Unregister object from all it's resources after status changed.
        * rendering/SVGRenderSupport.h:
        (WebCore::SVGRenderBase::toSVGRenderBase):
        (WebCore::SVGRenderBase::strokeBoundingBox):
        (WebCore::SVGRenderBase::markerBoundingBox):
        * rendering/SVGRenderTreeAsText.cpp: Update TreeAsText to dump maskers correctly.
        (WebCore::operator<<):
        (WebCore::writeSVGResource):
        (WebCore::writeSVGContainer):
        (WebCore::writeSVGText):
        (WebCore::writeSVGInlineText):
        (WebCore::writeSVGImage):
        (WebCore::write):
        (WebCore::writeResourcesToObject):
        * rendering/SVGRenderTreeAsText.h:
        * svg/SVGMaskElement.cpp: Update Masker to use the new renderer.
        (WebCore::SVGMaskElement::svgAttributeChanged):
        (WebCore::SVGMaskElement::childrenChanged):
        (WebCore::SVGMaskElement::maskBoundingBox):
        (WebCore::SVGMaskElement::createRenderer):
        * svg/SVGMaskElement.h:
        * svg/SVGStyledElement.cpp: We need to tell the renderer to unregister object, after the status changed.
        (WebCore::SVGStyledElement::invalidateResources):
        (WebCore::SVGStyledElement::invalidateResourcesInAncestorChain):
        * svg/SVGUnitTypes.h: Conversion of integer to SVGUnitType.
        (WebCore::toUnitType):
        * svg/graphics/SVGResource.h:
        (WebCore::):
        (WebCore::SVGResource::isMarker):
        * svg/graphics/SVGResourceMasker.cpp: Removed.
        * svg/graphics/SVGResourceMasker.h: Removed.

2010-02-18  Dumitru Daniliuc  <dumi@chromium.org>

        Reviewed by Dimitri Glazkov.

        Allow creating/dropping virtual tables when the module is FTS2.

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

        * storage/DatabaseAuthorizer.cpp:
        (WebCore::DatabaseAuthorizer::createVTable):
        (WebCore::DatabaseAuthorizer::dropVTable):

2010-02-18  Peter Kasting  <pkasting@google.com>

        Not reviewed, Chromium build fix.

        r54963 had a typo in the WebCore.gypi change.
        https://bugs.webkit.org/show_bug.cgi?id=35003

        * WebCore.gypi:

2010-02-18  Vangelis Kokkevis  <vangelis@chromium.org>

        Reviewed by Simon Fraser.

        Changing forward declaration of TimingFunction in GraphicsLayer.h from
        class to struct to match its actual definition in TimingFunction.h

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


        * platform/graphics/GraphicsLayer.h:
           Change forward declaration from: class TimingFunction to:
           struct TimingFunction

2010-02-18  Noam Rosenthal  <noam.rosenthal@nokia.com>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] Minor improvement to hybrid QPixmap
        https://bugs.webkit.org/show_bug.cgi?id=34507
        Instead of having toHTMLImageElement which creates a new element,
        assignToHTMLImageElement would set an existing HTML <img/> element to
        contain the native QPixmap/QImge.
        Also made some style fixes.

        Additions to existing tests: see WebKit/qt/tests

        * bridge/qt/qt_pixmapruntime.cpp:
        (JSC::Bindings::QtPixmapWidthField::valueFromInstance): style
        (JSC::Bindings::QtPixmapHeightField::valueFromInstance): style
        (JSC::Bindings::QtPixmapAssignToElementMethod::name): assignTo
        (JSC::Bindings::QtPixmapAssignToElementMethod::invoke): new function
        (JSC::Bindings::QtPixmapAssignToElementMethod::numParameters): 1
        (JSC::Bindings::QtPixmapToDataUrlMethod::invoke): style
        (JSC::Bindings::QtPixmapToStringMethod::invoke): style
        (JSC::Bindings::QtPixmapInstance::invokeMethod): style
        (JSC::Bindings::QtPixmapClass::methodsNamed): new func, removed old
        (JSC::Bindings::QtPixmapInstance::getPropertyNames): ditto
        (JSC::Bindings::QtPixmapInstance::defaultValue): style
        (JSC::Bindings::QtPixmapInstance::valueOf): style
        (JSC::Bindings::QtPixmapInstance::toPixmap): style
        (JSC::Bindings::QtPixmapInstance::variantFromObject): style

2010-02-18  Peter Kasting  <pkasting@google.com>

        Not reviewed, bustage fix.

        An extraneous line in r54839 broke GIF animation.

        * platform/image-decoders/gif/GIFImageReader.cpp:
        (GIFImageReader::read):

2010-02-18  Dan Bernstein  <mitz@apple.com>

        Reviewed by Simon Fraser.

        <rdar://problem/7650652> REGRESSION: Selection painting issue in bug review textbox
        https://bugs.webkit.org/show_bug.cgi?id=34946

        Test: fast/repaint/selection-gap-overflow-scroll-2.html

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::paintSelection): localToContainerQuad() adjusts for
        overflow scroll, but RenderLayer::addBlockSelectionGapsBounds() takes
        non-scrolled coordinates, so account for that.

2010-02-17  Dumitru Daniliuc  <dumi@chromium.org>

        Reviewed by Darin Adler.

        Change the V8 and JSC SQLStatementErrorCallback to interpret
        'undefined' return values as 'true', as required by the spec.

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

        * bindings/js/JSCustomSQLStatementErrorCallback.cpp:
        (WebCore::JSCustomSQLStatementErrorCallback::handleEvent):
        * bindings/v8/custom/V8CustomSQLStatementErrorCallback.cpp:
        (WebCore::V8CustomSQLStatementErrorCallback::handleEvent):
        * bindings/v8/custom/V8CustomVoidCallback.cpp:
        (WebCore::invokeCallbackHelper):
        (WebCore::invokeCallback):
        (WebCore::invokeCallbackTreatUndefinedAsTrue):
        * bindings/v8/custom/V8CustomVoidCallback.h:

2010-02-17  Ojan Vafai  <ojan@chromium.org>

        Reviewed by Adam Barth.

        keyboard selection sometimes moves the wrong end of the selection for Win/Linux
        https://bugs.webkit.org/show_bug.cgi?id=35066

        On Windows/Linux keyboard based selections should always move the same
        end of the seleciton. On Mac, lineboundary and documentboundary changes
        move different ends of the selection depending on which direction your
        extending.

        Test: editing/selection/extend-after-mouse-selection.html

        * editing/SelectionController.cpp:
        (WebCore::SelectionController::positionForPlatform):
        (WebCore::SelectionController::startForPlatform):
        (WebCore::SelectionController::endForPlatform):
        (WebCore::SelectionController::modifyExtendingRight):
        (WebCore::SelectionController::modifyExtendingForward):
        (WebCore::SelectionController::modifyMovingForward):
        (WebCore::SelectionController::modifyExtendingBackward):
        (WebCore::SelectionController::modifyMovingBackward):
        * editing/SelectionController.h:

2010-02-18  Timothy Hatcher  <timothy@apple.com>

        Add "with" to the list of keywords to syntax highlight.

        http://webkit.org/b/35123

        Reviewed by Pavel Feldman.

        * inspector/front-end/SourceJavaScriptTokenizer.js:
        (WebInspector.SourceJavaScriptTokenizer): Add "width" to _keywords.
        * inspector/front-end/SourceJavaScriptTokenizer.re2js:
        (WebInspector.SourceJavaScriptTokenizer): Ditto.

2010-02-17  Peter Kasting  <pkasting@google.com>

        Reviewed by Adam Barth.

        Rework PNG-in-ICO decoding to copy the decoded framebuffer into the ICO
        decoder, making the logic less crazy and more like the other decoders.
        https://bugs.webkit.org/show_bug.cgi?id=28751

        * platform/image-decoders/ImageDecoder.cpp:
        (WebCore::RGBA32Buffer::operator=):
        * platform/image-decoders/ImageDecoder.h:
        (WebCore::RGBA32Buffer::RGBA32Buffer):
        * platform/image-decoders/ico/ICOImageDecoder.cpp:
        (WebCore::ICOImageDecoder::frameBufferAtIndex):
        (WebCore::ICOImageDecoder::decodeAtIndex):
        * platform/image-decoders/ico/ICOImageDecoder.h:
        * platform/image-decoders/qt/RGBA32BufferQt.cpp:
        (WebCore::RGBA32Buffer::operator=):
        * platform/image-decoders/skia/ImageDecoderSkia.cpp:
        (WebCore::RGBA32Buffer::operator=):

2010-02-18  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Timothy Hatcher.

        Web Inspector: multiple popovers on screen at the same time.

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

        * inspector/front-end/Popover.js:
        (WebInspector.Popover.prototype.show):
        (WebInspector.Popover.prototype.hide):
        * inspector/front-end/SourceFrame.js:
        (WebInspector.SourceFrame.prototype._showPopup):

2010-02-18  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Timothy Hatcher.

        Web Inspector: Expand Object.__proto__ properly.

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

        * inspector/front-end/EventListenersSidebarPane.js:
        * inspector/front-end/InjectedScript.js:
        (injectedScriptConstructor):
        * inspector/front-end/ObjectProxy.js:
        (WebInspector.ObjectProxy):
        * inspector/front-end/PropertiesSidebarPane.js:
        (WebInspector.PropertiesSidebarPane.prototype.update.callback):
        * inspector/front-end/inspector.js:
        (WebInspector.log.logMessage):
        (WebInspector.log):

2010-02-18  Nate Chapin  <japhet@chromium.org>

        Reviewed by Adam Barth.

        [V8] Merge the DOMWindow and WorkerContext object wrapping code paths,
        and use a faster method of disambiguating between the types of contexts.

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

        * bindings/scripts/CodeGeneratorV8.pm: Remove logic determining whether we need to
            handle the WorkerContext case.
        * bindings/v8/V8DOMWrapper.cpp:
        (WebCore::globalObjectPrototypeIsDOMWindow):
        (WebCore::V8DOMWrapper::instantiateV8Object): Merge instantiateV8Object paths.
        * bindings/v8/V8DOMWrapper.h:

2010-02-12  Brett Wilson  <brettw@chromium.org>

        Reviewed by Adam Barth.

        Update the Google-URL version of KURL and the V8 bindings to the new
        behavior of KURL.IsStandard.

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

        This is covered by fast/dom/Window/invalid-protocol.html

        * bindings/v8/custom/V8LocationCustom.cpp:
        (WebCore::V8Location::protocolAccessorSetter):
        * platform/KURLGoogle.cpp:
        (WebCore::KURL::setProtocol):
        (WebCore::KURL::isHierarchical):

2010-02-18  Xan Lopez  <xlopez@igalia.com>

        Reviewed by Gustavo Noronha.

        Remove some duplication between PluginView and Widget methods, and
        move the setSelfVisible calls to the parent class.

        * platform/gtk/WidgetGtk.cpp:
        (WebCore::Widget::show):
        (WebCore::Widget::hide):
        * plugins/gtk/PluginViewGtk.cpp:
        (WebCore::PluginView::setFocus):
        (WebCore::PluginView::show):
        (WebCore::PluginView::hide):

2010-02-18  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Darin Adler.

        <rdar://problem/7655195> Switch Leopard back to using CGShading to avoid CGGradient leaks

        Define USE_CG_SHADING on for Tiger and Leopard, and use it to toggle the methods
        used for Core Graphics gradient drawing.

        * platform/graphics/Gradient.h:
        * platform/graphics/cg/GradientCG.cpp:
        (WebCore::Gradient::platformDestroy):
        (WebCore::Gradient::paint):

2010-02-18  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Timothy Hatcher.

        Web Inspector: on-hover evaluation renders nodes and arrays as strings.

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

        * inspector/front-end/SourceFrame.js:
        (WebInspector.SourceFrame.prototype._showPopup.showObjectPopup):

2010-02-18  Brady Eidson  <beidson@apple.com>

        Reviewed by Sam Weinig.

        Particularly constructed WebFrames can try to access a null HistoryItem
        <rdar://problem/7638892> and https://bugs.webkit.org/show_bug.cgi?id=35063

        Test: fast/loader/api-test-new-window-data-load-base-url.html

        * loader/HistoryController.cpp:
        (WebCore::HistoryController::updateBackForwardListForFragmentScroll): We have a known case where a fragment scroll
          might take place with a null m_currentItem. updateBackForwardListClippedAtTarget() will either move m_currentItem 
          to m_previousItem then create a new m_currentItem...  or it will do nothing. So we either have both an m_currentItem 
          and m_previousItem, or we have neither.  In the case where we have no m_previousItem, return early.

2010-02-18  Nate Chapin  <japhet@chromium.org>

        Reviewed by Eric Seidel.

        [V8] Correctly handle the case where the event field on the
        global object is a v8::Object, but not a DOM wrapper.

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

        Test: fast/dom/Window/window-event-override-no-crash.html

        * bindings/v8/ScriptController.cpp:
        (WebCore::ScriptController::processingUserGesture):
        * bindings/v8/V8DOMWrapper.cpp:
        (WebCore::V8DOMWrapper::isValidDOMObject):
        (WebCore::V8DOMWrapper::isWrapperOfType):
        * bindings/v8/V8DOMWrapper.h:

2010-02-18  Pavel Feldman  <pfeldman@chromium.org>

        Not reviewed, Qt build fix.

        * inspector/front-end/WebKit.qrc:

2010-02-18  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Timothy Hatcher.

        Web Inspector: Implement evaluate-on-hover for scripts panel.

        https://bugs.webkit.org/show_bug.cgi?id=35003
 
        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * inspector/front-end/Images/gearButtonGlyph.png: Added.
        * inspector/front-end/Images/popoverArrows.png: Added.
        * inspector/front-end/Images/popoverBackground.png: Added.
        * inspector/front-end/Images/thumbActiveHoriz.png: Added.
        * inspector/front-end/Images/thumbActiveVert.png: Added.
        * inspector/front-end/Images/thumbHoriz.png: Added.
        * inspector/front-end/Images/thumbHoverHoriz.png: Added.
        * inspector/front-end/Images/thumbHoverVert.png: Added.
        * inspector/front-end/Images/thumbVert.png: Added.
        * inspector/front-end/Images/trackHoriz.png: Added.
        * inspector/front-end/Images/trackVert.png: Added.
        * inspector/front-end/Popup.js:
        (WebInspector.Popup):
        (WebInspector.Popup.prototype.show):
        (WebInspector.Popup.prototype.hide):
        (WebInspector.Popup.prototype._positionElement):
        * inspector/front-end/SourceFrame.js:
        (WebInspector.SourceFrame.prototype._createViewerIfNeeded):
        (WebInspector.SourceFrame.prototype._scroll):
        (WebInspector.SourceFrame.prototype._mouseDown):
        (WebInspector.SourceFrame.prototype._mouseUp):
        (WebInspector.SourceFrame.prototype._mouseMove):
        (WebInspector.SourceFrame.prototype._mouseOut):
        (WebInspector.SourceFrame.prototype._resetHoverTimer):
        (WebInspector.SourceFrame.prototype._hidePopup):
        (WebInspector.SourceFrame.prototype._mouseHover):
        (WebInspector.SourceFrame.prototype._showPopup.showTextPopup):
        (WebInspector.SourceFrame.prototype._showPopup.showObjectPopup):
        (WebInspector.SourceFrame.prototype._showPopup.evaluateCallback):
        (WebInspector.SourceFrame.prototype._showPopup):
        (WebInspector.HoverPropertiesSection):
        (WebInspector.HoverPropertiesSection.prototype.update):
        * inspector/front-end/TextEditorHighlighter.js:
        (WebInspector.TextEditorHighlighter):
        (WebInspector.TextEditorHighlighter.prototype._lex):
        * inspector/front-end/TextViewer.js:
        (WebInspector.TextViewer.prototype._paintLine):
        * inspector/front-end/WebKit.qrc:
        * inspector/front-end/inspector.css:
        * inspector/front-end/inspector.html:
        * inspector/front-end/inspectorSyntaxHighlight.css:
        * inspector/front-end/popover.css: Added.

2010-02-18  Ben Murdoch  <benm@google.com>

        Reviewed by Jeremy Orlow.

        [v8] Complete upstreaming of V8 Touch Event bindings
        https://bugs.webkit.org/show_bug.cgi?id=35094

        No new tests required.

        * bindings/v8/V8Index.cpp: Add generated touch event headers.

2010-02-18  Steve Block  <steveblock@google.com>

        Reviewed by Jeremy Orlow.

        Updates Android V8 build to use DerivedSourcesAllInOne.cpp
        https://bugs.webkit.org/show_bug.cgi?id=35083

        No new tests, build fix only.

        * Android.derived.v8bindings.mk:
        * Android.v8bindings.mk:

2010-02-18  Gustavo Noronha Silva  <gustavo.noronha@collabora.co.uk>

        Reviewed by Xan Lopez.

        fast/frames/iframe-reparenting.html crashing on GTK Debug bots
        https://bugs.webkit.org/show_bug.cgi?id=35081

        Check that the client is alive after every call to it, since any
        of them could cause the load to be cancelled, and the client to go
        away.

        This is much better than protecting a specific subclass of
        ResourceHandleClient (ResourceLoader), which makes us fail when
        any other client is used.

        Test: fast/frames/iframe-reparenting.html

        * platform/network/soup/ResourceHandleSoup.cpp:
        (WebCore::parseDataUrl):

2010-02-18  Ben Murdoch  <benm@google.com>

        Reviewed by Nate Chapin.

        [v8] [Android] V8 bindings for touch events are missing.
        https://bugs.webkit.org/show_bug.cgi?id=33795

        No new tests as this just enables touch events in V8. Existing touch tests suffice.

        * WebCore.gypi: Add Touch idl files.
        * bindings/scripts/CodeGeneratorV8.pm: Add TouchList to typeCanFailConversion map.
        * bindings/v8/DOMObjectsInclude.h: Add touch headers.
        * bindings/v8/DerivedSourcesAllInOne.cpp: Add touch generated bindings.
        * bindings/v8/V8Index.h: Add touch DOM object types.
        * bindings/v8/custom/V8EventCustom.cpp: Add conversion of event to touch event.
        * Android.derived.jscbindings.mk: Add the touch derived sources to the makefile.
        * Android.derived.v8bindings.mk: Add the touch derived sources to the makefile.

2010-02-18  William Chan  <willchan@chromium.org>

        Reviewed by Adam Barth.

        https://bugs.webkit.org/show_bug.cgi?id=35071
        Disable loader limiting of requests per host for the chromium port.

        No tests because we're only changing a constant.

        * platform/network/chromium/ResourceRequest.cpp:
        (WebCore::initializeMaximumHTTPConnectionCountPerHost):

2010-02-18  Xan Lopez  <xlopez@igalia.com>

        Reviewed by Eric Seidel.

        [Linux] Webkit incompatible with Java plugins
        https://bugs.webkit.org/show_bug.cgi?id=24912

        The NP Version supported by WebKit is at the moment hardcoded in
        PluginPackage.cpp (to 24), but not all backends actually implement
        the methods needed to claim this. Introduce a new method to be
        implemented by each backend where the maximum supported version
        can be specified, and set the GTK+ port NPVersion to 19. This
        fixes an instantaneous crasher in the Sun Java NPAPI plugin.

        * plugins/PluginPackage.cpp:
        (WebCore::PluginPackage::initializeBrowserFuncs):
        * plugins/PluginPackage.h:
        * plugins/gtk/PluginPackageGtk.cpp:
        (WebCore::PluginPackage::NPVersion):
        * plugins/mac/PluginPackageMac.cpp:
        (WebCore::PluginPackage::NPVersion):
        * plugins/qt/PluginPackageQt.cpp:
        (WebCore::PluginPackage::NPVersion):
        * plugins/symbian/PluginPackageSymbian.cpp:
        (WebCore::PluginPackage::NPVersion):
        * plugins/win/PluginPackageWin.cpp:
        (WebCore::PluginPackage::NPVersion):

2010-02-17  Dmitry Titov  <dimich@chromium.org>

        Reviewed by David Levin, Darin Fisher, Simon Hausmann.

        When a live iframe element is moved between pages, it still depends on the old page.
        https://bugs.webkit.org/show_bug.cgi?id=34382

        Test: fast/frames/iframe-reparenting-new-page.html

        * html/HTMLFrameElementBase.cpp:
        (WebCore::HTMLFrameElementBase::setName):
        Move the code setting the frame name into a separate function.

        (WebCore::HTMLFrameElementBase::setNameAndOpenURL):
        (WebCore::HTMLFrameElementBase::updateOnReparenting):
        Called on the frame that was just re-parented and inserted into another Document.
        Simply invoke Frame::transferChildFrameToNewDocument(...);

        (WebCore::HTMLFrameElementBase::insertedIntoDocument):
        * html/HTMLFrameElementBase.h:
        * html/HTMLFrameOwnerElement.h:
        (WebCore::HTMLFrameOwnerElement::setName):
        Make this a virtual function, to be able to reach it via Frame::m_ownerElement.

        * loader/EmptyClients.h:
        (WebCore::EmptyFrameLoaderClient::adoptFrame):
        * loader/FrameLoaderClient.h:
        Add a new method, didTransferChildFrameToNewDocument().
        It compliments createFrame() in that a frame which was re-parented
        in DOM and potentially changes Page, should notify the WebKit
        implementation about potential ownership change.
        Many embedders assume that Page owns all the Frames, or at least
        all Frames are destroyed before 'their' Page is destroyed. Obviously, if Frame
        can be transferred to another Page, the embedders should be notified.

        * page/Frame.cpp:
        (WebCore::Frame::transferChildFrameToNewDocument):
        Added, makes actual adjustments for Frame - resets the Page,
        updates the frame tree and frame name, calls to FrameLoaderClient
        to update external objects and recurses into children.
        Can only be used on child frames.

        * page/Frame.h:

2010-02-17  Tony Chang  <tony@chromium.org>

        Reviewed by Eric Seidel.

        Copying and pasting into a contenteditable area can create <div>s surrounded by <span>s
        https://bugs.webkit.org/show_bug.cgi?id=26937

        This happens because of a span added when we copy that is used to
        preserve styles.  To avoid this, when we paste, make sure to apply
        the styles to the span's children and then remove the style span.

        This change is covered by existing layout tests.

        * editing/ReplaceSelectionCommand.cpp:
        (WebCore::ReplaceSelectionCommand::handleStyleSpans):
        (WebCore::ReplaceSelectionCommand::copyStyleToChildren):
        * editing/ReplaceSelectionCommand.h:

2010-02-17  Tony Chang  <tony@chromium.org>

        Reviewed by Eric Seidel.

        https://bugs.webkit.org/show_bug.cgi?id=34914
        When pasting absolute font sizes into a content editable area with
        page zoom, adjust the font sizes to be the same after page zoom is
        applied.

        Test: editing/pasteboard/page-zoom.html

        * editing/ReplaceSelectionCommand.cpp:
        (WebCore::ReplaceSelectionCommand::negateStyleRulesThatAffectAppearance):

2010-02-17  Tony Chang  <tony@chromium.org>

        Reviewed by Eric Seidel.

        https://bugs.webkit.org/show_bug.cgi?id=34737
        Copying styled list items then pasting into a list
        should work the same as copying unstyle list items:
        it shouldn't indent an extra level, but styles should
        be copied.

        Small cleanups to insertAsListItems to make variable names
        more descriptive.

        Test: editing/pasteboard/paste-list-003.html

        * editing/ReplaceSelectionCommand.cpp:
        (WebCore::ReplaceSelectionCommand::doApply):
        (WebCore::ReplaceSelectionCommand::insertAsListItems):

2010-02-17  Kwang Yul Seo  <skyul@company100.net>

        Reviewed by Eric Seidel.

        [BREWMP] Port PlatformKeyboardEvent
        https://bugs.webkit.org/show_bug.cgi?id=34794

        Retrieve the type, key code, text and modifiers from BREW's keyboard event.

        * platform/PlatformKeyboardEvent.h:
        * platform/brew/PlatformKeyboardEventBrew.cpp: Added.
        (WebCore::keyIdentifierForBrewKeyCode):
        (WebCore::windowsKeyCodeForKeyEvent):
        (WebCore::singleCharacterString):
        (WebCore::PlatformKeyboardEvent::PlatformKeyboardEvent):
        (WebCore::PlatformKeyboardEvent::disambiguateKeyDownEvent):
        (WebCore::PlatformKeyboardEvent::currentCapsLockState):

2010-02-17  Hayato Ito  <hayato@chromium.org>

        Reviewed by Eric Seidel.

        Support CSS page-break-inside with a value of 'avoid'.

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

        Test: printing/page-break-inside.html

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

2010-02-17  Fumitoshi Ukai  <ukai@chromium.org>

        Reviewed by Alexey Proskuryakov.

        WebSocket bufferedAmount should not be 0 when send after close.
        https://bugs.webkit.org/show_bug.cgi?id=34633

        Fixed bug in webkit r54694.  check m_client after it calls user
        callback, because user callback may call close(), which would
        call onclose event handler.
        
        Test: websocket/tests/bufferedAmount-after-close.html

        * websockets/ThreadableWebSocketChannelClientWrapper.h:
        (WebCore::ThreadableWebSocketChannelClientWrapper::didClose):
        * websockets/WebSocket.cpp:
        (WebCore::WebSocket::WebSocket):
        (WebCore::WebSocket::send):
        (WebCore::WebSocket::close):
        (WebCore::WebSocket::bufferedAmount):
        (WebCore::WebSocket::didConnect):
        (WebCore::WebSocket::didClose):
        * websockets/WebSocket.h:
        * websockets/WebSocketChannel.cpp:
        (WebCore::WebSocketChannel::WebSocketChannel):
        (WebCore::WebSocketChannel::send):
        (WebCore::WebSocketChannel::bufferedAmount):
        (WebCore::WebSocketChannel::didClose):
        (WebCore::WebSocketChannel::didReceiveData):
        * websockets/WebSocketChannel.h:
        * websockets/WebSocketChannelClient.h:
        (WebCore::WebSocketChannelClient::didClose):
        * websockets/WorkerThreadableWebSocketChannel.cpp:
        (WebCore::workerContextDidClose):
        (WebCore::WorkerThreadableWebSocketChannel::Peer::didClose):
        * websockets/WorkerThreadableWebSocketChannel.h:

2010-02-17  Yuzo Fujishima  <yuzo@google.com>

        Reviewed by Eric Seidel.

        In diffing render styles, consider all pseudo style changes.
        Without this patch, only :before and :after are considered. This is the cause of the following bug.
        https://bugs.webkit.org/show_bug.cgi?id=32187

        Test: fast/css/first-letter-first-line-hover.html

        * dom/Node.cpp:
        (WebCore::Node::diff):
        * rendering/style/RenderStyle.cpp:
        (WebCore::RenderStyle::hasAnyPublicPseudoStyles):
        * rendering/style/RenderStyle.h:
        * rendering/style/RenderStyleConstants.h:
        (WebCore::):

2010-02-17  Kwang Yul Seo  <skyul@company100.net>

        Reviewed by Eric Seidel.

        [BREWMP] Add WebCore::prefetchDNS
        https://bugs.webkit.org/show_bug.cgi?id=34873

        DNS prefetching is not implemented because the maximum number
        of UDP sockets is quite small in most BREW devices.

        * platform/network/brew/DNSBrew.cpp: Added.
        (WebCore::prefetchDNS):

2010-02-17  Kent Tamura  <tkent@chromium.org>

        Reviewed by Eric Seidel.

        Introduces new Icon loading interface in order to support
        asynchronous loading.
        https://bugs.webkit.org/show_bug.cgi?id=32054

        It's hard for Chromium port to load an icon inside
        Icon::createIconForFiles() because of sanbox and multi-process
        architecture. So this change adds a method to request an icon to
        Chrome class, and makes FileChooser receives an Icon instance
        asynchronously.  Synchronous loading also works with the new interface.

        Because all ports don't have implementations of Chrome::iconForFiles()
        yet, FileChooser tries to load an Icon synchronously with
        Icon::createIconForFiles(), then tries to load an Icon asynchronously
        with Chrome::iconForFiles() if Icon::createIconForFiles() returns 0.

        The existing Icon::createIconForFiles() implementations should be
        moved to Chrome::iconForFiles(). We're going to remove
        Icon::createIconForFiles().

        * loader/EmptyClients.h:
        (WebCore::EmptyChromeClient::iconForFiles): Add an empty implementation.
        * page/Chrome.cpp:
        (WebCore::Chrome::iconForFiles): Delegate to ChromeClient::iconForFiles().
        * page/Chrome.h:
        * page/ChromeClient.h:
        (WebCore::ChromeClient::iconForFiles): Add a declaration as a pure virtual method.
        * platform/FileChooser.cpp:
        (WebCore::FileChooser::FileChooser): Use loadIcon().
        (WebCore::FileChooser::chooseFiles): ditto.
        (WebCore::FileChooser::loadIcon): Added.
        (WebCore::FileChooser::iconLoaded): Added.
        * platform/FileChooser.h: Add two methods to FileChooserClient; repaint() and iconForFiles().
        * platform/graphics/Icon.h: Add a FIXME comment.
        * platform/graphics/gtk/IconGtk.cpp: ditto.
        * platform/graphics/mac/IconMac.mm: ditto.
        * platform/graphics/qt/IconQt.cpp: ditto.
        * platform/graphics/win/IconWin.cpp: ditto.
        * rendering/RenderFileUploadControl.cpp:
        (WebCore::RenderFileUploadControl::iconForFiles): Delegate to Chrome::iconForFiles().
        (WebCore::RenderFileUploadControl::click): Use chrome().
        (WebCore::RenderFileUploadControl::chrome):
        * rendering/RenderFileUploadControl.h:
        (WebCore::RenderFileUploadControl::repaint):

2010-02-17  Mark Rowe  <mrowe@apple.com>

        Reviewed by Darin Adler.

        Bug 35065: Delay between page loading and animated GIF playing
        <http://webkit.org/b/35065> / <rdar://problem/7109548>

        BitmapImage::startAnimation was adding the current frame duration to the desired start time
        of the frame for every time it was called.  If the function then bailed out due to not having
        sufficient data to render the frame, this would lead to the desired start time of the frame
        being pushed out multiple times.  On an animated GIF that took mulitple seconds to load this
        could happen many times for a single frame, resulting in the start time of the second frame
        of the animation being pushed out by as much as five seconds.

        * platform/graphics/BitmapImage.cpp:
        (WebCore::BitmapImage::startAnimation): Change the order of the code slightly so that the
        desired start time is only updated after determining that we have sufficient data to handle
        the next frame.

2010-02-17  Stephan Aßmus  <superstippi@gmx.de>

        Reviewed by Eric Seidel.

        Implemented homeDirectoryPath() and listDirectory() on the Haiku platform.
        https://bugs.webkit.org/show_bug.cgi?id=34687

        Covered by existing tests.

        * platform/haiku/FileSystemHaiku.cpp:
        (WebCore::homeDirectoryPath): Implemented
        (WebCore::listDirectory): Implemented

2010-02-17  Kwang Yul Seo  <skyul@company100.net>

        Reviewed by Eric Seidel.

        [BREWMP] Port userIdleTime
        https://bugs.webkit.org/show_bug.cgi?id=34259

        Return an arbitrarily high userIdleTime so that releasing pages from the page
        cache isn't postponed.

        * platform/brew/SystemTimeBrew.cpp: Added.
        (WebCore::userIdleTime):

2010-02-17  Dirk Schulze  <krit@webkit.org>

        Rolling out r54909. Breaks SL and Win.

2010-02-17  Dumitru Daniliuc  <dumi@chromium.org>

        Reviewed by Dimitri Glazkov.

        Fix Chromium's bindings for Database.transaction(): a 'null'
        callback should be treated as no callback.

        Test: storage/null-callbacks.html

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

        * bindings/v8/custom/V8DatabaseCustom.cpp:
        (WebCore::createTransaction):

2010-02-17  Dirk Schulze  <krit@webkit.org>

        Reviewed by Nikolas Zimmermann.

        Move SVGResources to Renderers, starting with Masker
        https://bugs.webkit.org/show_bug.cgi?id=35020

        We have rendering specific code in WebCore/svg/graphics. The goal is to move
        this code into suitable Renderers. This helps us to clean up the code and makes
        maintenance easier. It also makes it possible to remove rendering specific code
        from SVG*Elements into this renderers. So the Renderer contains everything that
        is needed to use the resource.
        RenderSVGResource will be the base class for all new resource render classes like
        RenderSVGResourceMasker, RenderSVGResourceClipper and the other resources.

        This patch starts moving SVGResourceMasker to RenderSVGResourceMasker.
        Another benefit is the much more useful result in DRT on using masker.

        * Android.mk:
        * GNUmakefile.am:
        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::toRenderSVGResource): Conversion to RenderSVGResource base class.
        * rendering/RenderObject.h:
        (WebCore::RenderObject::isSVGResource): Check if renderer is a resource.
        * rendering/RenderPath.cpp:
        * rendering/RenderSVGImage.cpp:
        (WebCore::RenderSVGImage::destroy): Renderer gets destroyed, unregister it from it's resources.
        * rendering/RenderSVGImage.h: Some code clean up according to the webkit style.
        (WebCore::RenderSVGImage::toSVGRenderBase):
        (WebCore::RenderSVGImage::renderName):
        (WebCore::RenderSVGImage::isSVGImage):
        (WebCore::RenderSVGImage::localToParentTransform):
        (WebCore::RenderSVGImage::strokeBoundingBox):
        (WebCore::RenderSVGImage::requiresLayer):
        (WebCore::RenderSVGImage::localTransform):
        * rendering/RenderSVGInlineText.h:
        (WebCore::RenderSVGInlineText::objectBoundingBox): Needed for SVGRenderTreeAsText
        * rendering/RenderSVGModelObject.cpp:
        (WebCore::RenderSVGModelObject::destroy): Renderer gets destroyed, unregister it from it's resources.
        * rendering/RenderSVGModelObject.h:
        * rendering/RenderSVGResource.h: Added.
        (WebCore::): Base class for all Resource renderers like masker, clipper and others.
        (WebCore::RenderSVGResource::RenderSVGResource):
        (WebCore::RenderSVGResource::cast):
        (WebCore::RenderSVGResource::toRenderSVGResource):
        (WebCore::RenderSVGResource::isSVGResource): 
        (WebCore::RenderSVGResource::drawsContents):
        (WebCore::getRenderSVGResourceById):
        * rendering/RenderSVGResourceMasker.cpp: Added.
        (WebCore::RenderSVGResourceMasker::RenderSVGResourceMasker):
        (WebCore::RenderSVGResourceMasker::~RenderSVGResourceMasker):
        (WebCore::RenderSVGResourceMasker::invalidateClients): Status of masker changed, remove all clients.
        (WebCore::RenderSVGResourceMasker::invalidateClient): Status of an object changed, remove pending client.
        (WebCore::RenderSVGResourceMasker::applyResource): Apply masker to object.
        (WebCore::RenderSVGResourceMasker::resourceBoundingBox): boundingBox of the resource, depending on the object.
        (WebCore::RenderSVGResourceMasker::createMaskImage): Creates the mask image, the context gets clipped with.
        * rendering/RenderSVGResourceMasker.h: Added.
        (WebCore::MaskerData::MaskerData):
        (WebCore::RenderSVGResourceMasker::renderName):
        (WebCore::RenderSVGResourceMasker::maskUnits): Unit of mask for DRT.
        (WebCore::RenderSVGResourceMasker::maskContentUnits): Unit of childs from mask for DRT.
        (WebCore::RenderSVGResourceMasker::resourceType):
        * rendering/RenderSVGRoot.cpp:
        (WebCore::RenderSVGRoot::destroy): Renderer gets destroyed, unregister it from it's resources.
        * rendering/RenderSVGRoot.h:
        * rendering/RenderSVGText.cpp:
        (WebCore::RenderSVGText::destroy): dito.
        * rendering/RenderSVGText.h:
        * rendering/RenderTreeAsText.cpp:
        (WebCore::write):
        * rendering/SVGRenderSupport.cpp:
        (WebCore::SVGRenderBase::prepareToRenderSVGContent):
        (WebCore::SVGRenderBase::maskerBoundingBoxForRenderer):
        (WebCore::SVGRenderBase::deregisterFromResources): Unregister object from all it's resources after status changed.
        * rendering/SVGRenderSupport.h:
        (WebCore::SVGRenderBase::toSVGRenderBase):
        (WebCore::SVGRenderBase::strokeBoundingBox):
        (WebCore::SVGRenderBase::markerBoundingBox):
        * rendering/SVGRenderTreeAsText.cpp: Update TreeAsText to dump maskers correctly.
        (WebCore::operator<<):
        (WebCore::writeSVGResource):
        (WebCore::writeSVGContainer):
        (WebCore::writeSVGText):
        (WebCore::writeSVGInlineText):
        (WebCore::writeSVGImage):
        (WebCore::write):
        (WebCore::writeResourcesToObject):
        * rendering/SVGRenderTreeAsText.h:
        * svg/SVGMaskElement.cpp: Update Masker to use the new renderer.
        (WebCore::SVGMaskElement::svgAttributeChanged):
        (WebCore::SVGMaskElement::childrenChanged):
        (WebCore::SVGMaskElement::maskBoundingBox):
        (WebCore::SVGMaskElement::createRenderer):
        * svg/SVGMaskElement.h:
        * svg/SVGStyledElement.cpp: We need to tell the renderer to unregister object, after the status changed.
        (WebCore::SVGStyledElement::invalidateResources):
        (WebCore::SVGStyledElement::invalidateResourcesInAncestorChain):
        * svg/SVGUnitTypes.h: Conversion of integer to SVGUnitType.
        (WebCore::toUnitType):
        * svg/graphics/SVGResource.h:
        (WebCore::):
        (WebCore::SVGResource::isMarker):
        * svg/graphics/SVGResourceMasker.cpp: Removed.
        * svg/graphics/SVGResourceMasker.h: Removed.

2010-02-17  Kenneth Russell  <kbr@google.com>

        Reviewed by Oliver Hunt.

        Refactor texImage2D and texSubImage2D taking Image to use common code
        https://bugs.webkit.org/show_bug.cgi?id=34458

        Merged the Safari and Chromium code which extracts the data from
        Image objects into common entry points on GraphicsContext3D. This
        immediately fixes the following three problems:
          - Chromium not implementing texSubImage2D taking Image.
          - Safari not obeying the flipY parameter to texImage2D or
            texSubImage2D taking Image.
          - Safari not obeying the premultipyAlpha parameter to texImage2D
            or texSubImage2D taking Image.
        Added new test verifying the behavior of texImage2D and
        texSubImage2D and the flipY parameter. The premultiplyAlpha
        parameter can not be tested yet as the implementation is not yet
        spec compliant. This will be fixed in a follow-on bug.

        Ran all WebGL demos in demo repository on Safari and Chromium;
        textures are now the right way up in both browsers, and
        transparent textures in Particles demo now look correct in Safari.

        Test: fast/canvas/webgl/tex-image-and-sub-image-2d-with-image.html

        * WebCore.gyp/WebCore.gyp:
        * WebCore.gypi:
        * WebCore.xcodeproj/project.pbxproj:
        * platform/graphics/GraphicsContext3D.cpp: Added.
        (WebCore::GraphicsContext3D::extractImageData):
        (WebCore::GraphicsContext3D::processImageData):
        (WebCore::GraphicsContext3D::premultiplyAlpha):
        (WebCore::GraphicsContext3D::unmultiplyAlpha):
        * platform/graphics/GraphicsContext3D.h:
        (WebCore::GraphicsContext3D::):
        * platform/graphics/cg/GraphicsContext3DCG.cpp: Added.
        (WebCore::GraphicsContext3D::getImageData):
        * platform/graphics/mac/GraphicsContext3DMac.cpp:
        (WebCore::GraphicsContext3D::texImage2D):
        (WebCore::GraphicsContext3D::texSubImage2D):
        * platform/graphics/skia/GraphicsContext3DSkia.cpp: Added.
        (WebCore::GraphicsContext3D::getImageData):

2010-02-17  Noam Rosenthal  <noam.rosenthal@nokia.com>

        Reviewed by Ariya Hidayat.

        [Qt] GraphicsLayer: support perspective and 3D transforms
        https://bugs.webkit.org/show_bug.cgi?id=34960

        New tests: http://webkit.org/blog-files/3d-transforms/perspective-by-example.html

        * platform/graphics/qt/GraphicsLayerQt.cpp:
        (WebCore::GraphicsLayerQtImpl::updateTransform):
        (WebCore::GraphicsLayerQtImpl::setBaseTransform):
        (WebCore::GraphicsLayerQtImpl::computeTransform):
        (WebCore::GraphicsLayerQtImpl::flushChanges):
        (WebCore::TransformAnimationQt::~TransformAnimationQt):

2010-02-17  Peter Kasting  <pkasting@google.com>

        Unreviewed, build fix.

        Fix crashes due to an omitted line in r54839.

        * platform/image-decoders/png/PNGImageDecoder.cpp:
        (WebCore::decodingFailed):

2010-02-17  Alok Priyadarshi  <alokp@chromium.org>

        Reviewed by Ariya Hidayat.

        Bug 34900: Implement accelerated compositing for chromium.
        https://bugs.webkit.org/show_bug.cgi?id=34900

        Do not exclude files needed for accelerated compositing. In fact there is no need to exclude these files.
        These files are already guarded with WTF_USE_ACCELERATED_COMPOSITING flag.

        * WebCore.gyp/WebCore.gyp: Removed GraphicsLayer.cpp, RenderLayerBacking.cpp,
        and RenderLayerCompositor.cpp from excluded list.

2010-02-17  Jian Li  <jianli@chromium.org>

        Reviewed by Darin Fisher.

        [chromium] Remove the obsolete chromium interface for handling DownloadURL.
        https://bugs.webkit.org/show_bug.cgi?id=34982

        * platform/chromium/ChromiumDataObject.cpp:
        (WebCore::ChromiumDataObject::clear):
        (WebCore::ChromiumDataObject::hasData):
        (WebCore::ChromiumDataObject::ChromiumDataObject):
        * platform/chromium/ChromiumDataObject.h:
        * platform/chromium/ClipboardChromium.cpp:
        (WebCore::ClipboardChromium::setData):

2010-02-17  Dan Bernstein  <mitz@apple.com>

        Reviewed by Darin Adler.

        <rdar://problem/7645569> REGRESSION (r51324): Incorrect marker rects for blocks that span multiple columns

        * manual-tests/match-marker-rects.html: Added.
        * rendering/InlineTextBox.cpp:
        (WebCore::InlineTextBox::paintTextMatchMarker): Use the text renderer rather
        than its ancestor block for the local-to-absolute transformation.
        (WebCore::InlineTextBox::computeRectForReplacementMarker): Ditto.

2010-02-17 Gustavo Noronha Silva <gustavo.noronha@collabora.co.uk>

        Reviewed by Xan Lopez.

        Does not send an Accept header for subresources, causing some sites to break
        https://bugs.webkit.org/show_bug.cgi?id=33242

        Set */* as the Accept header when downloading resources
        that did not set an Accept header. This behaviour is similar to
        the one adopted by Chromium.

        Test: http/tests/misc/image-checks-for-accept.html

        * platform/network/soup/ResourceHandleSoup.cpp:
        (WebCore::startHttp):

2010-02-17  Marcus Bulach  <bulach@chromium.org>

        Reviewed by Jeremy Orlow.

        Fixes initialization order of members for GeolocationServiceChromium.
        https://bugs.webkit.org/show_bug.cgi?id=35034

        * platform/chromium/GeolocationServiceChromium.cpp:

2010-02-17  Xan Lopez  <xlopez@igalia.com>

        Reviewed by Gustavo Noronha.

        [Linux] Webkit incompatible with Java plugins
        https://bugs.webkit.org/show_bug.cgi?id=24912

        Resolve symlinks before trying to load plugins as modules, since
        GModule won't do it.

        Based on original work by Gustavo Noronha.

        * plugins/gtk/PluginPackageGtk.cpp:
        (WebCore::PluginPackage::load):

2010-02-17  Gustavo Noronha Silva  <gustavo.noronha@collabora.co.uk>

        Reviewed by Xan Lopez.

        Protect the resource loader object from disappearing during
        parseDataUrl.

        Tested by testdownload API test.

        * platform/network/soup/ResourceHandleSoup.cpp:
        (WebCore::parseDataUrl):

2010-02-17  Marcus Bulach  <bulach@chromium.org>

        Reviewed by Jeremy Orlow.

        Implements GeolocationServices for Chromium.
        https://bugs.webkit.org/show_bug.cgi?id=32068

        This is part of implementing Geolocation framework for Chromium. Existing layout tests should pass.

        * WebCore.gypi:
        * page/Geolocation.h:
        * platform/GeolocationService.h:

2010-02-17  Steve Block  <steveblock@google.com>

        Reviewed by Ariya Hidayat.

        Adds missing platform and feature guards to V8 bindings
        https://bugs.webkit.org/show_bug.cgi?id=34987

        No new tests, build fix only.

        * bindings/v8/V8Proxy.cpp: Modified. Adds CHROMIUM guards and uses PlatformBridge in place of ChromiumBridge
        * bindings/v8/V8Proxy.h: Modified. Adds CHROMIUM guards and uses PlatformBridge in place of ChromiumBridge
        * bindings/v8/custom/V8DocumentCustom.cpp: Modified. Adds XPATH guards

2010-02-17  Steve Block  <steveblock@google.com>

        Reviewed by Ariya Hidayat.

        Include WebCore's npruntime.h for Android in V8 bindings
        https://bugs.webkit.org/show_bug.cgi?id=35002

        Currently, the V8 bindings include bindings/npruntime.h, which is a
        Chromium-specific file outside of the WebKit tree.

        No new tests, build fix only.

        * bindings/v8/NPV8Object.cpp:
        * bindings/v8/NPV8Object.h:
        * bindings/v8/V8NPObject.h:
        * bindings/v8/V8NPUtils.h:
        * bindings/v8/npruntime_impl.h:
        * bindings/v8/npruntime_priv.h:

2010-01-07  Philippe Normand  <pnormand@igalia.com>

        Reviewed by Gustavo Noronha Silva.

        [GStreamer] Should handle BUFFERING messages
        https://bugs.webkit.org/show_bug.cgi?id=30004

        Initial support for on-disk buffering of videos. This works only
        for Quicktime and flv though.

        * css/mediaControlsGtk.css:
        * platform/gtk/RenderThemeGtk.cpp:
        (WebCore::RenderThemeGtk::paintMediaSliderTrack): Draw the
        buffering status in the media controls.
        * platform/graphics/gtk/MediaPlayerPrivateGStreamer.cpp:
        (WebCore::mediaPlayerPrivateMessageCallback): Defer buffering
        messages handling to processBufferingStats().
        (WebCore::bufferingTimeoutCallback): Closure called periodically
        during the on-disk buffering process.
        (WebCore::MediaPlayerPrivate::MediaPlayerPrivate): New instance
        variables and create playbin2 here instead of doing it in load().
        (WebCore::MediaPlayerPrivate::~MediaPlayerPrivate): New instance
        variables.
        (WebCore::MediaPlayerPrivate::load): Simply set uri on playbin2
        instead of creating the pipeline and setting uri all together.
        (WebCore::MediaPlayerPrivate::processBufferingStats): Start a new
        timeout source if the player is starting on-disk buffering.
        (WebCore::MediaPlayerPrivate::queryBufferingStats): Method called
        200ms during on-disk buffering to update the maxTimeLoaded and few
        other private variables.
        (WebCore::MediaPlayerPrivate::maxTimeSeekable):
        (WebCore::MediaPlayerPrivate::maxTimeLoaded):
        (WebCore::MediaPlayerPrivate::bytesLoaded): Fixed implementations
        regarding buffering.
        (WebCore::MediaPlayerPrivate::totalBytes): Improved logging.
        (WebCore::MediaPlayerPrivate::updateStates): Start playback if it
        was internally paused at beginning of on-disk buffering and set
        ready/network states depending on the state of the on-disk
        buffering process.
        (WebCore::MediaPlayerPrivate::didEnd): Emit durationChanged.
        (WebCore::MediaPlayerPrivate::setAutobuffer): Edit playbin2 flags
        property depending on autoBuffer value.
        (WebCore::MediaPlayerPrivate::createGSTPlayBin): Don't set uri
        there, it is now done in load().
        * platform/graphics/gtk/MediaPlayerPrivateGStreamer.h: New methods
        and instance variables.

2010-02-16  Chris Evans  <cevans@chromium.org>

        Reviewed by Adam Barth.

        Add a new setting which gives the option of assigning every file:///
        to its own unique domain.

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

        Test: Pending in forthcoming separate change due to non-trivial
        dependencies.

        * dom/Document.cpp:
        (WebCore::Document::initSecurityContext): Place file:/// URI documents
        into their own unique domains if the new setting requires it.
        * page/Settings.h:
        * page/Settings.cpp:
        (WebCore::Settings::setAllowFileAccessFromFileURLs): Simple setter.
        * page/SecurityOrigin.h:
        * page/SecurityOrigin.cpp:
        (WebCore::SecurityOrigin::makeUnique): Add simple ability to force an
        origin to be considered unique.

2010-02-16  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Timothy Hatcher.

        Web Inspector: drosera/demo.js not syntax highlighted correctly.

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

        * inspector/front-end/SourceTokenizer.js:
        (WebInspector.SourceTokenizer.Registry):
        (WebInspector.SourceTokenizer.Registry.prototype.getTokenizer):

2010-02-16  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Timothy Hatcher.

        Web Inspector: prefer smooth scrolling to instant highlight.

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

        * inspector/front-end/TextViewer.js:
        (WebInspector.TextViewer):
        (WebInspector.TextViewer.prototype._scroll):
        (WebInspector.TextChunk):
        (WebInspector.TextChunk.prototype._createRow):
        * inspector/front-end/textViewer.css:

2010-02-16  Yael Aharon  <yael.aharon@nokia.com>

        Reviewed by Nikolas Zimmermann.

        SVG not rendered as background-image from data URI
        https://bugs.webkit.org/show_bug.cgi?id=33630

        When the background image is an SVG image, and it is smaller than the area
        it is supposed to fill, we were using renderSubTreeToImage to draw it.
        That call was not going through all the drawing phases, and so the SVG itself
        would not be drawn.

        Test: svg/css/background-image-svg.html

        * svg/graphics/SVGImage.cpp:
        (WebCore::SVGImage::nativeImageForCurrentFrame):

2010-02-16  Bryan Yeung  <bryeung@chromium.org>

        Reviewed by Nikolas Zimmermann.

        Remove the bounds on stroke width and miter for the skia platform.
        https://bugs.webkit.org/show_bug.cgi?id=34954

        Test: svg/custom/stroke-width-large.svg

        * platform/graphics/skia/PlatformContextSkia.cpp:
        (PlatformContextSkia::setupPaintForStroking):

2010-02-16  MORITA Hajime  <morrita@gmail.com>

        Reviewed by Nikolas Zimmermann.

        REGRESSION: SVG text disappaears after double click
        https://bugs.webkit.org/show_bug.cgi?id=34880

        Tests: svg/text/selection-doubleclick.svg
               svg/text/selection-tripleclick.svg

        * rendering/SVGRootInlineBox.cpp:
        (WebCore::SVGRootInlineBoxPaintWalker::mayHaveSelection):
        Use InlineTextBox::selectionStartEnd() instead of
        RenderObject::selectionStartEnd() because latter may span multiple
        comparing startPos and endPos is irrelevant in some cases.
        former selectionStartEnd() is for single line and comparing
        startPos and endPos will make sense.

2010-02-16  Jessie Berlin  <jberlin@webkit.org>

        Reviewed by Timothy Hatcher.

        Inspector should display Array lengths in the property lists.
        https://bugs.webkit.org/show_bug.cgi?id=20695

        * inspector/front-end/InjectedScript.js:
        (injectedScriptConstructor):
        For objects of type 'array' (which includes Arrays, NodeLists, and HTMLCollections), make the length of the object available via propertyLength on the proxy object.
        * inspector/front-end/ObjectPropertiesSection.js:
        (WebInspector.ObjectPropertyTreeElement.prototype.update):
        For properties that have propertyLength defined, append it to the displayed description.

2010-02-16  Yusuke Sato  <yusukes@chromium.org>

        Reviewed by Dimitri Glazkov.

        [Chromium] OpenType font with CFF glyphs is not handled correctly on Windows XP
        https://bugs.webkit.org/show_bug.cgi?id=34735

        Use 0xFFFF as invalidGlyph when fontData is a OpenType font with CFF glyphs.
        
        Test: fast/css/font-face-opentype.html

        * platform/graphics/chromium/GlyphPageTreeNodeChromiumWin.cpp:
        (WebCore::fillBMPGlyphs):

2010-02-16  Darin Adler  <darin@apple.com>

        * page/MediaCanStartListener.h: Fixed license.

2010-02-16  Darin Adler  <darin@apple.com>

        Reviewed by Sam Weinig.

        Generalize delayed plug-in start for background tabs for use for other media
        https://bugs.webkit.org/show_bug.cgi?id=34981

        Also did some simple cleanup of HTMLMediaElement to get ready to make it
        a client of the same mechanism.

        * WebCore.base.exp: Added Page::setCanStartMedia and resorted.
        * WebCore.xcodeproj/project.pbxproj: Added MediaCanStartListener.h.

        * html/HTMLAudioElement.h: Added an implementation of isVideo since that
        is now a pure virtual function in HTMLMediaElement. Also made tagPriority
        private.

        * html/HTMLMediaElement.h: Made it clearer that HTMLMediaElement is an
        abstract base class by making its constructor protected and making the
        isVideo function a pure virtual function.

        * page/Page.cpp:
        (WebCore::Page::Page): Updated for name change from m_canStartPlugins
        to m_canStartMedia.
        (WebCore::Page::addMediaCanStartListener): Renamed and added an assertion.
        (WebCore::Page::removeUnstartedMedia): Ditto.
        (WebCore::Page::setCanStartMedia): Renamed plugin to media and moved
        the code here from PageWin.cpp. The main change from the one in PageWin.cpp
        is that this function calls mediaCanStart rather than explicitly calling a
        combination of start and dispatchDidFailToStartPlugin on a PluginView.

        * page/Page.h: Re-sorted forward class declarations. Renamed the plugin
        starting functions to media starting names and changed types from
        PluginView to MediaCanStartListener.

        * page/MediaCanStartListener.h: Added.

        * page/win/PageWin.cpp: Moved setCanStartPlugins to the platform-independent
        Page.cpp file so it can be used for more than just Windows plug-ins.

        * plugins/PluginView.cpp: Sorted includes.
        (WebCore::PluginView::startOrAddToUnstartedList): Use addMediaCanStartListener.
        (WebCore::PluginView::mediaCanStart): Added. Called when the page decides that
        media can start. Contains the code that used to be in Page::setCanStartPlugins.
        (WebCore::PluginView::removeFromUnstartedListIfNecessary): Use
        removeMediaCanStartListener.

        * plugins/PluginView.h: Adopted MediaCanStartListener.

2010-02-16  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Dan Bernstein.

        https://bugs.webkit.org/show_bug.cgi?id=34999
        Compositing layers inside overflow:scroll divs are not always updated on scrolling
        
        When RenderLayer::scrollToOffset() updates compositing layer positions, it needs
        to start updating at its stacking context rather than just its compositing ancestor.
        The stacking context is guaranteed to contain all descendants of the overflow
        layer, including those that are not direct descendants of the overflow layer in stacking
        (and therefore compositing) order.

        Test: compositing/overflow/scroll-ancestor-update.html

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

2010-02-16  Dan Bernstein  <mitz@apple.com>

        Reviewed by Simon Fraser.

        Allow FloatRect::center() to return fractional coordinates. It was
        mistakenly converting to integers.

        * platform/graphics/FloatRect.h:
        (WebCore::FloatRect::center):

2010-02-16  Gavin Barraclough  <barraclough@apple.com>

        Reviewed by Oliver Hunt.

        https://bugs.webkit.org/show_bug.cgi?id=34964
        Leaks tool reports false memory leaks due to Rope implementation.

        Renamed cUStringImpl::size() to UStringImpl::size()UStringImpl::length()
        (matches WebCore::StringImpl).

        * bridge/jni/jsc/JavaStringJSC.h:
        (JSC::Bindings::JavaStringImpl::length):
        * platform/text/AtomicString.cpp:
        (WebCore::AtomicString::add):
        (WebCore::AtomicString::find):

2010-02-15  Jon Honeycutt  <jhoneycutt@apple.com>

        <rdar://problem/7288853> Message about missing plugin does not specify
        the type or download link for download

        Reviewed by Mark Rowe.

        * plugins/PluginDatabase.cpp:
        (WebCore::PluginDatabase::findPlugin):
        Only update the mimeType out param if we find a plug-in for the file
        extension.

2010-02-16  Simon Fraser  <simon.fraser@apple.com>

        Build fix for Tiger.

        Add #if USE(ACCELERATED_COMPOSITING) around the call to mediaPlayerRenderingModeChanged().
        
        * platform/graphics/mac/MediaPlayerPrivateQTKit.mm:
        (WebCore::MediaPlayerPrivate::setUpVideoRendering):

2010-02-16  Csaba Osztrogonác  <ossy@webkit.org>

        Reviewed by Eric Carlson.

        Buildfix for r54826.

        HTMLMediaElement class defined by HTMLMediaElement.h in #if ENABLE(VIDEO) block,
        it should be in #if ENABLE(VIDEO) block in rendering/RenderLayerBacking.cpp too.

        * rendering/RenderLayerBacking.cpp: Missing #if ENABLE(VIDEO) guard added.
        (WebCore::RenderLayerBacking::updateGraphicsLayerConfiguration):

2010-02-16  Julie Parent  <jparent@chromium.org>

        Unreviewed: Chromium build fix.

        http://trac.webkit.org/changeset/54823 introduced an unused variable.  Remove it.

        * platform/image-decoders/ImageDecoder.cpp:
        (WebCore::ImageDecoder::create):

2010-02-16  Mark Rowe  <mrowe@apple.com>

        Reviewed by Alexey Proskuryakov.

        Bug 34974: Leak of ScheduledAction during layout tests
        <https://bugs.webkit.org/show_bug.cgi?id=34974>

        ScheduledAction::create was returning a raw pointer which was threaded down through to an OwnPtr in DOMTimer.
        If any of the code paths in between hit an error case and returned early the raw pointer would be leaked.  We
        can avoid this by passing it as a PassOwnPtr.  This will ensure that the ScheduledAction is cleaned up should
        an error case be hit.

        * bindings/js/JSDOMWindowCustom.cpp:
        (WebCore::JSDOMWindow::setTimeout): Store the newly-created ScheduledAction in an OwnPtr and then hand it off
        as the function argument.
        (WebCore::JSDOMWindow::setInterval): Ditto.
        * bindings/js/JSWorkerContextCustom.cpp:
        (WebCore::JSWorkerContext::setTimeout): Ditto.
        (WebCore::JSWorkerContext::setInterval): Ditto.
        * bindings/js/ScheduledAction.cpp:
        (WebCore::ScheduledAction::create): Return a PassOwnPtr.
        * bindings/js/ScheduledAction.h:
        * page/DOMTimer.cpp:
        (WebCore::DOMTimer::DOMTimer): Update argument type.
        (WebCore::DOMTimer::install): Ditto.
        * page/DOMTimer.h:
        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::setTimeout): Ditto.
        (WebCore::DOMWindow::setInterval): Ditto.
        * page/DOMWindow.h:

2010-02-16  Nikolas Zimmermann  <nzimmermann@rim.com>

        Reviewed by David Hyatt.

        SVG units don't stay consistently sized on zoom
        https://bugs.webkit.org/show_bug.cgi?id=14004

        Large step towards making WebKit an usable SVG viewer.

        Make zooming into SVG documents work as expected, in both standalone and XHTML/SVG compound documents.
        SVG applies a global scale to the document, whereas CSS zooms all individual length units (on full-page-zoom).
        Scaling has to be avoided for all SVG specific CSS properties (already works) and for some selected CSS
        properties shared between CSS & SVG that explicitely need a different treatment in the context of SVG.
        To name a few: font-size, letter-spacing, etc. should stay invariant under zoom in SVG document fragments.

        Some new rules regarding zooming:
        - "Zoom text only" should never affect SVG documents, neither text nor content should zoom.
          This option doesn't make much sense for SVG, so it's wise to avoid side-effects and disable it.
          In compound documents the SVG would stay as-is and only text of surrounding XHTML content would zoom.

        - "Full page zoom" is the only zoom mode affecting SVG. (Panning only works in standalone documents.)

        Cover all mentioned cases above by a new set of layout tests.

        Tests: svg/zoom/page/absolute-sized-document-no-scrollbars.svg
               svg/zoom/page/absolute-sized-document-scrollbars.svg
               svg/zoom/page/relative-sized-document-scrollbars.svg
               svg/zoom/page/zoom-coords-viewattr-01-b.svg
               svg/zoom/page/zoom-foreignObject.svg
               svg/zoom/page/zoom-hixie-mixed-008.xml
               svg/zoom/page/zoom-hixie-mixed-009.xml
               svg/zoom/page/zoom-hixie-rendering-model-004.xhtml
               svg/zoom/page/zoom-svg-float-border-padding.xml
               svg/zoom/text/absolute-sized-document-no-scrollbars.svg
               svg/zoom/text/absolute-sized-document-scrollbars.svg
               svg/zoom/text/relative-sized-document-scrollbars.svg
               svg/zoom/text/zoom-coords-viewattr-01-b.svg
               svg/zoom/text/zoom-foreignObject.svg
               svg/zoom/text/zoom-hixie-mixed-008.xml
               svg/zoom/text/zoom-hixie-mixed-009.xml
               svg/zoom/text/zoom-hixie-rendering-model-004.xhtml
               svg/zoom/text/zoom-svg-float-border-padding.xml

        * css/CSSStyleSelector.cpp: Blacklist certain properties not to be zoomed for SVG elements.
        (WebCore::CSSStyleSelector::styleForDocument): Don't zoom font-sizes.
        (WebCore::CSSStyleSelector::applyProperty): Ditto (+ letter/word-spacing).
        (WebCore::CSSStyleSelector::setFontSize): Ditto.
        (WebCore::CSSStyleSelector::getComputedSizeFromSpecifiedSize): Never apply text zoom to SVG.
        * css/CSSStyleSelector.h:
        * css/SVGCSSStyleSelector.cpp: -webkit-shadow + SVG was incorrectly respecting zoom factor.
        (WebCore::CSSStyleSelector::applySVGProperty):
        * page/Frame.cpp:
        (WebCore::Frame::shouldApplyTextZoom): Remove SVG special cases.
        (WebCore::Frame::shouldApplyPageZoom): Ditto.
        (WebCore::Frame::setZoomFactor): Don't force setZoomsTextOnly() - SVG now uses FPZ as well.
        * rendering/RenderSVGRoot.cpp:
        (WebCore::RenderSVGRoot::calcReplacedWidth): CSSPropertyWidth is explicitely not scaled by CSSStyleSelector, fix that for outermost <svg> elements.
        (WebCore::RenderSVGRoot::calcReplacedHeight): Ditto for CSSPropertyHeight.
        (WebCore::RenderSVGRoot::layout): Simplify & cleanup code, take advantage of new calcWidth/Height functionality, no need to scale anything here.
        (WebCore::RenderSVGRoot::paint): Use parentOriginToBorderBox() instead of duplicating code.
        (WebCore::RenderSVGRoot::calcViewport): Simplify code.
        (WebCore::RenderSVGRoot::localToBorderBoxTransform): Calculate viewBoxToViewTransformation() against unscaled width()/height() values.
        * rendering/RenderSVGRoot.h:
        * svg/SVGLength.cpp:
        (WebCore::SVGLength::PercentageOfViewport): Cleanup & document function.
        * svg/SVGSVGElement.cpp:
        (WebCore::SVGSVGElement::currentScale): Return pageZoomFactor(), not just the zoomFactor() - as we want to ignore text-only zoom.
        (WebCore::SVGSVGElement::setCurrentScale): Pass isTextOnly=false to setZoomFactor().

2010-02-16  Julie Parent  <jparent@chromium.org>

        Unreviewed: Chromium build fix.

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

        Move include of JavaScriptProfile.h behind if (USE_JSC).

        * inspector/InspectorController.cpp:

2010-02-16  Alexey Proskuryakov  <ap@apple.com>

        Reviewed by Geoffrey Garen and Kevin Decker.

        https://bugs.webkit.org/show_bug.cgi?id=34989
        <rdar://problem/7417965> Cursor disappears on scroll bars that are over plugin content

        * html/HTMLPlugInElement.cpp: (WebCore::HTMLPlugInElement::defaultEventHandler): Added some
        comments about the way we pass events down to plug-ins.

2010-02-16  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Eric Carlson.

        With hardware acceleration turned off, video frames never display if poster
        image is specified
        https://bugs.webkit.org/show_bug.cgi?id=34965
        
        HTMLVideoElement's m_shouldDisplayPosterImage was never updated after
        the movie supplied its first video frame, so the poster would continue to show.
        
        Fixed by calling updatePosterImage() from mediaPlayerRepaint(), which is called
        each time a new frame is available. updatePosterImage() is cheap.
        
        Also made updatePosterImage() virtual on HTMLMediaElement to avoid a number of
        ugly casts.

        Test: manual-tests/media-elements/video-replaces-poster.html

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::noneSupported): Call updatePosterImage() without video check.
        (WebCore::HTMLMediaElement::setNetworkState): Ditto.
        (WebCore::HTMLMediaElement::setReadyState): Ditto.
        (WebCore::HTMLMediaElement::mediaPlayerRepaint): Call udpatePosterImage().
        * html/HTMLMediaElement.h:
        (WebCore::HTMLMediaElement::updatePosterImage): Make this an empty virtual
        method on the base class.
        * html/HTMLVideoElement.h: Override updatePosterImage().

2010-02-16  Simon Fraser  <simon.fraser@apple.com>

        Build fix for platforms without ACCELERATED_COMPOSITING defined.

        mediaPlayerRenderingModeChanged() is only available when ACCELERATED_COMPOSITING is defined.
        
        * platform/graphics/win/MediaPlayerPrivateQuickTimeWin.cpp:
        (WebCore::MediaPlayerPrivate::setUpVideoRendering):

2010-02-16  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Eric Carlson.

        Autoplaying video with poster doesn't reliably show up
        https://bugs.webkit.org/show_bug.cgi?id=34966
        
        A timing issue with compositing updates when replacing the poster image
        with the video could cause the video to not display.
        
        Fix by making video layer hook up more similar to WebGL etc, by having the
        video kick off a recalcStyle() via a SyntheticStyleChange. This requires
        vending a PlaformLayer* from the media player, up through the element.

        Test: media/video-replaces-poster.html

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::mediaPlayerRenderingModeChanged): Use setNeedsStyleRecalc()
        to kick off a compositing update.

        * html/HTMLMediaElement.h:
        (WebCore::HTMLMediaElement::platformLayer): Export the media engine's layer.

        * platform/graphics/MediaPlayer.cpp:
        (WebCore::NullMediaPlayerPrivate::platformLayer): Method to vend the media layer.
        (WebCore::MediaPlayer::platformLayer):

        * platform/graphics/MediaPlayer.h:
        (WebCore::MediaPlayerClient::mediaPlayerRenderingModeChanged): New client callback
        to indicate that the rendering mode changed. The element uses this to kick off a
        recalcStyle.

        * platform/graphics/MediaPlayerPrivate.h:
        (WebCore::MediaPlayerPrivateInterface::platformLayer): Method to vend the media layer.
        * platform/graphics/mac/MediaPlayerPrivateQTKit.h: Ditto
        * platform/graphics/mac/MediaPlayerPrivateQTKit.mm:
        (WebCore::MediaPlayerPrivate::createQTMovieLayer): No longer parent the layer directly
        via setContentsToMedia().
        (WebCore::MediaPlayerPrivate::acceleratedRenderingStateChanged): Ditto.
        (WebCore::MediaPlayerPrivate::setUpVideoRendering): Tell the client that the
        rendering mode changed.
        (WebCore::MediaPlayerPrivate::platformLayer): Method to vend the media layer.
        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::updateGraphicsLayerConfiguration): Call setContentsToMedia()
        here.

        * platform/graphics/win/MediaPlayerPrivateQuickTimeWin.h: Add platformLayer().
        * platform/graphics/win/MediaPlayerPrivateQuickTimeWin.cpp:
        (WebCore::MediaPlayerPrivate::platformLayer): Method to vend the media layer.
        (WebCore::MediaPlayerPrivate::setUpVideoRendering): Call mediaPlayerRenderingModeChanged()
        (WebCore::MediaPlayerPrivate::createLayerForMovie): Don't parent the layer ourselves any more.

        * rendering/RenderVideo.h: videoGraphicsLayer() is no longer needed.
        * rendering/RenderVideo.cpp: Ditto.

2010-02-12  Peter Kasting  <pkasting@google.com>

        Reviewed by Adam Barth.

        Code cleanup in ImageDecoders; no functional change.
        https://bugs.webkit.org/show_bug.cgi?id=28751

        * Make code mostly comply with the style guide (switch indenting, use of
          "!" vs. "== 0", don't unnecessarily wrap lines, etc.)
        * Eliminate m_allDataReceived in ICO/BMP decoders since it's in the
          base ImageDecoder class
        * Remove some useless or wrong comments, add others
        * Wrap comments at 80 columns (most already were) for
          consistency/readability
        * Avoid casts by using correct variable types
        * Consistent naming of decode() function/args
        * Shorter code in some places
        * Make declaration and definition order match

        * platform/graphics/qt/ImageDecoderQt.cpp:
        (WebCore::ImageDecoderQt::frameCount):
        (WebCore::ImageDecoderQt::frameBufferAtIndex):
        (WebCore::ImageDecoderQt::forceLoadEverything):
        * platform/image-decoders/ImageDecoder.cpp:
        (WebCore::ImageDecoder::create):
        (WebCore::RGBA32Buffer::clear):
        (WebCore::RGBA32Buffer::setSize):
        * platform/image-decoders/ImageDecoder.h:
        (WebCore::RGBA32Buffer::):
        (WebCore::ImageDecoder::ImageDecoder):
        * platform/image-decoders/bmp/BMPImageDecoder.cpp:
        (WebCore::BMPImageDecoder::BMPImageDecoder):
        (WebCore::BMPImageDecoder::setData):
        (WebCore::BMPImageDecoder::isSizeAvailable):
        (WebCore::BMPImageDecoder::frameBufferAtIndex):
        (WebCore::BMPImageDecoder::decode):
        (WebCore::BMPImageDecoder::decodeHelper):
        (WebCore::BMPImageDecoder::processFileHeader):
        * platform/image-decoders/bmp/BMPImageDecoder.h:
        (WebCore::BMPImageDecoder::readUint32):
        * platform/image-decoders/bmp/BMPImageReader.cpp:
        (WebCore::BMPImageReader::BMPImageReader):
        (WebCore::BMPImageReader::decodeBMP):
        (WebCore::BMPImageReader::readInfoHeaderSize):
        (WebCore::BMPImageReader::processInfoHeader):
        (WebCore::BMPImageReader::readInfoHeader):
        (WebCore::BMPImageReader::isInfoHeaderValid):
        (WebCore::BMPImageReader::processBitmasks):
        (WebCore::BMPImageReader::processColorTable):
        (WebCore::BMPImageReader::processRLEData):
        (WebCore::BMPImageReader::processNonRLEData):
        * platform/image-decoders/bmp/BMPImageReader.h:
        (WebCore::BMPImageReader::readUint32):
        (WebCore::BMPImageReader::pastEndOfImage):
        (WebCore::BMPImageReader::readCurrentPixel):
        (WebCore::BMPImageReader::getComponent):
        (WebCore::BMPImageReader::getAlpha):
        (WebCore::BMPImageReader::setI):
        (WebCore::BMPImageReader::setRGBA):
        * platform/image-decoders/gif/GIFImageDecoder.cpp:
        (WebCore::GIFImageDecoder::GIFImageDecoder):
        (WebCore::GIFImageDecoder::setData):
        (WebCore::GIFImageDecoder::isSizeAvailable):
        (WebCore::GIFImageDecoder::frameCount):
        (WebCore::GIFImageDecoder::frameBufferAtIndex):
        (WebCore::GIFImageDecoder::clearFrameBufferCache):
        (WebCore::GIFImageDecoder::sizeNowAvailable):
        (WebCore::GIFImageDecoder::haveDecodedRow):
        (WebCore::GIFImageDecoder::frameComplete):
        (WebCore::GIFImageDecoder::decode):
        (WebCore::GIFImageDecoder::initFrameBuffer):
        * platform/image-decoders/gif/GIFImageDecoder.h:
        (WebCore::GIFImageDecoder::):
        (WebCore::GIFImageDecoder::filenameExtension):
        * platform/image-decoders/gif/GIFImageReader.cpp:
        (GIFImageReader::do_lzw):
        (GIFImageReader::read):
        * platform/image-decoders/gif/GIFImageReader.h:
        (GIFImageReader::~GIFImageReader):
        * platform/image-decoders/ico/ICOImageDecoder.cpp:
        (WebCore::ICOImageDecoder::ICOImageDecoder):
        (WebCore::ICOImageDecoder::~ICOImageDecoder):
        (WebCore::ICOImageDecoder::setData):
        (WebCore::ICOImageDecoder::isSizeAvailable):
        (WebCore::ICOImageDecoder::frameSizeAtIndex):
        (WebCore::ICOImageDecoder::frameCount):
        (WebCore::ICOImageDecoder::frameBufferAtIndex):
        (WebCore::ICOImageDecoder::compareEntries):
        (WebCore::ICOImageDecoder::setDataForPNGDecoderAtIndex):
        (WebCore::ICOImageDecoder::decode):
        (WebCore::ICOImageDecoder::decodeDirectory):
        (WebCore::ICOImageDecoder::decodeAtIndex):
        (WebCore::ICOImageDecoder::processDirectoryEntries):
        (WebCore::ICOImageDecoder::readDirectoryEntry):
        * platform/image-decoders/ico/ICOImageDecoder.h:
        (WebCore::ICOImageDecoder::readUint16):
        (WebCore::ICOImageDecoder::readUint32):
        * platform/image-decoders/jpeg/JPEGImageDecoder.cpp:
        (WebCore::):
        (WebCore::JPEGImageReader::JPEGImageReader):
        (WebCore::JPEGImageReader::skipBytes):
        (WebCore::JPEGImageReader::decode):
        (WebCore::error_exit):
        (WebCore::fill_input_buffer):
        (WebCore::term_source):
        (WebCore::JPEGImageDecoder::setData):
        (WebCore::JPEGImageDecoder::setSize):
        (WebCore::JPEGImageDecoder::frameBufferAtIndex):
        (WebCore::JPEGImageDecoder::jpegComplete):
        (WebCore::JPEGImageDecoder::decode):
        * platform/image-decoders/jpeg/JPEGImageDecoder.h:
        (WebCore::JPEGImageDecoder::filenameExtension):
        * platform/image-decoders/png/PNGImageDecoder.cpp:
        (WebCore::decodingFailed):
        (WebCore::decodingWarning):
        (WebCore::headerAvailable):
        (WebCore::rowAvailable):
        (WebCore::pngComplete):
        (WebCore::PNGImageReader::PNGImageReader):
        (WebCore::PNGImageReader::close):
        (WebCore::PNGImageReader::decode):
        (WebCore::PNGImageReader::createInterlaceBuffer):
        (WebCore::PNGImageDecoder::setData):
        (WebCore::PNGImageDecoder::frameBufferAtIndex):
        (WebCore::PNGImageDecoder::headerAvailable):
        (WebCore::PNGImageDecoder::rowAvailable):
        (WebCore::PNGImageDecoder::pngComplete):
        (WebCore::PNGImageDecoder::decode):
        * platform/image-decoders/png/PNGImageDecoder.h:
        (WebCore::PNGImageDecoder::filenameExtension):
        * platform/image-decoders/qt/RGBA32BufferQt.cpp:
        (WebCore::RGBA32Buffer::setDecodedImage):

2010-02-16  Csaba Osztrogonác  <ossy@webkit.org>

        [Qt] Unreviewed buildfix.

        * WebCore.pro: Missing backslash added.

2010-02-16  Mikhail Naganov  <mnaganov@chromium.org>

        Reviewed by Pavel Feldman.

        Move JSC-specific wrappers for Profile and ProfileNode to bindings/js.

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

        * GNUmakefile.am:
        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JavaScriptProfile.cpp: Added.
        (WebCore::profileCache):
        (WebCore::getTitleCallback):
        (WebCore::getHeadCallback):
        (WebCore::getUniqueIdCallback):
        (WebCore::focus):
        (WebCore::exclude):
        (WebCore::restoreAll):
        (WebCore::finalize):
        (WebCore::ProfileClass):
        (WebCore::toJS):
        * bindings/js/JavaScriptProfile.h: Added.
        * bindings/js/JavaScriptProfileNode.cpp: Added.
        (WebCore::profileNodeCache):
        (WebCore::getFunctionName):
        (WebCore::getURL):
        (WebCore::getLineNumber):
        (WebCore::getTotalTime):
        (WebCore::getSelfTime):
        (WebCore::getNumberOfCalls):
        (WebCore::getChildren):
        (WebCore::getVisible):
        (WebCore::getCallUID):
        (WebCore::finalize):
        (WebCore::ProfileNodeClass):
        (WebCore::toJS):
        * bindings/js/JavaScriptProfileNode.h: Added.
        * inspector/JavaScriptProfile.cpp: Removed.
        * inspector/JavaScriptProfile.h: Removed.
        * inspector/JavaScriptProfileNode.cpp: Removed.
        * inspector/JavaScriptProfileNode.h: Removed.

2010-02-16  Alexander Pavlov  <apavlov@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: Elements Panel: Limit the number of initially loaded element children
        https://bugs.webkit.org/show_bug.cgi?id=34421

        Test: inspector/elements-panel-limited-children.html

        * English.lproj/localizedStrings.js:
        * inspector/front-end/DOMAgent.js:
        (WebInspector.DOMNode.prototype._insertChild):
        * inspector/front-end/ElementsPanel.js:
        (WebInspector.ElementsPanel.prototype.updateModifiedNodes):
        * inspector/front-end/ElementsTreeOutline.js:
        (WebInspector.ElementsTreeOutline.prototype.createTreeElementFor):
        (WebInspector.ElementsTreeOutline.prototype.revealAndSelectNode):
        (WebInspector.ElementsTreeElement):
        (WebInspector.ElementsTreeElement.prototype.get expandedChildrenLimit):
        (WebInspector.ElementsTreeElement.prototype.set expandedChildrenLimit):
        (WebInspector.ElementsTreeElement.prototype.get expandedChildCount):
        (WebInspector.ElementsTreeElement.prototype.showChild):
        (WebInspector.ElementsTreeElement.prototype.insertChildElement):
        (WebInspector.ElementsTreeElement.prototype.moveChild):
        (WebInspector.ElementsTreeElement.prototype._updateChildren.updateChildrenOfNode):
        (WebInspector.ElementsTreeElement.prototype._updateChildren):
        (WebInspector.ElementsTreeElement.prototype.adjustCollapsedRange):
        (WebInspector.ElementsTreeElement.prototype.handleLoadAllChildren):
        ():
        * inspector/front-end/inspector.css:

2010-02-16  Ismail Donmez  <ismail@namtrac.org>

        Reviewed by Pavel Feldman.

        Fix compilation with inspector disabled.
        https://bugs.webkit.org/show_bug.cgi?id=32724

        * rendering/RenderLayerBacking.cpp:
        (WebCore::inspectorTimelineAgent):

2010-02-16  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Timothy Hatcher.

        Web Inspector: turn off line wrapping in source view.

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

        * inspector/front-end/TextViewer.js:
        (WebInspector.TextViewer.prototype.markAndRevealRange):
        (WebInspector.TextViewer.prototype._paintLine):
        * inspector/front-end/textViewer.css:
        * inspector/front-end/utilities.js:

2010-02-16  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Timothy Hatcher.

        Web Inspector: let search iterate over views in Resources
        and keep the view in Scripts.

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

        * inspector/front-end/Panel.js:
        (WebInspector.Panel.prototype.jumpToNextSearchResult):
        (WebInspector.Panel.prototype.jumpToPreviousSearchResult):
        (WebInspector.Panel.prototype.showSourceLineForURL):
        (WebInspector.Panel.prototype.searchIteratesOverViews):
        * inspector/front-end/ResourcesPanel.js:
        (WebInspector.ResourcesPanel.prototype.get _resources):
        (WebInspector.ResourcesPanel.prototype.searchIteratesOverViews):
        * inspector/front-end/SourceView.js:
        (WebInspector.SourceView.prototype.showingLastSearchResult):
        * inspector/front-end/inspector.js:
        (WebInspector.documentKeyDown):
        (WebInspector.focusSearchField):

2010-02-16  Noam Rosenthal  <noam.rosenthal@nokia.com>

        Reviewed by Ariya Hidayat.

        [Qt] canvas clipping is buggy
        https://bugs.webkit.org/show_bug.cgi?id=32405

        Apparently the bug was in GraphicsContext::roundToDevicePixels, we
        didn't take unto accounts rotation, so the device pixels were rounded
        incorrectly. The new formula is a 1:1 copy from GraphicsContextCG so
        it should be rather safe

        Test: http://glimr.rubyforge.org/cake/canvas.html#Polaroids now looks right

        * platform/graphics/qt/GraphicsContextQt.cpp:
        (WebCore::GraphicsContext::roundToDevicePixels): Copy the formula from
        GraphicsContextCG

2010-02-16  Yury Semikhatsky  <yurys@chromium.org>

        Not Reviewed, build fix.

        * platform/graphics/FloatRect.h:
        (WebCore::FloatRect::center): make conversion from float to int explicit so that compiler
        doesn't complain about that.

2010-02-15  Dan Bernstein  <mitz@apple.com>

        Reviewed by Simon Fraser.

        <rdar://problem/7645609> [webView selectionRect] API is broken for multicolumn layout

        Refine the fix for https://bugs.webkit.org/show_bug.cgi?id=34923 by using the center of
        a quad’s bounding box, rather than its top left, as the reference point passed to
        offsetFromContainer(). This ensures that if a sliver off the top of the selection rect is in
        one column, but most of it is on another column, the single rect we return will be for the
        second column.

        * platform/graphics/FloatRect.h:
        (WebCore::FloatRect::center): Added.
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::localToContainerQuad): Use the center instead of the top left.

2010-02-15  MORITA Hajime  <morrita@gmail.com>

        Reviewed by Nikolas Zimmermann.

        SVG text refactor: reduce paint specific callbacks on SVGTextChunkWalker

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

        No new tests, no change of functionality.

        * rendering/SVGCharacterLayoutInfo.h:
        (WebCore::SVGTextChunkWalker::SVGTextChunkWalker):
        Removed setupBackground(), setupFill(), setupFillSelection(),
        setupStroke(), setupStrokeSelection(), setupForeground()
        and associated member variables.
        
        * rendering/SVGRootInlineBox.cpp:
        (WebCore::SVGRootInlineBoxPaintWalker::setupBackground):
        renamed from chunkSetupBackgroundCallback.
        (WebCore::SVGRootInlineBoxPaintWalker::setupFill):
        renamed from chunkSetupFillCallback.
        (WebCore::SVGRootInlineBoxPaintWalker::setupFillSelection):
        renamed from chunkSetupFillSelectionCallback.
        (WebCore::SVGRootInlineBoxPaintWalker::setupStroke):
        renamed from chunkSetupStrokeCallback.
        (WebCore::SVGRootInlineBoxPaintWalker::setupStrokeSelection):
        renamed from chunkSetupStrokeSelectionCallback.
        (WebCore::SVGRootInlineBoxPaintWalker::setupForeground):
        renamed from chunkSetupForegroundCallback.
        (WebCore::SVGRootInlineBoxPaintWalker::paintChunk):
        renamed from chunkPortionCallback.
        (WebCore::SVGRootInlineBoxPaintWalker::chunkPortionCallback):
        extracted from walkTextChunks.
        (WebCore::SVGRootInlineBox::paint):
        follow SVGTextChunkWalker change.
        (WebCore::SVGRootInlineBox::walkTextChunks):
        moved paint some specific code to SVGRootInlineBoxPaintWalker::chunkPortionCallback().
        
2010-02-15  Dan Bernstein  <mitz@apple.com>

        Try to fix the Chromium build.

        * rendering/RenderThemeChromiumMac.mm:
        (WebCore::RenderThemeChromiumMac::convertToPaintingRect):

2010-02-14  Gavin Barraclough  <barraclough@apple.com>

        Reviewed by Darin Adler.

        https://bugs.webkit.org/show_bug.cgi?id=33731
        Many false leaks in release builds due to PtrAndFlags

        PtrAndFlags has now been removed; remove forwarding header.

        * ForwardingHeaders/wtf/PtrAndFlags.h: Removed.

2010-02-15  Gavin Barraclough  <barraclough@apple.com>

        Reviewed by Geoff Garen.

        Bug 34952 - String lengths in UString should be unsigned.
        This matches WebCore::StringImpl, and better unifies behaviour throughout JSC.

        * bindings/js/JSDOMWindowCustom.cpp:
        (WebCore::JSDOMWindow::atob):
        (WebCore::JSDOMWindow::btoa):

2010-02-15  Gustavo Noronha Silva  <gustavo.noronha@collabora.co.uk>

        Reviewed by Xan Lopez.

        [GTK] Crashes when going back to a page that has data: URIs, with page cache enabled
        https://bugs.webkit.org/show_bug.cgi?id=34944

        Set the URL in the newly created response, when parsing data:
        URIs.

        Test: fast/harness/page-cache-crash-on-data-urls.html

        * platform/network/soup/ResourceHandleSoup.cpp:
        (WebCore::parseDataUrl):

2010-02-15  Dan Bernstein  <mitz@apple.com>

        Reviewed by Simon Fraser.

        <rdar://problem/7647300> Incorrect client rects for blocks the span multiple columns and their descendants
        https://bugs.webkit.org/show_bug.cgi?id=34923

        Test: fast/multicol/client-rects.html

        In column layout, a different transform applies to different points in
        the block and its descendants, depending on their y coordinate within the
        block. offsetFromContainer() used to return the offset that applied to
        the origin. With this change, it returns the offset that applies to a
        given reference point. When mapping a quad from local to absolute
        coordinates, the top left of the quad’s bounding box is used as that
        reference point.

        * editing/SelectionController.cpp:
        (WebCore::SelectionController::layout): Pass the caret’s origin as the
        reference point to offsetFromContainer().
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::adjustForColumns): Adds the offset between the
        given point and its image under the column paint-time transform to the
        given offset. Used by offsetFromContainer() where it had previously used
        adjustRectForColumns(), which takes a rect and operates less efficiently.
        * rendering/RenderBlock.h:
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::mapLocalToContainer): Pass the transformed point as
        the reference point to offsetFromContainer().
        (WebCore::RenderBox::mapAbsoluteToLocalPoint): Pass a point to
        offsetFromContainer().
        (WebCore::RenderBox::offsetFromContainer): Use adjustForColumns() instead
        of adjustRectForColumns(), and use the reference point to get the right
        adjustment for the point of interest, instead of the origin, in case this
        box spans multiple columns.
        * rendering/RenderBox.h:
        * rendering/RenderInline.cpp:
        (WebCore::RenderInline::offsetFromContainer): Ditto. Actually apply the
        column offset to the computation, which previously this function didn’t
        do.
        (WebCore::RenderInline::mapLocalToContainer): Pass the transformed point
        as the reference point to offsetFromContainer().
        (WebCore::RenderInline::mapAbsoluteToLocalPoint): Pass a point to
        offsetFromContainer().
        * rendering/RenderInline.h:
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::mapLocalToContainer): Apply column adjustment,
        based on the reference point, to the transform if needed.
        (WebCore::RenderObject::localToContainerQuad): Initialize the
        TransformState with the top left corner of the quad’s bounding box. It
        is later used as the reference point when deciding on which column to
        base the calculations.
        (WebCore::RenderObject::offsetFromContainer): Adjust for columns.
        (WebCore::RenderObject::offsetFromAncestorContainer): Pass the origin
        as the reference point to offsetFromContainer().
        * rendering/RenderObject.h:
        (WebCore::RenderObject::adjustForColumns): Added.
        * rendering/RenderTableCell.cpp:
        (WebCore::RenderTableCell::offsetFromContainer): Pass the reference
        point through.
        * rendering/RenderTableCell.h:
        * rendering/RenderText.cpp:
        (WebCore::RenderText::absoluteRectsForRange): Map (the origin of) each
        rect to absolute coordinates individually.
        * rendering/RenderThemeMac.mm:
        (WebCore::RenderThemeMac::convertToPaintingRect): Pass a point to
        offsetFromContainer().

2010-02-12  Alexey Proskuryakov  <ap@apple.com>

        Reviewed by Kevin Decker.

        <rdar://problem/7130641> Browser objects identity is not preserved by Safari

        Test: plugins/netscape-browser-object-identity.html

        * bridge/runtime_root.h: (JSC::Bindings::RootObject::addInvalidationCallback):
        RootObject can now call out during invalidation, making it possible for other code to know
        when this happens.

        * bridge/runtime_root.cpp:
        (JSC::Bindings::RootObject::InvalidationCallback::~InvalidationCallback): Empty destructor,
        in cpp file since it's virtual.
        (JSC::Bindings::RootObject::invalidate): Invoke invalidation callbacks.

        * bridge/NP_jsobject.cpp:
        (ObjectMap): Keep a JSObject->NPObject map for each RootObject. It somewhat cleaner to
        keep it outside RootObject, because (1) it is agnostic of what kinds of objects can wrap
        JSObject, and (2) out of process NPAPI implementation also keeps its corresponding map
        separately, due to supporting per-instance granularity (as opposed to per-RootObject here).
        (jsDeallocate): Remove the corresponding map entry.
        (_NPN_CreateScriptObject): Try to fetch existing object from the map, incrementing refcount.

2010-02-15  Philippe Normand  <pnormand@igalia.com>

        Rubber-stamped by Gustavo Noronha Silva.

        Removed redefine of LOG_VERBOSE. This should not have commited in
        the first place.

        * platform/graphics/gtk/MediaPlayerPrivateGStreamer.cpp:

2010-02-15  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Timothy Hatcher.

        Web Inspector: incorrect syntax highlighting as HTML in a script tag.
        We were preserving initial lexer state upon entering other tags while in <script>
        but were not doing it for <script tag itself. As a result, nested script
        tags were failing to highlight.

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

        * inspector/front-end/SourceHTMLTokenizer.js:
        (WebInspector.SourceHTMLTokenizer.prototype.nextToken):
        * inspector/front-end/SourceHTMLTokenizer.re2js:

2010-02-15  Brady Eidson  <beidson@apple.com>

        Reviewed by Dan Bernstein.

        Add a progress-indicator logging channel to WebCore, and convert the old WebKit Logging
        messages over to WebCore-style.

        No new tests. (Logging changes only)

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

        * platform/Logging.cpp:
        (WebCore::):
        (WebCore::getChannelFromName):
        * platform/Logging.h:

2010-02-15  Noam Rosenthal  <noam.rosenthal@nokia.com>

        Reviewed by Simon Hausmann.

        [Qt] QtWebkit bridge: enable passing a QWebElement to a signal/slot/property
        https://bugs.webkit.org/show_bug.cgi?id=34901

        When a signal/slot/property is of type QWebElement, it can seamlessly
        connect with JS objects that hold a WebCore element.

        New tests, see WebKit/qt/ChangeLog

        * bridge/qt/qt_runtime.cpp:
        (JSC::Bindings::QtWebElementRuntime::create): A proxy to QWebElement
        constructor
        (JSC::Bindings::QtWebElementRuntime::get): A proxy to
        QWebElement::element
        (JSC::Bindings::convertValueToQVariant): handle QWebElement
        (JSC::Bindings::convertQVariantToValue): handle QWebElement

2010-02-15  Pavel Feldman  <pfeldman@chromium.org>

        Not reviewed, Chromium build fix (force conversion of property names to
        strings in Web Inspector's injected script).

        * inspector/front-end/InjectedScript.js:
        (injectedScriptConstructor):

2010-02-15  Pavel Feldman  <pfeldman@chromium.org>

        Not reviewed: touch InspectorController in order to kick win bot tests
        with new injected script contents.

        * inspector/InspectorController.cpp:

2010-02-14  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Timothy Hatcher.

        Web Inspector: highlight actual search match in elements panel.

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

        * inspector/front-end/ElementsPanel.js:
        (WebInspector.ElementsPanel.prototype.searchCanceled):
        (WebInspector.ElementsPanel.prototype.performSearch):
        (WebInspector.ElementsPanel.prototype.addNodesToSearchResult):
        (WebInspector.ElementsPanel.prototype.jumpToNextSearchResult):
        (WebInspector.ElementsPanel.prototype.jumpToPreviousSearchResult):
        (WebInspector.ElementsPanel.prototype._highlightCurrentSearchResult):
        (WebInspector.ElementsPanel.prototype._hideSearchHighlights):
        * inspector/front-end/InjectedScript.js:
        * inspector/front-end/SourceFrame.js:
        (WebInspector.SourceFrame.prototype.findSearchMatches):
        * inspector/front-end/TextViewer.js:
        (WebInspector.TextViewer.prototype._paintLine):
        * inspector/front-end/textViewer.css:
        * inspector/front-end/utilities.js:

2010-02-14  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Timothy Hatcher.

        Web Inspector: XPathResult objects are not expanded in console.

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

        * inspector/front-end/InjectedScript.js:
        (injectedScriptConstructor):
        * inspector/front-end/ObjectPropertiesSection.js:
        (WebInspector.ObjectPropertiesSection.prototype.updateProperties):
        (WebInspector.ObjectPropertiesSection.CompareProperties):
        (WebInspector.ObjectPropertyTreeElement.prototype.update):
        * inspector/front-end/Section.js:
        (WebInspector.Section):
        * inspector/front-end/inspector.css:

2010-02-10  Philippe Normand  <pnormand@igalia.com>

        Reviewed by Gustavo Noronha Silva.

        [Gtk] wrong video aspect ratio
        https://bugs.webkit.org/show_bug.cgi?id=34790

        Fixed natural size calculation regarding pixel aspect ratio and
        display aspect ratio.

        Test: media/video-display-aspect-ratio.html

        * platform/graphics/gtk/MediaPlayerPrivateGStreamer.cpp:
        (WebCore::greatestCommonDivisor):
        (WebCore::MediaPlayerPrivate::naturalSize):

2010-02-14  Adam Barth  <abarth@webkit.org>

        Reviewed by Darin Adler.

        HTML5 iframe sandbox bypass of window.top.location navigation via <form target="_top">
        https://bugs.webkit.org/show_bug.cgi?id=33277

        submitForm wasn't respecting shouldAllowNavigation.  Instead of calling
        the wrapper function, we need to call shouldAllowNavigation because we
        need to handle the "frame not found" case differently than the
        "navigation denied" case.

        Test: http/tests/security/sandboxed-iframe-form-top.html

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::submitForm):

2010-02-14  Kent Tamura  <tkent@chromium.org>

        No review. Touch RenderRuny*.cpp to fix Chromium/Windows build bot.

        * rendering/RenderRuby.cpp: Add a comment for #endf.
        * rendering/RenderRubyBase.cpp: Add a comment for #endf.
        * rendering/RenderRubyRun.cpp: Add a comment for #endf.
        * rendering/RenderRubyText.cpp: Add a comment for #endf.

2010-02-13  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Timothy Hatcher.

        Web Inspector: cache created row, span and text elements
        in TextView to improve scroller performance on debug build.

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

        * inspector/front-end/SourceFrame.js:
        (WebInspector.SourceFrame.prototype.set visible):
        * inspector/front-end/TextViewer.js:
        (WebInspector.TextViewer):
        (WebInspector.TextViewer.prototype.freeCachedElements):
        (WebInspector.TextViewer.prototype._buildChunks):
        (WebInspector.TextViewer.prototype._makeLineAChunk):
        (WebInspector.TextViewer.prototype._paintLine):
        (WebInspector.TextViewer.prototype._releaseLines):
        (WebInspector.TextViewer.prototype._appendSpan):
        (WebInspector.TextViewer.prototype._appendTextNode):
        (WebInspector.TextChunk):
        (WebInspector.TextChunk.prototype.set expanded):
        (WebInspector.TextChunk.prototype._lineNumberText):
        (WebInspector.TextChunk.prototype._createRow):

2010-02-13  Kent Tamura  <tkent@chromium.org>

        Reviewed by Darin Adler.

        Refactor parsing/serialization functions in HTMLInputElement.
        https://bugs.webkit.org/show_bug.cgi?id=34852

        - Rename formStringToDouble() to parseToDoubleForNumberType()
        - Rename formStringToDateComponents() to parseToDateComponents()
        - Rename formStringFromDouble() to serializeForNumberType()
        - Add serializeForDateTimeTypes()
          The code is moved from setValueAsDate() and setDateValue().
        - Add serialize()
        
        parseToDouble() is the top-level function to parse a
        type-dependent string and return a double
        value. parseToDoubleForNumber() and parseToDateComponents()
        functions are helper functions for it. serialize() is the
        top-level function to serialize a double value to a type-dependent
        string, and serializeForNumberType() and
        serializeForDateTimeTypes() are helper functions for it.

        No tests because of no functional changes.

        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::stepMismatch):
        (WebCore::HTMLInputElement::getAllowedValueStep):
        (WebCore::HTMLInputElement::parseToDouble):
        (WebCore::HTMLInputElement::valueAsDate):
        (WebCore::HTMLInputElement::setValueAsDate):
        (WebCore::HTMLInputElement::setValueAsNumber):
        (WebCore::HTMLInputElement::serializeForDateTimeTypes):
        (WebCore::HTMLInputElement::serialize):
        (WebCore::HTMLInputElement::serializeForNumberType):
        (WebCore::HTMLInputElement::parseToDoubleForNumberType):
        (WebCore::HTMLInputElement::parseToDateComponents):
        * html/HTMLInputElement.h:
        * html/ValidityState.cpp:
        (WebCore::ValidityState::typeMismatch):
        * rendering/RenderSlider.cpp:
        (WebCore::SliderRange::valueFromElement):
        (WebCore::RenderSlider::updateFromElement):
        (WebCore::RenderSlider::setValueForPosition):

2010-01-05  Ojan Vafai  <ojan@chromium.org>

        Reviewed by Dan Bernstein.

        Improve text control intrinsic widths.
        https://bugs.webkit.org/show_bug.cgi?id=25566
        https://bugs.webkit.org/show_bug.cgi?id=25581
        https://bugs.webkit.org/show_bug.cgi?id=25958

        For Mac fonts that have invalid avgCharWidth entries in the OS/2 table,
        fallback to the Safari 4- behavior of using the width of a zero. For other
        fonts, make Mac match Windows (and thus IE) metrics.

        Lucida Grande is hard-coded to match MS Shell Dlg for inputs and
        Courier New for textareas in order to match Safari Win, Firefox and, in
        some cases IE (IE uses different default fonts depending on encoding).

        The only case where we still don't match Windows is if no font-size is
        set. The default font-size for form controls on the Mac is smaller and
        thus text-control widths will be slightly smaller.

        No new tests. Covered by existing tests.

        * platform/graphics/mac/SimpleFontDataMac.mm:
        (WebCore::SimpleFontData::platformCharWidthInit):
        * rendering/RenderTextControl.cpp:
        (WebCore::):
        (WebCore::RenderTextControl::hasValidAvgCharWidth):
        (WebCore::RenderTextControl::getAvgCharWidth):
        (WebCore::RenderTextControl::calcPrefWidths):
        * rendering/RenderTextControl.h:
        (WebCore::RenderTextControl::scaleEmToUnits):
        * rendering/RenderTextControlMultiLine.cpp:
        (WebCore::RenderTextControlMultiLine::getAvgCharWidth):
        * rendering/RenderTextControlMultiLine.h:
        * rendering/RenderTextControlSingleLine.cpp:
        (WebCore::RenderTextControlSingleLine::getAvgCharWidth):
        (WebCore::RenderTextControlSingleLine::preferredContentWidth):
        * rendering/RenderTextControlSingleLine.h:

2010-02-11  Ariya Hidayat  <ariya.hidayat@gmail.com>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] Unnecessary QBrush construction for doing a solid color stroke
        https://bugs.webkit.org/show_bug.cgi?id=34874

        Use the similar trick like in r54347, i.e. use the special brush for
        solid color to avoid expensive QBrush constructor.

        * platform/graphics/qt/GraphicsContextQt.cpp:
        (WebCore::GraphicsContext::setPlatformStrokeColor):

2010-02-11  Darin Fisher  <darin@chromium.org>

        Reviewed by Jeremy Orlow.

        Pass the Document along to the ChromiumBridge cookie methods.

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

        * platform/chromium/ChromiumBridge.h:
        * platform/network/chromium/CookieJarChromium.cpp:
        (WebCore::setCookies):
        (WebCore::cookies):
        (WebCore::cookiesEnabled):
        (WebCore::getRawCookies):
        (WebCore::deleteCookie):

2010-02-12  Eric Seidel  <eric@webkit.org>

        No review, rolling out r54694.
        http://trac.webkit.org/changeset/54694
        https://bugs.webkit.org/show_bug.cgi?id=34633

        This appears to have caused crashes on the Leopard bot.  See
        bug 34898.

        * websockets/ThreadableWebSocketChannelClientWrapper.h:
        (WebCore::ThreadableWebSocketChannelClientWrapper::didClose):
        * websockets/WebSocket.cpp:
        (WebCore::WebSocket::WebSocket):
        (WebCore::WebSocket::send):
        (WebCore::WebSocket::close):
        (WebCore::WebSocket::bufferedAmount):
        (WebCore::WebSocket::didConnect):
        (WebCore::WebSocket::didClose):
        * websockets/WebSocket.h:
        * websockets/WebSocketChannel.cpp:
        (WebCore::WebSocketChannel::WebSocketChannel):
        (WebCore::WebSocketChannel::send):
        (WebCore::WebSocketChannel::bufferedAmount):
        (WebCore::WebSocketChannel::didClose):
        * websockets/WebSocketChannel.h:
        * websockets/WebSocketChannelClient.h:
        (WebCore::WebSocketChannelClient::didClose):
        * websockets/WorkerThreadableWebSocketChannel.cpp:
        (WebCore::workerContextDidClose):
        (WebCore::WorkerThreadableWebSocketChannel::Peer::didClose):
        * websockets/WorkerThreadableWebSocketChannel.h:

2010-02-12  Gavin Barraclough  <barraclough@apple.com>

        Reviewed by Sam Weinig.

        Workers' EventListeners should be removed before JSGlobalData is destroyed
        https://bugs.webkit.org/show_bug.cgi?id=34903

        (Patch co-developed with Alexey Proskuryakov).

        Since http://trac.webkit.org/changeset/54460 the EventListeners registered by a
        worker thread are not removed until after the thread's JSGlobalData has been
        destroyed.  This is slightly worrisome since the JSEventListener contains
        JSObject*s, which will be dangling once the heap is destroyed.  The
        JSEventListeners may also reference the worker thread's normal world, which
        again it makes no sense to keep around after the JSGlobalData is freed.

        Remove all event listeners immediately prior to tearing down the JSGlobalData.

        https://bugs.webkit.org/show_bug.cgi?id=34728 addressed the symptoms of this
        problem, and it is probably cleaner to make the client data's normal world no
        longer be a member (since it is a ref-counted object), however they should be
        no requirement to 'detatch' - it makes no sense for anyone to be referencing
        the world after the JSGlobalData has gone away (the world's purpose is to hold
        wrapper objects in the JSGlobalData's heap).  Keep the restructuring that makes
        the normal world no longer be a member, but remove the detach mechanism this
        patch added & replace with stronger ASSERTs.

        * bindings/js/JSDOMBinding.cpp:
        (WebCore::DOMWrapperWorld::~DOMWrapperWorld):
        * bindings/js/JSDOMBinding.h:
        (WebCore::WebCoreJSClientData::~WebCoreJSClientData):
        * workers/WorkerThread.cpp:
        (WebCore::WorkerThreadShutdownStartTask::performTask):

2010-02-12  Gavin Barraclough  <barraclough@apple.com>

        Reviewed by Sam Weinig.

        https://bugs.webkit.org/show_bug.cgi?id=33731
        Remove uses of PtrAndFlags from WebCore::StringImpl.

        These break the OS X Leaks tool.  Use a bits stolen from the refCount to hold the
        'InTable' and 'HasTerminatingNullCharacter' flags, along with the string type
        (fixes a leak where the string data is allocated at the address (this + 1), and is
        misinterpreted as being an internal buffer).

        * WebCore.base.exp:
        * platform/text/StringImpl.cpp:
        (WebCore::StringImpl::StringImpl):
        (WebCore::StringImpl::~StringImpl):
        (WebCore::StringImpl::create):
        (WebCore::StringImpl::createWithTerminatingNullCharacter):
        (WebCore::StringImpl::crossThreadString):
        (WebCore::StringImpl::sharedBuffer):
        * platform/text/StringImpl.h:
        (WebCore::StringImpl::):
        (WebCore::StringImpl::hasTerminatingNullCharacter):
        (WebCore::StringImpl::inTable):
        (WebCore::StringImpl::setInTable):
        (WebCore::StringImpl::ref):
        (WebCore::StringImpl::deref):
        (WebCore::StringImpl::hasOneRef):
        (WebCore::StringImpl::operator new):
        (WebCore::StringImpl::bufferOwnership):
        * storage/OriginUsageRecord.cpp:
        (WebCore::OriginUsageRecord::addDatabase):
        (WebCore::OriginUsageRecord::markDatabase):

2010-02-12  Nikolas Zimmermann  <nzimmermann@rim.com>

        Reviewed by Dirk Schulze.

        Repaint bug on Text selection in foreignObject
        https://bugs.webkit.org/show_bug.cgi?id=16939

        Tests: svg/overflow/overflow-on-foreignObject.svg
               svg/text/foreignObject-text-clipping-bug.xml

        Selecting text contained in <foreignObject> leads to artefacts. Same for zooming/panning.
        RenderForeignObject contained old legacy code returning FloatRect() for repaintRectInLocalCoordinates,
        which is obviously wrong. Fixing that leads to even more problems, as the underlying RenderBlock
        did not reflect the x/y translation set on the <foreignObject>. This is problematic, as laying out
        positioned objects in the XHTML subtree depends on proper size/location values of the frameRect.

        Correctly clip on overflow="hidden". overflow="scroll" & friends are not yet supported, see lengthy
        comment in RenderSVGBlock why we either need RenderLayer for RenderForeignObject or need to rework
        overflow handling to avoid RenderLayer.

        SVGForeignObjectElement uses a hacky custom solution to synchronize CSS width/height properties with
        the SVG width/height attributes. Remove all of that code and just implement calcWidth/calcHeight in
        RenderForeignObject, grabbing the right values from SVGForeignObjectElement::width/height upon layout.

        * rendering/RenderForeignObject.cpp:
        (WebCore::RenderForeignObject::paint): Clip properly to the actual bounds of the foreignObject, respecting that x/y translation is handled by RenderBlock now.
        (WebCore::RenderForeignObject::clippedOverflowRectForRepaint): Added missing function, forward to SVGRenderBase just like all other SVG renderers.
        (WebCore::RenderForeignObject::computeRectForRepaint): Remove manual implementation, forward to SVGRenderBase.
        (WebCore::RenderForeignObject::localToParentTransform): Respect x/y translation here _after_ applying localTransform().
        (WebCore::RenderForeignObject::calcWidth): Override RenderBlock::calcWidth to grab width() from SVGForeignObjectElement.
        (WebCore::RenderForeignObject::calcHeight): Override RenderBlock::calcHeight to grab height() from SVGForeignObjectElement.
        (WebCore::RenderForeignObject::layout): Calculate viewport once and cache it. Push x/y location down to RenderBlock - analogous to RenderSVGText.
        (WebCore::RenderForeignObject::nodeAtFloatPoint): Adapt to x/y translation changes (map through localTransform, not localToParentTransform). Respect overflow clipping.
        (WebCore::RenderForeignObject::mapLocalToContainer): Set useTransforms=true, to avoid assertions when selecting text in foreign objects.
        * rendering/RenderForeignObject.h:
        (WebCore::RenderForeignObject::objectBoundingBox): Return cached m_viewport.
        (WebCore::RenderForeignObject::strokeBoundingBox): Ditto.
        (WebCore::RenderForeignObject::repaintRectInLocalCoordinates): Ditto.
        * rendering/RenderSVGBlock.cpp:
        (WebCore::RenderSVGBlock::setStyle): Cleanup code, move setHasOverflowClip() overrides in updateBoxModelInfoFromStyle where it belongs.
        (WebCore::RenderSVGBlock::updateBoxModelInfoFromStyle): Added to force setting setHasOverflowClip(false).
        * rendering/RenderSVGBlock.h:
        * svg/SVGForeignObjectElement.cpp: Kill a lot of custom code - it was just plain wrong to utilize CSS to push width/height information down to RenderBlock.
        (WebCore::SVGForeignObjectElement::svgAttributeChanged):

2010-02-12  Dan Bernstein  <mitz@apple.com>

        Reviewed by Simon Fraser.

        <rdar://problem/7609268> REGRESSION (r50301): Problem selecting text in a Devanagari website
        https://bugs.webkit.org/show_bug.cgi?id=34865

        Test: fast/text/glyph-reordering.html

        * platform/graphics/mac/ComplexTextController.cpp:
        (WebCore::ComplexTextController::ComplexTextRun::ComplexTextRun):
        (WebCore::ComplexTextController::ComplexTextRun::setIsNonMonotonic): Added. Sets m_isMonotonic
        and populates m_glyphEndOffsets with the end offsets of each glyph’s corresponding character range.
        (WebCore::ComplexTextController::advance): For non-monotonic runs, use endOffsetAt() to get
        glyphs’ end offsets.
        (WebCore::ComplexTextController::adjustGlyphsAndAdvances): Check for monotonicity and call
        setIsNonMonotonic() if needed.
        * platform/graphics/mac/ComplexTextController.h:
        (WebCore::ComplexTextController::ComplexTextRun::lastIndexAt): Added this getter.
        (WebCore::ComplexTextController::ComplexTextRun::isMonotonic): Ditto.
        * platform/graphics/mac/ComplexTextControllerATSUI.cpp:
        (WebCore::ComplexTextController::ComplexTextRun::ComplexTextRun): Initialize m_isMonotonic.
        * platform/graphics/mac/ComplexTextControllerCoreText.cpp:
        (WebCore::ComplexTextController::ComplexTextRun::ComplexTextRun): Ditto.

2010-02-12  Alexey Proskuryakov  <ap@apple.com>

        Reviewed by David Levin.

        https://bugs.webkit.org/show_bug.cgi?id=34866
        Leopard Debug Bot crashed on fast/forms/old-names.html

        * html/HTMLFormCollection.cpp: (WebCore::HTMLFormCollection::formCollectionInfo): Removed
        a misplaced checkConsistency() call. We are not looking at cache content at this point, and
        caches will be reset on next access.

2010-02-12  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Timothy Hatcher.

        Web Inspector: restore highlighting animation, bring back
        keyboard navigation, beautify search results.

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

        * inspector/front-end/TextViewer.js:
        (WebInspector.TextViewer):
        (WebInspector.TextViewer.prototype.highlightLine):
        * inspector/front-end/textViewer.css:

2010-02-12  Anton Muhin  <antonm@chromium.org>

        Reviewed by Adam Barth.

        [v8] handle to the document can only own Objects, not Values
        https://bugs.webkit.org/show_bug.cgi?id=34854

        * bindings/v8/V8DOMWindowShell.cpp:
        (WebCore::V8DOMWindowShell::updateDocumentWrapper):
        (WebCore::V8DOMWindowShell::updateDocumentWrapperCache):
        * bindings/v8/V8DOMWindowShell.h:
        * bindings/v8/custom/V8DocumentCustom.cpp:
        (WebCore::toV8):

2010-02-12  Simon Hausmann  <simon.hausmann@nokia.com>

        Reviewed by Holger Freyther.

        Replaced stray CRLF with LF.

        * wml/WMLInputElement.cpp:
        (WebCore::WMLInputElement::suggestedValue):
        * wml/WMLInputElement.h:

2010-02-10  Jocelyn Turcotte  <jocelyn.turcotte@nokia.com>

        Reviewed by Tor Arne Vestbø.

        [Qt] Make qtlauncher and qgvlauncher use the generated headers
        path to make sure they are correctly generated.

        * WebCore.pro:

2010-02-10  Jocelyn Turcotte  <jocelyn.turcotte@nokia.com>

        Reviewed by Tor Arne Vestbø.

        [Qt] Ensure relative paths in generated .pri files to ensure that
        a source package with pre-generated derived sources can be compiled.

        - Re-add a separate headers.pri file for WEBKIT_API_HEADERS
        - Rename the generated headers.pri to classheaders.pri to avoid
        confusion with the one generated by synqt since they don't have the
        same content.
        - Remove private headers list variable from classheaders.pri
        - Use $$PWD in classheaders.pri
        - Remove classheaders.pri from the installed files

        * WebCore.pro:

2010-02-10  Jocelyn Turcotte  <jocelyn.turcotte@nokia.com>

        Reviewed by Tor Arne Vestbø.

        [Qt] Manually add support for the install target on Symbian.

        This is required to copy the headers over the ones in Qt.

        * WebCore.pro:

2010-02-10  Jocelyn Turcotte  <jocelyn.turcotte@nokia.com>

        Reviewed by Tor Arne Vestbø.

        [Qt] Minor fixes on QtWebKit headers generation.

        - Adds QtWebKit to the generated headers destination path
        - Improve compatibility with MinGW

        * WebCore.pro:

2010-02-11  Fumitoshi Ukai  <ukai@chromium.org>

        Reviewed by Alexey Proskuryakov.

        WebSocket ignores HttpOnly cookies, but should use in Handshake.
        https://bugs.webkit.org/show_bug.cgi?id=34289

        Test: websocket/tests/cookies/httponly-cookie.pl

        * platform/CookieJar.h: add cookieRequestHeaderFieldValue()
        * platform/chromium/ChromiumBridge.h:
        * platform/haiku/CookieJarHaiku.cpp:
        (WebCore::cookieRequestHeaderFieldValue):
        * platform/mac/CookieJar.mm:
        (WebCore::cookies):
        (WebCore::cookieRequestHeaderFieldValue):
        * platform/network/android/CookieJarAndroid.cpp:
        (WebCore::cookieRequestHeaderFieldValue):
        * platform/network/chromium/CookieJarChromium.cpp:
        (WebCore::cookieRequestHeaderFieldValue):
        * platform/network/curl/CookieJarCurl.cpp:
        (WebCore::cookieRequestHeaderFieldValue):
        * platform/network/soup/CookieJarSoup.cpp:
        (WebCore::cookieRequestHeaderFieldValue):
        * platform/network/win/CookieJarCFNetWin.cpp:
        (WebCore::cookieRequestHeaderFieldValue):
        * platform/network/win/CookieJarWin.cpp:
        (WebCore::cookieRequestHeaderFieldValue):
        * platform/qt/CookieJarQt.cpp:
        (WebCore::cookieRequestHeaderFieldValue):
        * websockets/WebSocketHandshake.cpp:
        (WebCore::WebSocketHandshake::clientHandshakeMessage): use cookieRequestHeaderFieldValue() instead of cookies() to include HttpOnly cookies.

2010-02-16  Sebastian Dröge  <sebastian.droege@collabora.co.uk>

        Reviewed by Gustavo Noronha Silva.

        Notify about size changes in the WebKit GStreamer source.
        
        https://bugs.webkit.org/show_bug.cgi?id=34881

        * platform/graphics/gtk/WebKitWebSourceGStreamer.cpp:
        (webkit_web_src_init):
        (StreamingClient::didReceiveResponse):
        * platform/graphics/gtk/WebKitWebSourceGStreamer.h:
        This makes sure that other GStreamer elements know about the
        size and on-disk buffering actually works.
        Only notify about size changes if gst-plugins-base before
        0.10.27 is used, because from that version onwards this is
        automatically handled.
        
        If appsrc 0.10.27 or later is used, set the min-percent property
        to 20% to allow more time to pass between the need-data signal
        and starvation of the pipeline.
        
        Also reset the size when stopping the source and send EOS
        on seeking failures. 

2010-02-11  Ariya Hidayat  <ariya.hidayat@gmail.com>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] Use clipRegion instead of clipPath to save lots of CPU cycles.

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

        * platform/graphics/qt/GraphicsContextQt.cpp:
        (WebCore::GraphicsContext::clipOut):
        (WebCore::GraphicsContext::clipOutEllipseInRect):

2010-02-11  Yuzo Fujishima  <yuzo@google.com>

        Reviewed by Shinichiro Hamaji.

        Rename underscored identifiers in WebCore/css/CSSParser.cpp.
        https://bugs.webkit.org/show_bug.cgi?id=34877
        Also fix whitespace erros that surface due to the above fix.

        This doesn't change the code logic. Hence no new tests are required.

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

2010-02-11  Joseph Pecoraro  <joepeck@webkit.org>

        Reviewed by Timothy Hatcher.

        Web Inspector: Focusing a resource in the inspector should default to content not header
        https://bugs.webkit.org/show_bug.cgi?id=34861

        * inspector/front-end/Settings.js:
        (WebInspector.Settings.prototype._load): changed initial default to content tab

2010-02-11  Joseph Pecoraro  <joepeck@webkit.org>

        Reviewed by Timothy Hatcher.

        Web Inspector: Editing Styles Cannot Tab Backwards from a New Style Item
        https://bugs.webkit.org/show_bug.cgi?id=34872

        * inspector/front-end/StylesSidebarPane.js:
        (WebInspector.StylePropertiesSection.prototype.update): triggers afterUpdate
        (WebInspector.StylePropertiesSection.prototype.afterUpdate): factored out _afterUpdate handling

2010-02-11  Nikolas Zimmermann  <nzimmermann@rim.com>

        Reviewed by Eric Seidel.

        Add roundedIntSize() convenience method converting FloatSize to IntSize, just like roundedIntPoint() converting FloatPoint to IntPoint.

        * platform/graphics/FloatSize.h:
        (WebCore::roundedIntSize):

2010-02-11  Kent Tamura  <tkent@chromium.org>

        Reviewed by Darin Adler.

        Fix two issues on maxLength.
        https://bugs.webkit.org/show_bug.cgi?id=34783

        - ValidityState.tooLong behavior was inconsistent with UIs of
        <input> and <textarea>. tooLong checked Unicode code point length
        though the UIs checks grapheme cluster length.

        - Setting HTMLTextAreaElement::value didn't update the dirty flag.

        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::tooLong): Use numGraphemeClusters() instead of length().
        * html/HTMLTextAreaElement.cpp:
          Rename setValue() to setNonDirtyValue(), and introduce setValue()
          which calls setNonDirtyValue() and sets the dirty flag.
        (WebCore::HTMLTextAreaElement::childrenChanged):
        (WebCore::HTMLTextAreaElement::reset):
        (WebCore::HTMLTextAreaElement::setValue):
        (WebCore::HTMLTextAreaElement::setNonDirtyValue):
        (WebCore::HTMLTextAreaElement::setDefaultValue):
        (WebCore::HTMLTextAreaElement::tooLong): Use numGraphemeClusters() instead of length().
        * html/HTMLTextAreaElement.h:

2010-02-11  Fumitoshi Ukai  <ukai@chromium.org>

        Reviewed by Alexey Proskuryakov.

        WebSocket bufferedAmount should not be 0 when send after close.
        https://bugs.webkit.org/show_bug.cgi?id=34633

        Test: websocket/tests/bufferedAmount-after-close.html

        * websockets/ThreadableWebSocketChannelClientWrapper.h:
        (WebCore::ThreadableWebSocketChannelClientWrapper::didClose):
        * websockets/WebSocket.cpp:
        (WebCore::WebSocket::WebSocket):
        (WebCore::WebSocket::send):
        (WebCore::WebSocket::close):
        (WebCore::WebSocket::bufferedAmount):
        (WebCore::WebSocket::didConnect):
        (WebCore::WebSocket::didClose):
        * websockets/WebSocket.h:
        * websockets/WebSocketChannel.cpp:
        (WebCore::WebSocketChannel::WebSocketChannel):
        (WebCore::WebSocketChannel::send):
        (WebCore::WebSocketChannel::bufferedAmount):
        (WebCore::WebSocketChannel::didClose):
        * websockets/WebSocketChannel.h:
        * websockets/WebSocketChannelClient.h:
        (WebCore::WebSocketChannelClient::didClose):
        * websockets/WorkerThreadableWebSocketChannel.cpp:
        (WebCore::workerContextDidClose):
        (WebCore::WorkerThreadableWebSocketChannel::Peer::didClose):
        * websockets/WorkerThreadableWebSocketChannel.h:

2010-02-11  Fumitoshi Ukai  <ukai@chromium.org>

        Reviewed by Alexey Proskuryakov.

        WebSocket in Worker failed to close
        https://bugs.webkit.org/show_bug.cgi?id=34785

        Tests: websocket/tests/workers/close-in-shared-worker.html
               websocket/tests/workers/close-in-worker.html

        * websockets/WorkerThreadableWebSocketChannel.cpp:
        (WebCore::WorkerThreadableWebSocketChannel::close):

2010-02-11  Kwang Yul Seo  <skyul@company100.net>

        Reviewed by Eric Seidel.

        [BREWMP] Add dummy Cursor
        https://bugs.webkit.org/show_bug.cgi?id=34672

        * platform/brew/CursorBrew.cpp: Added.
        (WebCore::Cursor::Cursor):
        (WebCore::Cursor::~Cursor):
        (WebCore::Cursor::operator=):
        (WebCore::dummyCursor):
        (WebCore::pointerCursor):
        (WebCore::crossCursor):
        (WebCore::handCursor):
        (WebCore::moveCursor):
        (WebCore::iBeamCursor):
        (WebCore::waitCursor):
        (WebCore::helpCursor):
        (WebCore::eastResizeCursor):
        (WebCore::northResizeCursor):
        (WebCore::northEastResizeCursor):
        (WebCore::northWestResizeCursor):
        (WebCore::southResizeCursor):
        (WebCore::southEastResizeCursor):
        (WebCore::southWestResizeCursor):
        (WebCore::westResizeCursor):
        (WebCore::northSouthResizeCursor):
        (WebCore::eastWestResizeCursor):
        (WebCore::northEastSouthWestResizeCursor):
        (WebCore::northWestSouthEastResizeCursor):
        (WebCore::columnResizeCursor):
        (WebCore::rowResizeCursor):
        (WebCore::verticalTextCursor):
        (WebCore::cellCursor):
        (WebCore::contextMenuCursor):
        (WebCore::noDropCursor):
        (WebCore::copyCursor):
        (WebCore::progressCursor):
        (WebCore::aliasCursor):
        (WebCore::noneCursor):
        (WebCore::notAllowedCursor):
        (WebCore::zoomInCursor):
        (WebCore::zoomOutCursor):
        (WebCore::middlePanningCursor):
        (WebCore::eastPanningCursor):
        (WebCore::northPanningCursor):
        (WebCore::northEastPanningCursor):
        (WebCore::northWestPanningCursor):
        (WebCore::southPanningCursor):
        (WebCore::southEastPanningCursor):
        (WebCore::southWestPanningCursor):
        (WebCore::westPanningCursor):
        (WebCore::grabCursor):
        (WebCore::grabbingCursor):

2010-02-11  Nate Chapin  <japhet@chromium.org>

        Reviewed by Dimitri Glazkov.

        [V8] Add back in a fast path for v8 object wrapping
        when it's not possible we're in a WorkerContext (the fast
        path is important for performance).

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

        * bindings/scripts/CodeGeneratorV8.pm:
        * bindings/v8/V8DOMWrapper.cpp:
        (WebCore::V8DOMWrapper::instantiateV8ObjectInWorkerContext):
        (WebCore::V8DOMWrapper::instantiateV8Object):
        * bindings/v8/V8DOMWrapper.h:

2010-02-11  Nikolas Zimmermann  <nzimmermann@rim.com>

        Reviewed by Dirk Schulze.

        Small cleanups in SVG render tree code.
        Centralize calls to inflateShadow(), in SVGRenderSupport::computeRectForRepaint,
        instead of spreading them around the subclasses. All classes should inherit
        protected from SVGRenderBase, made it consistent.
        
        Doesn't affect layout tests.

        * rendering/RenderSVGImage.cpp:
        (WebCore::RenderSVGImage::computeRectForRepaint):
        * rendering/RenderSVGImage.h:
        * rendering/RenderSVGModelObject.cpp:
        (WebCore::RenderSVGModelObject::computeRectForRepaint):
        * rendering/RenderSVGRoot.h:
        * rendering/RenderSVGText.cpp:
        (WebCore::RenderSVGText::computeRectForRepaint):
        (WebCore::RenderSVGText::layout):
        * rendering/SVGRenderSupport.cpp:
        (WebCore::SVGRenderBase::computeRectForRepaint):
        * rendering/SVGRootInlineBox.h:

2010-02-11  David Hyatt  <hyatt@apple.com>

        Reviewed by Dan Bernstein.

        https://bugs.webkit.org/show_bug.cgi?id=34857
        Move InlineIterator and BidiRun into new files so subclasses can access them.

        * GNUmakefile.am:
        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * rendering/BidiRun.cpp: Added.
        (WebCore::BidiRun::destroy):
        (WebCore::throw):
        (WebCore::BidiRun::operator delete):
        * rendering/BidiRun.h: Added.
        (WebCore::BidiRun::BidiRun):
        (WebCore::BidiRun::next):
        * rendering/InlineIterator.h: Added.
        (WebCore::InlineIterator::InlineIterator):
        (WebCore::operator==):
        (WebCore::operator!=):
        (WebCore::bidiNext):
        (WebCore::bidiFirst):
        (WebCore::InlineIterator::increment):
        (WebCore::InlineIterator::atEnd):
        (WebCore::InlineIterator::current):
        (WebCore::InlineIterator::direction):
        (WebCore::InlineBidiResolver::increment):
        (WebCore::InlineBidiResolver::appendRun):
        * rendering/RenderBlock.h:
        * rendering/RenderBlockLineLayout.cpp:
        (WebCore::RenderBlock::appendRunsForObject):
        (WebCore::RenderBlock::requiresLineBox):

2010-02-11  Steve Block  <steveblock@google.com>

        Reviewed by Dimitri Glazkov.

        Fixes CodeGeneratorV8.pm to include the header for the indexer type when using setCollectionIndexedGetter()
        https://bugs.webkit.org/show_bug.cgi?id=34836

        setCollectionIndexedGetter() uses getIndexedPropertyOfCollection(),
        which in turn uses toV8() with the indexer type, which is declared in
        the header for the indexer type.

        No new tests, build fix only.

        * bindings/scripts/CodeGeneratorV8.pm:

2010-02-11  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Timothy Hatcher.

        Web Inspector: split source code into chunks in order to improve text
        viewer performance on large files.

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

        This change brings back SourceFrame's canvas+style magic, restores line
        wrapping and makes things a lot like they used to be.
        It removes TextEditor for now and renames NativeTextViewer into TextViewer.
        TextViewer is no longer derived from TextEditor.
        This TextViewer is still based on TextEditorModel, no iframes are involved.

        Instead of creating div per line, TextViewer splits source code into 50 line
        chunks. Upon scroll event, visible chunks are sharded into lines and individual
        lines are highlighted. Whenever highlighted region gets outside of the visible
        area, highlight spans are thrown away and region is replaced with the original
        plain text chunk.

        Complex stuff:
        - Whenever there is a need to manipulate individual lines (add message bubble /
        set breakpoint / reveal / etc.), individual chunks for such lines are created.
        - There is also an implicit machinery that is maintaining selection when it
        goes beyond the visible area.
        - Search occurrences are implemented as artificial spans interweaving
        highlighting markup.

        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * inspector/front-end/NativeTextViewer.js: Removed.
        * inspector/front-end/ScriptView.js:
        (WebInspector.ScriptView):
        * inspector/front-end/Settings.js:
        * inspector/front-end/SourceFrame.js:
        (WebInspector.SourceFrame):
        (WebInspector.SourceFrame.prototype.set visible):
        (WebInspector.SourceFrame.prototype.set executionLine):
        (WebInspector.SourceFrame.prototype.revealLine):
        (WebInspector.SourceFrame.prototype.addBreakpoint):
        (WebInspector.SourceFrame.prototype.removeBreakpoint):
        (WebInspector.SourceFrame.prototype.addMessage):
        (WebInspector.SourceFrame.prototype.clearMessages):
        (WebInspector.SourceFrame.prototype.sizeToFitContentHeight):
        (WebInspector.SourceFrame.prototype.setContent):
        (WebInspector.SourceFrame.prototype.highlightLine):
        (WebInspector.SourceFrame.prototype._createViewerIfNeeded):
        (WebInspector.SourceFrame.prototype.markAndRevealRange):
        (WebInspector.SourceFrame.prototype.clearMarkedRange):
        (WebInspector.SourceFrame.prototype._breakpointChanged):
        (WebInspector.SourceFrame.prototype._updateExecutionLine):
        (WebInspector.SourceFrame.prototype._addMessageToSource):
        (WebInspector.SourceFrame.prototype._addExistingBreakpointsToSource):
        (WebInspector.SourceFrame.prototype._addBreakpointToSource):
        (WebInspector.SourceFrame.prototype._removeBreakpointFromSource):
        (WebInspector.SourceFrame.prototype._mouseDown):
        (WebInspector.SourceFrame.prototype._editBreakpointCondition.committed):
        (WebInspector.SourceFrame.prototype._editBreakpointCondition.dismissed):
        (WebInspector.SourceFrame.prototype._editBreakpointCondition):
        (WebInspector.SourceFrame.prototype._showBreakpointConditionPopup):
        (WebInspector.SourceFrame.prototype._createConditionElement):
        (WebInspector.SourceFrame.prototype._keyDown):
        (WebInspector.SourceFrame.prototype.resize):
        (WebInspector.SourceFrame.prototype._drawProgramCounterInContext):
        (WebInspector.SourceFrame.prototype._drawProgramCounterImageIfNeeded):
        (WebInspector.SourceFrame.prototype._drawBreakpointImagesIfNeeded.drawBreakpoint):
        (WebInspector.SourceFrame.prototype._drawBreakpointImagesIfNeeded):
        * inspector/front-end/SourceView.js:
        (WebInspector.SourceView):
        (WebInspector.SourceView.prototype._removeBreakpoint):
        (WebInspector.SourceView.prototype.searchCanceled):
        (WebInspector.SourceView.prototype._jumpToSearchResult):
        * inspector/front-end/TextEditor.js: Removed.
        * inspector/front-end/TextViewer.js: Added.
        (WebInspector.TextViewer):
        (WebInspector.TextViewer.prototype.set mimeType):
        (WebInspector.TextViewer.prototype.get textModel):
        (WebInspector.TextViewer.prototype.revealLine):
        (WebInspector.TextViewer.prototype.addDecoration):
        (WebInspector.TextViewer.prototype.removeDecoration):
        (WebInspector.TextViewer.prototype.markAndRevealRange):
        (WebInspector.TextViewer.prototype.highlightLine):
        (WebInspector.TextViewer.prototype._textChanged):
        (WebInspector.TextViewer.prototype._createChunkRow):
        (WebInspector.TextViewer.prototype._makeLineAChunk):
        (WebInspector.TextViewer.prototype._indexChunks):
        (WebInspector.TextViewer.prototype._highlightChanged):
        (WebInspector.TextViewer.prototype._scroll):
        (WebInspector.TextViewer.prototype.setCoalescingUpdate):
        (WebInspector.TextViewer.prototype._repaintAll):
        (WebInspector.TextViewer.prototype._chunkForOffset):
        (WebInspector.TextViewer.prototype._chunkNumberForLine):
        (WebInspector.TextViewer.prototype._chunkStartLine):
        (WebInspector.TextViewer.prototype._restoreChunks):
        (WebInspector.TextViewer.prototype._repaint):
        (WebInspector.TextViewer.prototype._getSelection):
        (WebInspector.TextViewer.prototype._restoreSelection):
        (WebInspector.TextViewer.prototype._selectionToPosition):
        (WebInspector.TextViewer.prototype._createLineRow):
        (WebInspector.TextViewer.prototype._paintLine):
        (WebInspector.TextViewer.prototype._createSpan):
        (WebInspector.TextViewer.prototype._createLink):
        (WebInspector.TextViewer.prototype._rewriteHref):
        (WebInspector.TextViewer.prototype._markRange):
        (WebInspector.TextViewer.prototype._decimalDigits):
        (WebInspector.TextViewer.prototype.resize):
        * inspector/front-end/WebKit.qrc:
        * inspector/front-end/inspector.css:
        * inspector/front-end/inspector.html:
        * inspector/front-end/textEditor.css: Removed.
        * inspector/front-end/textViewer.css: Added.
        * inspector/front-end/utilities.js:
        (Node.prototype.traverseNextTextNode):
        (Node.prototype.rangeBoundaryForOffset):

2010-02-11  Csaba Osztrogonác  <ossy@webkit.org>

        Reviewed by Tor Arne Vestbø.

        [Qt] ENABLE_RUBY flag was restored by r54649, but default value wasn't added for Qt port.
        https://bugs.webkit.org/show_bug.cgi?id=34698

        * WebCore.pri: Add ENABLE_RUBY=1 as default setting.

2010-02-11  Steve Block  <steveblock@google.com>

        Reviewed by Jeremy Orlow.

        Updates Android V8 Makefile to generate Notifications and WebSockets headers required by V8DOMWrapper.cpp
        https://bugs.webkit.org/show_bug.cgi?id=34815

        No new tests, build fix only.

        * Android.derived.v8bindings.mk:

2010-02-11  Steve Block  <steveblock@google.com>

        Reviewed by Jeremy Orlow.

        Updates Android V8 Makefile to generate XPath header required by V8Proxy.cpp
        https://bugs.webkit.org/show_bug.cgi?id=34814

        No new tests, build fix only.

        * Android.derived.v8bindings.mk:

2010-02-11  Steve Block  <steveblock@google.com>

        Reviewed by Nate Chapin.

        Update Android V8 Makefile to generate Inspector headers required by V8 ScriptObject.cpp
        https://bugs.webkit.org/show_bug.cgi?id=34806

        No new tests, build fix only.

        * Android.derived.v8bindings.mk:

2010-02-11  Steve Block  <steveblock@google.com>

        Reviewed by David Levin.

        Guards SVG code in V8 bindings with ENABLE(SVG)
        https://bugs.webkit.org/show_bug.cgi?id=34812

        Also updates Android V8 Makefile to generate required SVG headers.

        No new tests, build fix only.

        * Android.derived.v8bindings.mk:
        * bindings/v8/custom/V8CSSValueCustom.cpp:
        (WebCore::toV8):
        * bindings/v8/custom/V8DocumentCustom.cpp:
        (WebCore::toV8):
        * bindings/v8/custom/V8ElementCustom.cpp:
        (WebCore::toV8):

2010-02-08  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Cameron Zwarich.

        Restore ENABLE_RUBY flag so vendors can ship with Ruby disabled if they choose.
        https://bugs.webkit.org/show_bug.cgi?id=34698

        * Configurations/FeatureDefines.xcconfig:
        * DerivedSources.make:
        * GNUmakefile.am:
        * html/HTMLTagNames.in: Make the ruby-related tag names conditional.
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::createObject): ifdef the code that would create ruby elements.
        * rendering/RenderObject.h: ditto above
        * rendering/RenderRuby.cpp: ifdef this whole file
        * rendering/RenderRuby.h: ditto
        * rendering/RenderRubyBase.cpp: ditto
        * rendering/RenderRubyBase.h: ditto
        * rendering/RenderRubyRun.cpp: ditto
        * rendering/RenderRubyRun.h: ditto
        * rendering/RenderRubyText.cpp: ditto
        * rendering/RenderRubyText.h: ditto

2010-02-11  Kent Tamura  <tkent@chromium.org>

        Reviewed by Darin Adler.

        Step attribute support for date&time types.
        https://bugs.webkit.org/show_bug.cgi?id=30847

        - Add implementation for ValidityState.stepMismatch, stepUp() and
          stepDown() for date, datetime, datetime-local, month, time, week types.
        - Fix string representation of DateComponents.

        Tests: fast/forms/ValidityState-stepMismatch.html
               fast/forms/input-stepup-stepdown.html

        * html/HTMLInputElement.cpp:
          - Change monthDefaultMaximum so that DateComponents::m_year doesn't overflow.
        (WebCore::HTMLInputElement::stepBase):
        (WebCore::HTMLInputElement::stepMismatch):
        (WebCore::HTMLInputElement::getStepParameters):
        (WebCore::HTMLInputElement::getAllowedValueStep):
        (WebCore::HTMLInputElement::applyStep):
          Renamed from applyStepForNumberOrRange(), and add support for other types.
        (WebCore::HTMLInputElement::stepUp): Rename applyStepForNumberOrRange().
        (WebCore::HTMLInputElement::stepDown): Rename applyStepForNumberOrRange().
        (WebCore::HTMLInputElement::setValueAsDate): Use setDateValue().
        (WebCore::HTMLInputElement::setDateValue):
          A helper function to make the best representation of DateComponents.
        (WebCore::HTMLInputElement::setValueAsNumber):  Use setDateValue().
        * html/HTMLInputElement.h:

2010-02-10  Oliver Hunt  <oliver@apple.com>

        Reviewed by Gavin Barraclough.

        postMessage does not send ImageData
        https://bugs.webkit.org/show_bug.cgi?id=34825

        Implement serialisation of ImageData, and for testing reasons
        expose the ImageData constructor (which should already have
        been exposed).

        * bindings/js/SerializedScriptValue.cpp:
        (WebCore::SerializedImageData::create):
        (WebCore::SerializedImageData::width):
        (WebCore::SerializedImageData::height):
        (WebCore::SerializedImageData::data):
        (WebCore::SerializedImageData::SerializedImageData):
        (WebCore::SerializedScriptValueData::SerializedScriptValueData):
        (WebCore::SharedSerializedData::asImageData):
        (WebCore::SerializingTreeWalker::convertIfTerminal):
        (WebCore::DeserializingTreeWalker::convertIfTerminal):
        (WebCore::TeardownTreeWalker::convertIfTerminal):
        * bindings/js/SerializedScriptValue.h:
        (WebCore::SerializedScriptValueData::):
        (WebCore::SerializedScriptValueData::asImageData):
        * html/canvas/CanvasPixelArray.h:
        (WebCore::CanvasPixelArray::data):
        * page/DOMWindow.idl:

2010-02-10  Adam Barth  <abarth@webkit.org>

        Reviewed by Darin Adler.

        Address last round of review comments on r53607
        https://bugs.webkit.org/show_bug.cgi?id=33940

        Mostly renaming and cleaning up.

        * css/CSSImportRule.cpp:
        (WebCore::CSSImportRule::insertedIntoParent):
        * css/CSSStyleSheet.h:
        (WebCore::CSSStyleSheet::create):
        (WebCore::CSSStyleSheet::createInline):
        * css/StyleBase.cpp:
        (WebCore::StyleBase::baseURL):
        * css/StyleSheet.cpp:
        (WebCore::StyleSheet::StyleSheet):
        * css/StyleSheet.h:
        (WebCore::StyleSheet::href):
        (WebCore::StyleSheet::setFinalURL):
        (WebCore::StyleSheet::finalURL):
        * dom/Document.cpp:
        (WebCore::Document::updateBaseURL):
        * dom/ProcessingInstruction.cpp:
        (WebCore::ProcessingInstruction::checkStyleSheet):
        * xml/XSLImportRule.cpp:
        (WebCore::XSLImportRule::loadSheet):
        * xml/XSLStyleSheet.h:
        (WebCore::XSLStyleSheet::create):
        (WebCore::XSLStyleSheet::createInline):
        * xml/XSLStyleSheetLibxslt.cpp:
        (WebCore::XSLStyleSheet::XSLStyleSheet):
        (WebCore::XSLStyleSheet::parseString):
        (WebCore::XSLStyleSheet::loadChildSheets):
        * xml/XSLStyleSheetQt.cpp:
        (WebCore::XSLStyleSheet::XSLStyleSheet):

2010-02-10  Noam Rosenthal  <noam.rosenthal@nokia.com>

        Reviewed by Ariya Hidayat.

        [Qt] GraphicsLayer: somtimes the item flickers at the end of an animation
        This is because we try to delete the animation when finished: that is
        unnecessary. WebCore manages the animation's lifecycle and makes sure
        to call the right function when the animation can be deleted.

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

        No new tests.

        * platform/graphics/qt/GraphicsLayerQt.cpp:
        (WebCore::GraphicsLayerQt::addAnimation): No need to delete here
        (WebCore::GraphicsLayerQt::removeAnimationsForProperty): deleteLater

2010-02-10  Kevin Ollivier  <kevino@theolliviers.com>

        [wx] Build fix for wxMac/Cocoa.

        * platform/wx/wxcode/mac/carbon/fontprops.cpp: Removed.
        * platform/wx/wxcode/mac/carbon/fontprops.mm: Copied from WebCore/platform/wx/wxcode/mac/carbon/fontprops.cpp.
        * wscript:

2010-02-10  Jon Honeycutt  <jhoneycutt@apple.com>

        REGRESSION(24929): PDF page doesn't load in background tab

        Reviewed by Dan Bernstein.

        * plugins/PluginView.cpp:
        (WebCore::PluginView::startOrAddToUnstartedList):
        Only delay loading of the plug-in if we'll kick off our own load of the
        plug-in data later, in start().

2010-02-10  Enrica Casucci  <enrica@apple.com>

        Reviewed by Simon Fraser.

        Crash in WebKit!WebCore::RenderTextControlSingleLine::createInnerTextStyle doing anything in Safari after sitting on a page with 3D site        
        <rdar://problem/7557201>
        https://bugs.webkit.org/show_bug.cgi?id=34823
        
        No tests added because the code is exercised by the existing tests.
        
        The root cause was the fact that we were not releasing a reference that was held by CA.
        In debug builds we had an assert in the destructor of WKCACFLayer.
        
        * platform/graphics/win/GraphicsLayerCACF.cpp:
        (WebCore::GraphicsLayerCACF::~GraphicsLayerCACF):

2010-02-10  Kwang Yul Seo  <skyul@company100.net>

        Reviewed by Eric Seidel.

        [BREWMP] Typedef DragImageRef
        https://bugs.webkit.org/show_bug.cgi?id=34791

        Use IImage* as it is the BREW's image type.

        * platform/DragImage.h:

2010-02-10  Beth Dakin  <bdakin@apple.com>

        Reviewed by Simon Fraser and Darin Adler.

        Fix for https://bugs.webkit.org/show_bug.cgi?id=34185 REGRESSION: 
        Mask not invalidating

        SVGMaskElement is the only class that keeps a HashMap of canvas 
        resources rather than just a pointer to a resource. This 
        patch makes SVGMaskElement invalidate all of its resources in the 
        HashMap instead of just one.

        * svg/SVGMaskElement.cpp:
        (WebCore::SVGMaskElement::svgAttributeChanged):
        (WebCore::SVGMaskElement::childrenChanged):
        (WebCore::SVGMaskElement::invalidateCanvasResources):
        * svg/SVGMaskElement.h:
        * svg/SVGStyledElement.cpp:
        (WebCore::SVGStyledElement::invalidateResourcesInAncestorChain):
        (WebCore::SVGStyledElement::invalidateCanvasResources):
        * svg/SVGStyledElement.h:

2010-02-10  Stephan Aßmus  <superstippi@gmx.de>

        Reviewed by David Levin.

        Fixes to rect conversion and image rendering on Haiku
        https://bugs.webkit.org/show_bug.cgi?id=34684

        Covered by existing tests.

        The changes to the rect conversions are indeed correct. In Haiku (to stay
        compatibly with BeOS), a BRect specifies the left/top and bottom/right pixel
        *indices*, even though the values are floating point. So a rectangle covering
        just one pixel would be specified as BRect(0, 0, 0, 0). In WebCore and other
        frame works, such rectangles would be expressed as 0, 0, 1, 1. In WebCore, the
        width and height of rectangles refer to the distance between pixels, while on
        Haiku, a one pixel rect has indeed a width and height of 0, as confusing as
        that may be.

        The part of the patch that affects
        WebCore/platform/graphics/haiku/ImageHaiku.cpp also implements the drawing
        methods more correctly. Image observers are notified, and pattern drawing takes
        the "phase" into account which makes scrolled backgrounds render correctly.
        Transformations are still not supported, since the Haiku drawing backend itself
        does not yet support them.

        Use OwnPtr when creating the BBitmap to avoid future leaks with early returns.

        Convert the bitmap data to non pre-multiplied until Haiku supports drawing
        pre-multiplied bitmaps.

        * platform/graphics/haiku/FloatRectHaiku.cpp: Fixed conversion
        * platform/graphics/haiku/ImageHaiku.cpp:
        (WebCore::BitmapImage::draw): Fixed placement, notify observers
        (WebCore::Image::drawPattern): Implemented using "phase" to fix scrolling, notify observers
        * platform/graphics/haiku/IntRectHaiku.cpp: Fixed conversion
        * platform/image-decoders/haiku/ImageDecoderHaiku.cpp: Fixed conversion

2010-02-10  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by David Levin.

        Clean up unused member var and initialization in Document
        https://bugs.webkit.org/show_bug.cgi?id=34820

        Remove unused m_secureForms member variable in Document.
        
        * dom/Document.cpp:
        (WebCore::Document::Document):
        * dom/Document.h:

2010-02-10  Kevin Watters  <kevinwatters@gmail.com>

        Reviewed by Kevin Ollivier.

        [wx] Add Windows complex text support and Mac support for containsCharacters.
        
        https://bugs.webkit.org/show_bug.cgi?id=34759
        
        * platform/graphics/SimpleFontData.h:
        * platform/graphics/wx/FontPlatformData.h:
        (WebCore::FontPlatformData::roundsGlyphAdvances):
        * platform/graphics/wx/FontPlatformDataWx.cpp:
        (WebCore::FontPlatformData::useGDI):
        (WebCore::FontPlatformData::hfont):
        * platform/graphics/wx/FontWx.cpp:
        (WebCore::Font::canReturnFallbackFontsForComplexText):
        (WebCore::Font::selectionRectForComplexText):
        (WebCore::Font::drawComplexText):
        (WebCore::Font::floatWidthForComplexText):
        (WebCore::Font::offsetForPositionForComplexText):
        * platform/graphics/wx/SimpleFontDataWx.cpp:
        (WebCore::SimpleFontData::platformInit):
        (WebCore::SimpleFontData::platformDestroy):
        (WebCore::SimpleFontData::containsCharacters):
        (WebCore::SimpleFontData::platformWidthForGlyph):
        (WebCore::SimpleFontData::scriptFontProperties):
        (WebCore::SimpleFontData::initGDIFont):
        (WebCore::SimpleFontData::platformCommonDestroy):
        (WebCore::SimpleFontData::widthForGDIGlyph):
        * platform/wx/wxcode/fontprops.h:
        * platform/wx/wxcode/gtk/fontprops.cpp:
        (wxFontContainsCharacters):
        * platform/wx/wxcode/mac/carbon/fontprops.cpp:
        (wxFontContainsCharacters):
        * platform/wx/wxcode/win/fontprops.cpp:
        (wxFontContainsCharacters):
        * platform/wx/wxcode/win/non-kerned-drawing.cpp:
        (WebCore::drawTextWithSpacing):
        * wscript:

2010-02-10  Kwang Yul Seo  <skyul@company100.net>
        Reviewed by Eric Seidel.

        [BREWMP] Add dummy Frame::dragImageForSelection
        https://bugs.webkit.org/show_bug.cgi?id=34792

        Add FrameBrew.cpp which contains a dummy implementation of
        Frame::dragImageForSelection.

        * page/brew/FrameBrew.cpp: Added.
        (WebCore::Frame::dragImageForSelection):

2010-02-10  Kevin Ollivier  <kevino@theolliviers.com>

        [wx] Build fix. Switch drawPattern to Image class like other platforms.

        * platform/graphics/BitmapImage.h:
        * platform/graphics/wx/ImageWx.cpp:
        (WebCore::Image::drawPattern):

2010-02-10  Chris Marrin  <cmarrin@apple.com>

        Reviewed by Darin Adler.

        Added CA_PRINT_TREE functionality to WKCACFLayer implementation
        https://bugs.webkit.org/show_bug.cgi?id=34779
        
        I've tried to duplicate the look of the output on Mac, but
        it's not quite the same. It shows all the useful information though.
        It is enabled by setting the environment variable CA_PRINT_TREE=1
        
        * platform/graphics/win/WKCACFLayer.cpp:Implementation of printTree
        (WebCore::WKCACFLayer::isTransformLayer):
            Moved function to cpp file because it needs to use the function form
            of kCACFTransformLayer because the DLL is delay loaded, and that function
            can only be called from the cpp file.
        (WebCore::WKCACFLayer::sublayerAtIndex):
        (WebCore::printIndent):
        (WebCore::printTransform):
        (WebCore::WKCACFLayer::printTree):Prints from this layer down
        (WebCore::WKCACFLayer::printLayer):Prints this layer and recursively calls sublayers
        * platform/graphics/win/WKCACFLayer.h:
        * platform/graphics/win/WKCACFLayerRenderer.cpp:
        (WebCore::WKCACFLayerRenderer::WKCACFLayerRenderer):
        (WebCore::WKCACFLayerRenderer::createRenderer):Adds a name to the root layers
        (WebCore::WKCACFLayerRenderer::render):Calls printTree when CA_PRINT_TREE is 1
        * platform/graphics/win/WKCACFLayerRenderer.h:
        
2010-02-10  Nate Chapin  <japhet@chromium.org>

        Reviewed by Adam Barth.

        Change V8DOMWrapper::lookupDOMWrapper() and configureTemplate()
        to not use V8ClassIndex.

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

        * bindings/scripts/CodeGeneratorV8.pm:
        * bindings/v8/V8Binding.cpp:
        * bindings/v8/V8Binding.h:
        * bindings/v8/V8DOMWindowShell.cpp:
        * bindings/v8/V8DOMWrapper.cpp:
        * bindings/v8/V8DOMWrapper.h:
        * bindings/v8/V8Proxy.cpp:
        * bindings/v8/WorkerContextExecutionProxy.cpp:
        * bindings/v8/custom/V8DOMWindowCustom.cpp:
        * bindings/v8/custom/V8LocationCustom.cpp:
        * bindings/v8/custom/V8MessageEventCustom.cpp:

2010-02-10  Nate Chapin  <japhet@chromium.org>

        Reviewed by Dimitri Glazkov.

        [V8] Handle the possibility that ScheduledAction::execute() may
        retrieve a null V8Proxy* even if not in a WorkerContext (e.g., if
        JS was disallowed).

        * bindings/v8/ScheduledAction.cpp:
        (WebCore::ScheduledAction::execute):

2010-02-10  Kenneth Russell  <kbr@google.com>

        Reviewed by Oliver Hunt.

        Remove automatic viewport resizing
        https://bugs.webkit.org/show_bug.cgi?id=34766

        Removed automatic viewport resizing per conclusions on the WebGL
        mailing list. Added test verifying new behavior and updated a
        couple of previous tests failing after this change.

        Test: fast/canvas/webgl/viewport-unchanged-upon-resize.html

        * platform/graphics/mac/GraphicsContext3DMac.cpp:
        (WebCore::GraphicsContext3D::reshape):

2010-02-10  Ariya Hidayat  <ariya.hidayat@gmail.com>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] Implement image interpolation quality.

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

        * platform/graphics/qt/GraphicsContextQt.cpp:
        (WebCore::GraphicsContextPlatformPrivate::GraphicsContextPlatformPrivate):
        (WebCore::GraphicsContext::setImageInterpolationQuality):
        (WebCore::GraphicsContext::imageInterpolationQuality):

2010-02-10  Eric Seidel  <eric@webkit.org>

        No review, Mac build fix.

        Crash in Flash at http://www.cctv.com/
        https://bugs.webkit.org/show_bug.cgi?id=34673

        * plugins/PluginViewNone.cpp:
        (WebCore::PluginView::getValueStatic):

2010-02-10  Gustavo Noronha Silva  <gns@gnome.org>

        Reviewed by Xan Lopez.

        [GTK] Hits assertion on history back, with page cache enabled, in specific conditions
        https://bugs.webkit.org/show_bug.cgi?id=34773

        When unsetting the adjustments from a ScrollView, also disconnect
        them from the Scrollbars.

        Test: fast/frames/frame-crash-with-page-cache.html

        * platform/gtk/ScrollViewGtk.cpp:
        (WebCore::ScrollView::setGtkAdjustments):
        * platform/gtk/ScrollbarGtk.cpp:
        (ScrollbarGtk::~ScrollbarGtk):
        (ScrollbarGtk::detachAdjustment):
        * platform/gtk/ScrollbarGtk.h:

2010-02-09  Alexey Proskuryakov  <ap@apple.com>

        Reviewed by Geoffrey Garen.

        https://bugs.webkit.org/show_bug.cgi?id=34490
        WebCore::ImageEventSender::dispatchPendingEvents() crashes in certain conditions

        Test: fast/images/destroyed-image-load-event.html

        * ForwardingHeaders/wtf/ValueCheck.h: Added.

        * loader/ImageLoader.cpp:
        (WTF::ValueCheck): Special case value check for ImageLoader - it's allocated inside elements,
        so check the owner instead.
        (WebCore::ImageEventSender::hasPendingEvents): Added a debugging aid for ImageLoader destructor.
        (WebCore::ImageLoader::~ImageLoader): Assert that we're not going to leave dangling pointers
        in ImageEventSender.
        (WebCore::ImageLoader::setImage): Cancel events that could be dispatched for the previous
        image. The only client using this method that I could find was DeleteButton, which doesn't
        care about load events for the new image, so I didn't add any code for firing those.
        (WebCore::ImageLoader::setLoadingImage): This method only existed to confuse readers -
        there wasn't any meaningful code shared (callers just undid most assignments made there).
        Merged the logic into callers.
        (WebCore::ImageLoader::updateFromElement): We're forgetting the old image, so forget its
        old events, too.
        (WebCore::ImageLoader::notifyFinished): This can be called from setImage(), in which case
        no one is going to dispatch the event "soon". So, don't queue it.
        (WebCore::ImageEventSender::dispatchPendingEvents): Call checkConsistency(). This didn't
        help catch this particuar bug, but seems like a useful check anyway.

        * loader/ImageLoader.h: Removed setLoadingImage().

2010-02-10  Jon Honeycutt  <jhoneycutt@apple.com>

        Mac build fix. Unreviewed.

        * WebCore.xcodeproj/project.pbxproj:
        Add PluginViewNone.cpp to the Mac project.

2010-02-10  Adam Roben  <aroben@apple.com>

        Optimize ImageBuffer::toDataURL's CG implementation

        There was some unused code that could have been removed in r31830 when
        this function was changed not to flip the CG image anymore.

        Fixes <http://webkit.org/b/34808> ImageBuffer::toDataURL allocates
        unnecessary memory under CoreGraphics

        Reviewed by Sam Weinig.

        * platform/graphics/cg/ImageBufferCG.cpp:
        (WebCore::ImageBuffer::toDataURL): Don't allocate an unused CGImageRef
        and buffer, and switch to the new overload of base64Encode that
        doesn't require us to copy all the image data into a Vector first.

        * platform/text/Base64.cpp:
        (WebCore::base64Encode):
        * platform/text/Base64.h:
        Added an overload that takes a raw data pointer and length, just like
        we have for base64Decode. The overload that takes a Vector as input
        just calls through to the new overload.

2010-02-10  Dan Bernstein  <mitz@apple.com>

        Reviewed by Dave Hyatt.

        Complete the fix for <rdar://problem/7577604> Drag and Drop: background elements are bleeding through
        https://bugs.webkit.org/show_bug.cgi?id=34546

        * manual-tests/drag-image-table-part-decorations.html:
        * rendering/RenderTableCell.cpp:
        (WebCore::RenderTableCell::paint): Don’t paint collapsed borders if this object shouldn’t
        paint within the current painting root.

2010-02-08  Jon Honeycutt  <jhoneycutt@apple.com>

        <rdar://problem/7436875> Crash in Flash when visiting
        http://www.cctv.com/default.shtml (WER ID 819298200) [watson 2502260]

        Reviewed by Darin Adler.

        Test: platform/win/plugins/plugin-delayed-destroy.html

        * bridge/NP_jsobject.cpp:
        (_NPN_Evaluate):
        If Flash calls this to evaluate a script that destroys the PluginView,
        we crash when returning to Flash code. Before evaluating the script,
        call PluginView::keepAlive() to hold a ref to this instance (and release
        it asynchronously).

        * plugins/PluginView.cpp:
        (WebCore::instanceMap):
        Return a map from the NPP to the PluginView.
        (WebCore::PluginView::~PluginView):
        Assert that the keep alive timer is not running; remove ourselves from
        the instance map.
        (WebCore::PluginView::performRequest):
        The parent Frame is now a RefPtr; use .get().
        (WebCore::PluginView::status):
        Ditto.
        (WebCore::PluginView::didReceiveResponse):
        Ditto.
        (WebCore::PluginView::PluginView):
        Add the view to the instance map.
        (WebCore::PluginView::lifeSupportTimerFired):
        Deref the PluginView.
        (WebCore::PluginView::keepAlive):
        Ref the PluginView, then start a time to release the reference
        asynchronously.
        (WebCore::PluginView::keepAlive):
        Find the PluginView in the map, and call its keepAlive() function.

        * plugins/PluginView.h:
        Made m_parentFrame a RefPtr, so that it will remain valid when the
        keep alive timer fires.
        (WebCore::PluginView::parentFrame):
        Use .get().

        * plugins/gtk/PluginViewGtk.cpp:
        (WebCore::PluginView::updatePluginWidget):
        Use .get().
        (WebCore::PluginView::handleKeyboardEvent):
        Use .get().
        (WebCore::PluginView::handleMouseEvent):
        Use .get().

        * plugins/PluginViewNone.cpp:
        (WebCore::PluginView::keepAlive):
        Stubbed.

2010-02-10  Jesus Sanchez-Palencia  <jesus.palencia@openbossa.org>

        Reviewed by Kenneth Rohde Christiansen.

        Support frameset flattening
        https://bugs.webkit.org/show_bug.cgi?id=32717

        Add support for enabling/disabling FrameSet Flattening on the Mac port.

        * WebCore.base.exp:

2010-02-10  Jeremy Orlow  <jorlow@chromium.org>

        Revert 54599 because it breaks a lot of tests on Windows Chrome

        * inspector/front-end/DOMAgent.js:
        (WebInspector.DOMNode.prototype._insertChild):
        * inspector/front-end/ElementsPanel.js:
        (WebInspector.ElementsPanel.prototype.updateModifiedNodes):
        * inspector/front-end/ElementsTreeOutline.js:
        (WebInspector.ElementsTreeOutline.prototype.revealAndSelectNode):
        (WebInspector.ElementsTreeElement):
        (WebInspector.ElementsTreeElement.prototype._updateChildren.updateChildrenOfNode):
        (WebInspector.ElementsTreeElement.prototype._updateChildren):
        ():
        * inspector/front-end/inspector.css:

2010-02-10  Adam Roben  <aroben@apple.com>

        Fix bad paths in WebCore.vcproj

        These were harmless in VS2005, but cause project conversion errors in
        VS2010 RC.

        Fixes <http://webkit.org/b/34801>.

        Reviewed by Dan Bernstein.

        * WebCore.vcproj/WebCore.vcproj: Removed leading "." from paths to
        JSHTMLFrameSetElement.{cpp,h}.

2010-02-10  Julien Chaffraix  <jchaffraix@webkit.org>

        Not reviewed (build fix).

        * platform/graphics/win/FontCacheWin.cpp:
        (WebCore::FontCache::getLastResortFallbackFont): Return a
        SimpleFontData here.

2010-02-10 Julien Chaffraix  <jchaffraix@pleyo.com>

        Reviewed by Eric Seidel.

        Bug 23287 -  Avoid using FontPlatformData outside the FontCache

        No functional change, only refactored the code using FontPlatformData to use SimpleFontData.

        This change leaves the class FontCached as it needs some thoughts and more refactoring.

        * css/CSSFontFaceSource.cpp:
        (WebCore::CSSFontFaceSource::getFontData): Call getCachedFontData with the 2 parameters directly.
        * css/CSSFontSelector.cpp:
        (WebCore::fontDataForGenericFamily): Ditto.
        * platform/graphics/FontCache.cpp:
        (WebCore::FontCache::getCachedFontData): This method is meant to replace getCachedFontPlatformData
        that was moved in the private section of the class. It calls getCachedFontPlatformData and cache
        the returned FontPlatformData if it is not null.
        (WebCore::FontCache::getFontData): Updated to use the new getCachedFontData.
        * platform/graphics/FontCache.h: Updated several methods to return a SimpleFontData in lieu of a
        FontPlatformData. Moved some method in the private sections.

        * platform/graphics/chromium/FontCacheChromiumWin.cpp:
        (WebCore::FontCache::getSimilarFontPlatformData):
        (WebCore::FontCache::getLastResortFallbackFont):
        * platform/graphics/chromium/FontCacheLinux.cpp:
        (WebCore::FontCache::getSimilarFontPlatformData):
        (WebCore::FontCache::getLastResortFallbackFont):
        * platform/graphics/gtk/FontCacheGtk.cpp:
        (WebCore::FontCache::getSimilarFontPlatformData):
        (WebCore::FontCache::getLastResortFallbackFont):
        * platform/graphics/haiku/FontCacheHaiku.cpp:
        (WebCore::FontCache::getSimilarFontPlatformData):
        (WebCore::FontCache::getLastResortFallbackFont):
        * platform/graphics/qt/FontCacheQt.cpp:
        (WebCore::FontCache::getLastResortFallbackFont):
        * platform/graphics/win/FontCacheWin.cpp:
        (WebCore::FontCache::getSimilarFontPlatformData):
        (WebCore::FontCache::getLastResortFallbackFont):
        * platform/graphics/wince/FontCacheWince.cpp:
        * platform/graphics/wx/FontCacheWx.cpp:
        (WebCore::FontCache::getSimilarFontPlatformData):
        (WebCore::FontCache::getLastResortFallbackFont):
        Updated all the previous platform methods to return a SimpleFontData.

        * platform/graphics/mac/FontCacheMac.mm:
        (WebCore::FontCache::getSimilarFontPlatformData): Updated to return a SimpleFontData.
        (WebCore::FontCache::getLastResortFallbackFont): Ditto. Also refactored the code
        and moved a DEFINE_STATIC_LOCAL where it is needed.

2010-02-10  Alexander Pavlov  <apavlov@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: Elements Panel: Limit the number of initially loaded element children
        https://bugs.webkit.org/show_bug.cgi?id=34421

        Test: inspector/elements-panel-limited-children.html

        * English.lproj/localizedStrings.js:
        * inspector/front-end/DOMAgent.js:
        (WebInspector.DOMNode.prototype._insertChild):
        * inspector/front-end/ElementsPanel.js:
        (WebInspector.ElementsPanel.prototype.updateModifiedNodes):
        * inspector/front-end/ElementsTreeOutline.js:
        (WebInspector.ElementsTreeOutline.prototype.createTreeElementFor):
        (WebInspector.ElementsTreeOutline.prototype.revealAndSelectNode):
        (WebInspector.ElementsTreeElement):
        (WebInspector.ElementsTreeElement.prototype.get expandedChildrenLimit):
        (WebInspector.ElementsTreeElement.prototype.set expandedChildrenLimit):
        (WebInspector.ElementsTreeElement.prototype.get expandedChildCount):
        (WebInspector.ElementsTreeElement.prototype.showChild):
        (WebInspector.ElementsTreeElement.prototype.insertChildElement):
        (WebInspector.ElementsTreeElement.prototype.moveChild):
        (WebInspector.ElementsTreeElement.prototype._updateChildren.updateChildrenOfNode):
        (WebInspector.ElementsTreeElement.prototype._updateChildren):
        (WebInspector.ElementsTreeElement.prototype.adjustCollapsedRange):
        (WebInspector.ElementsTreeElement.prototype.handleLoadAllChildren):
        ():
        * inspector/front-end/inspector.css:

2010-02-10  Mikhail Naganov  <mnaganov@chromium.org>

        Reviewed by Pavel Feldman.

        Remove several #if USE(JSC) branches. Introduce ScriptDebugServer class for
        making JavaScriptDebugServer engine-agnostic.

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

        * GNUmakefile.am:
        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSBindingsAllInOne.cpp:
        * bindings/js/ScriptDebugServer.cpp: Added.
        (WebCore::ScriptDebugServer::recompileAllJSFunctions):
        (WebCore::ScriptDebugServer::recompileAllJSFunctionsSoon):
        * bindings/js/ScriptDebugServer.h: Added.
        * bindings/v8/ScriptDebugServer.cpp: Added.
        (WebCore::ScriptDebugServer::recompileAllJSFunctions):
        (WebCore::ScriptDebugServer::recompileAllJSFunctionsSoon):
        * bindings/v8/ScriptDebugServer.h: Added.
        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::startUserInitiatedProfiling):
        (WebCore::InspectorController::enableProfiler):
        (WebCore::InspectorController::disableProfiler):
        * page/Console.cpp:
        (WebCore::Console::profile):
        (WebCore::Console::profileEnd):

2009-10-06  Yongjun Zhang  <yongjun.zhang@nokia.com>

        Reviewed by Simon Hausmann.

        Make JObjectWrapper::ref() and deref() public accessible to derefIfNull().

        Will be reverted when the following winscw compiler bug is fixed.
        https://xdabug001.ext.nokia.com/bugzilla/show_bug.cgi?id=9812

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

        * bridge/jni/jsc/JavaInstanceJSC.h:
        * bridge/jni/v8/JavaInstanceV8.h:

2010-02-10  Yaar Schnitman  <yaar@chromium.org>

        Reviewed by Adam Barth.

        Simplified RuntimeEnabledFeatures and corresponding v8 generated code
        https://bugs.webkit.org/show_bug.cgi?id=34667

        * WebCore.gypi:
        * bindings/generic/RuntimeEnabledFeatures.cpp: Added.
        (WebCore::RuntimeEnabledFeatures::audioEnabled):
        (WebCore::RuntimeEnabledFeatures::htmlMediaElementEnabled):
        (WebCore::RuntimeEnabledFeatures::htmlAudioElementEnabled):
        (WebCore::RuntimeEnabledFeatures::htmlVideoElementEnabled):
        (WebCore::RuntimeEnabledFeatures::mediaErrorEnabled):
        (WebCore::RuntimeEnabledFeatures::sharedWorkerEnabled):
        (WebCore::RuntimeEnabledFeatures::webSocketEnabled):
        (WebCore::RuntimeEnabledFeatures::openDatabaseEnabled):
        * bindings/generic/RuntimeEnabledFeatures.h: Added.
        (WebCore::RuntimeEnabledFeatures::setLocalStorageEnabled):
        (WebCore::RuntimeEnabledFeatures::localStorageEnabled):
        (WebCore::RuntimeEnabledFeatures::setSessionStorageEnabled):
        (WebCore::RuntimeEnabledFeatures::sessionStorageEnabled):
        (WebCore::RuntimeEnabledFeatures::setWebkitNotificationsEnabled):
        (WebCore::RuntimeEnabledFeatures::webkitNotificationsEnabled):
        (WebCore::RuntimeEnabledFeatures::setApplicationCacheEnabled):
        (WebCore::RuntimeEnabledFeatures::applicationCacheEnabled):
        (WebCore::RuntimeEnabledFeatures::setGeolocationEnabled):
        (WebCore::RuntimeEnabledFeatures::geolocationEnabled):
        (WebCore::RuntimeEnabledFeatures::setIndexedDBEnabled):
        (WebCore::RuntimeEnabledFeatures::indexedDBEnabled):
        (WebCore::RuntimeEnabledFeatures::RuntimeEnabledFeatures):
        * bindings/scripts/CodeGenerator.pm:
        * bindings/scripts/CodeGeneratorV8.pm:
        * bindings/v8/RuntimeEnabledFeatures.cpp: Removed.
        * bindings/v8/RuntimeEnabledFeatures.h: Removed.
        * bindings/v8/custom/V8DOMWindowCustom.cpp:
        * bindings/v8/custom/V8NavigatorCustom.cpp:
        * bindings/v8/custom/V8WorkerContextCustom.cpp:

2010-02-09  Alexander Pavlov  <apavlov@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: Add two basic categories for the Audits panel
        https://bugs.webkit.org/show_bug.cgi?id=32930

        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * inspector/front-end/AuditCategories.js: Added.
        (WebInspector.AuditCategories.PagePerformance):
        (WebInspector.AuditCategories.PagePerformance.prototype.initialize):
        (WebInspector.AuditCategories.NetworkUtilization):
        (WebInspector.AuditCategories.NetworkUtilization.prototype.initialize):
        * inspector/front-end/AuditLauncherView.js:
        (WebInspector.AuditLauncherView.prototype.updateResourceTrackingState):
        (WebInspector.AuditLauncherView.prototype._createLauncherUI):
        (WebInspector.AuditLauncherView.prototype.show):
        * inspector/front-end/AuditRules.js: Added.
        (WebInspector.AuditRules.arrayAsUL):
        (WebInspector.AuditRules.getDomainToResourcesMap):
        (WebInspector.AuditRules.evaluateInTargetWindow):
        (WebInspector.AuditRules.GzipRule):
        (WebInspector.AuditRules.GzipRule.prototype.doRun):
        (WebInspector.AuditRules.GzipRule.prototype._isCompressed):
        (WebInspector.AuditRules.GzipRule.prototype._shouldCompress):
        (WebInspector.AuditRules.CombineExternalResourcesRule):
        (WebInspector.AuditRules.CombineExternalResourcesRule.prototype.doRun):
        (WebInspector.AuditRules.CombineJsResourcesRule):
        (WebInspector.AuditRules.CombineCssResourcesRule):
        (WebInspector.AuditRules.MinimizeDnsLookupsRule):
        (WebInspector.AuditRules.MinimizeDnsLookupsRule.prototype.doRun):
        (WebInspector.AuditRules.ParallelizeDownloadRule):
        (WebInspector.AuditRules.ParallelizeDownloadRule.prototype.doRun):
        (WebInspector.AuditRules.UnusedCssRule):
        (WebInspector.AuditRules.UnusedCssRule.prototype._getUnusedStylesheetRatioMessage):
        (WebInspector.AuditRules.UnusedCssRule.prototype._getUnusedTotalRatioMessage):
        (WebInspector.AuditRules.UnusedCssRule.prototype.doRun.evalCallback):
        (WebInspector.AuditRules.UnusedCssRule.prototype.doRun.routine):
        (WebInspector.AuditRules.UnusedCssRule.prototype.doRun):
        (WebInspector.AuditRules.CacheControlRule):
        (WebInspector.AuditRules.CacheControlRule.prototype.InfoCheck.1.FailCheck.0.WarningCheck.1.SevereCheck.2.doRun):
        (WebInspector.AuditRules.CacheControlRule.prototype.handleNonCacheableResources):
        (WebInspector.AuditRules.CacheControlRule.prototype._cacheableAndNonCacheableResources):
        (WebInspector.AuditRules.CacheControlRule.prototype.execCheck):
        (WebInspector.AuditRules.CacheControlRule.prototype.freshnessLifetimeGreaterThan):
        (WebInspector.AuditRules.CacheControlRule.prototype.responseHeader):
        (WebInspector.AuditRules.CacheControlRule.prototype.hasResponseHeader):
        (WebInspector.AuditRules.CacheControlRule.prototype.isCompressible):
        (WebInspector.AuditRules.CacheControlRule.prototype.isPubliclyCacheable):
        (WebInspector.AuditRules.CacheControlRule.prototype.responseHeaderMatch):
        (WebInspector.AuditRules.CacheControlRule.prototype.hasExplicitExpiration):
        (WebInspector.AuditRules.CacheControlRule.prototype._isExplicitlyNonCacheable):
        (WebInspector.AuditRules.CacheControlRule.prototype.isCacheableResource):
        (WebInspector.AuditRules.BrowserCacheControlRule):
        (WebInspector.AuditRules.BrowserCacheControlRule.prototype.handleNonCacheableResources):
        (WebInspector.AuditRules.BrowserCacheControlRule.prototype.runChecks):
        (WebInspector.AuditRules.BrowserCacheControlRule.prototype._missingExpirationCheck):
        (WebInspector.AuditRules.BrowserCacheControlRule.prototype._varyCheck):
        (WebInspector.AuditRules.BrowserCacheControlRule.prototype._oneMonthExpirationCheck):
        (WebInspector.AuditRules.BrowserCacheControlRule.prototype._oneYearExpirationCheck):
        (WebInspector.AuditRules.ProxyCacheControlRule):
        (WebInspector.AuditRules.ProxyCacheControlRule.prototype.runChecks):
        (WebInspector.AuditRules.ProxyCacheControlRule.prototype._questionMarkCheck):
        (WebInspector.AuditRules.ProxyCacheControlRule.prototype._publicCachingCheck):
        (WebInspector.AuditRules.ProxyCacheControlRule.prototype._setCookieCacheableCheck):
        (WebInspector.AuditRules.ImageDimensionsRule):
        (WebInspector.AuditRules.ImageDimensionsRule.prototype.doRun):
        (WebInspector.AuditRules.ImageDimensionsRule.prototype.doRun.routine.hasDimension):
        (WebInspector.AuditRules.ImageDimensionsRule.prototype.doRun.routine.hasWidth):
        (WebInspector.AuditRules.ImageDimensionsRule.prototype.doRun.routine.hasHeight):
        (WebInspector.AuditRules.ImageDimensionsRule.prototype.doRun.routine):
        (WebInspector.AuditRules.CssInHeadRule):
        (WebInspector.AuditRules.CssInHeadRule.prototype.doRun):
        (WebInspector.AuditRules.CssInHeadRule.prototype.doRun.routine.allViews):
        (WebInspector.AuditRules.CssInHeadRule.prototype.doRun.routine):
        (WebInspector.AuditRules.StylesScriptsOrderRule):
        (WebInspector.AuditRules.StylesScriptsOrderRule.prototype.doRun):
        (WebInspector.AuditRules.StylesScriptsOrderRule.prototype.doRun.routine):
        (WebInspector.AuditRules.CookieRuleBase):
        (WebInspector.AuditRules.CookieRuleBase.prototype.doRun.resultCallback):
        (WebInspector.AuditRules.CookieRuleBase.prototype.doRun):
        (WebInspector.AuditRules.CookieRuleBase.prototype.mapResourceCookies):
        (WebInspector.AuditRules.CookieRuleBase.prototype._callbackForResourceCookiePairs):
        (WebInspector.AuditRules.CookieSizeRule):
        (WebInspector.AuditRules.CookieSizeRule.prototype._average):
        (WebInspector.AuditRules.CookieSizeRule.prototype._max):
        (WebInspector.AuditRules.CookieSizeRule.prototype.processCookies):
        (WebInspector.AuditRules.CookieSizeRule.prototype.processCookies.avgSizeSorter):
        (WebInspector.AuditRules.StaticCookielessRule):
        (WebInspector.AuditRules.StaticCookielessRule.prototype.processCookies):
        (WebInspector.AuditRules.StaticCookielessRule.prototype._collectorCallback):
        * inspector/front-end/AuditsPanel.js:
        (WebInspector.AuditsPanel.prototype._constructCategories):
        (WebInspector.AuditsPanel.prototype._reloadResources):
        (WebInspector.AuditsPanel.prototype.show):
        (WebInspector.AuditsPanel.prototype._updateLauncherViewControls):
        (WebInspector.AuditCategory):
        (WebInspector.AuditCategory.prototype.get id):
        (WebInspector.AuditCategory.prototype.get ruleCount):
        (WebInspector.AuditCategory.prototype.runRules):
        (WebInspector.AuditCategory.prototype._ensureInitialized):
        (WebInspector.AuditCategoryResult):
        * inspector/front-end/WebKit.qrc:
        * inspector/front-end/audits.css:
        * inspector/front-end/inspector.html:
        * inspector/front-end/inspector.js:
        (WebInspector.loaded):
        (WebInspector.addPanelToolbarIcon):
        (WebInspector.documentKeyDown):

2010-02-10  Adam Barth  <abarth@webkit.org>

        Reviewed by Darin Adler.

        Freeze sandbox attributes on creation
        https://bugs.webkit.org/show_bug.cgi?id=34184

        This is how the spec works now.

        Test: fast/frames/sandboxed-iframe-forms-dynamic.html

        * bindings/ScriptControllerBase.cpp:
        (WebCore::ScriptController::canExecuteScripts):
        * bindings/generic/BindingDOMWindow.h:
        (WebCore::::createWindow):
        * bindings/js/JSDOMWindowCustom.cpp:
        (WebCore::createWindow):
        * dom/Document.cpp:
        * dom/Document.h:
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::submitForm):
        (WebCore::FrameLoader::requestObject):
        (WebCore::FrameLoader::shouldAllowNavigation):
        (WebCore::FrameLoader::updateSandboxFlags):
        * page/SecurityOrigin.cpp:
        * page/SecurityOrigin.h:

2010-02-09  Ariya Hidayat  <ariya.hidayat@gmail.com>

        Rubber-stamped by Kenneth Rohde Christiansen.

        [Qt] Remove old, outdated unused code block.

        * platform/graphics/qt/GraphicsContextQt.cpp:

2010-02-09  Chris Guillory  <ctguil@google.com>

        Reviewed by Darin Fisher.

        [Chromium] Notify ChromeClientChromium of state change notifications.
        
        https://bugs.webkit.org/show_bug.cgi?id=34464

        * accessibility/chromium/AXObjectCacheChromium.cpp:
        (WebCore::toChromeClientChromium):
        (WebCore::AXObjectCache::postPlatformNotification):
        * page/chromium/ChromeClientChromium.h:

2010-02-09  Kwang Yul Seo  <skyul@company100.net>

        Reviewed by Adam Barth.

        [BREWMP] Port PlatformMouseEvent
        https://bugs.webkit.org/show_bug.cgi?id=34600

        Retrieve the event type, position, key modifiers, time stamp
        and click count from AEEEvent.

        * platform/PlatformMouseEvent.h:
        * platform/brew/PlatformMouseEventBrew.cpp: Added.
        (WebCore::PlatformMouseEvent::PlatformMouseEvent):

2010-02-09  Avi Drissman  <avi@chromium.org>

        Reviewed by Timothy Hatcher.

        [Chromium] RenderTheme does not draw focus rings on SL for checkboxes, radio buttons
        https://bugs.webkit.org/show_bug.cgi?id=34544

        Covered by layout tests when run on SL.

        * platform/chromium/ThemeChromiumMac.mm:
        (-[TCMVisibleView _focusRingVisibleRect]):
        (-[TCMVisibleView _focusRingClipAncestor]):
        (FocusIndicationFix::currentOSHasSetFocusRingStyleInBitmapBug):
        (FocusIndicationFix::swizzleFocusView):
        (FocusIndicationFix::ScopedFixer::ScopedFixer):
        (FocusIndicationFix::ScopedFixer::~ScopedFixer):
        (+[NSView TCMInterposing_focusView]):
        (WebCore::paintCheckbox):
        (WebCore::paintRadio):
        (WebCore::paintButton):

2010-02-09  Anton Muhin  <antonm@chromium.org>

        Reviewed by Nate Chapin.

        [v8] Check if returned wrapper is empty before operating on it.
        https://bugs.webkit.org/show_bug.cgi?id=34746

        * bindings/v8/custom/V8DocumentCustom.cpp:
        (WebCore::toV8):
        * bindings/v8/custom/V8HTMLDocumentCustom.cpp:
        (WebCore::toV8):
        * bindings/v8/custom/V8SVGDocumentCustom.cpp:
        (WebCore::toV8):

2010-02-09  Mikhail Naganov  <mnaganov@chromium.org>

        Reviewed by Pavel Feldman.

        Continuing debugger and profiler unforking: narrow scope of JSC-specific ifdefs.
        Also, enable JAVASCRIPT_DEBUGGER explicitly in features, it appears to be required
        for really enabling it in V8 bindings generation.

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

        * inspector/InjectedScriptHost.idl:
        * inspector/InspectorBackend.cpp:
        (WebCore::InspectorBackend::currentCallFrame):
        (WebCore::InspectorBackend::getProfile):
        * inspector/InspectorBackend.h:
        * inspector/InspectorBackend.idl:
        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::InspectorController):
        (WebCore::InspectorController::addProfile):
        (WebCore::InspectorController::getProfile):
        (WebCore::InspectorController::startUserInitiatedProfiling):
        (WebCore::InspectorController::stopUserInitiatedProfiling):
        (WebCore::InspectorController::enableProfiler):
        (WebCore::InspectorController::disableProfiler):
        * inspector/InspectorController.h:
        * inspector/InspectorFrontend.cpp:
        (WebCore::InspectorFrontend::pausedScript):
        (WebCore::InspectorFrontend::resumedScript):
        (WebCore::InspectorFrontend::profilerWasEnabled):
        (WebCore::InspectorFrontend::profilerWasDisabled):
        (WebCore::InspectorFrontend::didGetProfile):
        * inspector/InspectorFrontend.h:
        * page/Console.idl:

2010-02-09  Gavin Barraclough  <barraclough@apple.com>

        Rubber Stamped by Geoff Garen.

        Rename StringBuilder::release && JSStringBuilder::releaseJSString
        to 'build()'.

        * bindings/js/ScriptString.h:
        (WebCore::ScriptString::operator+=):

2010-02-09  Dan Bernstein  <mitz@apple.com>

        Reviewed by Anders Carlsson.

        <rdar://problem/7400160> Netscape plug-ins are not instantiated on property access if there are pending stylesheets
        https://bugs.webkit.org/show_bug.cgi?id=34776

        Tests: plugins/instance-available-before-stylesheets-loaded-object.html
               plugins/instance-available-before-stylesheets-loaded.html

        * html/HTMLEmbedElement.cpp:
        (WebCore::HTMLEmbedElement::renderWidgetForJSBindings): Call
        updateLayoutIgnorePendingStylesheets() before checking for a renderer. 
        * html/HTMLObjectElement.cpp:
        (WebCore::HTMLObjectElement::renderWidgetForJSBindings): Ditto.

2010-02-09  Alejandro G. Castro  <alex@igalia.com>

        Reviewed by Darin Adler.

        Problems navigating by caret in links whose text wraps onto
        subsequent lines.
        https://bugs.webkit.org/show_bug.cgi?id=25676

        We should not search ahead if we are not in the last element.

        * dom/Position.cpp:

2010-02-09  Dirk Schulze  <krit@webkit.org>

        Reviewed by Nikolas Zimmermann.

        More optimization for AffineTransform with SVG
        https://bugs.webkit.org/show_bug.cgi?id=34774

        Some optimizations to safe unnecessary summations and multiplications.
        Optimize AffineTransform to handle an identity or translation matrix
        more efficient.
        Added translationRight to avoid multiplications of matrices as much as
        possible.

        No tests added, no change of functionality.   

        * platform/graphics/transforms/AffineTransform.cpp:
        (WebCore::AffineTransform::inverse):
        (WebCore::AffineTransform::translate):
        (WebCore::AffineTransform::translateRight):
        * platform/graphics/transforms/AffineTransform.h:
        * rendering/RenderForeignObject.cpp:
        (WebCore::RenderForeignObject::translationForAttributes):
        (WebCore::RenderForeignObject::localToParentTransform):
        * rendering/RenderForeignObject.h:
        * rendering/RenderSVGRoot.cpp:
        (WebCore::RenderSVGRoot::localToBorderBoxTransform):
        (WebCore::RenderSVGRoot::localToRepaintContainerTransform):
        (WebCore::RenderSVGRoot::localToParentTransform):
        * rendering/RenderSVGViewportContainer.cpp:
        (WebCore::RenderSVGViewportContainer::localToParentTransform):
        * rendering/SVGRootInlineBox.cpp:
        (WebCore::applyTextLengthCorrectionToTextChunk):

2010-02-09  Dirk Schulze  <krit@webkit.org>

        Reviewed by Nikolas Zimmermann.

        SVG patterns with some scale patternTransform are not displayed correctly for small elements
        https://bugs.webkit.org/show_bug.cgi?id=25484

        SVG Pattern size was clipped to the size of the target, if the pattern is bigger than the target. This
        causes problems, if the patternTransform scales the pattern. This patch deletes the clipping.

        Tests: svg/custom/pattern-excessive-malloc.svg
               svg/custom/pattern-size-bigger-than-target-size.svg
               svg/custom/pattern-skew-transformed.svg

        * svg/SVGPatternElement.cpp:
        (WebCore::SVGPatternElement::buildPattern):

2010-02-09  Darin Adler  <darin@apple.com>

        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::styleDidChange): Fixed typo in comment.

2010-02-09  MORITA Hajime  <morrita@gmail.com>

        Reviewed by Nikolas Zimmermann.

        SVG selection text foreground colour does not respect user settings
        https://bugs.webkit.org/show_bug.cgi?id=15997

        Add two subphases SVGTextPaintSubphaseGlyphFillSelection and
        SVGTextPaintSubphaseGlyphStrokeSelection for painting selected
        text on SVG. Selected texts are painted with style from
        getCachedPseudoStyle() instead of style().
        
        Tests: svg/text/selection-styles.xhtml

        * rendering/SVGCharacterLayoutInfo.h:
        (WebCore::SVGTextChunkWalker::SVGTextChunkWalker):
        (WebCore::SVGTextChunkWalker::setupFillSelection):
        (WebCore::SVGTextChunkWalker::setupStrokeSelection):
        * rendering/SVGRootInlineBox.cpp:
        (WebCore::SVGRootInlineBoxPaintWalker::mayHaveSelection):
        (WebCore::SVGRootInlineBoxPaintWalker::chunkSetupFillSelectionCallback):
        (WebCore::SVGRootInlineBoxPaintWalker::chunkSetupStrokeSelectionCallback):
        (WebCore::SVGRootInlineBoxPaintWalker::activePaintServer):
        (WebCore::SVGRootInlineBox::paint):
        (WebCore::SVGRootInlineBox::walkTextChunks):
        * rendering/SVGInlineTextBox.h:
        (WebCore::):        
        Add callback hooks and its implementation for handle new
        subphases.
        
        * rendering/SVGInlineTextBox.cpp:
        (WebCore::SVGInlineTextBox::chunkSelectionStartEnd):
        (WebCore::SVGInlineTextBox::paintCharacters):
        Split box text into selected part and non-selected part, and use
        separate subphases to paint them.
        
        * svg/SVGFont.cpp:
        (WebCore::SVGTextRunWalker::walk):
        Relax ASSERT() condition to accept a part of text.
        
        * svg/graphics/SVGPaintServer.cpp:
        (WebCore::applyStrokeStyleToContext):
        (WebCore::SVGPaintServer::setup):
        * svg/graphics/SVGPaintServer.h:
        * svg/graphics/SVGPaintServerGradient.cpp:
        (WebCore::SVGPaintServerGradient::setup):
        * svg/graphics/SVGPaintServerGradient.h:
        * svg/graphics/SVGPaintServerPattern.cpp:
        (WebCore::SVGPaintServerPattern::setup):
        * svg/graphics/SVGPaintServerPattern.h:
        * svg/graphics/SVGPaintServerSolid.cpp:
        (WebCore::SVGPaintServerSolid::setup):
        * svg/graphics/SVGPaintServerSolid.h:
        Change setup() signature to accept RenderStyle instead of always
        using RenderObject::style().

2010-02-09  Nikolas Zimmermann  <nzimmermann@rim.com>

        Reviewed by Dirk Schulze.

        No scroll bars are displayed for standalone SVG image
        https://bugs.webkit.org/show_bug.cgi?id=11225

        Height and width defined for svg element are not honored
        https://bugs.webkit.org/show_bug.cgi?id=24033

        SVG file does not pan and has no scroll bars
        https://bugs.webkit.org/show_bug.cgi?id=24448

        Adapt to SVG 1.1 errata to change the overflow handling:
        Replace "svg { overflow: hidden }"  by "svg:not(:root) { overflow: hidden }" to allow standalone SVG documents to contain scrolllbars.
        Agreed by SVG WG to make this the default behaviour, already implemented by Opera & FireFox (partial support).

        Add new tests in svg/overflow covering all special SVG css overflow handling rules on inner/outer svg elements.

        Tests: svg/overflow/overflow-on-inner-svg-element-defaults.svg
               svg/overflow/overflow-on-inner-svg-element.svg
               svg/overflow/overflow-on-outermost-svg-element-defaults.svg
               svg/overflow/overflow-on-outermost-svg-element-ignore-attribute-1.svg
               svg/overflow/overflow-on-outermost-svg-element-ignore-attribute-2.svg
               svg/overflow/overflow-on-outermost-svg-element-ignore-attribute-3.svg
               svg/overflow/overflow-on-outermost-svg-element-in-xhtml-auto.xhtml
               svg/overflow/overflow-on-outermost-svg-element-in-xhtml-defaults.xhtml
               svg/overflow/overflow-on-outermost-svg-element-in-xhtml-hidden.xhtml
               svg/overflow/overflow-on-outermost-svg-element-in-xhtml-scroll.xhtml
               svg/overflow/overflow-on-outermost-svg-element-in-xhtml-visible.xhtml

        * css/svg.css: Change default <svg> overflow rule to only apply to inner <svg> elements.
        * page/FrameView.cpp: 
        (WebCore::FrameView::layout): Only apply overflow rules for non-standalone SVG documents.
        * rendering/RenderSVGRoot.cpp: Remove all calls to isOverflowHidden - it's always the case for the outermost SVG element, see spec + errata.
        (WebCore::RenderSVGRoot::paint): Always clip to initial viewport size.
        (WebCore::RenderSVGRoot::computeRectForRepaint): Ditto.
        (WebCore::RenderSVGRoot::nodeAtPoint): Simplify.
        * rendering/RenderSVGViewportContainer.cpp:
        (WebCore::RenderSVGViewportContainer::applyViewportClip): Use isOverflowHidden() instead of a manual oveflow query and clip in float precision.
        * rendering/SVGRenderSupport.cpp:
        (WebCore::SVGRenderBase::isOverflowHidden): Simplify implementation, assure the function is not called anymore for RenderSVGRoot objects.

2010-02-09  Kwang Yul Seo  <skyul@company100.net>

        Reviewed by Eric Seidel.

        [BREWMP] Port KURL::fileSystemPath
        https://bugs.webkit.org/show_bug.cgi?id=34516

        Convert a file URL to a file path by prefixing
        AEEFS_HOME_DIR to access files relative to the current
        module directory in a case-sensitive manner.

        As IWeb "file:" engine opens files in BREW's application-relative
        file namespace, we follow the same policy here.

        * platform/brew/KURLBrew.cpp: Added.
        (WebCore::KURL::fileSystemPath):

2010-02-09  Noam Rosenthal  <noam.rosenthal@nokia.com>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] the above website does not render properly when in compositing mode
        https://bugs.webkit.org/show_bug.cgi?id=34681

        http://media.24ways.org/2009/15/spinner-alt.html now renders correctly

        * platform/graphics/qt/GraphicsLayerQt.cpp:
        (WebCore::MaskEffectQt::MaskEffectQt): implement mask as
        QGraphicsEffect
        (WebCore::MaskEffectQt::draw): reimp
        (WebCore::GraphicsLayerQtImpl::GraphicsLayerQtImpl): init the effect
        (WebCore::GraphicsLayerQtImpl::paint): no need for drawContents
        (WebCore::GraphicsLayerQtImpl::flushChanges): make sure to update the
        mask layer, not just the actual children

2010-02-09  Kwang Yul Seo  <skyul@company100.net>

        Reviewed by Laszlo Gombos.

        [BREWMP] Fix macro redefinition error in BREWMP simulator build.
        https://bugs.webkit.org/show_bug.cgi?id=34738

        Remove warning: 'FAR' macro redefinition.

        * platform/image-decoders/jpeg/JPEGImageDecoder.cpp:

2010-02-07  Yuzo Fujishima  <yuzo@google.com>

        Reviewed by Dan Bernstein.

        Fix the following bugs:
        https://bugs.webkit.org/show_bug.cgi?id=18926 - dt:after generate a line break. Boost documentation page renders poorly
        https://bugs.webkit.org/show_bug.cgi?id=7276 - Most W3C padding related tests fail

        Tests: fast/css/inline-element-line-break.html
               fast/css/pseudo-element-line-break.html

        findNextLineBreak() unconditionally allowed lines to break between elements when no other line breaking opportunity had been found,
        but that was unnecessary and led to incorrect layout. Disallow that kind of line breaks.

        * rendering/RenderBlockLineLayout.cpp:
        (WebCore::RenderBlock::findNextLineBreak):

2010-02-09  Shinichiro Hamaji  <hamaji@chromium.org>

        Reviewed by Darin Adler.

        Provide a way to get total number of pages to be printed
        https://bugs.webkit.org/show_bug.cgi?id=34699

        Test: printing/numberOfPages.html

        * WebCore.base.exp:
        * page/PrintContext.cpp:
        (WebCore::PrintContext::pageNumberForElement):
        (WebCore::PrintContext::numberOfPages):
        * page/PrintContext.h:
        (WebCore::PrintContext::pageRects):

2010-02-08  Dominic Cooney  <dominicc@google.com>

        Reviewed by Adam Barth.

        [V8] Move Element custom methods into generic bindings

        This patch moves the security checks in setAttribute,
        setAttributeNode, setAttributeNS and setAttributeNodeNS from
        V8ElementCustom into the generic bindings so that they can be
        reused in other bindings. This is in a similar vein to
        <https://bugs.webkit.org/attachment.cgi?id=45872>.

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

        LayoutTests: None

        * WebCore.gypi:
        * bindings/generic/BindingElement.h: Added.
        (WebCore::::setAttribute):
        (WebCore::::setAttributeNode):
        (WebCore::::setAttributeNS):
        (WebCore::::setAttributeNodeNS):
        * bindings/v8/V8Binding.h:
        * bindings/v8/custom/V8ElementCustom.cpp:
        (WebCore::V8Element::setAttributeCallback):
        (WebCore::V8Element::setAttributeNodeCallback):
        (WebCore::V8Element::setAttributeNSCallback):
        (WebCore::V8Element::setAttributeNodeNSCallback):

2010-02-08  Hayato Ito  <hayato@chromium.org>

        Reviewed by Darin Adler.

        Schedule a loading request when there are many in-flight requests beyond
        the limit to avoid forever page loading.

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

        Test: http/tests/loading/load-javascript-after-many-xhrs.html

        * loader/loader.cpp:
        (WebCore::Loader::Host::servePendingRequests):

2010-02-08  David Levin  <levin@chromium.org>

        Reviewed by Gavin Barraclough.

        REGRESSION (before r54472): Various tests in fast/workers are crashing on the buildbot.
        https://bugs.webkit.org/show_bug.cgi?id=34728

        The core part of the fix is to change WebCoreJSClientData::m_normalWorld
        from DOMWrapperWorld to RefPtr<DOMWrapperWorld> so that the DOMWrapperWorld
        is really ref counted.

        No new tests because current tests sufficiently cover this as evidenced as
        the buildbot crashes.

        * bindings/js/JSDOMBinding.cpp:
        (WebCore::DOMWrapperWorld::~DOMWrapperWorld): Made this robust to m_globalData
        being 0.
        * bindings/js/JSDOMBinding.h:
        (WebCore::DOMWrapperWorld::create): Made this class follow the standard
        create pattern for RefCounted classes.
        (WebCore::DOMWrapperWorld::detachFromGlobalData): Since this class can
        now outlive JSGlobalData, this method tells it to stop using its JSGlobalData.
        (WebCore::WebCoreJSClientData::WebCoreJSClientData): Adjusted due to
        m_normalWorld being a RefPtr.
        (WebCore::WebCoreJSClientData::~WebCoreJSClientData): Ditto (and added
        asserts for the FIXME).
        (WebCore::WebCoreJSClientData::normalWorld): Ditto.
        * bindings/js/ScriptController.cpp:
        (WebCore::IsolatedWorld::create): Made the constructor protected.
        (WebCore::IsolatedWorld::IsolatedWorld): Made the constructor protected, so
        that code would have to use the create method.

2010-02-08  Kinuko Yasuda  <kinuko@chromium.org>

        Reviewed by David Levin.

        Remove special utf-8 tag from Chromium cilpboard code because
        we now have the corresponding code in generic clipboard framework
        code in chromium (since it's needed by other places than in Web
        page rendering) and no longer need the separate workaround code in
        WebKit.
        https://bugs.webkit.org/show_bug.cgi?id=34567

        Test: (for regression) editing/pasteboard

        * platform/chromium/ClipboardChromium.cpp:
        (WebCore::ClipboardChromium::writeRange):
        * platform/chromium/PasteboardChromium.cpp:
        (WebCore::Pasteboard::writeSelection):
        (WebCore::Pasteboard::documentFragment):

2010-02-08  Darin Adler  <darin@apple.com>

        Reviewed by Dan Bernstein.

        Crash due to layout not done in case involving removal of absolute positioning
        https://bugs.webkit.org/show_bug.cgi?id=34734
        rdar://problem/7588280

        Test: fast/dynamic/position-change-layout.html

        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::styleDidChange): Call markContainingBlocksForLayout in
        a case where the object already needs layout, but might have a new containing
        block and so needs to mark the new containing block.

2010-02-08  Charlie Reis  <creis@chromium.org>

        Reviewed by Darin Adler.

        onbeforeunload not called at window close + frame or iframe focused
        https://bugs.webkit.org/show_bug.cgi?id=27481
        
        Chromium and WebKit on Windows will now fire beforeunload handlers
        even if an inner frame is focused.  

        Layout tests aren't able to test this bug, since it requires closing
        the actual browser window, not calling window.close().  Instead,
        test with WebCore/manual-tests/onbeforeunload-focused-iframe.html.

        * manual-tests/onbeforeunload-focused-iframe.html: Added.
        * manual-tests/resources/focused-iframe.html: Added.

2010-02-08  Alexey Proskuryakov  <ap@apple.com>

        Addressing review feedback.

        * bridge/c/c_instance.h: Removed argument name.

2010-02-08  Alexey Proskuryakov  <ap@apple.com>

        Reviewed by Darin Adler.

        https://bugs.webkit.org/show_bug.cgi?id=34727
        Assertion crashes and freezes when plug-in property access results in an exception

        Test: plugins/netscape-plugin-property-access-exception.html

        * bridge/c/c_instance.h: Made moveGlobalExceptionToExecState public, since it also need to
        be called from CField.

        * bridge/c/c_runtime.cpp:
        (JSC::Bindings::CField::valueFromInstance): Call moveGlobalExceptionToExecState(). Without
        this, not only didn't we get exceptions, but we also got an assertion failure because of
        dangling global exception on next call into plug-in.
        (JSC::Bindings::CField::setValueToInstance): Ditto.

2010-02-08  Dirk Schulze  <krit@webkit.org>

        Unreviewed build fix of ChromiumWin.

        * platform/graphics/chromium/TransparencyWin.cpp:
        (WebCore::):
        (WebCore::TransparencyWin::setupLayerForOpaqueCompositeLayer):
        (WebCore::TransparencyWin::setupTransformForKeepTransform):
        * platform/graphics/chromium/TransparencyWin.h:
        * rendering/RenderThemeChromiumWin.cpp:
        (WebCore::):

2010-02-05  Dumitru Daniliuc  <dumi@chromium.org>

        Reviewed by Jeremy Orlow.

        Adding a way to get the set of all open database handles pointing
        to a given database.
        https://bugs.webkit.org/show_bug.cgi?id=34619

        Sometimes we need to be able to close all handles to a database as
        soon as possible (to delete the DB file, for example).

        * storage/DatabaseTracker.cpp:
        (WebCore::DatabaseTracker::getOpenDatabases):
        * storage/DatabaseTracker.h:
        * storage/chromium/DatabaseTrackerChromium.cpp:
        (WebCore::DatabaseTracker::addOpenDatabase):
        (WebCore::DatabaseTracker::removeOpenDatabase):
        (WebCore::DatabaseTracker::getOpenDatabases):

2010-02-08  Dirk Schulze  <krit@webkit.org>

        Unreviewed windows build-fix.

        * page/win/FrameCGWin.cpp:
        (WebCore::drawRectIntoContext):

2010-02-08  Dirk Schulze  <krit@webkit.org>

        Reviewed by Nikolas Zimmermann.

        Add back an AffineTransform class for use by SVG
        https://bugs.webkit.org/show_bug.cgi?id=33750

        This adds back AffineTransform. This saves additional 4% memory consumption
        on the 50k rects stress test: https://bugs.webkit.org/attachment.cgi?id=46721
        It also makes it possible to optimize the calculations internally of
        AffineTransform to the needs of 2D transformations (the second benefit for SVG,
        which uses transformations relative often at the moment.
        Everything that is 2D related (like images, patterns, gradients, fonts), uses
        AffineTransform now.

        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSSVGMatrixCustom.cpp:
        (WebCore::JSSVGMatrix::multiply):
        (WebCore::JSSVGMatrix::inverse):
        (WebCore::JSSVGMatrix::rotateFromVector):
        * bindings/js/JSSVGPODTypeWrapper.h:
        * bindings/scripts/CodeGeneratorJS.pm:
        * bindings/scripts/CodeGeneratorObjC.pm:
        * bindings/scripts/CodeGeneratorV8.pm:
        * bindings/v8/V8Index.h:
        * bindings/v8/custom/V8SVGMatrixCustom.cpp:
        (WebCore::V8SVGMatrix::multiplyCallback):
        (WebCore::V8SVGMatrix::inverseCallback):
        (WebCore::V8SVGMatrix::rotateFromVectorCallback):
        * html/HTMLCanvasElement.cpp: Changed to AffineTransform now
        (WebCore::HTMLCanvasElement::baseTransform):
        * html/HTMLCanvasElement.h:
        * platform/graphics/FloatPoint.cpp:
        (WebCore::FloatPoint::matrixTransform):
        * platform/graphics/FloatPoint.h:
        * platform/graphics/GeneratedImage.cpp:
        (WebCore::GeneratedImage::drawPattern):
        * platform/graphics/GeneratedImage.h:
        * platform/graphics/Gradient.cpp:
        (WebCore::Gradient::setGradientSpaceTransform):
        (WebCore::Gradient::setPlatformGradientSpaceTransform):
        * platform/graphics/Gradient.h:
        (WebCore::Gradient::gradientSpaceTransform):
        * platform/graphics/GraphicsContext.h:
        * platform/graphics/Image.cpp:
        (WebCore::Image::drawTiled):
        * platform/graphics/Image.h:
        * platform/graphics/ImageBuffer.h:
        (WebCore::ImageBuffer::baseTransform):
        * platform/graphics/Path.h:
        * platform/graphics/Pattern.cpp:
        (WebCore::Pattern::setPatternSpaceTransform):
        * platform/graphics/Pattern.h:
        (WebCore::Pattern::create):
        (WebCore::Pattern::tileImage):
        * platform/graphics/cairo/FontCairo.cpp:
        (WebCore::Font::drawGlyphs):
        * platform/graphics/cairo/GraphicsContextCairo.cpp:
        (WebCore::setPlatformFill):
        (WebCore::setPlatformStroke):
        (WebCore::GraphicsContext::getCTM):
        * platform/graphics/cairo/ImageCairo.cpp:
        (WebCore::Image::drawPattern):
        * platform/graphics/cairo/PathCairo.cpp:
        * platform/graphics/cairo/PatternCairo.cpp:
        (WebCore::Pattern::createPlatformPattern):
        * platform/graphics/cg/GraphicsContextCG.cpp:
        (WebCore::GraphicsContext::getCTM):
        * platform/graphics/cg/GraphicsContextPlatformPrivateCG.h:
        (WebCore::GraphicsContextPlatformPrivate::concatCTM):
        * platform/graphics/cg/ImageCG.cpp:
        (WebCore::Image::drawPattern):
        * platform/graphics/cg/PathCG.cpp:
        * platform/graphics/cg/PatternCG.cpp:
        (WebCore::Pattern::createPlatformPattern):
        * platform/graphics/haiku/GraphicsContextHaiku.cpp:
        (WebCore::GraphicsContext::getCTM):
        * platform/graphics/haiku/ImageHaiku.cpp:
        (WebCore::Image::drawPattern):
        * platform/graphics/haiku/PathHaiku.cpp:
        * platform/graphics/qt/FontQt.cpp:
        (WebCore::Font::drawComplexText):
        * platform/graphics/qt/GraphicsContextQt.cpp:
        (WebCore::GraphicsContext::getCTM):
        (WebCore::GraphicsContext::fillPath):
        (WebCore::GraphicsContext::strokePath):
        (WebCore::GraphicsContext::fillRect):
        * platform/graphics/qt/ImageQt.cpp:
        (WebCore::Image::drawPattern):
        * platform/graphics/qt/PathQt.cpp:
        * platform/graphics/qt/PatternQt.cpp:
        (WebCore::Pattern::createPlatformPattern):
        * platform/graphics/skia/GradientSkia.cpp:
        (WebCore::Gradient::setPlatformGradientSpaceTransform):
        * platform/graphics/skia/GraphicsContextSkia.cpp:
        (WebCore::GraphicsContext::getCTM):
        * platform/graphics/skia/ImageSkia.cpp:
        (WebCore::Image::drawPattern):
        * platform/graphics/skia/PathSkia.cpp:
        * platform/graphics/skia/PatternSkia.cpp:
        (WebCore::Pattern::platformPattern):
        * platform/graphics/skia/SkiaFontWin.cpp:
        (WebCore::windowsCanHandleTextDrawing):
        * platform/graphics/transforms/AffineTransform.cpp:
        (WebCore::AffineTransform::makeIdentity): needed by some parts of WebCore
        (WebCore::AffineTransform::scale): Didn't scale the complete matrix
        (WebCore::AffineTransform::translate): Didn't respect other transformations
        (WebCore::AffineTransform::shear): direct calculation, no extra multiply of matrices
        (WebCore::AffineTransform::map):
        (WebCore::AffineTransform::mapPoint):
        (WebCore::AffineTransform::mapRect):
        * platform/graphics/transforms/AffineTransform.h:
        (WebCore::AffineTransform::isIdentityOrTranslation):
        * platform/graphics/transforms/TransformationMatrix.cpp:
        (WebCore::TransformationMatrix::toAffineTransform):
        * platform/graphics/transforms/TransformationMatrix.h:
        * platform/graphics/win/FontCGWin.cpp:
        (WebCore::drawGDIGlyphs):
        * platform/graphics/win/GraphicsContextCGWin.cpp:
        * platform/graphics/win/GraphicsContextCairoWin.cpp:
        * platform/graphics/win/GraphicsContextWin.cpp:
        (WebCore::GraphicsContextPlatformPrivate::concatCTM):
        * platform/graphics/wince/FontWince.cpp:
        * platform/graphics/wince/GraphicsContextWince.cpp:
        (WebCore::GraphicsContextPlatformPrivate::concatCTM):
        (WebCore::GraphicsContext::fillPath):
        (WebCore::GraphicsContext::strokePath):
        (WebCore::GraphicsContext::getCTM):
        (WebCore::GraphicsContext::drawBitmapPattern):
        * platform/graphics/wince/ImageBufferWince.cpp:
        (WebCore::):
        (WebCore::BufferedImage::drawPattern):
        * platform/graphics/wince/PathWince.cpp:
        (WebCore::Path::transform):
        * platform/graphics/wince/PlatformPathWince.cpp:
        (WebCore::drawPolygons):
        (WebCore::PathPolygon::transform):
        (WebCore::PlatformPathElement::transform):
        (WebCore::PlatformPath::strokePath):
        (WebCore::PlatformPath::fillPath):
        (WebCore::PlatformPath::transform):
        * platform/graphics/wince/PlatformPathWince.h:
        (WebCore::):
        * platform/graphics/wx/GraphicsContextWx.cpp:
        (WebCore::GraphicsContext::getCTM):
        * platform/graphics/wx/ImageWx.cpp:
        (WebCore::BitmapImage::drawPattern):
        (WebCore::Image::drawPattern):
        * platform/graphics/wx/PathWx.cpp:
        * platform/gtk/RenderThemeGtk.cpp:
        (WebCore::paintMozillaGtkWidget):
        * plugins/win/PluginViewWin.cpp:
        (WebCore::PluginView::paintWindowedPluginIntoContext):
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::localTransform):
        * rendering/RenderBox.h:
        * rendering/RenderBoxModelObject.cpp:
        (WebCore::RenderBoxModelScaleData::RenderBoxModelScaleData):
        (WebCore::RenderBoxModelScaleData::transform):
        (WebCore::RenderBoxModelScaleData::setTransform):
        (WebCore::RenderBoxModelScaleObserver::shouldPaintBackgroundAtLowQuality):
        (WebCore::RenderBoxModelObject::paintBoxShadow):
        * rendering/RenderForeignObject.cpp:
        (WebCore::RenderForeignObject::translationForAttributes):
        (WebCore::RenderForeignObject::localToParentTransform):
        * rendering/RenderForeignObject.h:
        (WebCore::RenderForeignObject::localTransform):
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::paintLayer):
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::localTransform):
        (WebCore::RenderObject::localToParentTransform):
        (WebCore::RenderObject::absoluteTransform):
        * rendering/RenderObject.h:
        * rendering/RenderPath.cpp:
        (WebCore::RenderPath::localToParentTransform):
        (WebCore::RenderPath::localTransform):
        * rendering/RenderPath.h:
        * rendering/RenderSVGHiddenContainer.h:
        (WebCore::RenderSVGHiddenContainer::absoluteTransform):
        * rendering/RenderSVGImage.h:
        (WebCore::RenderSVGImage::localToParentTransform):
        (WebCore::RenderSVGImage::localTransform):
        * rendering/RenderSVGRoot.cpp:
        (WebCore::RenderSVGRoot::localToBorderBoxTransform):
        (WebCore::RenderSVGRoot::localToRepaintContainerTransform):
        (WebCore::RenderSVGRoot::localToParentTransform):
        (WebCore::RenderSVGRoot::absoluteTransform):
        (WebCore::RenderSVGRoot::localTransform):
        * rendering/RenderSVGRoot.h:
        * rendering/RenderSVGText.h:
        (WebCore::RenderSVGText::localToParentTransform):
        (WebCore::RenderSVGText::localTransform):
        * rendering/RenderSVGTransformableContainer.cpp:
        (WebCore::RenderSVGTransformableContainer::localToParentTransform):
        (WebCore::RenderSVGTransformableContainer::localTransform):
        (WebCore::RenderSVGTransformableContainer::calculateLocalTransform):
        * rendering/RenderSVGTransformableContainer.h:
        * rendering/RenderSVGViewportContainer.cpp:
        (WebCore::RenderSVGViewportContainer::markerBoundaries):
        (WebCore::RenderSVGViewportContainer::markerContentTransformation):
        (WebCore::RenderSVGViewportContainer::viewportTransform):
        (WebCore::RenderSVGViewportContainer::localToParentTransform):
        (WebCore::RenderSVGViewportContainer::absoluteTransform):
        * rendering/RenderSVGViewportContainer.h:
        * rendering/SVGCharacterLayoutInfo.cpp:
        (WebCore::SVGChar::characterTransform):
        * rendering/SVGCharacterLayoutInfo.h:
        (WebCore::SVGTextChunkWalker::operator()):
        * rendering/SVGInlineTextBox.cpp:
        (WebCore::SVGInlineTextBox::calculateGlyphBoundaries):
        (WebCore::SVGInlineTextBoxClosestCharacterToPositionWalker::chunkPortionCallback):
        (WebCore::SVGInlineTextBoxSelectionRectWalker::chunkPortionCallback):
        (WebCore::SVGInlineTextBox::paintCharacters):
        (WebCore::SVGInlineTextBox::paintDecoration):
        * rendering/SVGMarkerLayoutInfo.h:
        (WebCore::MarkerLayout::MarkerLayout):
        * rendering/SVGRenderSupport.cpp:
        (WebCore::applyTransformToPaintInfo):
        * rendering/SVGRenderSupport.h:
        * rendering/SVGRenderTreeAsText.cpp:
        (WebCore::operator<<):
        * rendering/SVGRenderTreeAsText.h:
        * rendering/SVGRootInlineBox.cpp:
        (WebCore::SVGRootInlineBoxPaintWalker::chunkPortionCallback):
        (WebCore::applyTextLengthCorrectionToTextChunk):
        (WebCore::SVGRootInlineBox::buildLayoutInformation):
        * rendering/TransformState.cpp:
        (WebCore::TransformState::applyTransform):
        * rendering/TransformState.h:
        * svg/GradientAttributes.h:
        (WebCore::GradientAttributes::gradientTransform):
        (WebCore::GradientAttributes::setGradientTransform):
        * svg/PatternAttributes.h:
        (WebCore::PatternAttributes::patternTransform):
        (WebCore::PatternAttributes::setPatternTransform):
        * svg/SVGAnimateMotionElement.cpp:
        (WebCore::SVGAnimateMotionElement::resetToBaseValue):
        (WebCore::SVGAnimateMotionElement::calculateAnimatedValue):
        (WebCore::SVGAnimateMotionElement::applyResultsToTarget):
        * svg/SVGAnimateMotionElement.h:
        * svg/SVGAnimateTransformElement.cpp:
        * svg/SVGAnimateTransformElement.h:
        * svg/SVGElement.h:
        (WebCore::SVGElement::supplementalTransform):
        * svg/SVGFitToViewBox.cpp:
        (WebCore::SVGFitToViewBox::viewBoxToViewTransform):
        * svg/SVGFitToViewBox.h:
        * svg/SVGLocatable.cpp:
        (WebCore::SVGLocatable::getCTM):
        (WebCore::SVGLocatable::getScreenCTM):
        (WebCore::SVGLocatable::getTransformToElement):
        * svg/SVGLocatable.h:
        * svg/SVGMarkerElement.cpp:
        (WebCore::SVGMarkerElement::viewBoxToViewTransform):
        * svg/SVGMarkerElement.h:
        * svg/SVGMaskElement.cpp:
        (WebCore::SVGMaskElement::drawMaskerContent):
        * svg/SVGMatrix.idl:
        * svg/SVGPatternElement.cpp:
        (WebCore::SVGPatternElement::buildPattern):
        * svg/SVGPreserveAspectRatio.cpp:
        (WebCore::SVGPreserveAspectRatio::getCTM):
        * svg/SVGPreserveAspectRatio.h:
        * svg/SVGSVGElement.cpp:
        (WebCore::SVGSVGElement::viewport):
        (WebCore::SVGSVGElement::createSVGMatrix):
        (WebCore::SVGSVGElement::createSVGTransformFromMatrix):
        (WebCore::SVGSVGElement::getCTM):
        (WebCore::SVGSVGElement::getScreenCTM):
        (WebCore::SVGSVGElement::viewBoxToViewTransform):
        * svg/SVGSVGElement.h:
        * svg/SVGStyledLocatableElement.cpp:
        (WebCore::SVGStyledLocatableElement::getCTM):
        (WebCore::SVGStyledLocatableElement::getScreenCTM):
        * svg/SVGStyledLocatableElement.h:
        * svg/SVGStyledTransformableElement.cpp:
        (WebCore::SVGStyledTransformableElement::getCTM):
        (WebCore::SVGStyledTransformableElement::getScreenCTM):
        (WebCore::SVGStyledTransformableElement::animatedLocalTransform):
        (WebCore::SVGStyledTransformableElement::supplementalTransform):
        * svg/SVGStyledTransformableElement.h:
        (WebCore::SVGStyledTransformableElement::isStyledTransformable):
        (WebCore::SVGStyledTransformableElement::toPathData):
        * svg/SVGTextContentElement.cpp:
        (WebCore::SVGInlineTextBoxQueryWalker::chunkPortionCallback):
        * svg/SVGTextElement.cpp:
        (WebCore::SVGTextElement::getScreenCTM):
        (WebCore::SVGTextElement::getCTM):
        (WebCore::SVGTextElement::animatedLocalTransform):
        (WebCore::SVGTextElement::supplementalTransform):
        * svg/SVGTextElement.h:
        * svg/SVGTextPathElement.cpp:
        * svg/SVGTransform.cpp:
        (SVGTransform::SVGTransform):
        (SVGTransform::matrix):
        (SVGTransform::setMatrix):
        * svg/SVGTransform.h:
        * svg/SVGTransformDistance.cpp:
        (WebCore::SVGTransformDistance::SVGTransformDistance):
        (WebCore::SVGTransformDistance::scaledDistance):
        (WebCore::SVGTransformDistance::isZero):
        * svg/SVGTransformDistance.h:
        * svg/SVGTransformList.cpp:
        (SVGTransformList::createSVGTransformFromMatrix):
        (SVGTransformList::concatenate):
        (SVGTransformList::valueAsString):
        * svg/SVGTransformList.h:
        * svg/SVGTransformable.cpp:
        (WebCore::SVGTransformable::getCTM):
        (WebCore::SVGTransformable::getScreenCTM):
        (WebCore::SVGTransformable::parseTransformValue):
        * svg/SVGTransformable.h:
        (WebCore::SVGTransformable::):
        * svg/graphics/SVGPaintServerGradient.cpp:
        (WebCore::SVGPaintServerGradient::gradientTransform):
        (WebCore::SVGPaintServerGradient::setGradientTransform):
        (WebCore::clipToTextMask):
        (WebCore::SVGPaintServerGradient::setup):
        * svg/graphics/SVGPaintServerGradient.h:
        * svg/graphics/SVGPaintServerPattern.cpp:
        (WebCore::SVGPaintServerPattern::patternTransform):
        (WebCore::SVGPaintServerPattern::setPatternTransform):
        (WebCore::SVGPaintServerPattern::setup):
        * svg/graphics/SVGPaintServerPattern.h:
        * svg/graphics/SVGResourceClipper.cpp:
        (WebCore::SVGResourceClipper::applyClip):
        * svg/graphics/SVGResourceMarker.cpp:
        (WebCore::SVGResourceMarker::markerTransformation):
        (WebCore::SVGResourceMarker::draw):
        * svg/graphics/SVGResourceMarker.h:
        * svg/graphics/filters/SVGFEImage.cpp:
        * svg/graphics/filters/SVGFETile.cpp:
        (WebCore::FETile::apply):

2010-02-08  Stephen White  <senorblanco@chromium.org>

        Reviewed by Dimitri Glazkov.

        Make an inline function containing a static var out-of-line.  This is
        a workaround for Xcode 3.1 bug radar 7070016.  We tripped on this in
        deviceRGBColorSpaceRef on the Chromium canaries.  This is a proactive
        fix for the same problem in sRGBColorSpaceRef().

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

        * platform/graphics/cg/GraphicsContextCG.cpp:
        (WebCore::sRGBColorSpaceRef):
        * platform/graphics/cg/GraphicsContextPlatformPrivateCG.h:

2010-02-08  Nate Chapin  <japhet@chromium.org>

        Reviewed by Dimitri Glazkov.

        [V8] Unify the WorkerContext V8 object wrapping code with
        the standard V8 object wrapping code.

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

        * bindings/scripts/CodeGeneratorV8.pm:
        * bindings/v8/V8DOMWrapper.cpp:
        (WebCore::V8DOMWrapper::instantiateV8Object):
        (WebCore::V8DOMWrapper::convertEventTargetToV8Object):
        * bindings/v8/V8WorkerContextEventListener.cpp:
        (WebCore::V8WorkerContextEventListener::handleEvent):
        (WebCore::V8WorkerContextEventListener::getReceiverObject):
        * bindings/v8/WorkerContextExecutionProxy.cpp:
        * bindings/v8/WorkerContextExecutionProxy.h:
        * bindings/v8/custom/V8NotificationCenterCustom.cpp:
        (WebCore::V8NotificationCenter::createHTMLNotificationCallback):
        (WebCore::V8NotificationCenter::createNotificationCallback):
        * bindings/v8/custom/V8WorkerContextCustom.cpp:
        (WebCore::toV8):

2010-02-08  Kwang Yul Seo  <skyul@company100.net>

        Reviewed by Darin Adler.

        Use fastStrDup instead of strdup
        https://bugs.webkit.org/show_bug.cgi?id=33943

        Replace strdup/free with fastStrDup/fastFree.

        * bridge/IdentifierRep.h:
        (WebCore::IdentifierRep::IdentifierRep):
        * bridge/jni/JNIBridge.cpp:
        (JavaMethod::~JavaMethod):
        (appendClassName):
        (JavaMethod::signature):
        * bridge/jni/jsc/JavaClassJSC.cpp:
        (JavaClass::JavaClass):
        (JavaClass::~JavaClass):
        * platform/network/curl/ResourceHandleCurl.cpp:
        (WebCore::ResourceHandleInternal::~ResourceHandleInternal):
        * platform/network/curl/ResourceHandleManager.cpp:
        (WebCore::ResourceHandleManager::~ResourceHandleManager):
        (WebCore::ResourceHandleManager::setCookieJarFileName):
        (WebCore::ResourceHandleManager::initializeHandle):
        * plugins/PluginStream.cpp:
        (WebCore::PluginStream::~PluginStream):
        (WebCore::PluginStream::startStream):
        * xml/XSLTProcessorLibxslt.cpp:
        (WebCore::xsltParamArrayFromParameterMap):
        (WebCore::freeXsltParamArray):

2010-02-08  Tor Arne Vestbø  <tor.arne.vestbo@nokia.com>

        Reviewed by Simon Hausmann.

        Fix Qt build on Windows.

        nmake fails to pick the right cpp file, so we have to
        rename the file to to a unique name.

        * WebCore.pro:
        * platform/graphics/qt/FontCustomPlatformDataQt.cpp: Renamed from WebCore/platform/graphics/qt/FontCustomPlatformData.cpp.

2010-02-08  Nikolas Zimmermann  <nzimmermann@rim.com>

        Reviewed by Dirk Schulze.

        All SVG *-expected.txt files contain wrong results
        https://bugs.webkit.org/show_bug.cgi?id=34703

        Finally dump meaningful information for SVG layout tests.
        Use 'absoluteClippedOverflowRect' which goes through the same code paths used
        to actually calculate repaint rects etc - instead of the legacy CSS-unaware
        code path that mapped 'repaintRectInLocalCoordinates' through 'absoluteTransform'.
        Remove absoluteTransform() - a long standing TODO, finally not needed anymore.

        Despite SVGRenderTreeAsText, SVGPaintServerGradient was also using absoluteTransform().
        Rewrite the code in question, fixing svg/W3C-SVG-1.1/pserver-grad-08-b.svg alignment issues
        when scaling/panning text using gradient on stroke/fill. Affects some other gradient tests as well.

        As we're now dumping clipped overflow rects any problems with repaint rects will become
        immediate visible - it turns out we're not supporting the overflow rules on the outermost <svg>
        element properly (repaint rects and bounding boxes need to take special SVG overflow rules into account).
        Fixing that magically gives pixel-perfect clipped overflow rects for all types of shapes/text/containers.

        Note: This will break any overriden platform-specific SVG results, need to wait for build bots in order to update them.

        * rendering/RenderObject.cpp: Remove absoluteTransform() method, centralize overflow query code in SVGRenderSupport::isOverflowHidden().
        * rendering/RenderObject.h: Remove absoluteTransform() method.
        * rendering/RenderSVGHiddenContainer.h: Ditto.
        * rendering/RenderSVGRoot.cpp:
        (WebCore::RenderSVGRoot::paint): Use SVGRenderSupport::isOverflowHidden() to query SVG overflow mode.
        (WebCore::RenderSVGRoot::computeRectForRepaint): Respect SVG overflow rules here: clip repaintRect against overflow rect _before_ passing
                                                         along to RenderBox. This is the key issue behind wrong absoluteClippedOverflowRect() values.
        (WebCore::RenderSVGRoot::nodeAtPoint): Use SVGRenderSupport::isOverflowHidden() to query SVG overflow mode.
        * rendering/RenderSVGRoot.h: Remove absoluteTransform(). Don't expose viewportSize() anymore.
        * rendering/RenderSVGText.cpp: 
        (WebCore::RenderSVGText::strokeBoundingBox): Fix default stroke width to 1. This was the only wrong place -> fixes repaint rects for stroked text.
        * rendering/RenderSVGViewportContainer.cpp: Remove absoluteTransform() method.
        (WebCore::RenderSVGViewportContainer::pointIsInsideViewportClip): Use SVGRenderSupport::isOverflowHidden() to query SVG overflow mode.
        * rendering/RenderSVGViewportContainer.h: Remove absoluteTransform() method.
        * rendering/SVGRenderSupport.cpp: Refactored overflow queries in one place, centralizing SVG specific assumptions about overflowX/Y.
        (WebCore::SVGRenderBase::isOverflowHidden):
        * rendering/SVGRenderSupport.h:
        * rendering/SVGRenderTreeAsText.cpp: Dump absoluteClippedOverflowRect() instead of absoluteTransform().mapRect(repaintRectInLocalCoordinates()).
        (WebCore::writePositionAndStyle): Affects all layout tests dumping render trees.
        * svg/graphics/SVGPaintServerGradient.cpp: Rewrite Gradient on text fill/stroke support on Cg, to avoid using absoluteTransform().
        (WebCore::absoluteTransformForRenderer):
        (WebCore::createMaskAndSwapContextForTextGradient):
        (WebCore::clipToTextMask):
        (WebCore::SVGPaintServerGradient::setup):

2010-02-07  Daniel Bates  <dbates@webkit.org>

        Reviewed by Darin Adler.

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

        Implements all of the numeric CSS3 list-style-types as per
        section 4.3 of the CSS3 Lists module <http://www.w3.org/TR/css3-lists/#numeric>.

        Test: fast/lists/w3-css3-list-styles-numeric.html

        * css/CSSPrimitiveValueMappings.h:
        (WebCore::CSSPrimitiveValue::CSSPrimitiveValue):
        * css/CSSValueKeywords.in:
        * inspector/front-end/SourceCSSTokenizer.re2js:
        * platform/text/CharacterNames.h: Added constant hyphenMinus.
        * rendering/RenderListMarker.cpp:
        (WebCore::): Defined enum SequenceType.
        (WebCore::toAlphabeticOrNumeric): Added.
        (WebCore::toAlphabetic): Modified to call WebCore::toAlphabeticOrNumeric.
        (WebCore::toNumeric): Added.
        (WebCore::listMarkerSuffix):
        (WebCore::listMarkerText):
        (WebCore::RenderListMarker::paint):
        (WebCore::RenderListMarker::calcPrefWidths):
        (WebCore::RenderListMarker::getRelativeMarkerRect):
        * rendering/style/RenderStyle.h:
        (WebCore::):
        * rendering/style/RenderStyleConstants.h: Added numeric list style types
        and fixed indent level for the enum values.
        (WebCore::):

2010-02-07  Ismail Donmez  <ismail@namtrac.org>

        Reviewed by Darin Adler.

        Include wtf/StringExtras.h for strdup definition, which
        is needed for WinCE.

        * bridge/IdentifierRep.h:

2010-02-07  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Timothy Hatcher.

        Web Inspector: Fragment-held Elements Not Shown in Inspector.

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

        * inspector/InspectorDOMAgent.cpp:
        (WebCore::InspectorDOMAgent::pushChildNodesToFrontend):
        (WebCore::InspectorDOMAgent::buildObjectForNode):
        * inspector/front-end/ElementsTreeOutline.js:
        (WebInspector.ElementsTreeElement.prototype._nodeTitleInfo):

2010-02-07  Jian Li  <jianli@chromium.org>

        Reviewed by Darin Fisher.

        [chromium] Change chromium interface to handle DownloadURL format.
        https://bugs.webkit.org/show_bug.cgi?id=34655

        * platform/chromium/ChromiumDataObject.cpp:
        (WebCore::ChromiumDataObject::clear):
        (WebCore::ChromiumDataObject::hasData):
        (WebCore::ChromiumDataObject::ChromiumDataObject):
        * platform/chromium/ChromiumDataObject.h:
        * platform/chromium/ClipboardChromium.cpp:
        (WebCore::ClipboardChromium::setData):

2010-02-06  Dimitri Glazkov  <dglazkov@chromium.org>

        No review, rolling out r54364.
        http://trac.webkit.org/changeset/54364
        https://bugs.webkit.org/show_bug.cgi?id=34464

        Introduced asserts in layout tests, needs more testing
        locally.

        * accessibility/chromium/AXObjectCacheChromium.cpp:
        (WebCore::AXObjectCache::postPlatformNotification):
        * page/chromium/ChromeClientChromium.h:

2010-02-06  Dimitri Glazkov  <dglazkov@chromium.org>

        Reviewed by Adam Barth.

        Using inlines and function-level statics don't mix, according to gcc.
        https://bugs.webkit.org/show_bug.cgi?id=34663

        De-inline deviceRGBColorSpaceRef to avoid gcc-bug landmines.

        It appears that the initialization check, generated by gcc doesn't account
        for a possibility that the function may be inlined, resulting in lazy
        initialization failure for more than one inlined instance of the function.

        No behavior change, so no new tests.

        * platform/graphics/cg/GraphicsContextCG.cpp:
        (WebCore::deviceRGBColorSpaceRef):
        * platform/graphics/cg/GraphicsContextPlatformPrivateCG.h:

2010-02-05  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Dan Bernstein.

        Added an ASSERT to catch an implausible but theoretically possible leak.
        
        In theory, if malloc allocated a UChar buffer directly after a StringImpl,
        the StringImpl might incorrecly assume that the UChar buffer was inline,
        and fail to delete it.
        
        This ASSERT is somewhat academic, since we don't use the same allocator
        in debug builds, but oh well.

        * platform/text/StringImpl.cpp:
        (WebCore::StringImpl::StringImpl):
        (WebCore::StringImpl::createUninitialized):
        * platform/text/StringImpl.h: Separated the inline buffer StringImpl
        constructor from the out-of-line buffer StringImpl constructor. Made
        the former ASSERT that its buffer was indeed inline, and the latter ASSERT
        that its buffer was indeed not inline.

2010-02-05  Chris Marrin  <cmarrin@apple.com>

        Reviewed by Simon Fraser.

        Fixed changed virtual function in GraphicsLayerCACF and call order issues
        https://bugs.webkit.org/show_bug.cgi?id=34348
        
        The correct virtual function in GraphicsLayerCACF is now being
        called. We also fixed an issue in QTMovieWin where the size
        of the movie was not being set correctly because the call order
        was changed.
        
        I also changed the order of a couple of calls in QTMovieWin to account
        for changed calling order from the logic above.

        * platform/graphics/win/GraphicsLayerCACF.cpp:Update to new virtual function API
        (WebCore::GraphicsLayerCACF::setContentsToMedia):
        (WebCore::GraphicsLayerCACF::updateContentsMedia):
        * platform/graphics/win/GraphicsLayerCACF.h:Update to new virtual function API
        (WebCore::GraphicsLayerCACF::):
        * platform/graphics/win/QTMovieWin.cpp:
        (QTMovieWinPrivate::cacheMovieScale):Fix a bug where ratio was computed wrong because it was using integer math
        (QTMovieWinPrivate::task):Compute movie scale before computing movie size so values are correct
        (QTMovieWinPrivate::setSize):Move movie size update to updateMovieSize()
        (QTMovieWinPrivate::updateMovieSize):Wrap size update in a new call so it can be used from multiple places

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

        Reviewed by Simon Fraser.

        Horizontal scrollbar works in reverse at milliondollarcu.be
        <rdar://problem/7556121>
        https://bugs.webkit.org/show_bug.cgi?id=33848
        
        Added a manual test.

        * manual-tests/win: Added.
        * manual-tests/win/horizontal-scroll-composited.html: Added.
        * platform/graphics/win/WKCACFLayerRenderer.cpp:
        (WebCore::WKCACFLayerRenderer::setScrollFrame):
        (WebCore::WKCACFLayerRenderer::setRootChildLayer):

2010-02-05  Ryan Leavengood  <leavengood@gmail.com>

        Reviewed by David Levin.

        Implementation of GlyphPage::fill() for Haiku port.
        https://bugs.webkit.org/show_bug.cgi?id=34527

        Covered by existing tests.

        * platform/graphics/haiku/GlyphPageTreeNodeHaiku.cpp

2010-01-19  Kenneth Rohde Christiansen  <kenneth@webkit.org>

        Reviewed by Dave Hyatt.

        Implement flattening of framesets
        https://bugs.webkit.org/show_bug.cgi?id=32717

        The following patch, builds ontop of Antti Koivisto's frameset
        flattening code from the iPhone source, which itself is based on
        the old Nokia Series 60 source.

        Layout tests have been added to test the functionality and the original
        code which has then been fixed to make these pass, as well as support
        frameset grids.

        Tests: fast/frames/flattening/frameset-flattening-advanced.html
               fast/frames/flattening/frameset-flattening-grid.html
               fast/frames/flattening/frameset-flattening-simple.html
               fast/frames/flattening/frameset-flattening-subframe-resize.html
               fast/frames/flattening/frameset-flattening-subframesets.html

        * page/FrameView.cpp:
        (WebCore::FrameView::layout):
        (WebCore::FrameView::scheduleRelayout):
        * page/Settings.cpp:
        (WebCore::Settings::Settings):
        (WebCore::Settings::setFrameSetFlatteningEnabled):
        * page/Settings.h:
        (WebCore::Settings::frameSetFlatteningEnabled):
        * rendering/RenderFrame.cpp:
        (WebCore::RenderFrame::layoutWithFlattening):
        * rendering/RenderFrame.h:
        * rendering/RenderFrameSet.cpp:
        (WebCore::RenderFrameSet::layout):
        (WebCore::RenderFrameSet::positionFramesWithFlattening):
        (WebCore::RenderFrameSet::flattenFrameSet):
        (WebCore::RenderFrameSet::userResize):
        * rendering/RenderFrameSet.h:

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

        Reviewed by Dan Bernstein.

        Changing display type of parent of input on focus causes input field to not receive key events
        https://bugs.webkit.org/show_bug.cgi?id=34620
        <rdar://problem/7584572>
        
        When layout affects a text input, the RenderTextControl gets destroyed and
        recreated, which in turn makes a new innerTextElement. However, if the text field was
        focused, the VisibleSelection is left pointing to the old innerTextElement, so text
        input no longer works.
        
        The fix is to call updateFocusAppearanceSoon() when attaching the input element,
        which will update the selection if necessary.

        Test: fast/forms/restore-selection-after-layout.html

        * dom/Document.h: Add a paramter to updateFocusAppearanceSoon() and a member variable,
        m_updateFocusAppearanceRestoresSelection, to store its value until the timer fires.
        * dom/Document.cpp:
        (WebCore::Document::Document): Initialize m_updateFocusAppearanceRestoresSelection
        (WebCore::Document::updateFocusAppearanceSoon): New restorePreviousSelection parameter.
        (WebCore::Document::updateFocusAppearanceTimerFired): Pass m_updateFocusAppearanceRestoresSelection down.
        * dom/Element.cpp:
        (WebCore::Element::attach): Call updateFocusAppearanceSoon() with false.
        * dom/Element.h: The updateFocusAppearanceSoonAfterAttach() was undefined.
        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::attach): Call document()->updateFocusAppearanceSoon() with true.

2010-02-05  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Timothy Hatcher.

        Web Inspector: simplify cookies view, introduce DataGrid::autoSizeColumns.

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

        * inspector/front-end/CookieItemsView.js:
        (WebInspector.CookieItemsView):
        (WebInspector.CookieItemsView.prototype.show):
        (WebInspector.CookieItemsView.prototype._update):
        (WebInspector.CookieItemsView.prototype._updateWithCookies):
        (WebInspector.CookieItemsView.prototype._filterCookiesForDomain):
        (WebInspector.CookieItemsView.prototype._createDataGrid):
        (WebInspector.CookieItemsView.prototype._populateDataGrid.expiresCompare):
        (WebInspector.CookieItemsView.prototype._populateDataGrid):
        (WebInspector.CookieItemsView.prototype._createSimpleDataGrid):
        (WebInspector.CookieItemsView.prototype._populateSimpleDataGrid):
        (WebInspector.CookieItemsView.prototype._deleteCookieCallback):
        (WebInspector.CookieItemsView.prototype._refreshButtonClicked):
        * inspector/front-end/DOMStorageItemsView.js:
        (WebInspector.DOMStorageItemsView.prototype._showDOMStorageEntries):
        (WebInspector.DOMStorageItemsView.prototype._dataGridForDOMStorageEntries):
        * inspector/front-end/DataGrid.js:
        (WebInspector.DataGrid):
        (WebInspector.DataGrid.prototype.autoSizeColumns):
        * inspector/front-end/DatabaseQueryView.js:
        (WebInspector.DatabaseQueryView.prototype._queryFinished):
        * inspector/front-end/DatabaseTableView.js:
        (WebInspector.DatabaseTableView.prototype._queryFinished):
        * inspector/front-end/StoragePanel.js:
        (WebInspector.StoragePanel.prototype.dataGridForResult):

2010-02-04  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Timothy Hatcher.

        Web Inspector: group cookies by frame, show total
        cookies size, allow sorting cookie table.

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

        * English.lproj/localizedStrings.js:
        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::deleteCookie):
        * inspector/front-end/CookieItemsView.js:
        (WebInspector.CookieItemsView):
        (WebInspector.CookieItemsView.prototype.update):
        (WebInspector.CookieItemsView.prototype._updateWithCookies):
        (WebInspector.CookieItemsView.prototype._cookiesForDomain):
        (WebInspector.CookieItemsView.prototype.dataGridForCookies):
        (WebInspector.CookieItemsView.prototype._createNodes):
        (WebInspector.CookieItemsView.prototype._sortData.localeCompare):
        (WebInspector.CookieItemsView.prototype._sortData.numberCompare):
        (WebInspector.CookieItemsView.prototype._sortData.expiresCompare):
        (WebInspector.CookieItemsView.prototype._sortData):
        * inspector/front-end/StoragePanel.js:
        (WebInspector.StoragePanel.prototype.showCookies):
        (WebInspector.CookieSidebarTreeElement):
        (WebInspector.CookieSidebarTreeElement.prototype.onselect):
        (WebInspector.CookieSidebarTreeElement.prototype.get subtitle):
        (WebInspector.CookieSidebarTreeElement.prototype.set subtitle):
        * inspector/front-end/inspector.js:
        (WebInspector.updateResource):

2010-02-05  Maxime Simone  <simon.maxime@gmail.com>

        Reviewed by David Levin.

        More robust conversion from BString to String for Haiku port.
        https://bugs.webkit.org/show_bug.cgi?id=34527

        Covered by existing tests.

        * platform/text/haiku/StringHaiku.cpp: Fixed include order, Improved coversion from BString.

2010-02-05  Steve Falkenburg  <sfalken@apple.com>

        Reviewed by Adam Roben.

        Windows build fix.

        * WebCore.vcproj/WebCore.make:

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

        Reviewed by Dirk Schulze.
        Rubber-stamped by Kenneth Rohde Christiansen.

        [Qt] Modifying SVG path dumping to equal to other ports
        https://bugs.webkit.org/show_bug.cgi?id=33784

        * platform/graphics/qt/PathQt.cpp:
        (WebCore::Path::debugString): Path dumping style is aproached to Mac.

2010-02-05  Sebastian Dröge  <sebastian.droege@collabora.co.uk>

        Reviewed by Gustavo Noronha.

        Add a GStreamer HTTP/HTTPS source, using WebKit infrastructure
        https://bugs.webkit.org/show_bug.cgi?id=34317

        * GNUmakefile.am:
        * platform/graphics/gtk/MediaPlayerPrivateGStreamer.cpp:
        (WebCore::mediaPlayerPrivateSourceChangedCallback):
        (WebCore::doGstInit):
        * platform/graphics/gtk/WebKitWebSourceGStreamer.cpp:
        * platform/graphics/gtk/WebKitWebSourceGStreamer.h:
        Add a GStreamer HTTP/HTTPS source, using the WebKit infrastructure.
        This makes sure that referer, cookies, authentication information
        and all kinds of other context are passed to GStreamer for websites
        like Vimeo or YouTube.

2010-02-05  Nate Chapin  <japhet@chromium.org>

        Reviewed by Dimitri Glazkov.

        [V8] Clean up code for getting a v8::FunctionTemplate.
        
        https://bugs.webkit.org/show_bug.cgi?id=34606

        * bindings/scripts/CodeGeneratorV8.pm: Making GetTemplate() public
        * bindings/v8/V8Binding.cpp:
        (WebCore::configureTemplate):
        * bindings/v8/V8DOMWrapper.cpp: Remove getTemplate(), use V8ClassIndex::getTemplate() instead.
        (WebCore::V8DOMWrapper::getConstructor):
        (WebCore::V8DOMWrapper::instantiateV8Object):
        * bindings/v8/V8DOMWrapper.h:
        (WebCore::V8DOMWrapper::lookupDOMWrapper):
        * bindings/v8/V8Index.cpp: Remove duplicate caching of FunctionTemplates.
        (WebCore::V8ClassIndex::getTemplate):
        * bindings/v8/V8Index.h:
        * bindings/v8/WorkerContextExecutionProxy.cpp:
        (WebCore::WorkerContextExecutionProxy::toV8):
        * bindings/v8/custom/V8HTMLAudioElementConstructor.cpp:
        (WebCore::v8HTMLAudioElementConstructorCallback):
        (WebCore::V8HTMLAudioElementConstructor::GetTemplate):
        * bindings/v8/custom/V8HTMLAudioElementConstructor.h:
        * bindings/v8/custom/V8HTMLImageElementConstructor.cpp:
        (WebCore::v8HTMLImageElementConstructorCallback):
        (WebCore::V8HTMLImageElementConstructor::GetTemplate):
        * bindings/v8/custom/V8HTMLImageElementConstructor.h:
        * bindings/v8/custom/V8HTMLOptionElementConstructor.cpp:
        (WebCore::v8HTMLOptionElementConstructorCallback):
        (WebCore::V8HTMLOptionElementConstructor::GetTemplate):
        * bindings/v8/custom/V8HTMLOptionElementConstructor.h:
        * bindings/v8/custom/V8InjectedScriptHostCustom.cpp:
        (WebCore::createInjectedScriptHostV8Wrapper):

2010-02-05  Siddharth Mathur  <siddharth.mathur@nokia.com>

        Reviewed by Ariya Hidayat.

        [Qt] Build break in QtWebkit on Symbian
        https://bugs.webkit.org/show_bug.cgi?id=34597

        * plugins/PluginView.h:

2010-02-05  Yury Semikhatsky  <yurys@chromium.org>

        Reviewed by Pavel Feldman.

        - Use SerializedScriptValue for passing data between injected script and
        inspector frontend.
        - Remove custom JSON implementation from the instpector utility script.
        - Make sure that only objects created in the same ScriptState can be values
        of ScriptObject/Array properties and arguments to ScriptFunctionCall. We don't
        want ScriptObjects to leak between contexts.
        - Use ScriptState of the 'this' object in ScriptFunctionCall instead of passing
        it as additional parameter.

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

        * bindings/js/JSInjectedScriptHostCustom.cpp:
        (WebCore::JSInjectedScriptHost::reportDidDispatchOnInjectedScript):
        * bindings/js/ScriptArray.cpp:
        (WebCore::ScriptArray::set):
        * bindings/js/ScriptFunctionCall.cpp:
        (WebCore::ScriptFunctionCall::ScriptFunctionCall):
        (WebCore::ScriptFunctionCall::appendArgument):
        * bindings/js/ScriptFunctionCall.h:
        * bindings/js/ScriptObject.cpp:
        (WebCore::ScriptObject::set):
        * bindings/js/ScriptValue.cpp:
        (WebCore::ScriptValue::serialize):
        (WebCore::ScriptValue::deserialize):
        * bindings/js/ScriptValue.h:
        * bindings/v8/ScriptArray.cpp:
        (WebCore::ScriptArray::set):
        * bindings/v8/ScriptFunctionCall.cpp:
        (WebCore::ScriptFunctionCall::ScriptFunctionCall):
        (WebCore::ScriptFunctionCall::appendArgument):
        * bindings/v8/ScriptFunctionCall.h:
        * bindings/v8/ScriptObject.cpp:
        (WebCore::ScriptObject::set):
        * bindings/v8/ScriptState.h:
        * bindings/v8/ScriptValue.cpp:
        (WebCore::ScriptValue::serialize):
        (WebCore::deserialize):
        * bindings/v8/ScriptValue.h:
        * bindings/v8/custom/V8InjectedScriptHostCustom.cpp:
        (WebCore::V8InjectedScriptHost::reportDidDispatchOnInjectedScriptCallback):
        * inspector/InjectedScript.cpp:
        (WebCore::InjectedScript::dispatch):
        (WebCore::InjectedScript::callFrames):
        (WebCore::InjectedScript::wrapForConsole):
        (WebCore::InjectedScript::releaseWrapperObjectGroup):
        * inspector/InjectedScript.h:
        * inspector/InjectedScriptHost.cpp:
        (WebCore::InjectedScriptHost::reportDidDispatchOnInjectedScript):
        * inspector/InjectedScriptHost.h:
        * inspector/InjectedScriptHost.idl:
        * inspector/InspectorBackend.cpp:
        (WebCore::InspectorBackend::dispatchOnInjectedScript):
        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::setFrontendProxyObject):
        (WebCore::InspectorController::didPause):
        (WebCore::InspectorController::didEvaluateForTestInFrontend):
        * inspector/InspectorFrontend.cpp:
        (WebCore::InspectorFrontend::InspectorFrontend):
        (WebCore::InspectorFrontend::newScriptArray):
        (WebCore::InspectorFrontend::newScriptObject):
        (WebCore::InspectorFrontend::populateFrontendSettings):
        (WebCore::InspectorFrontend::updateConsoleMessageExpiredCount):
        (WebCore::InspectorFrontend::addConsoleMessage):
        (WebCore::InspectorFrontend::updateConsoleMessageRepeatCount):
        (WebCore::InspectorFrontend::updateResource):
        (WebCore::InspectorFrontend::removeResource):
        (WebCore::InspectorFrontend::didGetResourceContent):
        (WebCore::InspectorFrontend::updateFocusedNode):
        (WebCore::InspectorFrontend::setAttachedWindow):
        (WebCore::InspectorFrontend::addRecordToTimeline):
        (WebCore::InspectorFrontend::parsedScriptSource):
        (WebCore::InspectorFrontend::failedToParseScriptSource):
        (WebCore::InspectorFrontend::addProfileHeader):
        (WebCore::InspectorFrontend::setRecordingProfile):
        (WebCore::InspectorFrontend::didGetProfileHeaders):
        (WebCore::InspectorFrontend::didGetProfile):
        (WebCore::InspectorFrontend::pausedScript):
        (WebCore::InspectorFrontend::setDocument):
        (WebCore::InspectorFrontend::setDetachedRoot):
        (WebCore::InspectorFrontend::setChildNodes):
        (WebCore::InspectorFrontend::childNodeCountUpdated):
        (WebCore::InspectorFrontend::childNodeInserted):
        (WebCore::InspectorFrontend::childNodeRemoved):
        (WebCore::InspectorFrontend::attributesUpdated):
        (WebCore::InspectorFrontend::didRemoveNode):
        (WebCore::InspectorFrontend::didGetChildNodes):
        (WebCore::InspectorFrontend::didApplyDomChange):
        (WebCore::InspectorFrontend::didGetEventListenersForNode):
        (WebCore::InspectorFrontend::didGetCookies):
        (WebCore::InspectorFrontend::didDispatchOnInjectedScript):
        (WebCore::InspectorFrontend::addDatabase):
        (WebCore::InspectorFrontend::selectDatabase):
        (WebCore::InspectorFrontend::didGetDatabaseTableNames):
        (WebCore::InspectorFrontend::addDOMStorage):
        (WebCore::InspectorFrontend::selectDOMStorage):
        (WebCore::InspectorFrontend::didGetDOMStorageEntries):
        (WebCore::InspectorFrontend::didSetDOMStorageItem):
        (WebCore::InspectorFrontend::didRemoveDOMStorageItem):
        (WebCore::InspectorFrontend::updateDOMStorage):
        (WebCore::InspectorFrontend::addNodesToSearchResult):
        (WebCore::InspectorFrontend::contextMenuItemSelected):
        (WebCore::InspectorFrontend::evaluateForTestInFrontend):
        (WebCore::InspectorFrontend::callSimpleFunction):
        * inspector/InspectorFrontend.h:
        (WebCore::InspectorFrontend::scriptState):
        * inspector/front-end/InjectedScript.js:
        (injectedScriptConstructor):
        (injectedScriptConstructor.):
        * inspector/front-end/InjectedScriptAccess.js:
        (InjectedScriptAccess._installHandler.InjectedScriptAccess.prototype.methodName.myCallback):
        (InjectedScriptAccess._installHandler.InjectedScriptAccess.prototype.methodName):
        (InjectedScriptAccess._installHandler):
        * inspector/front-end/inspector.js:
        (WebInspector.pausedScript):
        (WebInspector.addConsoleMessage):

2010-02-05  Tor Arne Vestbø  <tor.arne.vestbo@nokia.com>

        Reviewed by Simon Hausmann.

        [Qt] Generate convenience headers (QWebView, etc) using qmake

        In Qt this is done using syncqt, but we use a pro-file instead
        that generates makefile-rules for each of the extra headers.

        These extra headers are installed alongside the normal headers.

        * WebCore.pro: Use headers.pri based on DerivedSources instead
        of the one previously checked in in the source tree.

2010-02-05  Mikhail Naganov  <mnaganov@chromium.org>

        Reviewed by Pavel Feldman.

        Enable JAVASCRIPT_DEBUGGER in chromium port.

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

        * page/Console.cpp:
        * page/Console.h:
        * page/Console.idl:

2010-02-05  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Timothy Hatcher.

        Web Inspector: Tab width for javascript source is 8, should be 4

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

        * inspector/front-end/SourceFrame.js:
        (WebInspector.SourceFrame):
        * inspector/front-end/TextEditorModel.js:
        (WebInspector.TextEditorModel.prototype.set replaceTabsWithSpaces):
        (WebInspector.TextEditorModel.prototype._innerSetText):
        (WebInspector.TextEditorModel.prototype._replaceTabsIfNeeded):

2010-02-05  Tony Chang  <tony@chromium.org>

        Reviewed by Eric Seidel.

        https://bugs.webkit.org/show_bug.cgi?id=24872
        When pasting a list into another list should not indent another level.
        If the cursor is at the beginning of the line, it should insert the
        list items before the current list item.  If the cursor is at the end
        of the line, it should insert the list items after the current list item.

        This matches Firefox and IE and makes the common activity of reordering a list
        work as expected.

        This also adds a small helper method (isListItem) to htmlediting.h.

        Test: editing/pasteboard/paste-list-002.html

        * editing/ReplaceSelectionCommand.cpp:
        (WebCore::ReplaceSelectionCommand::doApply):
        (WebCore::ReplaceSelectionCommand::insertAsListItems):
        * editing/ReplaceSelectionCommand.h:
        * editing/htmlediting.cpp:
        (WebCore::isListItem):
        (WebCore::appendedSublist):
        * editing/htmlediting.h:

2010-02-04  Mark Rowe  <mrowe@apple.com>

        Reviewed by Timothy Hatcher.

        Build fix.  Remove a symbol corresponding to an inline function from the linker export
        file to prevent a weak external failure.

        * WebCore.base.exp: Remove symbol.
        * WebCore.xcodeproj/project.pbxproj: Accommodate rename of script.

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

        Reviewed by Oliver Hunt.

        Updated to use new WeakGCPtr::clear interface.

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

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

        Build fix: Added a forwarding header.

        * ForwardingHeaders/runtime/WeakGCPtr.h: Added.

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

        Reviewed by Alexey Proskuryakov and Darin Adler.

        REGRESSION (r52082): Missing event handlers on JQuery demo page (33383)
        https://bugs.webkit.org/show_bug.cgi?id=33383
        <rdar://problem/7559449>
        
        There were two bugs here:
        
        1. A stale wrapper would invalidate a node's event listeners, even if
        the node had a fresh wrapper keeping it alive.
        
        The fix for this is for an event listener to keep a WeakGCPtr back-pointer
        to the wrapper it expects to mark it. The wrapper destructor checks this
        back-pointer, and only invalidates the event listener in the case of a match.

        2. Conversely, a stale wrapper would not invalidate a node's event
        listeners soon enough, if its destructor didn't have a chance to run
        before an event fired on the node. (This can only happen in cases where
        we've made some other error and failed to mark a wrapper that was circuitously
        observable in the DOM. But we know we have edge case bugs like this, and
        we don't want them to be crashes.)
        
        The fix for this is to check the wrapper back-pointer before firing the
        event listener. As long as the the wrapper back-pointer is not null,
        it's safe to fire the listener. 

        * ForwardingHeaders/runtime/WeakGCPtr.h: Added. Appease build gods.

        * bindings/js/JSAbstractWorkerCustom.cpp:
        (WebCore::JSAbstractWorker::addEventListener):
        (WebCore::JSAbstractWorker::removeEventListener):
        * bindings/js/JSDOMApplicationCacheCustom.cpp:
        (WebCore::JSDOMApplicationCache::addEventListener):
        (WebCore::JSDOMApplicationCache::removeEventListener):
        * bindings/js/JSDOMWindowCustom.cpp:
        (WebCore::JSDOMWindow::markChildren):
        (WebCore::JSDOMWindow::addEventListener):
        (WebCore::JSDOMWindow::removeEventListener): Updated to pass a wrapper
        to the JSEventListener constructor.

        * bindings/js/JSEventListener.cpp:
        (WebCore::JSEventListener::JSEventListener):
        (WebCore::JSEventListener::initializeJSFunction):
        (WebCore::JSEventListener::invalidateJSFunction):
        * bindings/js/JSEventListener.h:
        (WebCore::JSEventListener::create):
        (WebCore::JSEventListener::isolatedWorld):
        (WebCore::JSEventListener::wrapper):
        (WebCore::JSEventListener::setWrapper):
        (WebCore::JSEventListener::jsFunction):
        (WebCore::createJSAttributeEventListener): Implemented the back-pointer
        described above. Refactored the jsFunction() accessor to return 0 if
        the wrapper back-pointer is 0.

        * bindings/js/JSEventSourceCustom.cpp:
        (WebCore::JSEventSource::addEventListener):
        (WebCore::JSEventSource::removeEventListener):
        * bindings/js/JSLazyEventListener.cpp:
        (WebCore::JSLazyEventListener::JSLazyEventListener):
        (WebCore::JSLazyEventListener::initializeJSFunction):
        * bindings/js/JSLazyEventListener.h:
        (WebCore::JSLazyEventListener::create):
        * bindings/js/JSMessagePortCustom.cpp:
        (WebCore::JSMessagePort::markChildren):
        (WebCore::JSMessagePort::addEventListener):
        (WebCore::JSMessagePort::removeEventListener):
        * bindings/js/JSNodeCustom.cpp:
        (WebCore::JSNode::addEventListener):
        (WebCore::JSNode::removeEventListener):
        (WebCore::JSNode::markChildren):
        * bindings/js/JSSVGElementInstanceCustom.cpp:
        (WebCore::JSSVGElementInstance::addEventListener):
        (WebCore::JSSVGElementInstance::removeEventListener):
        * bindings/js/JSWebSocketCustom.cpp:
        (WebCore::JSWebSocket::addEventListener):
        (WebCore::JSWebSocket::removeEventListener):
        * bindings/js/JSWorkerContextCustom.cpp:
        (WebCore::JSWorkerContext::markChildren):
        (WebCore::JSWorkerContext::addEventListener):
        (WebCore::JSWorkerContext::removeEventListener):
        * bindings/js/JSXMLHttpRequestCustom.cpp:
        (WebCore::JSXMLHttpRequest::markChildren):
        (WebCore::JSXMLHttpRequest::addEventListener):
        (WebCore::JSXMLHttpRequest::removeEventListener):
        * bindings/js/JSXMLHttpRequestUploadCustom.cpp:
        (WebCore::JSXMLHttpRequestUpload::markChildren):
        (WebCore::JSXMLHttpRequestUpload::addEventListener):
        (WebCore::JSXMLHttpRequestUpload::removeEventListener): Updated to pass a wrapper
        to the JSEventListener constructor.


        * bindings/js/ScriptEventListener.cpp:
        (WebCore::createAttributeEventListener): Updated to pass a wrapper
        to the JSEventListener constructor.
        (WebCore::getEventListenerHandlerBody): Updated for the fact that jsFunction()
        is no longer a virtual accessor on the EventHandler base class.

        * bindings/scripts/CodeGeneratorJS.pm: Updated for the fact that jsFunction()
        is no longer a virtual accessor on the EventHandler base class. Added a "JS"
        to invalidateEventListeners and markEventListeners to clarify that these
        actions are for JS event listeners only. Added a wrapper parameter to
        invalidateEventListeners for the back-pointer check explained above.

        * dom/EventListener.h:
        (WebCore::EventListener::invalidateJSFunction): ditto

        * dom/EventTarget.h:
        (WebCore::EventTarget::markJSEventListeners):
        (WebCore::EventTarget::invalidateJSEventListeners): ditto

2010-02-04  Tony Chang  <tony@chromium.org>

        Reviewed by Eric Seidel.

        https://bugs.webkit.org/show_bug.cgi?id=25002
        When inserting a new paragraph, avoid nesting empty divs.  When
        pasting near the end of a paragraph, this prevents each paste
        command for getting nested one level deeper.

        Test: editing/inserting/paragraph-outside-nested-divs.html

        * editing/InsertParagraphSeparatorCommand.cpp:
        (WebCore::highestVisuallyEquivalentDiv):
        (WebCore::InsertParagraphSeparatorCommand::doApply):

2010-02-04  Dumitru Daniliuc  <dumi@chromium.org>

        Reviewed by Eric Seidel.

        1. Fix a bug in SQLiteTransaction: do not assume that COMMIT always
        succeeds.
        2. Jump straight to the transaction error callback when a
        statement fails in a way that makes sqlite automatically rollback
        the transaction.
        3. Fix the code that handles the "quota reached" failure, as it is
        one of the failures that lead to an automatic transaction
        rollback.

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

        * platform/sql/SQLiteDatabase.cpp:
        (WebCore::SQLiteDatabase::isAutoCommitOn):
        * platform/sql/SQLiteDatabase.h:
        * platform/sql/SQLiteTransaction.cpp:
        (WebCore::SQLiteTransaction::begin):
        (WebCore::SQLiteTransaction::commit):
        (WebCore::SQLiteTransaction::rollback):
        (WebCore::SQLiteTransaction::transactionWasRolledBackBySqlite):
        * platform/sql/SQLiteTransaction.h:
        * storage/SQLTransaction.cpp:
        (WebCore::SQLTransaction::SQLTransaction):
        (WebCore::SQLTransaction::runStatements):
        (WebCore::SQLTransaction::runCurrentStatement):
        (WebCore::SQLTransaction::handleCurrentStatementError):
        (WebCore::SQLTransaction::deliverQuotaIncreaseCallback):

2010-02-04  Peter Kasting  <pkasting@google.com>

        Not reviewed, rollback.

        Rollback r54387, it doesn't fix builds and Chromium doesn't want this behavior.

        * platform/chromium/ScrollbarThemeChromiumMac.h:

2010-02-04  Stephen White  <senorblanco@chromium.org>

        Unreviewed, build fix.

        Fix for Chromium/Mac after palindromic scrollbar change (54345).

        Covered by many layout tests.

        * platform/chromium/ScrollbarThemeChromiumMac.h:
        (WebCore::ScrollbarThemeChromiumMac::maxOverlapBetweenPages):

2010-02-04  Clemmitt Sigler  <cmsigler@gmail.com>

        Reviewed by David Levin.

        WebKitGTK doesn't build GtkLauncher when --enable-mathml is specified.
        Updated WebCore/GNUmakefile.am to include needed files in build.
        
        https://bugs.webkit.org/show_bug.cgi?id=34387

        No new tests.

        * GNUmakefile.am:

2010-02-04  Stephan Aßmus  <superstippi@gmx.de>

        Reviewed by David Levin.

        Misc coding style fixes in Haiku port code.
        https://bugs.webkit.org/show_bug.cgi?id=34527

        No tests needed.

        * platform/haiku/ContextMenuItemHaiku.cpp: Trailing white space, NULL -> 0
        * platform/haiku/DragImageHaiku.cpp: Trailing white space.
        * platform/haiku/FileChooserHaiku.cpp: Sorted headers.
        * platform/haiku/LocalizedStringsHaiku.cpp: Needed to include NotImplemented.h

2010-02-04  Enrica Casucci  <enrica@apple.com>

        Reviewed by Csaba Osztrogonac.

        Fixed crash on QT introduced with the fix for
        https://bugs.webkit.org/show_bug.cgi?id=34609

        The test has been added with the original patch.
        
        * platform/qt/ClipboardQt.cpp:
        (WebCore::ClipboardQt::writePlainText): Added missing allocation of m_writeData.

2010-02-04  Christian Dywan  <christian@twotoasts.de>

        Reviewed by Xan Lopez.

        Conditionalize third party cookie policy for libsoup 2.29.90.

        * platform/network/soup/CookieJarSoup.cpp:
        (WebCore::setCookies):
        * platform/network/soup/DNSSoup.cpp:
        (WebCore::prefetchDNS):
        * platform/network/soup/ResourceHandleSoup.cpp:
        (WebCore::restartedCallback):
        (WebCore::startHttp):
        * platform/network/soup/ResourceRequestSoup.cpp:
        (WebCore::ResourceRequest::toSoupMessage):
        (WebCore::ResourceRequest::updateFromSoupMessage):

2010-02-04  Christian Dywan  <christian@twotoasts.de>

        Rubber-stamped by Gustavo Noronha Silva.

        Add ENABLE(VIDEO) guards around freeOwnedGPtr<GstElement> implementation.

        * platform/gtk/GOwnPtrGtk.cpp:

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

        Reviewed by Darin Adler.

        Assertion failure in CheckedRadioButtons::removeButton when using jQuery 1.4.1
        https://bugs.webkit.org/show_bug.cgi?id=34520

        Test: fast/dom/HTMLInputElement/cloned-input-checked-state.html

        * dom/Element.cpp: (WebCore::Element::cloneElementWithoutChildren): Copy non-attribute
        properties before attributes. Otherwise, copying "checked" attribute would make the cloned
        node checked, unchecking original (they share a name, and are thus in the same radio group).
        We do want the original to be unchecked, but we also want to know its original state in
        HTMLInputElement::copyNonAttributeProperties().

        * html/HTMLInputElement.cpp: (WebCore::HTMLInputElement::copyNonAttributeProperties):
        Use setChecked instead of plain assignment to prevent m_checked getting out of sync with
        checkedRadioButtons. Also, copy field related to default checked state, so that m_checked
        won't be overridden when copying attributes.

2010-02-04  Kevin Ollivier  <kevino@theolliviers.com>

        [wx] Build fix after addition of Clipboard::writePlainText method.

        * platform/wx/ClipboardWx.cpp:
        (WebCore::ClipboardWx::writePlainText):
        * platform/wx/ClipboardWx.h:

2010-02-04  Enrica Casucci  <enrica@apple.com>

        Reviewed by Oliver Hunt.

        REGRESSION: Dragging plain text into a styled text region does not acquire the correct style info.
        <rdar://problem/7595685>
        https://bugs.webkit.org/show_bug.cgi?id=34609

        Test: editing/pasteboard/drop-inputtext-acquires-style.html

        The dragging code did not distinguish the case of dragging the content of an input control
        as a special case. The markup placed in the pasteboard included the style information.
        I've modified the Clipboard class interface adding a new method writePlainText to match the
        behavior of the copy and cut commands and modified the drag code to detect the special case.
        I've modified all the platform specific implementations of the Clipboard class.
        
        * dom/Clipboard.h: Added writePlainText pure virtual function.
        * editing/Editor.cpp:
        (WebCore::Editor::cut): Renamed nodeIsTextFormControl to isNodeInTextFormControl.
        (WebCore::Editor::copy): Renamed nodeIsTextFormControl to isNodeInTextFormControl.
        * editing/htmlediting.cpp:
        (WebCore::isNodeInTextFormControl): Added, after removing the implementation with the old name
        in Editor.cpp
        * editing/htmlediting.h:
        * page/DragController.cpp:
        (WebCore::DragController::startDrag):
        * platform/Pasteboard.h:
        * platform/android/ClipboardAndroid.cpp:
        (WebCore::ClipboardAndroid::writePlainText): Added.
        * platform/android/ClipboardAndroid.h:
        * platform/chromium/ClipboardChromium.cpp:
        (WebCore::ClipboardChromium::writePlainText): Added.
        * platform/chromium/ClipboardChromium.h:
        * platform/gtk/ClipboardGtk.cpp:
        (WebCore::ClipboardGtk::writePlainText): Added.
        * platform/gtk/ClipboardGtk.h:
        * platform/haiku/ClipboardHaiku.cpp:
        (WebCore::ClipboardHaiku::writePlainText): Added.
        * platform/haiku/ClipboardHaiku.h:
        * platform/mac/ClipboardMac.h:
        * platform/mac/ClipboardMac.mm:
        (WebCore::ClipboardMac::writePlainText): Added.
        * platform/mac/PasteboardMac.mm:
        (WebCore::Pasteboard::writePlainText): Added helper function.
        * platform/qt/ClipboardQt.cpp:
        (WebCore::ClipboardQt::writePlainText): Added.
        * platform/qt/ClipboardQt.h:
        * platform/win/ClipboardWin.cpp:
        (WebCore::ClipboardWin::writePlainText): Added.
        * platform/win/ClipboardWin.h:

2010-02-04  Steve Block  <steveblock@google.com>

        Reviewed by Nate Chapin.

        Fix bug in V8 convertNPVariantToJValue when converting float and double types
        https://bugs.webkit.org/show_bug.cgi?id=34593

        No new tests, build fix only.

        * bridge/jni/v8/JNIUtilityPrivate.cpp: Modified.
        (JSC::Bindings::convertNPVariantToJValue): Modified. Use correct members of 'result' enum.

2010-02-04  Chris Guillory  <chris.guillory@google.com>

        Reviewed by Darin Fisher.

        [Chromium] Notify ChromeClientChromium of AccessibilityObject state
        change notifications.
        
        https://bugs.webkit.org/show_bug.cgi?id=34464

        * accessibility/chromium/AXObjectCacheChromium.cpp:
        (WebCore::toChromeClientChromium):
        (WebCore::AXObjectCache::postPlatformNotification):
        * page/chromium/ChromeClientChromium.h:

2010-02-04  Stephen White  <senorblanco@chromium.org>

        Unreviewed, build fix for Chromium.

        Revert r54341 ("[v8] Remove clear method from DOM object maps"),
        since it causes the worker tests to fail on Chromium.

        * bindings/v8/DOMData.h:
        (WebCore::DOMData::removeObjectsFromWrapperMap):
        * bindings/v8/DOMDataStore.h:
        (WebCore::ChunkedTable::clear):
        (WebCore::ChunkedTable::clearEntries):
        (WebCore::DOMDataStore::IntrusiveDOMWrapperMap::clear):
        (WebCore::DOMDataStore::IntrusiveDOMWrapperMap::ChunkedTableTraits::clear):
        * bindings/v8/V8DOMMap.cpp:
        (WebCore::removeAllDOMObjectsInCurrentThreadHelper):
        (WebCore::removeAllDOMObjectsInCurrentThread):
        * bindings/v8/V8DOMMap.h:
        (WebCore::WeakReferenceMap::clear):
        * bindings/v8/WorkerScriptController.cpp:
        (WebCore::WorkerScriptController::~WorkerScriptController):

2010-02-04  Gustavo Noronha Silva  <gustavo.noronha@collabora.co.uk>

        Reviewed by Xan Lopez.

        [GTK] Crashes when an invalid hostname is pre-fetched
        https://bugs.webkit.org/show_bug.cgi?id=34602

        * platform/network/soup/DNSSoup.cpp:
        (WebCore::prefetchDNS): NULL-check the SoupURI that is created
        from the hostname; that will happen for invalid hostnames.

2010-02-04  José Millán Soto  <jmillan@igalia.com>

        Reviewed by Xan Lopez.

        [Gtk] webkitgtk crashed when Orca open
        https://bugs.webkit.org/show_bug.cgi?id=34463

        * accessibility/gtk/AccessibilityObjectWrapperAtk.cpp:
        (textForObject):
        Checking if render objects are texts before calling toRenderText

2010-02-04  Xan Lopez  <xlopez@igalia.com>

        Reviewed by Gustavo Noronha.

        Set first party URI in all SoupMessages. This allows libsoup to
        implement a "no third party cookies" policy in case it wants
        to. Also start a non-JSC-specific, gtk-specific GOwnPtr module and
        use it for SoupURI.

        * platform/network/soup/CookieJarSoup.cpp:
        (WebCore::setCookies):
        * platform/network/soup/ResourceHandleSoup.cpp:
        (WebCore::restartedCallback):
        (WebCore::startHttp):
        * platform/network/soup/ResourceRequestSoup.cpp:
        (WebCore::ResourceRequest::toSoupMessage):
        (WebCore::ResourceRequest::updateFromSoupMessage):

2010-02-04  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Timothy Hatcher.

        Web Inspector: group cookies by domains, not frame's domains.

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

        * inspector/front-end/CookieItemsView.js:
        (WebInspector.CookieItemsView.prototype._cookiesForDomain):
        * inspector/front-end/inspector.js:
        (WebInspector.updateResource):
        (WebInspector._addCookieDomain):

2010-02-04  Nate Chapin  <japhet@chromium.org>

        Reviewed by Dimitri Glazkov.

        [V8] Delete V8CustomBinding.h and all references to V8Custom

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

        * bindings/v8/NPV8Object.cpp:
        * bindings/v8/V8DOMWindowShell.h:
        * bindings/v8/V8NPObject.cpp:
        * bindings/v8/V8Utilities.cpp:
        * bindings/v8/custom/V8AbstractWorkerCustom.cpp:
        * bindings/v8/custom/V8AttrCustom.cpp:
        * bindings/v8/custom/V8CSSStyleDeclarationCustom.cpp:
        * bindings/v8/custom/V8CanvasRenderingContext2DCustom.cpp:
        * bindings/v8/custom/V8ClipboardCustom.cpp:
        * bindings/v8/custom/V8CoordinatesCustom.cpp:
        * bindings/v8/custom/V8CustomBinding.h: Removed.
        * bindings/v8/custom/V8DOMApplicationCacheCustom.cpp:
        * bindings/v8/custom/V8DOMWindowCustom.cpp:
        * bindings/v8/custom/V8DataGridColumnListCustom.cpp:
        * bindings/v8/custom/V8DatabaseCustom.cpp:
        * bindings/v8/custom/V8ElementCustom.cpp:
        * bindings/v8/custom/V8EventSourceConstructor.cpp:
        * bindings/v8/custom/V8EventSourceCustom.cpp:
        * bindings/v8/custom/V8GeolocationCustom.cpp:
        * bindings/v8/custom/V8HTMLAllCollectionCustom.cpp:
        * bindings/v8/custom/V8HTMLAudioElementConstructor.cpp:
        (WebCore::v8HTMLAudioElementConstructorCallback):
        (WebCore::V8HTMLAudioElementConstructor::GetTemplate):
        * bindings/v8/custom/V8HTMLCollectionCustom.cpp:
        * bindings/v8/custom/V8HTMLDataGridElementCustom.cpp:
        * bindings/v8/custom/V8HTMLFrameElementCustom.cpp:
        * bindings/v8/custom/V8HTMLIFrameElementCustom.cpp:
        * bindings/v8/custom/V8HTMLImageElementConstructor.cpp:
        (WebCore::v8HTMLImageElementConstructorCallback):
        (WebCore::V8HTMLImageElementConstructor::GetTemplate):
        * bindings/v8/custom/V8HTMLInputElementCustom.cpp:
        * bindings/v8/custom/V8HTMLOptionElementConstructor.cpp:
        (WebCore::v8HTMLOptionElementConstructorCallback):
        (WebCore::V8HTMLOptionElementConstructor::GetTemplate):
        * bindings/v8/custom/V8HTMLPlugInElementCustom.cpp:
        * bindings/v8/custom/V8HistoryCustom.cpp:
        * bindings/v8/custom/V8InspectorFrontendHostCustom.cpp:
        * bindings/v8/custom/V8LocationCustom.cpp:
        * bindings/v8/custom/V8MessagePortCustom.cpp:
        * bindings/v8/custom/V8NodeCustom.cpp:
        * bindings/v8/custom/V8NodeFilterCustom.cpp:
        * bindings/v8/custom/V8SQLResultSetRowListCustom.cpp:
        * bindings/v8/custom/V8SQLTransactionCustom.cpp:
        * bindings/v8/custom/V8SVGElementInstanceCustom.cpp:
        * bindings/v8/custom/V8SVGLengthCustom.cpp:
        * bindings/v8/custom/V8SharedWorkerCustom.cpp:
        * bindings/v8/custom/V8StorageCustom.cpp:
        * bindings/v8/custom/V8WebGLArrayBufferCustom.cpp:
        * bindings/v8/custom/V8WebGLArrayCustom.h:
        * bindings/v8/custom/V8WebGLByteArrayCustom.cpp:
        * bindings/v8/custom/V8WebGLFloatArrayCustom.cpp:
        * bindings/v8/custom/V8WebGLIntArrayCustom.cpp:
        * bindings/v8/custom/V8WebGLShortArrayCustom.cpp:
        * bindings/v8/custom/V8WebGLUnsignedByteArrayCustom.cpp:
        * bindings/v8/custom/V8WebGLUnsignedIntArrayCustom.cpp:
        * bindings/v8/custom/V8WebGLUnsignedShortArrayCustom.cpp:
        * bindings/v8/custom/V8WebKitPointConstructor.cpp:
        * bindings/v8/custom/V8WorkerContextCustom.cpp:
        * bindings/v8/custom/V8WorkerCustom.cpp:
        * bindings/v8/custom/V8XMLHttpRequestConstructor.cpp:
        * bindings/v8/custom/V8XMLHttpRequestCustom.cpp:
        * bindings/v8/custom/V8XMLHttpRequestUploadCustom.cpp:

2010-02-04  Ariya Hidayat  <ariya.hidayat@gmail.com>

        Reviewed by Simon Hausmann.

        [Qt] Unnecessary QBrush construction for doing a solid fill
        https://bugs.webkit.org/show_bug.cgi?id=34559

        Use the similar trick like r37421, i.e. use the special brush for
        solid color to avoid creating QBrush again and again.

        * platform/graphics/qt/GraphicsContextQt.cpp:
        (WebCore::GraphicsContext::setPlatformFillColor):

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

        Reviewed by Simon Fraser.

        REGRESSION (r53718): When scrolling a tall window by page, the overlap between pages is too big
        https://bugs.webkit.org/show_bug.cgi?id=34371

        Allow ScrollbarTheme to cap the overlap between pages, and set a cap of
        40 in ScrollbarThemeMac.

        * WebCore.base.exp: Export Scrollbar::maxOverlapBetweenPages().
        * editing/EditorCommand.cpp:
        (WebCore::verticalScrollDistance): Use Scrollbar methods instead of
        constants, and cap the scroll distance if needed.
        * platform/ScrollView.cpp:
        (WebCore::ScrollView::updateScrollbars): Ditto.
        (WebCore::ScrollView::wheelEvent): Ditto.
        * platform/Scrollbar.cpp:
        (WebCore::Scrollbar::maxOverlapBetweenPages): Added. Returns the
        value from the native scrollbar theme.
        * platform/Scrollbar.h: Replaced scroll amount constants with static methods.
        (WebCore::Scrollbar::pixelsPerLineStep): Replaces cScrollbarPixelsPerLineStep.
        (WebCore::Scrollbar::minFractionToStepWhenPaging): Replaces cFractionToStepWhenPaging.
        * platform/ScrollbarTheme.h:
        (WebCore::ScrollbarTheme::maxOverlapBetweenPages): A base implementation
        that returns the largest int.
        * platform/gtk/WheelEventGtk.cpp:
        (WebCore::PlatformWheelEvent::PlatformWheelEvent): Use Scrollbar methods instead of
        constants.
        * platform/haiku/PlatformWheelEventHaiku.cpp:
        (WebCore::PlatformWheelEvent::PlatformWheelEvent): Use Scrollbar methods instead of
        constants.
        * platform/mac/ScrollbarThemeMac.h:
        (WebCore::ScrollbarThemeMac::maxOverlapBetweenPages): An override
        that returns 40.
        * platform/mac/WheelEventMac.mm:
        (WebCore::PlatformWheelEvent::PlatformWheelEvent): Use
        Scrollbar::pixelsPerLineStep() instead of cScrollbarPixelsPerLineStep.
        * platform/wx/MouseWheelEventWx.cpp:
        (WebCore::PlatformWheelEvent::PlatformWheelEvent): Use Scrollbar methods instead of
        constants.
        * platform/wx/ScrollViewWx.cpp:
        (WebCore::ScrollView::ScrollViewPrivate::OnScrollWinEvents): Use Scrollbar
        methods instead of constants, and cap the scroll distance if needed.
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::updateScrollInfoAfterLayout): Ditto.

2010-02-04  No'am Rosenthal  <noam.rosenthal@nokia.com>

        Reviewed by Ariya Hidayat.

        [Qt] Tuning and optimizations to GraphicsLayerQt. Reduce unnecessary
        recaching, remove QTimer::singleShot and QPixmap::scaled, more
        accurate strategy of handling transform operation blends. Rotating a
        bordered-table, for example, now runs at 50FPS instead of 40FPS on Maemo5.

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

        This is tested by https://bugs.webkit.org/show_bug.cgi?id=34450, fps measurements.

        * platform/graphics/qt/GraphicsLayerQt.cpp:
        (WebCore::GraphicsLayerQtImpl::flushChanges): Fine-tune caching
        (WebCore::TransformAnimationQt::TransformAnimationQt): transform bugs
        (WebCore::OpacityAnimationQt::updateState): style change

2010-02-04  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Timothy Hatcher.

        Web Inspector: Cookies for resources are not shown in storage panel.

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

        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::getCookies):
        * inspector/InspectorResource.cpp:
        (WebCore::InspectorResource::updateScriptObject):
        (WebCore::InspectorResource::cachedResource):
        * inspector/InspectorResource.h:
        (WebCore::InspectorResource::requestURL):

2010-02-04  Anton Muhin  <antonm@chromium.org>

        Reviewed by Adam Barth.

        [v8] Remove clear method from DOM object maps
        https://bugs.webkit.org/show_bug.cgi?id=34530

        No new tests. Should be covered by existent testing infrastructure.

        * bindings/v8/DOMData.h:
        * bindings/v8/DOMDataStore.h:
        * bindings/v8/V8DOMMap.cpp:
        * bindings/v8/V8DOMMap.h:
        * bindings/v8/WorkerScriptController.cpp:
        (WebCore::WorkerScriptController::~WorkerScriptController):

2010-02-04  Holger Hans Peter Freyther  <zecke@selfish.org>

        Reviewed by Xan Lopez.

        [Gtk] Check if the renderer() exists in textForObject.

        This is fixing a crash in the textForObject method. It can
        happen when inspecting AtkObjects in the accerciser, then
        navigating to a new page and still inspecting the old tree.

        In this case the AccessibilityObjectWrapperAtk was still
        valid but the included renderer() was returning 0. Add a
        check for the accObject->renderer() before trying to use
        the result.

        * accessibility/gtk/AccessibilityObjectWrapperAtk.cpp:
        (textForObject):

2010-02-04  Yury Semikhatsky  <yurys@chromium.org>

        Reviewed by Pavel Feldman.

        Provide strongly typed C++ interface for inspector's injected script.

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

        * GNUmakefile.am:
        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSInjectedScriptHostCustom.cpp:
        (WebCore::InjectedScriptHost::injectedScriptFor):
        * bindings/v8/custom/V8InjectedScriptHostCustom.cpp:
        (WebCore::InjectedScriptHost::injectedScriptFor):
        * inspector/InjectedScript.cpp: Added.
        (WebCore::InjectedScript::InjectedScript):
        (WebCore::InjectedScript::dispatch):
        (WebCore::InjectedScript::callFrames):
        (WebCore::InjectedScript::wrapAndStringifyForConsole):
        (WebCore::InjectedScript::releaseWrapperObjectGroup):
        * inspector/InjectedScript.h: Added.
        (WebCore::InjectedScript::InjectedScript):
        (WebCore::InjectedScript::~InjectedScript):
        (WebCore::InjectedScript::hasNoValue):
        * inspector/InjectedScriptHost.cpp:
        (WebCore::InjectedScriptHost::injectedScriptForId):
        (WebCore::InjectedScriptHost::releaseWrapperObjectGroup):
        * inspector/InjectedScriptHost.h:
        * inspector/InspectorBackend.cpp:
        (WebCore::InspectorBackend::dispatchOnInjectedScript):
        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::InspectorController):
        (WebCore::InspectorController::~InspectorController):
        (WebCore::InspectorController::inspectedPageDestroyed):
        (WebCore::InspectorController::windowScriptObjectAvailable):
        (WebCore::InspectorController::scriptObjectReady):
        (WebCore::InspectorController::setFrontendProxyObject):
        (WebCore::InspectorController::close):
        (WebCore::InspectorController::getProfile):
        (WebCore::InspectorController::enableDebugger):
        (WebCore::InspectorController::didPause):
        (WebCore::InspectorController::injectedScriptForNodeId):
        * inspector/InspectorController.h:
        (WebCore::InspectorController::frontendScriptState):
        * inspector/InspectorFrontend.cpp:
        (WebCore::InspectorFrontend::addConsoleMessage):
        * inspector/front-end/InjectedScript.js:
        (injectedScriptConstructor):

2010-02-04  Philippe Normand  <pnormand@igalia.com>

        Rubber stamped by Xan Lopez.

        Missing include, build fix after landing of patch from the bug 34435.

        * platform/graphics/gtk/MediaPlayerPrivateGStreamer.cpp:

2010-02-02  Philippe Normand  <pnormand@igalia.com>

        Reviewed by Gustavo Noronha Silva.

        [Gtk] libsoup critical warning in media player http cookies injection code
        https://bugs.webkit.org/show_bug.cgi?id=34435

        Fixed the critical warning and refactored the
        User-Agent/Referer/cookies injection code, in that order. Previous
        order (cookies first) was wrong because if cookies injection could
        not be done neither the User-Agent nor Referer were injected. Also
        started a non-JSC-specific, gtk-specific GOwnPtr module.

        * GNUmakefile.am:
        * platform/graphics/gtk/MediaPlayerPrivateGStreamer.cpp:
        (WebCore::mediaPlayerPrivateSourceChangedCallback):
        * platform/gtk/GOwnPtrGtk.cpp: Added.
        (WTF::SoupURI):
        (WTF::GstElement):
        * platform/gtk/GOwnPtrGtk.h: Added.

2010-02-04  Mikhail Naganov  <mnaganov@chromium.org>

        Reviewed by Timothy Hatcher.

        Put JSC-specific debugger & profiler code under "USE(JSC)" defines.
        The plan is to enable "JAVASCRIPT_DEBUGGER" in Chromium and then
        make this code engine-agnostic.

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

        * inspector/InjectedScriptHost.cpp:
        * inspector/InjectedScriptHost.h:
        * inspector/InspectorBackend.cpp:
        * inspector/InspectorBackend.h:
        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::InspectorController):
        (WebCore::InspectorController::setWindowVisible):
        (WebCore::InspectorController::scriptObjectReady):
        (WebCore::InspectorController::close):
        (WebCore::InspectorController::didCommitLoad):
        * inspector/InspectorController.h:
        * inspector/InspectorFrontend.cpp:
        * inspector/InspectorFrontend.h:
        * inspector/JavaScriptCallFrame.cpp:
        * inspector/JavaScriptCallFrame.h:
        * inspector/JavaScriptDebugListener.h:
        * inspector/JavaScriptDebugServer.cpp:
        * inspector/JavaScriptDebugServer.h:
        * inspector/JavaScriptProfile.cpp:
        * inspector/JavaScriptProfile.h:
        * inspector/JavaScriptProfileNode.cpp:
        * inspector/JavaScriptProfileNode.h:
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::continueLoadAfterNavigationPolicy):
        * page/Page.cpp:
        (WebCore::Page::Page):

2010-02-03  Nicholas Young  <nicholas.young@nokia.com>

        Reviewed by Eric Carlson.

        Defer formatting of times displayed on media controls to the current theme.
        https://bugs.webkit.org/show_bug.cgi?id=34405

        No new tests needed. Refactoring Only.

        * rendering/MediaControlElements.cpp: Removed formatTime()
        (WebCore::MediaControlTimeDisplayElement::setCurrentValue): No longer sets inner text
        * rendering/MediaControlElements.h:
        * rendering/RenderMedia.cpp:
        (WebCore::RenderMedia::updateTimeDisplay): Asks the theme to format the time display elements
        * rendering/RenderTheme.cpp:
        (WebCore::RenderTheme::formatMediaControlsTime): new virtual method
        (WebCore::RenderTheme::formatMediaControlsCurrentTime): new virtual method
        (WebCore::RenderTheme::formatMediaControlsRemainingTime): new virtual method
        * rendering/RenderTheme.h:

2010-02-03  Steve Falkenburg  <sfalken@apple.com>

        Windows Debug_All build fix.

        * platform/graphics/win/WKCACFLayer.cpp:

2010-02-03  Brady Eidson  <beidson@apple.com>

        Reviewed by Alexey Proskuryakov.

        REGRESSION (r51644): WebCore/manual-tests/linkjump-1.html fails
        <rdar://problem/7595694> and https://bugs.webkit.org/show_bug.cgi?id=34550

        Tests: fast/loader/document-with-fragment-url-1.html
               fast/loader/document-with-fragment-url-2.html
               fast/loader/document-with-fragment-url-3.html
               fast/loader/document-with-fragment-url-4.html

        * platform/KURL.cpp:
        (WebCore::KURL::init): When resolving new URL from an empty reference relative to an absolute URL,
          any fragment identifier from the absolute URL should be removed from the resulting resolution.

2010-02-03  Kwang Yul Seo  <skyul@company100.net>

        Reviewed by Eric Seidel.

        [BREWMP] Port TextBreakIteratorInternalICU
        https://bugs.webkit.org/show_bug.cgi?id=34515

        Port TextBreakIteratorInternalICU.

        * platform/text/brew/TextBreakIteratorInternalICUBrew.cpp: Added.
        (WebCore::currentSearchLocaleID):
        (WebCore::currentTextBreakLocaleID):

2010-02-03  Adele Peterson  <adele@apple.com>

        Reviewed by Simon Fraser.

        Fix for <rdar://problem/7594212> 
        https://bugs.webkit.org/show_bug.cgi?id=34549 - CSS counters crash at http://www.w3.org/TR/css3-content/
        CrashTracer: [USER] 20 crashes in Safari at com.apple.WebCore: WebCore::CounterNode::insertAfter + 319

        Test: fast/css/counters/counter-before-selector-crash.html

        * rendering/RenderCounter.cpp: (WebCore::updateCounters): nil check.

2010-02-03  Adele Peterson  <adele@apple.com>

        Reviewed by Brady Eidson.

        Initialize the variable in the last checkin to false.  I didn't realize DRT relies on this being false.  
        So ports that want visited link tracking need to set that flag.

        * page/PageGroup.cpp:

2010-02-03  Adele Peterson  <adele@apple.com>

        Reviewed by Brady Eidson.

        Fix for https://bugs.webkit.org/show_bug.cgi?id=34547
        static shouldTrackVisitedLinks is not initialized

        For ports that don't call into WebKit to initialize this, 
        we should initialize to true so they get the visited link behavior by default.

        * page/PageGroup.cpp:

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

        Reviewed by Simon Fraser.

        <rdar://problem/7577604> Drag and Drop: background elements are bleeding through
        https://bugs.webkit.org/show_bug.cgi?id=34546

        * manual-tests/drag-image-table-part-decorations.html: Added.
        * rendering/RenderFieldset.cpp:
        (WebCore::RenderFieldset::paintBoxDecorations): Bail out if this object shouldn’t
        paint within the current painting root.
        * rendering/RenderTable.cpp:
        (WebCore::RenderTable::paintBoxDecorations): Ditto.
        * rendering/RenderTableCell.cpp:
        (WebCore::RenderTableCell::paintBackgroundsBehindCell): Ditto.
        (WebCore::RenderTableCell::paintBoxDecorations): Ditto.

2010-02-03  Nate Chapin  <japhet@chromium.org>

        Unreviewed, Chromium mac build fix.

        [V8] Remove unused V8Proxy* variable from generated wrapping code.

        * bindings/scripts/CodeGeneratorV8.pm:

2010-02-03  Nate Chapin  <japhet@chromium.org>

        Reviewed by Dimitri Glazkov.

        [V8] Use toV8() to wrap in the custom bindings, and remove
        the old wrapping code from V8DOMWrapper.
        
        https://bugs.webkit.org/show_bug.cgi?id=32563

        * bindings/scripts/CodeGeneratorV8.pm:
        * bindings/v8/ScriptController.cpp:
        * bindings/v8/ScriptObject.cpp:
        * bindings/v8/V8AbstractEventListener.cpp:
        * bindings/v8/V8Collection.h:
        * bindings/v8/V8DOMWindowShell.cpp:
        * bindings/v8/V8DOMWrapper.cpp:
        * bindings/v8/V8DOMWrapper.h:
        * bindings/v8/V8NodeFilterCondition.cpp:
        * bindings/v8/V8Proxy.cpp:
        * bindings/v8/WorkerContextExecutionProxy.h
        * bindings/v8/custom/V8CanvasRenderingContext2DCustom.cpp:
        * bindings/v8/custom/V8CustomPositionCallback.cpp:
        * bindings/v8/custom/V8CustomPositionErrorCallback.cpp:
        * bindings/v8/custom/V8CustomSQLStatementCallback.cpp:
        * bindings/v8/custom/V8CustomSQLStatementErrorCallback.cpp:
        * bindings/v8/custom/V8CustomSQLTransactionCallback.cpp:
        * bindings/v8/custom/V8CustomSQLTransactionErrorCallback.cpp:
        * bindings/v8/custom/V8DOMWindowCustom.cpp:
        * bindings/v8/custom/V8DataGridColumnListCustom.cpp:
        * bindings/v8/custom/V8DocumentCustom.cpp:
        * bindings/v8/custom/V8DocumentLocationCustom.cpp:
        * bindings/v8/custom/V8ElementCustom.cpp:
        * bindings/v8/custom/V8EventCustom.cpp:
        * bindings/v8/custom/V8HTMLAllCollectionCustom.cpp:
        * bindings/v8/custom/V8HTMLAudioElementConstructor.cpp:
        * bindings/v8/custom/V8HTMLCanvasElementCustom.cpp:
        * bindings/v8/custom/V8HTMLCollectionCustom.cpp:
        * bindings/v8/custom/V8HTMLDocumentCustom.cpp:
        * bindings/v8/custom/V8HTMLFormElementCustom.cpp:
        * bindings/v8/custom/V8HTMLFrameSetElementCustom.cpp:
        * bindings/v8/custom/V8HTMLImageElementConstructor.cpp:
        * bindings/v8/custom/V8HTMLOptionsCollectionCustom.cpp:
        * bindings/v8/custom/V8HTMLSelectElementCustom.cpp:
        * bindings/v8/custom/V8InjectedScriptHostCustom.cpp:
        * bindings/v8/custom/V8MessageChannelConstructor.cpp:
        * bindings/v8/custom/V8MessageEventCustom.cpp:
        * bindings/v8/custom/V8NamedNodeMapCustom.cpp:
        * bindings/v8/custom/V8NodeIteratorCustom.cpp:
        * bindings/v8/custom/V8NodeListCustom.cpp:
        * bindings/v8/custom/V8NotificationCenterCustom.cpp:
        * bindings/v8/custom/V8SVGMatrixCustom.cpp:
        * bindings/v8/custom/V8StyleSheetListCustom.cpp:
        * bindings/v8/custom/V8TreeWalkerCustom.cpp:
        * bindings/v8/custom/V8WebGLRenderingContextCustom.cpp:
        * bindings/v8/custom/V8XSLTProcessorCustom.cpp:

2010-02-03  Sam Weinig  <sam@webkit.org>

        Reviewed by Anders Carlsson.

        Fix drawing buttons in viewless WebKit.

        * platform/mac/ThemeMac.mm:
        (WebCore::paintButton): If there is no view, make sure to flip the
        context so that the button is drawn correctly.

2010-02-03  Yael Aharon  <yael.aharon@nokia.com>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] WebSockets : Buffer the data in WebKit instead of QtNetwork
        https://bugs.webkit.org/show_bug.cgi?id=34425

        Reverting r54279, it was a misunderstanding.

        * platform/network/qt/SocketStreamHandlePrivate.h:
        * platform/network/qt/SocketStreamHandleQt.cpp:
        (WebCore::SocketStreamHandlePrivate::SocketStreamHandlePrivate):
        (WebCore::SocketStreamHandlePrivate::send):
        (WebCore::SocketStreamHandlePrivate::close):

2010-02-03  Drew Wilson  <atwilson@chromium.org>

        Reviewed by Alexey Proskuryakov.

        SharedWorkerScriptLoader should not be an ActiveDOMObject
        https://bugs.webkit.org/show_bug.cgi?id=34513

        Test: Existing tests suffice (fixes test downstream in Chrome).

        * workers/DefaultSharedWorkerRepository.cpp:
        (WebCore::SharedWorkerScriptLoader::SharedWorkerScriptLoader):
        Changed to no longer derive from ActiveDOMObject (handles its own refcounting).
        (WebCore::SharedWorkerScriptLoader::load):
        Now increments own refcount when a load is pending.
        (WebCore::SharedWorkerScriptLoader::notifyFinished):
        Changed to decrement refcount when load is complete.
        * workers/WorkerScriptLoaderClient.h:
        Documentation change about reliability of notifyFinished() when used from worker context.

2010-02-03  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Timothy Hatcher.

        Web Inspector: Inspector renders blank scripts on reloading the webpage.

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

        * inspector/front-end/ResourcesPanel.js:
        (WebInspector.ResourcesPanel.prototype.recreateViewForResourceIfNeeded):

2010-02-03  Yury Semikhatsky  <yurys@chromium.org>

        Reviewed by Pavel Feldman.

        Provide strongly typed C++ interface for inspector's injected script.

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

        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSInjectedScriptHostCustom.cpp:
        (WebCore::InjectedScriptHost::injectedScriptFor):
        * bindings/v8/custom/V8InjectedScriptHostCustom.cpp:
        (WebCore::InjectedScriptHost::injectedScriptFor):
        * inspector/InjectedScript.cpp: Added.
        (WebCore::InjectedScript::InjectedScript):
        (WebCore::InjectedScript::dispatch):
        (WebCore::InjectedScript::callFrames):
        (WebCore::InjectedScript::wrapAndStringify):
        (WebCore::InjectedScript::releaseWrapperObjectGroup):
        * inspector/InjectedScript.h: Added.
        (WebCore::InjectedScript::InjectedScript):
        (WebCore::InjectedScript::~InjectedScript):
        (WebCore::InjectedScript::hasNoValue):
        * inspector/InjectedScriptHost.cpp:
        (WebCore::InjectedScriptHost::injectedScriptForId):
        (WebCore::InjectedScriptHost::releaseWrapperObjectGroup):
        * inspector/InjectedScriptHost.h:
        * inspector/InspectorBackend.cpp:
        (WebCore::InspectorBackend::dispatchOnInjectedScript):
        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::InspectorController):
        (WebCore::InspectorController::~InspectorController):
        (WebCore::InspectorController::inspectedPageDestroyed):
        (WebCore::InspectorController::windowScriptObjectAvailable):
        (WebCore::InspectorController::scriptObjectReady):
        (WebCore::InspectorController::setFrontendProxyObject):
        (WebCore::InspectorController::close):
        (WebCore::InspectorController::getProfile):
        (WebCore::InspectorController::enableDebugger):
        (WebCore::InspectorController::didPause):
        (WebCore::InspectorController::injectedScriptForNodeId):
        * inspector/InspectorController.h:
        (WebCore::InspectorController::frontendScriptState):
        * inspector/InspectorFrontend.cpp:
        (WebCore::InspectorFrontend::addConsoleMessage):

2010-02-03  Andras Becsi  <abecsi@webkit.org>

        Unreviewed build fix.

        [Qt] Roll-out r54281 because it broke the build on the Qt Release bot.

        * platform/graphics/qt/GraphicsLayerQt.cpp:
        (WebCore::GraphicsLayerQtImpl::State::State):
        (WebCore::GraphicsLayerQtImpl::GraphicsLayerQtImpl):
        (WebCore::GraphicsLayerQtImpl::setBaseTransform):
        (WebCore::GraphicsLayerQtImpl::drawContents):
        (WebCore::GraphicsLayerQtImpl::notifyChange):
        (WebCore::GraphicsLayerQtImpl::flushChanges):
        (WebCore::GraphicsLayerQt::setNeedsDisplayInRect):
        (WebCore::applyTimingFunction):
        (WebCore::webkitAnimationToQtAnimationValue):
        (WebCore::AnimationQtBase::updateState):
        (WebCore::AnimationQt::updateCurrentTime):
        (WebCore::TransformAnimationQt::TransformAnimationQt):
        (WebCore::TransformAnimationQt::~TransformAnimationQt):
        (WebCore::TransformAnimationQt::applyFrame):
        (WebCore::TransformAnimationQt::updateState):
        (WebCore::OpacityAnimationQt::updateState):
        (WebCore::GraphicsLayerQt::pauseAnimation):

2010-02-02  Bryan Yeung  <bryeung@google.com>

        Reviewed by Darin Adler.

        Avoid using an invalidated KURL object in baseURI.

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

        This change fixes baseURI for Chromium (where the KURL implementation
        does not allow invalid KURLs to carry relative paths).  This is
        regression tested by
        LayoutTests/svg/W3C-SVG-1.1/struct-image-07-t.svg

        This is a re-application of this patch since it was mistakenly identified as
        the cause of a big chromium test regression and rolled out in r54264.

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

2010-02-02  Joel Stanley  <joel@jms.id.au>

        Reviewed by David Levin.

        [Chromium] Make setCaretBlinkInterval static.
        https://bugs.webkit.org/show_bug.cgi?id=31704

        This is so it can be called from the newly exposed Chromium API setter
        method.

        * rendering/RenderThemeChromiumLinux.cpp:
        * rendering/RenderThemeChromiumLinux.h:

2010-02-02  Yael Aharon  <yael.aharon@nokia.com>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] WebSockets : Buffer the data in WebKit instead of QtNetwork
        https://bugs.webkit.org/show_bug.cgi?id=34425

        Buffer the sent data in SocketStreamHandlePrivate instead of relying on
        the network layer to do it. This is more robust and more consistent with how 
        Qt's HTTP stack works.
        Close the socket in SocketStreamHandlePrivate::close() regardless of its state.

        No new tests, since no new functionality is introduced.

        * platform/network/qt/SocketStreamHandlePrivate.h:
        * platform/network/qt/SocketStreamHandleQt.cpp:
        (WebCore::SocketStreamHandlePrivate::SocketStreamHandlePrivate):
        (WebCore::SocketStreamHandlePrivate::send):
        (WebCore::SocketStreamHandlePrivate::close):
        (WebCore::SocketStreamHandlePrivate::socketBytesWritten):

2010-02-03  Shinichiro Hamaji  <hamaji@chromium.org>

        Unreviewed revert of r54259 as it seems to break chromium's unit tests.
        The tests pass with r54257 but fail with r54260.
        As r54258 and r54260 don't touch code, I'm reverting this change.

        [V8] Generate toV8 conversion helpers, a la JSC bindings.
        https://bugs.webkit.org/show_bug.cgi?id=32563

        * bindings/v8/ScriptController.cpp:
        (WebCore::ScriptController::processingUserGesture):
        (WebCore::createScriptObject):
        (WebCore::ScriptController::createScriptObjectForPluginElement):
        * bindings/v8/ScriptObject.cpp:
        (WebCore::ScriptGlobalObject::set):
        * bindings/v8/V8AbstractEventListener.cpp:
        (WebCore::V8AbstractEventListener::handleEvent):
        * bindings/v8/V8Collection.h:
        (WebCore::getV8Object):
        (WebCore::toNativeCollection):
        (WebCore::getNamedPropertyOfCollection):
        (WebCore::collectionNamedPropertyGetter):
        (WebCore::getIndexedPropertyOfCollection):
        (WebCore::collectionIndexedPropertyGetter):
        (WebCore::nodeCollectionIndexedPropertyEnumerator):
        (WebCore::collectionIndexedPropertyEnumerator):
        (WebCore::collectionStringOrNullIndexedPropertyGetter):
        (WebCore::collectionStringIndexedPropertyGetter):
        (WebCore::setCollectionIndexedGetter):
        (WebCore::setCollectionNamedGetter):
        (WebCore::setCollectionStringOrNullIndexedGetter):
        (WebCore::setCollectionStringIndexedGetter):
        * bindings/v8/V8DOMWindowShell.cpp:
        (WebCore::V8DOMWindowShell::updateDocumentWrapperCache):
        * bindings/v8/V8DOMWrapper.cpp:
        (WebCore::downcastSVGPathSeg):
        (WebCore::V8DOMWrapper::convertSVGElementInstanceToV8Object):
        (WebCore::V8DOMWrapper::convertSVGObjectWithContextToV8Object):
        (WebCore::V8DOMWrapper::convertToV8Object):
        (WebCore::V8DOMWrapper::instantiateV8Object):
        (WebCore::V8DOMWrapper::isDOMEventWrapper):
        (WebCore::V8DOMWrapper::htmlElementType):
        (WebCore::V8DOMWrapper::svgElementType):
        (WebCore::V8DOMWrapper::convertEventToV8Object):
        (WebCore::):
        (WebCore::V8DOMWrapper::convertDocumentToV8Object):
        (WebCore::V8DOMWrapper::convertNodeToV8Object):
        (WebCore::V8DOMWrapper::convertNewNodeToV8Object):
        (WebCore::V8DOMWrapper::convertEventListenerToV8Object):
        (WebCore::V8DOMWrapper::convertDOMImplementationToV8Object):
        (WebCore::V8DOMWrapper::convertStyleSheetToV8Object):
        (WebCore::V8DOMWrapper::convertCSSValueToV8Object):
        (WebCore::V8DOMWrapper::convertCSSRuleToV8Object):
        (WebCore::V8DOMWrapper::convertWindowToV8Object):
        (WebCore::V8DOMWrapper::convertNamedNodeMapToV8Object):
        * bindings/v8/V8DOMWrapper.h:
        (WebCore::V8DOMWrapper::convertToV8Object):
        (WebCore::V8DOMWrapper::convertNodeToV8Object):
        (WebCore::V8DOMWrapper::convertNewNodeToV8Object):
        (WebCore::V8DOMWrapper::convertEventToV8Object):
        (WebCore::V8DOMWrapper::convertEventListenerToV8Object):
        (WebCore::V8DOMWrapper::instantiateV8Object):
        * bindings/v8/V8NodeFilterCondition.cpp:
        (WebCore::V8NodeFilterCondition::acceptNode):
        * bindings/v8/V8Proxy.cpp:
        (WebCore::V8Proxy::setDOMException):
        * bindings/v8/custom/V8CanvasRenderingContext2DCustom.cpp:
        (WebCore::toV8Object):
        (WebCore::V8CanvasRenderingContext2D::createPatternCallback):
        * bindings/v8/custom/V8CustomPositionCallback.cpp:
        (WebCore::V8CustomPositionCallback::handleEvent):
        * bindings/v8/custom/V8CustomPositionErrorCallback.cpp:
        (WebCore::V8CustomPositionErrorCallback::handleEvent):
        * bindings/v8/custom/V8CustomSQLStatementCallback.cpp:
        (WebCore::V8CustomSQLStatementCallback::handleEvent):
        * bindings/v8/custom/V8CustomSQLStatementErrorCallback.cpp:
        (WebCore::V8CustomSQLStatementErrorCallback::handleEvent):
        * bindings/v8/custom/V8CustomSQLTransactionCallback.cpp:
        (WebCore::V8CustomSQLTransactionCallback::handleEvent):
        * bindings/v8/custom/V8CustomSQLTransactionErrorCallback.cpp:
        (WebCore::V8CustomSQLTransactionErrorCallback::handleEvent):
        * bindings/v8/custom/V8DOMWindowCustom.cpp:
        (WebCore::V8DOMWindow::openCallback):
        (WebCore::V8DOMWindow::indexedPropertyGetter):
        (WebCore::V8DOMWindow::namedPropertyGetter):
        * bindings/v8/custom/V8DataGridColumnListCustom.cpp:
        (WebCore::NAMED_PROPERTY_GETTER):
        * bindings/v8/custom/V8DocumentCustom.cpp:
        (WebCore::V8Document::evaluateCallback):
        (WebCore::V8Document::getCSSCanvasContextCallback):
        (WebCore::V8Document::implementationAccessorGetter):
        * bindings/v8/custom/V8DocumentLocationCustom.cpp:
        (WebCore::V8Document::locationAccessorGetter):
        * bindings/v8/custom/V8ElementCustom.cpp:
        (WebCore::V8Element::setAttributeNodeCallback):
        (WebCore::V8Element::setAttributeNodeNSCallback):
        * bindings/v8/custom/V8EventCustom.cpp:
        (WebCore::V8Event::dataTransferAccessorGetter):
        (WebCore::V8Event::clipboardDataAccessorGetter):
        * bindings/v8/custom/V8HTMLAllCollectionCustom.cpp:
        (WebCore::getNamedItems):
        (WebCore::getItem):
        (WebCore::V8HTMLAllCollection::callAsFunctionCallback):
        * bindings/v8/custom/V8HTMLAudioElementConstructor.cpp:
        (WebCore::V8Custom::v8HTMLAudioElementConstructorCallback):
        * bindings/v8/custom/V8HTMLCanvasElementCustom.cpp:
        (WebCore::V8HTMLCanvasElement::getContextCallback):
        * bindings/v8/custom/V8HTMLCollectionCustom.cpp:
        (WebCore::getNamedItems):
        (WebCore::getItem):
        (WebCore::V8HTMLCollection::callAsFunctionCallback):
        * bindings/v8/custom/V8HTMLDocumentCustom.cpp:
        (WebCore::V8HTMLDocument::namedPropertyGetter):
        (WebCore::V8HTMLDocument::allAccessorGetter):
        * bindings/v8/custom/V8HTMLFormElementCustom.cpp:
        (WebCore::V8HTMLFormElement::indexedPropertyGetter):
        (WebCore::V8HTMLFormElement::namedPropertyGetter):
        * bindings/v8/custom/V8HTMLFrameSetElementCustom.cpp:
        (WebCore::V8HTMLFrameSetElement::namedPropertyGetter):
        * bindings/v8/custom/V8HTMLImageElementConstructor.cpp:
        (WebCore::V8Custom::v8HTMLImageElementConstructorCallback):
        * bindings/v8/custom/V8HTMLOptionsCollectionCustom.cpp:
        (WebCore::V8HTMLOptionsCollection::indexedPropertyGetter):
        * bindings/v8/custom/V8HTMLSelectElementCustom.cpp:
        (WebCore::V8HTMLSelectElement::namedPropertyGetter):
        (WebCore::V8HTMLSelectElement::indexedPropertyGetter):
        * bindings/v8/custom/V8InjectedScriptHostCustom.cpp:
        (WebCore::createInjectedScript):
        (WebCore::V8InjectedScriptHost::nodeForIdCallback):
        (WebCore::V8InjectedScriptHost::databaseForIdCallback):
        * bindings/v8/custom/V8MessageChannelConstructor.cpp:
        (WebCore::V8MessageChannel::constructorCallback):
        * bindings/v8/custom/V8MessageEventCustom.cpp:
        (WebCore::V8MessageEvent::portsAccessorGetter):
        * bindings/v8/custom/V8NamedNodeMapCustom.cpp:
        (WebCore::V8NamedNodeMap::indexedPropertyGetter):
        (WebCore::V8NamedNodeMap::namedPropertyGetter):
        * bindings/v8/custom/V8NodeIteratorCustom.cpp:
        (WebCore::toV8):
        * bindings/v8/custom/V8NodeListCustom.cpp:
        (WebCore::V8NodeList::namedPropertyGetter):
        (WebCore::V8NodeList::callAsFunctionCallback):
        * bindings/v8/custom/V8NotificationCenterCustom.cpp:
        (WebCore::V8NotificationCenter::createHTMLNotificationCallback):
        (WebCore::V8NotificationCenter::createNotificationCallback):
        * bindings/v8/custom/V8SVGMatrixCustom.cpp:
        (WebCore::V8SVGMatrix::multiplyCallback):
        (WebCore::V8SVGMatrix::inverseCallback):
        (WebCore::V8SVGMatrix::rotateFromVectorCallback):
        * bindings/v8/custom/V8StyleSheetListCustom.cpp:
        (WebCore::V8StyleSheetList::namedPropertyGetter):
        * bindings/v8/custom/V8TreeWalkerCustom.cpp:
        (WebCore::toV8Object):
        * bindings/v8/custom/V8WebGLRenderingContextCustom.cpp:
        (WebCore::toV8Object):
        * bindings/v8/custom/V8XSLTProcessorCustom.cpp:
        (WebCore::V8XSLTProcessor::transformToFragmentCallback):
        (WebCore::V8XSLTProcessor::transformToDocumentCallback):

2010-02-03  Mikhail Naganov  <mnaganov@chromium.org>

        Reviewed by Pavel Feldman.

        Start unforking debugger and profiler code.

        Remove custom implementation of Console.
        Add 'ScriptProfiler' and 'ScriptProfile' types.
        Start migration to engine-neutral types in InspectorController.

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

        * GNUmakefile.am:
        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSBindingsAllInOne.cpp:
        * bindings/js/JSConsoleCustom.cpp:
        * bindings/js/ScriptProfile.h: Added.
        * bindings/js/ScriptProfiler.cpp: Added.
        (WebCore::ScriptProfiler::start):
        (WebCore::ScriptProfiler::stop):
        * bindings/js/ScriptProfiler.h: Added.
        * bindings/scripts/CodeGeneratorV8.pm:
        * bindings/v8/ScriptProfile.h: Added.
        (WebCore::ScriptProfile::create):
        (WebCore::ScriptProfile::~ScriptProfile):
        (WebCore::ScriptProfile::title):
        (WebCore::ScriptProfile::uid):
        (WebCore::ScriptProfile::ScriptProfile):
        * bindings/v8/ScriptProfiler.cpp: Added.
        (WebCore::ScriptProfiler::start):
        (WebCore::ScriptProfiler::stop):
        * bindings/v8/ScriptProfiler.h: Added.
        * bindings/v8/custom/V8ConsoleCustom.cpp: Removed.
        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::endGroup):
        (WebCore::InspectorController::show):
        (WebCore::InspectorController::setDOMStorageItem):
        (WebCore::InspectorController::addProfile):
        (WebCore::InspectorController::addProfileFinishedMessageToConsole):
        (WebCore::InspectorController::addStartProfilingMessageToConsole):
        (WebCore::InspectorController::createProfileHeader):
        (WebCore::InspectorController::getCurrentUserInitiatedProfileName):
        (WebCore::InspectorController::startUserInitiatedProfiling):
        (WebCore::InspectorController::stopUserInitiatedProfiling):
        (WebCore::InspectorController::enableDebugger):
        (WebCore::InspectorController::specialPanelForJSName):
        * inspector/InspectorController.h:
        (WebCore::InspectorController::searchingForNodeInPage):
        * page/Console.cpp:
        (WebCore::Console::profile):
        (WebCore::Console::profileEnd):
        * page/Console.h:
        (WebCore::):
        (WebCore::Console::create):
        (WebCore::Console::profiles):
        * page/Console.idl:

2010-02-02  Kent Tamura  <tkent@chromium.org>

        Reviewed by Darin Adler.

        Fix a bug that changes for some constraint attributes doesn't
        update validation CSS selectors.
        https://bugs.webkit.org/show_bug.cgi?id=31716

        - Rename HTMLFormControlElement::updateValidity() to setNeedsValidityCheck()
        - Introduce HTMLFormControlElement::setNeedsWillValidate()
        - Introduce HTMLFormControlElement::m_hasName to make willValidate()
          work in parseMappedAttribute().
        - We need to call setNeedsValidityCheck() when HTMLInputElement::step or
          HTMLTextAreaElement::maxLength is changed.

        * html/HTMLFormControlElement.cpp:
        (WebCore::HTMLFormControlElement::HTMLFormControlElement):
        (WebCore::HTMLFormControlElement::parseMappedAttribute):
        (WebCore::HTMLFormControlElement::insertedIntoTree):
        (WebCore::HTMLFormControlElement::removedFromTree):
        (WebCore::HTMLFormControlElement::formDestroyed):
        (WebCore::HTMLFormControlElement::willValidate): Avoids function calls.
        (WebCore::HTMLFormControlElement::setNeedsWillValidateCheck):
        (WebCore::HTMLFormControlElement::setNeedsValidityCheck):
        * html/HTMLFormControlElement.h:
        (WebCore::HTMLFormControlElement::disabled): Move the code from .cpp.
        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::setInputType):
        (WebCore::HTMLInputElement::parseMappedAttribute):
        (WebCore::HTMLInputElement::setValue):
        (WebCore::HTMLInputElement::setValueFromRenderer):
        (WebCore::HTMLInputElement::setFileListFromRenderer):
        * html/HTMLTextAreaElement.cpp:
        (WebCore::HTMLTextAreaElement::parseMappedAttribute):
        (WebCore::HTMLTextAreaElement::setValue):
        * rendering/RenderTextControlMultiLine.cpp:
        (WebCore::RenderTextControlMultiLine::subtreeHasChanged):

2010-02-02  Roland Steiner  <rolandsteiner@chromium.org>

        Reviewed by Adele Peterson.

        Bug 34198 -  Ruby text should not inherit line-height
        (https://bugs.webkit.org/show_bug.cgi?id=34198)
        
        Resetting line-height to 'normal' in the default UA style sheet.
        Adding layout-test to check for this.

        Test: fast/ruby/ruby-line-height.html

        * css/html.css:

2010-02-02  James Robinson  <jamesr@chromium.org>

        Reviewed by Dmitry Titov.

        Add a null check for image, which might be NULL if tileSize is empty
        https://bugs.webkit.org/show_bug.cgi?id=34510

        Test: fast/gradients/crash-on-1px-border.html

        * rendering/RenderBoxModelObject.cpp:
        (WebCore::RenderBoxModelScaleObserver::shouldPaintBackgroundAtLowQuality):

2010-02-02  Kent Tamura  <tkent@chromium.org>

        Reviewed by Darin Adler.

        rangeOverflow/rangeUnderflow support for type=datetime, datetime-local,
        month, time and week
        https://bugs.webkit.org/show_bug.cgi?id=34483

        Tests: fast/forms/ValidityState-rangeOverflow.html
               fast/forms/ValidityState-rangeUnderflow.html

        * html/HTMLInputElement.cpp:
          Defines the hard limits for the types as double values.
        (WebCore::HTMLInputElement::rangeUnderflow): Supports the types.
        (WebCore::HTMLInputElement::rangeOverflow): Supports the types.
        (WebCore::HTMLInputElement::minimum): Supports the types.
        (WebCore::HTMLInputElement::maximum): Supports the types.

2010-02-02  Fumitoshi Ukai  <ukai@chromium.org>

        Reviewed by Alexey Proskuryakov.

        WebSocket set pending activity to avoid unexpected GC.
        https://bugs.webkit.org/show_bug.cgi?id=34014

        Test: websocket/tests/websocket-pending-activity.html

        * websockets/WebSocket.cpp:
        (WebCore::WebSocket::connect): set pending activity until it receives didClose. 
        (WebCore::WebSocket::contextDestroyed): check socket is already closed.
        (WebCore::WebSocket::stop): close the connection and unset pending activity when it stops.
        (WebCore::WebSocket::didClose): unset pending activity.
        * websockets/WebSocket.h:
        * websockets/WebSocketChannel.cpp:
        (WebCore::WebSocketChannel::didReceiveData): protect this while it processes received data.

2010-02-02  Gustavo Noronha Silva  <gns@gnome.org>

        No review, rolling out r54261.
        http://trac.webkit.org/changeset/54261
        https://bugs.webkit.org/show_bug.cgi?id=34435

        Causes crashes on release builds

        * GNUmakefile.am:
        * platform/graphics/gtk/MediaPlayerPrivateGStreamer.cpp:
        (WebCore::mediaPlayerPrivateSourceChangedCallback):
        * platform/gtk/GOwnPtrGtk.cpp: Removed.
        * platform/gtk/GOwnPtrGtk.h: Removed.

2010-02-02  David Levin  <levin@chromium.org>

        No review, rolling out r54245.
        http://trac.webkit.org/changeset/54245
        https://bugs.webkit.org/show_bug.cgi?id=34492

        This patch seems to have broken thousands of chromium tests on
        Windows (and since it was for chromium, I'm rolling it out).

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

2010-02-02  Steve Falkenburg  <sfalken@apple.com>

        Reviewed by Darin Adler.

        Copyright year updating for Windows version resources should be automatic
        https://bugs.webkit.org/show_bug.cgi?id=34503

        * WebCore.vcproj/QTMovieWin.rc:

2010-02-02  Dimitri Glazkov  <dglazkov@chromium.org>

        No review, rolling out r54257.
        http://trac.webkit.org/changeset/54257
        https://bugs.webkit.org/show_bug.cgi?id=34491

        [Chromium] broke thousands of Win tests and a few of Linux tests.

        * platform/graphics/skia/GraphicsContextSkia.cpp:
        (WebCore::GraphicsContext::beginTransparencyLayer):
        * platform/graphics/skia/PlatformContextSkia.cpp:
        (PlatformContextSkia::applyAntiAliasedClipPaths):
        * platform/graphics/skia/PlatformContextSkia.h:

2010-02-02  Philippe Normand  <pnormand@igalia.com>

        Reviewed by Gustavo Noronha Silva.

        [Gtk] libsoup critical warning in media player http cookies injection code
        https://bugs.webkit.org/show_bug.cgi?id=34435

        Fixed the critical warning and refactored the
        User-Agent/Referer/cookies injection code, in that order. Previous
        order (cookies first) was wrong because if cookies injection could
        not be done neither the User-Agent not Referer were injected. Also
        started a non-JSC-specific, gtk-specific GOwnPtr module.

        * GNUmakefile.am:
        * platform/graphics/gtk/MediaPlayerPrivateGStreamer.cpp:
        (WebCore::mediaPlayerPrivateSourceChangedCallback):
        * platform/gtk/GOwnPtrGtk.cpp: Added.
        (WTF::SoupURI):
        (WTF::GstElement):
        * platform/gtk/GOwnPtrGtk.h: Added.

2010-02-02  Nate Chapin  <japhet@chromium.org>

        Reviewed by Dimitri Glazkov.

        [V8] Use toV8() to wrap in the custom bindings, and remove
        the old wrapping code from V8DOMWrapper.
        
        https://bugs.webkit.org/show_bug.cgi?id=32563

        * bindings/v8/ScriptController.cpp:
        * bindings/v8/ScriptObject.cpp:
        * bindings/v8/V8AbstractEventListener.cpp:
        * bindings/v8/V8Collection.h:
        * bindings/v8/V8DOMWindowShell.cpp:
        * bindings/v8/V8DOMWrapper.cpp:
        * bindings/v8/V8DOMWrapper.h:
        * bindings/v8/V8NodeFilterCondition.cpp:
        * bindings/v8/V8Proxy.cpp:
        * bindings/v8/custom/V8CanvasRenderingContext2DCustom.cpp:
        * bindings/v8/custom/V8CustomPositionCallback.cpp:
        * bindings/v8/custom/V8CustomPositionErrorCallback.cpp:
        * bindings/v8/custom/V8CustomSQLStatementCallback.cpp:
        * bindings/v8/custom/V8CustomSQLStatementErrorCallback.cpp:
        * bindings/v8/custom/V8CustomSQLTransactionCallback.cpp:
        * bindings/v8/custom/V8CustomSQLTransactionErrorCallback.cpp:
        * bindings/v8/custom/V8DOMWindowCustom.cpp:
        * bindings/v8/custom/V8DataGridColumnListCustom.cpp:
        * bindings/v8/custom/V8DocumentCustom.cpp:
        * bindings/v8/custom/V8DocumentLocationCustom.cpp:
        * bindings/v8/custom/V8ElementCustom.cpp:
        * bindings/v8/custom/V8EventCustom.cpp:
        * bindings/v8/custom/V8HTMLAllCollectionCustom.cpp:
        * bindings/v8/custom/V8HTMLAudioElementConstructor.cpp:
        * bindings/v8/custom/V8HTMLCanvasElementCustom.cpp:
        * bindings/v8/custom/V8HTMLCollectionCustom.cpp:
        * bindings/v8/custom/V8HTMLDocumentCustom.cpp:
        * bindings/v8/custom/V8HTMLFormElementCustom.cpp:
        * bindings/v8/custom/V8HTMLFrameSetElementCustom.cpp:
        * bindings/v8/custom/V8HTMLImageElementConstructor.cpp:
        * bindings/v8/custom/V8HTMLOptionsCollectionCustom.cpp:
        * bindings/v8/custom/V8HTMLSelectElementCustom.cpp:
        * bindings/v8/custom/V8InjectedScriptHostCustom.cpp:
        * bindings/v8/custom/V8MessageChannelConstructor.cpp:
        * bindings/v8/custom/V8MessageEventCustom.cpp:
        * bindings/v8/custom/V8NamedNodeMapCustom.cpp:
        * bindings/v8/custom/V8NodeIteratorCustom.cpp:
        * bindings/v8/custom/V8NodeListCustom.cpp:
        * bindings/v8/custom/V8NotificationCenterCustom.cpp:
        * bindings/v8/custom/V8SVGMatrixCustom.cpp:
        * bindings/v8/custom/V8StyleSheetListCustom.cpp:
        * bindings/v8/custom/V8TreeWalkerCustom.cpp:
        * bindings/v8/custom/V8WebGLRenderingContextCustom.cpp:
        * bindings/v8/custom/V8XSLTProcessorCustom.cpp:

2010-02-02  Garret Kelly  <gdk@chromium.org>

        Reviewed by David Levin.

        When using the Skia graphics context, the beginTransparencyLayer call
        currently creates a new layer, but does not keep the current
        compositing mode for use when merging the created layer back onto the
        rest of the context. This patch fixes that.
        https://bugs.webkit.org/show_bug.cgi?id=34491

        fast/backgrounds/svg-as-mask.html is affected by this change in Chromium,
        but not fixed. This is the first of a series of patches to fix it.

        * platform/graphics/skia/GraphicsContextSkia.cpp:
        (WebCore::GraphicsContext::beginTransparencyLayer):
        * platform/graphics/skia/PlatformContextSkia.cpp:
        (PlatformContextSkia::beginTransparencyLayer):
        * platform/graphics/skia/PlatformContextSkia.h:

2010-02-02  Kwang Yul Seo  <skyul@company100.net>

        Reviewed by Eric Seidel.

        Use WTF::getLocalTime instead of localtime_r in FTPDirectoryDocument
        https://bugs.webkit.org/show_bug.cgi?id=34409

        Platform guards for localtime_r are not needed because we already have
        WTF::getLocalTime which does the same thing.

        * loader/FTPDirectoryDocument.cpp:
        (WebCore::processFileDateString):
        * loader/FTPDirectoryParser.cpp:
        (WebCore::gmtimeQt):

2010-02-02  Adam Roben  <aroben@apple.com>

        Copy WebCore's bindings generation scripts to the PrivateHeaders
        directory on Mac

        This will allow other projects to use these scripts.

        Fixes <http://webkit.org/b/34498>.

        Reviewed by Mark Rowe.

        * WebCore.xcodeproj/project.pbxproj: Added the bindings generation
        scripst to the Copy Headers phase, and marked them as Private.

2010-02-02  Adam Roben  <aroben@apple.com>

        Copy WebCore's bindings generation scripts to a more sensible location

        Part of Bug 34496: Clean up WebCore's IDL/script copying
        <https://bugs.webkit.org/show_bug.cgi?id=34496>

        Reviewed by Steve Falkenburg.

        * WebCore.vcproj/WebCore.make:
        * WebCore.vcproj/WebCoreGenerated.vcproj:
        Instead of copying to obj/WebKit/DOMInterfaces, copy to obj/WebCore/scripts.

2010-02-02  Adam Roben  <aroben@apple.com>

        Rename the scripts used to copy WebCore's bindings generation scripts

        Part of Bug 34496: Clean up WebCore's IDL/script copying
        <https://bugs.webkit.org/show_bug.cgi?id=34496>

        Reviewed by Steve Falkenburg.

        * WebCore.vcproj/MigrateScripts: Renamed from WebCore/WebCore.vcproj/MigrateIDLAndScripts.
        * WebCore.vcproj/migrate-scripts.sh: Renamed from WebCore/WebCore.vcproj/migrate-idls.sh.

        * WebCore.vcproj/WebCoreGenerated.vcproj: Updated for renames.

2010-02-02  Adam Roben  <aroben@apple.com>

        Stop copying IDL files into $(WebKitOutputDir)

        No one uses these anymore (as of r52921).

        Part of Bug 34496: Clean up WebCore's IDL/script copying
        <https://bugs.webkit.org/show_bug.cgi?id=34496>

        Reviewed by Steve Falkenburg.

        * WebCore.vcproj/MigrateIDLAndScripts: Don't copy the IDL files
        anymore. Keep copying the scripts, though, since other projects
        (outside of the WebKit repository) do use those.

2010-02-02  Bryan Yeung  <bryeung@google.com>

        Reviewed by Darin Adler.

        Avoid using an invalidated KURL object in baseURI.

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

        This change fixes baseURI for Chromium (where the KURL implementation
        does not allow invalid KURLs to carry relative paths).  This is
        regression tested by
        LayoutTests/svg/W3C-SVG-1.1/struct-image-07-t.svg

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

2010-02-02  Alexey Proskuryakov  <ap@apple.com>

        Reviewed by Darin Adler.

        https://bugs.webkit.org/show_bug.cgi?id=34076
        <rdar://problem/7594601> Crash in mangleme in WebCore::Element::getAttribute

        Test: fast/forms/misplaced-img-form-registration.html

        * html/HTMLFormElement.cpp:
        (WebCore::HTMLFormElement::registerImgElement): Assert that the same image isn't added
        to vector again.
        (WebCore::HTMLFormElement::removeImgElement): Similarly, assert that we're removing something
        that's actually registered.

        * html/HTMLImageElement.cpp: (WebCore::HTMLImageElement::~HTMLImageElement): If parser fails
        to insert the image element, then there will be no removed from tree notification either,
        need to unregister right away.

2010-02-02  Alexander Pavlov  <apavlov@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: Eliminate some of the platform flavor-specific stylesheet selectors

        Extract OS version into WebInspector.platformFlavor
        https://bugs.webkit.org/show_bug.cgi?id=34469

        * inspector/front-end/InspectorBackendStub.js:
        * inspector/front-end/InspectorFrontendHostStub.js:
        (.WebInspector.InspectorFrontendHostStub.prototype.platform):
        * inspector/front-end/inspector.css:
        * inspector/front-end/inspector.js:
        (WebInspector.pendingDispatches.0.URLRegExp.i.get platform):
        (WebInspector.get platformFlavor):
        (WebInspector._detectPlatformFlavor):
        (WebInspector.loaded):
        (WebInspector.toolbarDragStart):
        (WebInspector.isMac):

2010-02-02  Steve Block  <steveblock@google.com>

        Reviewed by Ariya Hidayat.

        Adds utility functions for converting between JavaInstance and NPAPI types
        https://bugs.webkit.org/show_bug.cgi?id=34468

        This is required by Android for injecting objects into V8 JavaScript.

        No new tests, added utility functions only.

        * Android.v8bindings.mk: Modified. Added JavaNPObjectV8.cpp
        * bridge/jni/v8/JavaNPObjectV8.cpp: Added.
        (JSC::Bindings::AllocJavaNPObject):
        (JSC::Bindings::FreeJavaNPObject):
        (JSC::Bindings::):
        (JSC::Bindings::JavaInstanceToNPObject):
        (JSC::Bindings::ExtractJavaInstance):
        (JSC::Bindings::JavaNPObjectHasMethod):
        (JSC::Bindings::JavaNPObjectInvoke):
        (JSC::Bindings::JavaNPObjectHasProperty):
        (JSC::Bindings::JavaNPObjectGetProperty):
        * bridge/jni/v8/JavaNPObjectV8.h: Added.

2010-02-02  Benjamin Poulain  <benjamin.poulain@nokia.com>

        Reviewed by Ariya Hidayat.

        [Qt] Symbian plugins include a wrong header file for QPixmap
        https://bugs.webkit.org/show_bug.cgi?id=34475

        * plugins/symbian/PluginViewSymbian.cpp:

2010-02-02  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Timothy Hatcher.

        Web Inspector: URLs are not syntax-higlighted as links in source view.

        This change enables linkifier in the NativeTextViewer. It adds
        "linkify" and "a_node" parse states into the highlighter in order
        to detect links and distinguish between resource and external ones.
        Contains drive-by fix for the webkit-html-* styles and moves them to the
        common location.

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

        * inspector/front-end/NativeTextViewer.js:
        (WebInspector.NativeTextViewer):
        (WebInspector.NativeTextViewer.prototype._createSpan):
        (WebInspector.NativeTextViewer.prototype._createLink):
        (WebInspector.NativeTextViewer.prototype._rewriteHref):
        * inspector/front-end/SourceFrame.js:
        (WebInspector.SourceFrame.prototype.setContent):
        (WebInspector.SourceFrame.prototype._createEditorIfNeeded):
        * inspector/front-end/SourceHTMLTokenizer.js:
        (WebInspector.SourceHTMLTokenizer):
        (WebInspector.SourceHTMLTokenizer.prototype._isExpectingAttribute):
        (WebInspector.SourceHTMLTokenizer.prototype._isExpectingAttributeValue):
        (WebInspector.SourceHTMLTokenizer.prototype._setExpectingAttribute):
        (WebInspector.SourceHTMLTokenizer.prototype._setExpectingAttributeValue):
        (WebInspector.SourceHTMLTokenizer.prototype._stringToken):
        (WebInspector.SourceHTMLTokenizer.prototype._attrValueTokenType):
        (WebInspector.SourceHTMLTokenizer.prototype.nextToken):
        * inspector/front-end/SourceHTMLTokenizer.re2js:
        * inspector/front-end/SourceView.js:
        (WebInspector.SourceView.prototype._contentLoaded):
        * inspector/front-end/TextEditorHighlighter.js:
        (WebInspector.TextEditorHighlighter):
        * inspector/front-end/inspector.css:
        * inspector/front-end/inspectorSyntaxHighlight.css:

2010-02-02  Simon Hausmann  <simon.hausmann@nokia.com>

        Reviewed by Ariya Hidayat.

        [Qt] Install libraries and headers in package builds
        https://bugs.webkit.org/show_bug.cgi?id=34325

        Add the QtWebKit libraries to the installable items, except on
        Symbian where the libraries are always linked in their final
        destination.

        Also include the headers generated by syncqt in the installation.

        * WebCore.pro:

2010-02-02  Kavita Kanetkar  <kkanetkar@chromium.org>

        Reviewed by Dmitry Titov.

        [V8] Raising an exception while setting timeout/interval from a detached frame
        https://bugs.webkit.org/show_bug.cgi?id=34453
        This fixes the issue/failing test mentioned in Chromium bug:
        http://code.google.com/p/chromium/issues/detail?id=32671


        * bindings/v8/custom/V8DOMWindowCustom.cpp:
        (WebCore::WindowSetTimeoutImpl):

2010-02-02  Kwang Yul Seo  <skyul@company100.net>

        Reviewed by Eric Seidel.

        [BREWMP] Port Screen
        https://bugs.webkit.org/show_bug.cgi?id=34299

        Get the screen size and depth from the main display bitmap.

        * platform/brew/ScreenBrew.cpp: Added.
        (WebCore::getDisplayInfo):
        (WebCore::screenRect):
        (WebCore::screenAvailableRect):
        (WebCore::screenDepth):
        (WebCore::screenDepthPerComponent):
        (WebCore::screenIsMonochrome):

2010-02-02  Kwang Yul Seo  <skyul@company100.net>

        Reviewed by Eric Seidel.

        [BREWMP] Port LocalizedStrings
        https://bugs.webkit.org/show_bug.cgi?id=34257

        Port LocalizedStrings to BREWMP.

        * platform/brew/LocalizedStringsBrew.cpp: Added.
        (WebCore::submitButtonDefaultLabel):
        (WebCore::inputElementAltText):
        (WebCore::resetButtonDefaultLabel):
        (WebCore::defaultLanguage):
        (WebCore::searchableIndexIntroduction):
        (WebCore::fileButtonChooseFileLabel):
        (WebCore::fileButtonNoFileSelectedLabel):
        (WebCore::contextMenuItemTagOpenLinkInNewWindow):
        (WebCore::contextMenuItemTagDownloadLinkToDisk):
        (WebCore::contextMenuItemTagCopyLinkToClipboard):
        (WebCore::contextMenuItemTagOpenImageInNewWindow):
        (WebCore::contextMenuItemTagDownloadImageToDisk):
        (WebCore::contextMenuItemTagCopyImageToClipboard):
        (WebCore::contextMenuItemTagOpenFrameInNewWindow):
        (WebCore::contextMenuItemTagCopy):
        (WebCore::contextMenuItemTagGoBack):
        (WebCore::contextMenuItemTagGoForward):
        (WebCore::contextMenuItemTagStop):
        (WebCore::contextMenuItemTagReload):
        (WebCore::contextMenuItemTagCut):
        (WebCore::contextMenuItemTagPaste):
        (WebCore::contextMenuItemTagNoGuessesFound):
        (WebCore::contextMenuItemTagIgnoreSpelling):
        (WebCore::contextMenuItemTagLearnSpelling):
        (WebCore::contextMenuItemTagSearchWeb):
        (WebCore::contextMenuItemTagLookUpInDictionary):
        (WebCore::contextMenuItemTagOpenLink):
        (WebCore::contextMenuItemTagIgnoreGrammar):
        (WebCore::contextMenuItemTagSpellingMenu):
        (WebCore::contextMenuItemTagShowSpellingPanel):
        (WebCore::contextMenuItemTagCheckSpelling):
        (WebCore::contextMenuItemTagCheckSpellingWhileTyping):
        (WebCore::contextMenuItemTagCheckGrammarWithSpelling):
        (WebCore::contextMenuItemTagFontMenu):
        (WebCore::contextMenuItemTagBold):
        (WebCore::contextMenuItemTagItalic):
        (WebCore::contextMenuItemTagUnderline):
        (WebCore::contextMenuItemTagOutline):
        (WebCore::contextMenuItemTagWritingDirectionMenu):
        (WebCore::contextMenuItemTagDefaultDirection):
        (WebCore::contextMenuItemTagLeftToRight):
        (WebCore::contextMenuItemTagRightToLeft):
        (WebCore::contextMenuItemTagInspectElement):
        (WebCore::searchMenuNoRecentSearchesText):
        (WebCore::searchMenuRecentSearchesText):
        (WebCore::searchMenuClearRecentSearchesText):
        (WebCore::unknownFileSizeText):
        (WebCore::AXWebAreaText):
        (WebCore::AXLinkText):
        (WebCore::AXListMarkerText):
        (WebCore::AXImageMapText):
        (WebCore::AXHeadingText):
        (WebCore::imageTitle):
        (WebCore::contextMenuItemTagTextDirectionMenu):
        (WebCore::AXButtonActionVerb):
        (WebCore::AXTextFieldActionVerb):
        (WebCore::AXRadioButtonActionVerb):
        (WebCore::AXCheckedCheckBoxActionVerb):
        (WebCore::AXUncheckedCheckBoxActionVerb):
        (WebCore::AXLinkActionVerb):
        (WebCore::AXMenuListPopupActionVerb):
        (WebCore::AXMenuListActionVerb):
        (WebCore::AXDefinitionListTermText):
        (WebCore::AXDefinitionListDefinitionText):
        (WebCore::validationMessageValueMissingText):
        (WebCore::validationMessageTypeMismatchText):
        (WebCore::validationMessagePatternMismatchText):
        (WebCore::validationMessageTooLongText):
        (WebCore::validationMessageRangeUnderflowText):
        (WebCore::validationMessageRangeOverflowText):
        (WebCore::validationMessageStepMismatchText):

2010-02-02  Kwang Yul Seo  <skyul@company100.net>

        Reviewed by Eric Seidel.

        [BREWMP] Port systemBeep
        https://bugs.webkit.org/show_bug.cgi?id=33601

        Implement systemBeep with IShell_Beep.

        * platform/brew/SoundBrew.cpp: Added.
        (WebCore::systemBeep):

2010-02-02  Shinichiro Hamaji  <hamaji@chromium.org>

        Reviewed by Eric Seidel.

        [Win] Utilize PrintContext to share the printing code with other ports
        https://bugs.webkit.org/show_bug.cgi?id=34312

        No new tests as this is just a small refactoring.

2010-02-02  Kwang Yul Seo  <skyul@company100.net>

        Reviewed by Eric Seidel.

        [BREWMP] Add conversions between IntPoint and AEEPoint
        https://bugs.webkit.org/show_bug.cgi?id=34194

        Make it easy to convert between IntPoint and AEEPoint.

        * platform/graphics/IntPoint.h:
        * platform/graphics/brew/IntPointBrew.cpp: Added.
        (WebCore::IntPoint::IntPoint):
        (WebCore::IntPoint::operator AEEPoint):

2010-02-02  Steve Block  <steveblock@google.com>

        Reviewed by Adam Barth.

        Adds virtual destructors for AbstractWeakReferenceMap and AbstractWeakReferenceMap::Visitor
        https://bugs.webkit.org/show_bug.cgi?id=34434

        No new tests, build fix only.

        * bindings/v8/V8DOMMap.h: Modified.
        (WebCore::AbstractWeakReferenceMap::~AbstractWeakReferenceMap): Added.
        (WebCore::AbstractWeakReferenceMap::Visitor::~Visitor): Added.

2010-02-02  Avi Drissman  <avi@chromium.org>

        Reviewed by Eric Seidel.

        Sync up Chromium Mac render theme to Mac render theme
        https://bugs.webkit.org/show_bug.cgi?id=34340

        Covered by existing layout tests.

        * platform/chromium/ThemeChromiumMac.mm:
        (WebCore::updateStates):
        (WebCore::checkbox):
        (WebCore::paintCheckbox):
        (WebCore::radio):
        (WebCore::paintRadio):
        (WebCore::listButtonSizes):
        (WebCore::setupButtonCell):
        (WebCore::button):
        (WebCore::paintButton):
        (WebCore::ThemeChromiumMac::controlSize):
        (WebCore::ThemeChromiumMac::minimumControlSize):
        (WebCore::ThemeChromiumMac::controlBorder):
        (WebCore::ThemeChromiumMac::paint):
        * rendering/RenderThemeChromiumMac.h:
        * rendering/RenderThemeChromiumMac.mm:
        (-[WebCoreRenderThemeNotificationObserver initWithTheme:WebCore::]):
        (WebCore::convertNSColorToColor):
        (WebCore::RenderThemeChromiumMac::systemColor):
        (WebCore::RenderThemeChromiumMac::isControlStyled):
        (WebCore::RenderThemeChromiumMac::adjustRepaintRect):
        (WebCore::RenderThemeChromiumMac::convertToPaintingRect):
        (WebCore::RenderThemeChromiumMac::paintCapsLockIndicator):
        (WebCore::RenderThemeChromiumMac::paintMenuList):
        (WebCore::RenderThemeChromiumMac::paintMenuListButton):
        (WebCore::RenderThemeChromiumMac::adjustMenuListStyle):
        (WebCore::RenderThemeChromiumMac::adjustMenuListButtonStyle):
        (WebCore::RenderThemeChromiumMac::paintSliderTrack):
        (WebCore::RenderThemeChromiumMac::paintSliderThumb):
        (WebCore::RenderThemeChromiumMac::paintSearchField):
        (WebCore::RenderThemeChromiumMac::setSearchFieldSize):
        (WebCore::RenderThemeChromiumMac::adjustSearchFieldStyle):
        (WebCore::RenderThemeChromiumMac::paintSearchFieldResultsButton):
        (WebCore::RenderThemeChromiumMac::adjustSliderThumbSize):
        (WebCore::RenderThemeChromiumMac::popupButton):
        (WebCore::RenderThemeChromiumMac::sliderThumbHorizontal):
        (WebCore::RenderThemeChromiumMac::sliderThumbVertical):

2010-02-02  Kwang Yul Seo  <skyul@company100.net>

        Reviewed by Eric Seidel.

        [BREWMP] Port Logging
        https://bugs.webkit.org/show_bug.cgi?id=34300

        Log calls to notImplemented() by default.

        * platform/brew/LoggingBrew.cpp: Added.
        (WebCore::InitializeLoggingChannelsIfNecessary):

2010-02-02  Kwang Yul Seo  <skyul@company100.net>

        Reviewed by Eric Seidel.

        [BREWMP] Port FileChooser
        https://bugs.webkit.org/show_bug.cgi?id=34261

        Port FileChooser to BREWMP.

        * platform/brew/FileChooserBrew.cpp: Added.
        (WebCore::FileChooser::basenameForWidth):

2010-02-01  Zoltan Horvath  <zoltan@webkit.org>

        Reviewed by Darin Adler.

        Allow custom memory allocation control for IconDatabaseClient class
        https://bugs.webkit.org/show_bug.cgi?id=33252

        Inherits the following struct from Noncopyable because it is 
        instantiated by 'new' and no need to be copyable:

        class name               - instantiated at: WebCore/'location'
        class IconDatabaseClient - loader/icon/IconDatabase.cpp:89

        * loader/icon/IconDatabaseClient.h:

2010-02-01  Kwang Yul Seo  <skyul@company100.net>

        Reviewed by Eric Seidel.

        [BREWMP] Port MIMETypeRegistry
        https://bugs.webkit.org/show_bug.cgi?id=34220

        Port MIMETypeRegistry with an extension map as other ports do.

        * platform/brew: Added.
        * platform/brew/MIMETypeRegistryBrew.cpp: Added.
        (WebCore::):
        (WebCore::MIMETypeRegistry::getMIMETypeForExtension):

2010-02-01  Dmitry Titov  <dimich@chromium.org>

        Not reviewed, revert r54194 that fails new test on Qt and Chromium.
        https://bugs.webkit.org/show_bug.cgi?id=34382

        * html/HTMLFrameElementBase.cpp:
        (WebCore::HTMLFrameElementBase::setNameAndOpenURL):
        (WebCore::HTMLFrameElementBase::insertedIntoDocument):
        * html/HTMLFrameElementBase.h:
        * page/Frame.cpp:
        * page/Frame.h:

2010-02-01  Shinichiro Hamaji  <hamaji@chromium.org>

        Reviewed by Eric Seidel.

        Provide a way to get page number with layoutTestController
        https://bugs.webkit.org/show_bug.cgi?id=33840

        Test: printing/page-break-always.html

        * WebCore.base.exp:
        * WebCore.xcodeproj/project.pbxproj:
        * page/PrintContext.cpp:
        (WebCore::PrintContext::pageRect): Added a getter function.
        (WebCore::PrintContext::computePageRects): Move its logic into computePageRectsWithPageSize.
        (WebCore::PrintContext::computePageRectsWithPageSize): Factored out from computePageRects for pageNumberForElement.
        (WebCore::enclosingBoxModelObject): Added for pageNumberForElement.
        (WebCore::PrintContext::pageNumberForElement): Added for testing.
        * page/PrintContext.h:

2010-02-01  Kwang Yul Seo  <skyul@company100.net>

        Reviewed by Eric Seidel.

        [BREWMP] Add conversions between IntSize and AEESize
        https://bugs.webkit.org/show_bug.cgi?id=34197

        Make it easy to convert between IntSize and AEESize.

        * platform/graphics/IntSize.h:
        * platform/graphics/brew/IntSizeBrew.cpp: Added.
        (WebCore::IntSize::IntSize):
        (WebCore::IntSize::operator AEESize):

2010-02-01  Stephen White  <senorblanco@chromium.org>

        Reviewed by Eric Seidel.

        Fix for Pattern transformations in Chromium/Skia.  This required 
        reworking Pattern a bit to be more like the Gradient implementation.
        In particular, it now holds an m_pattern reference to the
        platform-specific implementation, and passes along changes to the
        m_patternSpaceTransformation, in the same way that Gradient does for
        m_gradientSpaceTransformation.  This is necessary since Skia creates the
        platform-specific pattern (SkShader) once, rather than recreating it
        on each draw.
        For platforms other than Skia, m_pattern is unused, they will
        continue to use the static createPlatformPattern(), and the new
        notification functions are stubbed out.  Other platforms can switch to
        the new implementation if they so choose.

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

        Covered by svg/custom/pattern-y-offset.svg,
        svg/custom/pattern-cycle-detection.svg, and many more.

        * platform/graphics/Pattern.cpp:
        (WebCore::Pattern::Pattern):
        Initializer for m_pattern.
        (WebCore::Pattern::~Pattern):
        call platformDestroy().
        (WebCore::Pattern::setPatternSpaceTransform):
        Pass along the transform via setPlatformPatternSpaceTransform().
        (WebCore::Pattern::platformDestroy):
        (WebCore::Pattern::setPlatformPatternSpaceTransform):
        Stub implementations for non-skia platforms.
        * platform/graphics/Pattern.h:
        * platform/graphics/skia/GraphicsContextSkia.cpp:
        (WebCore::GraphicsContext::setPlatformFillPattern):
        (WebCore::GraphicsContext::setPlatformStrokePattern):
        Call platformPattern() instead of static version.
        Since Pattern now owns its SkShader, no need to unref here.
        * platform/graphics/skia/PatternSkia.cpp:
        (WebCore::Pattern::platformDestroy):
        Unref the SkShader on destroy.
        (WebCore::Pattern::platformPattern):
        Create the platform pattern (SkShader) once, and cache it.
        (WebCore::Pattern::setPlatformPatternSpaceTransform):
        Set the shader's local matrix from the m_patternSpaceTransformation.

2010-02-01  Daniel Bates  <dbates@webkit.org>

        Reviewed by Adam Barth.

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

        Implements support for full page blocking via the X-XSS-Protection header.

        Tests: http/tests/security/xssAuditor/full-block-base-href.html
               http/tests/security/xssAuditor/full-block-get-from-iframe.html
               http/tests/security/xssAuditor/full-block-iframe-javascript-url.html
               http/tests/security/xssAuditor/full-block-iframe-no-inherit.php
               http/tests/security/xssAuditor/full-block-javascript-link.html
               http/tests/security/xssAuditor/full-block-link-onclick.html
               http/tests/security/xssAuditor/full-block-object-tag.html
               http/tests/security/xssAuditor/full-block-post-from-iframe.html
               http/tests/security/xssAuditor/full-block-script-tag-with-source.html
               http/tests/security/xssAuditor/full-block-script-tag.html
               http/tests/security/xssAuditor/malformed-xss-protection-header.html

        * page/XSSAuditor.cpp:
        (WebCore::XSSAuditor::shouldFullPageBlockForXSSProtectionHeader): Added.
        (WebCore::XSSAuditor::findInRequest): Modified to call method
        XSSAuditor::shouldFullPageBlockForXSSProtectionHeader.
        * page/XSSAuditor.h: Defined method shouldFullPageBlockForXSSProtectionHeader
        and fixed misspelled words in large comment block.

2010-02-01  Kwang Yul Seo  <skyul@company100.net>

        Reviewed by Eric Seidel.

        [BREWMP] Port SharedTimer with IShell_SetTimerEx.
        https://bugs.webkit.org/show_bug.cgi?id=33599

        As fireTime passed in setSharedTimerFireTime is the absolute time,
        we must calcalute the interval by subtracting currentTime() from
        fireTime and pass the result to ISHELL_SetTimerEx.

        * platform/brew/SharedTimerBrew.cpp: Added.
        (WebCore::invokeCallback):
        (WebCore::setSharedTimerFiredFunction):
        (WebCore::setSharedTimerFireTime):
        (WebCore::stopSharedTimer):

2010-02-01  Shinichiro Hamaji  <hamaji@chromium.org>

        [Chromium] Unreviewed attempt to fix the chromium build.

        Corresponding change: http://trac.webkit.org/changeset/54182

        * bindings/scripts/CodeGeneratorV8.pm:
        * bindings/v8/ScriptController.cpp:
        (WebCore::ScriptController::processingUserGesture):
        * bindings/v8/ScriptController.h:

2010-02-01  Dmitry Titov  <dimich@chromium.org>

        Reviewed by David Levin.

        When a live iframe element is moved between pages, it still depends on the old page.
        https://bugs.webkit.org/show_bug.cgi?id=34382

        Test: fast/frames/iframe-reparenting-new-page.html

        * html/HTMLFrameElementBase.cpp:
        (WebCore::HTMLFrameElementBase::setName):
        Move the code setting the frame name into a separate function.

        (WebCore::HTMLFrameElementBase::setNameAndOpenURL):
        (WebCore::HTMLFrameElementBase::updateLiveFrame):
        Update frame tree, reset page in the contentFrame and re-set the name.

        (WebCore::HTMLFrameElementBase::insertedIntoDocument): 
        * html/HTMLFrameElementBase.h:

        * page/Frame.cpp:
        (WebCore::Frame::setPage):
        * page/Frame.h: Add setPage method. It is only currently used when iframe is
                        moved between pages (so the ASSERT(m_ownerElement).

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

        Reviewed by Tim Hatcher.

        Add common IRC ports to port blocking.
        <rdar://problem/7593895> and https://bugs.webkit.org/show_bug.cgi?id=34451

        * platform/KURL.cpp:
        (WebCore::portAllowed):

2010-01-29  Jeremy Orlow  <jorlow@chromium.org>

        Reviewed by Nate Chapin.

        [V8] Add compile time guards for IndexedDB custom functions
        https://bugs.webkit.org/show_bug.cgi?id=34368

        * bindings/v8/custom/V8IDBRequestCustom.cpp:
        * bindings/v8/custom/V8IndexedDatabaseRequestCustom.cpp:

2010-01-29  Gavin Barraclough  <barraclough@apple.com>

        Reviewed by Sam Weinig + Oliver Hunt.

        Bug 34346 - With JSC bindings, make processingUserGesture work with events in Isolated Worlds

        Change HTMLMediaElement methods that require checking whether the event is a user gesture to
        be passed a boolean.  This may be passed from the JSC bindings (where we have an exec state),
        or read from the event.  Add a Flag to the IDL to mark this information is required.

        * WebCore.Video.exp:
        * bindings/js/JSDOMBinding.cpp:
        (WebCore::processingUserGesture):
        * bindings/js/JSDOMWindowCustom.cpp:
        (WebCore::domWindowAllowPopUp):
        (WebCore::JSDOMWindow::open):
        (WebCore::JSDOMWindow::showModalDialog):
        * bindings/js/JSDocumentCustom.cpp:
        (WebCore::JSDocument::setLocation):
        * bindings/js/ScriptController.cpp:
        (WebCore::ScriptController::processingUserGesture):
        (WebCore::ScriptController::processingUserGestureEvent):
        (WebCore::ScriptController::anyPageIsProcessingUserGesture):
        * bindings/js/ScriptController.h:
        * bindings/scripts/CodeGeneratorJS.pm:
        * dom/Event.cpp:
        (WebCore::Event::isUserEvent):
        * dom/Event.h:
        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::removedFromDocument):
        (WebCore::HTMLMediaElement::load):
        (WebCore::HTMLMediaElement::play):
        (WebCore::HTMLMediaElement::pause):
        (WebCore::HTMLMediaElement::beginScrubbing):
        (WebCore::HTMLMediaElement::documentDidBecomeActive):
        (WebCore::HTMLMediaElement::webkitEnterFullScreen):
        * html/HTMLMediaElement.h:
        * html/HTMLMediaElement.idl:
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::isProcessingUserGesture):
        * loader/MediaDocument.cpp:
        (WebCore::MediaDocument::defaultEventHandler):
        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::allowPopUp):
        * rendering/MediaControlElements.cpp:
        (WebCore::MediaControlSeekButtonElement::defaultEventHandler):

2010-02-01  Andreas Kling  <andreas.kling@nokia.com>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] Use the fallback style on Maemo 5

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

        * platform/qt/RenderThemeQt.cpp:
        (WebCore::RenderThemeQt::RenderThemeQt):
        (WebCore::RenderThemeQt::fallbackStyle):
        (WebCore::RenderThemeQt::qStyle):
        (WebCore::RenderThemeQt::setPaletteFromPageClientIfExists):
        * platform/qt/RenderThemeQt.h:

2010-02-01  Kavita Kanetkar  <kkanetkar@chromium.org>

        Reviewed by Nate Chapin.

        [V8] Making V8 generated classes' GetTemplate() function public
        https://bugs.webkit.org/show_bug.cgi?id=34026

        * bindings/scripts/CodeGeneratorV8.pm: Generated code need not depend on V8CustomBinding.h, made GetTemplate() signature public.

2010-02-01  Steve Block  <steveblock@google.com>

        Reviewed by Ariya Hidayat.

        Adds V8-specific JNI bridge classes
        https://bugs.webkit.org/show_bug.cgi?id=34166

        This is the V8 equivalent of bridge/jni/jsc/JNIBridgeJSC.

        No new tests, build fix only.

        * Android.v8bindings.mk: Modified. Added JNIBridge.cpp and JNIBridgeV8.cpp
        * bridge/Bridge.h: Modified. Added missing include for Noncopyable.h
        * bridge/jni/v8/JNIBridgeV8.cpp: Added.
        (JavaField::JavaField):
        * bridge/jni/v8/JNIBridgeV8.h: Added.
        (JSC::Bindings::JavaField::name):
        (JSC::Bindings::JavaField::type):
        (JSC::Bindings::JavaField::getJNIType):

2010-02-01  Steve Block  <steveblock@google.com>

        Reviewed by Ariya Hidayat.

        Adds V8-specific JNI utility functions.
        https://bugs.webkit.org/show_bug.cgi?id=33901

        This is the V8 equivalent of bridge/jni/jsc/JNIUtilityPrivate.

        No new tests, build fix only.

        * Android.v8bindings.mk: Modified. Add JNIUtilityPrivate.cpp
        * bridge/jni/v8/JNIUtilityPrivate.cpp: Added.
        (JSC::Bindings::convertNPVariantToJValue):
        (JSC::Bindings::convertJValueToNPVariant):
        * bridge/jni/v8/JNIUtilityPrivate.h: Added.

2010-02-01  Steve Block  <steveblock@google.com>

        Reviewed by Ariya Hidayat.

        Adds V8 version of JavaClass
        https://bugs.webkit.org/show_bug.cgi?id=33898

        This is the V8 equivalent of bridge/jni/jsc/JavaClassJSC

        No new tests, build fix only.

        * Android.v8bindings.mk: Modified. Added JavaClassV8.cpp
        * bridge/jni/v8/JavaClassV8.cpp: Added.
        (JavaClass::JavaClass):
        (JavaClass::~JavaClass):
        (JavaClass::methodsNamed):
        (JavaClass::fieldNamed):
        * bridge/jni/v8/JavaClassV8.h: Added.

2010-02-01  Steve Block  <steveblock@google.com>

        Reviewed by Ariya Hidayat.

        Adds V8 version of JavaInstance
        https://bugs.webkit.org/show_bug.cgi?id=33951

        This is the V8 equivalent of bridge/jni/jsc/JavaInstanceJSC.
        Also fixes a typo in a comment in JavaInstanceJSC.cpp.

        No new tests, build fix only.

        * Android.v8bindings.mk: Modified. Added JavaInstanceV8.cpp
        * bridge/jni/jsc/JavaInstanceJSC.cpp: Modified.
        (JavaInstance::invokeMethod): Modified. Fixed comment
        * bridge/jni/v8/JavaInstanceV8.cpp: Added.
        (JavaInstance::JavaInstance):
        (JavaInstance::~JavaInstance):
        (JavaInstance::getClass):
        (JavaInstance::invokeMethod):
        (JObjectWrapper::JObjectWrapper):
        (JObjectWrapper::~JObjectWrapper):
        * bridge/jni/v8/JavaInstanceV8.h: Added.
        (JSC::Bindings::JObjectWrapper::instance):
        (JSC::Bindings::JObjectWrapper::setInstance):
        (JSC::Bindings::JObjectWrapper::ref):
        (JSC::Bindings::JObjectWrapper::deref):
        (JSC::Bindings::JavaInstance::javaInstance):
        (JSC::Bindings::JavaInstance::begin):
        (JSC::Bindings::JavaInstance::end):
        (JSC::Bindings::JavaInstance::virtualBegin):
        (JSC::Bindings::JavaInstance::virtualEnd):

2010-02-01  Dumitru Daniliuc  <dumi@chromium.org>

        Reviewed by Eric Seidel.

        Making sure that all in-progress transactions are rolled back on
        the database thread before they're destroyed. Otherwise,
        SQLiteTransaction's destructor will try to do a rollback and that
        would cause an assertion failure, if the object is not destroyed
        on the DB thread.

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

        * platform/sql/SQLiteTransaction.cpp:
        (WebCore::SQLiteTransaction::stop):
        * storage/SQLTransaction.cpp:
        (WebCore::SQLTransaction::notifyDatabaseThreadIsShuttingDown):
        * storage/SQLTransaction.h:
        * storage/SQLTransactionCoordinator.cpp:
        (WebCore::SQLTransactionCoordinator::shutdown):

2010-02-01  Sam Weinig  <sam@webkit.org>

        Reviewed by Beth Dakin.

        Fix EXPERIMENTAL_SINGLE_VIEW_MODE build.

        * page/EventHandler.h:
        * page/mac/EventHandlerMac.mm:
        (WebCore::EventHandler::currentNSEvent):
        (WebCore::EventHandler::currentKeyboardEvent):
        (WebCore::EventHandler::mouseDown):
        (WebCore::EventHandler::mouseDragged):
        (WebCore::EventHandler::mouseUp):
        (WebCore::EventHandler::mouseMoved):
        (WebCore::EventHandler::keyEvent):
        (WebCore::EventHandler::wheelEvent):
        (WebCore::EventHandler::sendContextMenuEvent):
        (WebCore::EventHandler::eventMayStartDrag):
        (WebCore::EventHandler::sendFakeEventsAfterWidgetTracking):

2010-02-01  Nate Chapin  <japhet@chromium.org>

        Unreviewed, Chromium build fix.

        Failed to properly add new files for http://trac.webkit.org/changeset/54150.

        * bindings/v8/custom/V8BarInfoCustom.cpp: Added.
        * bindings/v8/custom/V8CSSRuleCustom.cpp: Added.
        * bindings/v8/custom/V8CSSStyleSheetCustom.cpp: Added.
        * bindings/v8/custom/V8CSSValueCustom.cpp: Added.
        * bindings/v8/custom/V8CanvasPixelArrayCustom.cpp: Added.
        * bindings/v8/custom/V8DOMSelectionCustom.cpp: Added.
        * bindings/v8/custom/V8HTMLElementCustom.cpp: Added.
        * bindings/v8/custom/V8SVGDocumentCustom.cpp: Added.
        * bindings/v8/custom/V8SVGElementCustom.cpp: Added.
        * bindings/v8/custom/V8SVGPathSegCustom.cpp: Added.
        * bindings/v8/custom/V8ScreenCustom.cpp: Added.
        * bindings/v8/custom/V8StyleSheetCustom.cpp: Added.
        * bindings/v8/custom/V8WebGLArrayCustom.cpp: Added.

2010-01-27  Matt Perry  <mpcomplete@chromium.org>

        Reviewed by Eric Seidel.

        Add support for addUserScript to chromium port.

        * bindings/v8/ScriptController.cpp:
        (WebCore::ScriptController::evaluateInWorld):
        * bindings/v8/ScriptController.h:

2010-02-01  Eric Carlson  <eric.carlson@apple.com>

        Reviewed by Dan Bernstein.

        https://bugs.webkit.org/show_bug.cgi?id=34448
        <rdar://problem/7598130>

        RenderVideo::intrinsicSizeChanged infinite recursion

        * rendering/RenderImage.h:
        (WebCore::RenderImage::intrinsicSizeChanged): Make protected instead of private so it can
            be called by RenderVideo.
        * rendering/RenderVideo.cpp:
        (WebCore::RenderVideo::intrinsicSizeChanged): Call RenderMedia::intrinsicSizeChanged, not
            RenderVideo::intrinsicSizeChanged.
        (WebCore::RenderVideo::imageChanged): Call RenderMedia::imageChanged instead of 
            RenderImage::imageChanged.

2010-02-01  Nate Chapin  <japhet@chromium.org>

        Reviewed by Dimitri Glazkov.

        [V8] Generate toV8() converter for most WebCore->V8 conversions,
        and defined custom converters in their respective V8<class>Custom.cpp.

        Old converters in V8DOMWrapper will be deleted in a later patch.

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

        * Android.v8bindings.mk:
        * WebCore.gyp/WebCore.gyp:
        * WebCore.gypi:
        * bindings/scripts/CodeGeneratorV8.pm:
        * bindings/v8/V8Collection.h:
        * bindings/v8/V8DOMWrapper.cpp:
        * bindings/v8/V8DOMWrapper.h:
        * bindings/v8/V8Proxy.h:
        * bindings/v8/custom/V8BarInfoCustom.cpp: Added.
        * bindings/v8/custom/V8CSSRuleCustom.cpp: Added.
        * bindings/v8/custom/V8CSSStyleSheetCustom.cpp: Added.
        * bindings/v8/custom/V8CSSValueCustom.cpp: Added.
        * bindings/v8/custom/V8CanvasPixelArrayCustom.cpp: Added.
        * bindings/v8/custom/V8CanvasRenderingContext2DCustom.cpp:
        * bindings/v8/custom/V8ConsoleCustom.cpp:
        * bindings/v8/custom/V8DOMSelectionCustom.cpp: Added.
        * bindings/v8/custom/V8DOMWindowCustom.cpp:
        * bindings/v8/custom/V8DocumentCustom.cpp:
        * bindings/v8/custom/V8ElementCustom.cpp:
        * bindings/v8/custom/V8EventCustom.cpp:
        * bindings/v8/custom/V8HTMLDocumentCustom.cpp:
        * bindings/v8/custom/V8HTMLElementCustom.cpp: Added.
        * bindings/v8/custom/V8HTMLSelectElementCustom.cpp:
        * bindings/v8/custom/V8HistoryCustom.cpp:
        * bindings/v8/custom/V8LocationCustom.cpp:
        * bindings/v8/custom/V8NamedNodeMapCustom.cpp:
        * bindings/v8/custom/V8NavigatorCustom.cpp:
        * bindings/v8/custom/V8NodeCustom.cpp:
        * bindings/v8/custom/V8SVGDocumentCustom.cpp: Added.
        * bindings/v8/custom/V8SVGElementCustom.cpp: Added.
        * bindings/v8/custom/V8SVGPathSegCustom.cpp: Added.
        * bindings/v8/custom/V8ScreenCustom.cpp: Added.
        * bindings/v8/custom/V8StyleSheetCustom.cpp: Added.
        * bindings/v8/custom/V8TreeWalkerCustom.cpp:
        * bindings/v8/custom/V8WebGLArrayCustom.cpp: Added.
        * bindings/v8/custom/V8WebGLByteArrayCustom.cpp:
        * bindings/v8/custom/V8WebGLFloatArrayCustom.cpp:
        * bindings/v8/custom/V8WebGLIntArrayCustom.cpp:
        * bindings/v8/custom/V8WebGLRenderingContextCustom.cpp:
        * bindings/v8/custom/V8WebGLShortArrayCustom.cpp:
        * bindings/v8/custom/V8WebGLUnsignedByteArrayCustom.cpp:
        * bindings/v8/custom/V8WebGLUnsignedIntArrayCustom.cpp:
        * bindings/v8/custom/V8WebGLUnsignedShortArrayCustom.cpp:
        * dom/make_names.pl: Add options to generate wrapper factory for V8 bindings.

2010-02-01  Alexander Pavlov  <apavlov@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: lazy-load textual resources to avoid UI hangup
        https://bugs.webkit.org/show_bug.cgi?id=34332

        * inspector/front-end/ResourceView.js:
        (WebInspector.ResourceView.prototype._innerSelectContentTab):
        * inspector/front-end/SourceView.js:
        (WebInspector.SourceView.prototype.show):
        (WebInspector.SourceView.prototype.contentTabSelected):

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

        Reviewed by Adele Peterson.

        Crash in Safari opening new tabs to "same page"
        <rdar://problem/7593857> and https://bugs.webkit.org/show_bug.cgi?id=34444

        Test: fast/loader/crash-copying-backforwardlist.html

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::loadItem): Null check currentItem().

        * page/Page.cpp:
        (WebCore::Page::goToItem): Ditto.

2010-02-01  Kevin Watters  <kevinwatters@gmail.com>

        Reviewed by Kevin Ollivier.

        [wx] Remove unused file that doesn't seem to belong to the port.
        
        https://bugs.webkit.org/show_bug.cgi?id=34445

        * platform/wx/KeyEventWin.cpp: Removed.

2010-02-01  Eric Carlson  <eric.carlson@apple.com>

        Reviewed by Adele Peterson.

        Fullscreen API should be on HTMLVideoElement
        https://bugs.webkit.org/show_bug.cgi?id=34438
        
        Move fullscreen DOM APIs from HTMLMediaElement to HTMLVideoElement.

        * html/HTMLMediaElement.cpp:
        * html/HTMLMediaElement.h:
        * html/HTMLMediaElement.idl:
        * html/HTMLVideoElement.cpp:
        (WebCore::HTMLVideoElement::paint): Removed outdated FIXME.
        (WebCore::HTMLVideoElement::paintCurrentFrameInContext): Ditto.
        (WebCore::HTMLVideoElement::webkitEnterFullScreen): Moved from HTMLMediaElement.
        (WebCore::HTMLVideoElement::webkitExitFullScreen): Ditto.
        (WebCore::HTMLVideoElement::webkitSupportsFullscreen): Ditto.
        (WebCore::HTMLVideoElement::webkitDisplayingFullscreen): Ditto.
        * html/HTMLVideoElement.h:
        * html/HTMLVideoElement.idl:

2010-02-01  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Timothy Hatcher.

        Web Inspector: Syntax highlighting in source view of
        Resources pane stops half-way.

        There were two problems here: (1) styles for html highlighter were not
        added into the css file (they used to be injected manually in the
        SourceFrame before). (2) 'Tag' needed to be lexer's state, not parser's.
        Otherwise unbalanced quotes in the text nodes were matching too match
        into the string tokens.

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

        * inspector/front-end/NativeTextViewer.js:
        (WebInspector.NativeTextViewer.prototype._createLineDivs):
        (WebInspector.NativeTextViewer.prototype._lineHeight):
        (WebInspector.NativeTextViewer.prototype.initFontMetrics):
        * inspector/front-end/SourceFrame.js:
        (WebInspector.SourceFrame.prototype._createEditorIfNeeded):
        * inspector/front-end/SourceHTMLTokenizer.js:
        (WebInspector.SourceHTMLTokenizer):
        (WebInspector.SourceHTMLTokenizer.prototype.nextToken):
        * inspector/front-end/SourceHTMLTokenizer.re2js:
        * inspector/front-end/TextEditor.js:
        (WebInspector.TextEditor.prototype.initFontMetrics):
        (WebInspector.TextEditor.prototype._registerShortcuts):
        * inspector/front-end/inspectorSyntaxHighlight.css:

2010-02-01  Ben Murdoch  <benm@google.com>

        Reviewed by Darin Adler.

        ScriptCallFrame's do not get line numbers/source id's if the caller is unkown.
        https://bugs.webkit.org/show_bug.cgi?id=34335

        * bindings/js/ScriptCallStack.cpp:
        (WebCore::ScriptCallStack::ScriptCallStack): If the caller is unknown, the line number and source information is still available so pass it to the ScriptCallFrame being constructed.

2010-02-01  Dirk Schulze  <krit@webkit.org>

        Reviewed by Simon Fraser.

        Add back an AffineTransform class for use by SVG
        https://bugs.webkit.org/show_bug.cgi?id=33750

        These are the first steps on reimplementing AffineTransform. Unlike
        the old affine code, this one is platform independent like TransformationMatrix.
        AffineTransform has the benefit, that it stores just 6 doubles instead of
        16 in TransformationMatrix. The calculations of transformations are not that
        complex and can improve the memory usage and speed of SVG.
        AffineTransform can be used by HTML Canvas3D or SVG, since they are 2D related (at
        least for the moment).
        HTML Canvas is the first that makes use of the new AffineTransform. Next patches
        will introduce the affine code to SVG.

        No new tests. The new AffineTransformation code is tested by fast/canvas.

        * Android.mk:
        * GNUmakefile.am:
        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * html/canvas/CanvasRenderingContext2D.cpp:
        (WebCore::CanvasRenderingContext2D::scale):
        (WebCore::CanvasRenderingContext2D::rotate):
        (WebCore::CanvasRenderingContext2D::translate):
        (WebCore::CanvasRenderingContext2D::transform):
        (WebCore::CanvasRenderingContext2D::setTransform):
        (WebCore::CanvasRenderingContext2D::isPointInPath):
        (WebCore::CanvasRenderingContext2D::willDraw):
        * html/canvas/CanvasRenderingContext2D.h:
        * platform/graphics/GraphicsContext.h:
        * platform/graphics/Path.h:
        * platform/graphics/cairo/GraphicsContextCairo.cpp:
        (WebCore::GraphicsContext::getAffineCTM):
        (WebCore::GraphicsContext::concatCTM):
        * platform/graphics/cairo/GraphicsContextPlatformPrivateCairo.h:
        (WebCore::GraphicsContextPlatformPrivate::concatCTM):
        * platform/graphics/cairo/PathCairo.cpp:
        (WebCore::Path::transform):
        * platform/graphics/cairo/TransformationMatrixCairo.cpp:
        (WebCore::AffineTransform::operator cairo_matrix_t):
        * platform/graphics/cg/GraphicsContextCG.cpp:
        (WebCore::GraphicsContext::concatCTM):
        (WebCore::GraphicsContext::getAffineCTM):
        * platform/graphics/cg/GraphicsContextPlatformPrivateCG.h:
        (WebCore::GraphicsContextPlatformPrivate::concatCTM):
        * platform/graphics/cg/PathCG.cpp:
        (WebCore::Path::transform):
        * platform/graphics/cg/TransformationMatrixCG.cpp:
        (WebCore::AffineTransform::operator CGAffineTransform):
        * platform/graphics/haiku/GraphicsContextHaiku.cpp:
        (WebCore::GraphicsContext::getAffineCTM):
        (WebCore::GraphicsContext::concatCTM):
        * platform/graphics/haiku/PathHaiku.cpp:
        (WebCore::Path::transform):
        * platform/graphics/qt/GraphicsContextQt.cpp:
        (WebCore::GraphicsContext::getAffineCTM):
        (WebCore::GraphicsContext::concatCTM):
        * platform/graphics/qt/PathQt.cpp:
        (WebCore::Path::transform):
        * platform/graphics/qt/TransformationMatrixQt.cpp:
        (WebCore::AffineTransform::operator QTransform):
        * platform/graphics/skia/GraphicsContextSkia.cpp:
        (WebCore::GraphicsContext::concatCTM):
        (WebCore::GraphicsContext::getAffineCTM):
        * platform/graphics/skia/PathSkia.cpp:
        (WebCore::Path::transform):
        * platform/graphics/skia/TransformationMatrixSkia.cpp:
        (WebCore::AffineTransform::operator SkMatrix):
        * platform/graphics/transforms/AffineTransform.cpp: Added.
        (WebCore::affineTransformDecompose):
        (WebCore::affineTransformCompose):
        (WebCore::AffineTransform::AffineTransform):
        (WebCore::AffineTransform::reset):
        (WebCore::AffineTransform::setMatrix):
        (WebCore::AffineTransform::isIdentity):
        (WebCore::AffineTransform::det):
        (WebCore::AffineTransform::isInvertible):
        (WebCore::AffineTransform::inverse):
        (WebCore::AffineTransform::multiply):
        (WebCore::AffineTransform::multLeft):
        (WebCore::AffineTransform::rotate):
        (WebCore::AffineTransform::scale):
        (WebCore::AffineTransform::translate):
        (WebCore::AffineTransform::scaleNonUniform):
        (WebCore::AffineTransform::rotateFromVector):
        (WebCore::AffineTransform::flipX):
        (WebCore::AffineTransform::flipY):
        (WebCore::AffineTransform::shear):
        (WebCore::AffineTransform::skew):
        (WebCore::AffineTransform::skewX):
        (WebCore::AffineTransform::skewY):
        (WebCore::makeMapBetweenRects):
        (WebCore::AffineTransform::map):
        (WebCore::AffineTransform::mapPoint):
        (WebCore::AffineTransform::mapRect):
        (WebCore::AffineTransform::blend):
        (WebCore::AffineTransform::toTransformationMatrix):
        * platform/graphics/transforms/AffineTransform.h: Added.
        (WebCore::AffineTransform::a):
        (WebCore::AffineTransform::setA):
        (WebCore::AffineTransform::b):
        (WebCore::AffineTransform::setB):
        (WebCore::AffineTransform::c):
        (WebCore::AffineTransform::setC):
        (WebCore::AffineTransform::d):
        (WebCore::AffineTransform::setD):
        (WebCore::AffineTransform::e):
        (WebCore::AffineTransform::setE):
        (WebCore::AffineTransform::f):
        (WebCore::AffineTransform::setF):
        (WebCore::AffineTransform::operator== ):
        (WebCore::AffineTransform::operator!=):
        (WebCore::AffineTransform::operator*=):
        (WebCore::AffineTransform::operator*):
        (WebCore::AffineTransform::setMatrix):
        * platform/graphics/win/GraphicsContextWin.cpp:
        (WebCore::GraphicsContextPlatformPrivate::concatCTM):
        * platform/graphics/wince/GraphicsContextWince.cpp:
        (WebCore::GraphicsContext::concatCTM):
        (WebCore::GraphicsContext::getAffineCTM):
        * platform/graphics/wx/GraphicsContextWx.cpp:
        (WebCore::GraphicsContext::getAffineCTM):
        (WebCore::GraphicsContext::concatCTM):
        * platform/graphics/wx/PathWx.cpp:
        (WebCore::Path::transform):
        * platform/graphics/wx/TransformationMatrixWx.cpp:
        (WebCore::AffineTransform::operator wxGraphicsMatrix):

2010-01-29  Philippe Normand  <pnormand@igalia.com>

        Reviewed by Eric Carlson.

        [GTK] set playbin mute property depending on volume value
        https://bugs.webkit.org/show_bug.cgi?id=31586

        New API in MediaPlayer for mute control. 3 new methods are
        introduced:

        - bool supportsMuting() const;
        - bool muted() const;
        - void setMuted(bool);

        Platform MediaPlayer implementations can support it easily if the
        underlying sound daemon/API supports muting (eg. not only setting
        volume to 0) like PulseAudio for instance on Linux. At the moment
        the only player supporting this new API is the
        MediaPlayerPrivateGStreamer.

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::setMuted):
        (WebCore::HTMLMediaElement::mediaPlayerVolumeChanged):
        (WebCore::HTMLMediaElement::mediaPlayerMuteChanged):
        * html/HTMLMediaElement.h:
        * platform/graphics/MediaPlayer.cpp:
        (WebCore::NullMediaPlayerPrivate::supportsMuting):
        (WebCore::NullMediaPlayerPrivate::setMuted):
        (WebCore::MediaPlayer::MediaPlayer):
        (WebCore::MediaPlayer::muted):
        (WebCore::MediaPlayer::supportsMuting):
        (WebCore::MediaPlayer::setMuted):
        (WebCore::MediaPlayer::volumeChanged):
        (WebCore::MediaPlayer::muteChanged):
        * platform/graphics/MediaPlayer.h:
        (WebCore::MediaPlayerClient::mediaPlayerMuteChanged):
        * platform/graphics/MediaPlayerPrivate.h:
        (WebCore::MediaPlayerPrivateInterface::supportsMuting):
        (WebCore::MediaPlayerPrivateInterface::setMuted):
        * platform/graphics/gtk/MediaPlayerPrivateGStreamer.cpp:
        (WebCore::mediaPlayerPrivateVolumeChangedCallback):
        (WebCore::notifyVolumeIdleCallback):
        (WebCore::mediaPlayerPrivateMuteChangedCallback):
        (WebCore::notifyMuteIdleCallback):
        (WebCore::MediaPlayerPrivate::MediaPlayerPrivate):
        (WebCore::MediaPlayerPrivate::~MediaPlayerPrivate):
        (WebCore::MediaPlayerPrivate::volumeChangedCallback):
        (WebCore::MediaPlayerPrivate::volumeChanged):
        (WebCore::MediaPlayerPrivate::supportsMuting):
        (WebCore::MediaPlayerPrivate::setMuted):
        (WebCore::MediaPlayerPrivate::muteChangedCallback):
        (WebCore::MediaPlayerPrivate::muteChanged):
        (WebCore::MediaPlayerPrivate::createGSTPlayBin):
        * platform/graphics/gtk/MediaPlayerPrivateGStreamer.h:

2010-02-01  Henry Haverinen  <henry.haverinen@nokia.com>

        Reviewed by Simon Hausmann.

        [Qt] Build without SSL support is broken

        Added missing #ifdefs for OpenSSL support and one null-pointer
        check for the socket.

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

        * platform/network/qt/SocketStreamHandlePrivate.h:
        * platform/network/qt/SocketStreamHandleQt.cpp:
        (WebCore::SocketStreamHandlePrivate::SocketStreamHandlePrivate):
        (WebCore::SocketStreamHandlePrivate::send):

2010-02-01  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Timothy Hatcher.

        Web Inspector: Fix rest of the NativeTextViewer (line numbers,
        conditional breakpoints, selection).

        * inspector/front-end/NativeTextViewer.js:
        (WebInspector.NativeTextViewer):
        (WebInspector.NativeTextViewer.prototype._updatePreferredSize):
        (WebInspector.NativeTextViewer.prototype._registerMouseListeners):
        (WebInspector.NativeTextViewer.prototype._mouseDown):
        (WebInspector.NativeTextViewer.prototype._contextMenu):
        (WebInspector.NativeTextViewer.prototype._lineForMouseEvent):
        (WebInspector.NativeTextViewer.prototype._lineHeight):
        * inspector/front-end/TextEditor.js:
        (WebInspector.TextEditor):
        (WebInspector.TextEditor.prototype._registerMouseListeners):
        (WebInspector.TextEditor.prototype._offsetToLine):
        (WebInspector.TextEditor.prototype._lineHeight):
        (WebInspector.TextEditor.prototype.reveal):
        (WebInspector.TextEditor.prototype._paint):
        (WebInspector.TextEditor.prototype._updateDivDecorations):
        (WebInspector.TextEditor.prototype._paintSelection):

2010-02-01  Steve Block  <steveblock@google.com>

        Reviewed by Ariya Hidayat.

        Adds implementation of JavaString for V8.
        https://bugs.webkit.org/show_bug.cgi?id=33953

        No new tests, build fix only.

        * bridge/jni/JNIBridge.h: Modified. Include JavaStringV8.h for V8
        * bridge/jni/v8: Added.
        * bridge/jni/v8/JavaStringV8.h: Added.
        (JSC::Bindings::JavaStringImpl::init):
        (JSC::Bindings::JavaStringImpl::UTF8String):
        (JSC::Bindings::JavaStringImpl::uchars):
        (JSC::Bindings::JavaStringImpl::length):

2010-02-01  Alex Milowski  <alex@milowski.com>

        Reviewed by Darin Adler.

        Added compile time debug support for mathml layout (block boundary & baseline)

        * mathml/RenderMathMLBlock.cpp:
        (WebCore::RenderMathMLBlock::stretchToHeight):
        (WebCore::RenderMathMLBlock::paint):
        * mathml/RenderMathMLBlock.h:

2010-02-01  Philippe Normand  <pnormand@igalia.com>

        Rubber stamped by Xan Lopez.

        Fixed compilation warning about unsigned vs signed comparison.

        * plugins/gtk/PluginViewGtk.cpp:
        (WebCore::PluginView::paint):

2010-01-31  Kent Tamura  <tkent@chromium.org>

        Unreviewed. Revert r54112 and r54124 because of Windows build error.

        * Android.mk:
        * GNUmakefile.am:
        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * html/canvas/CanvasRenderingContext2D.cpp:
        (WebCore::CanvasRenderingContext2D::scale):
        (WebCore::CanvasRenderingContext2D::rotate):
        (WebCore::CanvasRenderingContext2D::translate):
        (WebCore::CanvasRenderingContext2D::transform):
        (WebCore::CanvasRenderingContext2D::setTransform):
        (WebCore::CanvasRenderingContext2D::isPointInPath):
        (WebCore::CanvasRenderingContext2D::willDraw):
        * html/canvas/CanvasRenderingContext2D.h:
        * platform/graphics/GraphicsContext.h:
        * platform/graphics/Path.h:
        * platform/graphics/cairo/GraphicsContextCairo.cpp:
        * platform/graphics/cairo/GraphicsContextPlatformPrivateCairo.h:
        * platform/graphics/cairo/PathCairo.cpp:
        * platform/graphics/cairo/TransformationMatrixCairo.cpp:
        * platform/graphics/cg/GraphicsContextCG.cpp:
        * platform/graphics/cg/GraphicsContextPlatformPrivateCG.h:
        * platform/graphics/cg/PathCG.cpp:
        * platform/graphics/cg/TransformationMatrixCG.cpp:
        * platform/graphics/haiku/GraphicsContextHaiku.cpp:
        * platform/graphics/haiku/PathHaiku.cpp:
        * platform/graphics/qt/GraphicsContextQt.cpp:
        * platform/graphics/qt/PathQt.cpp:
        * platform/graphics/qt/TransformationMatrixQt.cpp:
        * platform/graphics/skia/GraphicsContextSkia.cpp:
        * platform/graphics/skia/PathSkia.cpp:
        * platform/graphics/skia/TransformationMatrixSkia.cpp:
        * platform/graphics/transforms/AffineTransform.cpp: Removed.
        * platform/graphics/transforms/AffineTransform.h: Removed.
        * platform/graphics/wince/GraphicsContextWince.cpp:
        * platform/graphics/wx/GraphicsContextWx.cpp:
        * platform/graphics/wx/PathWx.cpp:
        * platform/graphics/wx/TransformationMatrixWx.cpp:
        (WebCore::TransformationMatrix::operator wxGraphicsMatrix):

2010-01-31  Kwang Yul Seo  <skyul@company100.net>

        Reviewed by Darin Adler.

        Limit the scope of packing alignment to avoid MSVC C4103 warning.
        https://bugs.webkit.org/show_bug.cgi?id=34390

        Use pack(push, 16) and pack(pop) to limit the scope of packing
        alignment change.

        * bindings/js/JSSVGPODTypeWrapper.h:

2010-01-31  Kent Tamura  <tkent@chromium.org>

        Reviewed by Darin Adler.

        Fix valueAsNumber calculation for type=month.
        https://bugs.webkit.org/show_bug.cgi?id=34304

        valueAsNumber calculation for type=month which was checked in as
        r53893 was the number of milliseconds since UNIX epoch, and it was
        wrong. The correct way is the number months since UNIX epoch.

        * html/DateComponents.cpp:
        (WebCore::DateComponents::setMonthsSinceEpoch):
        (WebCore::DateComponents::monthsSinceEpoch):
        * html/DateComponents.h: Declare setMonthsSinceEpoch() and monthsSinceEpoch().
        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::parseToDouble):
          Switch to monthsSinceEpoch() for type=MONTH.
        (WebCore::HTMLInputElement::valueAsDate):
          Add code with millisecondsSinceEpoch() for MONTH because
          parseToDouble() changed its behavior.
        (WebCore::HTMLInputElement::setValueAsNumber):
          Use setMonthsSinceEpoch() for MONTH.

2010-01-31  Dan Bernstein  <mitz@apple.com>

        Reviewed by Timothy Hatcher.

        Web Inspector: REGRESSION: Numbers in bubbles are vertically off-center
        https://bugs.webkit.org/show_bug.cgi?id=34398

        * inspector/front-end/inspector.css: Specify line-height: normal for
        ".console-message .bubble" and ".sidebar-tree-item .status .bubble".

2010-01-28  Ojan Vafai  <ojan@chromium.org>

        Reviewed by Darin Adler.

        Implement CSSOM Range.getClientRects for collapsed selections
        https://bugs.webkit.org/show_bug.cgi?id=34239

        When getting the quads for a range on a text node, allow returning
        zero width quads. This leaves the case of collapsed selections inside
        elements still not fixed, but no worse.

        * rendering/InlineTextBox.cpp:
        (WebCore::InlineTextBox::selectionRect):
        * rendering/RenderText.cpp:
        (WebCore::RenderText::absoluteQuadsForRange):

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

        Reviewed by Simon Fraser.

        Animated scaling of background-image is too slow
        https://bugs.webkit.org/show_bug.cgi?id=33808

        Implement a version of the RenderImage animated scaling optimisation
        for background images. Due to the possibility of arbitrary transforms
        being applied to containing elements we explicitly check the current
        CTM of the context for scaling or rotation.

        * platform/graphics/GraphicsContext.cpp:
        (WebCore::GraphicsContext::drawTiledImage):
        * platform/graphics/GraphicsContext.h:
        * platform/graphics/transforms/TransformationMatrix.h:
        (WebCore::TransformationMatrix::isIdentityOrTranslation):
        * rendering/RenderBoxModelObject.cpp:
        (WebCore::RenderBoxModelScaleData::RenderBoxModelScaleData):
        (WebCore::RenderBoxModelScaleData::~RenderBoxModelScaleData):
        (WebCore::RenderBoxModelScaleData::hiqhQualityRepaintTimer):
        (WebCore::RenderBoxModelScaleData::size):
        (WebCore::RenderBoxModelScaleData::setSize):
        (WebCore::RenderBoxModelScaleData::lastPaintTime):
        (WebCore::RenderBoxModelScaleData::setLastPaintTime):
        (WebCore::RenderBoxModelScaleData::useLowQualityScale):
        (WebCore::RenderBoxModelScaleData::transform):
        (WebCore::RenderBoxModelScaleData::setTransform):
        (WebCore::RenderBoxModelScaleData::setUseLowQualityScale):
        (WebCore::RenderBoxModelScaleObserver::boxModelObjectDestroyed):
        (WebCore::RenderBoxModelScaleObserver::highQualityRepaintTimerFired):
        (WebCore::RenderBoxModelScaleObserver::shouldPaintBackgroundAtLowQuality):
        (WebCore::RenderBoxModelObject::highQualityRepaintTimerFired):
        (WebCore::RenderBoxModelObject::~RenderBoxModelObject):
        (WebCore::RenderBoxModelObject::paintFillLayerExtended):
        * rendering/RenderBoxModelObject.h:

2010-01-31  Dirk Schulze  <krit@webkit.org>

        Reviewed by Simon Fraser.

        Add back an AffineTransform class for use by SVG
        https://bugs.webkit.org/show_bug.cgi?id=33750

        These are the first steps on reimplementing AffineTransform. Unlike
        the old affine code, this one is platform independent like TransformationMatrix.
        AffineTransform has the benefit, that it stores just 6 doubles instead of
        16 in TransformationMatrix. The calculations of transformations are not that
        complex and can improve the memory usage and speed of SVG.
        AffineTransform can be used by HTML Canvas3D or SVG, since they are 2D related (at
        least for the moment).
        HTML Canvas is the first that makes use of the new AffineTransform. Next patches
        will introduce the affine code to SVG.

        No new tests. The new AffineTransformation code is tested by fast/canvas.

        * Android.mk:
        * GNUmakefile.am:
        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * html/canvas/CanvasRenderingContext2D.cpp:
        (WebCore::CanvasRenderingContext2D::scale):
        (WebCore::CanvasRenderingContext2D::rotate):
        (WebCore::CanvasRenderingContext2D::translate):
        (WebCore::CanvasRenderingContext2D::transform):
        (WebCore::CanvasRenderingContext2D::setTransform):
        (WebCore::CanvasRenderingContext2D::isPointInPath):
        (WebCore::CanvasRenderingContext2D::willDraw):
        * html/canvas/CanvasRenderingContext2D.h:
        * platform/graphics/GraphicsContext.h:
        * platform/graphics/Path.h:
        * platform/graphics/cairo/GraphicsContextCairo.cpp:
        (WebCore::GraphicsContext::getAffineCTM):
        (WebCore::GraphicsContext::concatCTM):
        * platform/graphics/cairo/GraphicsContextPlatformPrivateCairo.h:
        (WebCore::GraphicsContextPlatformPrivate::concatCTM):
        * platform/graphics/cairo/PathCairo.cpp:
        (WebCore::Path::transform):
        * platform/graphics/cairo/TransformationMatrixCairo.cpp:
        (WebCore::AffineTransform::operator cairo_matrix_t):
        * platform/graphics/cg/GraphicsContextCG.cpp:
        (WebCore::GraphicsContext::concatCTM):
        (WebCore::GraphicsContext::getAffineCTM):
        * platform/graphics/cg/GraphicsContextPlatformPrivateCG.h:
        (WebCore::GraphicsContextPlatformPrivate::concatCTM):
        * platform/graphics/cg/PathCG.cpp:
        (WebCore::Path::transform):
        * platform/graphics/cg/TransformationMatrixCG.cpp:
        (WebCore::AffineTransform::operator CGAffineTransform):
        * platform/graphics/haiku/GraphicsContextHaiku.cpp:
        (WebCore::GraphicsContext::getAffineCTM):
        (WebCore::GraphicsContext::concatCTM):
        * platform/graphics/haiku/PathHaiku.cpp:
        (WebCore::Path::transform):
        * platform/graphics/qt/GraphicsContextQt.cpp:
        (WebCore::GraphicsContext::getAffineCTM):
        (WebCore::GraphicsContext::concatCTM):
        * platform/graphics/qt/PathQt.cpp:
        (WebCore::Path::transform):
        * platform/graphics/qt/TransformationMatrixQt.cpp:
        (WebCore::AffineTransform::operator QTransform):
        * platform/graphics/skia/GraphicsContextSkia.cpp:
        (WebCore::GraphicsContext::getAffineCTM):
        * platform/graphics/skia/PathSkia.cpp:
        (WebCore::Path::transform):
        * platform/graphics/skia/TransformationMatrixSkia.cpp:
        (WebCore::AffineTransform::operator SkMatrix):
        * platform/graphics/transforms/AffineTransform.cpp: Added.
        (WebCore::affineTransformDecompose):
        (WebCore::affineTransformCompose):
        (WebCore::AffineTransform::AffineTransform):
        (WebCore::AffineTransform::reset):
        (WebCore::AffineTransform::setMatrix):
        (WebCore::AffineTransform::isIdentity):
        (WebCore::AffineTransform::det):
        (WebCore::AffineTransform::isInvertible):
        (WebCore::AffineTransform::inverse):
        (WebCore::AffineTransform::multiply):
        (WebCore::AffineTransform::multLeft):
        (WebCore::AffineTransform::rotate):
        (WebCore::AffineTransform::scale):
        (WebCore::AffineTransform::translate):
        (WebCore::AffineTransform::scaleNonUniform):
        (WebCore::AffineTransform::rotateFromVector):
        (WebCore::AffineTransform::flipX):
        (WebCore::AffineTransform::flipY):
        (WebCore::AffineTransform::shear):
        (WebCore::AffineTransform::skew):
        (WebCore::AffineTransform::skewX):
        (WebCore::AffineTransform::skewY):
        (WebCore::makeMapBetweenRects):
        (WebCore::AffineTransform::map):
        (WebCore::AffineTransform::mapPoint):
        (WebCore::AffineTransform::mapRect):
        (WebCore::AffineTransform::blend):
        * platform/graphics/transforms/AffineTransform.h: Added.
        (WebCore::AffineTransform::a):
        (WebCore::AffineTransform::setA):
        (WebCore::AffineTransform::b):
        (WebCore::AffineTransform::setB):
        (WebCore::AffineTransform::c):
        (WebCore::AffineTransform::setC):
        (WebCore::AffineTransform::d):
        (WebCore::AffineTransform::setD):
        (WebCore::AffineTransform::e):
        (WebCore::AffineTransform::setE):
        (WebCore::AffineTransform::f):
        (WebCore::AffineTransform::setF):
        (WebCore::AffineTransform::operator== ):
        (WebCore::AffineTransform::operator!=):
        (WebCore::AffineTransform::operator*=):
        (WebCore::AffineTransform::operator*):
        (WebCore::AffineTransform::setMatrix):
        * platform/graphics/wince/GraphicsContextWince.cpp:
        (WebCore::GraphicsContext::concatCTM):
        (WebCore::GraphicsContext::getAffineCTM):
        * platform/graphics/wx/GraphicsContextWx.cpp:
        (WebCore::GraphicsContext::getAffineCTM):
        (WebCore::GraphicsContext::concatCTM):
        * platform/graphics/wx/PathWx.cpp:
        (WebCore::Path::transform):
        * platform/graphics/wx/TransformationMatrixWx.cpp:
        (WebCore::AffineTransform::operator wxGraphicsMatrix):

2010-01-31  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Timothy Hatcher.

        Web Inspector: [REGRESSION] Breakpoint source line is not displayed
        in the breakpoint manager.

        * inspector/front-end/SourceFrame.js:
        (WebInspector.SourceFrame.prototype._addBreakpointToSource):

2010-01-31  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Timothy Hatcher.

        Web Inspector: Introduce NativeTextViewer.

        This change handles rendering highlighted text, using browser's
        selection/drag/drop/click logic. Breakpoint decorations and
        program counter is working.

        Todo: line numbers are painted 'under' the text when scrolling
        horizontally, search is not yet implemented.

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

        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * inspector/front-end/DivBasedTextViewer.js: Added.
        (WebInspector.DivBasedTextViewer):
        (WebInspector.DivBasedTextViewer.prototype._textChanged):
        (WebInspector.DivBasedTextViewer.prototype._createLineDivs):
        (WebInspector.DivBasedTextViewer.prototype._updatePreferredSize):
        (WebInspector.DivBasedTextViewer.prototype._scroll):
        (WebInspector.DivBasedTextViewer.prototype._registerMouseListeners):
        (WebInspector.DivBasedTextViewer.prototype._registerKeyboardListeners):
        (WebInspector.DivBasedTextViewer.prototype._registerClipboardListeners):
        (WebInspector.DivBasedTextViewer.prototype._paintSelection):
        (WebInspector.DivBasedTextViewer.prototype._positionDivDecoration):
        (WebInspector.DivBasedTextViewer.prototype._mouseDown):
        (WebInspector.DivBasedTextViewer.prototype._contextMenu):
        (WebInspector.DivBasedTextViewer.prototype._caretForMouseEvent):
        (WebInspector.DivBasedTextViewer.prototype._paintLine):
        (WebInspector.DivBasedTextViewer.prototype._createSpan):
        * inspector/front-end/Settings.js:
        * inspector/front-end/SourceFrame.js:
        (WebInspector.SourceFrame.prototype.clearMessages):
        (WebInspector.SourceFrame.prototype.sizeToFitContentHeight):
        (WebInspector.SourceFrame.prototype._createEditorIfNeeded):
        (WebInspector.SourceFrame.prototype._addMessageToSource):
        (WebInspector.SourceFrame.prototype.resize):
        * inspector/front-end/TextEditor.js:
        (WebInspector.TextEditor):
        (WebInspector.TextEditor.prototype.setDivDecoration):
        (WebInspector.TextEditor.prototype._registerMouseListeners):
        (WebInspector.TextEditor.prototype._registerKeyboardListeners):
        (WebInspector.TextEditor.prototype._registerClipboardListeners):
        (WebInspector.TextEditor.prototype.reveal):
        (WebInspector.TextEditor.prototype._textChanged):
        (WebInspector.TextEditor.prototype.revalidateDecorationsAndPaint):
        (WebInspector.TextEditor.prototype._updatePreferredSize):
        (WebInspector.TextEditor.prototype.resize):
        (WebInspector.TextEditor.prototype._paintLinesContinuation):
        (WebInspector.TextEditor.prototype._paintLine):
        (WebInspector.TextEditor.prototype._contextMenu):
        (WebInspector.TextEditor.prototype._caretForMouseEvent):
        (WebInspector.TextEditor.prototype._changeFont):
        * inspector/front-end/TextEditorHighlighter.js:
        (WebInspector.TextEditorHighlighter.prototype._lex):
        * inspector/front-end/WebKit.qrc:
        * inspector/front-end/inspector.html:
        * inspector/front-end/textEditor.css:

2010-01-31  Benjamin Poulain  <benjamin.poulain@nokia.com>

        Reviewed by Eric Seidel.

        [Qt] Enable FAST_MOBILE_SCROLLING on Qt embedded platforms
        https://bugs.webkit.org/show_bug.cgi?id=34168

        Enable FAST_MOBILE_SCROLLING for Qt on Maemo 5, Linux embedded
        and Symbian

        * WebCore.pro:

2010-01-31  Yury Semikhatsky  <yurys@chromium.org>

        Reviewed by Pavel Feldman.

        Make ScriptState destructor protected since all non-empty
        ScriptStates are managed by GC. Remove obsolete constructor.

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

        * bindings/v8/ScriptState.cpp:
        * bindings/v8/ScriptState.h:

2010-01-30  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Dan Bernstein.

        Use CGGradient on Leopard and later, since it's faster than CGShading
        https://bugs.webkit.org/show_bug.cgi?id=34384

        Use CGGradient on Leopard and later, rather than CGShading, for
        performance.

        * platform/graphics/Gradient.h:
        * platform/graphics/Gradient.cpp:
        (WebCore::Gradient::sortStopsIfNecessary): Utility method to sort stops.
        Did not call this from getColor() to avoid overhead of a function call.

        * platform/graphics/cg/GradientCG.cpp:
        (WebCore::Gradient::platformDestroy): Use CGGradientRelease() post-Tiger.
        (WebCore::Gradient::platformGradient): Create and return a CGGradientRef post-Tiger.
        (WebCore::Gradient::fill): Call new paint() method.
        (WebCore::Gradient::paint): New convenence method that avoids testing
        isRadial() in a bunch of other places.

        * platform/graphics/cg/GraphicsContextCG.cpp:
        (WebCore::GraphicsContext::fillPath): Call the gradient's paint() method.
        (WebCore::GraphicsContext::strokePath): Ditto
        (WebCore::GraphicsContext::fillRect): Ditto
        (WebCore::GraphicsContext::strokeRect): Ditto

2010-01-30  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Adele Peterson.

        Do color animations on premultiplied colors
        https://bugs.webkit.org/show_bug.cgi?id=34383
        
        Convert colors to premultiplied alpha before interpolating them,
        then convert the result back to non-premultiplied. This gives better
        results when animating from transparent colors.

        Test: transitions/color-transition-premultiplied.html

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

2010-01-30  Gustavo Noronha Silva  <gns@gnome.org>

        Build fixes needed for make distcheck.

        * GNUmakefile.am:

2010-01-29  Mark Rowe  <mrowe@apple.com>

        Stop copying an IDL file in to the framework wrapper.

        * WebCore.xcodeproj/project.pbxproj:

2010-01-29  Mark Rowe  <mrowe@apple.com>

        Sort Xcode projects.

        * WebCore.xcodeproj/project.pbxproj:

== Rolled over to ChangeLog-2010-01-29 ==
