2008-04-03  Mark Rowe  <mrowe@apple.com>

        Merge r31320 to Safari-3-1-branch.

    2008-03-26  Adam Roben  <aroben@apple.com>

        Fix Bug 17768: REGRESSION (r30146): Inspector no longer shows elements
        properties

        <http://bugs.webkit.org/show_bug.cgi?id=17768>

        We were throwing an exception from Object.describe because of some
        undefined variables.

        Reviewed by Tim Hatcher.

        * page/inspector/utilities.js:
        (Object.describe): Reinstate the type1 and type2 variables that were
        removed in r30146. They're still used when formatting a function.

2008-03-31  Mark Rowe  <mrowe@apple.com>

        Merge r31438 to Safari-3-1-branch.

    2008-03-29  Sam Weinig  <sam@webkit.org>

        Reviewed by Darin Adler.

        Fix for <rdar://problem/5828873>

        Since NSURL is allowing invalid urls to be loaded, we need to
        check the URL validity at the ResourceHandle level and fire off
        a cannotShowURL error.

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::cannotShowURLError):
        * loader/FrameLoader.h:
        * loader/ResourceLoader.cpp:
        (WebCore::ResourceLoader::cannotShowURLError):
        (WebCore::ResourceLoader::wasBlocked):
        (WebCore::ResourceLoader::cannotShowURL):
        * loader/ResourceLoader.h:
        * platform/KURL.h:
        (WebCore::KURL::isValid):
        * platform/network/ResourceHandle.cpp:
        (WebCore::ResourceHandle::create):
        (WebCore::ResourceHandle::scheduleFailure):
        (WebCore::ResourceHandle::fireFailure):
        (WebCore::portAllowed):
        * platform/network/ResourceHandle.h:
        (WebCore::ResourceHandle::):
        * platform/network/ResourceHandleClient.h:
        (WebCore::ResourceHandleClient::cannotShowURL):
        * platform/network/ResourceHandleInternal.h:
        (WebCore::ResourceHandleInternal::ResourceHandleInternal):

2008-03-31  Mark Rowe  <mrowe@apple.com>

        Merge r31434 to Safari-3-1-branch.

    2008-03-29  Sam Weinig  <sam@webkit.org>

        Reviewed by Brady Eidson.

        Fix crash when canceling a resource load while port blocked failure
        timer is going.

        Test: fast/loader/cancel-load-during-port-block-timer.html

        * platform/network/ResourceHandle.cpp:
        (WebCore::ResourceHandle::scheduleBlockedFailure):
        (WebCore::ResourceHandle::fireBlockedFailure):
        * platform/network/ResourceHandleInternal.h:
        (WebCore::ResourceHandleInternal::ResourceHandleInternal):
        Make the Timer a member variable of ResourceHandleInternal so
        that it can be canceled if the ResourceHandle is destroyed.

2008-03-31  Mark Rowe  <mrowe@apple.com>

        Merge r30722 to Safari-3-1-branch.

    2008-03-03  Mark Rowe  <mrowe@apple.com>

        Reviewed by Dan Bernstein.

        Fix http://bugs.webkit.org/show_bug.cgi?id=17313
        Bug 17313: querySelectorAll() causing crashes when called via dojo.query() wrapper

        Node::querySelector and SelectorNodeList were not sufficiently initializing the CSSStyleSelector
        before using it to resolve styles, which lead to it having a stale m_style member in some situations.
        This stale m_style member resulted in a wild store that would write over whatever object now resided
        at the location m_style pointed to.

        Test: fast/dom/SelectorAPI/bug-17313.html

        * dom/Node.cpp:
        (WebCore::Node::querySelector): Call initForStyleResolve to further initialize the CSSStyleSelector.
        * dom/SelectorNodeList.cpp:
        (WebCore::SelectorNodeList::SelectorNodeList): Ditto.

2008-03-31  Mark Rowe  <mrowe@apple.com>

        Merge r31153 to Safari-3-1-branch.

    2008-03-19  Dan Bernstein  <mitz@apple.com>

        Reviewed by John Sullivan.

        - fix <rdar://problem/5805070> CrashTracer: [USER] 33 crashes in Safari at com.apple.WebCore: WebCore::FrameView::layout + 431

        Test: fast/dynamic/subtree-parent-static-y.html

        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::markContainingBlocksForLayout): Avoid calling
        this method on the parent if the parent is the new layout subtree root,
        which would result in marking all the way to the top, when it should
        actually do nothing.

2008-03-28  Mark Rowe  <mrowe@apple.com>

        Merge r31071 to Safari-3-1-branch.

    2008-03-14  Anders Carlsson  <andersca@apple.com>

        Reviewed by Sam.

        <rdar://problem/5794989>
        https://bugs.webkit.org/show_bug.cgi?id=17792
        REGRESSION (Safari 3.0.4-3.1): Ordering tickets from Sweden's biggest train operator doesn't work

        Pass the frame loader that should be used for looking up the frame name to FrameLoader::createWindow
        so that somewindow.open calls where the active window and 'somewindow' differ return the correct frame.
        
        * bindings/js/JSDOMWindowBase.cpp:
        (WebCore::createWindow):
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::createWindow):
        * loader/FrameLoader.h:

2008-03-28  Mark Rowe  <mrowe@apple.com>

        Merge r31336 to Safari-3-1-branch.

    2008-03-26  Justin Garcia  <justin.garcia@apple.com>

        Reviewed by Harrison.

        <rdar://problem/5820749> REGRESSION (Safari 3.1): Mail's plain text reply omits blank line following the attribution

        * editing/markup.cpp:
        (WebCore::createFragmentFromText): When asked to create a fragment from "Attribution:\n"
        with a context from [html, 0] to [html, 0], we'd return "<html>Attribution</html><br>".
        Don't enclose paragraphs in clones of the context's enclosing block if that block is the
        html or body element.  Currently no way to test [DOMHTMLElement createFragmentFromText:].

2008-03-20  Mark Rowe  <mrowe@apple.com>

        Merge r31144 to Safari-3-1-branch.

    2008-03-18  Sam Weinig  <sam@webkit.org>

        Reviewed by Anders Carlsson.

        Fix for http://bugs.webkit.org/show_bug.cgi?id=17057
        REGRESSION: Frequent random crashes in WebCore::JSNodeList::indexGetter
        <rdar://problem/5725058>

        Tests: fast/dom/NodeList/5725058-crash-scenario-1.html
               fast/dom/NodeList/5725058-crash-scenario-2.html
               fast/dom/NodeList/5725058-crash-scenario-3.html

        * dom/ChildNodeList.cpp: 
        (WebCore::ChildNodeList::ChildNodeList):
        * dom/ChildNodeList.h:
        Remove rootNodeChildrenChanged() method and fix the constructor to not 
        pass in a needsNotifications argument to DynamicNodeList, as it no longer
        takes one.

        * dom/ClassNodeList.cpp:
        (WebCore::ClassNodeList::ClassNodeList):
        Don't pass the needsNotifications argument to DynamicNodeList.

        * dom/ContainerNode.cpp:
        (WebCore::ContainerNode::childrenChanged):
        Rename call to hasNodeLists() to hasNodeListCaches().

        * dom/Document.cpp:
        (WebCore::Document::Document):
        (WebCore::Document::~Document): Zero out the m_document variable to signify
        to destructors down the destruction chain that this is a Document type node
        being destructed, and thus, accessing document() is prohibited.
        * dom/Document.h:
        (WebCore::Document::addNodeListCache): Renamed from addNodeList.
        (WebCore::Document::removeNodeListCache): Renamed from removeNodeList, adds assertion.
        (WebCore::Document::hasNodeListCaches): Renamed from hasNodeListCaches.
        Rename m_numNodeLists to m_numNodeListCaches.

        * dom/DynamicNodeList.cpp:
        (WebCore::DynamicNodeList::DynamicNodeList):
        (WebCore::DynamicNodeList::~DynamicNodeList):
        (WebCore::DynamicNodeList::invalidateCache):
        (WebCore::DynamicNodeList::Caches::Caches):
        * dom/DynamicNodeList.h:
        (WebCore::DynamicNodeList::hasOwnCaches):
        Remove the needsNotifications concept from DynamicNodeList, instead, manually
        invalidate the cache for lists that own their own cache.

        * dom/NameNodeList.cpp:
        (WebCore::NameNodeList::NameNodeList):
        * dom/NameNodeList.h:
        Remove rootNodeAttributeChanged() method and fix the constructor to not 
        pass in a needsNotifications argument to DynamicNodeList, as it no longer
        takes one.

        * dom/Node.cpp:
        (WebCore::Node::~Node): Decrement the document's nodeListCache count
        if we had a NodeListsNodeData cache and this is not the Document being
        destructor, as tagged by a null m_document.
        (WebCore::Node::childNodes): Increment the document's nodeListCache count 
        if we need create the NodeListsNodeData.
        (WebCore::Node::registerDynamicNodeList): Increment the document's nodeListCache count 
        if we need create the NodeListsNodeData.  Change to invalidate all the caches, instead 
        of just the ChildNodeList, if document has had no NodeListCaches.
        (WebCore::Node::unregisterDynamicNodeList): Change to remove the cache from the m_listsWithCaches
        set if it is owned by the NodeList and clear the m_nodeLists if it is empty.
        (WebCore::Node::notifyLocalNodeListsAttributeChanged): Move logic to 
        NodeListsNodeData::invalidateAttributeCaches and clear the cache pointer if it is empty.
        (WebCore::Node::notifyLocalNodeListsChildrenChanged): Move logic to 
        NodeListsNodeData::invalidateCaches and clear the cache pointer if it is empty.
        (WebCore::Node::notifyNodeListsChildrenChanged): Cleanup.
        (WebCore::Node::getElementsByName): Increment the document's nodeListCache count 
        if we need create the NodeListsNodeData.
        (WebCore::Node::getElementsByClassName): Increment the document's nodeListCache count 
        if we need create the NodeListsNodeData.

        (WebCore::NodeListsNodeData::invalidateCaches): Added.
        (WebCore::NodeListsNodeData::invalidateAttributeCaches): Added.
        (WebCore::NodeListsNodeData::isEmpty): Added.

        * dom/TagNodeList.cpp:
        (WebCore::TagNodeList::TagNodeList):
        Don't pass the needsNotifications argument to DynamicNodeList.

2008-03-17  Mark Rowe  <mrowe@apple.com>

        Merge r31069 to Safari-3-1-branch.

    2008-03-14  Dan Bernstein  <mitz@apple.com>

        Reviewed by Mark Rowe.

        - fix <rdar://problem/5797836> shadow offsets are smaller than specified

        * platform/graphics/cg/GraphicsContextCG.cpp:
        (WebCore::GraphicsContext::setShadow): Made the workaround for
        <rdar://problem/5539388> unconditional.

2008-03-03  Mark Rowe  <mrowe@apple.com>

        Merge r30992 to Safari-3-1-branch.

    2008-03-12  David Harrison  <harrison@apple.com>

        Reviewed by Darin.

        <rdar://problem/5607382> CrashTracer: [REGRESSION] 2290 crashes in Safari at com.apple.WebCore: -[WebCoreAXObject isWebArea] + 8

        The problem was that we lost track of the AX cache for a subframe when Frame::disconnectOwnerElement() was
        called, so we were unable to locate the AXObjects to de-register from AppKit's accessibility registry.
        Also saw that cache clearing was missing from Document::detach(), and fixed that.
        
        Also added a debug-only check that AXObjectCache::remove() not finding the AXObject is expected.
        
        Lastly, RenderWidget::destroy() now skips trying to remove the AXObject if accessibility has never been enabled.
       
        * dom/Document.cpp:
        (WebCore::Document::attach):
        Assert that there is no AX cache (since there is no renderer).
        
        (WebCore::Document::detach):
        Destroy the AX cache installed on this document.
        
        (WebCore::Document::clearAXObjectCache):
        New. Destroy the AX cache associated with this document.
        
        (WebCore::Document::axObjectCache):
        Added some comments.
        
        * dom/Document.h:
        Declare clearAXObjectCache().
        
        * page/Frame.cpp:
        (WebCore::Frame::disconnectOwnerElement):
        Destroy the AX cache associated with this frame's document.
        
        * page/mac/AXObjectCacheMac.mm:
        (WebCore::AXObjectCache::remove):        
        * page/mac/WebCoreAXObject.mm:
        (-[WebCoreAXObject initWithRenderer:]):
        (-[WebCoreAXObject detach]):
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::RenderObject):
        (WebCore::RenderObject::~RenderObject):
        * rendering/RenderObject.h:
        (WebCore::RenderObject::setHasAXObject):
        (WebCore::RenderObject::hasAXObject):
        Add debug-only check that AXObjectCache::remove() not finding the AXObject is expected.
        
        * rendering/RenderWidget.cpp:
        (WebCore::RenderWidget::destroy):
        Skip call to remove the AXObject if accessibility has never been enabled. A simple speed optimization in the
        very common case that the accessibility APIs are not being used. Same as in RenderObject::destroy().

2008-03-03  Mark Rowe  <mrowe@apple.com>

        Merge r30716 to Safari-3-1-branch.

    2008-03-03  David Hyatt  <hyatt@apple.com>

        Fix for <rdar://problem/5776161> REGRESSION: Google Docs Spreadsheet crash

        This is also http://bugs.webkit.org/show_bug.cgi?id=17543, fixed table layout corrupts heap.

        Make sure not to access position -1 of the size 0 vectors.

        Reviewed by ggaren

        * rendering/FixedTableLayout.cpp:
        (WebCore::FixedTableLayout::layout):

2008-03-03  Jon Honeycutt  <jhoneycutt@apple.com>

        Reviewed by Darin, Anders.

        Merge r30698 to Safari-3-1-branch.

        * plugins/PluginDatabase.h: Added isPreferredPluginPath(),
        preferredPluginCompare() qsort comparator.
        * plugins/PluginPackage.h: Added bool m_allowsMultipleInstances.
        (WebCore::PluginPackage::allowsMultipleInstances): Added; returns true
        if plug-in can have multiple instances, false otherwise.
        * plugins/win/PluginDatabaseWin.cpp:
        (WebCore::PluginDatabase::preferredPluginCompare): qsort comparator
        function, calls PluginPackage::compare().
        (WebCore::PluginDatabase::pluginForMIMEType): Builds a list of plug-ins
        for a MIME type, sorts them, and returns the first item.
        (WebCore::PluginDatabase::MIMETypeForExtension): Builds a list of
        plug-ins that handle this extension, sorts them, and returns the MIME
        type the first plug-in in the list associates with this extension.
        (WebCore::PluginDatabase::isPreferredPluginPath): Returns true if the
        passed path is the "preferred" plug-in path.
        * plugins/win/PluginPackageWin.cpp:
        (WebCore::PluginPackage::PluginPackage): Set m_allowsMultipleInstances
        to true.
        (WebCore::PluginPackage::fetchInfo): If this is the VLC plug-in, set
        m_allowsMultipleInstances to false.
        (WebCore::PluginPackage::compare): Compare two plug-ins, first checking
        whether a plug-in has an issue that should push it to the back, then
        whether it's in a preferred directory that should move it to the front,
        then by filename, version, and parent directory.
        (WebCore::PluginPackage::load): If this plug-in doesn't allow multiple
        instances, and the package has been loaded, return false.

2008-02-29  Mark Rowe  <mrowe@apple.com>

        Merge r30692 to Safari-3-1-branch.

    2008-02-29  Brady Eidson  <beidson@apple.com>

        Reviewed by build-fix karma

        Bonehead mistake.  Revert function to previous version for all non-Windows+CFNetwork platforms

        * platform/network/ProtectionSpace.cpp:
        (WebCore::ProtectionSpace::receivesCredentialSecurely): Make my previous change conditionally

2008-02-29  Mark Rowe  <mrowe@apple.com>

        Merge r30689 to Safari-3-1-branch.

    2008-02-29  Brady Eidson  <beidson@apple.com>

        Reviewed by Darin

        <rdar://problem/5771227> - Incorrect password handling text in credential sheet

        * platform/network/ProtectionSpace.cpp:
        (WebCore::ProtectionSpace::receivesCredentialSecurely): Call functional CFNetwork method to
        get "secureness" of the auth challenge instead of figuring it out ourselves

2008-02-28  Dave Hyatt  <hyatt@apple.com>

        Reviewed by Darin Adler.

        Fix <rdar://problem/5771994> REGRESSION: Loading HTML5 spec is 5x slower on TOT than in 3.0.4.

        Disable dynamic updating of the + selector when the DOM changes, since it hurt performance on the HTML5 spec.

        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::checkSelector):

2008-02-28  Mark Rowe  <mrowe@apple.com>

        Reviewed by Dave Hyatt.

        <rdar://problem/5767534> REGRESSION (r29976): discovermagazine.com lays out incorrect (17564)

        Roll r29976 out of Safari-3-1-branch.

        * css/CSSGrammar.y:

2008-02-27  Mark Rowe  <mrowe@apple.com>

        Merge r30634 to Safari-3-1-branch.

    2008-02-27  Sam Weinig  <sam@webkit.org>

        Reviewed by Darin.

        Fix for <rdar://problem/5768769>

        - Don't allow cross-origin calls using window.functionName.call(otherFrame)
          syntax.

        * bindings/js/JSLocation.cpp:
        (WebCore::jsLocationProtoFuncToString): Do same-origin check.
        * bindings/js/kjs_window.cpp:
        (KJS::windowProtoFuncAToB): Ditto.
        (KJS::windowProtoFuncBToA): Ditto.
        (KJS::windowProtoFuncOpen): Ditto.
        (KJS::windowProtoFuncClearTimeout): Ditto.
        * bindings/scripts/CodeGeneratorJS.pm: Ditto.

2008-02-26  Mark Rowe  <mrowe@apple.com>

        Merge r30617 to Safari-3-1-branch.

    2008-02-26  Antti Koivisto  <antti@apple.com>

        Reviewed by Darin.

        Fix <rdar://problem/5761326>
        REGRESSION: 1.5% -2% Sunspider regression from r30009 (ebay photo upload hang)
        
        Generate better code with VS:
        - Use ALWAYS_INLINE macro to guarantee versions of allowsAccessFrom() are reduced to single functions
        - Refactor error reporting so that there is no need to construct/destruct Strings in common cases
        - Add a separate version of the function for cases where error messages are not wanted

        * bindings/js/JSDOMWindowCustom.cpp:
        (WebCore::JSDOMWindow::customGetOwnPropertySlot):
        * bindings/js/kjs_window.cpp:
        (KJS::Window::allowsAccessFrom):
        (KJS::Window::allowsAccessFromNoErrorMessage):
        (KJS::Window::allowsAccessFromPrivate):
        (KJS::Window::crossDomainAccessErrorMessage):
        * bindings/js/kjs_window.h:

2008-02-22  Mark Rowe  <mrowe@apple.com>

        Build fix.

        * xml/XMLHttpRequest.cpp:
        (WebCore::XMLHttpRequest::send): Qualify references to symbols in the KJS namespace.

2008-02-22  Mark Rowe  <mrowe@apple.com>

        Merge r30493 to Safari-3-1-branch.

    2008-02-22  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Sam Weinig.
        
        Fixed <rdar://problem/5057509> Repro leak of JSXMLHttpRequest and
        associated objects @ www.viamichelin.it, which was probably an underlying
        cause of <rdar://problem/5744037> Gmail out of memory (17455)
        
        If SubresourceLoader::create returned NULL, we would ref() / gcProtect()
        the XMLHttpRequest but think we hadn't, therefore never
        calling deref() / gcUnprotect().
        
        This could happen at gmail.com, since gmail.com attempts to send
        XMLHttpRequests from unload handlers in order to gather usage statistics.
        (According to comments in the code, SubresourceLoader::create returns
        NULL when called from an unload handler.)

        The solution is to ref() / gcProtect() only if SubresourceLoader::create
        doesn't return NULL. This make sense, since we only need to protect the
        request as long as it has an outstanding network transaction.
        
        * xml/XMLHttpRequest.cpp:
        (WebCore::XMLHttpRequest::XMLHttpRequest):
        (WebCore::XMLHttpRequest::send):

2008-02-22  Mark Rowe  <mrowe@apple.com>

        Merge r30489 to Safari-3-1-branch.

    2008-02-22  Jon Honeycutt  <jhoneycutt@apple.com>

        Reviewed by Anders.

        <rdar://problem/5760360> REGRESSION(r30376): Crash loading plugin page
        during stress test (after only 5 min) - null dereference

        Full-frame plug-ins create PluginStream objects without loaders, as the
        PluginView receives the loading callbacks. We were trying to call
        setDefersLoading on these null pointers.

        * plugins/PluginStream.cpp:
        (WebCore::PluginStream::startStream): Add null check.
        (WebCore::PluginStream::destroyStream): Same.
        (WebCore::PluginStream::deliverData): Same.

2008-02-22  Timothy Hatcher  <timothy@apple.com>

        Merge r30472 to Safari-3-1-branch.
                                                                                                       
    2008-02-21  Sam Weinig  <sam@webkit.org>

        Reviewed by Anders Carlsson.

        Fix for <rdar://problem/5757946>

        - Parse URLs before checking whether they are javascript: urls
          (which require security checks).

        * bindings/js/JSAttrCustom.cpp:
        (WebCore::JSAttr::setValue):
        * bindings/js/JSElementCustom.cpp:
        (WebCore::allowSettingSrcToJavascriptURL):
        * bindings/js/JSHTMLFrameElementCustom.cpp:
        (WebCore::allowSettingJavascriptURL):
        * bindings/js/JSHTMLIFrameElementCustom.cpp:
        (WebCore::JSHTMLIFrameElement::setSrc):

2008-02-22  Timothy Hatcher  <timothy@apple.com>

        <rdar://problem/5758900> REGRESSION (Ceto-Fireclaw): Margins/padding expand on
        hover for some headlines on The Huffington Post

        Roll out r29649.

        * rendering/InlineFlowBox.cpp:
        (WebCore::InlineFlowBox::computeLogicalBoxHeights):
        (WebCore::InlineFlowBox::placeBoxesVertically):
        (WebCore::InlineFlowBox::shrinkBoxesWithNoTextChildren):
        * rendering/RenderObject.h:
        * rendering/bidi.cpp:
        (WebCore::inlineFlowRequiresLineBox):
        (WebCore::RenderBlock::findNextLineBreak):

2008-02-21  Mark Rowe  <mrowe@apple.com>

        Merge r30461 to Safari-3-1-branch.

    2008-02-21  Antti Koivisto  <antti@apple.com>

        Reviewed by Sam Weinig.

        <rdar://problem/5753789>
        REGRESSION: 1.5% -2% Sunspider regression from r30009 (ebay photo upload hang)
        
        Ensure all versions of allowsAccessFrom are inlined to single functions. 
        This is a 2% win in browser hosted Sunspider. 

        * bindings/js/kjs_window.cpp:
        (KJS::Window::allowsAccessFrom):
        (KJS::Window::allowsAccessFromPrivate):
        * bindings/js/kjs_window.h:

2008-02-21  Mark Rowe  <mrowe@apple.com>

        Merge r30458 to Safari-3-1-branch.

    2008-02-21  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by David Harrison.
        
        Fixed <rdar://problem/5756125> REGRESSION: A crash occurs at 
        WebCore::Frame::scriptProxy() when completing a search with Package Tracker widget

        Test: fast/dom/script-element-without-frame-crash.html

        * html/HTMLTokenizer.cpp:
        (WebCore::HTMLTokenizer::parseTag): Added back a NULL check that was
        accidentally removed in r30325.

2008-02-21  Mark Rowe  <mrowe@apple.com>

        Merge r30433 to Safari-3-1-branch.

    2008-02-20  Sam Weinig  <sam@webkit.org>

        Reviewed by Darin and Geoff.

        - <rdar://problem/5754378> work around missing video on YouTube front page with a site-specific hack

        * WebCore.base.exp: Updated.

        * bindings/js/kjs_navigator.cpp:
        (WebCore::needsYouTubeQuirk): Added. Return true on Windows only when the quirk is needed.
        (WebCore::Navigator::getValueProperty): For the appVersion property, if needsYouTubeQuirk
        return true, then return the empty string.

        * page/Settings.cpp:
        (WebCore::Settings::Settings): Set m_needsSiteSpecificQuirks to false.
        (WebCore::Settings::setNeedsSiteSpecificQuirks): Added.
        * page/Settings.h: Added m_needsSiteSpecificQuirks.
        (WebCore::Settings::needsSiteSpecificQuirks): Added.

2008-02-20  Timothy Hatcher  <timothy@apple.com>

        Merge r30423 to Safari-3-1-branch.

    2008-02-20  Alexey Proskuryakov  <ap@webkit.org>

        Build fix.

        * xml/XMLHttpRequest.cpp:
        (WebCore::isSafeRequestHeader):
        (WebCore::XMLHttpRequest::setRequestHeader):

2008-02-20  Timothy Hatcher  <timothy@apple.com>

        Merge r30422 to Safari-3-1-branch.

    2008-02-20  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Darin.

        <rdar://problem/5749455> Unable to set the Referer header in Dashboard using XMLHttpRequest

        Cannot be tested in DRT.

        * xml/XMLHttpRequest.cpp: (WebCore::canSetRequestHeader): Assume that a request that can load
        local files can also set any headers.

2008-02-18  Mark Rowe  <mrowe@apple.com>

        Merge r30395 to Safari-3-1-branch.

    2008-02-18  Brady Eidson  <beidson@apple.com>

        Reviewed by Darin

        Fix for <rdar://5747529> - ObjC Exception can cause JSLock to never be released

        Test: platform/mac/plugins/webScriptObject-exception-deadlock.html

        * bindings/objc/WebScriptObject.mm:
        (-[WebScriptObject valueForKey:]): The line `resultObj = [super valueForKey:key];    // defaults to throwing an exception` 
          says it all - it throws an exception.  This method also happens to hold the JSLock.  Problematically, when the exeception
          is thrown and the method exited, the JSLock is never released.  Fix that without otherwise changing behavior by holding the 
          JSLock in two individual scopes - Right before the exception and right after.  

2008-02-18  Mark Rowe  <mrowe@apple.com>

        Merge r30392 to Safari-3-1-branch.

    2008-02-18  Dan Bernstein  <mitz@apple.com>

        Reviewed by Dave Hyatt.

        - fix <rdar://problem/5736225> crash in svgFontAndFaceElementForFontData on digitalstrom.org/cms

        Test: fast/css/font-face-multiple-remote-sources.html

        * css/CSSFontFace.cpp:
        (WebCore::CSSFontFace::fontLoaded):
        * css/CSSSegmentedFontFace.cpp:
        (WebCore::CSSSegmentedFontFace::fontLoaded):

2008-02-18  Mark Rowe  <mrowe@apple.com>

        Merge r30389 to Safari-3-1-branch.

    2008-02-18  Stephanie Lewis  <slewis@apple.com>

        Reviewed by Adam.

        Remove workaround for <rdar://problem/5695848>.
        
        * platform/network/cf/ResourceResponseCFNet.cpp:
        (WebCore::ResourceResponse::doUpdateResourceResponse):

2008-02-18  Mark Rowe  <mrowe@apple.com>

        Merge r30370 to Safari-3-1-branch.

    2008-02-18  Jon Honeycutt  <jhoneycutt@apple.com>

        Reviewed by Darin.

        <rdar://problem/5744899> Crash in Flash when clicking "Yes" to abort
        slow script Flash 9 dialog at http://www.kidzui.com

        When navigating to a new page, we stop all outstanding PluginStreams.
        Flash hangs in the call to NPP_URLNotify. It eventually displays the
        "slow script" dialog, which relinquishes control to the system. While
        this dialog is running, the request we are in the process of cancelling
        completes, and we re-enter Flash to deliver the data. When the dialog
        is dismissed, the internal state of Flash has changed, and Flash
        crashes with a null dereference.

        To work around this, we can defer loading before entering plug-in code,
        so that even if a plug-in yields to the system, we won't get callbacks
        while we're handling a callback.

        * plugins/PluginStream.cpp:
        (WebCore::PluginStream::startStream): Defers loads while calling into
        plug-in.
        (WebCore::PluginStream::destroyStream): Same.
        (WebCore::PluginStream::deliverData): Same.
        (WebCore::PluginStream::didFail): Protect 'this' from deletion by
        destroyStream. Null out m_loader only after destroyStream returns.
        (WebCore::PluginStream::didFinishLoading): Same.

2008-02-17  Steve Falkenburg  <sfalken@apple.com>

        Build fix.

        * WebCore.vcproj/build-generated-files.sh:

2008-02-17  Mark Rowe  <mrowe@apple.com>

        Merge r30331 to Safari-3-1-branch.

    2008-02-15  Brady Eidson  <beidson@apple.com>

        Reviewed by Darin

        Fix for <rdar://problem/5727175> and <rdar://problem/5740495> - Database threads and callback scripts can run after
        a page has closed or loaded a new document

        Deciding to make the Database I/O semantic the same as loaders/XHR when a document is shut down, this patch implements
        a policy of shutting down the databases in a document at the same time.  This includes removing all pending transactions 
        in a database, cutting off an queued statements in the current transaction, and preventing further callbacks from being
        made.

        No new layout tests with this patch as the current layout tests were catching this issue in a plethora of ways already
        (crashing, unexpected exceptions and output, etc)

        * dom/Document.cpp:
        (WebCore::Document::~Document): Don't actually stop the database thread here - it better have been stopped already.
          Add an assertion to that effect.
        (WebCore::Document::addOpenDatabase): Add a new database handle to this Document's open database set
        (WebCore::Document::removeOpenDatabase): Remove such a handle
        (WebCore::Document:: stopDatabases): Call "close" on all open Database handles for this document
        * dom/Document.h:

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::stopLoading): In addition to canceling all resource loads and XHRs, stop all database I/O

        * platform/MessageQueue.h:
        (WebCore::MessageQueue::killed): 

        * platform/sql/SQLiteTransaction.cpp:
        (WebCore::SQLiteTransaction::stop): Added.  Explicit stop to cut off a transaction so it won't try anymore SQL activity
        * platform/sql/SQLiteTransaction.h:

        * storage/Database.cpp:
        (WebCore::Database::Database):
        (WebCore::Database::~Database):
        (WebCore::Database::markAsDeletedAndClose): Check if the thread has terminated before committing to waiting on the
          thread.
        (WebCore::Database::stop):  Stop this database, including all queued transactions and callbacks
        * storage/Database.h:
        (WebCore::Database::stopped):

        * storage/DatabaseThread.cpp:
        (WebCore::DatabaseThread::terminationRequested):
        * storage/DatabaseThread.h:

        * storage/SQLTransaction.cpp:
        (WebCore::SQLTransaction::executeSQL): Throw an exception if a new executeSQL comes in after a database is closed
        (WebCore::SQLTransaction::checkAndHandleClosedDatabase): Added.  Clears queued statements and clear the next step
          when the database has been closed since the last step/callback was run.  Also stops the current SQLite transaction,
          if any
        (WebCore::SQLTransaction::performNextStep):
        (WebCore::SQLTransaction::performPendingCallback):
        * storage/SQLTransaction.h:

2008-02-17  Mark Rowe  <mrowe@apple.com>

        Merge r30330 to Safari-3-1-branch.

    2008-02-15  Adele Peterson  <adele@apple.com>

        Reviewed by Darin.

        Fix for <rdar://problem/5745072> REGRESSION (r29348): Shift + Tab does not change indent level on Google Docs

        The immediate cause of this bug was that we stopped sending keypress events for the tab key when it is used to advance focus.
        We had a special case for forward-tab in designMode, where the default behavior was to insert a tab key (or respect the keypress handler behavior).
        This change makes the shift-tab behavior match the forward-tab behavior.

        If the site had put their event handler (which does the indenting) on the keydown event, then this problem would have been avoided.
        This is something we should look into and maybe advise the site on in the future.  However, it's a low-risk change to just make tab and shift-tab uniform 
        in this respect, so I think this is the way to go for right now.

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

2008-02-17  Mark Rowe  <mrowe@apple.com>

        Merge r30329 to Safari-3-1-branch.

    2008-02-15  Anders Carlsson  <andersca@apple.com>

        Reviewed by Alice.

        <rdar://problem/5738678>
        REGRESSION: "Loading" status remains when uploading file to .Mac iDisk via Safari
        
        Use the new CFNetwork functions for setting body parts.
        
        * platform/network/cf/FormDataStreamCFNet.cpp:
        (WebCore::setHTTPBody):
        (WebCore::httpBodyFromRequest):

2008-02-17  Mark Rowe  <mrowe@apple.com>

        Merge r30328 to Safari-3-1-branch.

    2008-02-15  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Anders Carlsson.
        
        Fixed <rdar://problem/5725429> REGRESSION (r27898): Greenfield online
        surveys no longer work due to XMLHttpRequest exceptions
        
        Reverted some exception throwing code from r12194.
        
        To comply with the W3C draft spec, we used to throw an exception when
        trying to access responseText and responseXML at the wrong time, but
        that turned out to be a compatibility problem.
        
        Now, matching Firefox and previous versions of WebKit, we never throw
        an exception when accessing responseText or responseXML.
        
        See http://www.mail-archive.com/public-webapi@w3.org/msg02756.html.

        * xml/XMLHttpRequest.cpp:
        (WebCore::XMLHttpRequest::getResponseText):
        (WebCore::XMLHttpRequest::getResponseXML):

2008-02-17  Mark Rowe  <mrowe@apple.com>

        Merge r30326 to Safari-3-1-branch.

    2008-02-15  Justin Garcia  <justin.garcia@apple.com>

        Reviewed by Dan Bernstein.

        <rdar://problem/5738768> REGRESSION (r30062): Crash in InlineTextBox::isLineBreak() when Undoing a replace
        
        Rolled out <http://trac.webkit.org/projects/webkit/changeset/29667>

        * editing/SelectionController.cpp:
        (WebCore::SelectionController::nodeWillBeRemoved):

2008-02-17  Mark Rowe  <mrowe@apple.com>

        Merge r30325 to Safari-3-1-branch.

    2008-02-15  Alice Liu  <alice.liu@apple.com>

        Reviewed by Darin.

        Fixed <rdar://problem/5741440> REGRESSION (r28496): After deactivating JavaScript, scripts embedded in the HTML page continue to run
     
        Before this patch, Frame::scriptProxy() would only return null in the case that javascript was 
        disabled and if the script proxy field wasn't set (which would only be the case if the window 
        hasn't loaded anything yet).  Not all callers of scriptProxy() always check for a non-null return 
        value.  Those that did check would effectively be checking if javascript was enabled before proceeding.
        This fix consists of 2 elements: first, make sure that scriptProxy() will never return null, regardless 
        of whether javascript is disabled.  This will mean that callers who don't check for null won't crash.  
        Second, callers who did check for null now instead check for javascript being disabled.  This means that 
        code paths intended for preventing javascript from being run will be making the correct check.  Another
        minor addition to this patch is that I added a function on Frame to be a shortcut for checking if javascript
        is enabled. 

        * bindings/js/JSCustomSQLStatementCallback.cpp:
        (WebCore::JSCustomSQLStatementCallback::handleEvent):
        * bindings/js/JSCustomSQLStatementErrorCallback.cpp:
        (WebCore::JSCustomSQLStatementErrorCallback::handleEvent):
        * bindings/js/JSCustomSQLTransactionCallback.cpp:
        (WebCore::JSCustomSQLTransactionCallback::handleEvent):
        * bindings/js/JSCustomSQLTransactionErrorCallback.cpp:
        (WebCore::JSCustomSQLTransactionErrorCallback::handleEvent):
        * bindings/js/JSCustomVoidCallback.cpp:
        (WebCore::JSCustomVoidCallback::handleEvent):
        * bindings/js/JSCustomXPathNSResolver.cpp:
        (WebCore::JSCustomXPathNSResolver::lookupNamespaceURI):
        * bindings/js/ScheduledAction.cpp:
        (WebCore::ScheduledAction::execute):
        * bindings/js/kjs_events.cpp:
        (WebCore::JSAbstractEventListener::handleEvent):
        (WebCore::JSLazyEventListener::parseCode):
        * bindings/js/kjs_html.cpp:
        (WebCore::runtimeObjectImplementsCall):
        * bindings/js/kjs_proxy.cpp:
        (WebCore::KJSProxy::isEnabled):
        * bindings/js/kjs_proxy.h:
        * bindings/js/kjs_window.cpp:
        (KJS::Window::retrieveWindow):
        (KJS::Window::retrieve):
        * dom/Document.cpp:
        (WebCore::Document::createHTMLEventListener):
        * dom/EventTarget.cpp:
        (WebCore::EventTarget::dispatchGenericEvent):
        * html/HTMLPlugInElement.cpp:
        (WebCore::HTMLPlugInElement::createNPObject):
        * html/HTMLScriptElement.cpp:
        (WebCore::HTMLScriptElement::evaluateScript):
        * html/HTMLTokenizer.cpp:
        (WebCore::HTMLTokenizer::parseTag):
        (WebCore::HTMLTokenizer::processToken):
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::executeScript):
        (WebCore::FrameLoader::userGestureHint):
        (WebCore::FrameLoader::open):
        (WebCore::FrameLoader::dispatchWindowObjectAvailable):
        (WebCore::FrameLoader::switchOutLowBandwidthDisplayIfReady):
        * manual-tests/disable-javascript-reload.html: Added.
        * page/Frame.cpp:
        (WebCore::Frame::scriptProxy):
        (WebCore::Frame::bindingRootObject):
        (WebCore::Frame::windowScriptNPObject):
        * page/Frame.h:
        * page/InspectorController.cpp:
        (WebCore::canPassNodeToJavaScript):
        * page/mac/FrameMac.mm:
        (WebCore::Frame::windowScriptObject):
        * svg/SVGDocumentExtensions.cpp:
        (WebCore::SVGDocumentExtensions::createSVGEventListener):

2008-02-17  Mark Rowe  <mrowe@apple.com>

        Merge r30323 to Safari-3-1-branch.

    2008-02-15  Dan Bernstein  <mitz@apple.com>

        Reviewed by Alexey Proskuryakov.

        - WebCore part of fixing http://bugs.webkit.org/show_bug.cgi?id=17360
          <rdar://problem/5743131> REGRESSION: mp4 file downloaded from server is downloaded as html

        Test: http/tests/loading/text-content-type-with-binary-extension.html

        Refined the workaround for <rdar://problem/5321972> to exclude files
        with extensions that are known to be associated with binary MIME types.

        * WebCore.xcodeproj/project.pbxproj: Added WebCoreURLResponse.{h,mm}.
        * platform/network/mac/ResourceResponseMac.mm:
        (WebCore::ResourceResponse::doUpdateResourceResponse): Moved the
        workaround logic into WebCoreURLResponse.
        * platform/network/mac/WebCoreURLResponse.h: Added.
        * platform/network/mac/WebCoreURLResponse.mm: Added.
        (createBinaryExtensionsSet): Returns a set of extensions known to
        belong to MIME types of binary data.
        (-[NSURLResponse _webcore_MIMEType]):
        (-[NSHTTPURLResponse _webcore_MIMEType]): Forces the MIME type from
        application/octet-stream to text/plain if that is the specified
        Content-Type, unless the extension is in the binary extensions set.

2008-02-15  Mark Rowe  <mrowe@apple.com>

        Merge r30285 to Safari-3-1-branch.

    2008-02-15  Adam Roben  <aroben@apple.com>

        * bindings/scripts/CodeGenerator.pm: Touch this to force bindings to
        regenerate.

2008-02-15  Mark Rowe  <mrowe@apple.com>

        Merge r30269 to Safari-3-1-branch.

    2008-02-14  Adam Roben  <aroben@apple.com>

        Conditionalize cross-document messaging support

        The cross-document messaging parts of HTML 5 are in flux and we want
        ports to be able to turn off the support as needed.

        Note that the support is turned off by default right now. A subsequent
        commit will turn it on by default.

        Reviewed by Darin.

        * GNUmakefile.am:
        * WebCore.vcproj/build-generated-files.sh:
        * bindings/js/JSDOMWindowCustom.cpp:
        (WebCore::JSDOMWindow::customGetOwnPropertySlot):
        * bindings/js/JSEventCustom.cpp:
        (WebCore::toJS):
        * dom/Event.cpp:
        (WebCore::Event::isMessageEvent):
        * dom/Event.h:
        * dom/MessageEvent.cpp:
        * dom/MessageEvent.h:
        * dom/MessageEvent.idl:
        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::postMessage):
        * page/DOMWindow.h:
        * page/DOMWindow.idl:

2008-02-15  Mark Rowe  <mrowe@apple.com>

        Merge r30240 to Safari-3-1-branch.

    2008-02-14  Ada Chan  <adachan@apple.com>

        <rdar://problem/5744728> Fix leaks of RegularExpression objects in Frame.cpp.
        
        Reviewed by Jon and Darin.

        * page/Frame.cpp:
        (WebCore::createRegExpForLabels):
        (WebCore::Frame::searchForLabelsBeforeElement):
        (WebCore::Frame::matchLabelsAgainstElement):

2008-02-15  Mark Rowe  <mrowe@apple.com>

        Merge r30239 to Safari-3-1-branch.

    2008-02-14  Stephanie Lewis  <slewis@apple.com>

        Reviewed by Geoff.

        Update order files.

        * WebCore.order:

2008-02-15  Mark Rowe  <mrowe@apple.com>

        Merge r30238 to Safari-3-1-branch.

    2008-02-14  Oliver Hunt  <oliver@apple.com>

        Reviewed by Geoff G and Weinig.

        <rdar://problem/5726608> REGRESSION (r29428): Assigning to window.status does not update status bar

        Revert the portions of r29428 responsible for breaking the ability to
        set window.status

        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::setStatus):
        (WebCore::DOMWindow::defaultStatus):
        (WebCore::DOMWindow::setDefaultStatus):
        * page/DOMWindow.h:
        * page/DOMWindow.idl:

2008-02-15  Mark Rowe  <mrowe@apple.com>

        Merge r30237 to Safari-3-1-branch.

    2008-02-14  Anders Carlsson  <andersca@apple.com>

        Reviewed by Darin.

        <rdar://problem/5721790>
        Crash in WebCore::DeprecatedString::operator= + 31 at news.google.com
        
        Use pointers in the cache map tables. Otherwise when we rehash, 
        we will end up destroying Cache objects that node lists might point to.
        
        * dom/Node.cpp:
        (WebCore::NodeListsNodeData::~NodeListsNodeData):
        (WebCore::Node::getElementsByName):
        (WebCore::Node::getElementsByClassName):

2008-02-15  Mark Rowe  <mrowe@apple.com>

        Merge r30233 to Safari-3-1-branch.

    2008-02-14  Timothy Hatcher  <timothy@apple.com>

        Reviewed by Darin Adler.

        <rdar://problem/5743768> A deadlock during storage layout tests

        Make sure not to hold the m_openDatabaseMapGuard mutex when calling
        Database::markAsDeletedAndClose(), since that can cause a deadlock
        during the synchronous DatabaseThread call it triggers.

        * storage/DatabaseTracker.cpp:
        (WebCore::DatabaseTracker::deleteDatabaseFile):

2008-02-15  Mark Rowe  <mrowe@apple.com>

        Merge r30222 to Safari-3-1-branch.

    2008-02-13  Justin Garcia  <justin.garcia@apple.com>

        Reviewed by Oliver Hunt.

        Fixes the editing/deleting/5729680.html failure.  It succeeds when run by itself
        but fails when run with other tests because FramePrivate's m_selectionGranularity
        isn't reset when a Frame receives a new document.  It was also uninitialized in
        the constructor.

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::clear): Initialize m_selectionGranularity.
        * page/Frame.cpp:
        (WebCore::FramePrivate::FramePrivate): Ditto.

2008-02-15  Mark Rowe  <mrowe@apple.com>

        Merge r30218 to Safari-3-1-branch.

    2008-02-13  Jon Honeycutt  <jhoneycutt@apple.com>

        Reviewed by Anders.

        <rdar://problem/5739282> Hangs after closing video trailer popup with
        VLC plugin

        VLC hangs on NPP_Destroy if we call NPP_SetWindow with a null window
        handle.

        * plugins/PluginQuirkSet.h: Added new quirk
        PluginQuirkDontSetNullWindowHandleOnDestroy.
        (WebCore::):
        * plugins/win/PluginViewWin.cpp:
        (WebCore::PluginView::stop): Selectively call NPP_SetWindow.
        (WebCore::PluginView::determineQuirks): Set new quirk for VLC plug-in.

2008-02-15  Mark Rowe  <mrowe@apple.com>

        Merge r30213 to Safari-3-1-branch.

    2008-02-13  Justin Garcia  <justin.garcia@apple.com>

        Reviewed by Adam Roben.

        <rdar://problem/5729680> REGRESSION (r27873): Removing the last character of a word in Mail or Safari also removes the following space
        
        * editing/Editor.cpp:
        (WebCore::Editor::deleteWithDirection): Fixed a typo.

2008-02-15  Mark Rowe  <mrowe@apple.com>

        Merge r30195 to Safari-3-1-branch.

    2008-02-13  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Darin.

        <rdar://problem/5740042> Database termination issues

        Test: storage/close-during-stress-test.html

        * dom/Document.cpp:
        (WebCore::Document::databaseThread):
        * dom/Document.h:
        Don't re-create the database thread if it has been already terminated.

        * storage/Database.h: (WebCore::Database::document): Changed m_database to a RefPtr to avoid
        having a hanging reference.

        * storage/DatabaseThread.cpp:
        (WebCore::DatabaseThread::requestTermination):

        * storage/SQLTransaction.cpp: (WebCore::SQLTransaction::~SQLTransaction): Removed logging.
        Transactions are deleted during GC, so it's usually not importatnt to know when it happens.

2008-02-15  Mark Rowe  <mrowe@apple.com>

        Merge r30189 to Safari-3-1-branch.

    2008-02-12  Timothy Hatcher  <timothy@apple.com>

        Reviewed by Brady Eidson.

        <rdar://problem/5652560> Can't delete database if the website that
        uses it has been opened in this session

        Close the Database on the database thread before deleting the file.
        Tested and works on Windows and Mac.

        * platform/sql/SQLiteDatabase.cpp:
        (WebCore::SQLiteDatabase::close): Assert we are on the opening thread.
        * storage/Database.cpp:
        (WebCore::Database::markAsDeletedAndClose): Unschedule any pending
        Database tasks, and start and imediate DatabaseCloseTask.
        (WebCore::Database::close): Close the SQLDatabase.
        * storage/Database.h: Renamed markAsDeleted to markAsDeletedAndClose.
        * storage/DatabaseTask.cpp:
        (WebCore::DatabaseCloseTask::DatabaseCloseTask): New task.
        (WebCore::DatabaseCloseTask::doPerformTask): Call close on the Database.
        (WebCore::DatabaseCloseTask::debugTaskName): Return "DatabaseCloseTask".
        * storage/DatabaseTask.h: Add DatabaseCloseTask.
        * storage/DatabaseTracker.cpp:
        (WebCore::DatabaseTracker::deleteDatabaseFile): Call the renamed
          markAsDeletedAndClose.

2008-02-15  Mark Rowe  <mrowe@apple.com>

        Merge r30184 to Safari-3-1-branch.

    2008-02-12  Brady Eidson  <beidson@apple.com>

        Reviewed by Darin Adler

        Fix for <rdar://problem/5737692> - Database API needs to support SuccessCallback

        Layout tests will come shortly with a mess of DRT changes

        * platform/SecurityOrigin.cpp:
        (WebCore::SecurityOrigin::SecurityOrigin): Standardize on "empty string" instead of null string
          as different paths of constructing a SecurityOrigin were causing different hashes for the "same"
          SecurityOrigin

        * storage/Database.cpp:
        (WebCore::Database::changeVersion): Pass in the successCallback
        (WebCore::Database::transaction): Ditto

        * storage/SQLTransaction.cpp:
        (WebCore::SQLTransaction::SQLTransaction):
        (WebCore::SQLTransaction::debugStepName):
        (WebCore::SQLTransaction::performNextStep): Update ASSERTs for the new valid steps
        (WebCore::SQLTransaction::performPendingCallback): Ditto
        (WebCore::SQLTransaction::postflightAndCommit): Schedule the success callback if it exists - otherwise
          skip straight to cleanupAfterSuccessCallback()
        (WebCore::SQLTransaction::deliverSuccessCallback): Deliver success callback on the main thread, then
          schedule cleanupAfterSuccessCallback()
        (WebCore::SQLTransaction::cleanupAfterSuccessCallback): Cleanup and end the transaction
        (WebCore::SQLTransaction::handleTransactionError):
        (WebCore::SQLTransaction::deliverTransactionErrorCallback):
        (WebCore::SQLTransaction::cleanupAfterTransactionErrorCallback):
        * storage/SQLTransaction.h:

2008-02-15  Mark Rowe  <mrowe@apple.com>

        Merge r30179 to Safari-3-1-branch.

    2008-02-12  Dan Bernstein  <mitz@apple.com>

        Reviewed by Adam Roben.

        - fix http://bugs.webkit.org/show_bug.cgi?id=17041
          <rdar://problem/5709660> Eastern Asian fonts do not display without specific box in Control Panel

        Revised the system fallback font lookup logic to use MLang font linking
        again. To avoid reintroducing bug 16548 and <rdar://problem/5280188>,
        for CJK characters, try linking based on a single code page at a time,
        starting with the user's default code page (if it is one of the CJK
        code pages) followed by the other CJK code pages in a prescribed order
        that matches what Firefox does.

        * platform/graphics/win/FontCacheWin.cpp:
        (WebCore::getCJKCodePageMasks): Added. Returns the search order for CJK
        code pages, with the user's default code page first.
        (WebCore::currentFontContainsCharacter): Factored out of
        getFontDataForCharacters().
        (WebCore::createMLangFont): Ditto.
        (WebCore::FontCache::getFontDataForCharacters):

2008-02-15  Mark Rowe  <mrowe@apple.com>

        Merge r30174 to Safari-3-1-branch.

    2008-02-12  Dan Bernstein  <mitz@apple.com>

        Reviewed by Timothy Hatcher.

        - <rdar://problem/5738175> Remove workaround for <rdar://problem/5539388> from post-Tiger builds

        * platform/graphics/cg/GraphicsContextCG.cpp:
        (WebCore::GraphicsContext::setShadow):

2008-02-15  Mark Rowe  <mrowe@apple.com>

        Merge r30173 to Safari-3-1-branch.

    2008-02-12  Brady Eidson  <beidson@apple.com>

        Release build fix

        * storage/DatabaseTask.cpp:

2008-02-15  Mark Rowe  <mrowe@apple.com>

        Merge r30172 to Safari-3-1-branch.

    2008-02-12  Alexey Proskuryakov <ap@webkit.org> and Brady Eidson <beidson@apple.com>

        Reviewed by Brady.

        http://bugs.webkit.org/show_bug.cgi?id=17177
        <rdar://problem/5729619> Storage tasks are getting lost

        <rdar://problem/5729445> REGRESSION: Cannot schedule more than one transaction at a time

        <rdar://problem/5729446> Major thread safety issue in Database code

        * platform/MessageQueue.h: Added a thread-safe queue abstraction.

        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        Added MessageQueue.h.

        * dom/Document.cpp:
        (WebCore::Document::~Document): Fixed a race condition resulting in a hanging reference.

        * storage/Database.idl: Fixed parameter declarations to actually match implementation
        (which is custom, so it got out of sync).

        * storage/DatabaseTask.h:
        (WebCore::DatabaseTask::database):
        (WebCore::DatabaseTransactionTask::transaction):
        Changed tasks to hold more information internally. Added helpers for better debug logging.

        * storage/DatabaseTask.cpp:
        (WebCore::DatabaseTask::DatabaseTask):
        (WebCore::DatabaseTask::performTask):
        (WebCore::DatabaseOpenTask::DatabaseOpenTask):
        (WebCore::DatabaseOpenTask::doPerformTask):
        (WebCore::DatabaseOpenTask::debugTaskName):
        (WebCore::DatabaseTransactionTask::DatabaseTransactionTask):
        (WebCore::DatabaseTransactionTask::~DatabaseTransactionTask):
        (WebCore::DatabaseTransactionTask::doPerformTask):
        (WebCore::DatabaseTransactionTask::debugTaskName):
        (WebCore::DatabaseTableNamesTask::DatabaseTableNamesTask):
        (WebCore::DatabaseTableNamesTask::doPerformTask):
        (WebCore::DatabaseTableNamesTask::debugTaskName):
        Implementation for the above.

        (WebCore::DatabaseTask::lockForSynchronousScheduling):
        (WebCore::DatabaseTask::waitForSynchronousCompletion):
        Fixed a potential race condition: if the task completed before we entered a wait, we'd never
        wake up. There was an assertion guarding against this, but no actual guarantee that I could see.

        * storage/DatabaseThread.cpp:
        (WebCore::DatabaseThread::DatabaseThread):
        (WebCore::DatabaseThread::requestTermination):
        (WebCore::DatabaseThread::databaseThread):
        (WebCore::DatabaseThread::scheduleTask):
        (WebCore::DatabaseThread::scheduleImmediateTask):
        (WebCore::DatabaseThread::unscheduleDatabaseTasks):
        * storage/DatabaseThread.h:
        Changed to use MessageQueue.

        * storage/Database.cpp:
        (WebCore::guidMutex):
        (WebCore::guidToVersionMap):
        (WebCore::guidToDatabaseMap):
        (WebCore::Database::openDatabase):
        (WebCore::Database::Database):
        (WebCore::Database::~Database):
        (WebCore::Database::openAndVerifyVersion):
        (WebCore::guidForOriginAndName):
        (WebCore::Database::changeVersion):
        (WebCore::Database::transaction):
        (WebCore::Database::scheduleTransaction):
        (WebCore::Database::scheduleTransactionStep):
        (WebCore::Database::scheduleTransactionCallback):
        (WebCore::Database::version):
        (WebCore::Database::deliverPendingCallback):
        (WebCore::Database::tableNames):
        * storage/Database.h:
        Changed m_transactionQueue to a MessageQueue.
        Got rid of callback tracking - these can take care of themselves.
        Got rid of a DatabaseThread member, as the Document can be asked for it.
        Moved private static members and helpers out of the header.
        Lost CurrentThreadSetter debug helper on the way. We may need to re-add something like that later.

        * storage/SQLTransaction.h:
        * storage/SQLTransaction.cpp: Added a lot of debug logging.
        (WebCore::SQLTransaction::scheduleToRunStatements): Removed "m_currentStatement = 0" assignment,
        as it created a race condition. Everything seems to work better without it, although a real fix
        would be to get rid of this variable - it's evil shared data that isn't even protected in any way.

        * manual-tests/database-threading-stress-test-2.html: Added.
        * manual-tests/database-threading-stress-test.html: Added.

2008-02-15  Mark Rowe  <mrowe@apple.com>

        Merge r30171 to Safari-3-1-branch.

    2008-02-12  Adam Roben  <aroben@apple.com>

        Fix Bug 17328: REGRESSION (r30147): Inspector is unstyled on Windows

        <http://bugs.webkit.org/show_bug.cgi?id=17328>
        <rdar://5737946>

        Reviewed by Mitz.

        Test: fast/loader/local-css-allowed-in-strict-mode.html

        * platform/network/cf/ResourceResponseCFNet.cpp:
        (WebCore::ResourceResponse::doUpdateResourceResponse): Add a case for
        .css files.

2008-02-15  Mark Rowe  <mrowe@apple.com>

        Merge r30162 to Safari-3-1-branch.

    2008-02-11  Dan Bernstein  <mitz@apple.com>

        Reviewed by Dave Hyatt.

        - fix http://bugs.webkit.org/show_bug.cgi?id=17320
          <rdar://problem/5736953> :last-child does not set the "uses sibling rules" flag

        Test: fast/css/last-child-style-sharing.html

        * css/CSSGrammar.y: Changed to call setUsesSiblingRules(true) for all
        CSS3 selectors that require it.

2008-02-15  Mark Rowe  <mrowe@apple.com>

        Merge r30157 to Safari-3-1-branch.

    2008-02-11  Sam Weinig  <sam@webkit.org>

        Reviewed by Darin Adler.

        Make the cross-domain security model more closely match Firefox by always returning the
        native built-in functions when accessing functions cross-domain.

        Fixes for:
        <rdar://problem/5735497> Match Firefox's cross-domain model more accurately by return the built-in version of functions even if they have been overridden
        <rdar://problem/5735443> Crash when setting the Window objects prototype to a custom Object and then calling a method on it

        Tests: fast/dom/Window/window-custom-prototype-crash.html
               fast/dom/Window/window-function-frame-getter-precedence.html
               http/tests/security/cross-frame-access-get-override.html
               http/tests/security/cross-frame-access-location-get-override.html
               http/tests/security/cross-frame-access-location-get.html
               http/tests/security/cross-frame-access-location-put.html

        * bindings/js/JSDOMWindowCustom.cpp:
        (WebCore::JSDOMWindow::customGetOwnPropertySlot):
        - Return the native-built in version of an cross-domain allowed function (eg. window.focus) whether or
          not it has been overridden, instead of undefined.
        - When doing findEntry lookup, use the the tables directly (JSDOMWindowPrototype::info.propHashTable) 
          instead of calling the virtual classInfo() method to avoid the unnecessary overhead.
        - Allow access to the native toString function cross-domain.  It always returns "[object Window]".
        - Use the new nonCachingStaticFunctionGetter when return allowed functions cross-frame so that
          the function an overridden function is not inadvertantly returned from the PropertyMap.\

        * bindings/js/JSHistoryCustom.cpp:
        (WebCore::JSHistory::customGetOwnPropertySlot):
        - Implement the same model as described above for the History object, always returning the
          native built-in function cross-domain.
        - Allow access to the native toString function cross-domain.
        - Clean up the code to make it clear that the custom functionality is only there for cross-domain
          access.

        * bindings/js/JSLocation.cpp:
        (WebCore::JSLocation::getOwnPropertySlot):
        - Match the generated classes by moving all the custom logic into a separate customGetOwnPropertySlot
          function.  This will help moving to a generated class in the future.
        (WebCore::JSLocation::customGetOwnPropertySlot):
        - Implement the same model as described above for the Location object, always returning the
          native built-in function cross-domain.
        - Clean up the code to make it clear that the custom functionality is only there for cross-domain
          access.
        (WebCore::JSLocation::put):
        (WebCore::JSLocation::deleteProperty):
        (WebCore::JSLocation::getPropertyNames):
        * bindings/js/JSLocation.h:
        - Clean up to match the rest of the file a little better.

        * bindings/js/kjs_binding.cpp:
        (WebCore::allowsAccessFromFrame):
        (WebCore::printErrorMessageForFrame):
        (WebCore::nonCachingStaticFunctionGetter):
        (WebCore::objectToStringFunctionGetter):
        * bindings/js/kjs_binding.h:
        - Put common functionality related to cross-domain access here to serve as a central shared point.
          This includes moving and augmenting the allowsAccessFromFrame method that was in both JSHistoryCustom.cpp
          and JSLocation.cpp.

        * bindings/js/kjs_dom.cpp:
        (WebCore::checkNodeSecurity):
        - Use the new allowsAccessFromFrame method.

        * bindings/js/kjs_window.cpp:
        (KJS::Window::childFrameGetter): Cleanup.
        (KJS::Window::namedItemGetter): Cleanup.
        (KJS::Window::getOwnPropertySlot):
        - Do the prototype lookup early to match Firefox in having function lookup have a higher precedence
          than the index or shortcut name getters.
        - Cleanup function to make it more understandable and slightly more efficient.
        (KJS::Window::allowsAccessFrom):
        - Add a new variant of this method that takes a reference to a String, which, on failure, will
          contain the error message to print out.  The caller can then pass this to printErrorMessage.
          This allows for code to check allowsAccessFrom and act on the result without printing out the
          error message. For convenience, a version with out the String parameter has been left which 
          prints out the message automatically.
        (KJS::Window::printErrorMessage):
        * bindings/js/kjs_window.h:

2008-02-15  Mark Rowe  <mrowe@apple.com>

        Merge r30154 to Safari-3-1-branch.

    2008-02-11  Timothy Hatcher  <timothy@apple.com>

        Reviewed by Brady Eidson.

        <rdar://problem/5733069> Many m_quotaMap uses do not hold the m_quotaMapGuard

        * storage/DatabaseTracker.cpp:
        (WebCore::DatabaseTracker::hasEntryForOrigin): Hold m_quotaMapGuard when using m_quotaMap.
        (WebCore::DatabaseTracker::origins): Ditto.
        (WebCore::DatabaseTracker::setQuota): Ditto.
        (WebCore::DatabaseTracker::deleteAllDatabases): Call origins() and itterate over the
        origins to call deleteOrigin().
        (WebCore::DatabaseTracker::deleteOrigin): Hold m_quotaMapGuard when using m_quotaMap.

2008-02-15  Mark Rowe  <mrowe@apple.com>

        Merge r30153 to Safari-3-1-branch.

    2008-02-11  David Hyatt  <hyatt@apple.com>

        Fix for bug 17286, crash accessing a null RenderStyle.  Add a simple null check.

        Reviewed by aroben

        Added fast/css/empty-generated-content.html

        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::checkOneSelector):

2008-02-15  Mark Rowe  <mrowe@apple.com>

        Merge r30146 to Safari-3-1-branch.

    2008-02-11  Adam Roben  <aroben@apple.com>

        Fix Bug 14316: Inspector's Console truncates long strings

        <http://bugs.webkit.org/show_bug.cgi?id=14316>
        <rdar://5357695>

        We no longer call Object.describe to format all the output of commands
        enetered into the Console. The ConsolePanel object now has a set of
        formatting functions that append a formatted representation of the
        passed-in object to the passed-in container node.

        Reviewed by Sam.

        * page/inspector/ConsolePanel.js:
        (WebInspector.ConsolePanel._onEnterPressed): Updated for rename of
        _outputToNode to _format.
        (WebInspector.ConsolePanel._format): Renamed from _outputToNode. Use
        Object.type to get the type of the object, then call the appropriate
        formatting function.
        (WebInspector.ConsolePanel._formatvalue): Added.
        (WebInspector.ConsolePanel._formatstring): Added. This function
        contains the actual fix for the bug, since it doesn't truncate the
        string no matter how long it is.
        (WebInspector.ConsolePanel._formatregexp): Added.
        (WebInspector.ConsolePanel._formatarray): Added. This is a bit more
        functional than Object.describe for arrays, since it recursively
        formats each item in the array. One advantage of this is that Nodes in
        arrays will be linkified instead of just turning into "[Object
        HTMLBodyElement]" or similar.
        (WebInspector.ConsolePanel._formatnode): Added.
        (WebInspector.ConsolePanel._formatobject): Added.
        (WebInspector.ConsolePanel.
        * page/inspector/utilities.js:
        (Object.type): Added. Code was pulled out of Object.describe and
        reorganized slightly.
        (Object.describe): Call Object.type. There should be no change in
        behavior of this function.

2008-02-15  Mark Rowe  <mrowe@apple.com>

        Merge r30116 to Safari-3-1-branch.

    2008-02-09  David Hyatt  <hyatt@apple.com>

        Fix for bug 17254, nth-* selectors do not work with negative coefficients.

        Reviewed by Mitz.

        fast/css/negative-nth-child.html

        * css/CSSStyleSelector.cpp:
        (WebCore::parseNth):

2008-02-15  Mark Rowe  <mrowe@apple.com>

        Merge r30112 to Safari-3-1-branch.

    2008-02-09  David Hyatt  <hyatt@apple.com>

        Fix for bug 17203, high CPU usage loading HTML5 spec.  This patch significantly improves the performance
        of CSS3 selectors.

        (1) Split the notion of being affected by positional rules into "forward" and "backward."  The "forward"
        selectors do not need to re-resolve during parsing, since children are appended on the end.  Only the
        "backward" selectors like last-child or nth-last-child have to re-resolve when a close tag is encountered.

        (2) Extend childrenChanged to specify whether the children were changed by the parser or not.  This allows
        Element::childrenChanged to know when the parser is adding children so that it can ignore those adds when
        possible.

        (3) Make sure all Elements now know whether or not their children are currently parsing.  Backwards selectors
        like last-child will always return false when children are still being parsed.  When an Element finishes
        parsing its children, finishParsingChildren() gets called and will make sure the children re-resolve properly.

        (4) Added a beginParsingChildren method and renamed finishParsing to finishedParsingChildren.

        (5) Eliminated one-off hacks that did the same thing in HTMLObjectElement and HTMLAppletElement.

        (6) Patched many incorrect implementations of finishedParsingChildren that did not properly call into their
        base class (mostly new SVG elements that got added for SVG fonts around the time this became a requirement).

        Reviewed by Eric

        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::checkSelector):
        (WebCore::CSSStyleSelector::checkOneSelector):
        * dom/Attr.cpp:
        (WebCore::Attr::childrenChanged):
        * dom/Attr.h:
        * dom/ContainerNode.cpp:
        (WebCore::ContainerNode::addChild):
        * dom/Document.cpp:
        (WebCore::Document::childrenChanged):
        * dom/Document.h:
        * dom/Element.cpp:
        (WebCore::Element::Element):
        (WebCore::Element::recalcStyle):
        (WebCore::checkFirstChildRules):
        (WebCore::checkLastChildRules):
        (WebCore::checkEmptyRules):
        (WebCore::checkStyleRules):
        (WebCore::Element::childrenChanged):
        (WebCore::Element::finishParsingChildren):
        * dom/Element.h:
        (WebCore::Element::finishedParsingChildren):
        (WebCore::Element::beginParsingChildren):
        * dom/Node.cpp:
        * dom/Node.h:
        (WebCore::Node::finishParsingChildren):
        (WebCore::Node::beginParsingChildren):
        (WebCore::Node::childrenChanged):
        * dom/StyledElement.cpp:
        (WebCore::StyledElement::StyledElement):
        * dom/StyledElement.h:
        * dom/XMLTokenizer.cpp:
        (WebCore::XMLTokenizer::startElementNs):
        (WebCore::XMLTokenizer::endElementNs):
        (WebCore::):
        * html/HTMLAppletElement.cpp:
        (WebCore::HTMLAppletElement::HTMLAppletElement):
        (WebCore::HTMLAppletElement::finishParsingChildren):
        * html/HTMLAppletElement.h:
        * html/HTMLElementFactory.cpp:
        (WebCore::objectConstructor):
        * html/HTMLGenericFormElement.cpp:
        (WebCore::HTMLFormControlElementWithState::finishParsingChildren):
        * html/HTMLGenericFormElement.h:
        * html/HTMLObjectElement.cpp:
        (WebCore::HTMLObjectElement::HTMLObjectElement):
        (WebCore::HTMLObjectElement::finishParsingChildren):
        (WebCore::HTMLObjectElement::childrenChanged):
        * html/HTMLObjectElement.h:
        * html/HTMLOptGroupElement.cpp:
        (WebCore::HTMLOptGroupElement::childrenChanged):
        * html/HTMLOptGroupElement.h:
        * html/HTMLOptionElement.cpp:
        (WebCore::HTMLOptionElement::childrenChanged):
        * html/HTMLOptionElement.h:
        * html/HTMLParser.cpp:
        (WebCore::HTMLParser::insertNode):
        (WebCore::HTMLParser::pushBlock):
        (WebCore::HTMLParser::popOneBlockCommon):
        * html/HTMLScriptElement.cpp:
        (WebCore::HTMLScriptElement::childrenChanged):
        (WebCore::HTMLScriptElement::finishParsingChildren):
        * html/HTMLScriptElement.h:
        * html/HTMLSelectElement.cpp:
        (WebCore::HTMLSelectElement::childrenChanged):
        * html/HTMLSelectElement.h:
        * html/HTMLStyleElement.cpp:
        (WebCore::HTMLStyleElement::finishParsingChildren):
        (WebCore::HTMLStyleElement::childrenChanged):
        * html/HTMLStyleElement.h:
        * html/HTMLTextAreaElement.cpp:
        (WebCore::HTMLTextAreaElement::childrenChanged):
        * html/HTMLTextAreaElement.h:
        * html/HTMLTitleElement.cpp:
        (WebCore::HTMLTitleElement::childrenChanged):
        * html/HTMLTitleElement.h:
         * rendering/RenderApplet.cpp:
        (WebCore::RenderApplet::createWidgetIfNecessary):
        * rendering/RenderPartObject.cpp:
        (WebCore::RenderPartObject::updateWidget):
        * rendering/RenderStyle.cpp:
        (WebCore::RenderStyle::RenderStyle):
        * rendering/RenderStyle.h:
        (WebCore::RenderStyle::childrenAffectedByForwardPositionalRules):
        (WebCore::RenderStyle::setChildrenAffectedByForwardPositionalRules):
        (WebCore::RenderStyle::childrenAffectedByBackwardPositionalRules):
        (WebCore::RenderStyle::setChildrenAffectedByBackwardPositionalRules):
        * svg/SVGAnimationElement.cpp:
        (WebCore::SVGAnimationElement::finishParsingChildren):
        * svg/SVGAnimationElement.h:
        * svg/SVGClipPathElement.cpp:
        (WebCore::SVGClipPathElement::childrenChanged):
        * svg/SVGClipPathElement.h:
        * svg/SVGDefinitionSrcElement.cpp:
        (WebCore::SVGDefinitionSrcElement::childrenChanged):
        * svg/SVGDefinitionSrcElement.h:
        * svg/SVGElement.cpp:
        (WebCore::SVGElement::finishParsingChildren):
        * svg/SVGElement.h:
        * svg/SVGFontFaceElement.cpp:
        (WebCore::SVGFontFaceElement::childrenChanged):
        * svg/SVGFontFaceElement.h:
        * svg/SVGFontFaceFormatElement.cpp:
        (WebCore::SVGFontFaceFormatElement::childrenChanged):
        * svg/SVGFontFaceFormatElement.h:
        * svg/SVGFontFaceSrcElement.cpp:
        (WebCore::SVGFontFaceSrcElement::childrenChanged):
        * svg/SVGFontFaceSrcElement.h:
        * svg/SVGFontFaceUriElement.cpp:
        (WebCore::SVGFontFaceUriElement::childrenChanged):
        * svg/SVGFontFaceUriElement.h:
        * svg/SVGGElement.cpp:
        (WebCore::SVGGElement::childrenChanged):
        * svg/SVGGElement.h:
        * svg/SVGGradientElement.cpp:
        (WebCore::SVGGradientElement::childrenChanged):
        * svg/SVGGradientElement.h:
        * svg/SVGMarkerElement.cpp:
        (WebCore::SVGMarkerElement::childrenChanged):
        * svg/SVGMarkerElement.h:
        * svg/SVGMaskElement.cpp:
        (WebCore::SVGMaskElement::childrenChanged):
        * svg/SVGMaskElement.h:
        * svg/SVGPatternElement.cpp:
        (WebCore::SVGPatternElement::childrenChanged):
        * svg/SVGPatternElement.h:
        * svg/SVGStyleElement.cpp:
        (WebCore::SVGStyleElement::finishParsingChildren):
        (WebCore::SVGStyleElement::childrenChanged):
        * svg/SVGStyleElement.h:
        * svg/SVGStyledElement.cpp:
        (WebCore::SVGStyledElement::childrenChanged):
        * svg/SVGStyledElement.h:
        * svg/SVGTitleElement.cpp:
        (WebCore::SVGTitleElement::childrenChanged):
        * svg/SVGTitleElement.h:
        * svg/SVGUseElement.cpp:
        (WebCore::SVGUseElement::childrenChanged):
        * svg/SVGUseElement.h:

2008-02-15  Mark Rowe  <mrowe@apple.com>

        Merge r30104 to Safari-3-1-branch.

    2008-02-08  Timothy Hatcher  <timothy@apple.com>

        Reviewed by Brady Eidson.

        <rdar://problem/5640896> Removing database then trying
        to recreate it causes trouble

        Added open Database support to DatabaseTracker. So any Database that 
        is deleted will be marked as deleted and will fail to open any transaction
        or execute any new SQL queries.

        * storage/Database.cpp:
        (WebCore::Database::Database): Call DatabaseTracker::addOpenDatabase.
        (WebCore::Database::~Database): Call DatabaseTracker::removeOpenDatabase.
        (WebCore::Database::markAsDeleted): Set the m_deleted flag.
        (WebCore::Database::version): Return a null String if m_deleted is true.
        * storage/Database.h:
        (WebCore::Database::deleted): Return m_deleted.
        * storage/DatabaseTracker.cpp:
        (WebCore::DatabaseTracker::addOpenDatabase): Add the Database to a map of origins and names.
        (WebCore::DatabaseTracker::removeOpenDatabase): Remove the Database from the map.
        (WebCore::DatabaseTracker::deleteDatabaseFile): Call markAsDeleted on all the open Databases
          matching the origin/name.
        * storage/DatabaseTracker.h:
        * storage/SQLStatement.cpp:
        (WebCore::SQLStatement::setDatabaseDeletedError): Set the error about the user deleting the database.
        * storage/SQLStatement.h:
        * storage/SQLTransaction.cpp:
        (WebCore::SQLTransaction::executeSQL): If the Database is deleted, call setDatabaseDeletedError.
        (WebCore::SQLTransaction::openTransactionAndPreflight): Set the error about the user deleting the database
          if the Database was marked as deleted.

2008-02-15  Mark Rowe  <mrowe@apple.com>

        Merge r30101 to Safari-3-1-branch.

    2008-02-08  Anders Carlsson  <andersca@apple.com>

        Reviewed by Mitz.

        <rdar://problem/5650446>
        http://bugs.webkit.org/show_bug.cgi?id=16102
        Crash in FrameLoader::stopLoadingSubframes() on IMDB page

        Store the child frame in a RefPtr to prevent it from being deleted when the
        frame tree changes while calling stopAllLoaders().
        
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::stopLoadingSubframes):

2008-02-15  Mark Rowe  <mrowe@apple.com>

        Merge r30098 to Safari-3-1-branch.

    2008-02-08  Alp Toker  <alp@atoker.com>

        Reviewed by Adam Roben.

        Avoid null-dereference crasher noticed in the GTK+ port and also
        affecting the Win release build.

        Covered by existing tests.

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

2008-02-15  Mark Rowe  <mrowe@apple.com>

        Merge r30097 to Safari-3-1-branch.

    2008-02-08  Anders Carlsson  <andersca@apple.com>

        Reviewed by Adam.

        <rdar://problem/5724188> 
        REGRESSION: PLT 0.7% slower due to 29926 (change Text::createWithLengthLimit to take a UChar pointer)
        
        Revert r29926 which caused the regression.
        
        * dom/Text.cpp:
        (WebCore::Text::createWithLengthLimit):
        * dom/Text.h:
        * html/HTMLParser.cpp:
        (WebCore::HTMLParser::parseToken):
        * loader/TextDocument.cpp:
        (WebCore::TextTokenizer::write):

2008-02-15  Mark Rowe  <mrowe@apple.com>

        Merge r30096 to Safari-3-1-branch.

    2008-02-08  Sam Weinig  <sam@webkit.org>

        Reviewed by Hyatt.

        Fix for <rdar://problem/5732491>
        http://bugs.webkit.org/show_bug.cgi?id=17213
        The querySelectorAll method on an element node does not search only the element's descendants

        Test: fast/dom/SelectorAPI/elementRoot.html

        * dom/Node.cpp:
        (WebCore::Node::querySelector): Make sure to stay within the root node when traversing the tree.
        * dom/SelectorNodeList.cpp:
        (WebCore::SelectorNodeList::SelectorNodeList): ditto.

2008-02-15  Mark Rowe  <mrowe@apple.com>

        Merge r30087 to Safari-3-1-branch.

    2008-02-06  Kimmo Kinnunen  <kimmok@iki.fi>

        Reviewed by Tim Hatcher.

        Fixes: http://bugs.webkit.org/show_bug.cgi?id=17191
        HTML5: Client-side database queries should return values of type number
        Test: storage/sql-data-types.html

        Make the DB queries return a value as a number if it was inserted
        as a number to the database.
        * platform/sql/SQLiteStatement.cpp:
        (WebCore::SQLiteStatement::getColumnValue): new member function to return SQLValues
        * platform/sql/SQLiteStatement.h:
        * storage/SQLStatement.cpp:
        (WebCore::SQLStatement::execute): use getColumnValue instead of getColumnText

2008-02-15  Mark Rowe  <mrowe@apple.com>

        Merge r30085 to Safari-3-1-branch.

    2008-02-07  Ada Chan  <adachan@apple.com>

        <rdar://problem/5292433> certificate authentication support broken in Safari 3.0
        Added mechanism to communicate client certificate info back to CFNetwork.

        Reviewed by Adam.

        * platform/network/ResourceHandle.h:
        * platform/network/cf/ResourceHandleCFNet.cpp:
        (WebCore::clientCerts): Keep a mapping of hosts to client certificates.
        (WebCore::makeFinalRequest): If we have a client certificate for the host, pass it
        to CFNetwork by setting it in the SSL properties.
        (WebCore::ResourceHandle::setClientCertificate): Map client certificate to the host.

2008-02-15  Mark Rowe  <mrowe@apple.com>

        Merge r30081 to Safari-3-1-branch.

    2008-02-07  Adam Roben  <aroben@apple.com>

        Fix Bug 17138: REGRESSION: Node highlight not updated properly

        <http://bugs.webkit.org/show_bug.cgi?id=17138>
        <rdar://problem/5719869>

        Reviewed by Darin.

        No test possible.

        * page/InspectorController.cpp:
        (WebCore::InspectorController::drawNodeHighlight): Update the
        overlayRect after scrolling to make sure that we translate the context
        by the correct amount.

2008-02-15  Mark Rowe  <mrowe@apple.com>

        Merge r30080 to Safari-3-1-branch.

    2008-02-07  Adam Roben  <aroben@apple.com>

        Qt and GTK+ build fixes

        * platform/gtk/FileSystemGtk.cpp: Added a missing #include.
        * platform/qt/FileSystemQt.cpp: Ditto.

2008-02-15  Mark Rowe  <mrowe@apple.com>

        Merge r30079 to Safari-3-1-branch.

    2008-02-07  Adam Roben  <aroben@apple.com>

        Some cleanup of Mac-only user stylesheet code

        I moved UserStyleSheetLoader out of Frame.cpp into its own files, and
        moved some Mac-only Frame methods to FrameMac.mm.

        Reviewed by Darin.

        * WebCore.xcodeproj/project.pbxproj: Added new files to project.
        * loader/mac/UserStyleSheetLoader.cpp: Added.
        (UserStyleSheetLoader::UserStyleSheetLoader):
        (UserStyleSheetLoader::~UserStyleSheetLoader):
        * loader/mac/UserStyleSheetLoader.h: Added.
        * page/Frame.cpp: Removed setUserStyleSheet[Location]
        * page/mac/FrameMac.mm:
        (WebCore::Frame::setUserStyleSheetLocation): Moved here from
        Frame.cpp.
        (WebCore::Frame::setUserStyleSheet): Ditto.

2008-02-15  Mark Rowe  <mrowe@apple.com>

        Merge r30078 to Safari-3-1-branch.

    2008-02-07  Adam Roben  <aroben@apple.com>

        Fix <rdar://5555260> GMail never loads when a user stylesheet is
        specified

        The fix in r29841 did not guarantee that the user stylesheet would not
        still be loading by the time GMail called document.write, and so was
        not a complete fix.

        This change reworks the user stylesheet loading mechanism on non-Mac
        platforms to load the stylesheet synchronously from disk, and then
        keeps it in memory. This obsoletes the issue of what our behavior
        should be before the user stylesheet has loaded and what should happen
        when it finishes loading, as the user stylesheet will always be
        available when the Document first asks for it. Note, however, that
        this removes the ability to specify a non-file: URL for the user
        stylesheet. This change was not made for the Mac platform because it's
        possible that WebKit clients are relying on non-file: URLs for user
        stylesheets. It would also be nice to move back to an asynchronous
        loading model someday, but that is not currently possible since we
        don't have an asynchronous loading mechanism that is not tied to a
        particular Frame.

        The responsibility of loading and storing the user stylesheet has
        moved from Frame to Page, since the user stylesheet URL is set on the
        Page-level Settings object.

        Reviewed by Darin.

        * dom/Document.cpp:
        (WebCore::Document::Document): Changed to call userStyleSheet().
        (WebCore::Document::setUserStyleSheet): Made Mac-only.
        (WebCore::Document::userStyleSheet): Changed to call up to Page on
        non-Mac platforms.
        (WebCore::Document::recalcStyleSelector): Changed to call
        userStyleSheet().
        * dom/Document.h:
            - Made setUserStyleSheet and the m_usersheet member Mac-only
            - Changed userStyleSheet to return a String instance instead of a
              String reference, since we now might return a new null String.
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::begin): Made the call to
        Frame::setUserStyleSheetLocation Mac-only.
        * page/Frame.cpp: Made UserStyleSheetLoader and related code Mac-only.
        (WebCore::Frame::~Frame): Ditto.
        (WebCore::Frame::reapplyStyles): Made the call to
        setUserStyleSheet[Location] Mac-only. On non-Mac platforms the
        Document will pick up the new stylesheet in Document::reapplyStyles.
        (WebCore::FramePrivate::FramePrivate): Made m_userStyleSheetLoader
        Mac-only.
        * page/Frame.h: Made setUserStyleSheet[Location] Mac-only.
        * page/FramePrivate.h: Made m_userStyleSheetLoader Mac-only.
        * page/Page.cpp:
        (WebCore::Page::Page): Initialize new members.
        (WebCore::Page::userStyleSheetLocationChanged): Added. Does nothing on
        Mac. On non-Mac, resets all members relating to the user stylesheet so
        we'll know to load it again the next time it's asked for.
        (WebCore::Page::userStyleSheet): Added. Loads the user stylesheet if
        the user stylesheet location has changed since the last time we loaded
        it, or if the file has been modified since we last loaded it, then
        returns the contents of the user stylesheet as a String.
        * page/Page.h: Added new methods/members.
        * page/Settings.cpp:
        (WebCore::Settings::setUserStyleSheetLocation): Changed to call
        Page::userStyleSheetLocationChanged.
        * page/Settings.h: Changed userStyleSheetLocation to return the KURL
        by reference instead of making a copy.
        * platform/FileSystem.h: Added declaration for getFileModificationTime.
        * platform/KURL.h: Added declaration for fileSystemPath method.
        * platform/cf/KURLCFNet.cpp:
        (WebCore::KURL::fileSystemPath): Added.
        * platform/posix/FileSystemPOSIX.cpp:
        (WebCore::getFileModificationTime): Added.
        * platform/qt/KURLQt.cpp:
        (WebCore::KURL::fileSystemPath): Stubbed out.
        * platform/win/FileSystemWin.cpp:
        (WebCore::getFileModificationTime): Added.
        * platform/qt/FileSystemQt.cpp: Stubbed out getFileModificationTime.
        * platform/gtk/FileSystemGtk.cpp: Ditto.
        * platform/wx/FileSystemWx.cpp: Ditto.
        * platform/qt/TemporaryLinkStubs.cpp: Stubbed out
        SharedBuffer::createWithContentsOfFile.
        * platform/gtk/TemporaryLinkStubs.cpp: Ditto, along with
        KURL::fileSystemPath.
        * platform/wx/TemporaryLinkStubs.cpp: Ditto.

2008-02-15  Mark Rowe  <mrowe@apple.com>

        Merge r30077 to Safari-3-1-branch.

    2008-02-07  Adam Roben  <aroben@apple.com>

        Clean up FileSystemWin.cpp

        This cleanup also makes us call _wstat64 instead of _wstat32i64. The
        only difference between these two functions is that _wstat64 gives
        64-bit time values, while _wstat32i64 only gives 32-bit time values.

        Reviewed by Darin.

        All tests pass.

        * platform/win/FileSystemWin.cpp:
        (WebCore::statFile): New static helper that wraps _wstat64.
        (WebCore::getFileSize): Changed to call statFile.
        (WebCore::fileExists): Ditto.

2008-02-15  Mark Rowe  <mrowe@apple.com>

        Merge r30076 to Safari-3-1-branch.

    2008-02-07  Adam Roben  <aroben@apple.com>

        Rename fileSize to getFileSize

        Rubberstamped by Darin.

        * platform/FileSystem.h:
        * platform/gtk/FileSystemGtk.cpp:
        * platform/network/cf/FormDataStreamCFNet.cpp:
        (WebCore::setHTTPBody):
        * platform/network/curl/ResourceHandleManager.cpp:
        (WebCore::ResourceHandleManager::setupPOST):
        * platform/posix/FileSystemPOSIX.cpp:
        * platform/qt/FileSystemQt.cpp:
        * platform/win/FileSystemWin.cpp:
        * platform/wx/FileSystemWx.cpp:
        * storage/Database.cpp:
        (WebCore::Database::databaseSize):
        * storage/DatabaseTracker.cpp:
        (WebCore::DatabaseTracker::usageForDatabase):
        * storage/OriginUsageRecord.cpp:
        (WebCore::OriginUsageRecord::diskUsage):

2008-02-15  Mark Rowe  <mrowe@apple.com>

        Merge r30075 to Safari-3-1-branch.

    2008-02-06  Adam Roben  <aroben@apple.com>

        Make KURL::isLocalFile treat the URL's protocol case-insensitively

        Reviewed by Darin.

        * platform/KURL.cpp:
        (WebCore::KURL::isLocalFile): Use equalIgnoringCase instead of ==.

2008-02-14  Dan Bernstein  <mitz@apple.com>

        Reviewed by Adele Peterson.

        - roll out changes to CSS2 system colors from r28775

        * css/CSSStyleSelector.cpp:
        (WebCore::):
        (WebCore::colorForCSSValue):
        * rendering/RenderTheme.cpp:
        * rendering/RenderTheme.h:
        * rendering/RenderThemeMac.h:
        * rendering/RenderThemeMac.mm:

2008-02-07  David Hyatt  <hyatt@apple.com>

        Fix for bug 6248, implement the nth-* CSS3 selectors.  Patch based on original KHTML work from Allan Jensen
        and improved upon by Nick Shanks.

        Reviewed by Eric

        * css/CSSGrammar.y:
        * css/CSSParser.cpp:
        (WebCore::CSSParser::lex):
        * css/CSSSelector.cpp:
        (WebCore::CSSSelector::extractPseudoType):
        * css/CSSSelector.h:
        (WebCore::CSSSelector::):
        * css/CSSStyleSelector.cpp:
        (WebCore::parseNth):
        (WebCore::matchNth):
        (WebCore::CSSStyleSelector::checkOneSelector):
        * css/tokenizer.flex:
        * rendering/RenderStyle.cpp:
        (WebCore::RenderStyle::RenderStyle):
        * rendering/RenderStyle.h:
        (WebCore::RenderStyle::childIndex):
        (WebCore::RenderStyle::setChildIndex):

2008-02-07  Dan Bernstein  <mitz@apple.com>

        Reviewed by Dave Hyatt.

        - fix <rdar://problem/5729411> REGRESSION (r29834): Float contained in relative-positioned block is painted twice

        Test: fast/block/float/relative-painted-twice.html

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::addOverhangingFloats): Added another case where
        the child should not take over painting the float: when they do not have
        the same enclosing layer. In that case, the float is already being
        painted by one of its closer ancestors.

2008-02-07  Dan Bernstein  <mitz@apple.com>

        Reviewed by Darin Adler.

        - fix http://bugs.webkit.org/show_bug.cgi?id=17194
          Changing text to bold changes font family

        Test: platform/mac/fast/text/family-for-font-matched-by-name.html

        * platform/mac/WebFontCache.mm:
        (+[WebFontCache internalFontWithFamily:traits:size:]): Changed to use
        the family of the font whose name matches the desired family if there
        is no exact family match.

2008-02-07  Beth Dakin  <bdakin@apple.com>

        Reviewed by Geoff.

        Fix for <rdar://problem/5697882> Traffic or Street View button on 
        Google Maps is sometimes not positioned correctly (17000)

        On the Mac, timers fire in the order that they are registered. 
        Geoff and I discovered that this is not necessarily true on 
        Windows, and that turned out to be the cause of this intermittent 
        layout problem at Google Maps. This patch adds a new member 
        variable to Timer to remember the timer's insertion point into the 
        heap. Now when comparing timers, if two timers were registered at 
        the same time, their insertion orders are compared to determine 
        which should fire first. This code actually never runs on Debug 
        builds on the Mac; the system clock on the Mac is accurate enough 
        that it knows that the two timers were not registered at *exactly* 
        the same time. This is not the case on Windows. In theory, if we 
        sped up Javascript enough on the Mac, this code would run and would 
        prevent misrenderings such as the one found on Google Maps.

        * platform/Timer.cpp:
        (WebCore::operator<):
        (WebCore::TimerBase::setNextFireTime):
        * platform/Timer.h:

2008-02-06  Justin Garcia  <justin.garcia@apple.com>

        Reviewed by Darin Adler.

        <rdar://problem/5195056> Huge plain text pastes are slow
        
        This was fixed in r27369 and then r29367 and r29667 caused performance to
        regress.

        * editing/EditCommand.cpp:
        (WebCore::EditCommand::apply): Only updateLayout() for high level commands.
        (WebCore::EditCommand::unapply): Ditto.
        (WebCore::EditCommand::reapply): Ditto.
        * editing/Editor.cpp:
        (WebCore::Editor::appliedEditing): Added a note about shouldChangeSelection calls 
        that shouldn't be made, a bug I filed as <rdar://problem/5729315>.
        (WebCore::Editor::unappliedEditing): Ditto.
        (WebCore::Editor::reappliedEditing): Ditto.
        * editing/SelectionController.cpp:
        (WebCore::SelectionController::nodeWillBeRemoved): Don't try to test the selection
        base and extent with the expensive isCandidate operation if the node that will
        be removed is in a fragment, since such a removal is guaranteed to have no effect
        on a selection.  This is to speed up the paste operation, which does many removes from
        a fragment.

2008-02-06  Kevin Ollivier  <kevino@theolliviers.com>

        Reviewed by Darin Adler.

        Rather than directly handing scroll wheel events, use
        PlatformWheelEvent to send them to WebCore first, so that
        mouse wheel scrolling info can be retrieved via JavaScript.

        http://bugs.webkit.org/show_bug.cgi?id=17179

        * platform/ScrollView.h:
        * platform/wx/MouseWheelEventWx.cpp:
        (WebCore::PlatformWheelEvent::PlatformWheelEvent):
        * platform/wx/ScrollViewWx.cpp:
        (WebCore::ScrollView::ScrollViewPrivate::bindEvents):
        (WebCore::ScrollView::wheelEvent):
        (WebCore::ScrollView::maximumScroll):

2008-02-06  Mark Rowe  <mrowe@apple.com>

        Fix Windows builds.

        * WebCore.vcproj/WebCore.vcproj: Unbreak the XML of the project file.

2008-02-06  Mark Rowe  <mrowe@apple.com>

        Mac build fix.  Track rename that happened in r30056.

        * platform/graphics/mac/GraphicsContextMac.mm:

2008-02-06  Brent Fulgham  <bfulgham@gmail.com>

        Reviewed by Adam Roben.

        http://bugs.webkit.org/show_bug.cgi?id=16979
        Conditionalize CoreGraphics vs Cairo support in Windows port.

        * WebCore.vcproj/WebCore.vcproj:
        * bridge/win/FrameCGWin.cpp: Copied from WebCore/bridge/win/FrameWin.cpp.
        (WebCore::imageFromSelection):
        * bridge/win/FrameCairoWin.cpp: Added.
        (WebCore::imageFromSelection):
        * bridge/win/FrameWin.cpp:
        (WebCore::computePageRectsForFrame):
        * platform/graphics/SimpleFontData.h:
        * platform/graphics/cairo/GraphicsContextCairo.cpp:
        * platform/graphics/cairo/GraphicsContextPlatformPrivateCairo.h: Copied from WebCore/platform/graphics/cairo/GraphicsContextCairo.cpp.
        (WebCore::GraphicsContextPlatformPrivate::GraphicsContextPlatformPrivate):
        (WebCore::GraphicsContextPlatformPrivate::~GraphicsContextPlatformPrivate):
        (WebCore::GraphicsContextPlatformPrivate::beginTransparencyLayer):
        (WebCore::GraphicsContextPlatformPrivate::endTransparencyLayer):
        * platform/graphics/cg/GraphicsContextCG.cpp:
        (WebCore::GraphicsContext::savePlatformState):
        (WebCore::GraphicsContext::restorePlatformState):
        * platform/graphics/cg/GraphicsContextPlatformPrivate.h: Removed.
        * platform/graphics/cg/GraphicsContextPlatformPrivateCG.h: Copied from WebCore/platform/graphics/cg/GraphicsContextPlatformPrivate.h.
        * platform/graphics/win/FontCGWin.cpp: Copied from WebCore/platform/graphics/win/FontWin.cpp.
        (WebCore::Font::drawGlyphs):
        * platform/graphics/win/FontCairoWin.cpp: Added.
        (WebCore::Font::drawGlyphs):
        * platform/graphics/win/FontWin.cpp:
        * platform/graphics/win/GraphicsContextCGWin.cpp: Copied from WebCore/platform/graphics/win/GraphicsContextWin.cpp.
        (WebCore::CGContextWithHDC):
        (WebCore::GraphicsContext::inTransparencyLayer):
        (WebCore::GraphicsContext::getWindowsContext):
        (WebCore::GraphicsContext::releaseWindowsContext):
        (WebCore::GraphicsContextPlatformPrivate::scale):
        (WebCore::GraphicsContextPlatformPrivate::rotate):
        (WebCore::GraphicsContextPlatformPrivate::translate):
        (WebCore::GraphicsContextPlatformPrivate::concatCTM):
        (WebCore::setCGStrokeColor):
        (WebCore::GraphicsContext::drawLineForMisspellingOrBadGrammar):
        * platform/graphics/win/GraphicsContextCairoWin.cpp: Added.
        (WebCore::GraphicsContext::GraphicsContext):
        (WebCore::GraphicsContext::getWindowsContext):
        (WebCore::GraphicsContext::inTransparencyLayer):
        (WebCore::GraphicsContext::releaseWindowsContext):
        (WebCore::GraphicsContext::concatCTM):
        * platform/graphics/win/GraphicsContextWin.cpp:
        * platform/graphics/win/ImageCGWin.cpp: Copied from WebCore/platform/graphics/win/ImageWin.cpp.
        (WebCore::BitmapImage::getHBITMAPOfSize):
        (WebCore::BitmapImage::drawFrameMatchingSourceSize):
        * platform/graphics/win/ImageCairoWin.cpp: Added.
        (WebCore::BitmapImage::getHBITMAPOfSize):
        (WebCore::BitmapImage::drawFrameMatchingSourceSize):
        * platform/graphics/win/ImageWin.cpp:
        * platform/graphics/win/SimpleFontDataCGWin.cpp: Copied from WebCore/platform/graphics/win/SimpleFontDataWin.cpp.
        (WebCore::scaleEmToUnits):
        (WebCore::SimpleFontData::platformInit):
        (WebCore::SimpleFontData::platformWidthForGlyph):
        * platform/graphics/win/SimpleFontDataCairoWin.cpp: Added.
        (WebCore::SimpleFontData::platformInit):
        (WebCore::SimpleFontData::platformDestroy):
        (WebCore::SimpleFontData::platformWidthForGlyph):
        * platform/graphics/win/SimpleFontDataWin.cpp:
        (WebCore::SimpleFontData::setShouldApplyMacAscentHack):
        (WebCore::SimpleFontData::shouldApplyMacAscentHack):
        * platform/win/DragImageCGWin.cpp: Copied from WebCore/platform/win/DragImageWin.cpp.
        (WebCore::scaleDragImage):
        (WebCore::createDragImageFromImage):
        * platform/win/DragImageCairoWin.cpp: Added.
        (WebCore::scaleDragImage):
        (WebCore::createDragImageFromImage):
        * platform/win/DragImageWin.cpp:

2008-02-06  Anders Carlsson  <andersca@apple.com>

        Reviewed by Darin.

        Change httpBodyFromStream to take the request instead of the stream.
        
        * platform/network/cf/FormDataStreamCFNet.cpp:
        (WebCore::httpBodyFromRequest):
        * platform/network/cf/FormDataStreamCFNet.h:
        * platform/network/cf/ResourceRequestCFNet.cpp:
        (WebCore::ResourceRequest::doUpdateResourceRequest):

2008-02-06  Kevin McCullough  <kmccullough@apple.com>

        Reviewed by Darin.

        - Added manual tests for <rdar://problem/5556374> REGRESSION: cross-domain error when
        one URL uses an explicit port number and another doesn't

        * manual-tests/Default-port-frame.html: Added.
        * manual-tests/resources/Default-port-frame-contents.html: Added.

2008-02-06  Oliver Hunt  <oliver@apple.com>

        Reviewed by NOBODY (Build fix).

        Fix windows build

        * WebCore.vcproj/build-generated-files.sh:

2008-02-06  Kevin McCullough  <kmccullough@apple.com>

        Rubberstamped by Darin.

        <rdar://problem/5727708> REGRESSION (r29952): Can't send message from Yahoo Mail beta
        - Reverted the change that caused the regression.

        * dom/Document.cpp:
        (WebCore::Document::createElement):
        (WebCore::Document::createElementNS):
        (WebCore::Document::getElementById):
        (WebCore::Document::parseQualifiedName):
        (WebCore::Document::createAttributeNS):
        * dom/Document.idl:

2008-02-06  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Oliver Hunt.
        
        Fixed <rdar://problem/5728081> REGRESSION: Many leaks on buildbot

        The problem was refCount underflow in NamedAttrMap.
        
        Neither our regression tests nor the stress test have yet discovered
        another instance of this problem.

        * dom/NamedAttrMap.cpp:
        (WebCore::NamedAttrMap::addAttribute): Changed to use PassRefPtr,
        for fast and correct refCount management. Also, change a rediculously
        slow malloc to a slightly less rediculously slow realloc.

        * dom/NamedAttrMap.h:
        (WebCore::NamedAttrMap::insertAttribute): Changed to use PassRefPtr,
        for fast and correct refCount management.

        * html/HTMLTokenizer.cpp:
        (WebCore::Token::addAttribute): Use a RefPtr, to guarantee that the
        object starts with a refCount of 1.

2008-02-06  Darin Adler  <darin@apple.com>

        Reviewed by Tim Hatcher.

        - fix <rdar://problem/5723293> NULL-deref crash in PropertyMap::put opening web inspector
          with View Source window as target

        * page/InspectorController.cpp:
        (WebCore::canPassNodeToJavaScript): Added. Returns false if the node is in a document with
        JavaScript disabled.
        (WebCore::InspectorController::inspect): Check canPassNodeToJavaScript and do nothing if
        it returns false.

2008-02-06  David Hyatt  <hyatt@apple.com>

        Fix for bug 16799, object elements should return absolute URLs from .data.

        Reviewed by Mark Rowe

        * dom/Document.cpp:
        (WebCore::Document::completeURL):
        * html/HTMLAnchorElement.cpp:
        (WebCore::HTMLAnchorElement::href):
        * html/HTMLObjectElement.cpp:
        (WebCore::HTMLObjectElement::data):

2008-02-05  Antti Koivisto  <antti@apple.com>

        Reviewed by Darin.

        <rdar://problem/5726340>
        <video autoplay controls> left in unplayable state if navigated away, then back to, before video finished loading
        
        When moving document in and out from the page cache:
        - Cancel incomplete load by deleting the media player. This guarantees everything is in consistent state.
        - Restart the load if it was aborted in the middle.

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::~HTMLMediaElement):
        (WebCore::HTMLMediaElement::load):
        (WebCore::HTMLMediaElement::willSaveToCache):
        (WebCore::HTMLMediaElement::didRestoreFromCache):
        * html/HTMLMediaElement.h:
        (WebCore::HTMLMediaElement::player):

2008-02-06  Darin Adler  <darin@apple.com>

        Reviewed by Sam.

        - replace calls to put to set up properties with calls to putDirect, to
          prepare for a future change where put won't take attributes any more,
          and for a slight performance boost

        * bindings/js/JSAudioConstructor.cpp:
        (WebCore::JSAudioConstructor::JSAudioConstructor): Use putDirect instead of put.
        * bindings/js/JSEventTargetBase.h:
        (WebCore::JSEventTargetPrototype::self): Ditto.
        * bindings/js/JSHTMLOptionElementConstructor.cpp:
        (WebCore::JSHTMLOptionElementConstructor::JSHTMLOptionElementConstructor): Ditto.
        * bindings/js/JSSQLResultSetRowListCustom.cpp:
        (WebCore::JSSQLResultSetRowList::item): Ditto.

2008-02-06  Dan Bernstein  <mitz@apple.com>

        Reviewed by Darin Adler.

        - fix http://bugs.webkit.org/show_bug.cgi?17093
        'border-color' does not animate to the value of 'color' when unspecified

        Test: fast/css/transition-color-unspecified.html

        * page/AnimationController.cpp:
        (WebCore::ImplicitAnimation::animate): Changed to use the value of the
        'color' property in the source or destination style as the source or
        destination value of properties whose inital value is defined to be the
        computed value of 'color'.

2008-02-06  Dan Bernstein  <mitz@apple.com>

        Build fix.

        * svg/svgtags.in:

2008-02-05  Oliver Hunt  <oliver@apple.com>

        Build fix -- touch generate-bindings to trigger regeneration of bindings

        * bindings/scripts/generate-bindings.pl:

2008-02-05  Oliver Hunt  <oliver@apple.com>

        RS=Eric.

        Re-enable foreignObject by default as it is needed for a number of 
        non-fO related SVG tests and none of the old known crashes occur
        anymore.

        * Configurations/WebCore.xcconfig:
        * WebCore.vcproj/WebCore.vcproj:

2008-02-05  Sam Weinig  <sam@webkit.org>

        Reviewed by Anders Carlsson.

        Fix for http://bugs.webkit.org/show_bug.cgi?id=8080
        NodeList (and other DOM lists) items are not enumeratable using for..in

        - Match Firefox when enumerating DOM interfaces with indexGetters (support for 
          the array bracket, nodeList[0], notation) by including all the items in the
          list before the attributes and methods of the interface.

        Test: fast/dom/domListEnumeration.html

        * ForwardingHeaders/kjs/PropertyNameArray.h: Added.
        * bindings/js/JSDOMWindowCustom.cpp:
        (WebCore::JSDOMWindow::customGetPropertyNames): Use the new custom method model. 
        * bindings/js/JSHistoryCustom.cpp:
        (WebCore::JSHistory::customGetPropertyNames): ditto.
        * bindings/scripts/CodeGeneratorJS.pm: Instead of just adding a declaration of
        getProperyNames and implementing the method in the Custom.cpp, move to a the 
        model used by generated getOwnPropertySlot() and put() where the custom code
        is written in a separate customGetPropertyNames which returns a bool indicating
        whether to call up to the base class.  This enables adding the list indexes
        to the PropertyNameArray for interfaces with indexGetters automatically.

2008-02-05  Samuel Weinig  <sam@webkit.org>

        Reviewed by Darin Adler.

        Fix for <rdar://problem/5726604> 
        dom-checker: deleting properties of the window object cross-domain should not be allowed

        Fix flaw found while testing with dom-checker testing tool (http://code.google.com/p/dom-checker/).

        Test: http/tests/security/cross-frame-access-delete.html

        * bindings/js/JSDOMWindowCustom.cpp:
        (WebCore::JSDOMWindow::deleteProperty): Override deleteProperty to not delete cross-domain.
        * bindings/js/JSHistoryCustom.cpp:
        (WebCore::JSHistory::deleteProperty): ditto.
        * bindings/js/JSLocation.cpp:
        (WebCore::JSLocation::deleteProperty): ditto.
        * bindings/js/JSLocation.h:

        * bindings/scripts/CodeGeneratorJS.pm: Add deleteProperty declaration when CustomDeleteProperty is used.
        * page/DOMWindow.idl: Add CustomDeleteProperty extended attribute.
        * page/History.idl: ditto.

2008-02-05  Alp Toker  <alp@atoker.com>

        Rubber-stamped by Mark Rowe.

        Fix a "missing sentinel in function call" warning by using NULL
        instead of 0.

        * platform/gtk/RenderThemeGtk.cpp:
        (WebCore::RenderThemeGtk::caretBlinkFrequency):

2008-02-05  Nikolas Zimmermann  <zimmermann@kde.org>

        Reviewed by Oliver.

        Fix dynamic updates of <circle> element's properties.

        Added tests: svg/dynamic-updates/SVGCircleElement*

        * svg/SVGCircleElement.cpp:
        (WebCore::SVGCircleElement::svgAttributeChanged): Mixed up cxAttr/xAttr etc.
        * svg/SVGCircleElement.h:

2008-02-05  Rodney Dawes  <dobey@wayofthemonkey.com>

        Wx build fix.  Add WebCore/plugins to the include path.

        * webcore-base.bkl:

2008-02-05  Mark Rowe  <mrowe@apple.com>

        Mac build fix.  Update the Xcode project to follow a moved file,
        and track a rename in two files that were missed earlier.

        * WebCore.xcodeproj/project.pbxproj:
        * page/mac/WebCoreFrameBridge.mm:
        (-[WebCoreFrameBridge canProvideDocumentSource]):
        * platform/mac/PlugInInfoStoreMac.mm:
        (WebCore::PluginInfoStore::pluginNameForMIMEType):

2008-02-05  Nikolas Zimmermann  <zimmermann@kde.org>

        Reviewed by Holger.

        Fixes: http://bugs.webkit.org/show_bug.cgi?id=17185
        Fix dynamic SVG DOM updates of <a> element's href property.

        This commit also introduces a new SVG Tests framework: LayoutTests/svg/dynamic-updates
        Its purpose is to provide dynamic updating tests for each SVG class & property, aka.
        one test per property per class. As a first pass it's sufficient to add testcases for all
        SVG*Element classes, and their properties - and only common-used base-class properties.

        For SVGAElement - for example - it makes most sense to test scripting its parent
        SVGURIReference object ('href' property) and its own property 'target'.

        Adding tests to see - for example - if SVGAElement reacts on changes on ie. its parent
        SVGExternalResourcesRequired interface, should really be done in a second pass.

        All tests within the new framework are supposed to be created using make-js-tests-wrappers.

        Added test: svg/dynamic-updates/SVGAElement-dom-href-attr.js
        Added test: svg/dynamic-updates/SVGAElement-dom-target-attr.js
        Added test: svg/dynamic-updates/SVGAElement-svgdom-href-prop.js
        Added test: svg/dynamic-updates/SVGAElement-svgdom-target-prop.js

        * svg/SVGAElement.cpp:
        (WebCore::SVGAElement::parseMappedAttribute): Move any setChanged() handling in svgAttributeChanged.
        (WebCore::SVGAElement::svgAttributeChanged):
        (WebCore::SVGAElement::defaultEventHandler): Use href() not getAttribute(hrefAttr) - otherwhise SVG DOM updates fail!
        * svg/SVGAElement.h:

2008-02-05  Justin Garcia  <justin.garcia@apple.com>

        Reviewed by Alexey Proskuryakov.

        <rdar://problem/5685601> webkit-block-placeholder class on placeholders seems unnecessary (12317)

        * editing/CompositeEditCommand.cpp:
        (WebCore::createBlockPlaceholderElement): The khtml-block-placeholder class was needed
        when the editing code actively looked for <br>s of that type in order to handle them
        specially.  That is no longer the case.
        * editing/InsertParagraphSeparatorCommand.cpp:
        (WebCore::InsertParagraphSeparatorCommand::doApply): Fixed a bug where an extra block
        would be inserted when hitting return inside an editable root held open by a placeholder
        <br> or '\n'.  Added test cases for the bug and for the special case code that was incorrectly
        triggered to cause the bug. 

2008-02-05  Rodney Dawes  <dobey@wayofthemonkey.com>

        Reviewed by Anders Carlsson.

        Part one of http://bugs.webkit.org/show_bug.cgi?id=16924.
        Shared PluginDatabase, PluginInfoStore and PluginPackage implementations.

        Remove the Win suffix on several plugin-related classes that will
        soon be refactored to be more portable.

        * WebCore.vcproj/WebCore.vcproj:
        * bindings/js/kjs_navigator.cpp:
        (KJS::PluginBase::cachePluginDataIfNecessary):
        * bindings/js/kjs_window.cpp:
        * bridge/win/FrameWin.cpp:
        (WebCore::Frame::createScriptInstanceForWidget):
        * dom/Clipboard.cpp:
        * dom/DOMImplementation.cpp:
        (WebCore::DOMImplementation::createDocument):
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::shouldUsePlugin):
        * page/DragController.cpp:
        * platform/PlugInInfoStore.h: Removed.
        * platform/gtk/TemporaryLinkStubs.cpp:
        (PluginInfoStore::createPluginInfoForPluginAtIndex):
        (PluginInfoStore::pluginCount):
        (PluginInfoStore::pluginNameForMIMEType):
        (WebCore::PluginInfoStore::supportsMIMEType):
        * platform/qt/PlugInInfoStoreQt.cpp:
        (WebCore::PluginInfoStore::createPluginInfoForPluginAtIndex):
        (WebCore::PluginInfoStore::pluginCount):
        (WebCore::PluginInfoStore::pluginNameForMIMEType):
        (WebCore::PluginInfoStore::supportsMIMEType):
        * platform/qt/TemporaryLinkStubs.cpp:
        * platform/win/SharedTimerWin.cpp:
        (WebCore::TimerWindowWndProc):
        * platform/wx/TemporaryLinkStubs.cpp:
        (PluginInfoStore::createPluginInfoForPluginAtIndex):
        (PluginInfoStore::pluginCount):
        (WebCore::PluginInfoStore::supportsMIMEType):
        (PluginInfoStore::pluginNameForMIMEType):
        * plugins/PluginDatabase.h: Copied from WebCore/plugins/win/PluginDatabaseWin.h.
        * plugins/PluginInfoStore.cpp: Copied from WebCore/plugins/win/PlugInInfoStoreWin.cpp.
        (WebCore::PluginInfoStore::createPluginInfoForPluginAtIndex):
        (WebCore::PluginInfoStore::pluginCount):
        (WebCore::PluginInfoStore::pluginNameForMIMEType):
        (WebCore::PluginInfoStore::supportsMIMEType):
        (WebCore::refreshPlugins):
        * plugins/PluginInfoStore.h: Copied from WebCore/platform/PlugInInfoStore.h.
        * plugins/PluginPackage.h: Copied from WebCore/plugins/win/PluginPackageWin.h.
        (WebCore::PluginPackageHash::hash):
        (WebCore::PluginPackageHash::equal):
        (WTF::):
        * plugins/PluginView.h: Copied from WebCore/plugins/win/PluginViewWin.h.
        (WebCore::PluginView::plugin):
        * plugins/npapi.cpp: Copied from WebCore/plugins/win/npapi.cpp.
        (pluginViewForInstance):
        (NPN_UserAgent):
        * plugins/win/PlugInInfoStoreWin.cpp: Removed.
        * plugins/win/PluginDatabaseWin.cpp:
        (WebCore::PluginDatabase::installedPlugins):
        (WebCore::PluginDatabase::addExtraPluginPath):
        (WebCore::PluginDatabase::refresh):
        (WebCore::PluginDatabase::plugins):
        (WebCore::addPluginsFromRegistry):
        (WebCore::PluginDatabase::getPluginsInPaths):
        (WebCore::PluginDatabase::defaultPluginPaths):
        (WebCore::PluginDatabase::isMIMETypeRegistered):
        (WebCore::PluginDatabase::pluginForMIMEType):
        (WebCore::PluginDatabase::MIMETypeForExtension):
        (WebCore::PluginDatabase::findPlugin):
        (WebCore::PluginDatabase::createPluginView):
        * plugins/win/PluginDatabaseWin.h: Removed.
        * plugins/win/PluginPackageWin.cpp:
        (WebCore::PluginPackage::~PluginPackage):
        (WebCore::PluginPackage::freeLibrarySoon):
        (WebCore::PluginPackage::freeLibraryTimerFired):
        (WebCore::PluginPackage::PluginPackage):
        (WebCore::PluginPackage::compareFileVersion):
        (WebCore::PluginPackage::storeFileVersion):
        (WebCore::PluginPackage::isPluginBlacklisted):
        (WebCore::PluginPackage::fetchInfo):
        (WebCore::PluginPackage::load):
        (WebCore::PluginPackage::unload):
        (WebCore::PluginPackage::unloadWithoutShutdown):
        (WebCore::PluginPackage::createPackage):
        (WebCore::PluginPackage::hash):
        (WebCore::PluginPackage::equal):
        * plugins/win/PluginPackageWin.h: Removed.
        * plugins/win/PluginViewWin.cpp:
        (WebCore::PluginRequest::PluginRequest):
        (WebCore::PluginMessageThrottlerWin::PluginMessageThrottlerWin):
        (WebCore::registerPluginView):
        (WebCore::PluginViewWndProc):
        (WebCore::PluginView::popPopupsStateTimerFired):
        (WebCore::PluginView::wndProc):
        (WebCore::PluginView::updateWindow):
        (WebCore::PluginView::windowClipRect):
        (WebCore::PluginView::setFrameGeometry):
        (WebCore::PluginView::geometryChanged):
        (WebCore::PluginView::setFocus):
        (WebCore::PluginView::show):
        (WebCore::PluginView::hide):
        (WebCore::PluginView::paintMissingPluginIcon):
        (WebCore::PluginView::dispatchNPEvent):
        (WebCore::PluginView::paint):
        (WebCore::PluginView::handleKeyboardEvent):
        (WebCore::PluginView::handleMouseEvent):
        (WebCore::PluginView::handleEvent):
        (WebCore::PluginView::setParent):
        (WebCore::PluginView::attachToWindow):
        (WebCore::PluginView::detachFromWindow):
        (WebCore::PluginView::setNPWindowRect):
        (WebCore::PluginView::start):
        (WebCore::PluginView::stop):
        (WebCore::PluginView::setCurrentPluginView):
        (WebCore::PluginView::currentPluginView):
        (WebCore::PluginView::performRequest):
        (WebCore::PluginView::requestTimerFired):
        (WebCore::PluginView::scheduleRequest):
        (WebCore::PluginView::load):
        (WebCore::PluginView::getURLNotify):
        (WebCore::PluginView::getURL):
        (WebCore::PluginView::handlePost):
        (WebCore::PluginView::postURLNotify):
        (WebCore::PluginView::postURL):
        (WebCore::PluginView::newStream):
        (WebCore::PluginView::write):
        (WebCore::PluginView::destroyStream):
        (WebCore::PluginView::userAgent):
        (WebCore::PluginView::status):
        (WebCore::PluginView::getValue):
        (WebCore::PluginView::setValue):
        (WebCore::PluginView::invalidateTimerFired):
        (WebCore::PluginView::invalidateRect):
        (WebCore::PluginView::invalidateRegion):
        (WebCore::PluginView::forceRedraw):
        (WebCore::PluginView::pushPopupsEnabledState):
        (WebCore::PluginView::popPopupsEnabledState):
        (WebCore::PluginView::arePopupsAllowed):
        (WebCore::PluginView::bindingInstance):
        (WebCore::PluginView::~PluginView):
        (WebCore::PluginView::disconnectStream):
        (WebCore::PluginView::determineQuirks):
        (WebCore::PluginView::setParameters):
        (WebCore::PluginView::PluginView):
        (WebCore::PluginView::init):
        (WebCore::PluginView::didReceiveResponse):
        (WebCore::PluginView::didReceiveData):
        (WebCore::PluginView::didFinishLoading):
        (WebCore::PluginView::didFail):
        (WebCore::PluginView::setCallingPlugin):
        (WebCore::PluginView::isCallingPlugin):
        * plugins/win/PluginViewWin.h: Removed.
        * plugins/win/npapi.cpp: Removed.

2008-02-05  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Darin.

        http://bugs.webkit.org/show_bug.cgi?id=17158
        Setting innerHTML in a detached XHTML element doesn't use the right namespace

        Test: fast/dom/innerHTML-detached-element.xhtml

        * dom/XMLTokenizer.cpp: (WebCore::XMLTokenizer::XMLTokenizer): Take parent element namespace
        into account.

2008-02-05  Antti Koivisto  <antti@apple.com>

        Reviewed by Geoff.
        
        Fix <rdar://problem/5698200>
        eBay photo uploading hangs and causes slow script warning to pop up
        
        In a case like this
        
            var f = window.parent.parentFunction;
            document.domain = document.domain; // this makes window.parent inaccessible
            f();
        
        Firefox allows parentFunction to access parents properties. Match this behavior.
        
        In a domain security check against the dynamic global object fails for the specific reason that one of 
        the frames has written to the document.domain property and another has not (but they match otherwise), 
        then recheck against the lexical global object.

        Test: http/tests/security/cross-frame-access-callback-explicit-domain-ALLOW.html
              http/tests/security/cross-frame-access-callback-explicit-domain-DENY.html

        * bindings/js/kjs_window.cpp:
        (KJS::Window::allowsAccessFrom):
        (KJS::Window::printErrorMessage):
        * bindings/js/kjs_window.h:
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::shouldAllowNavigation):
        * platform/SecurityOrigin.cpp:
        (WebCore::SecurityOrigin::canAccess):
        * platform/SecurityOrigin.h:
        (WebCore::SecurityOrigin::):

2008-02-05  Adam Roben  <aroben@apple.com>

        Remove an unused member from Document

        Reviewed by Mitz.

        * dom/Document.cpp:
        (WebCore::Document::recalcStyleSelector): There's no need to take
        m_printSheet into account anymore as it's never anything but the null
        string.
        * dom/Document.h: Removed m_printSheet and methods relating to it.

2008-02-05  Dan Bernstein  <mitz@apple.com>

        Reviewed by Darin Adler.

        - WebCore part of <rdar://problem/5724303> Should implement writing direction shortcuts

        * WebCore.base.exp: Added Editor::setBaseWritingDirection() and
        Frame::baseWritingDirectionForSelectionStart().
        * page/mac/WebCoreFrameBridge.h: Removed
        -baseWritingDirectionForSelectionStart.
        * page/mac/WebCoreFrameBridge.mm: Ditto.

2008-02-05  Mark Rowe  <mrowe@apple.com>

        Reviewed by Oliver Hunt.

        Update versioning to support the mysterious future.

        * Configurations/Version.xcconfig: Add SYSTEM_VERSION_PREFIX_1060.

2008-02-05  Mark Rowe  <mrowe@apple.com>

        Fix the wxWidget Mac build by avoiding using ICU functions that were added after ICU 3.2.

        * editing/SmartReplaceICU.cpp:
        (WebCore::addAllCodePoints): Implement a replacement for uset_addAllCodePoints.
        (WebCore::getSmartSet): Use addAllCodePoints instead of uset_addAllCodePoints.

2008-02-05  Mark Rowe  <mrowe@apple.com>

        Rubber-stamped by Oliver Hunt.

        30,000!

        * ChangeLog: Point out revision 30,000.

2008-02-04  Mark Rowe  <mrowe@apple.com>

        Unreviewed Gtk build fix.

        wchar_t is only convertible to UChar on Windows.  Use WebCore's String class
        to get the UChars out of a C string in a portable fashion.

        * editing/SmartReplaceICU.cpp:
        (WebCore::getSmartSet):

2008-02-04  Tony Chang  <idealisms@gmail.com>

        Reviewed by Darin Adler.

        Port the CoreFoundation version of WebCore::isCharacterSmartReplaceExempt
        for other platforms by using ICU directly.

        * GNUmakefile.am: Add SmartReplaceICU.cpp.
        * WebCore.pro: Ditto.
        * WebCoreSources.bkl: Ditto.
        * editing/SmartReplace.cpp: Don't use this empty implementation when ICU is available.
        * editing/SmartReplaceICU.cpp:
        (getSmartSet):
        (WebCore::isCharacterSmartReplaceExempt):

2008-02-04  Robert Sesek  <rsesek@bluestatic.org>

        Reviewed by Darin Adler.

        Fix http://bugs.webkit.org/show_bug.cgi?id=17042
        forms without action attributes submit to the <base> href instead of the originating page

        Test: fast/forms/missing-action.html

        * html/HTMLFormElement.cpp:
        (WebCore::HTMLFormElement::submit): Submit to origin if there is no action

2008-02-04  Mark Rowe  <mrowe@apple.com>

        Reviewed by Tim Hatcher.

        Gtk build fix.  Use std::numeric_limits in place of ULLONG_MAX as
        some Linux machines do not have ULLONG_MAX.

        OriginUsageRecord::unknownDiskUsage becomes a static function to avoid
        the global initialiser which would otherwise be generated.

        * storage/OriginUsageRecord.cpp:
        (WebCore::OriginUsageRecord::unknownDiskUsage):
        (WebCore::OriginUsageRecord::addDatabase):
        (WebCore::OriginUsageRecord::removeDatabase):
        (WebCore::OriginUsageRecord::markDatabase):
        (WebCore::OriginUsageRecord::diskUsage):
        * storage/OriginUsageRecord.h:

2008-02-04  Mark Rowe  <mrowe@apple.com>

        Speculative Gtk build fix.

        * storage/OriginUsageRecord.cpp:

2008-02-04  Brady Eidson  <beidson@apple.com>

        Attempt to fix build of all non-Mac platforms

        * GNUmakefile.am:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCoreSources.bkl:

2008-02-04  Brady Eidson  <beidson@apple.com>

        Reviewed by Darin

        Fix for <rdar://problem/5628468> - Quotas need to be implemented per-origin, and not per-database

        To accomplish this, we need to track the sizes of all databases in an origin to constantly keep an up to date
        count of the origin's total disk usage.  I've introduced the OriginQuotaManager and OriginUsageRecord classes
        to accomplish this.

        Whenever a transaction is known to mutate the size of a database (tracked by the DatabaseAuthorizer), it marks
        that database as unknown in the OriginQuotaManager.  When a transaction later comes along to ask the 
        OriginQuotaManager the usage for that origin, it stat's all of the unknown databases in the origin and returns
        the result.

        Since the OriginQuotaManager is interesting from both the main thread and a DatabaseThread, all accessors it 
        provides require it to be locked first.  ASSERTs help guarantee this is always the case.

        Layout test will involve adding functionality to DRT on multiple platforms and will be coming up shortly

        * WebCore.xcodeproj/project.pbxproj:

        * platform/SecurityOrigin.h: Changed to be ThreadSafeShared instead of RefCounted

        * storage/Database.cpp:
        (WebCore::Database::databaseSize): Return the current filesize of this database on disk
        (WebCore::Database::maximumSize): Added - calculates maximum size of this database based on quota and usage
        * storage/Database.h: Add databaseSize() accessor, and get rid of unused declared methods that *were* going 
          to be the solution for this bug.

        * storage/DatabaseTracker.cpp:
        (WebCore::DatabaseTracker::originQuotaManager): Accessor to the OriginQuotaManager which is lazily created
        (WebCore::DatabaseTracker::canEstablishDatabase): Fetch the usage for this database slightly earlier, which
          will ensure that the OriginQuotaManager is primed to track this origin
        (WebCore::DatabaseTracker::fullPathForDatabase): Ditto
        (WebCore::DatabaseTracker::populateOrigins): Create the OriginQuotaManager here.
        (WebCore::DatabaseTracker::usageForOrigin): Use the OriginQuotaManager instead of looping through each database
          in the origin
        (WebCore::DatabaseTracker::deleteOrigin): Remove this origin from the OriginQuotaManager as it is no longer 
          interesting
        (WebCore::DatabaseTracker::deleteDatabase): Remove this database from the OriginQuotaManager as it is no longer
          interesting
        * storage/DatabaseTracker.h:

        * storage/OriginQuotaManager.cpp: Added.
        (WebCore::OriginQuotaManager::OriginQuotaManager):
        (WebCore::OriginQuotaManager::lock):
        (WebCore::OriginQuotaManager::unlock):
        (WebCore::OriginQuotaManager::trackOrigin): Add an origin to be tracked.  Useful for when the very first database 
          in a new origin is still in the process of being created
        (WebCore::OriginQuotaManager::tracksOrigin):
        (WebCore::OriginQuotaManager::addDatabase):
        (WebCore::OriginQuotaManager::removeDatabase):
        (WebCore::OriginQuotaManager::removeOrigin): Removes all records in a certain origin from being tracked
        (WebCore::OriginQuotaManager::markDatabase): Mark a specific database as having an unknown size - called when the
          DatabaseAuthorizer in a SQLTransaction knows the file size might change.
        (WebCore::OriginQuotaManager::diskUsage): Returns the disk usage for the given origin
        * storage/OriginQuotaManager.h: Added.

        * storage/OriginUsageRecord.cpp: Added.
        (WebCore::OriginUsageRecord::OriginUsageRecord):
        (WebCore::OriginUsageRecord::addDatabase): Adds an entry for the database in this origin's record
        (WebCore::OriginUsageRecord::removeDatabase): Removes that entry
        (WebCore::OriginUsageRecord::markDatabase): Marks the database as of unknown size
        (WebCore::OriginUsageRecord::diskUsage): Returns the cached disk usage value, or recalculates it if any databases
          are marked
        * storage/OriginUsageRecord.h: Added.

        * storage/SQLTransaction.cpp:
        (WebCore::SQLTransaction::openTransactionAndPreflight): Use Database::maximumSize() instead of attributing the
          entire quota to each database.
        (WebCore::SQLTransaction::runStatements): Use Database::maximumSize() instead of attributing the entire quota
          to each database.
        (WebCore::SQLTransaction::runCurrentStatement): Mark this databases's size as unknown in the 
          OriginQuotaManager if this statement will change the size of the database
        * storage/SQLTransaction.h:

2008-02-04   David Harrison  <harrison@apple.com>

        Reviewed by Darin Adler.

        <rdar://problem/5607381> CrashTracer: [REGRESSION] 1748 crashes in Safari at com.apple.WebCore: WebCore::Image::width const + 24

        Use an empty image when the local image file could not be loaded.

        No test case because it would require forcing tiff load failure.
        
        * editing/DeleteButtonController.cpp:
        (WebCore::DeleteButtonController::createDeletionUI):
        Do not present the deletion UI in the (odd) event that the delete button could not be loaded.
        
        * platform/graphics/mac/ImageMac.mm:
        (WebCore::Image::loadPlatformResource):
        Return an empty image instead of 0 if the load fails.

2008-02-04  Darin Adler  <darin@apple.com>

        * dom/Document.cpp:
        (WebCore::Document::completeURL): Fixed misleading comment.

2008-02-04  Jon Honeycutt  <jhoneycutt@apple.com>

        Reviewed by Darin.

        Blacklist Silverlight versions older than min required, not newer. 

        * plugins/win/PluginPackageWin.cpp:
        (WebCore::PluginPackageWin::isPluginBlacklisted):

2008-02-04  David Hyatt  <hyatt@apple.com>

        Fix for bug 16751, misparsing of html*.test in CSS.

        Reviewed by darin

        Added fast/css/simple-selector-chain-parsing.html

        * css/CSSGrammar.y:

2008-02-04  Darin Adler  <darin@apple.com>

        Suggested by Geoff and Maciej.

        * bindings/js/JSCustomSQLTransactionCallback.cpp: Reworded a misleading
        comment to be correct.

2008-02-04  Jon Honeycutt  <jhoneycutt@apple.com>

        Reviewed by Steve, Anders.

        <rdar://problem/5211187> QuickTime and Flash plug-ins draw outside of
        content area when inside an iframe or div with overflow when playing a
        movie and scrolling the iframe/div area

        Clip the update region to the zero rect when scrolling. Don't do this
        for Java, because it results in repaint problems. 

        * plugins/PluginQuirkSet.h: Added the DontClipToZeroRectWhenScrolling
        quirk
        (WebCore::):
        * plugins/win/PluginViewWin.cpp:
        (WebCore::PluginViewWin::updateWindow): Readded the old behavior of
        clipping to the zero rect when updating the window during a scroll.
        Added plug-in quirk to ignore this behavior for Java. Swapped order of
        the SetWindowRgn() and MoveWindow() calls to prevent Java from painting
        outside of its container during a scroll.
        (WebCore::PluginViewWin::determineQuirks): If this is Java, add the
        DontClipToZeroRectWhenScrolling quirk.

2008-02-04  Timothy Hatcher  <timothy@apple.com>

        Reviewed by Mark Rowe.

        <rdar://problem/5722972> Leopard needs to statically link SQLite

        * Configurations/Base.xcconfig: Always have a header search path for WebCoreSQLite3.
        * Configurations/DebugRelease.xcconfig: Ditto.
        * Configurations/WebCore.xcconfig: Always link against WebCoreSQLite3.

2008-02-04  Adam Roben  <aroben@apple.com>

        Windows build fix

        * bindings/scripts/CodeGeneratorCOM.pm: Touched to force a rebuild of
        the COM bindings.

2008-02-04   David Harrison  <harrison@apple.com>

        Reviewed by Tim Hatcher.

        - fix <rdar://problem/5715481> REGRESSION (r26499): JavaScript document.lastModified is not supported

        Re-add attribute inadvertantly lost by r26499.

        Test: fast/js/lastModified.html: Added.

        * dom/Document.idl:
        Add lastModified.

2008-02-04  Darin Adler  <darin@apple.com>

        Reviewed by Geoff.

        - fix <rdar://problem/5713621> Threading issue when destroying database transaction callback

        Do main-thread-only stuff on the main thread.

        Not clear how to make a regression test for this.

        * bindings/js/JSCustomSQLTransactionCallback.cpp:
        (WebCore::JSCustomSQLTransactionCallback::Data::Data): Added.
        (WebCore::JSCustomSQLTransactionCallback::Data::callback): Added.
        (WebCore::JSCustomSQLTransactionCallback::Data::frame): Added.
        (WebCore::JSCustomSQLTransactionCallback::JSCustomSQLTransactionCallback): Put data into a
        separate Data object; we'll destroy it on the main thread.
        (WebCore::JSCustomSQLTransactionCallback::deleteData): Added.
        (WebCore::JSCustomSQLTransactionCallback::~JSCustomSQLTransactionCallback): Call the
        deleteData function on the main thread.
        (WebCore::JSCustomSQLTransactionCallback::handleEvent): Updated to get at fields through the
        m_data object.
        * bindings/js/JSCustomSQLTransactionCallback.h: Declare deleteData, Data, and m_data rather
        than m_callback and m_frame.

2008-02-04  Adam Roben  <aroben@apple.com>

        Fix the search field if the inpsected Document has overridden
        Document.evaluate or Document.querySelectorAll

        Reviewed by Darin.

        * manual-tests/inspector-document-methods-override.html: Added.
        * page/InspectorController.cpp:
        (WebCore::InspectorController::didCommitLoad): Reworded a comment to
        force WebCore.vcproj to build.
        * page/inspector/inspector.js: Call
        Document.prototype.{evaluate,querySelectorAll}.call instead of calling
        the functions directly on the inspected Document. This ensures we are
        calling the version of these functions we intended to.

2008-02-04  Darin Adler  <darin@apple.com>

        Reviewed by Tim Hatcher.

        - possible fix for <rdar://problem/5714030> Crash in Database::deliverAllPendingCallbacks()
          reloading a page quickly

        I don't fully understand the cause of the crash, but I think this might
        be a helpful change.

        * platform/sql/SQLiteTransaction.cpp:
        (WebCore::SQLiteTransaction::commit): If the commit fails, don't leave this
        transaction and database both marked as "still in progress". As far as I can
        tell this does no good, and also seems to do harm.
        (WebCore::SQLiteTransaction::rollback): Ditto.

        * storage/Database.cpp:
        (WebCore::Database::performTransactionStep): Add some assertions to
        detect databases stuck in the "transaction in progress" state.
        * storage/SQLTransaction.cpp:
        (WebCore::SQLTransaction::openTransactionAndPreflight): Ditto.
        (WebCore::SQLTransaction::postflightAndCommit): Ditto.
        (WebCore::SQLTransaction::cleanupAfterTransactionErrorCallback): Ditto.

2008-02-04  Darin Adler  <darin@apple.com>

        Reviewed by Geoff.

        - fix <rdar://problem/5715692> REGRESSION (r28570): JavaScript window.scrollTo()
          calls no longer accept 'undefined' values

        By default, we should accept non-numeric parameters and non-integral numbers for
        parameters that expect integers, without throwing exceptions.

        While creating the test for this, I ran into a couple minor bugs with the
        functions involved, and this patch fixes those too.

        Test: fast/dom/non-numeric-values-numeric-parameters.html

        * bindings/js/JSHTMLOptionsCollectionCustom.cpp:
        (WebCore::JSHTMLOptionsCollection::add): Added. This function has unusual behavior
        when passed non-integral values for its second parameter, so it needs to be written
        by hand. I think that [Custom] is better here than inventing a new keyword.

        * bindings/scripts/CodeGeneratorJS.pm: Changed default for "long" and "unsigned long"
        to ignore errors rather than failing due to type differences. Also changed a couple
        functions to use hashes.

        * css/CSSStyleSheet.h:
        (WebCore::CSSStyleSheet::removeRule): Remove overload of removeRule without a second
        parameters. While we do allow this from JavaScript, it's not a true optional parameter,
        but rather just a case of "you can omit parameters and they are treated as undefined"
        combined with "undefined turns into 0 when passed to a function that takes an integer".
        * css/CSSStyleSheet.idl: Removed [Optional] on the index parameter for removeRule.
        This is not truly an optional parameter.

        * dom/ProgressEvent.cpp:
        (WebCore::ProgressEvent::initProgressEvent): Updated this function to match other
        DOM event init functions -- important to do nothing if this is called on the an
        already-dispatched event and we need to respect the bubble and cancelable arguments.
        Also removed initProgressEventNS. We don't support namespaced events, and if we add
        support, it should be across all event classes, not just ProgressEvent.
        * dom/ProgressEvent.h: Removed initProgressEventNS.
        * dom/ProgressEvent.idl: Ditto.

        * dom/Range.cpp:
        (WebCore::Range::createContextualFragment): Added a check for 0. This can happen
        if the passed-in start container is a node that's not an HTML element and also
        does not have a parent.

        * html/HTMLOptionsCollection.idl: Added the [Custom] attribute to add, since the
        rules for processing its parameters are unusual.

        * page/DOMSelection.cpp: Removed the version of setPosition that has only
        one parameter. The offset is not really optional.
        * page/DOMSelection.h: Ditto.
        * page/DOMSelection.idl: Removed the [Optional] keyword for the second parameter of
        setPosition. It's not a true optional parameter (see discussion of removeRule above).

        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::adjustWindowRect): Simplified logic for constraining the X
        and Y coordinates, in a way that makes them work even when the window coordinates
        are infinite. Also strengthened the assertion.

2008-02-04  Alp Toker  <alp@atoker.com>

        Rubber-stamped by Mark Rowe.

        Remove all trailing whitespace in the GTK+ port and related
        components.

        * GNUmakefile.am:
        * page/gtk/DragControllerGtk.cpp:
        (WebCore::DragController::dragOperation):
        (WebCore::DragController::maxDragImageSize):
        * page/gtk/EventHandlerGtk.cpp:
        (WebCore::EventHandler::passWidgetMouseDownEventToWidget):
        (WebCore::EventHandler::createDraggingClipboard):
        * page/gtk/FrameGtk.cpp:
        (WebCore::Frame::dragImageForSelection):
        * platform/graphics/cairo/AffineTransformCairo.cpp:
        (WebCore::AffineTransform::mapRect):
        (WebCore::AffineTransform::isIdentity):
        (WebCore::AffineTransform::operator== ):
        * platform/graphics/cairo/GraphicsContextCairo.cpp:
        (WebCore::GraphicsContext::drawLine):
        * platform/graphics/cairo/ImageBufferCairo.cpp:
        * platform/graphics/cairo/ImageCairo.cpp:
        * platform/graphics/cairo/ImageSourceCairo.cpp:
        (WebCore::createDecoder):
        * platform/graphics/gtk/FontCacheGtk.cpp:
        * platform/graphics/gtk/FontGtk.cpp:
        * platform/graphics/gtk/FontPlatformData.h:
        * platform/graphics/gtk/FontPlatformDataGtk.cpp:
        * platform/graphics/gtk/GlyphPageTreeNodeGtk.cpp:
        * platform/graphics/gtk/IconGtk.cpp:
        * platform/graphics/gtk/ImageGtk.cpp:
        * platform/graphics/gtk/SimpleFontDataGtk.cpp:
        * platform/gtk/ClipboardGtk.h:
        * platform/gtk/ContextMenuItemGtk.cpp:
        (WebCore::ContextMenuItem::createNativeMenuItem):
        * platform/gtk/CursorGtk.cpp:
        * platform/gtk/DragDataGtk.cpp:
        * platform/gtk/DragImageGtk.cpp:
        (WebCore::createDragImageIconForCachedImage):
        * platform/gtk/FileChooserGtk.cpp:
        (WebCore::stringByAdoptingFileSystemRepresentation):
        * platform/gtk/FileSystemGtk.cpp:
        (WebCore::fileExists):
        (WebCore::deleteFile):
        (WebCore::deleteEmptyDirectory):
        * platform/gtk/KeyEventGtk.cpp:
        * platform/gtk/KeyboardCodes.h:
        * platform/gtk/LocalizedStringsGtk.cpp:
        (WebCore::inputElementAltText):
        (WebCore::resetButtonDefaultLabel):
        (WebCore::fileButtonChooseFileLabel):
        (WebCore::fileButtonNoFileSelectedLabel):
        (WebCore::contextMenuItemTagOpenImageInNewWindow):
        * platform/gtk/MIMETypeRegistryGtk.cpp:
        (WebCore::):
        * platform/gtk/MouseEventGtk.cpp:
        * platform/gtk/PasteboardGtk.cpp:
        (WebCore::PasteboardSelectionData::markup):
        (WebCore::Pasteboard::writeSelection):
        * platform/gtk/PasteboardHelper.h:
        * platform/gtk/PlatformScreenGtk.cpp:
        (WebCore::screenDepth):
        (WebCore::screenIsMonochrome):
        (WebCore::screenRect):
        (WebCore::screenAvailableRect):
        * platform/gtk/PlatformScrollBar.h:
        * platform/gtk/PlatformScrollBarGtk.cpp:
        (PlatformScrollbar::PlatformScrollbar):
        (PlatformScrollbar::updateThumbPosition):
        * platform/gtk/PopupMenuGtk.cpp:
        (WebCore::PopupMenu::updateFromElement):
        * platform/gtk/RenderThemeGtk.h:
        * platform/gtk/ScrollViewGtk.cpp:
        (WebCore::ScrollView::scrollBy):
        (WebCore::ScrollView::addChild):
        (WebCore::ScrollView::updateScrollbars):
        (WebCore::ScrollView::windowToContents):
        (WebCore::ScrollView::contentsToWindow):
        (WebCore::ScrollView::scrollbarUnderMouse):
        * platform/gtk/SearchPopupMenuGtk.cpp:
        * platform/gtk/SharedTimerGtk.cpp:
        * platform/gtk/SystemTimeLinux.cpp:
        (WebCore::currentTime):
        * platform/gtk/TemporaryLinkStubs.cpp:
        (PlugInInfoStore::pluginNameForMIMEType):
        * platform/gtk/ThreadingGtk.cpp:
        (WebCore::establishIdentifierForThread):
        (WebCore::threadForIdentifier):
        (WebCore::clearThreadForIdentifier):
        (WebCore::ThreadCondition::ThreadCondition):
        * platform/gtk/WheelEventGtk.cpp:
        * platform/gtk/WidgetGtk.cpp:
        * platform/network/curl/ResourceHandleCurl.cpp:
        * platform/network/curl/ResourceHandleManager.cpp:
        (WebCore::ResourceHandleManager::setupPOST):
        * platform/network/curl/ResourceHandleManager.h:
        * platform/network/curl/ResourceRequest.h:
        (WebCore::ResourceRequest::ResourceRequest):
        * platform/network/curl/ResourceResponse.h:

2008-02-03  Christian Dywan  <christian@imendio.com>

        Reviewed by Alp Toker.

        http://bugs.webkit.org/show_bug.cgi?id=17046
        [GTK] Context menu fixes and customisation suport

        Provide standard GTK+ context menu items where appropriate.

        Note that this change makes direct use of WebKit from WebCore which is
        against WebKit/GTK+ guidelines. The ContextMenu abstraction should be
        fixed at some point.

        * page/ContextMenuController.cpp:
        (WebCore::ContextMenuController::contextMenuItemSelected):
        * platform/ContextMenu.cpp:
        (WebCore::createAndAppendInputMethodsSubMenu):
        (WebCore::):
        (WebCore::insertControlCharacter):
        (WebCore::createAndAppendUnicodeSubMenu):
        (WebCore::ContextMenu::populate):
        (ContextMenu::checkOrEnableIfNeeded):
        * platform/ContextMenuItem.h:
        (WebCore::):
        * platform/LocalizedStrings.h:
        * platform/gtk/ContextMenuItemGtk.cpp:
        (WebCore::gtkStockIDFromContextMenuAction):
        * platform/gtk/LocalizedStringsGtk.cpp:
        (WebCore::gtkStockLabel):
        (WebCore::contextMenuItemTagCopy):
        (WebCore::contextMenuItemTagDelete):
        (WebCore::contextMenuItemTagSelectAll):
        (WebCore::contextMenuItemTagUnicode):
        (WebCore::contextMenuItemTagInputMethods):
        (WebCore::contextMenuItemTagGoBack):
        (WebCore::contextMenuItemTagGoForward):
        (WebCore::contextMenuItemTagStop):
        (WebCore::contextMenuItemTagCut):
        (WebCore::contextMenuItemTagPaste):
        (WebCore::contextMenuItemTagBold):
        (WebCore::contextMenuItemTagItalic):
        (WebCore::contextMenuItemTagUnderline):

2008-02-03  Oliver Hunt  <oliver@apple.com>

        Reviewed by Maciej.

        Bug 17169: Support transform on Canvas

        Nice and simple patch as the cross-platform code to apply
        a transform was already there.

        Tests: fast/canvas/canvas-transform-identity.html
               fast/canvas/canvas-transform-infinity.html
               fast/canvas/canvas-transform-multiply.html
               fast/canvas/canvas-transform-nan.html
               fast/canvas/canvas-transform-skewed.html

        * html/CanvasRenderingContext2D.cpp:
        (WebCore::CanvasRenderingContext2D::transform):
        * html/CanvasRenderingContext2D.h:
        * html/CanvasRenderingContext2D.idl:

2008-02-03  Nikolas Zimmermann  <zimmermann@kde.org>

        Reviewed by Oliver.

        Fix mistake in SVGImageElement, breaking "Dock" example of carto.net
        It was comparing against the wrong attribute names in svgAttributeChanged().

        Added testcase: svg/custom/js-update-image.svg

        * svg/SVGImageElement.cpp:
        (WebCore::SVGImageElement::svgAttributeChanged):

2008-02-03  Eric Seidel  <eric@webkit.org>

        Reviewed by darin.

        Acid3 expects textNode.localName === null
        http://bugs.webkit.org/show_bug.cgi?id=17060

        Test: fast/dom/Node/initial-values.html

        * dom/Comment.cpp: remove localName implementation
        * dom/Comment.h:
        * dom/Node.cpp: return nullAtom instead of emptyAtom
        * dom/Text.cpp: remove localName implementation
        * dom/Text.h:

2008-02-03  Eric Seidel  <eric@webkit.org>

        Reviewed by darin.

        Make createElementNS and createAttributeNS follow the (vague) DOM Core 2 spec
        by throwing exceptions for more types of invalid qualified names.
        http://bugs.webkit.org/show_bug.cgi?id=16833

        Tests: fast/dom/Document/createAttributeNS-namespace-err.html
               fast/dom/Document/createElementNS-namespace-err.html

        * dom/Document.cpp:
        (WebCore::Document::createElement):
        (WebCore::hasNamespaceError):
        (WebCore::Document::createElementNS):
        (WebCore::Document::createAttributeNS):
        * dom/Document.idl:

2008-02-03  Nikolas Zimmermann  <zimmermann@kde.org>

        Reviewed by Eric.

        Fixes: http://bugs.webkit.org/show_bug.cgi?id=15394

        Dramatically improve dynamic update performance in DOM / SVG DOM.

        The notifyAttributeChange() sledgehammer is gone now. It was implemented on quite a lot of
        SVG*Element classes and blindly reacted on any property change caused by DOM / SVG DOM
        by rebuilding style/renderer etc. without actually checking what changed. SVG used a hack
        for years that attributeChanged() called notifyAttributeChange() - which results in poor
        scripting performance and/or dynamic creation/modification of elements using SVG DOM.

        Properly implement childrenChanged / attributeChanged in SVG with some derivation from the HTML code.
        Our SVG* element classes implement "svgAttributeChanged(const QualifiedName&)" instead of
        "attributeChanged(Attribute*...)" to be able to unify DOM / SVG DOM updates. SVG DOM classes
        are aware of the attribute name they belong to. So when using "rectElement.transform.baseVal.getItem(0).setRotate(45)"
        SVG DOM updates the <rect> element by calling svgAttributeChanged(SVGNames::transformAttr) on the corresponding
        SVGRectElement. So we're now able to handle fast dynamic updates in a unified way - leading to less bugs.

        HTML dynamic updates vs. SVG dynamic updates:

        HTML:
            1) setAttribute("foo", "bar") -> attributeChanged -> parseMappedAttribute -> setChanged/setNeedsLayout
            2) someObject.foo = "bar" -> HTML code maps to setAttribute calls, ends up taking the same route as 1)
            3) someObject.style.foo = "bar" -> setChanged -> recalcStyle (possible relayout)

        SVG:
            1) setAttribute("foo", "bar") -> attributeChanged -> svgAttributeChanged -> parseMappedAttribute -> setChanged/setNeedsLayout
            2) same, currently most functions are not yet converted to this new system! (most noticeable in SVGMarkerElement::setOrientToAngle)    
            3) same
            4) someRectElement.x.baseVal.value = 100 -> svgAttributeChanged -> setChanged/setNeedsLayout (special SVG DOM updating)
        
        The new SVG DOM updating concept 4) uses the same updating logic as 1) and 2), so we're actually modelling the HTML way.
        SVG handles calling setChanged/setNeedsLayout in svgAttributeChanged, unlike HTML which uses parseMappedAttribute for that.

        Only updated all elements necessary to let us pass layout tests w/o regressions. Need to crawl through
        all SVG*Element classes and implement svgAttributeChanged / childrenChanged anywhere needed in a follow-up patch.

        * bindings/js/JSSVGPODTypeWrapper.h:
        (WebCore::JSSVGPODTypeWrapperCreatorReadWrite::commitChange):
        (WebCore::JSSVGPODTypeWrapperCreatorReadOnly::commitChange):
        (WebCore::JSSVGPODTypeWrapperCreatorForList::JSSVGPODTypeWrapperCreatorForList):
        (WebCore::JSSVGPODTypeWrapperCreatorForList::operator PODType):
        (WebCore::JSSVGPODTypeWrapperCreatorForList::commitChange):
        * bindings/js/JSSVGPathSegListCustom.cpp:
        (WebCore::JSSVGPathSegList::clear):
        (WebCore::JSSVGPathSegList::initialize):
        (WebCore::JSSVGPathSegList::insertItemBefore):
        (WebCore::JSSVGPathSegList::replaceItem):
        (WebCore::JSSVGPathSegList::removeItem):
        (WebCore::JSSVGPathSegList::appendItem):
        * bindings/js/JSSVGPointListCustom.cpp:
        (WebCore::JSSVGPointList::clear):
        (WebCore::JSSVGPointList::initialize):
        (WebCore::JSSVGPointList::getItem):
        (WebCore::JSSVGPointList::insertItemBefore):
        (WebCore::JSSVGPointList::replaceItem):
        (WebCore::JSSVGPointList::removeItem):
        (WebCore::JSSVGPointList::appendItem):
        * bindings/js/JSSVGTransformListCustom.cpp:
        (WebCore::JSSVGTransformList::clear):
        (WebCore::JSSVGTransformList::initialize):
        (WebCore::JSSVGTransformList::getItem):
        (WebCore::JSSVGTransformList::insertItemBefore):
        (WebCore::JSSVGTransformList::replaceItem):
        (WebCore::JSSVGTransformList::removeItem):
        (WebCore::JSSVGTransformList::appendItem):
        * bindings/scripts/CodeGeneratorJS.pm:
        * rendering/RenderSVGGradientStop.cpp:
        (WebCore::RenderSVGGradientStop::setStyle):
        * rendering/RenderSVGGradientStop.h:
        * svg/SVGAElement.cpp:
        (WebCore::SVGAElement::defaultEventHandler):
        * svg/SVGAElement.h:
        * svg/SVGAngle.cpp:
        * svg/SVGAngle.h:
        (WebCore::SVGAngle::associatedAttributeName):
        * svg/SVGAnimatedTemplate.h:
        (WebCore::SVGAnimatedTemplate::SVGAnimatedTemplate):
        (WebCore::SVGAnimatedTemplate::wrapperCache):
        (WebCore::SVGAnimatedTemplate::associatedAttributeName):
        (WebCore::lookupOrCreateWrapper):
        * svg/SVGAnimationElement.cpp:
        (WebCore::SVGAnimationElement::parseBeginOrEndValue):
        * svg/SVGAnimationElement.h:
        * svg/SVGCircleElement.cpp:
        (WebCore::SVGCircleElement::svgAttributeChanged):
        * svg/SVGCircleElement.h:
        * svg/SVGClipPathElement.cpp:
        (WebCore::SVGClipPathElement::svgAttributeChanged):
        (WebCore::SVGClipPathElement::childrenChanged):
        (WebCore::SVGClipPathElement::canvasResource):
        * svg/SVGClipPathElement.h:
        (WebCore::SVGClipPathElement::isValid):
        (WebCore::SVGClipPathElement::rendererIsNeeded):
        * svg/SVGComponentTransferFunctionElement.cpp:
        (WebCore::SVGComponentTransferFunctionElement::SVGComponentTransferFunctionElement):
        * svg/SVGComponentTransferFunctionElement.h:
        * svg/SVGCursorElement.cpp:
        * svg/SVGElement.cpp:
        (WebCore::SVGElement::insertedIntoDocument):
        (WebCore::SVGElement::attributeChanged):
        * svg/SVGElement.h:
        (WebCore::SVGElement::svgAttributeChanged):
        * svg/SVGEllipseElement.cpp:
        (WebCore::SVGEllipseElement::svgAttributeChanged):
        * svg/SVGEllipseElement.h:
        * svg/SVGExternalResourcesRequired.cpp:
        (WebCore::SVGExternalResourcesRequired::isKnownAttribute):
        * svg/SVGExternalResourcesRequired.h:
        * svg/SVGFEBlendElement.cpp:
        * svg/SVGFEColorMatrixElement.cpp:
        (WebCore::SVGFEColorMatrixElement::SVGFEColorMatrixElement):
        * svg/SVGFEComponentTransferElement.cpp:
        * svg/SVGFECompositeElement.cpp:
        * svg/SVGFEDiffuseLightingElement.cpp:
        * svg/SVGFEDisplacementMapElement.cpp:
        * svg/SVGFEFloodElement.cpp:
        * svg/SVGFEGaussianBlurElement.cpp:
        * svg/SVGFEImageElement.cpp:
        * svg/SVGFELightElement.cpp:
        * svg/SVGFEMergeNodeElement.cpp:
        * svg/SVGFEOffsetElement.cpp:
        * svg/SVGFESpecularLightingElement.cpp:
        * svg/SVGFETileElement.cpp:
        * svg/SVGFETurbulenceElement.cpp:
        * svg/SVGFilterElement.cpp:
        * svg/SVGFilterPrimitiveStandardAttributes.cpp:
        * svg/SVGFitToViewBox.cpp:
        (WebCore::SVGFitToViewBox::isKnownAttribute):
        * svg/SVGFitToViewBox.h:
        * svg/SVGForeignObjectElement.cpp:
        * svg/SVGGElement.cpp:
        (WebCore::SVGGElement::svgAttributeChanged):
        (WebCore::SVGGElement::childrenChanged):
        * svg/SVGGElement.h:
        * svg/SVGGradientElement.cpp:
        (WebCore::SVGGradientElement::SVGGradientElement):
        (WebCore::SVGGradientElement::svgAttributeChanged):
        (WebCore::SVGGradientElement::childrenChanged):
        (WebCore::SVGGradientElement::buildStops):
        * svg/SVGGradientElement.h:
        * svg/SVGImageElement.cpp:
        (WebCore::SVGImageElement::parseMappedAttribute):
        (WebCore::SVGImageElement::svgAttributeChanged):
        * svg/SVGImageElement.h:
        * svg/SVGLangSpace.cpp:
        (WebCore::SVGLangSpace::isKnownAttribute):
        * svg/SVGLangSpace.h:
        * svg/SVGLengthList.cpp:
        (WebCore::SVGLengthList::SVGLengthList):
        * svg/SVGLengthList.h:
        * svg/SVGLineElement.cpp:
        (WebCore::SVGLineElement::svgAttributeChanged):
        * svg/SVGLineElement.h:
        * svg/SVGLinearGradientElement.cpp:
        (WebCore::SVGLinearGradientElement::svgAttributeChanged):
        * svg/SVGLinearGradientElement.h:
        * svg/SVGList.h:
        (WebCore::SVGList::SVGList):
        (WebCore::SVGList::associatedAttributeName):
        (WebCore::SVGPODList::SVGPODList):
        * svg/SVGMarkerElement.cpp:
        (WebCore::SVGMarkerElement::svgAttributeChanged):
        (WebCore::SVGMarkerElement::childrenChanged):
        * svg/SVGMarkerElement.h:
        * svg/SVGMaskElement.cpp:
        (WebCore::SVGMaskElement::svgAttributeChanged):
        (WebCore::SVGMaskElement::childrenChanged):
        * svg/SVGMaskElement.h:
        * svg/SVGNumberList.cpp:
        (WebCore::SVGNumberList::SVGNumberList):
        * svg/SVGNumberList.h:
        * svg/SVGPathElement.cpp:
        (WebCore::SVGPathElement::svgAttributeChanged):
        (WebCore::SVGPathElement::pathSegList):
        * svg/SVGPathElement.h:
        * svg/SVGPathSeg.h:
        (WebCore::SVGPathSeg::associatedAttributeName):
        * svg/SVGPathSegList.cpp:
        (WebCore::SVGPathSegList::SVGPathSegList):
        * svg/SVGPathSegList.h:
        * svg/SVGPatternElement.cpp:
        (WebCore::SVGPatternElement::SVGPatternElement):
        (WebCore::SVGPatternElement::svgAttributeChanged):
        (WebCore::SVGPatternElement::childrenChanged):
        * svg/SVGPatternElement.h:
        * svg/SVGPointList.cpp:
        (WebCore::SVGPointList::SVGPointList):
        * svg/SVGPointList.h:
        * svg/SVGPolyElement.cpp:
        (WebCore::SVGPolyElement::SVGPolyElement):
        (WebCore::SVGPolyElement::points):
        (WebCore::SVGPolyElement::parseMappedAttribute):
        (WebCore::SVGPolyElement::svgAttributeChanged):
        * svg/SVGPolyElement.h:
        * svg/SVGPolygonElement.cpp:
        * svg/SVGPolygonElement.h:
        * svg/SVGPolylineElement.cpp:
        * svg/SVGPolylineElement.h:
        * svg/SVGPreserveAspectRatio.cpp:
        * svg/SVGPreserveAspectRatio.h:
        (WebCore::SVGPreserveAspectRatio::associatedAttributeName):
        * svg/SVGRadialGradientElement.cpp:
        (WebCore::SVGRadialGradientElement::svgAttributeChanged):
        * svg/SVGRadialGradientElement.h:
        * svg/SVGRectElement.cpp:
        (WebCore::SVGRectElement::svgAttributeChanged):
        * svg/SVGRectElement.h:
        * svg/SVGSVGElement.cpp:
        (WebCore::SVGSVGElement::parseMappedAttribute):
        (WebCore::SVGSVGElement::svgAttributeChanged):
        * svg/SVGSVGElement.h:
        * svg/SVGStopElement.cpp:
        (WebCore::SVGStopElement::parseMappedAttribute):
        (WebCore::SVGStopElement::createRenderer):
        * svg/SVGStopElement.h:
        * svg/SVGStringList.cpp:
        (WebCore::SVGStringList::SVGStringList):
        * svg/SVGStringList.h:
        * svg/SVGStylable.cpp:
        * svg/SVGStylable.h:
        * svg/SVGStyledElement.cpp:
        (WebCore::SVGStyledElement::isKnownAttribute):
        (WebCore::SVGStyledElement::svgAttributeChanged):
        (WebCore::SVGStyledElement::invalidateResourcesInAncestorChain):
        (WebCore::SVGStyledElement::childrenChanged):
        * svg/SVGStyledElement.h:
        * svg/SVGStyledLocatableElement.cpp:
        * svg/SVGStyledLocatableElement.h:
        * svg/SVGStyledTransformableElement.cpp:
        (WebCore::SVGStyledTransformableElement::SVGStyledTransformableElement):
        (WebCore::SVGStyledTransformableElement::parseMappedAttribute):
        (WebCore::SVGStyledTransformableElement::isKnownAttribute):
        * svg/SVGStyledTransformableElement.h:
        * svg/SVGTests.cpp:
        (WebCore::SVGTests::requiredFeatures):
        (WebCore::SVGTests::requiredExtensions):
        (WebCore::SVGTests::systemLanguage):
        (WebCore::SVGTests::isKnownAttribute):
        * svg/SVGTests.h:
        * svg/SVGTextContentElement.cpp:
        * svg/SVGTextElement.cpp:
        (WebCore::SVGTextElement::SVGTextElement):
        * svg/SVGTextElement.h:
        * svg/SVGTextPathElement.cpp:
        * svg/SVGTextPathElement.h:
        * svg/SVGTextPositioningElement.cpp:
        (WebCore::SVGTextPositioningElement::SVGTextPositioningElement):
        * svg/SVGTextPositioningElement.h:
        * svg/SVGTransformList.cpp:
        (SVGTransformList::SVGTransformList):
        * svg/SVGTransformList.h:
        * svg/SVGTransformable.cpp:
        (WebCore::SVGTransformable::isKnownAttribute):
        * svg/SVGTransformable.h:
        * svg/SVGURIReference.cpp:
        (WebCore::SVGURIReference::isKnownAttribute):
        * svg/SVGURIReference.h:
        * svg/SVGUseElement.cpp:
        (WebCore::SVGUseElement::insertedIntoDocument):
        (WebCore::SVGUseElement::svgAttributeChanged):
        (WebCore::SVGUseElement::childrenChanged):
        (WebCore::SVGUseElement::buildPendingResource):
        * svg/SVGUseElement.h:
        * svg/SVGViewElement.cpp:
        (WebCore::SVGViewElement::SVGViewElement):
        (WebCore::SVGViewElement::viewTarget):
        (WebCore::SVGViewElement::parseMappedAttribute):
        * svg/SVGViewElement.h:
        * svg/SVGViewSpec.cpp:
        (WebCore::SVGViewSpec::SVGViewSpec):
        * svg/SVGViewSpec.h:
        * svg/SVGZoomAndPan.cpp:
        (WebCore::SVGZoomAndPan::isKnownAttribute):
        * svg/SVGZoomAndPan.h:
        * svg/graphics/SVGResource.cpp:
        (WebCore::SVGResource::invalidate):
        (WebCore::SVGResource::invalidateClients):
        (WebCore::SVGResource::addClient):
        * svg/graphics/SVGResource.h:
        * svg/graphics/SVGResourceMasker.cpp:
        (WebCore::SVGResourceMasker::invalidate):
        * svg/graphics/cg/SVGPaintServerGradientCg.cpp:
        (WebCore::SVGPaintServerGradient::invalidate):
        * svg/graphics/filters/SVGFEImage.cpp:
        (WebCore::SVGFEImage::imageChanged):

2008-02-03  Kevin Ollivier  <kevino@theolliviers.com>

        Build fix for last wx commit (a couple things were not committed).

        * platform/ScrollView.h:
        * platform/Widget.h:

2008-02-03  Kevin Ollivier  <kevino@theolliviers.com>

        Clean up overlooked coding guideline issues from last commit.

        * platform/wx/ScrollViewWx.cpp:
        (WebCore::ScrollView::ScrollViewPrivate::OnScrollWinEvents):
        (WebCore::ScrollView::update):
        (WebCore::ScrollView::scrollBy):
        (WebCore::ScrollView::resizeContents):
        (WebCore::ScrollView::adjustScrollbars):
        (WebCore::ScrollView::setScrollbarsMode):
        (WebCore::ScrollView::setHScrollbarMode):
        (WebCore::ScrollView::setVScrollbarMode):
        (WebCore::ScrollView::suppressScrollbars):
        * platform/wx/WidgetWx.cpp:
        (WebCore::Widget::setCursor):

2008-02-03  Kevin Watters  <kevinwatters@gmail.com>

        Reviewed by Kevin Ollivier.

        * platform/wx/RenderThemeWx.cpp:
        (WebCore::RenderThemeWx::paintButton):
        * platform/wx/ScrollViewWx.cpp:
        (WebCore::ScrollView::ScrollViewPrivate::ScrollViewPrivate):
        (WebCore::ScrollView::ScrollViewPrivate::bindEvents):
        (WebCore::ScrollView::ScrollViewPrivate::OnMouseWheelEvents):
        (WebCore::ScrollView::ScrollViewPrivate::OnScrollWinEvents):
        (WebCore::ScrollView::ScrollView):
        (WebCore::ScrollView::setNativeWindow):
        (WebCore::ScrollView::updateContents):
        (WebCore::ScrollView::update):
        (WebCore::ScrollView::visibleWidth):
        (WebCore::ScrollView::visibleHeight):
        (WebCore::ScrollView::setContentsPos):
        (WebCore::ScrollView::scrollBy):
        (WebCore::ScrollView::resizeContents):
        (WebCore::ScrollView::contentsX):
        (WebCore::ScrollView::contentsY):
        (WebCore::ScrollView::contentsWidth):
        (WebCore::ScrollView::contentsHeight):
        (WebCore::ScrollView::AdjustScrollbars):
        (WebCore::ScrollView::setScrollbarsMode):
        (WebCore::ScrollView::setHScrollbarMode):
        (WebCore::ScrollView::setVScrollbarMode):
        (WebCore::ScrollView::suppressScrollbars):
        (WebCore::ScrollView::inWindow):
        (WebCore::ScrollView::wheelEvent):
        (WebCore::ScrollView::addChild):
        (WebCore::ScrollView::removeChild):
        (WebCore::ScrollView::children):
        (WebCore::ScrollView::scrollRectIntoViewRecursively):
        (WebCore::ScrollView::scrollbarUnderMouse):
        * platform/wx/WidgetWx.cpp:
        (WebCore::Widget::Widget):
        (WebCore::Widget::~Widget):
        (WebCore::Widget::nativeWindow):
        (WebCore::Widget::setNativeWindow):

2008-02-02  David Hyatt  <hyatt@apple.com>

        Fix for bug 5468, support CSS3 :only-child and :only-of-type selectors.

        Reviewed by olliej

        Added fast/css/only-child-pseudo-class.html, fast/css/only-of-type-pseudo-class.html

        * css/CSSSelector.cpp:
        (WebCore::CSSSelector::extractPseudoType):
        * css/CSSSelector.h:
        (WebCore::CSSSelector::):
        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::checkOneSelector):

2008-02-02  Darin Adler  <darin@apple.com>

        Reviewed by Geoff Garen.

        PLT speedup related to <rdar://problem/5659272> REGRESSION: PLT .4%
        slower due to r28884 (global variable symbol table optimization)

        * history/CachedPage.cpp:
        (WebCore::CachedPage::CachedPage): Removed saveSymbolTable call.
        (WebCore::CachedPage::restore): Removed restoreSymbolTable call.
        (WebCore::CachedPage::clear): Removed clear of m_windowSymbolTable.

        * history/CachedPage.h: Removed m_windowSymbolTable, since save/restoreLocalStorage
        now takes care of the symbol table. Also removed many unnecessary includes.

2008-02-02  Tony Chang  <idealisms@gmail.com>

        Reviewed by eseidel.

        Add an include for for <objidl.h> which isn't included
        by default with WIN32_LEAN_AND_MEAN.
        * platform/graphics/FontCache.h:

2008-02-02  Kevin Watters  <kevin@dotsyntax.com>

        Reviewed by Kevin Ollivier.

        wxFont is reference counted and meant to be used as as a value
        object; when using wxFont*, ref-counting was not happening properly
        and the font object would be destroyed while still in use.

        Also, fix memory leak in wx's FrameData::clear() method.

        * platform/graphics/SimpleFontData.h:
        (WebCore::SimpleFontData::getWxFont):
        * platform/graphics/wx/FontPlatformData.h:
        (WebCore::FontPlatformData::):
        (WebCore::FontPlatformData::FontPlatformData):
        (WebCore::FontPlatformData::font):
        (WebCore::FontPlatformData::hash):
        (WebCore::FontPlatformData::operator==):
        (WebCore::FontPlatformData::computeHash):
        * platform/graphics/wx/FontPlatformDataWx.cpp:
        (WebCore::fontFamilyToWxFontFamily):
        (WebCore::FontPlatformData::FontPlatformData):
        (WebCore::FontPlatformData::~FontPlatformData):
        * platform/graphics/wx/FontWx.cpp:
        (WebCore::Font::drawGlyphs):
        * platform/graphics/wx/SimpleFontDataWx.cpp:
        (WebCore::SimpleFontData::platformInit):
        (WebCore::SimpleFontData::determinePitch):
        (WebCore::SimpleFontData::platformWidthForGlyph):

2008-02-02  Kevin Ollivier  <kevino@theolliviers.com>

        Reviewed by Adam Roben.

        On MSW, the wx port internally uses callbacks for wxTimer, so the
        wx port suffers from the same crash problem that was fixed
        in r28500 for the Windows port. For now, use the SharedTimerWin.cpp
        impl. for wx too on MSW, until a version of wx is released that
        fixes the issue by reworking wxTimer.

        * page/Page.h:
        * platform/win/SharedTimerWin.cpp:
        (WebCore::TimerWindowWndProc):
        * webcore-wx.bkl:

2008-02-02  Mark Rowe  <mrowe@apple.com>

        Qt build fix.

        * platform/qt/ThreadingQt.cpp: Fix typo.

2008-02-02  Kevin Ollivier  <kevino@theolliviers.com>

        Blind build fix for Qt port. Add Threading.h include.

        * platform/qt/ThreadingQt.cpp:

2008-02-02  Kevin Ollivier  <kevino@theolliviers.com>

        wx build fix - add missing include file.

        * platform/wx/ThreadingWx.cpp:

2008-02-02  David Hyatt  <hyatt@apple.com>

        Fix for bug 4812. Support last-child and last-of-type CSS3 selectors.  Brings Acid3 score up to 68/100.

        Reviewed by olliej

        Added fast/css/last-child-pseudo-class.html, fast/css/last-of-type-pseudo-class.html

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

2008-02-01  David Hyatt  <hyatt@apple.com>

        Make :first-child and :first-of-type properly dynamic when the DOM changes.  Brings the Acid3 score up
        to 66/100.

        Reviewed by olliej

        Added fast/css/first-child-pseudo-class.html, fast/css/first-of-type-pseudo-class.html, fast/css/empty-body-test.html

        * css/CSSGrammar.y:
        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::checkOneSelector):
        * dom/Element.cpp:
        (WebCore::Element::recalcStyle):
        (WebCore::Element::childrenChanged):
        * rendering/RenderStyle.cpp:
        (WebCore::RenderStyle::RenderStyle):
        * rendering/RenderStyle.h:
        (WebCore::RenderStyle::childrenAffectedByFirstChildRules):
        (WebCore::RenderStyle::setChildrenAffectedByFirstChildRules):
        (WebCore::RenderStyle::childrenAffectedByLastChildRules):
        (WebCore::RenderStyle::setChildrenAffectedByLastChildRules):
        (WebCore::RenderStyle::childrenAffectedByPositionalRules):
        (WebCore::RenderStyle::setChildrenAffectedByPositionalRules):
        (WebCore::RenderStyle::firstChildState):
        (WebCore::RenderStyle::setFirstChildState):
        (WebCore::RenderStyle::lastChildState):
        (WebCore::RenderStyle::setLastChildState):

2008-02-02  Dan Bernstein  <mitz@apple.com>

        Reviewed by Oliver Hunt.

        - fix <rdar://problem/5720637> Missing characters in right-to-left complex text where different fonts are used in the same run

        * platform/graphics/win/UniscribeController.cpp:
        (WebCore::UniscribeController::advance): Fixed an off-by-1 error in the
        start offset of sub-runs of RTL runs. Changed to update
        m_currentCharacter to the first character of the sub-run before calling
        itemizeShapeAndPlace. In RTL runs, m_currentCharacter decreases as
        sub-runs are processed from left to right.
        (WebCore::UniscribeController::itemizeShapeAndPlace): Removed the
        updating of m_currentCharacter because advance() does it now.

2008-02-01  Brady Eidson  <beidson@apple.com>

        Reviewed by Darin's rubberstamp

        Move the SecurityOriginHash out into a separate header as it will soon be used in different places

        * WebCore.xcodeproj/project.pbxproj:
        * platform/SecurityOriginHash.h: Added.
        (WebCore::SecurityOriginHash::hash):
        (WebCore::SecurityOriginHash::equal):
        (WebCore::SecurityOriginTraits::deletedValue):
        (WebCore::SecurityOriginTraits::emptyValue):
        * storage/DatabaseTracker.cpp:

2008-02-01  Darin Adler  <darin@apple.com>

        Reviewed by Tim.

        - fixed mistake in the JSLock fix that caused an assertion every time

        * bindings/js/JSCustomSQLTransactionCallback.cpp:
        (WebCore::JSCustomSQLTransactionCallback::JSCustomSQLTransactionCallback): Added JSLock.
        (WebCore::unprotectOnMainThread): Ditto.

2008-02-01  Anders Carlsson  <andersca@apple.com>

        Reviewed by Antti and Darin.

        Change Text::createWithLengthLimit to take a UChar pointer instead of a string. This
        lets us avoid making a copy of the buffer in TextDocument.cpp.
        
        * dom/Text.cpp:
        (WebCore::Text::createWithLengthLimit):
        * dom/Text.h:
        * html/HTMLParser.cpp:
        (WebCore::HTMLParser::parseToken):
        * loader/TextDocument.cpp:
        (WebCore::TextTokenizer::write):

2008-02-01  Darin Adler  <darin@apple.com>

        Reviewed by Adam.

        * platform/network/mac/ResourceHandleMac.mm:
        (WebCore::ResourceHandle::loadsBlocked): Fix grammar and word typo.

2008-02-01  Darin Adler  <darin@apple.com>

        Reviewed by Adam.

        - fix <rdar://problem/4527931> showModalDialog calls from onload functions fail (Aspect)

        No automated regression test because showModalDialog doesn't work in DumpRenderTree.

        * platform/network/mac/ResourceHandleMac.mm:
        (WebCore::CallbackGuard::CallbackGuard): Added.
        (WebCore::CallbackGuard::~CallbackGuard): Added.
        (WebCore::ResourceHandle::supportsBufferedData): Simplified to take advantage of how
        static initialization works in C++.
        (WebCore::ResourceHandle::loadsBlocked): Always return false on Leopard. The problem in
        NSURLConnection that created the need to block loads is fixed in Leoaprd. This is the
        bug fix.
        (-[WebCoreResourceHandleAsDelegate connection:willSendRequest:redirectResponse:]):
        Use CallbackGuard instead of directly incrementing the count; allows us to omit the code
        entirely on Leopard.
        (-[WebCoreResourceHandleAsDelegate connection:didReceiveAuthenticationChallenge:]):
        Ditto.
        (-[WebCoreResourceHandleAsDelegate connection:didCancelAuthenticationChallenge:]):
        Ditto.
        (-[WebCoreResourceHandleAsDelegate connection:didReceiveResponse:]):
        Ditto.
        (-[WebCoreResourceHandleAsDelegate connection:didReceiveData:lengthReceived:]):
        Ditto.
        (-[WebCoreResourceHandleAsDelegate connection:willStopBufferingData:]):
        Ditto.
        (-[WebCoreResourceHandleAsDelegate connectionDidFinishLoading:]):
        Ditto.
        (-[WebCoreResourceHandleAsDelegate connection:didFailWithError:]):
        Ditto.
        (-[WebCoreResourceHandleAsDelegate connection:willCacheResponse:]):
        Ditto. Fixes a problem where this could leave inNSURLConnectionCallback set
        permanently in one of the code paths; this would break showModalDialog from that
        point on. This problem doesn't affect Safari.

2008-02-01  Darin Adler  <darin@apple.com>

        * platform/network/mac/ResourceHandleMac.mm:
        (WebCore::ResourceHandle::loadsBlocked): Roll out accidentally checked in file.

2008-02-01  Darin Adler  <darin@apple.com>

        Reviewed by Geoff and Brady.

        - fix <rdar://problem/5680469> Each database worker thread takes a JSLock,
          which slows down all JavaScript execution until the thread terminates

        * bindings/js/JSCustomSQLTransactionCallback.cpp:
        (WebCore::JSCustomSQLTransactionCallback::JSCustomSQLTransactionCallback):
        Explicitly gcProtect, since we aren't using ProtectedPtr any more.
        (WebCore::unprotectOnMainThread): Added.
        (WebCore::JSCustomSQLTransactionCallback::~JSCustomSQLTransactionCallback):
        Use unprotectOnMainThread rather than doing a gcUnprotect here.
        * bindings/js/JSCustomSQLTransactionCallback.h: Changed m_callback from
        a ProtectedPtr to a plain old JSObject*; we gcProtect by hand now.

        * loader/icon/IconDatabase.cpp:
        (WebCore::IconDatabase::notifyPendingLoadDecisionsOnMainThread):
        Renamed. Changed to takea a void* with the icon database pointer.
        (WebCore::IconDatabase::notifyPendingLoadDecisions): Renamed.
        (WebCore::IconDatabase::performURLImport): Updated name, and pass the
        icon database pointer in.
        * loader/icon/IconDatabase.h: Renamed and added void* parameter.

        * platform/Threading.h: Changed callOnMainThread to take a function with a
        single parameter rather than a function with no parameters. Added a typedef.

        * platform/gtk/ThreadingGtk.cpp:
        (WebCore::callFunctionOnMainThread): Changed to use a structure with both
        a function pointer and a context pointer, and delete it after calling.
        (WebCore::callOnMainThread): Changed to create the structure with both
        the function and context pointer.

        * platform/mac/Threading.mm:
        (-[WebCoreFunctionWrapper initWithFunction:context:]): Added context.
        (-[WebCoreFunctionWrapper invoke]): Updated to do both function and context.
        Renamed from _call.
        (WebCore::callOnMainThread): Updated to take both function and context.

        * platform/qt/ThreadingQt.cpp:
        (WebCore::PerformFunctionEvent::PerformFunctionEvent): Added context.
        (WebCore::PerformFunctionEvent::invoke): Added. Calls function with context pointer.
        (WebCore::MainThreadInvoker::event): Changed to call invoke.
        (WebCore::callOnMainThread): Updated to take both function and context.

        * platform/win/ThreadingWin.cpp: Added FunctionWithContext.
        (WebCore::callFunctionsOnMainThread): Changed to pass call function with context.
        (WebCore::callOnMainThread): Updated to queue both function and context.

        * platform/wx/ThreadingWx.cpp:
        (WebCore::callOnMainThread): Updated to take both function and context.

        * storage/Database.cpp:
        (WebCore::Database::scheduleTransactionCallback): Pass 0 for context.
        (WebCore::Database::deliverAllPendingCallbacks): Changed to take ignored context pointer.
        * storage/Database.h: Added void* parameter to deliverAllPendingCallbacks.

        * storage/DatabaseTracker.cpp:
        (WebCore::DatabaseTracker::scheduleForNotification): Pass 0 for context.
        (WebCore::DatabaseTracker::notifyDatabasesChanged): Changed to take ignored context pointer.
        * storage/DatabaseTracker.h: Added void* parameter to notifyDatabasesChanged.

2008-02-01  Jon Honeycutt  <jhoneycutt@apple.com>

        Rubber-stamped by Ollie.

        * plugins/win/PluginPackageWin.cpp:
        (WebCore::PluginPackageWin::load): Fix two function pointers

2008-02-01  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by John Sullivan, Oliver Hunt.

        Fixed <rdar://problem/5688039> REGRESSION (r29428): Weather widget
        fails to load due to reliance on "var location" quirk
        
        Added a Dashboard quirk.

        * bindings/js/kjs_window.cpp:
        (KJS::Window::put): In DB backwards compatibility mode, make assignment
        to window.location in top-level windows shadow the DOM location API
        instead of performing a navigation. This makes a reasonable amount of
        sense, because widgets can't navigate their top-level frames, anyway.

2008-02-01  David Hyatt  <hyatt@apple.com>

        Fix for bug 11387, CSS3 :empty selector is not dynamic.

        Add support for dynamically updating elements whose style is affected by :empty when the child count changes.

        Reviewed by olliej, mitzpettel

        fast/css/empty-pseudo-class.html

        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::locateSharedStyle):
        (WebCore::CSSStyleSelector::checkOneSelector):
        * dom/Element.cpp:
        (WebCore::Element::childrenChanged):
        * dom/Element.h:
        * rendering/RenderStyle.h:
        (WebCore::RenderStyle::affectedByEmpty):
        (WebCore::RenderStyle::emptyState):
        (WebCore::RenderStyle::setEmptyState):

2008-02-01  Dan Bernstein  <mitz@apple.com>

        Reviewed by Darin Adler.

        - switch line breaking from using Carbon Unicode Utilities to using ICU
          on Leopard
          <http://bugs.webkit.org/show_bug.cgi?id=4628>

        fast/text/international/thai-line-breaks.html results do not change.

        * rendering/break_lines.cpp:
        (WebCore::nextBreakablePosition): Changed to use Carbon only on Tiger.

2008-02-01  Rodney Dawes  <dobey@wayofthemonkey.com>

        Reviewed by Darin.

        Update npfunctions.h to export the proper function signatures for UNIX and add
        the appropriate #if around the Windows versions

        * plugins/npfunctions.h:

2008-02-01  Eric Seidel  <eric@webkit.org>

        Reviewed by Oliver.

        Add getSVGDocument to frame and iframe.

        Test: svg/custom/frame-getSVGDocument.html

        * html/HTMLEmbedElement.cpp:
        * html/HTMLEmbedElement.h:
        * html/HTMLFrameElement.idl:
        * html/HTMLFrameOwnerElement.cpp:
        (WebCore::HTMLFrameOwnerElement::getSVGDocument):
        * html/HTMLFrameOwnerElement.h:
        * html/HTMLIFrameElement.idl:
        * html/HTMLObjectElement.cpp:
        * html/HTMLObjectElement.h:

2008-01-30  Eric Seidel  <eric@webkit.org>

        Reviewed by darin.

        Beat CSSParser with the RefPtr stick.  Hopefully squashing any leaks in the process.
        (Deploy RefPtr and PassRefPtr throughout CSSParser)
        http://bugs.webkit.org/show_bug.cgi?id=17108

        No functional changes, thus no tests.

        * css/CSSParser.cpp:
        (WebCore::CSSParser::parseColor):
        (WebCore::CSSParser::parseValue):
        (WebCore::CSSParser::addBackgroundValue):
        (WebCore::CSSParser::parseBackgroundShorthand):
        (WebCore::CSSParser::addTransitionValue):
        (WebCore::CSSParser::parseTransitionShorthand):
        (WebCore::CSSParser::parseBackgroundPosition):
        (WebCore::CSSParser::parseBackgroundProperty):
        (WebCore::CSSParser::parseTransitionProperty):
        (WebCore::CSSParser::parseFontFaceSrc):
        (WebCore::ShadowParseContext::ShadowParseContext):
        (WebCore::CSSParser::parseShadow):
        (WebCore::BorderImageParseContext::BorderImageParseContext):
        (WebCore::BorderImageParseContext::commitBorderImage):
        * css/CSSParser.h:
        * css/SVGCSSParser.cpp:
        (WebCore::CSSParser::parseSVGValue):

2008-01-31  Oliver Hunt  <oliver@apple.com>

        RS=Brady.

        Add platform/Locker.h to vcproj

        * WebCore.vcproj/WebCore.vcproj:

2008-01-31  Brady Eidson  <beidson@apple.com>

        Build fix

        * WebCore.xcodeproj/project.pbxproj: Header -> WebKit

2008-01-31  Brady Eidson  <beidson@apple.com>

        Reviewed by Maciej

        Abstracted the concept of a "Locker" as upcoming work will rely on it.

        * platform/Locker.h: Added.  Template class to "lock()" and "unlock()" some arbitrary object
        (WebCore::Locker::Locker): Lock the object
        (WebCore::Locker::~Locker): Unlock it
        * platform/Threading.h: `class MutexLocker` is now `typedef Locker<Mutex>`
        * WebCore.xcodeproj/project.pbxproj:

2008-01-31  Kevin McCullough  <kmccullough@apple.com>

        <rdar://problem/5716912> REGRESSION (r29816): Can't navigate back to
        Gmail Inbox from Gmail Compose page
        Rolling out the change that caused the regression.

        * WebCore.base.exp:
        * bindings/js/JSHTMLDocumentCustom.cpp:
        (WebCore::JSHTMLDocument::open):
        * dom/DOMImplementation.cpp:
        (WebCore::DOMImplementation::createHTMLDocument):
        * dom/Document.cpp:
        (WebCore::Document::recalcStyle):
        (WebCore::Document::open):
        (WebCore::Document::write):
        (WebCore::Document::clear):
        * dom/Document.h:
        * history/HistoryItem.cpp:
        (WebCore::HistoryItem::HistoryItem):
        * history/HistoryItem.h:
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::didExplicitOpen):
        (WebCore::FrameLoader::load):
        (WebCore::FrameLoader::reloadAllowingStaleData):
        (WebCore::FrameLoader::reload):
        (WebCore::FrameLoader::tokenizerProcessedData):
        (WebCore::FrameLoader::post):
        (WebCore::FrameLoader::continueLoadAfterNewWindowPolicy):
        (WebCore::FrameLoader::shouldTreatURLAsSameAsCurrent):
        (WebCore::FrameLoader::loadItem):
        * loader/FrameLoader.h:
        * platform/text/CharacterNames.h:
        * xml/DOMParser.cpp:
        (WebCore::DOMParser::parseFromString):
        * xml/XMLHttpRequest.cpp:
        (WebCore::XMLHttpRequest::getResponseXML):
        * xml/XSLTProcessor.cpp:
        (WebCore::XSLTProcessor::createDocumentFromSource):

2008-01-31  Matt Lilek  <webkit@mattlilek.com>

        Reviewed by Tim Hatcher.

        Bug 14960: Cannot copy text in Web Inspector Network panel
        http://bugs.webkit.org/show_bug.cgi?id=14960

        * page/inspector/inspector.css:

2008-01-31  Matt Lilek  <webkit@mattlilek.com>

        Reviewed by Adam Roben.

        Bug 14514: Add full URL view on mouseOver in the network page
        http://bugs.webkit.org/show_bug.cgi?id=14514
        <rdar://problem/5712841>

        * page/inspector/inspector.js:

2008-01-31  Alp Toker  <alp@atoker.com>

        Rubber-stamped Adam Roben.

        http://bugs.webkit.org/show_bug.cgi?id=17006
        [GTK] Header path should be webkit/webkit.h

        Move the GTK+ API sources as needed and update the build systems.

        * GNUmakefile.am:
        * WebCore.pro:

2008-01-31  Sam Weinig  <sam@webkit.org>

        Reviewed by Geoff Garen.

        No need to get the prototype just to compare compare property names.

        * bindings/js/JSHistoryCustom.cpp:
        (WebCore::JSHistory::customGetOwnPropertySlot):

2008-01-31  Sam Weinig  <sam@webkit.org>

        Fix non-mac builds.

        * GNUmakefile.am:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCoreSources.bkl:

2008-01-31  David Hyatt  <hyatt@apple.com>

        Fix for bug 17101.

        List items need to ignore the line box shrinking quirk, since IE and Firefox both do.

        Reviewed by Eric

        fast/lists/list-item-line-height.html

        * rendering/InlineFlowBox.h:
        (WebCore::InlineFlowBox::InlineFlowBox):

2008-01-31  Samuel Weinig  <sam@webkit.org>

        Reviewed by Darin Adler.

        Fix for <rdar://problem/5708993> Mutability of the History object

        - Don't allow cross-domain get access to any of the history objects properties
          except the back(), forward() and go() methods.
        - Don't allow cross-domain put access to any of the history objects properties.
        - Don't allow cross-domain enumeration of the History or Location objects.

        Tests: http/tests/security/cross-frame-access-history-get-override.html
               http/tests/security/cross-frame-access-history-get.html
               http/tests/security/cross-frame-access-history-put.html

        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSDOMWindowCustom.cpp: Remove unnessary KJS::'s
        (WebCore::JSDOMWindow::customGetOwnPropertySlot):
        (WebCore::JSDOMWindow::customPut):
        (WebCore::JSDOMWindow::getPropertyNames): Moved implementation from KJS::Window now that the declaration is autogenerated
        using the new CustomGetPropertyNames.
        (WebCore::JSDOMWindow::postMessage):

        * bindings/js/JSHistoryCustom.cpp: Added.
        (WebCore::allowsAccessFromFrame):
        (WebCore::JSHistory::customGetOwnPropertySlot): Only allow getting the declared functions back(), forward() and go() from cross-domain.
        Deny all other gets.
        (WebCore::JSHistory::customPut): Don't allow putting cross-domain.
        (WebCore::JSHistory::getPropertyNames): Don't allow enumeration cross-domain.

        * bindings/js/JSLocation.cpp:
        (WebCore::allowsAccessFromFrame):
        (WebCore::JSLocation::getPropertyNames): Don't allow enumeration cross-domain.
        * bindings/js/JSLocation.h:

        * bindings/js/kjs_window.cpp:
        * bindings/js/kjs_window.h:

        * bindings/scripts/CodeGeneratorJS.pm:
        Add support for new CustomGetPropertNames extended attribute and changed the logic of CustomPutFunction
        to create an overrided put() function even if no read-write properties exist.

        * page/DOMWindow.idl: Added CustomGetPropertNames
        * page/History.idl: Added CustomGetPropertNames

2008-01-30  Justin Garcia  <justin.garcia@apple.com>

        Reviewed by Darin Adler.
        
        <rdar://problem/5708115> REGRESSION: Words selected with a double click and copied won't paste into Mail

        * page/mac/WebCoreFrameBridge.h: Re-exposed smartInsertForString:, it's used by a WebKit method used by Mail.

2008-01-31  Adam Roben  <aroben@apple.com>

        Add line box drawing code to InspectorController::drawNodeHighlight

        This makes drawNodeHighlight a complete replacement for the painting
        code in WebKit/mac/WebNodeHighlightView.mm, and also brings line box
        rects to Windows for the first time.

        Reviewed by Darin.

        * dom/Node.h: Changed isSVGElement to always exist, but to only be
        virtual when ENABLE(SVG) is true. This way you can always call
        node->isSVGElement() without checking ENABLE(SVG).
        * page/InspectorController.cpp:
        (WebCore::InspectorController::drawNodeHighlight): Ported line box
        rect code from the Mac implementation in WebNodeHighlightView.mm.

2008-01-31  Adam Roben  <aroben@apple.com>

        Put more knowledge about the node highlight in WebCore

        InspectorController now calculates the overlay rect and node rect when
        drawing the node highlight instead of having them be passed in.
        InspectorController now holds onto the highlighted node so that it can
        determine these rects.

        Once all platforms are calling down to drawNodeHighlight instead of
        drawing the highlight themselves, we can change
        InspectorClient::highlight(Node*) to something like
        InspectorClient::updateAndShowHighlight().

        This also fixes Bug 14264: Node highlight makes it impossible to
        scroll the page
        <http://bugs.webkit.org/show_bug.cgi?id=14264>
        <rdar://5712788>

        Reviewed by Darin.

        * page/InspectorController.cpp:
        (WebCore::InspectorController::highlight): Store the node for use in
        drawNodeHighlight.
        (WebCore::InspectorController::drawNodeHighlight): Changed to be a
        const instance method. Now calculates the overlay rect and node rect
        instead of having them passed in.
        * page/InspectorController.h:

2008-01-31  Adam Roben  <aroben@apple.com>

        Add node highlight drawing code to InspectorController

        The code came from WebKit/win/WebNodeHighlight.cpp. It's not quite as
        complete as the Mac implementation (in particular, it doesn't handle
        line-box rects), but it's a start.

        Reviewed by Darin.

        * page/InspectorController.cpp:
        (WebCore::InspectorController::drawNodeHighlight): Added.
        * page/InspectorController.h:

2008-01-31  Dan Bernstein  <mitz@apple.com>

        Reviewed by Dave Hyatt.

        - fix http://bugs.webkit.org/show_bug.cgi?id=17107
          <rdar://problem/5716722> REGRESSION (r29834): Article text on redhat.com magazine site appears to be painting twice

        Test: fast/block/float/intruding-painted-twice.html

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::layoutBlock): Pass 'false' for the new
        makeChildPaintOtherFloats parameter to addOverhangingFloats() because at
        this point we are only taking away floats from the child.
        (WebCore::RenderBlock::layoutBlockChildren): Pass 'true' for the new
        makeChildPaintOtherFloats parameter to addOverhangingFloats() iff the
        child was not laid out again. Only in that case, it may have overhanging
        floats that it does not paint because they used to be overhanging from
        the parent, but now they are not.
        (WebCore::RenderBlock::addOverhangingFloats): Refined the conditions for
        making the child paint the float: require that the float be a descendant
        of the child (the other case is when it intrudes into the child from
        another sibling) and that it does not have a layer (in which case it
        paints itself). In addition, do the check only if the caller passed
        'true' for the makeChildPaintOtherFloats parameter.
        * rendering/RenderBlock.h:

2008-01-30  Dan Bernstein  <mitz@apple.com>

        Reviewed by Sam Weinig.

        - change the interpretation of unicode-range values in "from-to" form
          to include the "to" character.

        Test: fast/css/font-face-unicode-range.html

        * css/CSSParser.cpp:
        (WebCore::CSSParser::parseFontFaceUnicodeRange):
        * css/CSSSegmentedFontFace.cpp:
        (WebCore::CSSSegmentedFontFace::overlayRange):
        * platform/graphics/GlyphPageTreeNode.cpp:
        (WebCore::GlyphPageTreeNode::initializePage):
        * platform/graphics/SegmentedFontData.cpp:
        (WebCore::SegmentedFontData::fontDataForCharacter):
        (WebCore::SegmentedFontData::containsCharacters):

2008-01-30  Dan Bernstein  <mitz@apple.com>

        Reviewed by Darin Adler.

        - prune references to custom fonts' SimpleFontData from the glyph page
          tree when they are destroyed

        * css/CSSFontFaceSource.cpp:
        (WebCore::CSSFontFaceSource::pruneTable):

2008-01-30  Darin Adler  <darin@apple.com>

        Reviewed by Tim Hatcher.

        New fix for <rdar://problem/5688428> Reproducible assertion failure
        in SQLTransaction::performNextStep() (16876)

        Fixes a deadlock that was happening for all Database use. All
        storage layout tests pass.

        * storage/Database.cpp:
        (WebCore::CurrentThreadSetter::CurrentThreadSetter): New helper class
        to set the current thread and zero it on destruction.
        (WebCore::CurrentThreadSetter::~CurrentThreadSetter): Set threadIdentifierStorage to 0.
        (WebCore::Database::Database): Set m_transactionStepThread to 0.
        (WebCore::Database::performTransactionStep): Set m_transactionStepThread to currentThread().
        (WebCore::Database::scheduleTransactionCallback): Assert m_transactionStepThread
        is currentThread().
        * storage/Database.h: Add m_transactionStepThread for debug builds
        to track which thread performTransactionStep() was called on. 

2008-01-30  Timothy Hatcher  <timothy@apple.com>

        Reviewed by Darin Adler.

        ASSERTION FAILED: JSLock::lockCount() > 0 when opening the
        Web Inspector on a page with a Database.

        Fix the ASSERT by taking a JSLock before calling toJS().

        * page/InspectorController.cpp:
        (WebCore::InspectorController::addDatabaseScriptResource):

2008-01-30  Beth Dakin  <bdakin@apple.com>

        Reviewed by Darin.

        Fix for <rdar://problem/5598609> CrashTracer: [USER] 626 crashes in 
        Safari at com.apple.WebCore: WebCore::FrameView::needsFullRepaint 
        const + 6

        The real problem here is tracked by rdar://5598072, which is that 
        frames can lose sync between their view and their document when a 
        non-HTML view is loaded (such as bookmarks view or a PDF). That can 
        cause this crash if the layout timer fires before things have fixed 
        themselves. This fix turns an ASSERT in FrameView::layout() into an 
        early return to cause graceful failure until the root of the 
        problem is addressed. 

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

2008-01-30  Justin Garcia  <justin.garcia@apple.com>

        Reviewed by Darin Adler.

        <rdar://problem/5700414> REGRESSION (Adama-ToT): Selecting "Header 1" style in Leopard Server wiki inserts newline

        * editing/FormatBlockCommand.cpp:
        (WebCore::FormatBlockCommand::doApply): If the selected paragraph was empty,
        we may still need to call moveParagrah to remove the line break that holds that
        paragraph open because the new block of the requested type needs to to replace it.

2008-01-30  Timothy Hatcher  <timothy@apple.com>

        Reviewed by Darin Adler.

        <rdar://problem/5688428> Reproducible assertion failure in SQLTransaction::performNextStep() (16876)

        Revised fix to use the globalCallbackMutex() mutex and hold the mutex
        for the entire function scope.

        * storage/Database.cpp:
        (WebCore::Database::performTransactionStep):

2008-01-30  Timothy Hatcher  <timothy@apple.com>

        Reviewed by Adam Roben.

        Make ResourceTreeElement inherit the prototype of TreeElement.

        * page/inspector/Resource.js:

2008-01-30  Sam Weinig  <sam@webkit.org>

        Reviewed by Adam Roben.

        Don't include SecurityOrigin.h in Document.h so that we can avoid massive
        recompilation when changing the SecurityOrigin.

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

2008-01-30  Tim Omernick  <timo@apple.com>

        Reviewed by Tim Hatcher and Brady.

        <rdar://problem/5688428> Reproducible assertion failure in SQLTransaction::performNextStep() (16876)

        * storage/Database.cpp:
        (WebCore::Database::performTransactionStep): Do not perform the next transaction if
        a global callback is already scheduled.

2008-01-30  Jon Honeycutt  <jhoneycutt@apple.com>

        Reviewed by Darin.

        <rdar://problem/5669317> Crash closing pop up window with Real Player
        content

        Some RealPlayer versions hang on unload. To prevent this hang, don't
        unload versions since the last known unloadable version.
        <rdar://problem/5713147> tracks revisiting this when the bug in
        RealPlayer is fixed and we can again unload the plug-in.

        * plugins/win/PluginPackageWin.cpp:
        (WebCore::PluginPackageWin::compareFileVersion): Compare the plug-in's
        file version to the passed file version, returning -1, 0, or 1 if the
        plug-in's version is less than, equal to, or greater than the version
        passed.
        (WebCore::PluginPackageWin::isPluginBlacklisted): Use
        compareFileVersion()
        * plugins/win/PluginPackageWin.h:
        * plugins/win/PluginViewWin.cpp:
        (WebCore::PluginViewWin::determineQuirks): If the plug-in version is
        newer than the last-known unloadable version, add the DontUnloadPlugin
        quirk

2008-01-29  Mark Rowe  <mrowe@apple.com>

        Reviewed by Tim Hatcher.

        Look for headers relative to NEXT_ROOT so that build-root picks up the WebCoreSQLite
        version of sqlite3.h rather than the older system version.

        * Configurations/Base.xcconfig:

2008-01-29  Dan Bernstein  <mitz@apple.com>

        - build fix

        * loader/CachedFont.cpp:
        (WebCore::CachedFont::CachedFont):

2008-01-29  Mark Rowe  <mrowe@apple.com>

        Reviewed by Brady Eidson.

        Add the correct directory to the header search paths in Production builds.

        * Configurations/Base.xcconfig:

2008-01-29  Dan Bernstein  <mitz@apple.com>

        Reviewed by Dave Hyatt.

        - fix http://bugs.webkit.org/show_bug.cgi?id=17085
          <rdar://problem/5714136> REGRESSION (r29839): All remote fonts are treated as SVG fonts

        Test: fast/css/font-face-remote.html

        Added an isSVGFont method to CachedFont and use it to decide how to
        process the font data. Currently whether the data is SVG is determined
        based on the format property in the @font-face rule, but in the future
        the MIME type or other metadata may be used when the format is
        unspecified.

        * css/CSSFontFaceSource.cpp:
        (WebCore::CSSFontFaceSource::getFontData): Changed to parse the data as
        SVG only if the CachedFont is an SVG font.
        * css/CSSFontSelector.cpp:
        (WebCore::CSSFontSelector::addFontFaceRule): Mark the CachedFont as an
        SVG font based on format.
        * loader/CachedFont.cpp:
        (WebCore::CachedFont::CachedFont): Initialize m_isSVGFont to false.
        (WebCore::CachedFont::ensureCustomFontData):
        (WebCore::CachedFont::ensureSVGFontData):
        (WebCore::CachedFont::getSVGFontById):
        * loader/CachedFont.h:
        (WebCore::CachedFont::isSVGFont): Added.
        (WebCore::CachedFont::setSVGFont): Added.

2008-01-29  Antti Koivisto  <antti@apple.com>

        Some comment cleanup.

        * platform/graphics/mac/MediaPlayerPrivateQTKit.mm:
        (WebCore::MediaPlayerPrivate::disableUnsupportedTracks):
        * platform/graphics/win/QTMovieWin.cpp:
        (QTMovieWin::load):
        (QTMovieWin::disableUnsupportedTracks):

2008-01-29  Adele Peterson  <adele@apple.com>

        Reviewed by Antti.

        Fix for <rdar://5683527> media/{audio,video|-controls-rendering.html failing
        
        * rendering/RenderThemeSafari.cpp: (WebCore::RenderThemeSafari::isControlStyled):
        Don't treat all media controls as styled.  This causes builds with an old version of SafariTheme to have different metrics for these controls.

2008-01-29  Dan Bernstein  <mitz@apple.com>

        Reviewed by Dave Hyatt.

        - make Font instances cache their primary font

        * WebCore.base.exp:
        * platform/graphics/Font.cpp:
        (WebCore::Font::Font):
        (WebCore::Font::operator=):
        (WebCore::Font::cachePrimaryFont):
        (WebCore::Font::update):
        * platform/graphics/Font.h:
        (WebCore::Font::primaryFont):

2008-01-29  Dan Bernstein  <mitz@apple.com>

        - Leopard build fix

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

2008-01-29  Mark Rowe  <mrowe@apple.com>

        Reviewed by Tim Hatcher.

        <rdar://problem/5600926> WebCore on Tiger must link to its own copy of SQLite 3.4 or newer (so HTML database behavior will be correct).

        * Configurations/Base.xcconfig: Update the header search path on Tiger.
        * Configurations/DebugRelease.xcconfig: Update the header search path on Tiger.
        * Configurations/WebCore.xcconfig: Link against libWebCoreSQLite3.a when building on Tiger.
        * WebCore.xcodeproj/project.pbxproj: Update the header search path in Production builds on Tiger.

2008-01-29  Dan Bernstein  <mitz@apple.com>

        Reviewed by Adam Roben and Oliver Hunt.

        - fix <rdar://problem/5713131> REGRESSION (r29246): Many SVG font tests are failing

        * platform/graphics/SimpleFontData.cpp:
        (WebCore::SimpleFontData::SimpleFontData): Use double instead of float
        for consistent rounding behavior between Mac OS X and Windows.

2008-01-29  Adam Roben  <aroben@apple.com>

        Fix <rdar://5713302> Web Inspector on Windows is not using the
        localized strings

        Reviewed by Steve.

        * WebCore.vcproj/WebCore.vcproj: Copy InspectorLocalizedStrings.js to
        $WebKitOutputDir.
        * page/InspectorController.cpp: Touch this to force the project to
        build.

2008-01-29  Eric Seidel  <eric@webkit.org>

        Reviewed by Nikolas.

        Acid3 after double-attach
        http://bugs.webkit.org/show_bug.cgi?id=17058
        
        I believe SVGTextPathElement::buildPendingResource() was entirely
        bogus, removing it did not cause any tests to fail.

        Test: svg/custom/textPath-assert.svg

        * svg/SVGTextPathElement.cpp:
        (WebCore::SVGTextPathElement::insertedIntoDocument): remove buildPendingResource()
        * svg/SVGTextPathElement.h:

2008-01-29  Adam Roben  <aroben@apple.com>

        Fix Bug 16234: Inspector should support searching for elements by CSS selectors

        <http://bugs.webkit.org/show_bugs.cgi?id=16234>
        <rdar://5712862>

        Reviewed by Tim.

        * page/inspector/inspector.js: Use Document.querySelectorAll to search
        for elements by CSS selector. Also store a custom property on nodes
        being added to the search results to avoid showing the same node more
        than once.

2008-01-29  Adam Roben  <aroben@apple.com>

        Fix <rdar://5711136> Full-screen Flash on 1up.com is unresponsive

        Reviewed by Anders and Darin.

        No test possible.

        * plugins/win/PluginViewWin.cpp:
        (WebCore::PluginViewWin::wndProc): Set/release capture on mouse
        down/up, like Firefox does.

2008-01-28  Dan Bernstein  <mitz@apple.com>

        Reviewed by Sam Weinig.

        - make isSVGFont non-virtual

        * platform/graphics/FontData.h:
        * platform/graphics/SegmentedFontData.cpp:
        * platform/graphics/SegmentedFontData.h:
        * platform/graphics/SimpleFontData.h:
        (WebCore::SimpleFontData::isSVGFont):

2008-01-28  Dan Bernstein  <mitz@apple.com>

        Reviewed by Adam Roben.

        - fix <rdar://problem/5700824> Chunky scrolling + scrolling artifacts @ netflix.com/Notebook

        * platform/win/ScrollViewWin.cpp:
        (WebCore::ScrollView::ScrollViewPrivate::valueChanged): Send the scroll
        event before updating the window, thus giving event handlers a chance
        to update layout for the new scroll position, eliminating the jitter.

2008-01-28  Adam Roben  <aroben@apple.com>

        Fix <rdar://5555260> Gmail doesn't load when a user stylesheet is specified

        Reviewed by Darin.

        A null value exception was being thrown in Gmail's JS code because a
        call to document.write failed. document.write failed because
        Document::close had not yet been called. Document::close was not
        called because the Document was considered to not be "complete" in
        FrameLoader::checkComplete because the user stylesheet was in the
        process of loading. The user stylesheet was loading because it had
        previously been evicted from the cache and was loading fresh from
        disk. It had been evicted from the cache because the calculation of
        the expiration date was incorrectly casting/overflowing in
        ResourceResponseCFNet.cpp.

        We now calculate the expiration date in a way that does not cause us
        to overflow a time_t, and we correctly clamp the value to the range of
        a time_t. I also made the fix for the last modified date, though that
        was not causing any bug I am aware of.

        In the long-term it seems like whether or not Document::close is
        called should not be dependent upon whether the user stylesheet has
        finished loading or not.

        * platform/network/cf/ResourceResponseCFNet.cpp:
        (WebCore::toTimeT): Added. Converts from CFAbsoluteTime to time_t and
        clamps to the range of time_t.
        (WebCore::ResourceResponse::doUpdateResourceResponse): Call toTimeT.

2008-01-28  Dan Bernstein  <mitz@apple.com>

        Reviewed by Nikolas Zimmermann.

        - fix leaks introduced in r29838

        * svg/SVGFont.cpp:
        (WebCore::floatWidthMissingGlyphCallback):
        (WebCore::drawTextMissingGlyphCallback):

2008-01-28  Nikolas Zimmermann  <zimmermann@kde.org>

        Reviewed by Eric, Dan & Oliver.

        Fixes: http://bugs.webkit.org/show_bug.cgi?id=16980

        Support external SVG Fonts, by reusing the custom font handling logic.
        This enables us - as first engine - to render HTML pages using SVG Fonts.

        Fixes fonts-elem-03-b.svg / fonts-elem-04-b.svg / fonts-elem-07-b.svg
        Add new testcase svg-fonts-in-html.html.

        * css/CSSFontFaceSource.cpp:
        (WebCore::CSSFontFaceSource::getFontData):
        * css/CSSFontFaceSource.h:
        * css/CSSFontFaceSrcValue.cpp:
        (WebCore::CSSFontFaceSrcValue::isSVGFontFaceSrc):
        (WebCore::CSSFontFaceSrcValue::isSupportedFormat):
        * css/CSSFontFaceSrcValue.h:
        * css/CSSFontSelector.cpp:
        (WebCore::CSSFontSelector::addFontFaceRule):
        * loader/CachedFont.cpp:
        (WebCore::CachedFont::~CachedFont):
        (WebCore::CachedFont::ensureSVGFontData):
        (WebCore::CachedFont::extractFontFromSVGData):
        (WebCore::CachedFont::platformDataFromSVGData):
        * loader/CachedFont.h:
        * platform/graphics/Font.cpp:
        (WebCore::Font::offsetForPosition):
        * platform/graphics/Font.h:
        * svg/SVGFont.cpp:
        (WebCore::floatWidthOfSubStringUsingSVGFont):
        (WebCore::Font::drawTextUsingSVGFont):
        (WebCore::Font::offsetForPositionForTextUsingSVGFont):
        * svg/SVGFontFaceElement.cpp:
        (WebCore::SVGFontFaceElement::rebuildFontFace):
        * svg/SVGFontFaceElement.h:
        * svg/SVGFontFaceUriElement.cpp:
        (WebCore::SVGFontFaceUriElement::srcValue):

2008-01-28  Dan Bernstein  <mitz@apple.com>

        Reviewed by Adam Roben.

        - fix svg/W3C-SVG-1.1/fonts-glyph-04-t.svg failure on Windows

        The results differed between Mac OS X and Windows because the code was
        using a 0-size font, which Mac OS X changes to 12pt.

        * svg/SVGFont.cpp:
        (WebCore::floatWidthMissingGlyphCallback): Use the font description of
        the primary font to initialize the fallback font.
        (WebCore::drawTextMissingGlyphCallback): Ditto.

2008-01-28  Eric Seidel  <eric@webkit.org>

        Reviewed by Nikolas Zimmermann.

        Use class instead of struct to appease MSVC.

        * history/HistoryItem.h:
        * loader/FrameLoaderClient.h:
        * page/InspectorController.h:
        * platform/network/ResourceRequestBase.h:
        * platform/network/mac/ResourceRequest.h:

2008-01-28  Dan Bernstein  <mitz@apple.com>

        Reviewed by Darin Adler.

        - fix http://bugs.webkit.org/show_bug.cgi?id=16774
          REGRESSION (r27464-r27504) javascript popup menu does not display 'close' button

        Test: fast/dynamic/float-no-longer-overhanging.html

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::addOverhangingFloats): If a child's float turns
        out not to be overhanging at this time, ensure that the child paints it.

2008-01-28  Oliver Hunt  <oliver@apple.com>

        More wx fixes

        * platform/graphics/wx/AffineTransformWx.cpp:

2008-01-28  Oliver Hunt  <oliver@apple.com>

        And another Wx build fix

        * platform/graphics/wx/AffineTransformWx.cpp:
        (WebCore::AffineTransform::mapRect):

2008-01-28  Oliver Hunt  <oliver@apple.com>

        Yet another Wx build fix

        * platform/graphics/wx/GraphicsContextWx.cpp:

2008-01-28  Oliver Hunt  <oliver@apple.com>

        Wx build fix

        * platform/graphics/wx/GraphicsContextWx.cpp:
        (WebCore::GraphicsContext::getCTM):

2008-01-28  Oliver Hunt  <oliver@apple.com>

        Gtk build fix

        * platform/graphics/cairo/GraphicsContextCairo.cpp:

2008-01-27  Oliver Hunt  <oliver@apple.com>

        Reviewed by Sam Weinig.

        Bug 16629: <canvas> does not support isPointInPath()

        Relatively trivial change to implement pointInPath and add
        it to the bindings.  Most of this patch is the addition of
        GraphicsContext::getCTM() by pulling the various platform
        implementations from CanvasRenderingContext2D::willDraw

        Test: fast/canvas/pointInPath.html

        * html/CanvasRenderingContext2D.cpp:
        (WebCore::CanvasRenderingContext2D::isPointInPath):
        (WebCore::CanvasRenderingContext2D::willDraw):
        * html/CanvasRenderingContext2D.h:
        * html/CanvasRenderingContext2D.idl:
        * platform/graphics/AffineTransform.cpp:
        (WebCore::AffineTransform::mapPoint):
          Support mapping of FloatRects
        * platform/graphics/AffineTransform.h:
        * platform/graphics/GraphicsContext.h:
        * platform/graphics/cairo/GraphicsContextCairo.cpp:
        (WebCore::GraphicsContext::getCTM):
        * platform/graphics/cg/GraphicsContextCG.cpp:
        (WebCore::GraphicsContext::getCTM):
        * platform/graphics/qt/GraphicsContextQt.cpp:
        (WebCore::GraphicsContext::getCTM):

2008-01-27  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Darin.

        http://bugs.webkit.org/show_bug.cgi?id=17014
        REGRESSION: EUC-CN code A3A0 is mapped to U+E5E5 instead of U+3000

        Test: fast/encoding/char-decoding.html

        * platform/text/TextCodecICU.cpp:
        (WebCore::TextCodecICU::decode): Added a workaround that we used to have in Mac code.

        * platform/text/mac/TextCodecMac.cpp:
        (WebCore::TextCodecMac::decode): Corrected a comment.

2008-01-27  Alp Toker  <alp@atoker.com>

        Reviewed by Mark Rowe.

        http://bugs.webkit.org/show_bug.cgi?id=17029
        Use of deprecated class function but declares GTK_DISABLE_DEPRECATED

        Sync gtkdrawing.h (1.51) and gtk2drawing.c (1.71) from Mozilla
        upstream.

        Adapt RenderThemeGtk.cpp to track minor changes.

        * platform/gtk/RenderThemeGtk.cpp:
        (WebCore::gtkTextDirection):
        (WebCore::adjustMozStyle):
        (WebCore::setMozState):
        (WebCore::paintMozWidget):
        * platform/gtk/gtk2drawing.c:
        (setup_widget_prototype):
        (ensure_hpaned_widget):
        (ensure_vpaned_widget):
        (ensure_toggle_button_widget):
        (ensure_combo_box_entry_widget):
        (ensure_dropdown_entry_widget):
        (moz_gtk_get_dropdown_button):
        (ensure_arrow_widget):
        (ensure_toolbar_separator_widget):
        (ensure_statusbar_widget):
        (ensure_frame_widget):
        (ensure_menu_separator_widget):
        (ensure_tree_view_widget):
        (ensure_tree_header_cell_widget):
        (ensure_expander_widget):
        (ConvertGtkState):
        (moz_gtk_button_paint):
        (moz_gtk_widget_get_focus):
        (moz_gtk_splitter_get_metrics):
        (moz_gtk_toggle_paint):
        (moz_gtk_scrollbar_button_paint):
        (moz_gtk_scrollbar_trough_paint):
        (moz_gtk_scrollbar_thumb_paint):
        (moz_gtk_spin_paint):
        (moz_gtk_spin_updown_paint):
        (moz_gtk_scale_paint):
        (moz_gtk_scale_thumb_paint):
        (moz_gtk_gripper_paint):
        (moz_gtk_hpaned_paint):
        (moz_gtk_vpaned_paint):
        (moz_gtk_entry_paint):
        (moz_gtk_treeview_paint):
        (moz_gtk_tree_header_cell_paint):
        (moz_gtk_tree_header_sort_arrow_paint):
        (moz_gtk_treeview_expander_paint):
        (moz_gtk_expander_paint):
        (moz_gtk_option_menu_paint):
        (moz_gtk_downarrow_paint):
        (moz_gtk_dropdown_arrow_paint):
        (moz_gtk_container_paint):
        (moz_gtk_toggle_label_paint):
        (moz_gtk_toolbar_paint):
        (moz_gtk_toolbar_separator_paint):
        (moz_gtk_tooltip_paint):
        (moz_gtk_resizer_paint):
        (moz_gtk_frame_paint):
        (moz_gtk_progressbar_paint):
        (moz_gtk_progress_chunk_paint):
        (moz_gtk_get_tab_thickness):
        (moz_gtk_tab_paint):
        (moz_gtk_tabpanels_paint):
        (moz_gtk_menu_bar_paint):
        (moz_gtk_menu_popup_paint):
        (moz_gtk_menu_separator_paint):
        (moz_gtk_menu_item_paint):
        (moz_gtk_menu_arrow_paint):
        (moz_gtk_check_menu_item_paint):
        (moz_gtk_window_paint):
        (moz_gtk_get_widget_border):
        (moz_gtk_get_dropdown_arrow_size):
        (moz_gtk_get_toolbar_separator_width):
        (moz_gtk_get_expander_size):
        (moz_gtk_get_treeview_expander_size):
        (moz_gtk_get_menu_separator_height):
        (moz_gtk_widget_paint):
        (moz_gtk_shutdown):
        * platform/gtk/gtkdrawing.h:

2008-01-27  Jan Michael Alonzo  <jmalonzo@unpluggable.com>

        Reviewed by Alp Toker.

        http://bugs.webkit.org/show_bug.cgi?id=14811
        [gtk] [request] add a webkit_gtk_page_go_to_history_item function

        Added webkit/gtk webkitwebbackforwardlist and webkitwebhistoryitem

        * WebCore.pro:

2008-01-27  Matt Perry  <mpComplete@gmail.com>

        Reviewed and tweaked quite a bit by Darin.

        Fix for http://bugs.webkit.org/show_bug.cgi?id=14959
        No back forward entry added for pages created in javascript

        A new HistoryItem is created for calls to Document::open. Calls to
        Document::write save the written data to a SharedBuffer that is also
        stored on the HistoryItem. When the user navigates back to a
        HistoryItem that has a valid buffer, that data is used for the page
        content.

        Tests: http/tests/navigation/document-open-adds-history-item.html
               http/tests/navigation/document-open-delayed-adds-history-item.html
               http/tests/navigation/document-open-new-window-adds-history-item.html
               http/tests/navigation/document-open-replace-no-history-item.html

        * bindings/js/JSHTMLDocumentCustom.cpp:
        (WebCore::JSHTMLDocument::open): Pass a MIME type of either "text/html" or
        "text/plain" and a boolean for "replace" in rather than always setting replace
        to true and the MIME type to "text/html".

        * dom/DOMImplementation.cpp:
        (WebCore::DOMImplementation::createHTMLDocument): Pass in MIME type and
        replace boolean explicitly, since we don't want to rely on Document::open()'s
        default.

        * dom/Document.cpp:
        (WebCore::Document::open): Correctly determine the "replace" boolean.
        Pass along the MIME type, replace boolean, and shared buffer to the
        frame loader's didExplicitOpen function.
        (WebCore::Document::write): Pass MIME type and replace boolean explicitly
        to the open function so we don't do treat it as replace if you write without
        an open. Store text written by the script so it can be used later for history.
        (WebCore::Document::clear): Drop the text written byt he script.

        * dom/Document.h: Added MIME type and replace boolean parameters for open.
        Had to keep the old version for the sake of DOM bindings. Added the shared
        buffer used for text written by script.

        * history/HistoryItem.cpp:
        (WebCore::HistoryItem::HistoryItem): Copy m_substituteData.
        (WebCore::HistoryItem::substituteData): Added.
        (WebCore::HistoryItem::setSubstituteData): Added.
        * history/HistoryItem.h: Added m_substituteData, getter, and setter.

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::didExplicitOpen): Added code to create or update the
        history item, including attaching the shared buffer that will contain all
        the data written by script.
        (WebCore::FrameLoader::load): Added a SubstituteData parameter, passed through
        when creating the document loader.
        (WebCore::FrameLoader::reloadAllowingStaleData): Create the document loader
        with the substitute data from the current history item.
        (WebCore::FrameLoader::reload): Ditto.
        (WebCore::FrameLoader::shouldTreatURLAsSameAsCurrent): If the current history
        item has substitute data, then consider the URL from the substitute data
        rather than the one in the history item itself.
        (WebCore::FrameLoader::loadItem): Pass in the history item's substitute data.
        * loader/FrameLoader.h: Added parameters to load and didExplicitOpen.

        * platform/text/CharacterNames.h: Added byteOrderMark, and also added it under
        its other official name, zeroWidthNoBreakSpace.

        * xml/DOMParser.cpp:
        (WebCore::DOMParser::parseFromString): Pass in MIME type and replace boolean
        explicitly, since we don't want to rely on Document::open()'s default.
        * xml/XMLHttpRequest.cpp:
        (WebCore::XMLHttpRequest::getResponseXML): Ditto.
        * xml/XSLTProcessor.cpp:
        (WebCore::XSLTProcessor::createDocumentFromSource): Ditto.

2008-01-25  Eric Seidel  <eric@webkit.org>

        Reviewed by Sam and Darin.

        Fire a warning shot in DeprecatedChar's direction.

        Remove DeprecatedChar::isSpace() usage, in preparation for removing DeprecatedChar
        Remove a needless String -> DeprecatedString -> String conversion for <script> tags

        * css/MediaQueryEvaluator.cpp:
        (WebCore::parseAspectRatio):
        * css/SVGCSSParser.cpp:
        * dom/Position.cpp:
        (WebCore::Position::leadingWhitespacePosition):
        (WebCore::Position::trailingWhitespacePosition):
        * editing/TextIterator.cpp:
        (WebCore::WordAwareIterator::advance):
        * html/HTMLFontElement.cpp:
        (WebCore::parseFontSizeNumber):
        * html/HTMLTokenizer.cpp:
        (WebCore::HTMLTokenizer::scriptHandler):
        (WebCore::HTMLTokenizer::scriptExecution):
        (WebCore::HTMLTokenizer::notifyFinished):
        * html/HTMLTokenizer.h:
        * loader/CachedCSSStyleSheet.cpp:
        * loader/TextResourceDecoder.cpp:
        * platform/graphics/mac/MediaPlayerPrivateQTKit.mm:
        * platform/mac/ClipboardMac.mm:
        (WebCore::ClipboardMac::getData):
        * platform/network/HTTPParsers.cpp:
        (WebCore::extractMIMETypeFromMediaType):
        * platform/text/PlatformString.h:
        * platform/text/StringImpl.cpp:
        (WebCore::parseLength):
        (WebCore::StringImpl::stripWhiteSpace):
        (WebCore::StringImpl::simplifyWhiteSpace):
        (WebCore::StringImpl::toInt):
        (WebCore::StringImpl::toInt64):
        (WebCore::StringImpl::toUInt64):
        * platform/text/StringImpl.h:
        (WebCore::isSpaceOrNewline):
        * rendering/InlineFlowBox.cpp:
        (WebCore::InlineFlowBox::placeBoxesHorizontally):
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::updateFirstLetter):
        * rendering/bidi.cpp:
        (WebCore::RenderBlock::computeHorizontalPositionsForLine):
        * svg/SVGFontFaceElement.cpp:
        (WebCore::mapAttributeToCSSProperty):
        * svg/SVGLength.cpp:
        * svg/SVGStyledElement.cpp:
        (WebCore::mapAttributeToCSSProperty):
        * xml/XPathParser.cpp:

2008-01-25  Stephanie Lewis  <slewis@apple.com>

        Reviewed by Tim.

        expand workaround for <rdar://5695848> to include js files so that the
        web inspector can work

        * platform/network/cf/ResourceResponseCFNet.cpp:
        (WebCore::ResourceResponse::doUpdateResourceResponse):

2008-01-25  Antti Koivisto  <antti@apple.com>

        Reviewed by Adele.
        
        (this is for r29798, my commit failed to include the log)
        
        Windows fix to match r29773
        If the media is playing and the load stalls the playback wont restart by seeking backwards.      

        * platform/graphics/win/MediaPlayerPrivateQuickTimeWin.cpp:
        (WebCore::MediaPlayerPrivate::updateStates):

2008-01-25  Darin Adler  <darin@apple.com>

        Reviewed by Anders.

        - fix <rdar://problem/5691072> ASSERTION FAILED: isPrepared() when executing an empty statement

        For empty statements, SQLite returns 0 for the statement. We have to cope with that.

        Test: storage/empty-statement.html

        * platform/sql/SQLiteStatement.cpp:
        (WebCore::sqlite3_prepare16_v2): Added overload so we don't need an #if inside the prepare
        function.
        (WebCore::SQLiteStatement::SQLiteStatement): Initialize the m_isPrepared boolean. Removed
        the code to add a null character to the end of the string; instead we will use
        charactersWithNullTermination.
        (WebCore::SQLiteStatement::prepare): Set m_isPrepared based on the error value returned.
        Use the error value from sqlite3_prepare16_v2, not from lastError().
        (WebCore::SQLiteStatement::step): Assert that the statement is prepared rather than checking
        it at runtime. However, in the case where this is called with m_statement of 0, return
        success rather than an error. That's needed for empty statements.
        (WebCore::SQLiteStatement::finalize): Use early return idiom for clarity. When there is no
        statement, return SQLITE_OK instead of calling lastError().
        (WebCore::SQLiteStatement::reset): Use early return idiom for clarity. When there is no
        statement, return SQLITE_OK rather than SQLITE_ERROR, but assert the statement is prepared.
        (WebCore::SQLiteStatement::executeCommand): Adjust the code that does a prepare so that it
        will work for empty statements. Do we really need to allow calling this without prepare?
        It would be simpler to just be able to assert that it's prepared.
        (WebCore::SQLiteStatement::returnsAtLeastOneResult): Ditto.
        (WebCore::SQLiteStatement::bindBlob): Added some assertions. Return SQLITE_ERROR if this
        is called with m_statement of 0 (should not be possible without assertions firing first).
        Return the actual error code rather than lastError().
        (WebCore::SQLiteStatement::bindText): Ditto. Also simplified the special case for empty
        strings, since it requires any non-null pointer, not a pointer to a global zero character.
        (WebCore::SQLiteStatement::bindInt64): Ditto.
        (WebCore::SQLiteStatement::bindDouble): Ditto.
        (WebCore::SQLiteStatement::bindNull): Ditto.
        (WebCore::SQLiteStatement::bindValue): Moved default case out of the switch to take
        advantage of the gcc compiler warning for unhandled enum values in a switch.
        (WebCore::SQLiteStatement::bindParameterCount): Added assertion and code to handle the
        empty statement case.
        (WebCore::SQLiteStatement::columnCount): Added assertion and changed the code to use
        the early-return idiom.
        (WebCore::SQLiteStatement::getColumnName): Removed getColumnName16 -- we always use 16-bit
        characters and have no reason to ever use the 8-bit function. Added assertions about the
        passed-in column number. It's a little strange that this function checks the column number
        for too-large column numbers, but not for negative ones. I didn't change that for now.
        (WebCore::SQLiteStatement::getColumnText): Ditto.
        (WebCore::SQLiteStatement::getColumnDouble): Ditto.
        (WebCore::SQLiteStatement::getColumnInt): Ditto.
        (WebCore::SQLiteStatement::getColumnInt64): Ditto.
        (WebCore::SQLiteStatement::getColumnBlobAsVector): Ditto.
        (WebCore::SQLiteStatement::getColumnBlob): Tightened up function a bit, including use of
        the early-return idiom and replacing the multiple "size = 0" with a single one at the
        start of the function.
        (WebCore::SQLiteStatement::returnTextResults): Added a failure case when the prepare
        call doesn't work. Cleared the vector earlier to make the failure code simpler. Moved
        the declaration of the result boolean down lower to make it clearer what it's for.
        Changed use of lastError() to call on the database, to make it clearer that there's
        no per-statement last error kept around. It'd be even better to not use lastError() here.
        (WebCore::SQLiteStatement::returnIntResults): Ditto.
        (WebCore::SQLiteStatement::returnInt64Results): Ditto.
        (WebCore::SQLiteStatement::returnDoubleResults): Ditto.
        (WebCore::SQLiteStatement::isExpired): Changed to use || rather than ?: because I think
        it's slightly easier to read that way.

        * platform/sql/SQLiteStatement.h: Removed unneeded includes and forward declarations.
        Also removed unnneeded functions isPrepared, getColumnName16, getColumnText16,
        returnTextResults16, lastError, and lastErrorMsg. Changed prepareAndStep so that it
        checks the result of prepare before callling step. Added a debug-only m_isPrepared boolean.

        * loader/icon/IconDatabase.cpp:
        (WebCore::IconDatabase::checkIntegrity): Remove 16 suffix from text-related function names.
        (WebCore::IconDatabase::performURLImport): Ditto.
        (WebCore::IconDatabase::pruneUnretainedIcons): Ditto.
        * platform/sql/SQLiteDatabase.cpp:
        (WebCore::SQLiteDatabase::clearAllTables): Ditto.
        * storage/Database.cpp:
        (WebCore::retrieveTextResultFromDatabase): Ditto.
        (WebCore::Database::performGetTableNames): Ditto.
        * storage/DatabaseTracker.cpp:
        (WebCore::DatabaseTracker::fullPathForDatabase): Ditto.
        (WebCore::DatabaseTracker::populateOrigins): Ditto.
        (WebCore::DatabaseTracker::databaseNamesForOrigin): Ditto.
        (WebCore::DatabaseTracker::addDatabase): Ditto.
        * storage/SQLStatement.cpp:
        (WebCore::SQLStatement::execute): Ditto.

        * platform/sql/SQLiteDatabase.h: Removed unneeded includes.
        * storage/SQLResultSet.h: Ditto.
        * storage/SQLResultSetRowList.h: Ditto.

2008-01-25  Adele Peterson  <adele@apple.com>

        Reviewed by Sam.

        Fix for <rdar://problem/5679452> Finish tweaking layout/alignment of media controls slider to match QuickTime plug-in

        * css/html4.css: Add horizontal padding to the media slider.
        * rendering/RenderSlider.cpp:
        (WebCore::HTMLSliderThumbElement::defaultEventHandler): Replace use of absoluteBoundingBox() with width() and height()
        (WebCore::RenderSlider::positionForOffset): ditto. Also, use the trackSize() for the maximum offset.
        (WebCore::RenderSlider::layout):  Use contentWidth() and contentHeight() to take padding into account.
        (WebCore::RenderSlider::trackSize): ditto.

2008-01-24  Adam Roben  <aroben@apple.com>

        Better fix for Bug 16996

        Rubberstamped by Mitz.

        * loader/CachedFont.cpp:
        (WebCore::CachedFont::ensureCustomFontData): Don't call
        createFontCustomPlatformData if m_data is null.
        * platform/graphics/gtk/FontCustomPlatformData.cpp:
        (WebCore::createFontCustomPlatformData): Added an assertion.
        * platform/graphics/mac/FontCustomPlatformData.cpp:
        (WebCore::createFontCustomPlatformData): Ditto.
        * platform/graphics/qt/FontCustomPlatformData.cpp:
        (WebCore::createFontCustomPlatformData): Ditto.
        * platform/graphics/win/FontCustomPlatformData.cpp:
        (WebCore::createFontCustomPlatformData): Ditto.

2008-01-24  Adam Roben  <aroben@apple.com>

        Fix Bug 16996: Crash in createFontCustomPlatformData when loading
        0-byte font via @font-face

        <http://bugs.webkit.org/show_bug.cgi?id=16996>

        Reviewed by Hyatt.

        Test: fast/loader/font-face-empty.html

        * platform/graphics/win/FontCustomPlatformData.cpp:
        (WebCore::createFontCustomPlatformData): Null-check the buffer
        parameter.

2008-01-24  Jon Honeycutt  <jhoneycutt@apple.com>

        Reviewed by Anders.

        <rdar://problem/5588807> Crash in Flash when destroying plug-in (found
        using yahoo beta mail)

        Flash can dereference NULL in the call to NPP_URLNotify if a request
        made with NPN_PostURLNotify fails before NPP_NewStream is called.

        Work around this by creating a quirk, PluginQuirkFlashURLNotifyBug, and
        checking for this quirk before calling NPP_URLNotify for any request
        made with NPN_PostURLNotify. If the quirk is present, call NPP_NewStream
        and NPP_DestroyStream before calling NPP_URLNotify.

        * WebCore.vcproj/WebCore.vcproj:
        * plugins/PluginQuirkSet.h: Added. Moved quirks out of PluginViewWin so
        PluginViewWin and PluginStream could share it. Created a class,
        PluginQuirkSet, to store plug-in quirks
        (WebCore::):
        (WebCore::PluginQuirkSet::PluginQuirkSet):
        (WebCore::PluginQuirkSet::add):
        (WebCore::PluginQuirkSet::contains):
        * plugins/PluginStream.cpp:
        (WebCore::PluginStream::PluginStream): Copy the PluginQuirkSet for this
        plug-in
        (WebCore::PluginStream::destroyStream): Check for the FlashURLNotifyBug
        quirk
        * plugins/PluginStream.h:
        * plugins/win/PluginViewWin.cpp:
        (WebCore::PluginViewWin::performRequest): Pass the quirks when creating
        the PluginStream
        (WebCore::PluginViewWin::didReceiveResponse): Same
        (WebCore::PluginViewWin::wndProc): Use add / contains instead of
        bit ops
        (WebCore::PluginViewWin::userAgent): Same
        (WebCore::PluginViewWin::invalidateRect): Same
        (WebCore::PluginViewWin::~PluginViewWin): Same
        (WebCore::PluginViewWin::determineQuirks): Same
        (WebCore::PluginViewWin::setParameters): Same
        (WebCore::PluginViewWin::PluginViewWin): Same
        (WebCore::PluginViewWin::init): Same
        (WebCore::PluginViewWin::setCallingPlugin): Same
        * plugins/win/PluginViewWin.h:

2008-01-24  David Hyatt  <hyatt@apple.com>

        http://bugs.webkit.org/show_bug.cgi?id=16982

        Make sure to make <head> the current block if it is created before a <body> already exists.

        Reviewed by Dan

        * html/HTMLParser.cpp:
        (WebCore::HTMLParser::createHead):

2008-01-24  Alexey Proskuryakov  <ap@webkit.org>

        http://bugs.webkit.org/show_bug.cgi?id=16993
        <rdar://problem/5704331> REGRESSION: Loading page leads to many unexpected redirections

        Rolled out r29590, which was not a correct fix for <rdar://problem/5692566>.

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

2008-01-24  Antti Koivisto  <antti@apple.com>

        Reviewed by Adam.
        
        If the media is playing and the load stalls the playback wont restart by seeking backwards.
        
        We should be in CAN_PLAY state if the current time is less than the maximum loaded time. Rate 
        tricks were for streaming case and are not necessary now since that is now disabled.
        
        Windows patch coming separately.

        Test: http/tests/media/video-play-stall-seek.html

        * platform/graphics/mac/MediaPlayerPrivateQTKit.mm:
        (WebCore::MediaPlayerPrivate::updateStates):

2008-01-24  Antti Koivisto  <antti@apple.com>

        Reviewed by Adam.

        Fix <rdar://problem/5684815>
        After navigating back to the page that contains a <audio> that has been muted, the audio is still heard
        
        - get rid of the separate muted state in MediaPlayer, maintain the state in the cross platform code only
        - remove volumeChanged() callbacks from HTMLMediaElement and OS X MediaPlayer, they were not used for anything
        - rename updateMediaPlayer -> updatePlayState which tells more about what it actually does

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::load):
        (WebCore::HTMLMediaElement::setReadyState):
        (WebCore::HTMLMediaElement::play):
        (WebCore::HTMLMediaElement::pause):
        (WebCore::HTMLMediaElement::setVolume):
        (WebCore::HTMLMediaElement::setMuted):
        (WebCore::HTMLMediaElement::checkIfSeekNeeded):
        (WebCore::HTMLMediaElement::mediaPlayerTimeChanged):
        (WebCore::HTMLMediaElement::updateVolume):
        (WebCore::HTMLMediaElement::updatePlayState):
        (WebCore::HTMLMediaElement::setPausedInternal):
        * html/HTMLMediaElement.h:
        * platform/graphics/MediaPlayer.cpp:
        (WebCore::MediaPlayer::MediaPlayer):
        * platform/graphics/MediaPlayer.h:
        * platform/graphics/mac/MediaPlayerPrivateQTKit.h:
        * platform/graphics/mac/MediaPlayerPrivateQTKit.mm:
        (WebCore::MediaPlayerPrivate::createQTMovie):
        * platform/graphics/win/MediaPlayerPrivateQuickTimeWin.h:
        * platform/graphics/win/QTMovieWin.cpp:
        * platform/graphics/win/QTMovieWin.h:

2008-01-24  Holger Hans Peter Freyther  <holger.freyther@trolltech.com>

        Reviewed by Simon.

        * Fix "QObject::startTimer: QTimer can only be used with threads started with QThread"
        * The JSC GCController gets automatically destructed on application exit, it will stop
        its timer and we try to schedule the next timer. Now the GCController can get destructed
        after our QApplication is gone. This will trigger the above warning, we can avoid this
        by checking if our qApp is still around.

        * platform/qt/SharedTimerQt.cpp:
        (WebCore::setSharedTimerFireTime):

2008-01-24  Morten Johan Sørvig  <msorvig@trolltech.com>

        Reviewed by Simon.

        Qt/Mac: Make sure the scrollbars does not overlap the grow box.

        When showing only one scrollbar we need to move it so it doesn't overlap the
        grow box. This is similar to the code in QAbstractScrollArea.


        * platform/qt/ScrollViewQt.cpp:
        (WebCore::ScrollView::updateScrollbars):

2008-01-15  Michael Goddard  <michael.goddard@trolltech.com>

        Reviewed by Darin.

        While parsing -webkit-border-image, store
        the border widths as naked pointers rather
        than as OwnPtrs, since they point to the
        middle of an array.

        Test: fast/css/border-image-crash.html

        * css/CSSParser.cpp:

2008-01-24  Holger Hans Peter Freyther  <holger.freyther@trolltech.com>

        Reviewed by Simon.

        * Attempt to fix showing of popup again after a popup has been shown but
        the user did not select any item (e.g. clicked outside of the popup)
        * Keep track of the popup status using the virtuals showPopup and hidePopup
        and do not go into recursion when hiding a popup.

        * platform/qt/QWebPopup.cpp:
        (WebCore::QWebPopup::showPopup):
        (WebCore::QWebPopup::hidePopup):
        * platform/qt/QWebPopup.h:

2008-01-24  Holger Hans Peter Freyther  <holger.freyther@trolltech.com>

        Reviewed by Simon.

        * Assert the presence of the PopupMenuClient

        * platform/qt/QWebPopup.cpp:
        (WebCore::QWebPopup::QWebPopup):
        (WebCore::QWebPopup::hideEvent):
        (WebCore::QWebPopup::activeChanged):

2008-01-23  David Kilzer  <ddkilzer@apple.com>

        <rdar://problem/5702947> WebCore: CGContextDrawPDFDocument will be deprecated

        Reviewed by Darin.

        No test cases added since there is no change in behavior.

        * platform/graphics/cg/PDFDocumentImage.cpp:
        (WebCore::PDFDocumentImage::draw): Replace CGContextDrawPDFDocument() with
        calls to CG methods that perform the equivalent work.

2008-01-23  Antti Koivisto  <antti@apple.com>

        Reviewed by Hyatt, Adele.

        Timers for media controls keep running when the page is in the page cache.
        
        Stop timers in RenderMedia and get rid of the controls tree when the page goes to the cache. 

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::HTMLMediaElement):
        (WebCore::HTMLMediaElement::willSaveToCache):
        (WebCore::HTMLMediaElement::didRestoreFromCache):
        * html/HTMLMediaElement.h:
        (WebCore::HTMLMediaElement::inPageCache):
        * rendering/RenderMedia.cpp:
        (WebCore::RenderMedia::updateControls):

2008-01-23  Antti Koivisto  <antti@apple.com>

        Reviewed by Adam.

        Video that had already played to the end would start playing (from beginning) on back/forward navigation.
        
        Use setPausedInternal() instead of pause(). This avoid generating pause/play events and matches specification text.

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::willSaveToCache):

2008-01-23  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Darin.

        <rdar://problem/4200075> Missing support for accented chars in mailto forms

        With some combinations of form parameters, this was resulting in regressed behavior.

        Tests: fast/forms/mailto/get-non-ascii-text-plain-latin-1.html
               fast/forms/mailto/post-text-plain-with-accept-charset.html
               fast/forms/mailto/post-text-plain.html

        * html/HTMLFormElement.cpp:
        (WebCore::HTMLFormElement::formData): Ignore accept-charset for mailto forms, which are always
        encoded as UTF-8.
        (WebCore::HTMLFormElement::isMailtoForm): Added.
        (WebCore::HTMLFormElement::dataEncoding): Added (factored out from formData).
        (WebCore::HTMLFormElement::submit): When round-tripping in text/plain case, use utf-8 encoding.
        * html/HTMLFormElement.h: Added a isMailtoForm() function. It may be a bit unfortunate that
        its result is calculated repeatedly, but this doesn't seem to be anywhere near hot code.

2008-01-22  Justin Garcia  <justin.garcia@apple.com>

        Reviewed by Alice Liu.

        <rdar://problem/5658727> Undo/redo for pasted or typed text in yahoo mail becomes disabled after one round of being selected

        * rendering/RenderTextControl.cpp:
        (WebCore::RenderTextControl::updateFromElement): If value == text() and
        m_innerText is empty, then value and text() are "". In that case both DOM 
        mutations are no-ops and there is no reason to clear the Undo stack.

2008-01-23  Steve Falkenburg  <sfalken@apple.com>

        <rdar://problem/5698732> Copyright strings should include 2008

        Reviewed by Sam.

        * WebCore.vcproj/QTMovieWin.rc:

2008-01-23  Steve Falkenburg  <sfalken@apple.com>

        <rdar://problem/5699509> Allow file upload dialog to be localized.

        Reviewed by Darin.

        * platform/LocalizedStrings.h:
        * platform/win/FileChooserWin.cpp:
        (WebCore::FileChooser::openFileChooser):

2008-01-23  Adam Roben  <aroben@apple.com>

        Fix behavior of type-to-select in <select> menus

        In r27825 we started posting both a WM_KEYDOWN and WM_CHAR message
        whenever a key was pressed in the dropdown menu. However, since posted
        messages go through TranslateMessage, the WM_KEYDOWN was generating
        another WM_CHAR message, so two WM_CHAR messages in a row would reach
        the WebView. This caused the searching to happen twice for each key,
        so typing "dog" would search for "ddoogg".

        Reviewed by Darin.

        * platform/win/PopupMenuWin.cpp:
        (WebCore::PopupWndProc): Repost the WM_KEYDOWN message to the WebView.
        This is will generate a WM_CHAR message which will trigger the
        type-to-select behavior. This is very similar to our behavior prior to
        r27825, except that we're now calling PostMessage instead of
        SendMessage.

2008-01-23  Alp Toker  <alp@atoker.com>

        Rubber-stamped by Mark Rowe.

        Remove whitespace after -I in automake include lists.

        * GNUmakefile.am:

2008-01-23  Holger Hans Peter Freyther  <holger.freyther@trolltech.com>

        * Rubber stamped by Simon

        * Load images incrementally. This will show warnings on the console
        and we want to fix them for Qt4.4. If that happens we have to remove
        the comment from the enum inside the ImageDecoderQt.cpp

        * platform/graphics/qt/ImageDecoderQt.cpp:
        (WebCore::ImageDecoderQt::setData):

2008-01-23  Lars Knoll  <lars@trolltech.com>

        Reviewed by Holger Freyther <holger.freyther@trolltech.com>.

        Fix rendering of the Scrollbar as well as mouse handling for some styles.

        The QStyle expects that that painter is set up to clip to the scrollbar bounds
        and some of the styles seem to paint somewhat outside of these bounds. Clipping to
        the scrollbar bounds before drawing removes some artifacts.

        Also set m_opt.rect.topLeft to (0/0) in the mouse handlers. Fixes some issues with
        the oxygen style.


        * platform/qt/PlatformScrollBarQt.cpp:
        (WebCore::PlatformScrollbar::paint):
        (WebCore::PlatformScrollbar::handleMouseMoveEvent):
        (WebCore::PlatformScrollbar::handleMousePressEvent):

2008-01-23  Michael Brasser  <michael.brasser@trolltech.com>

        Reviewed by Simon.

        Rendering fixes for Qtopia.

        Make the focus ring work with line breaks (until we have QPainterPath::simplify) and
        call QStyle with better arguments when painting themed elements.

        * platform/graphics/qt/GraphicsContextQt.cpp:
        (WebCore::GraphicsContext::drawFocusRing):
        * platform/qt/RenderThemeQt.cpp:
        (WebCore::RenderThemeQt::paintButton):
        (WebCore::RenderThemeQt::applyTheme):

2008-01-23  Holger Hans Peter Freyther  <holger.freyther@trolltech.com>

        Reviewed by Simon.

        * FormData::flatten does not include to be uploaded files. Create our own QIODevice
        for the QNetworkAccessManager and feed the complete content of the FormData* to
        the (HTTP) backend.
        * Try to optimize the ::readData implementation to fill the buffer as best as possible

        * platform/network/qt/QNetworkReplyHandler.cpp:
        (WebCore::FormDataIODevice::FormDataIODevice):
        (WebCore::FormDataIODevice::~FormDataIODevice):
        (WebCore::FormDataIODevice::moveToNextElement):
        (WebCore::FormDataIODevice::readData):
        (WebCore::FormDataIODevice::writeData):
        (WebCore::FormDataIODevice::setParent):
        (WebCore::FormDataIODevice::isSequential):
        (WebCore::FormDataIODevice::slotFinished):
        (WebCore::QNetworkReplyHandler::start):
        * platform/network/qt/QNetworkReplyHandler.h:

2008-01-23  Holger Hans Peter Freyther  <holger.freyther@trolltech.com>

        Reviewed by Simon.

        * Coding-Style fixes

        * platform/network/qt/QNetworkReplyHandler.cpp:
        (WebCore::QNetworkReplyHandler::QNetworkReplyHandler):

2008-01-23  Michael Brasser  <michael.brasser@trolltech.com>

        Reviewed by Simon.

        use PopupClient's font for popup menu. Otherwise, in Qtopia, the popup's font is much bigger (QApplication::font()?) and the text doesn't fit.

        * platform/qt/QWebPopup.cpp:
        (WebCore::QWebPopup::QWebPopup):

2008-01-23  Simon Hausmann  <hausmann@webkit.org>

        Reviewed by Lars.

        Implemented FrameLoaderClient::startDownload() and FrameLoaderClient::download().
        
        Added two signals to QWebPage to handle downloading of links and handling of
        unsupported content.
        

        * platform/network/qt/QNetworkReplyHandler.cpp:
        (WebCore::QNetworkReplyHandler::release):
        * platform/network/qt/QNetworkReplyHandler.h:

2008-01-22  Dan Bernstein  <mitz@apple.com>

        Reviewed by Adele Peterson.

        - fix http://bugs.webkit.org/show_bug.cgi?id=16905
          <rdar://problem/5692407> REGRESSION (3.0.4-TOT): "menu" pseudocolor is badly chosen

        The regression test for this is fast/css/css2-system-color.html which
        is currently disabled.

        * rendering/RenderThemeMac.mm:
        (WebCore::menuBackgroundColor): Added. Uses HIThemeDrawMenuBackground
        to draw the menu item background into a bitmap graphics context and
        returns the color of the pixel at (0, 0).
        (WebCore::RenderThemeMac::systemColor): Changed to call
        menuBackgroundColor for the CSS2 menu color.

2008-01-22  Darin Adler  <darin@apple.com>

        Reviewed by Oliver Hunt.

        - turn full repainting back on for <canvas> until we get incremental
          repaint working properly

        Ollie and I came up with a plan for testing this, but for now we should
        just fall back on the "repaint everything" behavior we have always had.

        * html/HTMLCanvasElement.cpp:
        (WebCore::HTMLCanvasElement::willDraw): Just call repaint.

2008-01-22  Alp Toker  <alp@atoker.com>

        GTK+/qmake build fix.

        * WebCore.pro:

2008-01-22  Adam Roben  <aroben@apple.com>

        Add HTMLFrameOwnerElement::scrollingMode

        This new virtual method is overridden by HTMLFrameElementBase to
        provide the scrolling mode set on the frame or iframe element. Object
        elements always have scrolling=auto, so there's no need to override
        this method for HTMLPlugInElement.

        Reviewed by Hyatt.

        * html/HTMLFrameElementBase.h: Declare scrollingMode as virtual.
        * html/HTMLFrameOwnerElement.h:
        (WebCore::HTMLFrameOwnerElement::scrollingMode): Added.

2008-01-22  David Hyatt  <hyatt@apple.com>

        Fix for <rdar://problem/5698481> REGRESSION: Web Inspector source view gutter double divider and no padding

        Now that cellpadding cascades properly on <td>s, we need to make the view source padding rules in the user
        agent sheet have !important in order to override author settings.

        Reviewed by Tim

        * css/view-source.css:

2008-01-22  Nikolas Zimmermann  <zimmermann@kde.org>

        Reviewed by Alp.

        Allow to use SVGPaintServerSolid without RenderObject/RenderStyle. Used later to draw SVG Fonts in HTML.

        * svg/graphics/SVGPaintServer.cpp:
        (WebCore::SVGPaintServer::sharedSolidPaintServer):
        * svg/graphics/SVGPaintServer.h:
        * svg/graphics/cg/SVGPaintServerCg.cpp:
        (WebCore::SVGPaintServer::renderPath):
        (WebCore::SVGPaintServer::fillPath):
        (WebCore::SVGPaintServer::clipToFillPath):
        * svg/graphics/cg/SVGPaintServerSolidCg.cpp:
        (WebCore::SVGPaintServerSolid::setup):

2008-01-22  Nikolas Zimmermann  <zimmermann@kde.org>

        Reviewed by Alp.

        Initialize missing variables, m_lineGap / m_lineSpacing.
        Only noticeable when trying to render HTML text using SVG Fonts (which is not possible with trunk, but with my local version).

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

2008-01-22  Alp Toker  <alp@atoker.com>

        Reviewed by Nikolas.

        Fix Cairo SVG fonts following changes in r29700.

        Set the font description's details as needed in FontPlatformData and
        eliminate GraphicsContext::setPlatformFont() since it was redundant
        and assumed all fonts were Cairo fonts.

        * platform/graphics/GraphicsContext.cpp:
        * platform/graphics/cairo/GraphicsContextCairo.cpp:
        * platform/graphics/gtk/FontPlatformDataGtk.cpp:
        (WebCore::FontPlatformData::FontPlatformData):

2008-01-22  Dan Bernstein  <mitz@apple.com>
 
         Reviewed by Eric.
 
         - fix http://bugs.webkit.org/show_bug.cgi?id=16967
           <rdar://problem/5699344> Reproducible crash when navigating back to a page using SVG fonts
 
         Test: svg/custom/font-platformDestroy-crash.svg
 
         * platform/graphics/SimpleFontData.cpp:
         (WebCore::SimpleFontData::~SimpleFontData): Changed to call
         platformDestroy() only if platformInit() was called from the
         constructor.

2008-01-22  Lars Knoll  <lars@trolltech.com>

        Reviewed by Simon.

        cleanup the CookieJarQt implementation and implement cookiesEnabled.

        * platform/qt/CookieJarQt.cpp:
        (WebCore::cookieJar):
        (WebCore::setCookies):
        (WebCore::cookies):
        (WebCore::cookiesEnabled):

2008-01-22  Lars Knoll  <lars@trolltech.com>

        Reviewed by Simon.

        Ported the font implementation to use the new QFont features of Qt 4.4.
        

        * platform/graphics/Font.h:
        (WebCore::Font::setWordSpacing):
        (WebCore::Font::setLetterSpacing):
        (WebCore::Font::font):
        (WebCore::Font::):
        * platform/graphics/qt/FontQt.cpp:
        (WebCore::Font::Font):
        (WebCore::Font::setWordSpacing):
        (WebCore::Font::setLetterSpacing):
        (WebCore::qstring):
        (WebCore::setupLayout):
        (WebCore::Font::drawText):
        (WebCore::Font::width):
        (WebCore::Font::floatWidth):
        (WebCore::Font::offsetForPosition):
        (WebCore::Font::selectionRectForText):
        (WebCore::generateComponents):
        (WebCore::cursorToX):
        (WebCore::Font::~Font):
        (WebCore::Font::operator=):
        (WebCore::Font::operator==):
        (WebCore::Font::update):

2008-01-21  Eric Seidel  <eric@webkit.org>

        Reviewed by Nikolas & Oliver.
        
        Tested by svg/custom/svg-features.html
        
        * dom/DOMImplementation.cpp:
        (WebCore::isSVG10Feature): use ENABLE(SVG_*) conditionals
        (WebCore::isSVG11Feature): use ENABLE(SVG_*) conditionals

2008-01-21  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Maciej Stachowiak.

        Adapted WebCore to the fix for http://bugs.webkit.org/show_bug.cgi?id=16909
        REGRESSION: Amazon.com crash (ActivationImp)

        * bindings/js/kjs_proxy.cpp:
        (WebCore::KJSProxy::~KJSProxy): No convenient way to make this assertion
        anymore. (It wasn't firing for anyone, anyway, so it's no big loss.)

        * bindings/objc/WebScriptObject.mm:
        (+[WebScriptObject throwException:]): Use the ExecState stack, instead
        of currentExec.
        (-[WebScriptObject setException:]): ditto. Also, a slight change in
        behavior: If no ExecStates are active, we no longer throw an exception
        in the global ExecState. The JavaScriptCore ChangeLog explains why.
        This also matches the behavior of +throwException.

2008-01-21  Nikolas Zimmermann  <zimmermann@kde.org>

        Not reviewed. Try to fix Qt build, after the rmdir() fixes.c

        * platform/graphics/qt/SimpleFontDataQt.cpp:
        (WebCore::SimpleFontData::SimpleFontData):

2008-01-21  Nikolas Zimmermann  <zimmermann@kde.org>

        Not reviewed. Another Wx build fix.

        * platform/graphics/wx/FontWx.cpp:
        (WebCore::Font::drawGlyphs):

2008-01-21  Darin Adler  <darin@apple.com>

        - try to fix Qt build

        * platform/qt/FileSystemQt.cpp:
        (WebCore::deleteEmptyDirectory): QDir::root().rmdir() instead of QDir::rmdir().

2008-01-21  Nikolas Zimmermann  <zimmermann@kde.org>

        Not reviewed. Yet another win/gtk build fix.

        * platform/graphics/gtk/FontPlatformDataGtk.cpp:
        (WebCore::FontPlatformData::FontPlatformData):
        * platform/graphics/win/FontWin.cpp:
        (WebCore::Font::drawGlyphs):

2008-01-21  Nikolas Zimmermann  <zimmermann@kde.org>

        Not reviewed. Another build fix for Gtk/Linux & Wx/Mac.

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

2008-01-21  Nikolas Zimmermann  <zimmermann@kde.org>

        Not reviewed. Build fix for Qt/Gtk & Wx.

        * css/CSSFontSelector.cpp:
        * platform/graphics/SegmentedFontData.cpp:
        (WebCore::SegmentedFontData::isSVGFont): Remove SVG_FONTS block, it's a pure virtual function in the base class.
        * platform/graphics/SegmentedFontData.h:

2008-01-21  Nikolas Zimmermann  <zimmermann@kde.org>

        Not reviewed. Build fix for ports that don't build SVG: wx.

        * css/CSSFontFaceSource.h: Wrap include in ENABLE(SVG_FONTS) blocks.
        * css/CSSFontFaceSrcValue.h: Ditto.

2008-01-21  Nikolas Zimmermann  <zimmermann@kde.org>

        Not reviewed. Build fix for Qt/Gtk.

        * platform/graphics/SimpleFontData.h:
        (WebCore::SimpleFontData::svgFontData):
        (WebCore::SimpleFontData::isSVGFont):

2008-01-21  Nikolas Zimmermann  <zimmermann@kde.org>

        Reviewed by Eric. Older parts reviewed by Dan.

        Fixes: http://bugs.webkit.org/show_bug.cgi?id=16880 (SVGCSSFontFace should die, instead integrate within the FontCache.)
        Fixes: http://bugs.webkit.org/show_bug.cgi?id=16784 (In-document fonts work only as the first child to font-face-src)

        Proper integration of SVG Fonts within the existing custom font concept, removing the need for a custom SVGCSSFontFace.
        Integrate within the CSSFontFaceSource logic for caching support, as well as the framework for external SVG Fonts.

        Proper handling of missing glyphs, using <missing-glyph> element. If that is not specified in a font, fallback to non-SVG font rendering.

        * GNUmakefile.am:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * css/CSSFontFaceSource.cpp:
        (WebCore::CSSFontFaceSource::getFontData):
        * css/CSSFontFaceSource.h:
        (WebCore::CSSFontFaceSource::svgFontFaceElement):
        (WebCore::CSSFontFaceSource::setSVGFontFaceElement):
        * css/CSSFontFaceSrcValue.h:
        (WebCore::CSSFontFaceSrcValue::m_isLocal):
        (WebCore::CSSFontFaceSrcValue::~CSSFontFaceSrcValue):
        (WebCore::CSSFontFaceSrcValue::svgFontFaceElement):
        (WebCore::CSSFontFaceSrcValue::setSVGFontFaceElement):
        * css/CSSFontSelector.cpp:
        (WebCore::CSSFontSelector::addFontFaceRule):
        * css/SVGCSSFontFace.cpp: Removed.
        * css/SVGCSSFontFace.h: Removed.
        * platform/graphics/Font.cpp:
        (WebCore::Font::ascent):
        (WebCore::Font::descent):
        (WebCore::Font::lineSpacing):
        (WebCore::Font::xHeight):
        (WebCore::Font::fontSelector):
        * platform/graphics/Font.h:
        * platform/graphics/FontData.h:
        * platform/graphics/SegmentedFontData.cpp:
        (WebCore::SegmentedFontData::isSVGFont):
        * platform/graphics/SegmentedFontData.h:
        * platform/graphics/SimpleFontData.cpp:
        (WebCore::SimpleFontData::SimpleFontData):
        * platform/graphics/SimpleFontData.h:
        (WebCore::SimpleFontData::ascent):
        (WebCore::SimpleFontData::descent):
        (WebCore::SimpleFontData::lineSpacing):
        (WebCore::SimpleFontData::lineGap):
        (WebCore::SimpleFontData::xHeight):
        (WebCore::SimpleFontData::isSVGFont):
        (WebCore::SimpleFontData::svgFontData):
        * platform/graphics/gtk/FontPlatformData.h:
        (WebCore::FontPlatformData::size):
        * platform/graphics/gtk/FontPlatformDataGtk.cpp:
        (WebCore::FontPlatformData):
        * platform/graphics/mac/FontPlatformData.h:
        (WebCore::FontPlatformData::FontPlatformData):
        (WebCore::FontPlatformData::size):
        * platform/graphics/win/FontPlatformData.h:
        * platform/graphics/win/FontPlatformDataWin.cpp:
        (WebCore::FontPlatformData::FontPlatformData):
        * rendering/RenderSVGText.cpp:
        (WebCore::RenderSVGText::relativeBBox):
        * svg/SVGFont.cpp:
        (WebCore::convertEmUnitToPixel):
        (WebCore::isCompatibleGlyph):
        (WebCore::svgFontAndFontFaceElementForFontData):
        (WebCore::SVGTextRunWalker::SVGTextRunWalker):
        (WebCore::SVGTextRunWalker::walk):
        (WebCore::floatWidthUsingSVGFontCallback):
        (WebCore::floatWidthMissingGlyphCallback):
        (WebCore::floatWidthOfSubStringUsingSVGFont):
        (WebCore::drawTextUsingSVGFontCallback):
        (WebCore::drawTextMissingGlyphCallback):
        (WebCore::Font::drawTextUsingSVGFont):
        * svg/SVGFontData.cpp: Added.
        (WebCore::SVGFontData::SVGFontData):
        (WebCore::SVGFontData::~SVGFontData):
        * svg/SVGFontData.h: Added.
        (WebCore::SVGFontData::svgFontFaceElement):
        (WebCore::SVGFontData::horizontalOriginX):
        (WebCore::SVGFontData::horizontalOriginY):
        (WebCore::SVGFontData::horizontalAdvanceX):
        (WebCore::SVGFontData::verticalOriginX):
        (WebCore::SVGFontData::verticalOriginY):
        (WebCore::SVGFontData::verticalAdvanceY):
        * svg/SVGFontFaceElement.cpp:
        (WebCore::SVGFontFaceElement::unitsPerEm):
        (WebCore::SVGFontFaceElement::xHeight):
        (WebCore::SVGFontFaceElement::horizontalOriginX):
        (WebCore::SVGFontFaceElement::horizontalOriginY):
        (WebCore::SVGFontFaceElement::horizontalAdvanceX):
        (WebCore::SVGFontFaceElement::verticalOriginX):
        (WebCore::SVGFontFaceElement::verticalOriginY):
        (WebCore::SVGFontFaceElement::verticalAdvanceY):
        (WebCore::SVGFontFaceElement::ascent):
        (WebCore::SVGFontFaceElement::descent):
        (WebCore::SVGFontFaceElement::fontFamily):
        (WebCore::SVGFontFaceElement::associatedFontElement):
        (WebCore::SVGFontFaceElement::rebuildFontFace):
        * svg/SVGFontFaceElement.h:
        * svg/SVGGlyphElement.cpp:
        (WebCore::SVGGlyphElement::inheritUnspecifiedAttributes):
        (WebCore::parseSVGGlyphAttribute):
        (WebCore::SVGGlyphElement::buildGenericGlyphIdentifier):
        (WebCore::SVGGlyphElement::buildGlyphIdentifier):
        * svg/SVGGlyphElement.h:
        * svg/SVGMissingGlyphElement.cpp:
        * svg/svgattrs.in:

2008-01-21  Darin Adler  <darin@apple.com>

        Reviewed by John Sullivan.

        - fix <rdar://problem/5644324> Delegate-less WebKit clients should have no databases

        - remove the default database quota setting

        - simplify the quota-related client calls by merging the one for a new database with
          the one for an existing database, adding a feature where you can get details about
          a database being created using the same functions that work on the other databases,
          and removing the parameters and return values, instead having clients use a function
          to set the quota

        - fix unsafe multi-thread access to the database tracker's quota map
        - fix bug in deleteAllDatabases where it would iterate a HashMap while modifying it

        The tracker database is now only created when we set the quota for a database origin.
        Thus asking for info about databases won't cause anything to be written to disk.

        * WebCore.base.exp: Updated.

        * bindings/js/GCController.cpp: Added an #if to get rid of an unused function warning.

        * page/Chrome.cpp: Removed database-related functions. There's no problem having the
        code deal directly with the client.
        * page/Chrome.h: Ditto. Also made Chrome inherit from Noncopyable.

        * page/ChromeClient.h: Replaced the two quota-related functions with a single one.
        The details about the state of databases in the origin are now available by asking
        for database details. There's also no need to pass the security origin, since
        it's easy to get that from the frame's document.

        * page/Settings.cpp: Removed the default quota setting.
        * page/Settings.h: Ditto.

        * platform/FileSystem.h: Added deleteEmptyDirectory.
        * platform/gtk/FileSystemGtk.cpp:
        (WebCore::deleteEmptyDirectory): Added.
        * platform/posix/FileSystemPOSIX.cpp:
        (WebCore::deleteEmptyDirectory): Added.
        * platform/qt/FileSystemQt.cpp:
        (WebCore::deleteEmptyDirectory): Added.
        * platform/win/FileSystemWin.cpp:
        (WebCore::deleteEmptyDirectory): Added.
        * platform/wx/FileSystemWx.cpp:
        (WebCore::deleteEmptyDirectory): Added placeholder.

        * storage/DatabaseDetails.h: Removed the isValid() function since its name is
        confusing -- we removed our other isValid() functions. For the few callers that
        need this, it's fine to just check name().isEmpty(). Made the member functions
        all const.

        * storage/DatabaseTracker.cpp:
        (WebCore::DatabaseTracker::DatabaseTracker): Removed m_defaultQuota initialization.
        Added m_proposedDatabase and m_thread.
        (WebCore::DatabaseTracker::setDatabaseDirectoryPath): Got rid of code that would
        open the tracker database here. This might slightly speed up launch time, since
        we won't do the I/O until we have to, and before we were actually creating an SQL
        database in this code that's run when we go to the first webpage.
        (WebCore::DatabaseTracker::trackerDatabasePath): Added.
        (WebCore::DatabaseTracker::openTrackerDatabase): Added a boolean parameter telling
        this function whether to create the database. Made this function safe to call if
        the database is already open. Also made the function fail quietly if the path has
        not been set yet.
        (WebCore::DatabaseTracker::canEstablishDatabase): Got rid of the call to the
        establishEntryForOrigin function. The origin is now put in the tracker database
        when the quota is set to a non-zero value. When judging if there's enough space
        for the new database, require at least one byte even if estimatedSize is 0, and
        check for overflow. Also added code here to populate the origins map, which
        guarantees it will be ready when the database uses it on another thread later.
        Also changed this to call the new ChromeClient function.
        (WebCore::DatabaseTracker::hasEntryForDatabase): Added code to open the
        tracker database, since that's no longer done by setDatabaseDirectoryPath.
        (WebCore::DatabaseTracker::originPath): Added.
        (WebCore::DatabaseTracker::fullPathForDatabase): Added code so that this will
        return a null string for the proposed database if called from within the
        ChromeClient function. Also switched from empty string to null string for the
        error cases.
        (WebCore::DatabaseTracker::populateOrigins): Added code to open the tracker
        database.
        (WebCore::DatabaseTracker::databaseNamesForOrigin): Ditto.
        (WebCore::DatabaseTracker::detailsForNameAndOrigin): Ditto. Also added code that
        will return the details of the proposed database if called from within the
        ChromeClient function. This is how the client can learn of the display name and
        the estimated size of the new database.
        (WebCore::DatabaseTracker::setDatabaseDetails): Added code to open the tracker
        database.
        (WebCore::DatabaseTracker::quotaForOrigin): Made this code OK to call on a non-main
        thread by using m_quotaMapGuard to guard access to the map. Other code runs on the
        main thread only, and only functions that write to the map use the lock.
        (WebCore::DatabaseTracker::setQuota): Changed this function so it can insert the
        initial quota as well as updating an existing quota. Added locking since this
        function modifies the quota map. Added code to open the tracker database. Added
        an early exit if the quota is already correct, which is guarantees that if you
        set a quota to 0 it won't trigger creation of a tracker database.
        (WebCore::DatabaseTracker::addDatabase): Added code to open the tracker database.
        (WebCore::DatabaseTracker::deleteAllDatabases): Made a copy of the quota map before
        iterating it to find all the origins. This fixes a problem with the old code where
        it would modify the map while iterating it, which gives assertions in debug builds
        and unpredictable results.
        (WebCore::DatabaseTracker::deleteOrigin): Replaced deleteDatabasesWithOrigin with
        this function. Added code to open the tracker database if needed. Added code to
        delete the origin from the tracker database, and to close the tracker database
        and delete files and directories as needed if we are deleting the final origin.
        (WebCore::DatabaseTracker::deleteDatabase): Added code to open the tracker database
        if needed.

        * storage/DatabaseTracker.h: Renamed databasePath to databaseDirectoryPath for
        clarity, including the data member, and the getter and setter functions.
        Replaced deleteDatabasesWithOrigin with deleteOrigin. Removed the functions
        dealing with default origin quota. There is no default any more; origins start
        with no quota and the client must set a quota. Added trackerDatabasePath and
        originPath helper functions. Added a boolean parameter to openTrackerDatabase
        to tell it whether to create the database or not. Removed the
        establishEntryForOrigin function. Renamed m_originQuotaMap to just m_quotaMap,
        and added m_quotaMapGuard. Added a QuotaMap typedef. Added m_proposedDatabase,
        which holds the origin and details for the current proposed database during
        the client callback function that must decide whether to grant quota. Added a
        m_thread data member for debugging use to assert if functions that can only
        be called on a single thread are misused.

        * storage/SQLTransaction.cpp:
        (WebCore::SQLTransaction::deliverQuotaIncreaseCallback): Changed to call the
        new exceededDatabaseQuota function instead of the old one.

        * svg/graphics/SVGImageEmptyClients.h: Updated for the change to ChromeClient.

2008-01-21  David Hyatt  <hyatt@apple.com>

        Fix for http://bugs.webkit.org/show_bug.cgi?id=16935

        Fix a bug in layers where the positioned ancestor was being computed incorrectly (the root should not
        automatically be included).

        Reviewed by olliej

        Added fast/layers/positioned-inside-root-with-margins.html

        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::stackingContext):
        (WebCore::RenderLayer::enclosingPositionedAncestor):

2008-01-21  Simon Hausmann  <hausmann@webkit.org>

        Reviewed by Holger.

        Fix KURL to QUrl conversion.
        
        Stick to the encoded version of the URL and in addition to KURL we encode the
        characters mentioned in section 2.4.3 of RFC 2396 as QUrl requires these, too.
        
        This fixes fast/css/import-rule-regression-11590.html,
        fast/css/import-style-update.html, svg/hixie/processing-model/003.xml and
        svg/hixie/processing-model/004.xml.


        * platform/qt/KURLQt.cpp:
        (WebCore::toHex):
        (WebCore::KURL::operator QUrl):

2008-01-21  Simon Hausmann  <hausmann@webkit.org>

        Reviewed by Holger.

        Fix focus chain handling and cycling through focusable objects (links) using tab/backtab.
        
        * Fix GraphicsContext::drawFocusRing to also draw single focus rects.
        * Implemented QWebPage::focusNextPrevChild by sending fake tab/shift-tab events
        and make the return value depend on whether we successfully determined a focusable
        node or not.
        * Changed QWebView::focusNextPrevChild() to call the base QWidget implementation correctly
        if we could not handle the focus chain ourselves.
        * Changed the focus policy of QWebView to correctly use WheelFocus instead of ClickFocus.
        * Made ChromeClientQt::canTakeFocus() and takeFocus() dummy method since they are only
        used to control the situation of stepping out of the focus chain inside the page.
        * Made inclusion of links in the focus chain configurable through QWebSettings::LinksIncludedInFocusChain.
        The layout tests expect this to be disabled but for the user it seems sensible to have it
        on by default, hence the default in qwebsettings.cpp

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

2008-01-21  Simon Hausmann  <hausmann@webkit.org>

        Reviewed by Holger.

        Fix access key support and fast/forms/legend-access-key.html

        SVN revision 26664 changed the default access key for the non-mac build to Alt
        while this test relies on Ctrl.

        * page/EventHandler.cpp:

2008-01-21  Simon Hausmann  <hausmann@webkit.org>

        Reviewed by Holger.

        Fix error reporting when parsing X(HT)ML fragments.
        
        We use the regular XMLTokenizer write()/.../end() sequence to parse those
        fragments, but we should not report any parsing errors inline inside the
        content. Instead we should just return the error and the DOM layer will take
        care of throwing an exception.
        
        This fixes fast/innerHTML/innerHTML-changing-document-properties.xhtml
        

        * dom/XMLTokenizer.cpp:
        (WebCore::createXHTMLParserErrorHeader):

2008-01-21  Holger Freyther  <holger.freyther@trolltech.com>

        Reviewed by Simon.

        Fix some issues with redirections.
        
        * Ensure that we deliver the response to the ResourceHandleClient only once by
        setting m_responseSent back to false only before calling start() for the
        redirection
        * Added 307 as another HTTP status code that causes a redirection after POST to
        become get, just like in MainResourceLoader::isPostOrRedirectAfterPost
        * Also set the HTTP method on the ResourceRequest to GET before passing it to
        willSendRequest.
        * willSendRequest's newRequest argument is actually an in/out argument and could be
        modified in theory, so set m_request accordingly after the call.
        

        * platform/network/qt/QNetworkReplyHandler.cpp:
        (WebCore::QNetworkReplyHandler::finish):
        (WebCore::QNetworkReplyHandler::sendResponseIfNeeded):

2008-01-21  Holger Freyther  <holger.freyther@trolltech.com>

        Reviewed by Simon.

        Fixed WebCore::cookies() to return all cookies, not only the first one.
        
        Fixes login into mail.yahoo.com.
        

        * platform/qt/CookieJarQt.cpp:
        (WebCore::cookies):

2008-01-20  Oliver Hunt  <oliver@apple.com>

        Reviewed by Mitz.

        Fix http://bugs.webkit.org/show_bug.cgi?id=16816 , rdar://problem/5682985
        
        Correctly trigger willPerformDragDestinationAction when a drop causes a 
        load to occur.  The logic that originally did this was lost during the
        great drag migration of '07.

        * page/DragController.cpp:
        (WebCore::DragController::performDrag):

2008-01-20  Dan Bernstein  <mitz@apple.com>

        Reviewed by Darin Adler.

        - fix http://bugs.webkit.org/show_bug.cgi?id=16951
          Assertion failure in FrameView::scheduleRelayout (!m_frame->document() || !m_frame->document()->inPageCache()) when going back from a page with a focused popup

        * dom/Document.cpp:
        (WebCore::Document::setFocusedNode): Bail out if the document is in the
        page cache. Documents in the back/forward cache are "frozen" and should
        not change state.

2008-01-20  Collin Jackson  <webkit@collinjackson.com>

        Reviewed by Sam Weinig.

        Fix for http://bugs.webkit.org/show_bug.cgi?id=16775

        We now use frame()->loader()->url() for postMessage, preventing a
        malicious sender from overwriting the uri property (using a <base> tag,
        for example). Also, use frame->loader()->url().host() instead of 
        instead of document()->SecurityOrigin()->domain() to reflect a recent
        clarification in the HTML5 spec. 

        Tests: http/tests/security/postMessage/domain-affected-by-document-domain.html
               http/tests/security/postMessage/domain-and-uri-unaffected-by-base-tag.html
               http/tests/security/postMessage/javascript-page-still-sends-domain.html

        * bindings/js/JSDOMWindowCustom.cpp:
        (WebCore::JSDOMWindow::postMessage):

2008-01-20  Antti Koivisto  <antti@apple.com>

        Reviewed by Adele.

        Fix <rdar://problem/5695451>
        Middle part of the media timeline missing on Windows if load failed

        Add some null checking to avoid getting garbage results from the functions.

        * platform/graphics/MediaPlayer.cpp:
        * platform/graphics/win/QTMovieWin.cpp:
        (QTMovieWin::duration):
        (QTMovieWin::currentTime):
        (QTMovieWin::setCurrentTime):
        (QTMovieWin::maxTimeLoaded):

2008-01-19  Alp Toker  <alp@atoker.com>

        Reviewed by Mark Rowe.

        http://bugs.webkit.org/show_bug.cgi?id=16944
        Use of GST_PLUGIN_DEFINE_STATIC results in a module-level constructor

        http://bugzilla.gnome.org/show_bug.cgi?id=510547
        Epiphany/Webkit fails to start due to initializing threads twice

        Don't call GST_PLUGIN_DEFINE_STATIC() as it performs g_thread_init()
        in the global initializer, breaking subsequent calls to
        g_thread_init() in applications.

        * platform/graphics/gtk/VideoSinkGStreamer.cpp:

2008-01-19  Alp Toker  <alp@atoker.com>

        Reviewed by Mark Rowe.

        Remove any fragment part from the URL to be requested just before
        passing it to curl, otherwise curl sends it as part of the HTTP/local
        file request, causing page loads to fail.

        * platform/network/curl/ResourceHandleManager.cpp:
        (WebCore::ResourceHandleManager::startJob):

2008-01-19  Jan Michael Alonzo  <jmalonzo@unpluggable.com>

        Reviewed by Alp Toker.

        Add svg foreign object and svg experimental to the GTK+/autotools
        build system.

        * GNUmakefile.am:

2008-01-19  Dan Bernstein  <mitz@apple.com>

        Reviewed by Maciej Stachowiak.

        - fix <rdar://problem/5645813> CrashTracer: [USER] 6 crashes in Safari at com.apple.WebCore: WebCore::RenderBox::destroy + 116

        Test: editing/selection/inconsistent-in-removeChildNode.html

        * editing/SelectionController.cpp:
        (WebCore::SelectionController::nodeWillBeRemoved): If the selection
        base or extent are not visible any more, adjust the selection.

2008-01-19  Oliver Hunt  <oliver@apple.com>

        Reviewed by Eric Seidel.

        Build fix for --svg-foreign-object path

        * svg/SVGForeignObjectElement.idl:

2008-01-18  Stephanie  <slewis@apple.com>

        Reviewed by Oliver.

        Workaround for <rdar://problem/5695848>.  Set mime_type for local files based on file extension. 

        * platform/network/cf/ResourceResponseCFNet.cpp:
        (WebCore::ResourceResponse::doUpdateResourceResponse):

2008-01-18  Ada Chan  <adachan@apple.com>

        <rdar://problem/5682340> REGRESSION (r28188): Context menu appears at wrong place when clicking in iframe whose parent is scrolled (16827)
        Calling absolutePosition() in EventHandler::hitTestResultAtPoint() is extremely inefficient and passing in
        true as fixed before was wrong.  Use HitTestResult::localPoint() instead, and take into account border and padding widths.

        Reviewed by Hyatt and Darin.

        * page/EventHandler.cpp:
        (WebCore::EventHandler::hitTestResultAtPoint):
        * rendering/HitTestResult.cpp:
        (WebCore::HitTestResult::operator=):

2008-01-18  Holger Hans Peter Freyther  <holger.freyther@trolltech.com>

        Reviewed by Darin, landed by Beth.

        - fixed http://bugs.webkit.org/show_bug.cgi?id=15765

        The call to HTMLTokenizer::write might result in a call to ::end which will invoke
        HTMLParser::finished() or Document::finishedParsing(). HTMLParser::finished() will eventually
        call Document::finishedParsing. The Document will delete the calling HTMLTokenizer and from the deleted
        tokenizer we will call into FrameLoader::tokenizerProcessedData.
        -) FrameLoader::tokenizerProcessedData calls FrameLoader::checkCompleted which gets called from the Document::finishedParsing
           (FrameLoader::finishedParsing).

        * html/HTMLTokenizer.cpp:
        (WebCore::HTMLTokenizer::timerFired):

2008-01-18  David Hyatt  <hyatt@apple.com>

        Don't apply the border/margin/padding check to root line boxes, since their renderers
        are blocks.

        * rendering/InlineFlowBox.cpp:
        (WebCore::InlineFlowBox::computeLogicalBoxHeights):
        (WebCore::InlineFlowBox::placeBoxesVertically):

2008-01-18  Geoffrey Garen  <ggaren@apple.com>

        Not reviewed: rolling out a previous patch.
        
        Fixed <rdar://problem/5695439> Crash during GCController destructor on
        quitting browser

        Used svn merge to roll out r29603 because it introduced some crashes
        on quit.
        
        GC relies on static hash tables, so it's not safe to GC from a static
        destructor, which might run after the static hash tables' destructors.

        * bindings/js/GCController.cpp:
        (WebCore::GCController::garbageCollectNow):
        * bindings/js/GCController.h:

2008-01-18  David Hyatt  <hyatt@apple.com>

        Fix for http://bugs.webkit.org/show_bug.cgi?id=15665

        Building on Beth's earlier work to start building line boxes for empty inlines, this patch makes more
        empty inline cases work.  Empty inlines on lines by themselves now set isLineEmpty to false so that
        bidiReorderLine will get properly called.  In addition, the "shrink boxes with no text children" quirk
        needs to be disabled for inlines with padding, margins or borders.

        Reviewed by Beth

        Added fast/inline/inline-padding-disables-text-quirk.html

        * rendering/InlineFlowBox.cpp:
        (WebCore::InlineFlowBox::computeLogicalBoxHeights):
        (WebCore::InlineFlowBox::placeBoxesVertically):
        (WebCore::InlineFlowBox::shrinkBoxesWithNoTextChildren):
        * rendering/RenderObject.h:
        (WebCore::RenderObject::hasBordersPaddingOrMargin):
        * rendering/bidi.cpp:
        (WebCore::inlineFlowRequiresLineBox):
        (WebCore::RenderBlock::findNextLineBreak):

2008-01-18  David Hyatt  <hyatt@apple.com>

        Fix for http://bugs.webkit.org/show_bug.cgi?id=14975

        Computed size of padding is incorrect because we default padding to auto.  This is a made-up value that
        was only used to implement cellpadding on tables.  We needed this made-up value in order to tell that
        padding wasn't set so that we could then apply cellpadding.
       
        This patch rewrites cellpadding to be like other browsers.  Instead of being a setting on the table
        renderer that applies to all cells (even ones that were not <td>s), cellpadding is now mapped into the
        style of <td>s.  With this change it effectively becomes a content model feature and not a rendering
        feature.

        For example, a <td> will pick up cellpadding even when it is not a cell and/or the enclosing <table> is
        not a table.  Anonymous cells and CSS-display-type cells will now never pick up cellpadding.  This behavior
        is all consistent with other browsers.

        Reviewed by Antti

        Added fast/css/padding-no-renderer.html

        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::canShareStyleWithElement):
        (WebCore::CSSStyleSelector::styleForElement):
        * css/CSSStyleSelector.h:
        * dom/StyledElement.cpp:
        * dom/StyledElement.h:
        (WebCore::StyledElement::canHaveAdditionalAttributeStyleDecls):
        (WebCore::StyledElement::additionalAttributeStyleDecls):
        * html/HTMLTableCellElement.cpp:
        (WebCore::HTMLTableCellElement::additionalAttributeStyleDecls):
        * html/HTMLTableCellElement.h:
        (WebCore::HTMLTableCellElement::canHaveAdditionalAttributeStyleDecls):
        * html/HTMLTableColElement.cpp:
        (WebCore::HTMLTableColElement::additionalAttributeStyleDecls):
        * html/HTMLTableColElement.h:
        (WebCore::HTMLTableColElement::canHaveAdditionalAttributeStyleDecls):
        * html/HTMLTableElement.cpp:
        (WebCore::HTMLTableElement::parseMappedAttribute):
        (WebCore::HTMLTableElement::additionalAttributeStyleDecls):
        (WebCore::HTMLTableElement::addSharedCellDecls):
        (WebCore::HTMLTableElement::addSharedCellBordersDecl):
        (WebCore::HTMLTableElement::addSharedCellPaddingDecl):
        (WebCore::HTMLTableElement::addSharedGroupDecls):
        (WebCore::HTMLTableElement::attach):
        * html/HTMLTableElement.h:
        (WebCore::HTMLTableElement::canHaveAdditionalAttributeStyleDecls):
        * html/HTMLTableSectionElement.cpp:
        (WebCore::HTMLTableSectionElement::additionalAttributeStyleDecls):
        * html/HTMLTableSectionElement.h:
        (WebCore::HTMLTableSectionElement::canHaveAdditionalAttributeStyleDecls):
        * rendering/AutoTableLayout.cpp:
        (WebCore::AutoTableLayout::recalcColumn):
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::paddingTop):
        (WebCore::RenderObject::paddingBottom):
        (WebCore::RenderObject::paddingLeft):
        (WebCore::RenderObject::paddingRight):
        * rendering/RenderStyle.cpp:
        (WebCore::StyleSurroundData::StyleSurroundData):
        * rendering/RenderStyle.h:
        (WebCore::RenderStyle::initialPadding):
        * rendering/RenderTable.cpp:
        (WebCore::RenderTable::RenderTable):
        * rendering/RenderTable.h:

2008-01-18  Dan Bernstein  <mitz@apple.com>

        Reviewed by Dave Hyatt.

        - fix <rdar://problem/5615307> Repro crash in WebKit!WebCore::RenderContainer::destroyLeftoverChildren

        Test: fast/table/insert-row-before-form.html

        * rendering/RenderTableRow.cpp:
        (WebCore::RenderTableRow::addChild): Changed to ensure that the
        object a new cell is inserted before is a child of the row, and
        added an assertion that that object is either a cell or a form.
        * rendering/RenderTableSection.cpp:
        (WebCore::RenderTableSection::addChild): Changed to ensure that the
        object a new row is inserted before is a child of the table section, and
        added an assertion that that object is either a table row or a form.

2008-01-18  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Brady Eidson.

        Fixed <rdar://problem/5622424> World Leak dialog when closing a page
        that has a Database
        
        The problem was that each transaction and SQL statement would hold on
        to its callback indefinitely. By design, callbacks often establish
        reference cycles to temporarily protect their execution environments.
        To break the cycle, we need to explicitly release each callback as soon
        as it is no longer needed.

        * storage/SQLStatement.cpp:
        (WebCore::SQLStatement::performCallback): Release our callback objects
        after performing our callback.

        * storage/SQLTransaction.cpp:
        (WebCore::SQLTransaction::postflightAndCommit): Release our callback
        objects after the transaction has terminated.
        (WebCore::SQLTransaction::cleanupAfterTransactionErrorCallback): ditto.

2008-01-18  Adele Peterson  <adele@apple.com>

        Reviewed by Antti.

        Fix for <rdar://problem/5679490> media controls fade in and out too jerkily and too slowly

        * rendering/RenderMedia.cpp: Shorten the duration for the fade in/out animation.

2008-01-18  Beth Dakin  <bdakin@apple.com>

        Reviewed by Oliver.

        Disables SVG foreign object for <rdar://problem/5686989> turn off 
        SVG foreignobject because it does not repaint/dirty correctly

        * DerivedSources.make:
        * WebCore.SVG.ForeignObject.exp: Added.
        * WebCore.SVG.exp:
        * bindings/js/JSSVGElementWrapperFactory.cpp:
        (WebCore::createJSSVGWrapper):
        * rendering/RenderForeignObject.cpp:
        * rendering/RenderForeignObject.h:
        * svg/SVGForeignObjectElement.cpp:
        * svg/SVGForeignObjectElement.h:
        * svg/SVGForeignObjectElement.idl:
        * svg/SVGLocatable.cpp:
        (WebCore::SVGLocatable::nearestViewportElement):
        (WebCore::SVGLocatable::farthestViewportElement):
        * svg/SVGUseElement.cpp:
        (WebCore::isDisallowedElement):
        * svg/svgtags.in:

2008-01-18  Mark Rowe  <mrowe@apple.com>

        Rubber-stamped by Adam Roben.

        Fix mixed line endings in FileSystemWin.cpp and set svn:eol-style to native
        to try and keep them consistent in the future.

        * platform/win/FileSystemWin.cpp:
        (WebCore::fileSize):
        (WebCore::fileExists):
        (WebCore::deleteFile):
        (WebCore::pathByAppendingComponent):
        (WebCore::fileSystemRepresentation):
        (WebCore::makeAllDirectories):
        (WebCore::homeDirectoryPath):
        (WebCore::bundleName):
        (WebCore::storageDirectory):
        (WebCore::cachedStorageDirectory):

2008-01-18  Antti Koivisto  <antti@apple.com>

        Reviewed by Adam.

        Fix unreachable code warning in RenderVideo on Windows.
        
        Make switch cases explicit.

        * rendering/RenderImage.cpp:
        (WebCore::RenderImage::isWidthSpecified):
        (WebCore::RenderImage::isHeightSpecified):
        * rendering/RenderVideo.cpp:
        (WebCore::RenderVideo::isWidthSpecified):
        (WebCore::RenderVideo::isHeightSpecified):

2008-01-18  Timothy Hatcher  <timothy@apple.com>

        Reviewed by Adam Roben.

        <rdar://problem/5693558> REGRESSION (r29581): no form field focus
        rings and inactive text selection after loading a page
        Bug 16910: [GTK] REGRESSION: keyboard cursor doesn't blink
        Bug 16917: REGRESSION (r29581/2): Google Maps search box loses focused appearance

        * page/FocusController.cpp:
        (WebCore::FocusController::setActive): Use focusedOrMainFrame() instead of focusedFrame()
        to call selectionController()->pageActivationChanged() for cases when the focusedFrame()
        has not been set yet. 

2008-01-18  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Brady.

        Database origin tracking is broken.

        * storage/DatabaseTracker.cpp: (WebCore::DatabaseTracker::populateOrigins):
        Move reading from statement back into the loop (broken in r29386).

2008-01-18  Marius Storm-Olsen  <marius@trolltech.com>

        Reviewed by Simon Hausmann <hausmann@webkit.org>.

        Add use of precompiled header, when building inside Qt.
        
        Compiling WebKit was taking forever; 17 minutes on my machine for _one_ build! Adding the PCH at least brings it down to 12 minutes for one build, for me.
        

        * WebCore.pro:

2008-01-18  Simon Hausmann  <hausmann@webkit.org>

        Reviewed by Holger.

        Fix fast/forms/button-state-restore.html
        
        Similar to the fix for fast/forms/form-post-urlencoded.html transform POST
        requests to data urls into GET.
        

        * platform/network/qt/QNetworkReplyHandler.cpp:
        (WebCore::QNetworkReplyHandler::start):

2008-01-18  Simon Hausmann  <hausmann@webkit.org>

        Reviewed by Holger.

        Fix LayoutTests/fast/cookies/local-file-can-set-cookies.html
        
        In WebCore::cookies() don't return the full raw form but only the name=value
        part. This fixes the getter part of the above test. The above test also
        requires a parsing fix in Qt 4.4's QNetworkCookie to fully pass.
        

        * platform/qt/CookieJarQt.cpp:
        (WebCore::cookies):

2008-01-18  Simon Hausmann  <hausmann@webkit.org>

        Reviewed by Holger.

        Fix svg/custom/path-getTotalLength.svg
        
        Path::apply creates a PathElement and its points array on the stack,
        to fill it in from the QPainterPath data and then use the platform
        independent path applier functions to calculate properties such as
        the length. For converting a QPainterPath::CurveToElement we need
        three points in the path element. However we allocated only two
        on the stack and as a result we got memory corruption and the
        failing test.
        

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

2008-01-18  Simon Hausmann  <hausmann@webkit.org>

        Reviewed by Holger.

        Fix LayoutTests/fast/dom/document-attribute-js-null.html
        
        Don't crash when trying to get/set cookies without a frameloader.
        

        * platform/qt/CookieJarQt.cpp:
        (WebCore::setCookies):
        (WebCore::cookies):

2008-01-18  Simon Hausmann  <hausmann@webkit.org>

        Reviewed by Holger.

        Fix fast/dom/xmlhttprequest-get.xhtml
        
        For local file requests remove the content length and the last-modified
        headers in the response.
        

        * platform/network/qt/QNetworkReplyHandler.cpp:
        (WebCore::QNetworkReplyHandler::sendResponseIfNeeded):

2008-01-18  Simon Hausmann  <hausmann@webkit.org>

        Reviewed by Holger.

        Fix fast/forms/form-post-urlencoded.html.
        
        Post requests on files don't really make sense, but for
        fast/forms/form-post-urlencoded.html we still need to retrieve the file,
        which means we map it to a Get instead.
        

        * platform/network/qt/QNetworkReplyHandler.cpp:
        (WebCore::QNetworkReplyHandler::start):

2008-01-18  Simon Hausmann  <hausmann@webkit.org>

        Reviewed by Holger.

        Make QNetworkReplyHandler::abort() more robust against multiple invocations.

        During DRT runs I see cancel() being called on the same handle multiple times. Guard
        against this a bit better by setting m_reply to 0 after we called abort() on it.

        * platform/network/qt/QNetworkReplyHandler.cpp:
        (WebCore::QNetworkReplyHandler::abort):

2008-01-18  Holger Hans Peter Freyther  <holger.freyther@trolltech.com>

        Reviewed by Simon.

        * httpBody() can return 0 and other ports (cf/mac) check for this condition
        * Looking at the cf/mac implementation we might need to call setHTTPBody somewhere
        as well.
        

        WARNING: NO TEST CASES ADDED OR CHANGED

        * platform/network/qt/QNetworkReplyHandler.cpp:
        (WebCore::QNetworkReplyHandler::start):

2008-01-18  Prasanth Ullattil  <prasanth.ullattil@trolltech.com>

        Reviewed by Simon Hausmann <hausmann@webkit.org>.

        Fix compilation in Win64(3): Due to the size of size_t cast the return value explicitly to double() to make sure the right Value() constructor is called.

        * xml/XPathFunctions.cpp:
        (WebCore::XPath::FunCount::evaluate):

2008-01-18  Holger Hans Peter Freyther  <holger.freyther@trolltech.com>

        Reviewed by Simon.

        * Remove our windowClipRect reimplementation and instead have our own
        Widget::invalidate implementation that is invalidating
        IntRect(0, 0, width(), height()) without trying to clip it (in contrast
        to Widget::invalidateRect)

        * platform/qt/PlatformScrollBar.h:
        * platform/qt/PlatformScrollBarQt.cpp:
        (WebCore::PlatformScrollbar::invalidate):

2008-01-18  Holger Hans Peter Freyther  <holger.freyther@trolltech.com>

        Reviewed by Simon.

        * Change the coordinate transformation in the PlatformMouseEvent handlers
        * We want to convert from coordinates of the containing window to our local
        position on the scrollbar.

        * platform/qt/PlatformScrollBarQt.cpp:
        (WebCore::PlatformScrollbar::handleMouseMoveEvent):
        (WebCore::PlatformScrollbar::handleMousePressEvent):

2008-01-18  Holger Hans Peter Freyther  <holger.freyther@trolltech.com>

        Reviewed by Simon.

        * Make the qDebug more usable. Do not have an additional newline and print
        the untranslated coordinates as well.

        * platform/qt/PlatformScrollBarQt.cpp:
        (WebCore::PlatformScrollbar::handleMouseMoveEvent):
        (WebCore::PlatformScrollbar::handleMousePressEvent):

2008-01-18  Holger Hans Peter Freyther  <holger.freyther@trolltech.com>

        Reviewed by Simon.

        * Dead code, remove it

        * platform/qt/PlatformScrollBarQt.cpp:

2008-01-18  Holger Hans Peter Freyther  <holger.freyther@trolltech.com>

        Reviewed by Simon.

        * Coding-Style fixes.

        * platform/qt/PlatformScrollBarQt.cpp:
        (WebCore::PlatformScrollbar::PlatformScrollbar):

2008-01-18  Holger Hans Peter Freyther  <holger.freyther@trolltech.com>

        Reviewed by Simon.

        * Coding-Style fix

        * platform/graphics/qt/ImageDecoderQt.cpp:
        (WebCore::ImageDecoderQt::ReadContext::ReadContext):

2008-01-17  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Darin Adler.

        Fixed: lots of WebCore leaks reported when quitting Safari
        
        If we're quitting with a GC still scheduled, do the GC before quitting.
        That way, WebCore's leak counters won't count objects that were
        scheduled for GC.

        * bindings/js/GCController.cpp:
        (WebCore::GCController::~GCController):
        (WebCore::GCController::garbageCollectNow):
        * bindings/js/GCController.h:

2008-01-17  Alp Toker  <alp@atoker.com>

        Reviewed by Oliver Hunt.

        gdk_screen_get_font_options() returns NULL if no default options are
        set so we always have to NULL check to avoid crashes later on since
        Cairo doesn't accept NULL font options.

        * platform/graphics/gtk/FontPlatformDataGtk.cpp:
        (WebCore::FontPlatformData::FontPlatformData):

2008-01-17  Antti Koivisto  <antti@apple.com>

        Reviewed by Adele.

        Windows fix for <rdar://problem/5605682>
        Disallow streaming protocols for media elements
        and <rdar://problem/5668711>
        Limit the container and codec types that the <video> tag supports
        
        - Disable unsupported QuickTime tracks types. 
        - Disallow streaming protocols (for now).

        * WebCore.vcproj/WebCore.vcproj:
        * platform/graphics/win/MediaPlayerPrivateQuickTimeWin.cpp:
        (WebCore::MediaPlayerPrivate::updateStates):
        * platform/graphics/win/QTMovieWin.cpp:
        (QTMovieWin::load):
        (QTMovieWin::disableUnsupportedTracks):
        * platform/graphics/win/QTMovieWin.h:

2008-01-17  Oliver Hunt  <oliver@apple.com>

        Support smart copy and paste during drag and drop
        
        Reviewed by Alice
        
        In order for the drag and drop tests in Windows DRT to pass
        we need to support smart cut and paste operations during
        drag and drop on windows.
        
        There is no layout test as drag and drop is still unsupported
        on windows.  Once supported smart drag/drop is tested by existing
        tests

        * platform/win/ClipboardUtilitiesWin.cpp:
        (WebCore::smartPasteFormat):
        * platform/win/ClipboardUtilitiesWin.h:
        * platform/win/ClipboardWin.cpp:
        (WebCore::ClipboardWin::writeRange):
        * platform/win/DragDataWin.cpp:

2008-01-17  Oliver Hunt  <oliver@apple.com>

        Reviewed by Anders.

        <rdar://problem/5692940> Crash when attempting to get text properties in
        SVG with no renderer

        We use the element renderer to calculate the text element bounds,
        however there was no check against the possibility of the text dimension
        properties being requested on a element with no renderer (eg. unattached, 
        display: none).

        Test: svg/text/text-property-with-display-none.html

        * svg/SVGTextContentElement.cpp:
        (WebCore::rootInlineBoxForTextContentElement):

2008-01-17  Anders Carlsson  <andersca@apple.com>

        Reviewed by Oliver.

        <rdar://problem/5636742>
        CrashTracer: [USER] 1302 crashes in Safari at com.apple.WebCore: WTF::Vector<char, 0ul>::reserveCapacity + 78
        
        When loading full-frame plug-ins, disable buffering data for the main resource loader. Otherwise, this can cause us
        to crash when loading large files such as movies in the browser. We already do this for embedded plug-ins.
        
        * WebCore.base.exp:
        * loader/DocumentLoader.h:
        (WebCore::DocumentLoader::mainResourceLoader):
        New accessor method.
        
        * loader/PluginDocument.cpp:
        (WebCore::PluginTokenizer::writeRawData):
        Disable buffering for the main resource loader.
        
        * loader/ResourceLoader.cpp:
        (WebCore::ResourceLoader::setShouldBufferData):
        * loader/ResourceLoader.h:
        Have this free the buffer when disabling buffering.

2008-01-17  Adam Roben  <aroben@apple.com>

        More Qt/GTK+ build fixing.

        * platform/gtk/ScrollViewGtk.cpp:
        * platform/qt/ScrollViewQt.cpp:

2008-01-17  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Darin.

        http://bugs.webkit.org/show_bug.cgi?id=16902
        <rdar://problem/5692566> fast/encoding/mailto-always-utf-8.html fails when run after
        fast/dom/Window/window-property-shadowing.html

        Test: fast/dom/Window/window-property-shadowing_.html

        * loader/FrameLoader.cpp: (WebCore::FrameLoader::clear): Clear the frame name, too.

2008-01-17  Adam Roben  <aroben@apple.com>

        Qt/GTK+ build fix.

        * platform/gtk/ScrollViewGtk.cpp:
        (WebCore::ScrollView::ScrollViewPrivate::isActive):
        * platform/qt/ScrollViewQt.cpp:
        (WebCore::ScrollView::ScrollViewPrivate::isActive):

2008-01-16  Adam Roben  <aroben@apple.com>

        Update scroll bars/form controls when FocusController::isActive changes

        Part of <rdar://5006915> Inactive look for Aqua controls

        Reviewed by Darin.

        All tests pass.

        * page/FocusController.cpp:
        (WebCore::FocusController::setActive): Update control tints when the
        active state changes.
        * page/FrameView.cpp:
        (WebCore::FrameView::updateControlTints): On Windows, we have to ask
        ScrollView to paint so that the outermost scroll bars will paint. On
        Mac, the outermost scroll bars are taken care of by NSScroller.
        * platform/PopupMenu.h: Updated for ScrollBarClient changes.
        * platform/ScrollBar.h: Added a new ScrollBarClient method.
        * platform/win/PlatformScrollBarSafari.cpp:
        (WebCore::PlatformScrollbar::paint): Invalidate when updating control
        tints so that we can paint with the new tint later.
        (WebCore::PlatformScrollbar::paintButton): Pass the active state down
        to SafariTheme.
        (WebCore::PlatformScrollbar::paintTrack): Ditto.
        (WebCore::PlatformScrollbar::paintThumb): Ditto.
        * platform/win/ScrollViewWin.cpp:
        (WebCore::ScrollView::ScrollViewPrivate::isActive): Added.
        (WebCore::ScrollView::paint): Pass paint calls on down if we're
        updating control tints so the scroll bars can invalidate.
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::isActive): Added.
        * rendering/RenderLayer.h:
        * rendering/RenderListBox.cpp:
        (WebCore::RenderListBox::isActive): Added.
        * rendering/RenderListBox.h:
        * rendering/RenderTheme.cpp:
        (WebCore::RenderTheme::isActive): Added.
        * rendering/RenderTheme.h:
        * rendering/RenderThemeSafari.cpp:
        (WebCore::RenderThemeSafari::determineState): Pass the active state
        down to SafariTheme.

2008-01-16  Adam Roben  <aroben@apple.com>

        Move focused/active state from Frame to SelectionController/FocusController

        This is the first part of <rdar://5006915> Inactive look for Aqua
        controls.

        The following methods were moved/renamed:
            - Frame::setIsActive -> FocusController::setActive
            - Frame::isActive -> SelectionController::isActiveAndFocused
            - Frame::setWindowHasFocus -> SelectionController::setFocused

        Active state is now correctly a Page-level concept.

        The Mac parts of this patch were written by Darin.

        Reviewed by Darin.

        All tests pass.

        * WebCore.base.exp: Updated for method renames.
        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::checkOneSelector): Ditto.
        * editing/SelectionController.cpp:
        (WebCore::SelectionController::SelectionController): Initialize new
        member.
        (WebCore::SelectionController::focusedOrActiveStateChanged): New
        private method. Most of this code came from Frame::setIsActive.
        (WebCore::SelectionController::pageActivationChanged): Added.
        (WebCore::SelectionController::setFocused): Added. Replaces
        Frame::setWindowHasFocus.
        (WebCore::SelectionController::isFocusedAndActive): Added. Replaces
        Frame::isActive.
        * editing/SelectionController.h:
        * page/FocusController.cpp:
        (WebCore::FocusController::FocusController): Initialize new member.
        (WebCore::FocusController::setFocusedFrame): Changed to just call
        SelectionController::setFocused, since active state has doesn't change
        when the focused frame changes.
        (WebCore::FocusController::setActive): Added. Replaces
        Frame::setIsActive.
        * page/FocusController.h:
        (WebCore::FocusController::isActive): Added.
        * page/Frame.cpp:
        (WebCore::Frame::setDocument): Updated for method renames.
        (WebCore::Frame::setFocusedNodeIfNeeded): Ditto.
        (WebCore::Frame::updateSecureKeyboardEntryIfActive): Ditto.
        (WebCore::FramePrivate::FramePrivate): Removed initialization of
        removed members.
        * page/Frame.h:
        * page/FramePrivate.h:
        * page/mac/WebCoreFrameBridge.h: Removed -selectionColor.
        * page/mac/WebCoreFrameBridge.mm: Ditto.
        * rendering/RenderListBox.cpp:
        (WebCore::RenderListBox::paintItemForeground): Updated for method
        renames.
        (WebCore::RenderListBox::paintItemBackground): Ditto.
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::selectionBackgroundColor): Ditto.
        (WebCore::RenderObject::selectionForegroundColor): Ditto.
        * rendering/RenderTextControl.cpp:
        (WebCore::RenderTextControl::capsLockStateMayHaveChanged): Ditto.
        * rendering/RenderTheme.cpp:
        (WebCore::RenderTheme::isFocused): Ditto.

2008-01-17  Holger Hans Peter Freyther  <holger.freyther@trolltech.com>

        Reviewed by Simon.

        * Make the nice 'safari' feature work on our port. When viewing a single image, clicking
        on the image will zoom it.
        * It seems like our platform can only determine the size of the image once it is completely
        loaded. Call m_doc->imageChanged on the last chunk of data as well.

        * loader/ImageDocument.cpp:
        (WebCore::ImageTokenizer::finish):

2008-01-17  Simon Hausmann  <hausmann@webkit.org>

        Reviewed by Lars.

        Set the library version of QtWebKit to the Qt version.

        * WebCore.pro:

2008-01-17  Simon Hausmann  <hausmann@webkit.org>

        Reviewed by Holger.

        Re-enable gzip compression as accepted encoding, now that the bug is fixed in Qt 4.4's network module.

        * platform/network/qt/QNetworkReplyHandler.cpp:
        (WebCore::QNetworkReplyHandler::QNetworkReplyHandler):

2008-01-17  Simon Hausmann  <hausmann@webkit.org>

        Another Windows build fix, setCookies accidentially had a const
        Document pointer.

        * platform/network/win/CookieJarWin.cpp:

2008-01-17  Simon Hausmann  <hausmann@webkit.org>

        MSVC Windows build fix. Forward declaring Document in CookieJar.h
        seems not enough for MSVC.

        * platform/network/win/CookieJarWin.cpp:

2008-01-17  Simon Hausmann  <hausmann@webkit.org>

        Reviewed by Maciej, Lars, Holger.

        http://bugs.webkit.org/show_bug.cgi?id=16589

        Add a document parameter to WebCore::cookies, setCookies and cookiesEnabled.

        * WebCore.pro:
        * bindings/js/kjs_navigator.cpp:
        (KJS::Navigator::getValueProperty):
        * dom/Document.cpp:
        (WebCore::Document::cookie):
        * platform/CookieJar.h:
        * platform/gtk/CookieJarGtk.cpp:
        (WebCore::setCookies):
        (WebCore::cookies):
        * platform/mac/CookieJar.mm:
        * platform/network/win/CookieJarWin.cpp:
        * platform/qt/CookieJarQt.cpp:
        (WebCore::setCookies):
        (WebCore::cookies):
        (WebCore::cookiesEnabled):
        * platform/wx/TemporaryLinkStubs.cpp:

2008-01-17  Simon Hausmann  <hausmann@webkit.org>

        Reviewed by Holger.

        Windows build fix. (use localtime_r again instead of _s)

        * loader/FTPDirectoryDocument.cpp:
        (WebCore::processFileDateString):

2008-01-17  Frans Englich  <fenglich@trolltech.com>

        Reviewed by Simon Hausmann <hausmann@webkit.org>.

        Fix linking on MinGW and at least one MSVC platform by having gmtimeQt in the correct namespace.

        * loader/FTPDirectoryDocument.cpp:

2008-01-17  Simon Hausmann  <hausmann@webkit.org>

        Reviewed by Holger.

        Don't link QtWebKit against libQtXml when building against Qt 4.4.

        This is not necessary anymore since QXmlStream has been moved into QtCore.

        * WebCore.pro:

2008-01-17  Håvard Wall  <hwall@trolltech.com>

        Reviewed by Simon Hausmann <hausmann@webkit.org>.

        Fix compilation on arm

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

2008-01-17  Simon Hausmann  <shausman@trolltech.com>

        Reviewed by Holger.

        Fix compilation against Qt 4.4 without files that are specific for the Qt 4.3 build.

        * WebCore.pro:
        * platform/network/qt/ResourceHandleQt.cpp:
        * platform/qt/MIMETypeRegistryQt.cpp:
        * platform/qt/PlugInInfoStoreQt.cpp:

2008-01-17  Frans Englich  <fenglich@trolltech.com>

        Reviewed by Simon Hausmann <hausmann@webkit.org>.

        Fixes compilation with MinGW.
        Neither localtime_r nor localtime_s are available on MingW, so instead of
        calling back to the thread-unsafe localtime use QDateTime instead.

        * loader/FTPDirectoryDocument.cpp:
        (WebCore::FTPDirectoryTokenizer::WebCore::processFilesizeString):
        (WebCore::FTPDirectoryTokenizer::WebCore::wasLastDayOfMonth):
        (WebCore::FTPDirectoryTokenizer::WebCore::WebCore::gmtimeQt):
        * loader/FTPDirectoryParser.cpp:
        (WebCore::parseOneFTPLine):

2008-01-17  Dan Bernstein  <mitz@apple.com>

        Reviewed by Dave Hyatt.

        - fix determinePitch for segmented fonts

        Covered by fast/css/font-face-implicit-local-font.html

        * platform/graphics/FontFallbackList.cpp:
        (WebCore::FontFallbackList::determinePitch): If the primary font is
        segmented, treat as fixed pitch only if it has only one segment
        and that segment is fixed-pitch.

2008-01-16  David Hyatt  <hyatt@apple.com>

        Fix for http://bugs.webkit.org/show_bug.cgi?id=16611

        Make sure vertical-align length values are offset from their parents rather than being absolute to the
        line.

        Reviewed by olliej

        Added fast/css/vertical-align-lengths.html

        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::getVerticalPosition):

2008-01-16  Dan Bernstein  <mitz@apple.com>

        Reviewed by Dave Hyatt.

        - fix for @font-face rules with unicode-range: always use a local font where not
          explicitly overlaid.

        Test: fast/css/font-face-implicit-local-font.html

        * css/CSSFontSelector.cpp:
        (WebCore::CSSFontSelector::addFontFaceRule): Changed to insert an implicit
        @font-face rule with the local font the matches the family and description before
        any explicit @font-face rules that overlay specific ranges of the same font.
        * css/CSSSegmentedFontFace.h:
        (WebCore::CSSSegmentedFontFace::numRanges): Addded.

2008-01-16  Antti Koivisto  <antti@apple.com>

        Fix Tiger build.

        * platform/graphics/mac/MediaPlayerPrivateQTKit.mm:
        (WebCore::MediaPlayerPrivate::disableUnsupportedTracks):

2008-01-16  Antti Koivisto  <antti@apple.com>

        Reviewed by Adele.
        
        OS X fix for <rdar://problem/5605682>
        Disallow streaming protocols for media elements
        and <rdar://problem/5668711>
        Limit the container and codec types that the <video> tag supports
        
        - Disable unsupported QuickTime tracks types. 
        - Disallow streaming protocols (for now).
        - Set QTMovie QTMoviePreventExternalURLLinksAttribute and QTSecurityPolicyNoCrossSiteAttribute 
          to limit QuickTime's access to external resources.
        
        Windows patch coming up.

        Tests: media/broken-video.html
               media/unsupported-rtsp.html
               media/unsupported-tracks.html

        * platform/graphics/mac/MediaPlayerPrivateQTKit.h:
        * platform/graphics/mac/MediaPlayerPrivateQTKit.mm:
        (WebCore::MediaPlayerPrivate::createQTMovie):
        (WebCore::MediaPlayerPrivate::updateStates):
        (WebCore::MediaPlayerPrivate::disableUnsupportedTracks):

2008-01-16  Rodney Dawes  <dobey@wayofthemonkey.com>

        Reviewed by Alp Toker.

        http://bugs.webkit.org/show_bug.cgi?id=16897
        Add shared plugins directory to INCLUDE path

        Add the plugins directory to INCLUDEPATH

        * GNUmakefile.am:
        * WebCore.pro:

2008-01-16  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Sam Weinig.
        
        Added a debug counter for SQL transactions. This helped me debug an SQL
        leak.

        * bindings/js/JSCustomSQLTransactionCallback.cpp:
        (WebCore::):
        (WebCore::JSCustomSQLTransactionCallbackCounter::~JSCustomSQLTransactionCallbackCounter):
        (WebCore::JSCustomSQLTransactionCallback::JSCustomSQLTransactionCallback):
        (WebCore::JSCustomSQLTransactionCallback::~JSCustomSQLTransactionCallback):
        * bindings/js/JSCustomSQLTransactionCallback.h:

        * bindings/js/kjs_window.cpp: Removed a silly comment.

2008-01-16  David Hyatt  <hyatt@apple.com>

        Fix for http://bugs.webkit.org/show_bug.cgi?id=14846, cell padding can't be changed dynamically.

        Reviewed by Eric Seidel

        Added fast/table/dynamic-cellpadding.html

        * html/HTMLTableElement.cpp:
        (WebCore::HTMLTableElement::parseMappedAttribute):
        * rendering/RenderTable.cpp:
        (WebCore::RenderTable::setCellPadding):
        * rendering/RenderTable.h:

2008-01-16  David Hyatt  <hyatt@apple.com>

        Fix for <rdar://problem/5681647> Item pages on http://www.stendmarsofa.com/ hang Safari

        This regression was caused by an attempt to implement a WinIE quirk in RenderBlock::calcInlinePrefWidths.
        The original patch introduced pathological O(n^2) behavior into this function even when the quirk didn't need
        to apply.  In addition the quirk was only partially implemented (the full quirk did not care what was adjacent
        to images and also needed bidi.cpp patched, since the quirk applies both when computing pref widths and when
        laying out).

        This new patch rewrites the quirk to be complete.  The original test case attached to the bug that tested a variety
        of image/text combinations now fully matches WinIE.

        Reviewed by Beth

        Added fast/table/unbreakable-images-quirk.html

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::calcInlinePrefWidths):
        * rendering/bidi.cpp:
        (WebCore::RenderBlock::findNextLineBreak):

2008-01-16  Rodney Dawes  <dobey@wayofthemonkey.com>

        Reviewed by Jon Honeycutt

        Move isPluginBlacklisted to PluginPackageWin.cpp, to avoid
        a circular dependency on PluginDatabaseWin
        Remove the getFileVersion method, and just check the versions directly
        in isPluginBlacklisted, as it was the only caller

        http://bugs.webkit.org/show_bug.cgi?id=16884

        * plugins/win/PluginDatabaseWin.cpp:
        * plugins/win/PluginDatabaseWin.h:
        * plugins/win/PluginPackageWin.cpp:
        * plugins/win/PluginPackageWin.h:

2008-01-16  Holger Hans Peter Freyther  <holger.freyther@trolltech.com>

        Reviewed by Lars.

        * Set the cursor on the containingWindow() instead of the
        nativeWidget()
        * This should be safe even with plugins as the cursor is set
        on the mouse events.

        * platform/qt/WidgetQt.cpp:
        (WebCore::Widget::setCursor):

2008-01-16  Brad Hughes  <bhughes@trolltech.com>

        Reviewed by Lars.

        Improve the sqlite3 dependency when building WebKit inside Qt.

        Build sqlite3 into QtWebKit if a system sqlite3 development package
        can't be found.

        * WebCore.pro:

2008-01-16  Lars Knoll  <lars@trolltech.com>

        Reviewed by Simon Hausmann <simon.hausmann@trolltech.com>.

        Implement GraphicsContext::clipOut and fix transparency layers.

        Transparency layers where broken in two ways: It always used the
        complete device rect as the size of the layer pixmap and the pixmaps
        where not correctly initialized to transparent.

        This fixes the worst drawing errors in the Inspector and makes drawing it
        10 times faster.

        * platform/graphics/qt/GraphicsContextQt.cpp:
        (WebCore::toQtLineJoin):
        (WebCore::TransparencyLayer::TransparencyLayer):
        (WebCore::GraphicsContextPlatformPrivate::p):
        (WebCore::GraphicsContext::platformContext):
        (WebCore::GraphicsContext::savePlatformState):
        (WebCore::GraphicsContext::restorePlatformState):
        (WebCore::GraphicsContext::drawRect):
        (WebCore::GraphicsContext::drawLine):
        (WebCore::GraphicsContext::drawEllipse):
        (WebCore::GraphicsContext::strokeArc):
        (WebCore::GraphicsContext::drawConvexPolygon):
        (WebCore::GraphicsContext::fillRect):
        (WebCore::GraphicsContext::fillRoundedRect):
        (WebCore::GraphicsContext::clip):
        (WebCore::GraphicsContext::drawFocusRing):
        (WebCore::GraphicsContext::beginTransparencyLayer):
        (WebCore::GraphicsContext::endTransparencyLayer):
        (WebCore::GraphicsContext::clearRect):
        (WebCore::GraphicsContext::strokeRect):
        (WebCore::GraphicsContext::setLineCap):
        (WebCore::GraphicsContext::setLineJoin):
        (WebCore::GraphicsContext::setMiterLimit):
        (WebCore::GraphicsContext::setAlpha):
        (WebCore::GraphicsContext::setCompositeOperation):
        (WebCore::GraphicsContext::clipOut):
        (WebCore::GraphicsContext::translate):
        (WebCore::GraphicsContext::origin):
        (WebCore::GraphicsContext::rotate):
        (WebCore::GraphicsContext::scale):
        (WebCore::GraphicsContext::clipOutEllipseInRect):
        (WebCore::GraphicsContext::addInnerRoundedRectClip):
        (WebCore::GraphicsContext::setPlatformStrokeStyle):
        (WebCore::GraphicsContext::setPlatformStrokeThickness):
        (WebCore::GraphicsContext::setPlatformFillColor):
        (WebCore::GraphicsContext::setUseAntialiasing):

2008-01-16  Lars Knoll  <lars@trolltech.com>

        Reviewed by Simon Hausmann <simon.hausmann@trolltech.com>.

        Trivially implement the themed search field by mapping it to a text field

        Also add a bunch of notImplemented warnings for other places where we don't
        have an implementatin in RenderTheme.

        * platform/qt/RenderThemeQt.cpp:
        (WebCore::RenderThemeQt::paintTextField):
        (WebCore::RenderThemeQt::paintMenuListButton):
        (WebCore::RenderThemeQt::adjustMenuListButtonStyle):
        (WebCore::RenderThemeQt::paintSliderTrack):
        (WebCore::RenderThemeQt::paintSliderThumb):
        (WebCore::RenderThemeQt::paintSearchField):
        (WebCore::RenderThemeQt::adjustSearchFieldStyle):
        (WebCore::RenderThemeQt::adjustSearchFieldCancelButtonStyle):
        (WebCore::RenderThemeQt::paintSearchFieldCancelButton):
        (WebCore::RenderThemeQt::adjustSearchFieldDecorationStyle):
        (WebCore::RenderThemeQt::paintSearchFieldDecoration):
        (WebCore::RenderThemeQt::adjustSearchFieldResultsDecorationStyle):
        (WebCore::RenderThemeQt::paintSearchFieldResultsDecoration):

2008-01-16  Holger Freyther  <holger.freyther@trolltech.com>

        Reviewed by Simon.

        * Follow the EventHandlerWin.cpp and always return true in the handlers.
        * Match the windows implementation more closely as well.
        * This is fixing "selection" bugs with the Web Inspector

        * page/qt/EventHandlerQt.cpp:
        (WebCore::EventHandler::focusDocumentView):
        (WebCore::EventHandler::passMousePressEventToSubframe):
        (WebCore::EventHandler::passMouseMoveEventToSubframe):
        (WebCore::EventHandler::passMouseReleaseEventToSubframe):
        (WebCore::EventHandler::passMousePressEventToScrollbar):

2008-01-16  Simon Hausmann  <hausmann@webkit.org>

        Reviewed by Lars Knoll <lars@trolltech.com>.

        Fix crashes in the new networking code.

        When the ResourceLoader cancels the handle we have to make sure not to access
        the resource handle afterwards again.

        * platform/network/qt/QNetworkReplyHandler.cpp:
        (WebCore::QNetworkReplyHandler::finish):
        (WebCore::QNetworkReplyHandler::forwardData):

2008-01-16  Lars Knoll  <lars@trolltech.com>

        Reviewed by Simon.

        add conversion methods from and to QUrl to KURL.

        Use them in the places I found at the moment. Fixes a bug
        where form data was encoded twice.
        Also fix QWebSettings to take a QUrl for the user style sheet
        location.

        * WebCore.pro:
        * platform/KURL.h:
        * platform/network/qt/QNetworkReplyHandler.cpp:
        (WebCore::QNetworkReplyHandler::sendResponseIfNeeded):
        * platform/network/qt/ResourceRequestQt.cpp:
        (WebCore::ResourceRequest::toNetworkRequest):
        * platform/qt/KURLQt.cpp: Added.
        (WebCore::KURL::KURL):
        (WebCore::KURL::operator QUrl):

2008-01-15  Darin Adler  <darin@apple.com>

        Rubber-stamped by Maciej Stachowiak and Oliver Hunt.

        - fix <rdar://problem/5689748> REGRESSION: Cannot redirect to protocols handled by external applications

        Put navigation policy delegate calls back for redirects.
        Just rolled out the change where I took them out.

        * loader/MainResourceLoader.cpp:
        (WebCore::MainResourceLoader::callContinueAfterNavigationPolicy):
        (WebCore::MainResourceLoader::continueAfterNavigationPolicy):
        (WebCore::MainResourceLoader::willSendRequest):
        * loader/MainResourceLoader.h:

2008-01-15  Adele Peterson  <adele@apple.com>

        Reviewed by Sam.

        Remove unused variable for old media control background drawing code.

        * rendering/RenderThemeMac.h:
        * rendering/RenderThemeMac.mm:
        (WebCore::RenderThemeMac::RenderThemeMac):
        (WebCore::RenderThemeMac::~RenderThemeMac):

2008-01-15  Sam Weinig  <sam@webkit.org>

        Reviewed by Geoffrey Garen.

        Fix <rdar://problem/5595552> r27608 introduced a 20% increase in JS binary size, 4% increase in WebCore binary size

        - Update JS Function implementations to use a static function based method. This decreases
          the binary size of an Intel only build by 1013.5K.

        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSDOMWindowCustom.cpp:
        (WebCore::JSDOMWindow::customGetOwnPropertySlot):
        * bindings/js/JSEventTargetBase.cpp:
        (WebCore::jsEventTargetAddEventListener):
        (WebCore::jsEventTargetRemoveEventListener):
        (WebCore::jsEventTargetDispatchEvent):
        (WebCore::retrieveEventTargetAndCorrespondingNode):
        * bindings/js/JSEventTargetBase.h:
        * bindings/js/JSHTMLInputElementBase.cpp:
        (WebCore::jsHTMLInputElementBaseFunctionSetSelectionRange):
        (WebCore::JSHTMLInputElementBase::getOwnPropertySlot):
        * bindings/js/JSHTMLInputElementBase.h:
        * bindings/js/JSLocation.cpp:
        (WebCore::JSLocation::getOwnPropertySlot):
        (WebCore::jsLocationProtoFuncReplace):
        (WebCore::jsLocationProtoFuncReload):
        (WebCore::jsLocationProtoFuncAssign):
        (WebCore::jsLocationProtoFuncToString):
        * bindings/js/JSLocation.h:
        * bindings/js/JSXMLHttpRequest.cpp:
        (KJS::jsXMLHttpRequestPrototypeFunctionAbort):
        (KJS::jsXMLHttpRequestPrototypeFunctionGetAllResponseHeaders):
        (KJS::jsXMLHttpRequestPrototypeFunctionGetResponseHeader):
        (KJS::jsXMLHttpRequestPrototypeFunctionOpen):
        (KJS::jsXMLHttpRequestPrototypeFunctionSend):
        (KJS::jsXMLHttpRequestPrototypeFunctionSetRequestHeader):
        (KJS::jsXMLHttpRequestPrototypeFunctionOverrideMIMEType):
        (KJS::jsXMLHttpRequestPrototypeFunctionAddEventListener):
        (KJS::jsXMLHttpRequestPrototypeFunctionRemoveEventListener):
        (KJS::jsXMLHttpRequestPrototypeFunctionDispatchEvent):
        * bindings/js/JSXMLHttpRequest.h:
        * bindings/js/JSXSLTProcessor.cpp:
        (KJS::jsXSLTProcessorPrototypeFunctionImportStylesheet):
        (KJS::jsXSLTProcessorPrototypeFunctionTransformToFragment):
        (KJS::jsXSLTProcessorPrototypeFunctionTransformToDocument):
        (KJS::jsXSLTProcessorPrototypeFunctionSetParameter):
        (KJS::jsXSLTProcessorPrototypeFunctionGetParameter):
        (KJS::jsXSLTProcessorPrototypeFunctionRemoveParameter):
        (KJS::jsXSLTProcessorPrototypeFunctionClearParameters):
        (KJS::jsXSLTProcessorPrototypeFunctionReset):
        * bindings/js/JSXSLTProcessor.h:
        * bindings/js/kjs_events.cpp:
        (WebCore::jsClipboardPrototypeFunctionClearData):
        (WebCore::jsClipboardPrototypeFunctionGetData):
        (WebCore::jsClipboardPrototypeFunctionSetData):
        (WebCore::jsClipboardPrototypeFunctionSetDragImage):
        * bindings/js/kjs_events.h:
        * bindings/js/kjs_navigator.cpp:
        (KJS::pluginsFunctionRefresh):
        (KJS::navigatorProtoFuncJavaEnabled):
        * bindings/js/kjs_navigator.h:
        * bindings/js/kjs_window.cpp:
        (KJS::Window::getOwnPropertySlot):
        (KJS::windowProtoFuncAToB):
        (KJS::windowProtoFuncBToA):
        (KJS::windowProtoFuncOpen):
        (KJS::windowProtoFuncSetTimeout):
        (KJS::windowProtoFuncClearTimeout):
        (KJS::windowProtoFuncSetInterval):
        (KJS::windowProtoFuncAddEventListener):
        (KJS::windowProtoFuncRemoveEventListener):
        (KJS::windowProtoFuncShowModalDialog):
        (KJS::windowProtoFuncNotImplemented):
        * bindings/js/kjs_window.h:
        * bindings/scripts/CodeGenerator.pm:
        * bindings/scripts/CodeGeneratorJS.pm:

2008-01-15  Adele Peterson  <adele@apple.com>

        Reviewed by Dan.

        Fix for <rdar://problem/5682492> With the <video> element, the audio is heard when forwarding or rewinding a movie while it's playing

        * rendering/MediaControlElements.cpp: (WebCore::MediaControlSeekButtonElement::defaultEventHandler):
          Instead of pausing the media when you stop seeking on mouse up, pause the video when you first start seeking on mouse down. 

2008-01-15  Alp Toker  <alp@atoker.com>

        Rubber-stamped by Anders.

        Make the HTTP backend configurable in the GTK+ port. curl is currently
        the only option.

        * GNUmakefile.am:

2008-01-15  Adele Peterson  <adele@apple.com>

        Build fix.

        * rendering/RenderThemeSafari.cpp: Removing MediaBackgroundAppearance.

2008-01-14  Samuel Weinig  <sam@webkit.org>

        Reviewed by Darin.

        Fix for <rdar://problem/5671040>
        REGRESSION: 6% HTML iBench regression from r28722 (getElementsByClassName)

        On my most consistent tests, this brings the HTML iBench from 1.46 -> 1.41,
        which does not completely make up reported regression, but I was not able to
        reproduce those findings either.

        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::matchRules):
        (WebCore::CSSStyleSelector::checkOneSelector):
        * dom/ClassNames.cpp:
        (WebCore::ClassNames::parseClassAttribute):
        * dom/ClassNames.h:
        (WebCore::ClassNames::contains):
        (WebCore::ClassNames::operator[]):

2008-01-15  Adele Peterson  <adele@apple.com>

        Build fix.  This time for real.

        * rendering/RenderThemeSafari.cpp:

2008-01-15  Adele Peterson  <adele@apple.com>

        Build fix.

        * rendering/RenderThemeSafari.cpp:

2008-01-15  Dan Bernstein  <mitz@apple.com>

        Reviewed by Darin Adler.

        - fix <rdar://problem/5666926> svg/custom/use-css-no-effect-on-shadow-tree.svg is failing

        * svg/SVGPreserveAspectRatio.cpp:
        (WebCore::SVGPreserveAspectRatio::getCTM): Changed the arguments' type
        from float to double in order to make the values passed to scale() and
        translate() on Mac OS X and on Windows the same.
        * svg/SVGPreserveAspectRatio.h:

2008-01-15  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Darin.

        <rdar://problem/5342813> REGRESSION: Safari encodes mailto URLs incorrectly

        Test: fast/encoding/mailto-always-utf-8.html

        * platform/KURL.cpp: (WebCore::encodeRelativeString): Always use UTF-8 for mailto URLs.

2008-01-15  Adele Peterson  <adele@apple.com>

        Reviewed by Adam and Antti.

        WebCore part of fix for <rdar://problem/5619062> Add load progress indicator to video controls

        * WebCore.base.exp: Removed symbol for wkGetMediaControlBackgroundImageData.  Added symbol for wkDrawMediaSliderTrack.
        * css/CSSPrimitiveValueMappings.h: (WebCore::CSSPrimitiveValue::CSSPrimitiveValue): Removed case for MediaBackgroundAppearance.
        * css/html4.css: Removed -webkit-appearance: media-background rule for the media panel element.  Removed unnecessary margin for slider.
        * rendering/RenderStyle.h: (WebCore::): Removed MediaBackgroundAppearance.

        * html/HTMLMediaElement.cpp: (WebCore::HTMLMediaElement::initAndDispatchProgressEvent):
          Call updateMediaPlayer more frequently so the load progress control gets updated appropriately.
        * platform/mac/WebCoreSystemInterface.h: Removed wkGetMediaControlBackgroundImageData.  Added wkDrawMediaSliderTrack.
        * platform/mac/WebCoreSystemInterface.mm: ditto.

        * rendering/RenderTheme.h: Removed paintMediaBackground. Added paintMediaSliderTrack.
        * rendering/RenderTheme.cpp: (WebCore::RenderTheme::paint): Call paintMediaSliderTrack for elements with MediaSliderAppearance.
        * rendering/RenderThemeMac.h: Removed paintMediaBackground. Added paintMediaSliderTrack.
        * rendering/RenderThemeMac.mm:
        (WebCore::RenderThemeMac::adjustSliderThumbSize): Added different sizes for the media slider thumb.
        (WebCore::RenderThemeMac::paintMediaSliderTrack): Added.  Calls wkDrawMediaSliderTrack with the percentage the media has loaded.
        * rendering/RenderThemeSafari.cpp: ditto.
        (WebCore::RenderThemeSafari::adjustSliderThumbSize):
        (WebCore::RenderThemeSafari::paintMediaSliderTrack):
        * rendering/RenderThemeSafari.h:

2008-01-15  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Mark Rowe.

        Some logging channels weren't initialized from user defaults.

        * platform/mac/LoggingMac.mm: (WebCore::InitializeLoggingChannelsIfNecessary):
        Initialize LogPlatformLeaks, LogStorageAPI, LogMedia, LogPlugin.

2008-01-14  Steve Falkenburg  <sfalken@apple.com>

        Use shared vsprops for most vcproj properties.
        
        Reviewed by Darin.

        * WebCore.vcproj/QTMovieWin.vcproj:
        * WebCore.vcproj/WebCore.vcproj:
        * platform/graphics/win/QTMovieWin.cpp:
        (QTMovieWin::initializeQuickTime): Fix compiler warning.

2008-01-14  Eric Seidel  <eric@webkit.org>

        Reviewed by mjs.

        Remove a couple more uses of DeprecatedString

        No functional changes, thus no test case.

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

2008-01-14  Pierre-Luc Beaudoin  <pierre-luc.beaudoin@collabora.co.uk>

        Reviewed by Alp Toker.

        Build fix: missing symbols when compiling WebKit/Gtk+ with --enable-svg-filters
        http://bugs.webkit.org/show_bug.cgi?id=16874

        * GNUmakefile.am:
        * svg/graphics/cairo/SVGResourceFilterCairo.cpp: Added.
        (WebCore::SVGResourceFilter::createPlatformData):
        (WebCore::SVGResourceFilter::prepareFilter):
        (WebCore::SVGResourceFilter::applyFilter):

2008-01-14  Finnur Thorarinsson  <finnur.webkit@gmail.com>

        Reviewed by hyatt & eseidel.

        - fix http://bugs.webkit.org/show_bug.cgi?id=16844
        RenderText::addLineBoxRects erroneously includes last char for boundingBox

        This patch fixes an issue with addLineBoxRects not correctly calculating the 
        rects due to an off-by-one error in using box->end(). We were assuming that 
        end() gives the index past the last character, when in fact it gives the 
        index _of_ the last character. 

        Eric Seidel and I could not find a way to test this via DRT. This method is 
        only used by WebKit or Safari for displaying selection rects AFAICT.

        * rendering/RenderText.cpp:
        (WebCore::RenderText::addLineBoxRects):

2008-01-14  Darin Adler  <darin@apple.com>

        Reviewed by Geoff.

        - fix crash seen in layout tests

        * html/HTMLFrameSetElement.cpp:
        (WebCore::HTMLFrameSetElement::attach):
        Remove incorrect cast to HTMLElement* for parentNode(). The parent is either an
        HTMLElement or a Document, not necessarily an HTMLElement.

2008-01-14  Darin Adler  <darin@apple.com>

        Reviewed by Sam.

        - fix mistakes Sam noticed in my re-speed-up patch

        * dom/Element.cpp:
        (WebCore::Element::virtualHasTagName): Moved out of header file. No reason to make
        this inline.
        * dom/Element.h: Moved virtualHasTagName out of header file.

        * dom/Node.cpp:
        (WebCore::Node::virtualHasTagName): Moved out of header file. No reason to make
        this inline.
        * dom/Node.h: Removed incorrect "virtual" on hasTagName and moved virtualHasTagName
        out of header file.

        * platform/text/StringBuffer.h: Added. Has just the new StringBuffer class.

        * platform/text/StringImpl.h: Removed StringBuffer class.

        * loader/DocumentLoader.cpp: Added StringBuffer.h include.
        * platform/text/String.cpp: Ditto.
        * platform/text/StringImpl.cpp: Ditto.
        * platform/text/TextCodecLatin1.cpp: Ditto.
        * platform/text/TextCodecUTF16.cpp: Ditto.
        * platform/text/TextCodecUserDefined.cpp: Ditto.

        * WebCore.vcproj/WebCore.vcproj: Added StringBuffer.h.
        * WebCore.xcodeproj/project.pbxproj: Ditto.

2008-01-14  Dave Hyatt  <hyatt@apple.com>

        Clean up all the misplaced graphics files after the recent file moves.  Clean up the project to
        accurately reflect the location of all the graphics files.
        
        Reviewed by Adam

        * WebCore.vcproj/WebCore.vcproj:
        * platform/graphics/win/GraphicsContextWin.cpp: Copied from platform/win/GraphicsContextWin.cpp.
        * platform/graphics/win/UniscribeController.cpp: Copied from platform/win/UniscribeController.cpp.
        * platform/graphics/win/UniscribeController.h: Copied from platform/win/UniscribeController.h.
        * platform/win/GraphicsContextWin.cpp: Removed.
        * platform/win/UniscribeController.cpp: Removed.
        * platform/win/UniscribeController.h: Removed.

2008-01-14  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Sam Weinig.
        
        Some cleanup to my last patch.

        Removed one unused setter declaration and one unused setter definition.
        
        Renamed DoNotCheckDomainSecurityOnRead to DoNotCheckDomainSecurityOnGet
        because "get" is all over the IDL files, and "read" is not.

        * bindings/scripts/CodeGeneratorJS.pm:
        * page/DOMWindow.h:
        (WebCore::DOMWindow::defaultstatus):
        * page/DOMWindow.idl:

2008-01-14  Dan Bernstein  <mitz@apple.com>

        Rubber-stamped by Alice Liu.

        - remove reference to nonexistent file

        * WebCore.vcproj/WebCore.vcproj: Removed reference to SVGFont.h.

2008-01-14  Darin Adler  <darin@apple.com>

        Reviewed by Adam.

        - re-speed-up the page load test (my StringImpl change slowed it down)
          <rdar://problem/5677241> 1.5% PLT regression from r29098

        To reverse the slowdown I caused by changing StringImpl, I tightened it up,
        and also did a little optimization in the HTML tokenizer and in other clients
        of Vector.

        * WebCore.base.exp: Removed export of a now-inline function.

        * css/CSSParser.cpp:
        (WebCore::CSSParser::parseTransitionProperty): Removed use of DeprecatedString
        to get property ID. This could be sped up even more by writing a fast path
        to use a local Vector<char> rather than allocating a string.
        (WebCore::convertASCIIToFloat): Added. Allows numeric conversion without
        allocating a string object to hold the number.
        (WebCore::CSSParser::lex): Changed to call convertASCIIToFloat instead of
        DeprecatedString::toFloat.

        * dom/Element.h:
        (WebCore::Element::hasTagName): Made this non-virtual and inline if you have
        an Element*. It's still virtual if you have a Node*.
        (WebCore::Element::virtualHasTagName): Virtual version that makes the Node*
        case work.

        * dom/Node.h:
        (WebCore::Node::hasTagName): Made this non-virtual and inline so that Element
        can override it with an inline. This is the same technique we use for
        firstChild and lastChild.
        (WebCore::Node::virtualHasTagName): This is the private virtual that Element
        overrides.

        * dom/Text.cpp:
        (WebCore::Text::splitText): Clean up by using a RefPtr here instead of a
        PassRefPtr.

        * html/HTMLTokenizer.cpp:
        (WebCore::HTMLTokenizer::parseSpecial): Use the new advancePastNonNewline(),
        which is more efficient in cases where we know the character is not a newline
        and hence we don't have to update the line number.
        (WebCore::HTMLTokenizer::parseComment): Ditto.
        (WebCore::HTMLTokenizer::parseServer): Ditto.
        (WebCore::HTMLTokenizer::parseProcessingInstruction): Ditto.
        (WebCore::HTMLTokenizer::parseText): Ditto.
        (WebCore::HTMLTokenizer::parseEntity): Ditto.
        (WebCore::HTMLTokenizer::parseTag): Ditto. Also streamline the QuotedValue case
        so there's one less branch taken for non-punctuation characters since this
        code path is *so* hot.
        (WebCore::HTMLTokenizer::write): More of the same.

        * loader/Cache.cpp:
        (WebCore::Cache::lruListFor): Use Vector::grow instead of resize.

        * loader/DocumentLoader.cpp:
        (WebCore::canonicalizedTitle): Use StringBuffer instead of Vector<UChar>.

        * loader/TextResourceDecoder.cpp:
        (WebCore::TextResourceDecoder::checkForCSSCharset): Use Vector::grow instead of resize.
        (WebCore::TextResourceDecoder::checkForHeadCharset): Ditto.
        (WebCore::TextResourceDecoder::decode): Use Vector::grow and shrink instead of resize.
        (WebCore::TextResourceDecoder::flush): Use Vector::shrink instead of resize.

        * platform/KURL.cpp:
        (WebCore::KURL::decode_string): Use Vector::grow instead of resize.

        * platform/SharedBuffer.cpp:
        (WebCore::SharedBuffer::clear): Use Vector::shrink instead of resize.

        * platform/graphics/BitmapImage.cpp:
        (WebCore::BitmapImage::cacheFrame): Use Vector::grow instead of resize.

        * platform/network/FormData.cpp:
        (WebCore::FormData::appendData): Use Vector::grow instead of resize.
        (WebCore::FormData::flatten): Ditto.

        * platform/text/AtomicString.cpp:
        (WebCore::CStringTranslator::translate): Use a new StringImpl constructor made just
        for use by AtomicString. Avoids setting fields twice, and also preserves reference
        count behavior (which I changed for the other constructors, since they're entirely
        private and used only inside the class).
        (WebCore::UCharBufferTranslator::translate): Ditto.

        * platform/text/Base64.cpp:
        (WebCore::base64Encode): Use Vector::grow instead of resize.
        (WebCore::base64Decode): Use Vector::grow and shrink instead of resize.

        * platform/text/PlatformString.h:
        (WebCore::String::adopt): Added an overload for the new StringBuffer class. Also
        made both versions inline.

        * platform/text/SegmentedString.h:
        (WebCore::SegmentedString::advancePastNewline): Added. One less branch for case
        where the character is known to be a newline.
        (WebCore::SegmentedString::advancePastNonNewline): Added. Less code for case where
        the character is known not to be a newline.

        * platform/text/String.cpp:
        (WebCore::String::append): Use StringBuffer instead of Vector<UChar>.
        (WebCore::String::insert): Ditto.
        (WebCore::String::truncate): Ditto.
        (WebCore::String::remove): Ditto.
        (WebCore::String::format): Use Vector::grow instead of resize.

        * platform/text/StringImpl.cpp:
        (WebCore::StringImpl::StringImpl): Changed constructors to start with a refCount
        of 1 instead of 0, and made them all inline. Eliminates the WithOneRef constructor
        since they all behave this way now. The only exceptions are the constructors for
        AtomicString, which retain the old behavior.
        (WebCore::StringImpl::empty): Simplified, since we no longer need to use the
        special WithOneRef constructor.
        (WebCore::StringImpl::toCoordsArray): Use StringBuffer instead of Vector<UChar>.
        (WebCore::StringImpl::lower): Ditto.
        (WebCore::StringImpl::upper): Ditto.
        (WebCore::StringImpl::secure): Ditto.
        (WebCore::StringImpl::foldCase): Ditto.
        (WebCore::StringImpl::simplifyWhiteSpace): Ditto. Also change to use Vector::shrink
        instead of resize (since half of the function uses Vector<UChar>).
        (WebCore::StringImpl::capitalize): Use StringBuffer instead of Vector<UChar>.
        (WebCore::StringImpl::replace): Ditto.
        (WebCore::StringImpl::ascii): Streamlined a bit.
        (WebCore::StringImpl::createStrippingNullCharacters): Use StringBuffer insetad of
        Vector<UChar>. Took out checks for null characters and 0 length that aren't needed.
        Coded the check for null characters in a slightly more efficient way. Since this
        is so hot, didn't call adopt at all, putting the code right in here, including
        the call to the StringImpl constructor and adoptRef (for the fast case).
        (WebCore::StringImpl::adopt): Added a version for the new StringBuffer class.
        Removed the attempt to resize the buffer at the time we adopt based on measuring
        actual use and realizing that it's just a character here or there and not worth
        a call to fastRealloc. Changed to use adoptRef since the constructor now starts
        with a refCount of 1.
        (WebCore::StringImpl::create): Changed to use adoptRef since the constructor now
        starts with a refCount of 1.
        (WebCore::StringImpl::createWithTerminatingNullCharacter): Ditto.
        (WebCore::StringImpl::copy): Ditto. Also made non-inline since the constructor
        itself is now inline.

        * platform/text/StringImpl.h: Added a StringBuffer class that's useful for
        putting characters into a buffer before creating an immutable string. Not good
        at resizing the way Vector<UChar> is, so only useful for things that rarely need
        to be resized. Added a new AdoptBuffer constructor and empty constructor, but
        made all constructors private so they can be inlined and only used inside the
        StringImpl class. Added two new constructors for AtomicString. Made copy()
        no longer inline. Changed the type of the [] operator to unsigned instead of
        int and added an assertion. Made the hash functions inline.

        * platform/text/TextCodecICU.cpp:
        (WebCore::TextCodecICU::encode): Use Vector::grow instead of resize.

        * platform/text/TextCodecLatin1.cpp:
        (WebCore::TextCodecLatin1::decode): Use StringBuffer instead of Vector<UChar>.
        (WebCore::encodeComplexWindowsLatin1): Use Vector::grow instead of resize.

        * platform/text/TextCodecUTF16.cpp:
        (WebCore::TextCodecUTF16::decode): Use StringBuffer instead of Vector<UChar>.

        * platform/text/TextCodecUserDefined.cpp:
        (WebCore::TextCodecUserDefined::decode): Use StringBuffer instead of Vector<UChar>.
        (WebCore::encodeComplexUserDefined): Use Vector::grow instead of resize.

        * platform/text/TextEncoding.cpp:
        (WebCore::TextEncoding::encode): Use Vector::grow instead of resize.

        * platform/text/TextStream.cpp:
        (WebCore::TextStream::operator<<): Use Vector::grow instead of resize.

        * platform/text/mac/TextCodecMac.cpp:
        (WebCore::TextCodecMac::encode): Use Vector::grow instead of resize.

        * rendering/AutoTableLayout.cpp:
        (WebCore::AutoTableLayout::insertSpanCell): Use Vector::grow instead of resize.

        * rendering/RenderFrameSet.h:
        (WebCore::FrameEdgeInfo::FrameEdgeInfo): Allocate vectors with the correct initial
        size instead of calling resize on them after allocating empty.

        * rendering/RenderListMarker.cpp:
        (WebCore::RenderListMarker::paint): Use Vector::grow instead of resize.

        * rendering/RenderStyle.cpp: Removed CursorList::operator==.
        * rendering/RenderStyle.h:
        (WebCore::CursorList::operator==): Implemented using the Vector ==.
        (WebCore::CursorList::operator!=): Ditto.

        * rendering/RenderTable.cpp:
        (WebCore::RenderTable::splitColumn): Use Vector::grow instead of resize.
        (WebCore::RenderTable::appendColumn): Ditto.

        * rendering/RenderTableSection.cpp:
        (WebCore::RenderTableSection::ensureRows): Use Vector::grow instead of resize.

        * rendering/bidi.cpp:
        (WebCore::addMidpoint): Use Vector::grow instead of resize.

        * xml/XPathNodeSet.h:
        (WebCore::XPath::NodeSet::clear): Use Vector::shrink instead of resize.

2008-01-13  Steve Falkenburg  <sfalken@apple.com>

        Share common files across projects.
        
        Unify vsprops files
        Debug:          common.vsprops, debug.vsprops
        Debug_Internal: common.vsprops, debug.vsprops, debug_internal.vsprops
        Release:        common.vsprops, release.vsprops
        
        Shared properties can go into common.vsprops, shared debug settings can go into debug.vsprops.
        debug_internal.vsprops will be mostly empty except for file path prefix modifiers.

        Pull auto-version.sh, VERSION, and PRODUCTVERSION from tools.

        Reviewed by Adam Roben.

        * WebCore.vcproj/PRODUCTVERSION: Removed.
        * WebCore.vcproj/QTMovieWin.vcproj:
        * WebCore.vcproj/VERSION: Removed.
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.vcproj/auto-version.sh: Removed.
        * WebCore.vcproj/debug.vsprops: Removed.
        * WebCore.vcproj/debug_internal.vsprops: Removed.
        * WebCore.vcproj/release.vsprops: Removed.

2008-01-13  Dan Bernstein  <mitz@apple.com>

        Reviewed by Darin Adler.

        - fix http://bugs.webkit.org/show_bug.cgi?id=16865
          fast/layers/resize-layer-deletion-crash.html crashes under GuardMalloc

        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::destroy): Removed the call to
        RenderLayer::destroy() from here, because ~RenderLayer() calls
        RenderObject() methods.
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::destroy): Added the call to
        RenderLayer::destroy() here.

2008-01-13  Eric Seidel  <eric@webkit.org>

        Reviewed by darin.

        Range.insertNode does not update endContainer endIndex correctly
        in the case where it had to split a text node.
        http://bugs.webkit.org/show_bug.cgi?id=16765
        
        Darin pointed out during review that we still don't handle the dynamic
        range case (where the dom tree changes not using range methods)
        Thus this code will get ripped out when we add that.  The test cases
        are still valid and useful however, so I'm landing this as-is.

        Tests: fast/dom/Range/range-insertNode-separate-endContainer.html
               fast/dom/Range/range-insertNode-splittext.html

        * dom/Range.cpp:
        (WebCore::Range::insertNode): handle the splitText case correctly.

2008-01-13  Darin Adler  <darin@apple.com>

        Reviewed by Eric.

        - http://bugs.webkit.org/show_bug.cgi?id=16861
          get rid of unnecessary string copying

        * dom/Document.cpp:
        (WebCore::Document::setDomain): Removed unneeded call to copy.
        (WebCore::Document::parseQualifiedName): Removed unneeded call to copy, and
        unneeded length argument to substring, which stops at the end of the string
        if you don't specify a length.
        (WebCore::Document::createAttributeNS): Replaced code that was calling copy
        with more-efficient code using the substring function.
        * dom/StyledElement.cpp:
        (WebCore::StyledElement::addCSSColor): Removed unneeded call to copy.
        * editing/InsertIntoTextNodeCommand.cpp:
        (WebCore::InsertIntoTextNodeCommand::InsertIntoTextNodeCommand): Removed
        unneeded copy and also initialized text instead of assigning to it.
        (WebCore::InsertIntoTextNodeCommand::doApply): Removed redundant assertions.
        (WebCore::InsertIntoTextNodeCommand::doUnapply): Ditto.

        * editing/htmlediting.cpp:
        (WebCore::stringWithRebalancedWhitespace): Removed unneeded call to copy.
        This one was particularly bad since we just turned around and copied it again!

        * editing/markup.cpp:
        (WebCore::stringValueForRange): Removed unneeded call to copy.

        * loader/icon/IconDatabase.cpp:
        (WebCore::IconDatabase::performOpenInitialization): Changed logging code to not
        get the path from the database object. This was the only reason the database
        had to keep its path around.

        * platform/sql/SQLiteDatabase.cpp:
        (WebCore::SQLiteDatabase::open): Use a local variable instead of a data member to
        convert the string to a null-terminated one.
        (WebCore::SQLiteDatabase::close): Removed the code to clear out m_path.
        * platform/sql/SQLiteDatabase.h: Removed the m_path data member and the path
        functio member. Also tweaked formatting and comments a bit. Removed the unused
        escapeSQLString function.

        * platform/text/String.cpp: (WebCore::operator+): Removed uneeded calls to copy.

2008-01-13  Oliver Hunt  <oliver@apple.com>

        Attempt to fix QT build

        * html/CanvasRenderingContext2D.cpp:
        (WebCore::CanvasRenderingContext2D::willDraw):

2008-01-13  Oliver Hunt  <oliver@apple.com>

        Reviewed by Mark Rowe.

        Avoid repainting the entire canvas element when possible.

        http://bugs.webkit.org/show_bug.cgi?id=16859

        We now only register the dirty regions of a canvas for repainting, rather
        than the entire element (though repaint coalescing may choose to combine
        these regions).  This doesn't cause a measurable regression in the worst
        case (clearing the canvas repeatedly), but is a moderate-large win if only
        a minor update has occurred.  If there is any CSS scaling applied to the
        canvas almost any update short of clearing the entire element is substantially
        faster.

        * html/CanvasRenderingContext2D.cpp:
        (WebCore::CanvasRenderingContext2D::willDraw):
        * html/HTMLCanvasElement.cpp:
        (WebCore::HTMLCanvasElement::willDraw):

2008-01-13  Michael Goddard  <michael.goddard@trolltech.com>

        Reviewed by Anders Carlsson.

        Move RuntimeObjectImp creations into Instance.
        Make the ctor protected, and Instance a friend class, so
        that all creation of RuntimeObjectImps goes through
        one place.

        * bindings/js/kjs_dom.cpp:
        (WebCore::getRuntimeObject):

2008-01-12  Rodney Dawes  <dobey@wayofthemonkey.com>

        Gtk debug build fix.  Reviewed by Mark Rowe.

        Add plugin logging channel, and use it rather than Win32-specific debugging methods _RPTF1 _RPTF2 and _CRT_WARN.

        * WebCore.pro: Add plugins directory to DEPENDPATH so dependencies are correctly tracked.
        * platform/Logging.cpp:
        * platform/Logging.h:
        * plugins/PluginDebug.h:

2008-01-12  Adam Barth  <hk9565@gmail.com>

        Reviewed by Maciej (and also tweaked a little bit).

        - more thorough fix for some crashing tests
          http://bugs.webkit.org/show_bug.cgi?id=16782

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::urlSelected):
        (WebCore::FrameLoader::submitForm):
        (WebCore::FrameLoader::executeIfJavaScriptURL):
        * loader/FrameLoader.h:

2008-01-12  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Sam.

        - fixed <rdar://problem/5556374> REGRESSION: cross-domain error when one URL uses an explicit port number and another doesn't
        
        * platform/SecurityOrigin.cpp:
        (WebCore::isDefaultPortForProtocol):
        (WebCore::SecurityOrigin::SecurityOrigin):

2008-01-11  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Oliver Hunt.
        
        Fixed <rdar://problem/5665251> REGRESSION (r28880-r28886): Global
        variable access (16644)
        
        Removed the ReadOnly bit from some properties, to match Firefox. Also
        removed status-related setters, to allow using their names as variable
        names.
        
        * bindings/scripts/CodeGeneratorJS.pm: Added support for properties that
        are one-way across domain boundaries, to match Firefox.

        * bindings/js/kjs_window.cpp: Changed ReadOnly declarations to match FF.

        * bindings/scripts/CodeGeneratorJS.pm: Don't use JSObject:: because
        we don't know that JSObject is our base class.

        * page/DOMWindow.idl: Replaced lots of readonly declarations with
        [Replaceable] declarations.

        * page/DOMWindow.h: Removed interfaces for setting status text via the
        DOM. (They were getting in the way of, e.g., "var status"
        declarations.) By default, IE 7 and FF disable these interfaces in order
        to defend against phishing attacks that try to spoof domain names in the
        statusbar.
        * page/DOMWindow.cpp:

2008-01-11  Anyang Ren  <anyang.ren@gmail.com>

        Reviewed by Darin Adler.

        http://bugs.webkit.org/show_bug.cgi?id=15960
        The view source mode should skip an empty attribute value only if
        the attribute name is not followed by an equal sign (=).

        Test: fast/frames/viewsource-empty-attribute-value.html

        * html/HTMLViewSourceDocument.cpp:
        (WebCore::HTMLViewSourceDocument::addViewSourceToken):

2008-01-11  Sylvain Pasche  <sylvain.pasche@gmail.com>

        Reviewed by Alp Toker.

        [Gtk] Uneven glyph spacing with subpixel antialiasing
        http://bugs.webkit.org/show_bug.cgi?id=16715

        Use cairo font options from the default GDK screen when creating a
        scaled font.

        * platform/graphics/gtk/FontPlatformDataGtk.cpp:
        (WebCore::FontPlatformData::FontPlatformData):

2008-01-11  Cameron Zwarich  <cwzwarich@uwaterloo.ca>

        Reviewed by Maciej.

        Added a new forwarding header, because Activation.h has been separated
        from function.h

        * ForwardingHeaders/kjs/Activation.h: Added.

2008-01-11  Luca Bruno  <lethalman88@gmail.com>

        Reviewed by Alp Toker.

        http://bugs.webkit.org/show_bug.cgi?id=16729
        [cURL] Allow multiple files for upload

        * platform/network/ResourceHandleInternal.h:
        (WebCore::ResourceHandleInternal::ResourceHandleInternal):
        * platform/network/curl/ResourceHandleCurl.cpp:
        (WebCore::ResourceHandleInternal::~ResourceHandleInternal):
        * platform/network/curl/ResourceHandleManager.cpp:
        (WebCore::readCallback): added
        (WebCore::ResourceHandleManager::setupPOST): setup for streaming the POST
        (WebCore::ResourceHandleManager::startJob):
        (WebCore::ResourceHandleManager::cancel): revert the previous patch for regression
        * platform/network/curl/ResourceHandleManager.h:

2008-01-11  Christian Dywan  <christian@imendio.com>

        Reviewed by Alp Toker.

        [Gtk] Menu items need underscores
        http://bugs.webkit.org/show_bug.cgi?id=16817

        Add underscores to appropriate menu labels.
        Also adjust strings slightly.

        * platform/gtk/ContextMenuItemGtk.cpp:
        (WebCore::ContextMenuItem::createNativeMenuItem):
        * platform/gtk/LocalizedStringsGtk.cpp:
        (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::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::searchMenuClearRecentSearchesText):

2008-01-11  Ada Chan  <adachan@apple.com>

        <rdar://problem/5681557> On Windows Safari, mouse events are ignored after clicking on link that triggers download
        Moved the call to cache page from provisionalLoadStarted() to commitProvisionalLoad(), since 
        provisionalLoadStarted() can be called for cases that do not result in a page navigation, for example,
        when a link to download a file has been clicked.

        Reviewed by John and Anders.

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::provisionalLoadStarted):
        (WebCore::FrameLoader::commitProvisionalLoad):

2008-01-11  Jon Honeycutt  <jhoneycutt@apple.com>

        Reviewed by Anders.

        <rdar://problem/5683529> plugins/embed-inside-object.html is timing
        out/failing

        Revert to using FrameTree::find() so that frame aliases like "_self" and
        "_current" are interpreted properly

        * plugins/win/PluginViewWin.cpp:
        (WebCore::PluginViewWin::performRequest):
        (WebCore::PluginViewWin::load):

2008-01-11  Alp Toker  <alp@atoker.com>

        Reviewed by Dave Hyatt and Mark Rowe.

        http://bugs.webkit.org/show_bug.cgi?id=16089
        [GTK] Support custom fonts, CachedFont::platformDataFromCustomData()

        Add support for CSS2 @font-face custom/downloadable fonts to the GTK+
        port.

        * GNUmakefile.am:
        * WebCore.pro:
        * loader/CachedFont.cpp:
        (WebCore::CachedFont::~CachedFont):
        (WebCore::CachedFont::ensureCustomFontData):
        (WebCore::CachedFont::platformDataFromCustomData):
        (WebCore::CachedFont::allReferencesRemoved):
        * platform/graphics/gtk/FontCustomPlatformData.cpp: Added.
        (WebCore::FontCustomPlatformData::~FontCustomPlatformData):
        (WebCore::FontCustomPlatformData::fontPlatformData):
        (WebCore::releaseData):
        (WebCore::createFontCustomPlatformData):
        * platform/graphics/gtk/FontCustomPlatformData.h: Added.
        (WebCore::FontCustomPlatformData::FontCustomPlatformData):
        * platform/graphics/gtk/FontPlatformData.h:
        * platform/graphics/gtk/FontPlatformDataGtk.cpp:
        (WebCore::FontPlatformData::FontPlatformData):
        (WebCore::FontPlatformData::init):
        (WebCore::FontPlatformData::isFixedPitch):
        * platform/graphics/gtk/SimpleFontDataGtk.cpp:
        (WebCore::SimpleFontData::platformDestroy):

2008-01-11  Adam Roben  <aroben@apple.com>

        Remove FrameLoader::committedFirstRealDocumentLoad
        
        This method no longer has any callers.

        Reviewed by Hyatt.

        * loader/FrameLoader.h:

2008-01-11  Antti Koivisto  <antti@apple.com>

        Add a standalone version of the blog post video player as a manual test.

        * manual-tests/resources/touch-poster.png: Added.
        * manual-tests/video-player.html: Added.

2008-01-10  Antti Koivisto  <antti@apple.com>

        Reviewed by Adam.

        Fix <rdar://problem/5682767>
        Video does not show up in http://webkit.org/blog/140/html5-media-support/ on Windows
        
        Take care that GWorld is created and deletes when needed as size or visibility changes.

        * platform/graphics/win/MediaPlayerPrivateQuickTimeWin.cpp:
        (WebCore::MediaPlayerPrivate::load):
        * platform/graphics/win/QTMovieWin.cpp:
        (QTMovieWinPrivate::QTMovieWinPrivate):
        (QTMovieWinPrivate::updateGWorld):
        (QTMovieWinPrivate::setSize):
        (QTMovieWin::setVisible):
        (QTMovieWin::initializeQuickTime):

2008-01-11  David Hyatt  <hyatt@apple.com>

        Fix for bug 11188, setting hspace on a table overrides align=center.  Fix align=center to be done using
        mapped attributes so that it does not get overridden by hspace all the time.

        Reviewed by mitz

        Added fast/table/table-hspace-align-center.html

        * css/html4.css:
        * html/HTMLTableElement.cpp:
        (WebCore::HTMLTableElement::parseMappedAttribute):

2008-01-11  Mark Rowe  <mrowe@apple.com>

        Qt build fix.

        * platform/qt/TemporaryLinkStubs.cpp: Include CString.h.

2008-01-11  Mark Rowe  <mrowe@apple.com>

        Qt build fix.  Add link stubs for the new FileSystem.h functions introduced
        in r29399.

        * platform/qt/TemporaryLinkStubs.cpp:
        (WebCore::openTemporaryFile):

2008-01-11  Rodney Dawes  <dobey@wayofthemonkey.com>

        Reviewed by Anders Carlsson.

        Bug 16779: Make the PluginStream implementation be shared across platforms
        http://bugs.webkit.org/show_bug.cgi?id=16779

        Add the new shared PluginStream files to the GTK+ and Win32 builds.
        Add PluginStreamClient class for the streamDidFinishLoading method.
        Add open/close/write methods to FileSystem for temporary file handling.
        Add PluginDebug.h and npfunctions.h for shared PluginStream.
        Add shared PluginStream.
        Remove PluginStreamWin.
        Update PluginViewWin to use shared PluginStream and PluginStreamClass.

        * GNUmakefile.am:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * platform/FileSystem.h:
        * platform/gtk/FileSystemGtk.cpp:
        * platform/win/FileSystemWin.cpp:
        * plugins/PluginDebug.h:
        * plugins/PluginStream.cpp:
        * plugins/PluginStream.h:
        * plugins/npfunctions.h:
        * plugins/win/PluginDebug: Moved to PluginDebug.h.
        * plugins/win/PluginStreamWin.cpp: Moved to PluginStream.cpp.
        * plugins/win/PluginStreamWin.h: Moved to PluginStream.h
        * plugins/win/PluginViewWin.cpp:
        * plugins/win/PluginViewWin.h:
        * plugins/win/npfunctions.h: Moved to npfunctions.h

2008-01-11  Geoffrey Garen  <ggaren@apple.com>

        Try to fix Mac build: Edit the right .exp file.

        * WebCore.base.exp:

2008-01-11  Geoffrey Garen  <ggaren@apple.com>

        Try to fix Qt build: don't use pthreads if they're not available.

        * bindings/js/GCController.cpp:

2008-01-10  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by John Sullivan.

        Fixed some world leak reports:
        * <rdar://problem/5669436> PLT complains about world leak of 1 JavaScript
        Interpreter after running cvs-base suite

        * <rdar://problem/5669423> PLT complains about world leak if browser
        window is open when PLT starts
        
        These were both bugs in the reporting mechanism, so I took the
        opportunity to do some house cleaning there.

        Stupid class, I kill you:
        * bridge/JavaScriptStatistics.cpp: Removed.
        * bridge/JavaScriptStatistics.h: Removed.

        * bindings/js/GCController.h: Adopted the only useful features of
        JavaScriptStatistics, since they were GC-related.
        * bindings/js/GCController.cpp:

2008-01-10  Eric Seidel  <eric@webkit.org>

        Reviewed by Adele.

        No functional changes, only code cleanup.

        * css/MediaQueryEvaluator.cpp:
        (WebCore::compareValue): renamed from cmpvalue
        (WebCore::colorMediaFeatureEval):
        (WebCore::device_aspect_ratioMediaFeatureEval):
        (WebCore::device_pixel_ratioMediaFeatureEval):
        (WebCore::gridMediaFeatureEval):
        (WebCore::device_heightMediaFeatureEval):
        (WebCore::device_widthMediaFeatureEval):
        (WebCore::heightMediaFeatureEval):
        (WebCore::widthMediaFeatureEval):

2008-01-10  Dan Bernstein  <mitz@apple.com>

        Reviewed by Anders Carlsson.

        - fix a crash when calling alert() from a repeating timer

        On non-Mac platforms, the PageGroupLoadDeferrer pauses DOM timers during
        alert() and other similar functions, which deletes the actual
        DOMWindowTimer objects and replaces them with new objects when resuming.

        * bindings/js/kjs_window.cpp:
        (KJS::Window::timerFired): Re-fetch the timer object from the map in
        case it has been deleted or replaced.

2008-01-10  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Sam.

        - remove SecurityOriginData and fold its functionality into SecurityOrigin

        * GNUmakefile.am:
        * WebCore.base.exp:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * WebCoreSources.bkl:
        * bindings/js/JSDOMWindowCustom.cpp:
        (WebCore::JSDOMWindow::postMessage):
        * dom/Document.cpp:
        (WebCore::Document::domain):
        * page/Chrome.cpp:
        (WebCore::Chrome::requestQuotaIncreaseForNewDatabase):
        (WebCore::Chrome::requestQuotaIncreaseForDatabaseOperation):
        * page/Chrome.h:
        * page/ChromeClient.h:
        * platform/SecurityOrigin.cpp:
        (WebCore::SecurityOrigin::copy):
        (WebCore::SecurityOrigin::createFromIdentifier):
        (WebCore::SecurityOrigin::stringIdentifier):
        * platform/SecurityOrigin.h:
        (WebCore::SecurityOrigin::host):
        (WebCore::SecurityOrigin::protocol):
        (WebCore::SecurityOrigin::port):
        (WebCore::SecurityOrigin::equal):
        * platform/SecurityOriginData.cpp: Removed.
        * platform/SecurityOriginData.h: Removed.
        * storage/Database.cpp:
        (WebCore::Database::openDatabase):
        (WebCore::Database::Database):
        (WebCore::Database::securityOriginCopy):
        * storage/Database.h:
        * storage/DatabaseTracker.cpp:
        (WebCore::SecurityOriginHash::hash):
        (WebCore::SecurityOriginHash::equal):
        (WebCore::SecurityOriginTraits::deletedValue):
        (WebCore::SecurityOriginTraits::emptyValue):
        (WebCore::DatabaseTracker::canEstablishDatabase):
        (WebCore::DatabaseTracker::hasEntryForOrigin):
        (WebCore::DatabaseTracker::hasEntryForDatabase):
        (WebCore::DatabaseTracker::establishEntryForOrigin):
        (WebCore::DatabaseTracker::fullPathForDatabase):
        (WebCore::DatabaseTracker::populateOrigins):
        (WebCore::DatabaseTracker::origins):
        (WebCore::DatabaseTracker::databaseNamesForOrigin):
        (WebCore::DatabaseTracker::detailsForNameAndOrigin):
        (WebCore::DatabaseTracker::setDatabaseDetails):
        (WebCore::DatabaseTracker::usageForDatabase):
        (WebCore::DatabaseTracker::usageForOrigin):
        (WebCore::DatabaseTracker::quotaForOrigin):
        (WebCore::DatabaseTracker::setQuota):
        (WebCore::DatabaseTracker::addDatabase):
        (WebCore::DatabaseTracker::deleteAllDatabases):
        (WebCore::DatabaseTracker::deleteDatabasesWithOrigin):
        (WebCore::DatabaseTracker::deleteDatabase):
        (WebCore::DatabaseTracker::deleteDatabaseFile):
        (WebCore::notificationQueue):
        (WebCore::DatabaseTracker::scheduleNotifyDatabaseChanged):
        (WebCore::DatabaseTracker::notifyDatabasesChanged):
        * storage/DatabaseTracker.h:
        * storage/DatabaseTrackerClient.h:
        * storage/SQLTransaction.cpp:
        (WebCore::SQLTransaction::openTransactionAndPreflight):
        (WebCore::SQLTransaction::runStatements):
        (WebCore::SQLTransaction::deliverQuotaIncreaseCallback):
        (WebCore::SQLTransaction::postflightAndCommit):
        (WebCore::SQLTransaction::cleanupAfterTransactionErrorCallback):
        * svg/graphics/SVGImageEmptyClients.h:
        (WebCore::SVGEmptyChromeClient::requestQuotaIncreaseForNewDatabase):
        (WebCore::SVGEmptyChromeClient::requestQuotaIncreaseForDatabaseOperation):

2008-01-10  Anders Carlsson  <andersca@apple.com>

        Reviewed by Sam.

        Use the correct frame loader load method. Using the old method would not cause a 
        new window to be open if the frame navigation was not allowed.
        
        * plugins/win/PluginViewWin.cpp:
        (WebCore::PluginViewWin::performRequest):

2008-01-10  Alp Toker  <alp@atoker.com>

        SVG font build fix for GTK+/autotools.

        * GNUmakefile.am:

2008-01-10  Adam Barth  <hk9565@gmail.com>

        Reviewed by Sam Weinig and Anders Carlsson.

        Fixes: http://bugs.webkit.org/show_bug.cgi?id=16522
        <rdar://problem/5657355>

        This patch makes two changes:

        1) Java calls FrameLoader::load in a slightly different way than
           JavaScript, which previously let a malicious web site bypass the
           shouldAllowNavigation check.  This patch adds that check to that
           code path.

        2) FrameLoader now wraps calls to m_frame->tree()->find(name) with
           findFrameForNavigation, which calls shouldAllowNavigation.  This
           treats disallowed frame navigations as if the named frame did not
           exist, resulting in a popup window when appropriate.

        Tests: http/tests/security/frameNavigation/xss-DENIED-plugin-navigation.html
               http/tests/security/frameNavigation/xss-DENIED-targeted-link-navigation.html

        * WebCore.base.exp:
        * bindings/js/kjs_window.cpp:
        (KJS::WindowProtoFuncOpen::callAsFunction):
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::createWindow):
        (WebCore::FrameLoader::load):
        (WebCore::FrameLoader::post):
        (WebCore::FrameLoader::findFrameForNavigation):
        * loader/FrameLoader.h:

2008-01-10  John Sullivan  <sullivan@apple.com>

        Written by Hyatt, reviewed by me
        
        - fixed <rdar://problem/5654297> Mail crashes occurs at WebCore::FontFallbackList::fontDataAt() when attempting to display 
          a <video> element that uses controls attribute

        * rendering/MediaControlElements.cpp:
        (WebCore::MediaControlShadowRootElement::MediaControlShadowRootElement):
        force the render style to inherit from the media element's style; Hyatt filed 5682383 to cover cleaning
        up this architecture, but this one-line fix will prevent the crash in the meantime

2008-01-10  Ada Chan  <adachan@apple.com>

        Fix fast/forms/input-radio-checked-tab.html
        Meta key is not the same as Alt key on windows.

        Reviewed by Darin.

        * platform/win/KeyEventWin.cpp:
        (WebCore::PlatformKeyboardEvent::PlatformKeyboardEvent):

2008-01-10  Anders Carlsson  <andersca@apple.com>

        Reviewed by Jon.

        Fix an assert that would happen when a plug-in tries to load a URL while a provisional load is going.
        
        * plugins/win/PluginViewWin.cpp:
        (WebCore::PluginViewWin::performRequest):
        Move document loader check here since we don't start loading until here and a new document load could have started in the meantime.
        
        (WebCore::PluginViewWin::requestTimerFired):
        Don't leak the plugin requests.
        
        (WebCore::PluginViewWin::load):

2008-01-10  Anders Carlsson  <andersca@apple.com>

        Reviewed by John Sullivan.

        <rdar://problem/5455889>
        REGRESSION: BumperCar crashes when attempting to load a long invalid URL
        
        Make sure to call FrameLoader::receivedMainResourceError before calling
        FrameLoader::didFailToLoad. The call to receivedMainResourceError takes care of
        clearing out the provisional document loader so that we won't call the didFail
        ResourceLoadDelegate method twice. This also makes us call the FrameLoadDelegate method
        didFailPrivisionalLoad before calling the ResourceLoadDelegate method, which Safari 2.0 does.
        
        * loader/MainResourceLoader.cpp:
        (WebCore::MainResourceLoader::receivedError):

2008-01-10  Antti Koivisto  <antti@apple.com>

        Reviewed by Adele.

        Fix <rdar://problem/5658048>
        After <video> has finished playing, dragging the scroller on different location of controller starts to play movie
        
        - Move to paused state if the playback had ended and the controller is used to seek to earlier time
        - Pause video playback during drag so the knob does not constantly try to escape from the mouse pointer

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::HTMLMediaElement):
        (WebCore::HTMLMediaElement::updateMediaPlayer):
        (WebCore::HTMLMediaElement::setPausedInternal):
        * html/HTMLMediaElement.h:
        * rendering/MediaControlElements.cpp:
        (WebCore::MediaControlTimelineElement::defaultEventHandler):

2008-01-10  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Adam Roben.

        <rdar://problem/5667003> fast/dom/xmlhttprequest-html-response-encoding.html is failing

        * xml/XMLHttpRequest.cpp: (WebCore::XMLHttpRequest::send): Do not disable sniffing for file://
        requests, as CFNetwork doesn't perform extension to MIME type mapping then.

2008-01-10  Adam Roben  <aroben@apple.com>

        Fixes to allow multiple FrameViews on Windows

        Reviewed by Hyatt.

        * page/FrameView.cpp:
        (WebCore::FrameView::FrameView): Added a new constructor that takes an
        IntSize to specify the FrameView's initial size.
        (WebCore::FrameView::scheduleRelayout): Added an assertion that our
        Document is not in the page cache.
        * page/FrameView.h:
        * platform/gtk/WidgetGtk.cpp:
        (WebCore::Widget::~Widget): Add a warm, fuzzy ASSERT.
        * platform/qt/WidgetQt.cpp:
        (WebCore::Widget::~Widget): Ditto.
        * rendering/RenderWidget.cpp:
        (WebCore::RenderWidget::setWidget): Make sure to remove any existing
        Widget from the Widget hierarchy before deleting it. One instance
        where this is needed is when setWidget is called during FrameView
        creation on Windows.

2008-01-10  Alp Toker  <alp@atoker.com>

        Include math.h to get ceilf(). Part of the SVG font GTK+ build fix.

        * svg/SVGFontFaceElement.cpp:

2008-01-10  Justin Garcia  <justin.garcia@apple.com>

        Reviewed by Alice Liu.

        <rdar://problem/5658603> Crash in InsertNodeBefore::doUnapply() on Undo in Yahoo Mail
        <rdar://problem/5658709> Crash in RenderView::setSelection on Undo in Yahoo Mail
        
        Make sure we have an updated layout before we perform any editing work.

        * editing/EditCommand.cpp:
        (WebCore::EditCommand::apply):
        (WebCore::EditCommand::unapply):
        (WebCore::EditCommand::reapply):

2008-01-10  Luca Bruno  <lethalman88@gmail.com>

        Reviewed by Alp Toker.

        Back out r29206 which was causing regressions in curl http job
        cancellation.

        * platform/network/curl/ResourceHandleManager.cpp
        (ResourceHandleManager::cancel): 

2008-01-10  Kevin McCullough  <kmccullough@apple.com>

        Reviewed by Darin, Sam, and Adam.

        - <rdar://problem/5654486> REGRESSION (Safari 3.0.4-TOT): clicking on
        - link in gmail message displays JavaScript alert falsely complaining
        about pop-up blocking
        - When trying to open a new window, we now see if the user gesture 
        occurred in the global dynamic object instead of the frame since that is
        the only place an event can occur. 

        * bindings/js/kjs_window.cpp: - Check the dynamic global object instead
        of the frame.
        (KJS::allowPopUp):
        (KJS::showModalDialog):
        (KJS::WindowProtoFuncOpen::callAsFunction):

2008-01-10  David Hyatt  <hyatt@apple.com>

        Fix for bug 16247, visibility:hidden not honored when hit testing inline replaced elements.

        Reviewed by adele

        Added fast/css/visibility-hit-test.html test case.

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

2008-01-10  Lars Knoll  <lars@trolltech.com>

        Reviewed by Simon.

        rename QWebPageHistory to QWebHistory.

        * WebCore.pro:

2008-01-10  Lars Knoll  <lars@trolltech.com>

        Reviewed by Simon.

        fix the drawing errors that where introduced due to refactoring.

        Correctly clip to the rectangle we want to draw in ScrollView::paint().

        * platform/qt/ScrollViewQt.cpp:
        (WebCore::ScrollView::paint):

2008-01-10  Simon Hausmann  <hausmann@webkit.org>

        Reviewed by Lars.

        Temporarily disable gzip decompression in qhttp due to a bug.

        * platform/network/qt/QNetworkReplyHandler.cpp:
        (WebCore::QNetworkReplyHandler::QNetworkReplyHandler):

2008-01-10  Simon Hausmann  <hausmann@webkit.org>

        Reviewed by Lars.

        http://bugs.webkit.org/show_bug.cgi?id=16588

        Added a (last) Frame argument to ResourceHandle::loadResourceSynchronously.
        This allows implementing the synchronous loading correctly for the Qt port where the networking
        backend is bound to the page.

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::loadResourceSynchronously):
        * platform/network/ResourceHandle.h:
        * platform/network/cf/ResourceHandleCFNet.cpp:
        * platform/network/curl/ResourceHandleCurl.cpp:
        * platform/network/mac/ResourceHandleMac.mm:
        * platform/network/qt/ResourceHandleQt.cpp:
        (WebCore::ResourceHandle::loadResourceSynchronously):

2008-01-10  Kevin Ollivier  <kevino@theolliviers.com>

        wx build fix for changes in r29328

        * WebCoreSources.bkl:

2008-01-09  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Sam.

        - refactor SecurityOrigin in preparation for merging with SecurityOriginData

        * platform/SecurityOrigin.cpp:
        (WebCore::SecurityOrigin::SecurityOrigin):
        (WebCore::SecurityOrigin::create):
        (WebCore::SecurityOrigin::createForFrame):
        * platform/SecurityOrigin.h:

2008-01-09  Ada Chan  <adachan@apple.com>

        Tabs with ctrl, meta, or altgraph modifier key down should not advance focus.

        Reviewed by Darin.

        Test: fast/forms/tabs-with-modifiers.html

        * page/EventHandler.cpp:
        (WebCore::EventHandler::defaultKeyboardEventHandler):
        (WebCore::EventHandler::defaultTabEventHandler): bail if ctrl, meta, or altgraph key is down.  
        Clean up the code a bit.
        * page/EventHandler.h:
        * page/FocusController.cpp: Remove the advanceFocus() that takes in a KeyboardEvent.  It was
        only called in EventHandler::defaultTabEventHandler() but we have cleaned up the code there and
        no longer needs it.
        * page/FocusController.h:

2008-01-09  Antti Koivisto  <antti@apple.com>

        Reviewed by Mitz.

        Fix http://bugs.webkit.org/show_bug.cgi?id=16376
        <rdar://problem/5665206>
        <video> element fails to play frames when navigating back to page (16376)
        
        Don't make MediaPlayer visible when it is actually in page cache.

        * rendering/RenderVideo.cpp:
        (WebCore::RenderVideo::updatePlayer):

2008-01-09  Anders Carlsson  <andersca@apple.com>

        Reviewed by Darin.

        <rdar://problem/5532361> 
        CrashTracer: 9840 crashes in Safari at com.apple.JavaScriptCore: KJS::Bindings::CInstance::~CInstance [in-charge deleting] + 35
        
        Clear the frame's plugin root objects so that they don't outlive the plugin bundle.
        
        * page/Frame.cpp:
        (WebCore::Frame::pageDestroyed):

2008-01-09  John Sullivan  <sullivan@apple.com>

        Reviewed by Adam Roben and Anders Carlsson
        
        - fixed <rdar://problem/5469398> Repro assertion failure in context menu code due to 
          missing-but-expected Reload item

        * platform/ContextMenu.cpp:
        (WebCore::ContextMenu::populate):
        use isLoadingInAPISense when deciding whether to include Stop or Reload in context
        menu, to match the WebKit API

2008-01-09  Mark Rowe  <mrowe@apple.com>

        Fix Windows debug build for opensource developers.

        * WebCore.vcproj/QTMovieWin.vcproj: Use the correct library suffix.

2007-10-01  Allan Sandfeld Jensen  <sandfeld@kde.org>

        Reworked by Eric, Reviewed by Hyatt.

        - fix http://bugs.webkit.org/show_bug.cgi?id=9454
        Add support for :lang inheritance and xml:lang support.

        Tests: fast/selectors/lang-inheritance.html
               fast/selectors/lang-inheritance2.html
               fast/selectors/lang-vs-xml-lang.html
               fast/selectors/lang-vs-xml-lang-xhtml.xhtml

        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::canShareStyleWithElement): Do not share style between elements with
        different LANG-attribute.
        (WebCore::CSSStyleSelector::checkOneSelector): Change :lang() to recursively check the LANG attribute
        for all the elements parents and the content-language of the document.
        * dom/Document.cpp:
        (WebCore::Document::processHttpEquiv): Parse MIME Content-Language
        * dom/Document.h:
        (WebCore::Document::contentLanguage):
        (WebCore::Document::setContentLanguage):

2008-01-08  Timothy Hatcher  <timothy@apple.com>

        Reviewed by Brady.

        Bug 16678: Unreproducible crash in KJS::JSObject::inherits() after using Web Inspector
        http://bugs.webkit.org/show_bug.cgi?id=16678

        Add a NULL check for controller before calling JSObjectSetPrivate.

        * page/InspectorController.cpp:
        (WebCore::InspectorController::~InspectorController):

2008-01-08  Xan Lopez  <xan@gnome.org>

        Reviewed by Alp Toker.

        http://bugs.webkit.org/show_bug.cgi?id=15610
        [GTK] Text rendering using Pango

        Use Pango to render Complex path text.

        * platform/graphics/gtk/FontGtk.cpp:
        (WebCore::utf16_to_utf8):
        (WebCore::convertUniCharToUTF8):
        (WebCore::setPangoAttributes):
        (WebCore::Font::drawGlyphs):
        (WebCore::Font::drawComplexText):
        (WebCore::Font::floatWidthForComplexText):
        (WebCore::Font::offsetForPositionForComplexText):

2008-01-08  Timothy Hatcher  <timothy@apple.com>

        Reviewed by Darin Adler.

        <rdar://problem/5665860> With the web inspector displayed, a crash occurs
        at WebCore::Frame::document() when navigating back to previous page

        This fixes the crash, but the inspector was totally broken with back/forward.
        So this also fixes back/forward navigation so the right main resource shows
        up in the inspector.

        * page/InspectorController.cpp:
        (WebCore::addSourceToFrame): Add some null checks for the frame when
        getting the textEncoding. This was the crash.
        (WebCore::InspectorController::addScriptResource): Create a script object
        only if needed, and always add it by calling addResource.
        (WebCore::InspectorController::didCommitLoad): Check if the loader is 
        loading from the page cache, and clear m_mainResource. If the load is
        normal, then call addAndUpdateScriptResource with the main resource. 
        (WebCore::InspectorController::identifierForInitialRequest): If the load
        is from the page cache and the resource is the main resource call
        addAndUpdateScriptResource since didCommitLoad did not do it.

2008-01-08  Alp Toker  <alp@atoker.com>

        Back out VIDEO by default in the GTK+ qmake build. The build bot
        doesn't have the necessary libraries installed.

        * WebCore.pro:

2008-01-08  Alp Toker  <alp@atoker.com>

        Win build fix for breakage introduced in r29328.

        * WebCore.vcproj/WebCore.vcproj:

2008-01-08  Alp Toker  <alp@atoker.com>

        Rubber-stamped by Mark Rowe.

        Enable VIDEO by default in the GTK+ qmake build.

        * WebCore.pro:

2008-01-08  Alp Toker  <alp@atoker.com>

        GTK+ VIDEO build fix for breakage introduced in r29328.

        Issue noticed by Ori_B.

        * GNUmakefile.am:
        * WebCore.pro:

2008-01-08  Antti Koivisto  <antti@apple.com>

        Reviewed by Darin.
        
        HTMLAudioElement needs generated constructor. Otherwise video instanceof HTMLAudioElement is true which is 
        bit strange.
        
        Renamed custom constructor JSHTMLAudioElementConstructor to JSAudioConstructor to avoid name clashes.

        Test: media/constructors.html

        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSAudioConstructor.cpp: Copied from WebCore/bindings/js/JSHTMLAudioElementConstructor.cpp.
        (WebCore::JSAudioConstructor::JSAudioConstructor):
        (WebCore::JSAudioConstructor::implementsConstruct):
        (WebCore::JSAudioConstructor::construct):
        * bindings/js/JSAudioConstructor.h: Copied from WebCore/bindings/js/JSHTMLAudioElementConstructor.h.
        * bindings/js/JSHTMLAudioElementConstructor.cpp: Removed.
        * bindings/js/JSHTMLAudioElementConstructor.h: Removed.
        * bindings/js/kjs_window.cpp:
        (KJS::Window::getValueProperty):
        * html/HTMLAudioElement.idl:

2008-01-08  Anders Carlsson  <andersca@apple.com>

        Reviewed by Mitz.

        Don't add the applet widget to the view, that's done later by RenderApplet.
            
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::createJavaAppletWidget):

2008-01-08  Antti Koivisto  <antti@apple.com>

        Reviewed by Weinig.
        
        Add security check for Audio constructor.

        * bindings/js/kjs_window.cpp:
        (KJS::Window::getValueProperty):

2008-01-08  Timothy Hatcher  <timothy@apple.com>

        Reviewed by Adam Roben.

        <rdar://problem/5676515> List of scripts and images missing when opening Web Inspector from new window (16567)

        InspectorController::didLoadResourceFromMemoryCache was not being called for
        resources that loaded from the memory cache that the FrameLoader's client
        has already been notified about. This fix always calls the InspectorController
        when loading a memory cached resource. No test possible for the Web Inspector.

        * loader/DocLoader.cpp:
        (WebCore::DocLoader::checkCacheObjectStatus): Moved most of the logic to
        FrameLoader::loadedResourceFromMemoryCache so the InspectorController can always be notified.
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::didTellClientAboutLoad): Renamed from didTellBridgeAboutLoad.
        (WebCore::FrameLoader::haveToldClientAboutLoad): Renamed from haveToldBridgeAboutLoad.
        (WebCore::FrameLoader::loadResourceSynchronously): Call the renamed didTellClientAboutLoad.
        (WebCore::FrameLoader::loadedResourceFromMemoryCache): Only takes a CachedResource now.
        Always call InspectorController. If the resource's sendResourceLoadCallbacks is false or
        didTellClientAboutLoad is true, do an early return. Otherwise call the client and call
        didTellClientAboutLoad.
        (WebCore::FrameLoader::dispatchDidLoadResourceFromMemoryCache): Removed, work now done
        in FrameLoader::loadedResourceFromMemoryCache.
        * loader/FrameLoader.h: Renamed {didTell,haveTold}BridgeAboutLoad to {didTell,haveTold}ClientAboutLoad.
        Made loadedResourceFromMemoryCache only take a CachedResource. Renamed m_urlsBridgeKnowsAbout to 
        m_urlsClientKnowsAbout.
        * loader/SubresourceLoader.cpp:
        (WebCore::SubresourceLoader::load): Call the renamed didTellClientAboutLoad.

2008-01-08  Dan Bernstein  <mitz@apple.com>

        Rubber-stamped by Sam Weinig.

        - prefix all member variables in CSSStyleSelector with m_

        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::CSSStyleSelector):
        (WebCore::CSSStyleSelector::init):
        (WebCore::CSSStyleSelector::setEncodedURL):
        (WebCore::CSSStyleSelector::loadDefaultStyle):
        (WebCore::CSSStyleSelector::matchRules):
        (WebCore::CSSStyleSelector::matchRulesForList):
        (WebCore::CSSStyleSelector::initElementAndPseudoState):
        (WebCore::CSSStyleSelector::initForStyleResolve):
        (WebCore::CSSStyleSelector::canShareStyleWithElement):
        (WebCore::CSSStyleSelector::locateSharedStyle):
        (WebCore::CSSStyleSelector::matchUARules):
        (WebCore::CSSStyleSelector::styleForElement):
        (WebCore::CSSStyleSelector::pseudoStyleForElement):
        (WebCore::CSSStyleSelector::updateFont):
        (WebCore::CSSStyleSelector::cacheBorderAndBackground):
        (WebCore::CSSStyleSelector::checkSelector):
        (WebCore::CSSStyleSelector::checkOneSelector):
        (WebCore::CSSStyleSelector::applyProperty):
        (WebCore::CSSStyleSelector::mapBackgroundImage):
        (WebCore::CSSStyleSelector::mapBackgroundSize):
        (WebCore::CSSStyleSelector::mapBackgroundXPosition):
        (WebCore::CSSStyleSelector::mapBackgroundYPosition):
        (WebCore::CSSStyleSelector::checkForTextSizeAdjust):
        (WebCore::CSSStyleSelector::getColorFromPrimitiveValue):
        * css/CSSStyleSelector.h:
        (WebCore::CSSStyleSelector::):
        (WebCore::CSSRuleData::CSSRuleData):
        (WebCore::CSSRuleDataList::CSSRuleDataList):
        (WebCore::CSSRuleDataList::append):
        * css/SVGCSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::applySVGProperty):
        * rendering/RenderStyle.cpp:
        (WebCore::RenderStyle::isStyleAvailable):

2008-01-08  David D. Kilzer  <ddkilzer@apple.com>

        Removed unnecessary files from Copy Bundle Resources build phase.

        Reviewed by Sam.

        * WebCore.xcodeproj/project.pbxproj: Files removed from build phase:
        DOMCoreException.idl
        EventException.idl
        MessageEvent.idl
        SVGAElement.idl
        SVGAngle.idl
        SVGAnimateColorElement.idl
        SVGAnimateElement.idl
        SVGAnimateTransformElement.idl
        SVGAnimatedAngle.idl
        SVGAnimatedBoolean.idl
        SVGAnimatedEnumeration.idl
        SVGAnimatedInteger.idl
        SVGAnimatedLength.idl
        SVGAnimatedLengthList.idl
        SVGAnimatedNumber.idl
        SVGAnimatedNumberList.idl
        SVGAnimatedPathData.idl
        SVGAnimatedPoints.idl
        SVGAnimatedPreserveAspectRatio.idl
        SVGAnimatedRect.idl
        SVGAnimatedString.idl
        SVGAnimatedTransformList.idl
        SVGAnimationElement.idl
        SVGCSSPropertyNames.in
        SVGCSSValueKeywords.in
        SVGCircleElement.idl
        SVGClipPathElement.idl
        SVGColor.idl
        SVGComponentTransferFunctionElement.idl
        SVGCursorElement.idl
        SVGDefinitionSrcElement.idl
        SVGDefsElement.idl
        SVGDescElement.idl
        SVGDocument.idl
        SVGElement.idl
        SVGElementInstance.idl
        SVGElementInstanceList.idl
        SVGEllipseElement.idl
        SVGException.idl
        SVGExternalResourcesRequired.idl
        SVGFEBlendElement.idl
        SVGFEColorMatrixElement.idl
        SVGFEComponentTransferElement.idl
        SVGFECompositeElement.idl
        SVGFEDiffuseLightingElement.idl
        SVGFEDisplacementMapElement.idl
        SVGFEDistantLightElement.idl
        SVGFEFloodElement.idl
        SVGFEFuncAElement.idl
        SVGFEFuncBElement.idl
        SVGFEFuncGElement.idl
        SVGFEFuncRElement.idl
        SVGFEGaussianBlurElement.idl
        SVGFEImageElement.idl
        SVGFEMergeElement.idl
        SVGFEMergeNodeElement.idl
        SVGFEOffsetElement.idl
        SVGFEPointLightElement.idl
        SVGFESpecularLightingElement.idl
        SVGFESpotLightElement.idl
        SVGFETileElement.idl
        SVGFETurbulenceElement.idl
        SVGFilterElement.idl
        SVGFilterPrimitiveStandardAttributes.idl
        SVGFitToViewBox.idl
        SVGFontElement.idl
        SVGFontFaceElement.idl
        SVGFontFaceFormatElement.idl
        SVGFontFaceNameElement.idl
        SVGFontFaceSrcElement.idl
        SVGFontFaceUriElement.idl
        SVGForeignObjectElement.idl
        SVGGElement.idl
        SVGGlyphElement.idl
        SVGGradientElement.idl
        SVGImageElement.idl
        SVGLangSpace.idl
        SVGLength.idl
        SVGLengthList.idl
        SVGLineElement.idl
        SVGLinearGradientElement.idl
        SVGLocatable.idl
        SVGMarkerElement.idl
        SVGMaskElement.idl
        SVGMatrix.idl
        SVGMetadataElement.idl
        SVGMissingGlyphElement.idl
        SVGNumber.idl
        SVGNumberList.idl
        SVGPaint.idl
        SVGPathElement.idl
        SVGPathSeg.idl
        SVGPathSegArcAbs.idl
        SVGPathSegArcRel.idl
        SVGPathSegClosePath.idl
        SVGPathSegCurvetoCubicAbs.idl
        SVGPathSegCurvetoCubicRel.idl
        SVGPathSegCurvetoCubicSmoothAbs.idl
        SVGPathSegCurvetoCubicSmoothRel.idl
        SVGPathSegCurvetoQuadraticAbs.idl
        SVGPathSegCurvetoQuadraticRel.idl
        SVGPathSegCurvetoQuadraticSmoothAbs.idl
        SVGPathSegCurvetoQuadraticSmoothRel.idl
        SVGPathSegLinetoAbs.idl
        SVGPathSegLinetoHorizontalAbs.idl
        SVGPathSegLinetoHorizontalRel.idl
        SVGPathSegLinetoRel.idl
        SVGPathSegLinetoVerticalAbs.idl
        SVGPathSegLinetoVerticalRel.idl
        SVGPathSegList.idl
        SVGPathSegMovetoAbs.idl
        SVGPathSegMovetoRel.idl
        SVGPatternElement.idl
        SVGPoint.idl
        SVGPointList.idl
        SVGPolygonElement.idl
        SVGPolylineElement.idl
        SVGPreserveAspectRatio.idl
        SVGRadialGradientElement.idl
        SVGRect.idl
        SVGRectElement.idl
        SVGRenderingIntent.idl
        SVGSVGElement.idl
        SVGScriptElement.idl
        SVGSetElement.idl
        SVGStopElement.idl
        SVGStringList.idl
        SVGStylable.idl
        SVGStyleElement.idl
        SVGSwitchElement.idl
        SVGSymbolElement.idl
        SVGTRefElement.idl
        SVGTSpanElement.idl
        SVGTests.idl
        SVGTextContentElement.idl
        SVGTextElement.idl
        SVGTextPathElement.idl
        SVGTextPositioningElement.idl
        SVGTitleElement.idl
        SVGTransform.idl
        SVGTransformList.idl
        SVGTransformable.idl
        SVGURIReference.idl
        SVGUnitTypes.idl
        SVGUseElement.idl
        SVGViewElement.idl
        SVGViewSpec.idl
        SVGZoomAndPan.idl
        SVGZoomEvent.idl
        XMLHttpRequestException.idl
        XPathException.idl
        character-sets.txt
        mac-encodings.txt
        make-charset-table.pl
        svgattrs.in
        svgtags.in
        xlinkattrs.in

2008-01-08  Luca Bruno  <lethalman88@gmail.com>

        Reviewed by Alp Toker.

        Support copying the selected URL to the clipboard.

        * platform/gtk/PasteboardGtk.cpp:
        (WebCore::Pasteboard::writeURL): implemented

2008-01-08  David D. Kilzer  <ddkilzer@webkit.org>

        Renamed CharacterData::m_str to m_data

        Rubber-stamped by Adam again.

        No test cases added since there is no change in behavior.

        * dom/CDATASection.cpp:
        * dom/CharacterData.cpp:
        (WebCore::CharacterData::CharacterData):
        (WebCore::CharacterData::setData):
        (WebCore::CharacterData::substringData):
        (WebCore::CharacterData::appendData):
        (WebCore::CharacterData::insertData):
        (WebCore::CharacterData::deleteData):
        (WebCore::CharacterData::replaceData):
        (WebCore::CharacterData::nodeValue):
        (WebCore::CharacterData::containsOnlyWhitespace):
        (WebCore::CharacterData::dispatchModifiedEvent):
        (WebCore::CharacterData::checkCharDataOperation):
        (WebCore::CharacterData::dump):
        * dom/CharacterData.h:
        * dom/Comment.cpp:
        * dom/Text.cpp:
        (WebCore::Text::splitText):
        (WebCore::Text::createRenderer):
        (WebCore::Text::recalcStyle):

2008-01-08  Steve Falkenburg  <sfalken@apple.com>

        Fix a couple of compiler warnings.
        
        Reviewed by Mitz.

        * platform/win/ThreadingWin.cpp:
        * platform/win/UniscribeController.cpp: Remove unused function.
        (WebCore::UniscribeController::advance): Fix bogus warning about un-initialized variable.

2008-01-08  Adele Peterson  <adele@apple.com>

        Reviewed by Darin.

        Fix for <rdar://problem/5674667> fast/forms/slider-mouse-events.html is broken by media control checkin 29257

        * rendering/RenderSlider.cpp: (WebCore::HTMLSliderThumbElement::defaultEventHandler):
          After fixing a bug in EventHandler to make sure events always go to the capturing node, this bug was exposed.
          MouseMove and MouseUp events were going to the thumb element, but not to the slider input element.  
          This change makes the input element the capturing node, and then the input element forwards the mouse events to the thumb element.
          I also added a missing call to setDefaultHandled for the mousemove event.

2008-01-08  Adele Peterson  <adele@apple.com>

        Reviewed by Adam. 

        * rendering/RenderThemeSafari.cpp: Use the SafariTheme version number to decide whether or not to
        paint the media controls in RenderThemeSafari.

2008-01-08  Oliver Hunt  <oliver@apple.com>

        Reviewed by Adele and John.

        Fix <rdar://problem/5652740> Crash occurs at WebCore::Widget::getView() after
        dragging file into window that contains web page ( http://www.econocraft.com/flood_arch.htm )

        We hit this crash if the page reloads between DragController::dragUpdated
        and DragController::performDrag, meaning that m_document starts pointing to
        a now viewless document.  This is picked up by an assertion in performDrag
        which I have now replaced with an assignment given that the assertion is 
        invalid -- it is possible for m_document to be changed between dragUpdated
        performDrag

        * page/DragController.cpp:
        (WebCore::DragController::performDrag):

2008-01-08  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Darin.

        <rdar://problem/5659812> CrashTracer: 462 crashes in Safari at com.apple.WebCore:
        WebCore::Node::setChanged + 96

        Test: fast/dom/cssTarget-crash.html

        * dom/Node.cpp: (WebCore::Node::removedFromDocument):
        Check to see if the node being removed is currently set as the Document's cssTarget.
        If it is, clear the cssTarget to prevent a hanging reference to it.

2008-01-08  Adam Roben  <aroben@apple.com>

        * bindings/scripts/CodeGeneratorJS.pm: Touch this so the bindings will
        rebuild on Windows now that the media elements are enabled.

2008-01-08  Adam Roben  <aroben@apple.com>

        * svg/svgtags.in: Touch this again for the sake of the Windows bots.

2008-01-08  Timothy Hatcher  <timothy@apple.com>

        Reviewed by Adam Roben.

        Use JSRetainPtr in the Web Inspector everywhere we own a JSStringRef.
        Also added some #pragma marks to help find places in the file.

        * page/InspectorController.cpp:
        (WebCore::callSimpleFunction): Use JSRetainPtr<JSStringRef>.
        And return the result of JSObjectCallAsFunction.
        (WebCore::search): Use JSRetainPtr<JSStringRef>.
        (WebCore::databaseTableNames): Ditto.
        (WebCore::localizedStrings): Ditto.
        (WebCore::InspectorController::~InspectorController): Ditto.
        (WebCore::InspectorController::focusNode): Ditto.
        (WebCore::InspectorController::windowScriptObjectAvailable): Ditto.
        (WebCore::InspectorController::scriptObjectReady): Ditto.
        (WebCore::addHeaders): Ditto.
        (WebCore::InspectorController::addScriptResource): Ditto.
        (WebCore::InspectorController::removeScriptResource): Ditto.
        (WebCore::InspectorController::updateScriptResourceRequest): Ditto.
        (WebCore::InspectorController::updateScriptResourceResponse): Ditto.
        (WebCore::InspectorController::updateScriptResource): Ditto.
        (WebCore::InspectorController::addDatabaseScriptResource): Ditto.
        (WebCore::InspectorController::removeDatabaseScriptResource): Ditto.
        (WebCore::InspectorController::addScriptConsoleMessage): Ditto.

2008-01-08  Dan Bernstein  <mitz@apple.com>

        Rubber-stamped by Sam Weinig.

        - rename FontDataBaseClass.{cpp,h} back to FontData.{cpp,h}

        * GNUmakefile.am:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * WebCoreSources.bkl:
        * editing/Editor.cpp:
        * platform/graphics/FontData.cpp: Copied from WebCore/platform/graphics/FontDataBaseClass.cpp.
        * platform/graphics/FontData.h: Copied from WebCore/platform/graphics/FontDataBaseClass.h.
        * platform/graphics/FontDataBaseClass.cpp: Removed.
        * platform/graphics/FontDataBaseClass.h: Removed.
        * platform/graphics/SegmentedFontData.h:
        * platform/graphics/SimpleFontData.h:

2008-01-08  Dan Bernstein  <mitz@apple.com>

        Fix a Wx build error.

        * platform/graphics/wx/GlyphMapWx.cpp:
        (WebCore::GlyphPage::fill):

2008-01-08  Dan Bernstein  <mitz@apple.com>

        Fix a Qt build error.

        * platform/graphics/qt/SimpleFontDataQt.cpp:
        (WebCore::SimpleFontData::containsCharacters):
        (WebCore::SimpleFontData::fontDataForCharacter):
        (WebCore::SimpleFontData::isSegmented):

2008-01-08  Adam Roben  <aroben@apple.com>

        Windows build fix.

        Touch config.h to force a rebuild (apparently changing preprocessor
        definitions in the .vcproj doesn't force a rebuild).

        * config.h:

2008-01-08  Dan Bernstein  <mitz@apple.com>

        Fix a Wx build failure.

        * webcore-wx.bkl:

2008-01-08  Dan Bernstein  <mitz@apple.com>

        Fix a Qt build failure.

        * WebCore.pro:

2008-01-08  John Sullivan  <sullivan@apple.com>

        Reviewed by Adam Roben
        
        - fixed <rdar://problem/5671668> REGRESSION (r28711-r28730): With caret in an empty form field, 
          Delete menu item is enabled but shouldn't be

        The enabled logic was incorrect for the Delete menu item. To fix this, I added an EditorCommandSource
        parameter to the enabled functions so that they can have parallel logic to the execute functions.

        * editing/EditorCommand.cpp:
        added EditorCommandSource parameter to isEnabled function prototype
        (WebCore::enabled):
        added unused EditorCommandSource parameter to these isEnabled functions:
        (WebCore::enabledAnySelection):
        (WebCore::enabledAnySelectionAndMark):
        (WebCore::enableCaretInEditableText):
        (WebCore::enabledCopy):
        (WebCore::enabledCut):

        (WebCore::enabledDelete):
        new function, uses logic previously used by Delete command for DOM sources; uses logic in enabledCut
        for menu source

        added unused EditorCommandSource parameter to these isEnabled functions:
        (WebCore::enabledInEditableText):
        (WebCore::enabledInRichlyEditableText):
        (WebCore::enabledPaste):
        (WebCore::enabledRangeInEditableText):
        (WebCore::enabledRangeInRichlyEditableText):
        (WebCore::enabledRedo):
        (WebCore::enabledUndo):
        
        (WebCore::CommandEntry::):
        wire up new enabledDelete function as delete function for Delete command
        
        (WebCore::Editor::Command::isEnabled):
        pass EditorCommandSource parameter to isEnabled function

2008-01-08  Adam Roben  <aroben@apple.com>

        Visual C++ Express build fix

        * WebCore.vcproj/QTMovieWin.vcproj: Explicitly link against user32.lib
        and advapi32.lib. VS implicitly links against these, VC++ Express
        doesn't.

2008-01-08  Dan Bernstein  <mitz@apple.com>

        - add bug number

        * platform/graphics/mac/FontCustomPlatformData.cpp:
        (WebCore::createFontCustomPlatformData):

2008-01-08  Dan Bernstein  <mitz@apple.com>

        Try to fix the Qt build.

        * WebCore.pro:

2008-01-08  Nikolas Zimmermann  <zimmermann@kde.org>

        Not reviewed. Try to fix Qt builds after Timothy's inspector changes.

        * page/inspector/WebKit.qrc:

2008-01-08  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Mark.

        - remove duplicate definition of getElementById from HTMLDocument IDL (and ObjC bindings)

        * bindings/objc/PublicDOMInterfaces.h:
        * html/HTMLDocument.idl:

2008-01-08  David D. Kilzer  <ddkilzer@webkit.org>

        Renamed CharacterData::str to m_str to match coding style

        Rubber-stamped by Adam.

        No test cases added since there is no change in behavior.

        * dom/CDATASection.cpp:
        * dom/CharacterData.cpp:
        (WebCore::CharacterData::CharacterData):
        (WebCore::CharacterData::setData):
        (WebCore::CharacterData::substringData):
        (WebCore::CharacterData::appendData):
        (WebCore::CharacterData::insertData):
        (WebCore::CharacterData::deleteData):
        (WebCore::CharacterData::replaceData):
        (WebCore::CharacterData::nodeValue):
        (WebCore::CharacterData::containsOnlyWhitespace):
        (WebCore::CharacterData::dispatchModifiedEvent):
        (WebCore::CharacterData::checkCharDataOperation):
        (WebCore::CharacterData::dump):
        * dom/CharacterData.h:
        * dom/Comment.cpp:
        * dom/Text.cpp:
        (WebCore::Text::splitText):
        (WebCore::Text::createRenderer):
        (WebCore::Text::recalcStyle):

2008-01-08  Oliver Hunt  <oliver@apple.com>

        Set the ENABLE_SVG_FONTS flag in Windows build, now builds, 
        I'm not sure if it just caused the right files to regenerate,
        or if there's some configuration weirdness in the non-SVG-fonts
        build. 

        * WebCore.vcproj/WebCore.vcproj:

2008-01-07  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Brady.

        - fixed <rdar://problem/5644300> Back/Forward Cache should not include pages with databases
        
        Track whether a document has ever opened a database; if so, exclude it from b/f caching (for now)
        
        * dom/Document.cpp:
        (WebCore::Document::Document):
        * dom/Document.h:
        (WebCore::Document::setHasOpenDatabases):
        (WebCore::Document::hasOpenDatabases):
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::canCachePage):
        * storage/Database.cpp:
        (WebCore::Database::openDatabase):

2008-01-07  Dan Bernstein  <mitz@apple.com>

        Reviewed by Oliver Hunt.

        - fix leaks seen on the build bot

        * css/CSSFontSelector.cpp:
        (WebCore::CSSFontSelector::addFontFaceRule): Avoid creating a
        CSSFontFaceSource for SVG font-face elements going into an
        SVGCSSFontFace because it just leaks them. Avoid adding SVG font-
        face elements to a CSSFontFace because it will not work as expected.

2008-01-07  Mark Rowe  <mrowe@apple.com>

        Tiger build fix.

        * platform/graphics/mac/FontCustomPlatformData.cpp:
        (WebCore::createFontCustomPlatformData): Only include this code on Leopard.
        It's not needed on Tiger, and breaks the build.

2008-01-07  Antti Koivisto  <antti@apple.com>

        Reviewed by Steve.

        Re-enable media support in Windows build.

        * WebCore.vcproj/QTMovieWin.vcproj:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.vcproj/build-generated-files.sh:

2008-01-07  Steve Falkenburg  <sfalken@apple.com>

        Add version resource to QTMovieWin.dll
        
        Reviewed by Adam.

        * WebCore.vcproj/PRODUCTVERSION: Copied from ../WebKit/win/WebKit.vcproj/PRODUCTVERSION.
        * WebCore.vcproj/QTMovieWin.rc: Added.
        * WebCore.vcproj/QTMovieWin.vcproj:
        * WebCore.vcproj/VERSION: Copied from ../WebKit/win/WebKit.vcproj/VERSION.
        * WebCore.vcproj/auto-version.sh: Copied from ../WebKit/win/WebKit.vcproj/auto-version.sh.

2008-01-07  Dan Bernstein  <mitz@apple.com>

        Build fix.

        * platform/graphics/qt/FontCustomPlatformData.cpp:
        (WebCore::FontCustomPlatformData::~FontCustomPlatformData): Added.
        Calls QFontDatabase::removeApplicationFont().
        * platform/graphics/qt/FontCustomPlatformData.h:
        * platform/graphics/qt/GlyphPageTreeNodeQt.cpp:
        (WebCore::GlyphPageTreeNode::pruneTreeCustomFontData): Removed the
        implementation because Qt does not use the WebCore glyph cache.

2008-01-07  Dan Bernstein  <mitz@apple.com>

        Reviewed by Oliver Hunt.

        - fix an assertion failure in svg/W3C-SVG-1.1/fonts-elem-03-b.svg on
          Tiger and multiple SVG layout test failures on Leopard.

        * css/CSSSegmentedFontFace.cpp:
        (WebCore::CSSSegmentedFontFace::getFontData): Avoid returning an
        empty SegmentedFontData.
        * platform/graphics/mac/FontCustomPlatformData.cpp:
        (WebCore::createFontCustomPlatformData): Avoid creating a font that
        contains no glyphs. On Leopard, ATS might create such a font given
        data in an unsupported format (such as SVG).

2008-01-07  Steve Falkenburg  <sfalken@apple.com>

        Build fix.

        * WebCore.vcproj/WebCore.sln:
        * WebCore.vcproj/WebCore.submit.sln:

2008-01-07  Oliver Hunt  <oliver@apple.com>

        Reviewed by Niko.

        Fix painting of SVG <image> when the image must be scaled to retain aspect ratio

        Test: svg/custom/image-with-aspect-ratio-stretch.svg

        * rendering/RenderSVGImage.cpp:
        (WebCore::RenderSVGImage::adjustRectsForAspectRatio):

2008-01-07  Dan Bernstein  <mitz@apple.com>

        Build fix.

        * platform/graphics/qt/GlyphPageTreeNodeQt.cpp:
        (WebCore::GlyphPageTreeNode::pruneTreeCustomFontData):

2008-01-07  Adele Peterson  <adele@apple.com>

        Add missing newline.

        * rendering/MediaControlElements.cpp:

2008-01-07  Jon Honeycutt  <jhoneycutt@apple.com>

        Reviewed by Hyatt.

        <rdar://problem/5673489> Safari does not render windowless plugins in an
        iframe when opacity < 1.0

        Plugins in transparency layers handle their own world transforms, so
        only apply the horizontal/vertical transform if we are not in a
        transparency layer.

        * platform/graphics/GraphicsContext.h: Add a Windows-platform-only
        inTransparencyLayer() function
        * platform/win/GraphicsContextWin.cpp:
        (WebCore::GraphicsContext::getWindowsContext): Use inTransparencyLayer()
        (WebCore::GraphicsContext::inTransparencyLayer):
        (WebCore::GraphicsContext::releaseWindowsContext): Use
        inTransparencyLayer()
        * plugins/win/PluginViewWin.cpp:
        (WebCore::PluginViewWin::paint): When retrieving the HDC, use the rect
        relative to the window. Pass m_isTransparent to
        get/releaseWindowsContext(). Only set the world transform if we are not
        in a transparency layer.

2008-01-07  Adele Peterson  <adele@apple.com>

        Build fix.  Need to wrap these classes in #if ENABLE(VIDEO)

        * rendering/MediaControlElements.cpp:
        * rendering/MediaControlElements.h:

2008-01-07  Nikolas Zimmermann  <zimmermann@kde.org>

        Reviewed by Mark.

        Enable SVG_FONTS by default.

        * Configurations/WebCore.xcconfig:
        * WebCore.vcproj/build-generated-files.sh:

2008-01-07  Dan Bernstein  <mitz@apple.com>

        Build fix.

        * platform/graphics/qt/SimpleFontDataQt.cpp:
        (WebCore::SimpleFontData::SimpleFontData):
        (WebCore::SimpleFontData::~SimpleFontData):

2008-01-07  Adam Barth  <hk9565@gmail.com>

        Reviewed by Sam Weinig

        Fixes: http://bugs.webkit.org/show_bug.cgi?id=16523
        <rdar://problem/5657447>

        When a frame is created with the URL "about:blank" or "", it should
        inherit its SecurityOrigin from its opener.  However, once it has
        decided on that SecurityOrigin, it should not change its mind.
        Prior to this patch, several events could induce the frame to change
        its SecurityOrigin, permitting an attacker to inject script into an
        arbitrary SecurityOrigin.

        This patch makes several changes:

        1) Documents refuse to change from one SecurityOrigin to another
           unless explicitly instructed to do so.

        2) Navigating to a JavaScript URL that produces a value
           preserves the current SecurityOrigin explicitly instead of
           relying on the URL to preserve the origin (which fails for
           about:blank URLs and SecurityOrigins with document.domain set).

           Ideally, we should not preserve the URL at all.  Instead, the
           frame's URL should be the JavaScript URL, as in Firefox, but this
           would require changes that are too risky for this patch.  I'll
           file this as a separate issue.

        3) Various methods of navigating to JavaScript URLs were not
           properly handling JavaScript that returned a value (and should
           therefore replace the current document).  This patch unifies
           those code paths with the path that works.

           There are still a handful of bugs relating to the handling of
           JavaScript URLs, but I'll file those as separate issues.

        Tests: http/tests/security/aboutBlank/xss-DENIED-navigate-opener-document-write.html
               http/tests/security/aboutBlank/xss-DENIED-navigate-opener-javascript-url.html
               http/tests/security/aboutBlank/xss-DENIED-set-opener.html

        * dom/Document.cpp:
        (WebCore::Document::initSecurityOrigin):
        * dom/Document.h:
        (WebCore::Document::setSecurityOrigin):
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::changeLocation):
        (WebCore::FrameLoader::urlSelected):
        (WebCore::FrameLoader::requestFrame):
        (WebCore::FrameLoader::submitForm):
        (WebCore::FrameLoader::executeIfJavaScriptURL):
        (WebCore::FrameLoader::begin):
        * loader/FrameLoader.h:
        * platform/SecurityOrigin.cpp:
        (WebCore::SecurityOrigin::setForURL):
        (WebCore::SecurityOrigin::createForFrame):
        * platform/SecurityOrigin.h:

2008-01-07  Adele Peterson  <adele@apple.com>

        Forgot to check in these changes in my last checkin.

        * rendering/RenderThemeSafari.cpp:

2008-01-07  Dan Bernstein  <mitz@apple.com>

        Build fixes.

        * WebCore.pro:
        * platform/graphics/qt/FontCacheQt.cpp:
        (WebCore::FontCache::getCachedFontData):

2008-01-07  Timothy Hatcher  <timothy@apple.com>

        Reviewed by John Sullivan.

        <rdar://problem/5674119> Make the Web Inspector toolbar the normal size when not docked

        * page/inspector/inspector.css: Changed CSS rules to have the toolbar and buttons be
          normal height when not docked, and small when docked. Also added some cursor properties
          prevent showing the text cursor over areas that are not selectable.
        * page/inspector/Images: A few images added and old ones removed or renamed.

2008-01-07  Alp Toker  <alp@atoker.com>

        Prospective GTK+ autotools/qmake VIDEO build fix for breakage
        introduced in r29257.

        * GNUmakefile.am:
        * WebCore.pro:

2008-01-07  Nikolas Zimmermann  <zimmermann@kde.org>

        Reviewed by Oliver.

        Build fix affecting all builds - again related to the unicode-range addition.

        * css/CSSFontSelector.cpp:
        (WebCore::CSSFontSelector::addFontFaceRule):
        * css/SVGCSSFontFace.cpp:
        (WebCore::SVGCSSFontFace::SVGCSSFontFace):
        * css/SVGCSSFontFace.h:
        * rendering/RenderSVGText.cpp:
        * svg/SVGFont.cpp:
        (WebCore::svgFontAndFontFaceElementForFontData):
        (WebCore::floatWidthMissingGlyphCallback):
        (WebCore::drawTextMissingGlyphCallback):
        * svg/SVGFontFaceElement.cpp:

2008-01-07  Adele Peterson  <adele@apple.com>

        Reviewed by Antti, Adam, and Mitz.

        WebCore part of fix for 
        <rdar://problem/5619073> Updated look for <video> controls
        <rdar://problem/5619057> Add volume control to video controls

        * WebCore.base.exp: Added symbols for WebKitSystemInterface drawing methods.
        * WebCore.xcodeproj/project.pbxproj: Added MediaControlElements.h/cpp
        * WebCore.vcproj/WebCore.vcproj: ditto.

        * css/CSSPrimitiveValueMappings.h: (WebCore::CSSPrimitiveValue::CSSPrimitiveValue): Added cases for new appearances.
        * css/CSSSelector.cpp: (WebCore::CSSSelector::extractPseudoType): Added cases for new types.
        * css/CSSSelector.h: (WebCore::CSSSelector::): Added new pseudo elements.
        * css/CSSStyleSelector.cpp: (WebCore::CSSStyleSelector::checkOneSelector): ditto.
        * css/CSSValueKeywords.in: Added keywords for new control appearance styles.
        * css/html4.css: Added new styles for new controls.

        * html/HTMLMediaElement.cpp: (WebCore::HTMLMediaElement::canPlay): Added. Takes loading state into account.
        * html/HTMLMediaElement.h:

        * page/EventHandler.cpp: (WebCore::EventHandler::updateMouseEventTargetNode): Make sure the events always go to the capturing node, if there is one.

        * platform/mac/WebCoreSystemInterface.h: Added drawing methods for controls.
        * platform/mac/WebCoreSystemInterface.mm: ditto.

        * rendering/MediaControlElements.cpp: Added.
        (WebCore::MediaControlShadowRootElement::MediaControlShadowRootElement): Moved from RenderMedia.  Made this relatively positioned, instead of absolute.
        (WebCore::MediaControlInputElement::MediaControlInputElement): Moved from RenderMedia.  Removed call to updateFromElement, 
         since its too early to do this here, and causes crashes for the slider.
        (WebCore::MediaControlInputElement::attachToParent): Moved from RenderMedia.
        (WebCore::MediaControlInputElement::update): ditto.
        (WebCore::MediaControlMuteButtonElement::MediaControlMuteButtonElement): Added.
        (WebCore::MediaControlMuteButtonElement::defaultEventHandler): ditto.
        (WebCore::MediaControlPlayButtonElement::MediaControlPlayButtonElement): Moved from RenderMedia.
        (WebCore::MediaControlPlayButtonElement::defaultEventHandler): ditto.
        (WebCore::MediaControlSeekButtonElement::MediaControlSeekButtonElement): Added.
        (WebCore::MediaControlSeekButtonElement::defaultEventHandler): ditto.
        (WebCore::MediaControlSeekButtonElement::seekTimerFired): ditto.
        (WebCore::MediaControlTimelineElement::MediaControlTimelineElement): Moved from RenderMedia.
        (WebCore::MediaControlTimelineElement::defaultEventHandler): ditto.
        (WebCore::MediaControlTimelineElement::update): ditto. 
        (WebCore::MediaControlFullscreenButtonElement::MediaControlFullscreenButtonElement): Added.
        (WebCore::MediaControlFullscreenButtonElement::defaultEventHandler): ditto.
        * rendering/MediaControlElements.h: Added. Moved from RenderMedia.
        (WebCore::MediaControlShadowRootElement::isShadowNode):
        (WebCore::MediaControlShadowRootElement::shadowParentNode):
        (WebCore::RenderMediaControlShadowRoot::RenderMediaControlShadowRoot):
        (WebCore::RenderMediaControlShadowRoot::setParent):

        * rendering/RenderMedia.cpp: Moved control element classes to MediaControlElements files.
        (WebCore::RenderMedia::RenderMedia): No need to initialize RefPtrs.
        (WebCore::RenderMedia::layout): Set the position for the controlsRenderer.
        (WebCore::RenderMedia::createPanel): Added nil check for the renderer.
        (WebCore::RenderMedia::createMuteButton): Added.
        (WebCore::RenderMedia::createSeekBackButton): ditto.
        (WebCore::RenderMedia::createSeekForwardButton): ditto.
        (WebCore::RenderMedia::createTimeDisplay): Added nil check for the renderer.
        (WebCore::RenderMedia::createFullscreenButton): Added.
        (WebCore::RenderMedia::updateControls): Create, delete, and update new controls when appropriate.
        (WebCore::RenderMedia::updateControlVisibility): Don't fade controls for audio controls. 
        (WebCore::RenderMedia::forwardEvent): Forward events for new controls.
        * rendering/RenderMedia.h: Added new methods for creating new controls.

        * rendering/RenderObject.cpp: (WebCore::RenderObject::containingBlock): Updated special case for media elements, which are replaced elements, 
          but also can contain children (the controls' container) that may need to look for the containing block.

        * rendering/RenderSlider.cpp: (WebCore::RenderSlider::createThumbStyle): Added case for MediaSliderAppearance.

        * rendering/RenderStyle.h: Added appearance constants and pseudo ids for new controls.
        (WebCore::):
        (WebCore::RenderStyle::):

        * rendering/RenderTheme.cpp:
        (WebCore::RenderTheme::adjustStyle): Added cases for new appearances.
        (WebCore::RenderTheme::paint): ditto.
        * rendering/RenderTheme.h: Added new methods for painting new appearances.
        (WebCore::RenderTheme::paintMediaBackground):
        (WebCore::RenderTheme::paintMediaFullscreenButton):
        (WebCore::RenderTheme::paintMediaPlayButton):
        (WebCore::RenderTheme::paintMediaMuteButton):
        (WebCore::RenderTheme::paintMediaSeekBackButton):
        (WebCore::RenderTheme::paintMediaSeekForwardButton):
        (WebCore::RenderTheme::paintMediaSliderThumb):
        * rendering/RenderThemeMac.h:
        * rendering/RenderThemeMac.mm:
        (WebCore::RenderThemeMac::RenderThemeMac): Initialize m_mediaControlBackgroundImage.
        (WebCore::RenderThemeMac::~RenderThemeMac): Delete m_mediaControlBackgroundImage.
        (WebCore::RenderThemeMac::paintCapsLockIndicator): Use LocalCurrentGraphicsContext here too, since we use it in all other painting methods.
        (WebCore::RenderThemeMac::paintSliderTrack): Added case for MediaSliderAppearance.
        (WebCore::RenderThemeMac::adjustSliderThumbSize): Added case for MediaSliderThumbAppearance.
        (WebCore::RenderThemeMac::paintMediaBackground): Draws the new artwork for the controls.
        (WebCore::RenderThemeMac::paintMediaFullscreenButton): ditto.
        (WebCore::RenderThemeMac::paintMediaMuteButton): ditto.
        (WebCore::RenderThemeMac::paintMediaPlayButton): ditto.
        (WebCore::RenderThemeMac::paintMediaSeekBackButton): ditto.
        (WebCore::RenderThemeMac::paintMediaSeekForwardButton): ditto.
        (WebCore::RenderThemeMac::paintMediaSliderThumb): ditto.
        * rendering/RenderThemeSafari.cpp: Draws the new artwork on Windows.
        (WebCore::RenderThemeSafari::paintSliderTrack):
        (WebCore::RenderThemeSafari::adjustSliderThumbSize):
        (WebCore::RenderThemeSafari::paintMediaBackground):
        (WebCore::RenderThemeSafari::paintMediaFullscreenButton):
        (WebCore::RenderThemeSafari::paintMediaMuteButton):
        (WebCore::RenderThemeSafari::paintMediaPlayButton):
        (WebCore::RenderThemeSafari::paintMediaSeekBackButton):
        (WebCore::RenderThemeSafari::paintMediaSeekForwardButton):
        (WebCore::RenderThemeSafari::paintMediaSliderThumb):
        * rendering/RenderThemeSafari.h:

2008-01-07  Timothy Hatcher  <timothy@apple.com>

        Reviewed by Darin Adler.

        Fix ASSERTION FAILED: dstOffset + srcSegmentLength == static_cast<int>(data.size())
        when the replacment string is a different length.

        * platform/text/StringImpl.cpp:
        (WebCore::StringImpl::replace): Move the parenthesis to be around only the subtraction in
        the Vector size calculation, correcting the order of math operations.

2008-01-07  Nikolas Zimmermann  <zimmermann@kde.org>

        Reviewed by Eric. Hopefully fix build with mac tiger after the unicode-range addition. NSInteger not available there.

        * platform/graphics/mac/FontCacheMac.mm:

2008-01-07  Nikolas Zimmermann  <zimmermann@kde.org>

        Reviewed by Oliver. Fix build error introduced by Dan's unicode-range support patch & enabling SVG_FONTS by default.

        * css/CSSFontSelector.cpp:
        (WebCore::CSSFontSelector::getFontData):

2008-01-07  Nikolas Zimmermann  <zimmermann@kde.org>

        Not reviewed. Next try to fix wx/mac leopard build.

        * css/CSSFontSelector.cpp: Need to wrap a SVG* include in ENABLE(SVG) blocks, as this port doesn't build this generated file.
        * svg/SVGFontFaceElement.cpp:
        (WebCore::SVGFontFaceElement::createFontData): Fix double<->float conversion issue.
        * webcore-base.bkl: Undo svg/ include.

2008-01-07  Dan Bernstein  <mitz@apple.com>

        Reviewed by Dave Hyatt.

        - <rdar://problem/5665216> Support the unicode-range property in @font-face rules

        * GNUmakefile.am:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * WebCoreSources.bkl:
        * bindings/objc/DOM.mm:
        * bridge/mac/WebCoreAXObject.mm:
        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::CSSComputedStyleDeclaration::getPropertyCSSValue):
        * css/CSSFontFace.cpp:
        (WebCore::CSSFontFace::fontLoaded): Changed to call the owning segmented
        font face.
        (WebCore::CSSFontFace::getFontData):
        * css/CSSFontFace.h:
        (WebCore::CSSFontFace::CSSFontFace):
        (WebCore::CSSFontFace::setSegmentedFontFace):
        * css/CSSFontFaceSource.cpp:
        (WebCore::CSSFontFaceSource::pruneTable): Removed the calls to
        GlyphPageTreeNode::pruneTreeCustomFontData because the fonts in the
        font table are not exposed in the glyph page tree. Only the segmented
        font is, and that is taken care of by the segmented font face.
        (WebCore::CSSFontFaceSource::getFontData):
        * css/CSSFontFaceSource.h:
        * css/CSSFontSelector.cpp:
        (WebCore::CSSFontSelector::addFontFaceRule): Changed to collect
        @font-face rules with the same family and traits into a single
        segmented font face, instead of just retaining the most recent one.
        (WebCore::CSSFontSelector::fontLoaded):
        (WebCore::CSSFontSelector::getFontData):
        * css/CSSFontSelector.h:
        * css/CSSGrammar.y:
        * css/CSSParser.cpp:
        (WebCore::CSSParser::parseValue):
        (WebCore::CSSParser::parseFontFaceUnicodeRange): Added. Parses a unicode
        range value.
        * css/CSSParser.h:
        * css/CSSPrimitiveValue.h:
        (WebCore::CSSPrimitiveValue::):
        * css/CSSPropertyNames.in:
        * css/CSSSegmentedFontFace.cpp: Added.
        (WebCore::CSSSegmentedFontFace::CSSSegmentedFontFace):
        (WebCore::CSSSegmentedFontFace::~CSSSegmentedFontFace):
        (WebCore::CSSSegmentedFontFace::pruneTable):
        (WebCore::CSSSegmentedFontFace::isLoaded):
        (WebCore::CSSSegmentedFontFace::isValid):
        (WebCore::CSSSegmentedFontFace::fontLoaded):
        (WebCore::CSSSegmentedFontFace::overlayRange):
        (WebCore::CSSSegmentedFontFace::getFontData):
        * css/CSSSegmentedFontFace.h: Added.
        (WebCore::FontFaceRange::FontFaceRange):
        (WebCore::FontFaceRange::from):
        (WebCore::FontFaceRange::to):
        (WebCore::FontFaceRange::fontFace):
        (WebCore::CSSSegmentedFontFace::fontSelector):
        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::applyProperty):
        * css/CSSUnicodeRangeValue.cpp: Added.
        (WebCore::CSSUnicodeRangeValue::~CSSUnicodeRangeValue):
        (WebCore::CSSUnicodeRangeValue::cssText):
        * css/CSSUnicodeRangeValue.h: Added.
        (WebCore::CSSUnicodeRangeValue::CSSUnicodeRangeValue):
        (WebCore::CSSUnicodeRangeValue::from):
        (WebCore::CSSUnicodeRangeValue::to):
        * css/SVGCSSFontFace.cpp:
        (WebCore::SVGCSSFontFace::getFontData):
        * css/SVGCSSFontFace.h:
        * editing/Editor.cpp:
        (WebCore::Editor::fontForSelection):
        * editing/Editor.h:
        * page/mac/FrameMac.mm:
        * page/mac/WebCoreFrameBridge.mm:
        (-[WebCoreFrameBridge fontForSelection:]):
        * platform/graphics/Font.cpp:
        (WebCore::WidthIterator::advance):
        (WebCore::Font::glyphDataForCharacter):
        (WebCore::Font::primaryFont): Changed to return the simple font data
        used for the space character.
        (WebCore::Font::fontDataAt):
        (WebCore::Font::fontDataForCharacters):
        (WebCore::Font::drawGlyphBuffer):
        * platform/graphics/Font.h:
        * platform/graphics/FontCache.cpp:
        (WebCore::FontCache::getCachedFontData):
        (WebCore::FontCache::getFontData):
        * platform/graphics/FontCache.h:
        * platform/graphics/FontData.cpp: Renamed to SimpleFontData.cpp
        * platform/graphics/FontData.h: Renamed to SimpleFontData.cpp.
        * platform/graphics/FontDataBaseClass.cpp: Added. This will be renamed
        FontData.cpp.
        (WebCore::FontData::~FontData):
        * platform/graphics/FontDataBaseClass.h: Added. This will be renamed
        FontData.h.
        * platform/graphics/FontFallbackList.cpp:
        (WebCore::FontFallbackList::determinePitch):
        (WebCore::FontFallbackList::fontDataAt):
        (WebCore::FontFallbackList::fontDataForCharacters):
        * platform/graphics/FontFallbackList.h:
        (WebCore::FontFallbackList::primaryFont):
        * platform/graphics/FontSelector.h:
        * platform/graphics/GlyphBuffer.h:
        (WebCore::GlyphBuffer::fontDataAt):
        (WebCore::GlyphBuffer::swap):
        (WebCore::GlyphBuffer::add):
        * platform/graphics/GlyphPageTreeNode.cpp:
        (WebCore::GlyphPageTreeNode::pruneTreeCustomFontData):
        (WebCore::GlyphPageTreeNode::initializePage): Added code to initialize
        pages for segmented font data.
        (WebCore::GlyphPageTreeNode::getChild):
        (WebCore::GlyphPageTreeNode::pruneCustomFontData):
        * platform/graphics/GlyphPageTreeNode.h:
        (WebCore::GlyphPage::setGlyphDataForCharacter):
        (WebCore::GlyphPage::setGlyphDataForIndex):
        (WebCore::GlyphPageTreeNode::getRootChild):
        * platform/graphics/SegmentedFontData.cpp: Added.
        (WebCore::SegmentedFontData::~SegmentedFontData):
        (WebCore::SegmentedFontData::fontDataForCharacter):
        (WebCore::SegmentedFontData::containsCharacters):
        (WebCore::SegmentedFontData::isCustomFont):
        (WebCore::SegmentedFontData::isLoading):
        (WebCore::SegmentedFontData::isSegmented):
        * platform/graphics/SegmentedFontData.h: Added.
        (WebCore::FontDataRange::FontDataRange):
        (WebCore::FontDataRange::from):
        (WebCore::FontDataRange::to):
        (WebCore::FontDataRange::fontData):
        (WebCore::SegmentedFontData::appendRange):
        (WebCore::SegmentedFontData::numRanges):
        (WebCore::SegmentedFontData::rangeAt):
        * platform/graphics/SimpleFontData.cpp: Copied from WebCore/platform/graphics/FontData.cpp.
        (WebCore::SimpleFontData::SimpleFontData):
        (WebCore::SimpleFontData::~SimpleFontData):
        (WebCore::SimpleFontData::ascent):
        (WebCore::SimpleFontData::descent):
        (WebCore::SimpleFontData::widthForGlyph):
        (WebCore::SimpleFontData::fontDataForCharacter):
        (WebCore::SimpleFontData::isSegmented):
        * platform/graphics/SimpleFontData.h: Copied from WebCore/platform/graphics/FontData.h.
        (WebCore::SimpleFontData::isCustomFont):
        (WebCore::SimpleFontData::isLoading):
        * platform/graphics/cairo/GraphicsContextCairo.cpp:
        (WebCore::GraphicsContext::setPlatformFont):
        * platform/graphics/gtk/FontCacheGtk.cpp:
        (WebCore::FontCache::getFontDataForCharacters):
        * platform/graphics/gtk/FontDataGtk.cpp: Renamed to
        SimpleFontDataGtk.cpp.
        * platform/graphics/gtk/FontGtk.cpp:
        (WebCore::Font::drawGlyphs):
        * platform/graphics/gtk/GlyphPageTreeNodeGtk.cpp:
        (WebCore::GlyphPage::fill):
        * platform/graphics/gtk/SimpleFontDataGtk.cpp: Copied from WebCore/platform/graphics/gtk/FontDataGtk.cpp.
        (WebCore::SimpleFontData::platformInit):
        (WebCore::SimpleFontData::platformDestroy):
        (WebCore::SimpleFontData::smallCapsFontData):
        (WebCore::SimpleFontData::containsCharacters):
        (WebCore::SimpleFontData::determinePitch):
        (WebCore::SimpleFontData::platformWidthForGlyph):
        (WebCore::SimpleFontData::setFont):
        * platform/graphics/mac/FontCacheMac.mm:
        (WebCore::FontCache::getFontDataForCharacters):
        * platform/graphics/mac/FontDataMac.mm: Renamed to SimpleFontDataMac.mm.
        * platform/graphics/mac/FontMac.mm:
        (WebCore::initializeATSUStyle):
        (WebCore::overrideLayoutOperation):
        (WebCore::ATSULayoutParameters::initialize):
        (WebCore::Font::drawGlyphs):
        * platform/graphics/mac/GlyphPageTreeNodeMac.cpp:
        (WebCore::GlyphPage::fill):
        * platform/graphics/mac/SimpleFontDataMac.mm: Copied from WebCore/platform/graphics/mac/FontDataMac.mm.
        (WebCore::initFontData):
        (WebCore::SimpleFontData::platformInit):
        (WebCore::SimpleFontData::platformDestroy):
        (WebCore::SimpleFontData::smallCapsFontData):
        (WebCore::SimpleFontData::containsCharacters):
        (WebCore::SimpleFontData::determinePitch):
        (WebCore::SimpleFontData::platformWidthForGlyph):
        (WebCore::SimpleFontData::checkShapesArabic):
        * platform/graphics/qt/FontDataQt.cpp: Renamed to SimpleFontDataQt.cpp.
        * platform/graphics/qt/GlyphPageTreeNodeQt.cpp:
        (WebCore::GlyphPageTreeNode::pruneTreeCustomFontData):
        * platform/graphics/qt/SimpleFontDataQt.cpp: Copied from WebCore/platform/graphics/qt/FontDataQt.cpp.
        * platform/graphics/win/FontCacheWin.cpp:
        (WebCore::FontCache::getFontDataForCharacters):
        * platform/graphics/win/FontDataWin.cpp: Renamed to
        SimpleFontDataWin.cpp.
        * platform/graphics/win/FontWin.cpp:
        (WebCore::Font::drawGlyphs):
        * platform/graphics/win/GlyphPageTreeNodeWin.cpp:
        (WebCore::GlyphPage::fill):
        * platform/graphics/win/SimpleFontDataWin.cpp: Copied from WebCore/platform/graphics/win/FontDataWin.cpp.
        (WebCore::SimpleFontData::setShouldApplyMacAscentHack):
        (WebCore::SimpleFontData::platformInit):
        (WebCore::SimpleFontData::platformDestroy):
        (WebCore::SimpleFontData::smallCapsFontData):
        (WebCore::SimpleFontData::containsCharacters):
        (WebCore::SimpleFontData::determinePitch):
        (WebCore::SimpleFontData::platformWidthForGlyph):
        (WebCore::SimpleFontData::scriptFontProperties):
        * platform/graphics/wx/FontCacheWx.cpp:
        (WebCore::FontCache::getFontDataForCharacters):
        * platform/graphics/wx/FontDataWx.cpp: Renamed to SimpleFontDataWx.cpp.
        * platform/graphics/wx/FontWx.cpp:
        (WebCore::Font::drawGlyphs):
        * platform/graphics/wx/GlyphMapWx.cpp:
        (WebCore::GlyphPage::fill):
        * platform/graphics/wx/SimpleFontDataWx.cpp: Copied from WebCore/platform/graphics/wx/FontDataWx.cpp.
        (WebCore::SimpleFontData::platformInit):
        (WebCore::SimpleFontData::platformDestroy):
        (WebCore::SimpleFontData::smallCapsFontData):
        (WebCore::SimpleFontData::containsCharacters):
        (WebCore::SimpleFontData::determinePitch):
        (WebCore::SimpleFontData::platformWidthForGlyph):
        * platform/mac/FileChooserMac.mm:
        * platform/mac/PopupMenuMac.mm:
        * platform/mac/WebCoreTextRenderer.mm:
        * platform/win/PopupMenuWin.cpp:
        * platform/win/UniscribeController.cpp:
        (WebCore::UniscribeController::advance):
        (WebCore::UniscribeController::itemizeShapeAndPlace):
        (WebCore::UniscribeController::shapeAndPlaceItem):
        (WebCore::UniscribeController::shape):
        * platform/win/UniscribeController.h:
        * svg/SVGFont.cpp:
        (WebCore::Font::drawGlyphsWithSVGFont):
        * svg/SVGFontElement.cpp:
        (WebCore::SVGFontElement::collectGlyphs):
        * svg/SVGFontFaceElement.cpp:
        (WebCore::SVGFontFaceElement::createFontData):
        * svg/SVGFontFaceElement.h:
        * svg/SVGGlyphElement.cpp:

2008-01-07  Nikolas Zimmermann  <zimmermann@kde.org>

        Not reviewed. Try to fix mac build by forcing SVGNames regeneration.

        * svg/svgtags.in:

2008-01-07  Nikolas Zimmermann  <zimmermann@kde.org>

        Not reviewed. Proposed build fix for wx.

        * webcore-base.bkl:

2008-01-07  Dan Bernstein  <mitz@apple.com>

        64-bit build fix

        * platform/graphics/mac/FontCustomPlatformData.cpp:
        (WebCore::FontCustomPlatformData::fontPlatformData): Have to use a
        cast here since FMGetFontFromATSFontRef() is not available on 64-bit.

2008-01-06  Nikolas Zimmermann  <zimmermann@kde.org>

        Reviewed by Oliver. Parts reviewed by Eric, David Hyatt & Dan & Alexey.
        Fixes: http://bugs.webkit.org/show_bug.cgi?id=15741 (REGRESSION: svg/W3C-SVG-1.1/fonts-elem-03-b.svg shows worse behavior on TOT)

        Display SVG Fonts, fill svg/SVGFont.cpp with life by adding all needed code to
        measure & render glyphs contained in SVG Fonts, including ligature lookup support.

        Implement floatWidth/selectionRectForText for SVG Fonts, fixing text selection.

        Support horiz-origin-x/y, horiz-adv-x, vert-adv-y, vert-origin-x/y & arabic-form.
        Implement simple algorithm to determine the arabic forms for a string (initial, isolated, medial, terminal).

        Removed drawGlyphsWithSVGFont - create a new function drawTextWithSVGFont instead.
        This doesn't involve creating/using a 'GlyphBuffer' object anymore, which is not
        required for SVG Fonts anyway (we already know all our offsets/advances/etc..)

        Don't call it from drawSimpleText anymore, but directly in drawText - as Dan suggested.

        <glyph> elements now register themselves in the SVGFontElement's glyph cache.
        (insertedIntoDocument / removedFromDocument take care of this)

        The cache is built once now, and is kept updated - it's not rebuild anymore
        on painting (!) - which was a crude hack for testing.

        W3C testcase which include SVG Fonts:
        svg/W3C-SVG-1.1/animate-elem-03-t.svg (Fixed, of course not the anim itself, but it's SVG Fonts usage)
        svg/W3C-SVG-1.1/animate-elem-24-t.svg (Ditto)
        svg/W3C-SVG-1.1/animate-elem-36-t.svg (Ditto)
        svg/W3C-SVG-1.1/animate-elem-40-t.svg (Ditto)
        svg/W3C-SVG-1.1/fonts-kern-01-t.svg (missing <vkern>/<hkern> support)
        svg/W3C-SVG-1.1/fonts-desc-02-t.svg (Fixed, tests CSS font matching based on font-variant attribute)
        svg/W3C-SVG-1.1/fonts-elem-01-t.svg (Fixed, basic SVG font test)
        svg/W3C-SVG-1.1/fonts-elem-02-t.svg (Fixed, accuracy test for embedded SVG font)
        svg/W3C-SVG-1.1/fonts-elem-05-t.svg (Fixed, checks horiz-origin-x support, note: W3C reference image is wrong)
        svg/W3C-SVG-1.1/fonts-elem-06-t.svg (Fixed, checks horiz-adv-x support)
        svg/W3C-SVG-1.1/fonts-glyph-02-t.svg (Fixed, checks arabic-form support)
        svg/W3C-SVG-1.1/fonts-glyph-03-t.svg (Fixed, checks glyph matching based on xml:lang)
        svg/W3C-SVG-1.1/masking-mask-01-b.svg (Fixed, SVG Fonts & masking)
        svg/W3C-SVG-1.1/pservers-grad-08-b.svg (Fixed, SVG Fonts & gradient on fill/stroke)
        svg/W3C-SVG-1.1/render-elems-06-t.svg (Fixed, simple 'fill' property test)
        svg/W3C-SVG-1.1/render-elems-07-t.svg (Fixed, simple 'stroke' property test - shows SVG Font interprets stroke-width in glyph coordinate system, as demanded by spec)
        svg/W3C-SVG-1.1/render-elems-08-t.svg (Fixed, simple 'fill' & 'stroke' property test)
        svg/W3C-SVG-1.1/render-groups-01-b.svg (missing <vkern>/<hkern> support)
        svg/W3C-SVG-1.1/render-groups-03-t.svg (Ditto)
        svg/W3C-SVG-1.1/text-altglyph-01-b.svg (no <altGlyph> support yet)
        svg/W3C-SVG-1.1/text-text-04-t.svg (Fixed, absolute placing of characters pixel perfect now)
        svg/W3C-SVG-1.1/text-text-05-t.svg (FIXME: problem with text-anchor)
        svg/W3C-SVG-1.1/text-text-06-t.svg (highlights problem with ligatures & absolute positioned characters)

        Questionable testcases:
        svg/W3C-SVG-1.1/fonts-glyph-04-t.svg (tests that glyph selection is done in the order in the definition of the font element.)
        I am not sure why this behaviour is desired, no comment given in spec - doesn't make much sense to me, ignoring it for now.

        Several other batik testcases fixed, which use SVG Fonts in combination with gradients & filters.

        * css/CSSFontSelector.cpp:
        (WebCore::CSSFontSelector::addFontFaceRule):
        (WebCore::CSSFontSelector::getFontData):
        * platform/graphics/Font.cpp:
        (WebCore::Font::lineSpacing):
        (WebCore::Font::xHeight):
        (WebCore::Font::canUseGlyphCache):
        (WebCore::Font::drawGlyphBuffer):
        (WebCore::Font::drawText):
        (WebCore::Font::floatWidth):
        (WebCore::Font::selectionRectForText):
        * platform/graphics/Font.h:
        (WebCore::TextRun::TextRun):
        (WebCore::TextRun::activePaintServer):
        (WebCore::TextRun::setActivePaintServer):
        * platform/graphics/FontData.cpp:
        (WebCore::FontData::lineSpacing):
        (WebCore::FontData::lineGap):
        (WebCore::FontData::xHeight):
        * platform/graphics/FontData.h:
        * platform/graphics/win/FontWin.cpp:
        (WebCore::Font::drawGlyphs):
        * rendering/RenderSVGText.cpp:
        (WebCore::RenderSVGText::relativeBBox):
        * rendering/SVGInlineTextBox.cpp:
        (WebCore::SVGInlineTextBox::paintCharacters):
        * rendering/SVGInlineTextBox.h:
        * rendering/SVGRootInlineBox.cpp:
        (WebCore::SVGRootInlineBoxPaintWalker::chunkPortionCallback):
        * svg/SVGFont.cpp:
        (WebCore::):
        (WebCore::processArabicFormDetection):
        (WebCore::charactersWithArabicForm):
        (WebCore::isCompatibleArabicForm):
        (WebCore::isCompatibleGlyph):
        (WebCore::svgFontAndFontFaceElementForFontData):
        (WebCore::SVGTextRunWalker::SVGTextRunWalker):
        (WebCore::SVGTextRunWalker::walk):
        (WebCore::floatWidthUsingSVGFontCallback):
        (WebCore::floatWidthMissingGlyphCallback):
        (WebCore::floatWidthOfSubStringUsingSVGFont):
        (WebCore::Font::floatWidthUsingSVGFont):
        (WebCore::drawTextUsingSVGFontCallback):
        (WebCore::drawTextMissingGlyphCallback):
        (WebCore::Font::drawTextUsingSVGFont):
        (WebCore::Font::selectionRectForTextUsingSVGFont):
        * svg/SVGFontElement.cpp:
        (WebCore::SVGFontElement::SVGFontElement):
        (WebCore::SVGFontElement::addGlyphToCache):
        (WebCore::SVGFontElement::removeGlyphFromCache):
        (WebCore::SVGFontElement::firstMissingGlyphElement):
        (WebCore::SVGFontElement::glyphIdentifiersForString):
        * svg/SVGFontElement.h:
        (WebCore::SVGFontElement::maximumHashKeyLength):
        * svg/SVGFontFaceElement.cpp:
        (WebCore::SVGFontFaceElement::createFontData):
        (WebCore::SVGFontFaceElement::rebuildFontFace):
        (WebCore::SVGFontFaceElement::associatedFontElement):
        * svg/SVGFontFaceElement.h:
        * svg/SVGGlyphElement.cpp:
        (WebCore::SVGGlyphElement::insertedIntoDocument):
        (WebCore::SVGGlyphElement::removedFromDocument):
        (WebCore::parseArabicForm):
        (WebCore::SVGGlyphElement::inheritUnspecifiedAttributes):
        (WebCore::SVGGlyphElement::buildGlyphIdentifier):
        * svg/SVGGlyphElement.h:
        (WebCore::SVGGlyphIdentifier::):
        (WebCore::SVGGlyphIdentifier::SVGGlyphIdentifier):
        (WebCore::SVGGlyphIdentifier::inheritedValue):
        (WebCore::SVGGlyphIdentifier::operator==):
        (WebCore::SVGGlyphElement::~SVGGlyphElement):

2008-01-07  David Hyatt  <hyatt@apple.com>

        Fix for bug 13095, CSS3 multiple backgrounds don't work on table cells.

        Reviewed by Dan

        * rendering/RenderBox.h:
        * rendering/RenderTableCell.cpp:
        (WebCore::RenderTableCell::paintBackgroundsBehindCell):

2008-01-07  Holger Freyther  <zecke@selfish.org>

        Reviewed by Alp Toker.

        * Fix indention

        * platform/gtk/ContextMenuGtk.cpp:
        (WebCore::ContextMenu::~ContextMenu):

2008-01-07  Holger Freyther  <zecke@selfish.org>

        Reviewed by Alp Toker.

        * The ContextMenuController is going to live longer than the ContextMenu. It is
        going to live as long as the WebCore::Page is around where the ContextMenu, specially
        in the case of a SubMenu, is gone before we popup the menu.

        * platform/gtk/ContextMenuGtk.cpp:
        (WebCore::menuItemActivated):
        (WebCore::ContextMenu::appendItem):

2008-01-07  Holger Freyther  <zecke@selfish.org>

        Reviewed by Alp Toker.

        * Fix SubMenu handling
        * Do not connect to the activated signal if we are a separator or submenu
        * Change our type from ActionType to SubMenuType when we have a submenu
        * Initialize the SubMenu

        * platform/gtk/ContextMenuGtk.cpp:
        (WebCore::ContextMenu::appendItem):
        * platform/gtk/ContextMenuItemGtk.cpp:
        (WebCore::ContextMenuItem::ContextMenuItem):
        (WebCore::ContextMenuItem::createNativeMenuItem):
        (WebCore::ContextMenuItem::setSubMenu):

2008-01-07  Holger Freyther  <zecke@selfish.org>

        Reviewed by Alp Toker.

        * Qt and Gtk must know if a ContextMenuItem is checkable. Add a new ContextMenuItemType for checkable
        actions.
        * Use this information in the Gtk platform to create a GtkCheckMenuItem when needed.
        * Update the ContextMenuController to accept CheckableActionTypes as well.
        * Change ContextMenu.cpp to use the CheckableActionType. The information if a item is checkable
        was extracted from ContextMenu::checkOrEnableIfNeeded.
        * Update the Qt and Windows port.


        * page/ContextMenuController.cpp:
        * platform/ContextMenu.cpp:
        (WebCore::createAndAppendFontSubMenu):
        (WebCore::createAndAppendSpellingAndGrammarSubMenu):
        (WebCore::createAndAppendSpellingSubMenu):
        (WebCore::createAndAppendWritingDirectionSubMenu):
        * platform/ContextMenuItem.h:
        * platform/gtk/ContextMenuItemGtk.cpp:
        (WebCore::ContextMenuItem::ContextMenuItem):
        (WebCore::ContextMenuItem::createNativeMenuItem):

2008-01-07  Luca Bruno  <lethalman88@gmail.com>

        Reviewed by Alp Toker.

        http://bugs.webkit.org/show_bug.cgi?id=16745
        [GTK] Context menu doesn't feel or look native - no icons

        Use GTK+ stock icons for menu items where possible.

        * platform/gtk/ContextMenuItemGtk.cpp:
        (WebCore::gtkStockIDFromContextMenuAction):
        (WebCore::ContextMenuItem::createNativeMenuItem):
        (WebCore::ContextMenuItem::setAction):

2008-01-07  Dan Bernstein  <mitz@apple.com>

        Reviewed by John Sullivan.

        - make the ATSUI code path work with custom fonts rather than crash

        * platform/graphics/mac/FontCustomPlatformData.cpp:
        (WebCore::FontCustomPlatformData::fontPlatformData):
        * platform/graphics/mac/FontMac.mm:
        (WebCore::initializeATSUStyle):

2008-01-07  Thiago Macieira  <thiago.macieira@trolltech.com>

        Reviewed by Simon.

        abort() now emits the signals, so disconnect them before you abort()

        * platform/network/qt/QNetworkReplyHandler.cpp:
        (WebCore::QNetworkReplyHandler::abort):

2008-01-07  Simon Hausmann  <hausmann@webkit.org>

        Reviewed by Lars.

        Use a faster and safer way of flattening the form data.

        * platform/network/qt/QNetworkReplyHandler.cpp:
        (WebCore::QNetworkReplyHandler::start):

2008-01-07  Simon Hausmann  <hausmann@webkit.org>

        Reviewed by Lars.

        Ported of the network backend of the Qt platform to Qt 4.4's new networking API.

        * WebCore.pro:
        * platform/network/ResourceHandleInternal.h:
        * platform/network/qt/QNetworkReplyHandler.cpp: Added.
        (WebCore::QNetworkReplyHandler::QNetworkReplyHandler):
        (WebCore::QNetworkReplyHandler::abort):
        (WebCore::QNetworkReplyHandler::finish):
        (WebCore::QNetworkReplyHandler::sendResponseIfNeeded):
        (WebCore::QNetworkReplyHandler::forwardData):
        (WebCore::QNetworkReplyHandler::start):
        * platform/network/qt/QNetworkReplyHandler.h: Added.
        (WebCore::QNetworkReplyHandler::reply):
        * platform/network/qt/ResourceHandleQt.cpp:
        (WebCore::ResourceHandle::start):
        (WebCore::ResourceHandle::cancel):
        (WebCore::ResourceHandle::loadResourceSynchronously):
        * platform/network/qt/ResourceRequest.h:
        (WebCore::ResourceRequest::ResourceRequest):
        * platform/network/qt/ResourceRequestQt.cpp: Added.
        (WebCore::ResourceRequest::toNetworkRequest):
        * platform/qt/MIMETypeRegistryQt.cpp:
        (WebCore::MIMETypeRegistry::getMIMETypeForExtension):
        * platform/qt/PlugInInfoStoreQt.cpp:
        (WebCore::PlugInInfoStore::createPluginInfoForPluginAtIndex):
        (WebCore::PlugInInfoStore::pluginCount):
        (WebCore::PlugInInfoStore::pluginNameForMIMEType):

2008-01-07  Holger Hans Peter Freyther  <holger.freyther@trolltech.com>

        Reviewed by Lars.

        * Remove m_dirtyRegion as it is not used as we pass every dirty region
        directly to the ChromeClient

        * platform/qt/ScrollViewQt.cpp:
        (WebCore::ScrollView::paint):

2008-01-06  Nikolas Zimmermann  <zimmermann@kde.org>

        Reviewed by Oliver.

        Small CG paint server cleanups - use more GraphicsContext method where possible.

        * svg/graphics/cg/CgSupport.cpp:
        (WebCore::applyStrokeStyleToContext):
        (WebCore::strokeBoundingBox):
        * svg/graphics/cg/CgSupport.h:
        * svg/graphics/cg/RenderPathCg.cpp:
        (WebCore::RenderPath::strokeContains):
        * svg/graphics/cg/SVGPaintServerGradientCg.cpp:
        (WebCore::SVGPaintServerGradient::setup):
        * svg/graphics/cg/SVGPaintServerPatternCg.cpp:
        (WebCore::SVGPaintServerPattern::setup):
        * svg/graphics/cg/SVGPaintServerSolidCg.cpp:
        (WebCore::SVGPaintServerSolid::setup):

2008-01-06  Nikolas Zimmermann  <zimmermann@kde.org>

        Reviewed by Dan.

        Use new helper function isArabicChar() - which also calls ublock_getCode() == UBLOCK_ARABIC on mac.

        * platform/graphics/mac/FontMac.mm:
        (WebCore::ATSULayoutParameters::initialize):

2008-01-06  Andrew Wellington  <proton@wiretapped.net>

        Reviewed by Darin.
        
        DOMRange doesn't correctly re-size when inserting items (Acid3)
        http://bugs.webkit.org/show_bug.cgi?id=16764
        
        Update the offset for the range when inserting items into the range.

        Test: fast/dom/Range/range-modifycontents.html

        * dom/Range.cpp:
        (WebCore::Range::insertNode):

2008-01-06  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Darin.

        http://bugs.webkit.org/show_bug.cgi?id=16731
        Incorrect node type for whitespace when setting innerHTML in an XHTML document

        Test: fast/dom/xhtml-fragment-whitespace.xhtml

        * dom/XMLTokenizer.cpp: (WebCore::parseXMLDocumentFragment):
        Use balancedCharactersHandler for ignorable whitespace.

2008-01-06  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Darin.

        http://bugs.webkit.org/show_bug.cgi?id=16701
        <rdar://problem/5666580> REGRESSION: URL-encoded space (%20) in livejournal url
        causes page load error

        Test: http/tests/misc/location-with-space.php

        * platform/network/cf/ResourceRequestCFNet.cpp:
        (WebCore::ResourceRequest::doUpdatePlatformRequest): Do update its URL, too.

2008-01-06  Andrew Wellington  <proton@wiretapped.net>

        Reviewed by Darin.
        
        DOMRange.cloneContents does not work (Acid3 bug)
        http://bugs.webkit.org/show_bug.cgi?id=16748
        
        When cloning an empty range, return an empty DocmentFragment instead of
        null or undefined.

        Test: fast/dom/Range/range-clone-empty.html

        * dom/Range.cpp:
        (WebCore::Range::processContents):

2008-01-06  Luca Bruno  <lethalman88@gmail.com>

        Reviewed by Alp Toker.

        Remove curl handles immediately if the timer is not running.

        * platform/network/curl/ResourceHandleManager.cpp:
        (WebCore::ResourceHandleManager::cancel):

2008-01-06  Alp Toker  <alp@atoker.com>

        Reviewed by Eric.

        Cairo canvas refcounting fix. Reference the surface in the constructor
        to match its destruction in the destructor.

        Fixes a crash triggered by leaving this page:
          http://philip.html5.org/tests/canvas/misc/globalalpha-pattern.html

        * html/CanvasPattern.cpp:
        (WebCore::CanvasPattern::CanvasPattern):

2008-01-06  Eric Seidel  <eric@webkit.org>

        Reviewed by darin.

        Make attr selectors case-insensitive for certain HTML attributes
        http://bugs.webkit.org/show_bug.cgi?id=15470

        Test: fast/css/html-attr-case-sensitivity.html

        * css/CSSStyleSelector.cpp:
        (WebCore::addLocalNameToSet):
        (WebCore::createHtmlCaseInsensitiveAttributesSet):
        (WebCore::htmlAttributeHasCaseInsensitiveValue):
        (WebCore::CSSStyleSelector::checkOneSelector):

2008-01-06  Eric Seidel  <eric@webkit.org>

        Reviewed by Sam.

        Fix :checked matching type='text' and add test case
        http://bugs.webkit.org/show_bug.cgi?id=16750

        Test: fast/dom/HTMLInputElement/checked-pseudo-selector.html

        * html/HTMLInputElement.h: isChecked() can only be true for RADIO or CHECKBOX

2008-01-05  Sam Weinig  <sam@webkit.org>

        Reviewed by Eric Seidel.

        Patch for http://bugs.webkit.org/show_bug.cgi?id=16758
        ASSERT when using TreeWalker methods for a current node outside of the root (Acid3)

        - Ensure that returned nodes are within the root node, or return 0, in adherence with the spec.

        Test: fast/dom/TreeWalker/TreeWalker-currentNode.html

        * dom/TreeWalker.cpp:
        (WebCore::TreeWalker::parentNode):
        (WebCore::TreeWalker::firstChild):
        (WebCore::TreeWalker::lastChild):
        (WebCore::TreeWalker::previousSibling):
        (WebCore::TreeWalker::nextSibling):
        (WebCore::TreeWalker::previousNode):
        (WebCore::TreeWalker::nextNode):

2008-01-04  Oliver Hunt  <oliver@apple.com>

        Reviewed by Beth Dakin.

        Fix bounds computation bugs responsible for http://bugs.webkit.org/show_bug.cgi?id=16015
        and other image repaint bugs.

        We now cache the full local bounds for the <image> element, as otherwise certain
        combinations of attribute changes could result in incorrect dirty rects.
        Additionally we no longer use any of the integer bounds fields on RenderObject for
        determining repaint bounds (this was the principle cause of bug #16015).

        I also removed the outline painting code as it was both wrong, and not correctly
        repainted.  I feel safe doing this as no other browser or viewer supports outline
        properties on svg elements.

        I was unable to make a testcase for this unfortunately, despite seemingly deterministic 
        behaviour :(

        * rendering/RenderSVGImage.cpp:
        (WebCore::RenderSVGImage::layout):
        (WebCore::RenderSVGImage::paint):
        (WebCore::RenderSVGImage::nodeAtPoint):
        (WebCore::RenderSVGImage::calculateAbsoluteBounds):
        * rendering/RenderSVGImage.h:

2008-01-04  Beth Dakin  <bdakin@apple.com>

        Reviewed by Oliver.

        Fix for http://bugs.webkit.org/show_bug.cgi?id=16704 input with 
        type="hidden" matches :enabled/:disabled (Acid3 bug)

        Prevent :enabled and :disabled from applying to input type="hidden" 

        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::checkOneSelector): Rather than 
        allowing :enabled and :disabled to apply to all controls, only 
        allow it to apply to non-"hidden" controls
        * dom/Element.h:
        (WebCore::Element::isInputTypeHidden): 
        * html/HTMLInputElement.h:
        (WebCore::HTMLInputElement::isInputTypeHidden):

2008-01-04  Sam Weinig  <sam@webkit.org>

        Reviewed by Oliver Hunt.

        - Match the spec when calling getFloatValue, getStringValue, getCounterValue,
          getRectValue and getRGBColorValue of CSSPrimitiveValue by throwing exceptions
          if the type of the CSSPrimitiveValue is not the same as the type requested.
        - Fix the intermittent assertion failure seen in svg/css/glyph-orientation-rounding-test.xhtml

        Test: fast/css/CSSPrimitiveValue-exceptions.html

        * css/CSSPrimitiveValue.cpp:
        (WebCore::CSSPrimitiveValue::getDoubleValue):
        (WebCore::CSSPrimitiveValue::getStringValue):
        (WebCore::CSSPrimitiveValue::getCounterValue):
        (WebCore::CSSPrimitiveValue::getRectValue):
        (WebCore::CSSPrimitiveValue::getRGBColorValue):
        (WebCore::CSSPrimitiveValue::getPairValue):
        * css/CSSPrimitiveValue.h:
        (WebCore::CSSPrimitiveValue::getFloatValue):
        (WebCore::CSSPrimitiveValue::getIntValue):
        (WebCore::CSSPrimitiveValue::getCounterValue):
        (WebCore::CSSPrimitiveValue::getRectValue):
        (WebCore::CSSPrimitiveValue::getDashboardRegionValue):
        * css/CSSPrimitiveValue.idl:

2008-01-04  Antti Koivisto  <antti@apple.com>

        Reviewed by Darin.
        
        Windows part of <rdar://problem/5647034>
        Media tests crash if an old version of QuickTime is installed

        Check QuickTime version on Windows too.

        * platform/graphics/MediaPlayer.cpp:
        (WebCore::MediaPlayer::isAvailable):
        * platform/graphics/gtk/MediaPlayerPrivateGStreamer.h:
        (WebCore::MediaPlayerPrivate::isAvailable):
        * platform/graphics/win/MediaPlayerPrivateQuickTimeWin.cpp:
        (WebCore::MediaPlayerPrivate::isAvailable):
        * platform/graphics/win/MediaPlayerPrivateQuickTimeWin.h:
        * platform/graphics/win/QTMovieWin.cpp:
        (QTMovieWin::initializeQuickTime):

2008-01-04  Darin Adler  <darin@apple.com>

        Reviewed by Maciej and Alice.

        - fix <rdar://problem/4404302> Borders where there should be none (canadasmountains.com)

        Test: fast/images/border.html

        * html/HTMLImageElement.cpp:
        (WebCore::HTMLImageElement::parseMappedAttribute): Change the code that handles cases
        where the border value is not a number to use the value "0" for the border width instead
        of not setting the border width and style at all. This matches other browsers, and makes
        more sense.

2008-01-04  Antti Koivisto  <antti@apple.com>

        Try to fix 64-bit build

        * platform/graphics/mac/MediaPlayerPrivateQTKit.mm:
        (WebCore::MediaPlayerPrivate::isAvailable):

2008-01-04  Stephanie  <slewis@apple.com>

        Reviewed by Oliver.

        WARNING: NO TEST CASES ADDED OR CHANGED

        Fix another stringImpl leak.

        * platform/text/StringImpl.cpp: remove an extra allocation
        (WebCore::StringImpl::StringImpl):

2008-01-04  Alice Liu  <alice.liu@apple.com>

        Reviewed by Mitz.

        * platform/graphics/win/FontCacheWin.cpp:
        fix loop condition that was causing crash

2008-01-04  Timothy Hatcher  <timothy@apple.com>

        Reviewed by Adam Roben.

        <rdar://problem/5671059> Always show the Timeline and Console buttons in the Inspector

        * page/inspector/inspector.css: Remove styles related to the toggle button
          and make the area always visible. 
        * page/inspector/inspector.html: Remove the toggle button.
        * page/inspector/inspector.js: Remove code to toggle the status area.

2008-01-04  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Adam Roben.

        Temporarily restore BackwardDelete for Windows nightlies to work correctly.

        * editing/EditorCommand.cpp: (WebCore::CommandEntry::):

2008-01-04  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Darin.

        <rdar://problem/5611712> xsl:sort does not use a case folding sort, and the 'case-order' attribute is ignored (16077)

        Enable the fix on Windows.

        * xml/XSLTProcessor.cpp: (WebCore::XSLTProcessor::transformToString):
        Always set a custom sort function, even if it doesn't implement proper collation on the platform.

        * xml/XSLTUnicodeSort.cpp:
        (WebCore::xsltUnicodeSortFunction):
        * xml/XSLTUnicodeSort.h:
        If the platform does not use ICU, or ICU has collation support disabled, fall back to binary comparison.

2008-01-04  Antti Koivisto  <antti@apple.com>

        Fix build.

        * bindings/js/JSHTMLElementWrapperFactory.cpp:

2008-01-04  Antti Koivisto  <antti@apple.com>

        Reviewed by Darin.
        
        Partial fix for <rdar://problem/5647034>
        Media tests crash if an old version of QuickTime is installed

        Disable media support if QuickTime is not current enough (>=7.3).
        
        Windows patch coming soon.

        * bindings/js/JSHTMLElementWrapperFactory.cpp:
        (WebCore::createJSHTMLWrapper):
        * bindings/js/kjs_window.cpp:
        (KJS::Window::getValueProperty):
        * html/HTMLElementFactory.cpp:
        (WebCore::audioConstructor):
        (WebCore::videoConstructor):
        (WebCore::sourceConstructor):
        * platform/graphics/MediaPlayer.cpp:
        (WebCore::MediaPlayer::isAvailable):
        * platform/graphics/MediaPlayer.h:
        * platform/graphics/mac/MediaPlayerPrivateQTKit.h:
        * platform/graphics/mac/MediaPlayerPrivateQTKit.mm:
        (WebCore::MediaPlayerPrivate::isAvailable):

2008-01-04  Timothy Hatcher  <timothy@apple.com>

        Reviewed by Darin Adler.

        <rdar://problem/5604409> JavaScript privilege escalation when Web Inspector accesses page unsafely (16011)

        Check if the property is a getter before asking for the value.
        If the property is a getter, we no longer show the value.

        * page/inspector/PropertiesSidebarPane.js:
        * page/inspector/inspector.css:

2008-01-04  Dan Bernstein  <mitz@apple.com>

        Reviewed by Darin Adler.

        - fix synthetic bold and italic on Windows

        Covered by an existing test.

        * platform/graphics/win/FontPlatformDataWin.cpp:
        (WebCore::FontPlatformData::FontPlatformData):

2008-01-04  Alp Toker  <alp@atoker.com>

        GTK+ autotools build fix. Terminate empty rules.

        * GNUmakefile.am:

2008-01-04  Lars Knoll  <lars@trolltech.com>

        Reviewed by Simon.

        Remove most dependencies of Widget/ScrollView onto native QWidgets.

        This also brings the code closer in line with the Windows code. Seems
        to work nicely on first try :)

        * page/qt/FrameQt.cpp:
        (WebCore::Frame::createScriptInstanceForWidget):
        * platform/Widget.h:
        * platform/qt/PlatformScreenQt.cpp:
        (WebCore::screenDepth):
        (WebCore::screenDepthPerComponent):
        (WebCore::screenIsMonochrome):
        (WebCore::screenRect):
        * platform/qt/PlatformScrollBarQt.cpp:
        (WebCore::PlatformScrollbar::thumbPosition):
        (WebCore::PlatformScrollbar::handleMouseMoveEvent):
        * platform/qt/ScrollViewQt.cpp:
        (WebCore::ScrollView::ScrollViewPrivate::ScrollViewPrivate):
        (WebCore::ScrollView::ScrollViewPrivate::scrollBackingStore):
        (WebCore::ScrollView::updateContents):
        (WebCore::ScrollView::update):
        (WebCore::ScrollView::scrollRectIntoViewRecursively):
        (WebCore::ScrollView::updateScrollbars):
        (WebCore::ScrollView::addChild):
        (WebCore::ScrollView::removeChild):
        (WebCore::ScrollView::paint):
        * platform/qt/WidgetQt.cpp:
        (WebCore::WidgetPrivate::WidgetPrivate):
        (WebCore::WidgetPrivate::~WidgetPrivate):
        (WebCore::Widget::frameGeometry):
        (WebCore::Widget::setFrameGeometry):
        (WebCore::Widget::setCursor):
        (WebCore::Widget::show):
        (WebCore::Widget::hide):
        (WebCore::Widget::nativeWidget):
        (WebCore::Widget::setNativeWidget):
        (WebCore::Widget::suppressInvalidation):
        (WebCore::Widget::setSuppressInvalidation):
        (WebCore::Widget::invalidateRect):
        (WebCore::Widget::topLevel):
        (WebCore::Widget::containingWindow):

2008-01-04  Lars Knoll  <lars@trolltech.com>

        Reviewed by Simon.

        make QWebPage a QObject and get things to compile.

        Nothing works currently though.

        * platform/qt/ScrollViewQt.cpp:
        (WebCore::ScrollView::updateContents):
        (WebCore::ScrollView::update):
        * platform/qt/WidgetQt.cpp:
        (WebCore::Widget::qwidget):
        (WebCore::Widget::invalidateRect):

2008-01-04  Alp Toker  <alp@atoker.com>

        Reviewed by Mark Rowe.

        http://bugs.webkit.org/show_bug.cgi?id=16667
        make -j is failing with the autotools based system

        Support parallel code generation. Nearly every use of explicit
        multiple targets was a potential concurrency bug, though in practice
        the bison rules were the first to be noticed because they took longer
        to complete and broke the build immediately.

        * GNUmakefile.am:

2008-01-04  Alp Toker  <alp@atoker.com>

        Reviewed by Mark Rowe.

        Re-use a single static dummy surface rather than creating and
        destroying a surface for each CairoPath.

        * platform/graphics/cairo/CairoPath.h:
        (WebCore::CairoPath::CairoPath):

2008-01-04  Mark Rowe  <mrowe@apple.com>

        Tiger build fix.

        * platform/Threading.h: The OSAtomic functions take non-volatile pointers on Tiger.

2008-01-03  Mark Rowe  <mrowe@apple.com>

        Reviewed by Maciej Stachowiak.

        Use platform-provided atomic operations in place of inline assembly to
        increase portability.

        * platform/Threading.h:
        (WebCore::atomicIncrement):
        (WebCore::atomicDecrement):

2008-01-03  Oliver Hunt  <oliver@apple.com>

        Reviewed by Maciej.

        Fix <rdar://problem/5668517> REGRESSION: Major under painting issues in SVG (carto.net dock example)

        We need to cache the absolute bounds of the <image>,
        as there's no reliable way to recompute the old bounding
        box one we have started layout.

        * rendering/RenderSVGImage.cpp:
        (WebCore::RenderSVGImage::layout):
        (WebCore::RenderSVGImage::calculateAbsoluteBounds):
        * rendering/RenderSVGImage.h:

2008-01-03  Alp Toker  <alp@atoker.com>

        Reviewed by Mark Rowe.

        Support building in Scratchbox, which has a version of make that fails
        on wildcard syntax. Use a vpath to match IDL files instead.

        * GNUmakefile.am:

2008-01-03  Jon Honeycutt  <jhoneycutt@apple.com>

        Reviewed by Darin.

        <rdar://problem/5504775> PDF page will not load first time after Adobe
        Reader install, unless browser is relaunched

        Refresh and re-search the plugin database if the MIME type is not
        registered.

        * plugins/win/PluginDatabaseWin.cpp:
        (WebCore::PluginDatabaseWin::isMIMETypeRegistered):
        * plugins/win/PluginDatabaseWin.h:

2008-01-03  Dan Bernstein  <mitz@apple.com>

        Reviewed by Darin Adler.

        - fix http://bugs.webkit.org/show_bug.cgi?id=16548
          <rdar://problem/5659452> REGRESSION(r28810): Font style and sizes are weird for Japanese text

        * platform/graphics/win/FontCacheWin.cpp:
        (WebCore::linkedFontEnumProc): Added. This callback is used to fetch
        a valid LOGFONT for a given family.
        (WebCore::getLinkedFonts): Added. Returns a vector of font families
        linked to the given font family by the Windows registry key
        HKLM\Software\...\FontLink\SystemLink. The registry values typically
        differ based on the installed language version of Windows.
        (WebCore::FontCache::getFontDataForCharacters): Changed to not use MLang
        font mapping, which is Windows code page based, except for characters in
        the range U+2000..U+200F. Instead, this function gets the font Uniscribe
        would use for the character. However, that font might not actually
        contain the character, in which case GDI font linking would substitute a
        different font. Therefore, this function walks the linked font list
        until it finds a font that actually contains the character.

2008-01-03  Darin Adler  <darin@apple.com>

        Reviewed by Mitz.

        - fix http://bugs.webkit.org/show_bug.cgi?id=16723
          tables/mozilla/bugs/bug30418.html test failing due to problems updating dynamic border rules

        Test: fast/table/border-changes.html

        * html/HTMLTableElement.h:
        * html/HTMLTableElement.cpp:
        (WebCore::HTMLTableElement::parseMappedAttribute): Check the border type before and after
        parsing attributes, rather than doing this only for the rules attribute.
        (WebCore::HTMLTableElement::cellBorders): Added.
        (WebCore::HTMLTableElement::getSharedCellDecl): Changed to use cellBorders to factor out the
        rule about what type of borders to use.

2008-01-02  Sam Weinig  <sam@webkit.org>

        Reviewed by Darin.

        Pass the prototype of WebCore JS objects up the constructor chain
        rather than explicitly setting using setPrototype.  This removes many
        redundant settings of the prototype on construction.  To avoid a CG 
        hazard, the prototype must be constructed before calling the
        constructor of the JS object.

        - JS objects that inherit from DOMObject, which all bindings objects
          (except Window) do, now can't implicitly have a jsNull prototype, but
          must explicitly pass it up the construction chain.

        * bindings/js/JSCSSRuleCustom.cpp:
        (WebCore::toJS):
        * bindings/js/JSCSSValueCustom.cpp:
        (WebCore::toJS):
        * bindings/js/JSDocumentCustom.cpp:
        (WebCore::toJS):
        * bindings/js/JSEventCustom.cpp:
        (WebCore::toJS):
        * bindings/js/JSEventTargetNode.cpp:
        (WebCore::JSEventTargetNode::JSEventTargetNode):
        * bindings/js/JSEventTargetNode.h:
        * bindings/js/JSHTMLAllCollection.h:
        (WebCore::JSHTMLAllCollection::JSHTMLAllCollection):
        * bindings/js/JSHTMLAudioElementConstructor.cpp:
        (WebCore::JSHTMLAudioElementConstructor::JSHTMLAudioElementConstructor):
        * bindings/js/JSHTMLCollectionCustom.cpp:
        (WebCore::getNamedItems):
        (WebCore::toJS):
        * bindings/js/JSHTMLElementWrapperFactory.cpp:
        (WebCore::createJSHTMLWrapper):
        * bindings/js/JSHTMLFormElementCustom.cpp:
        (WebCore::JSHTMLFormElement::nameGetter):
        * bindings/js/JSHTMLInputElementBase.cpp:
        (WebCore::JSHTMLInputElementBase::JSHTMLInputElementBase):
        * bindings/js/JSHTMLInputElementBase.h:
        * bindings/js/JSHTMLOptionElementConstructor.cpp:
        (WebCore::JSHTMLOptionElementConstructor::JSHTMLOptionElementConstructor):
        * bindings/js/JSLocation.cpp:
        (WebCore::JSLocation::JSLocation):
        * bindings/js/JSLocation.h:
        * bindings/js/JSNamedNodesCollection.cpp:
        (WebCore::JSNamedNodesCollection::JSNamedNodesCollection):
        * bindings/js/JSNamedNodesCollection.h:
        * bindings/js/JSNodeCustom.cpp:
        (WebCore::toJS):
        * bindings/js/JSSVGElementWrapperFactory.cpp:
        (WebCore::createJSSVGWrapper):
        * bindings/js/JSSVGPathSegCustom.cpp:
        (WebCore::toJS):
        * bindings/js/JSStyleSheetCustom.cpp:
        (WebCore::toJS):
        * bindings/js/JSXMLHttpRequest.cpp:
        (KJS::JSXMLHttpRequestConstructorImp::JSXMLHttpRequestConstructorImp):
        (KJS::JSXMLHttpRequestConstructorImp::construct):
        (KJS::JSXMLHttpRequest::JSXMLHttpRequest):
        * bindings/js/JSXMLHttpRequest.h:
        * bindings/js/JSXSLTProcessor.cpp:
        (KJS::JSXSLTProcessor::JSXSLTProcessor):
        (KJS::XSLTProcessorConstructorImp::XSLTProcessorConstructorImp):
        (KJS::XSLTProcessorConstructorImp::implementsConstruct):
        (KJS::XSLTProcessorConstructorImp::construct):
        * bindings/js/JSXSLTProcessor.h:
        * bindings/js/kjs_binding.h:
        (KJS::DOMObject::DOMObject):
        (KJS::cacheDOMObject):
        (KJS::cacheSVGDOMObject):
        * bindings/js/kjs_css.cpp:
        (WebCore::JSRGBColor::JSRGBColor):
        (WebCore::getJSRGBColor):
        * bindings/js/kjs_css.h:
        * bindings/js/kjs_events.cpp:
        (WebCore::JSClipboard::JSClipboard):
        (WebCore::toJS):
        * bindings/js/kjs_events.h:
        * bindings/js/kjs_html.cpp:
        (WebCore::ImageConstructorImp::ImageConstructorImp):
        * bindings/js/kjs_navigator.cpp:
        (KJS::Navigator::Navigator):
        (KJS::PluginBase::PluginBase):
        * bindings/js/kjs_navigator.h:
        * bindings/js/kjs_window.cpp:
        (KJS::Window::Window):
        (KJS::Window::location):
        (KJS::Window::getValueProperty):
        * bindings/js/kjs_window.h:
        * bindings/scripts/CodeGeneratorJS.pm:

2008-01-03  Holger Hans Peter Freyther  <zecke@selfish.org>

        Reviewed by Alp.

        -This is from http://bugs.webkit.org/show_bug.cgi?id=16115

        Change the Gtk ContextMenuItem code to generate the GtkMenuItem
        or GtkCheckMenuItem on the fly. Currently we will create a
        GtkCheckMenuItem if the ContextMenuItem has been checked. What needs
        to be done is to change WebCore to tell the platform code if an item
        is checkable or not.

        * platform/ContextMenuItem.h:
        (WebCore::PlatformMenuItemDescription::PlatformMenuItemDescription):
        * platform/gtk/ContextMenuGtk.cpp:
        (WebCore::ContextMenu::appendItem):
        * platform/gtk/ContextMenuItemGtk.cpp:
        (WebCore::ContextMenuItem::ContextMenuItem):
        (WebCore::ContextMenuItem::~ContextMenuItem):
        (WebCore::ContextMenuItem::createNativeMenuItem):
        (WebCore::ContextMenuItem::releasePlatformDescription):
        (WebCore::ContextMenuItem::type):
        (WebCore::ContextMenuItem::setType):
        (WebCore::ContextMenuItem::action):
        (WebCore::ContextMenuItem::setAction):
        (WebCore::ContextMenuItem::platformSubMenu):
        (WebCore::ContextMenuItem::setSubMenu):
        (WebCore::ContextMenuItem::setChecked):

2008-01-03  Dan Bernstein  <mitz@apple.com>

        Rubber-stamped by Adam Roben.

        - update the project hierarchy to match the on-disk organization of
          the platform directory.

        * WebCore.vcproj/WebCore.vcproj:

2008-01-03  Adam Roben  <aroben@apple.com>

        Fix a buffer overrun and a leak introduced in r29098

        Reviewed by Mark.

        * platform/text/StringImpl.cpp:
        (WebCore::StringImpl::StringImpl): Only allocate one buffer, and make
        it be big enough to hold the string contents plus the null terminator.

2008-01-03  Simon Hausmann  <hausmann@webkit.org>

        Reviewed by Lars.

        Added the first revision of QWebView and started moving functionality from QWebPave over to QWebView and QWebFrame.

        * WebCore.pro:

2008-01-03  Alp Toker  <alp@atoker.com>

        Suggested by Mark Rowe.

        Fix indentation and remove trailing whitespace.

        * platform/network/curl/ResourceHandleManager.cpp:

2008-01-03  Luca Bruno  <lethalman88@gmail.com>

        Reviewed by Alp Toker.

        Fix HTTP POST-based logins to sites like Facebook, GMail by ensuring
        that the two POST methods don't conflict.

        * platform/network/curl/ResourceHandleManager.cpp:
        (WebCore::ResourceHandleManager::setupPOST):

2008-01-02  Darin Adler  <darin@apple.com>

        - touched some files to try to get the Windows buildbot building again

2008-01-02  Dan Bernstein  <mitz@apple.com>

        Reviewed by Sam Weinig.

        - fix small caps rendering

        Covered by an existing test.

        * platform/graphics/win/FontDataWin.cpp:
        (WebCore::FontData::smallCapsFontData):

2008-01-02  Antti Koivisto  <antti@apple.com>

        Reviewed by Oliver.

        Calculate video position and size within the renderer box in WebCore. This
        way the aspect ratio calculation is not needed in each MediaPlayer implementation.
        
        This fixes video aspect ratio on Windows.
        
        Covered by an existing pixel test.

        * platform/graphics/mac/MediaPlayerPrivateQTKit.mm:
        (WebCore::MediaPlayerPrivate::createQTMovieView):
        * rendering/RenderVideo.cpp:
        (WebCore::RenderVideo::videoBox):
        (WebCore::RenderVideo::paintReplaced):
        (WebCore::RenderVideo::updatePlayer):
        * rendering/RenderVideo.h:

2008-01-02  Ada Chan  <adachan@apple.com>

        Fix windows build.

        * WebCore.vcproj/WebCore.vcproj:

2008-01-02  John Sullivan  <sullivan@apple.com>

        Reviewed by Dan Bernstein
        
        - fixed <rdar://problem/5579010> REGRESSION: Safari inserts newlines in tab names when U+2028 is present

        * loader/DocumentLoader.cpp:
        (WebCore::canonicalizedTitle):
        in the code that replaces control characters with white space, also replace the unicode line separator
        and paragraph separator characters

2008-01-02  Darin Adler  <darin@apple.com>

        - fix buffer overruns seen on buildbot

        * platform/text/StringImpl.cpp:
        (WebCore::countCharacter): Added this.
        (WebCore::StringImpl::toCoordsArray): Use countCharacter instead of incorrect find expression.
        (WebCore::StringImpl::toLengthArray): Ditto.
        (WebCore::StringImpl::replace): Added assertions.

2008-01-02  Darin Adler  <darin@apple.com>

        Reviewed by Maciej.

        - fix http://bugs.webkit.org/show_bug.cgi?id=16657
          Acid3 failure since table.caption and table.thead do not work for nodes added by appendChild
        - fix http://bugs.webkit.org/show_bug.cgi?id=16659
          Acid3 expects HTMLTableElement.rows to include a <tr> element that is an immediate child of the <table>

        Tests: dom/html/level2/html/HTMLCollection07.html
               dom/html/level2/html/HTMLCollection08.html
               dom/html/level2/xhtml/HTMLCollection07.xhtml
               dom/html/level2/xhtml/HTMLCollection08.xhtml
               fast/dom/HTMLTableElement/early-acid3-65-excerpt.html
               fast/dom/HTMLTableElement/early-acid3-66-excerpt.html

        * GNUmakefile.am: Added HTMLTableRowsCollection.
        * WebCore.pro: Ditto.
        * WebCore.vcproj/WebCore.vcproj: Ditto.
        * WebCore.xcodeproj/project.pbxproj: Ditto.
        * WebCoreSources.bkl: Ditto.

        * dom/XMLTokenizer.cpp: Took out stray include.

        * html/HTMLCollection.cpp:
        (WebCore::HTMLCollection::itemAfter): Removed all the table rows code, since we now use
        a separate class for that collection. Also got rid of the distinct types for custom collections
        that don't need them (use Other for both).
        * html/HTMLCollection.h: Also made firstItem non-virtual because it doesn't need to be virtual.

        * html/HTMLFormCollection.cpp:
        (WebCore::HTMLFormCollection::HTMLFormCollection): Use Other instead of FormElements
        for the HTMLCollection type.

        * html/HTMLTableElement.cpp:
        (WebCore::HTMLTableElement::HTMLTableElement): Eliminated m_head, m_foot, m_firstBody, and m_caption.
        (WebCore::HTMLTableElement::caption): Added non-inline version. Finds the caption rather than
        keeping a pointer to it.
        (WebCore::HTMLTableElement::setCaption): Rewrote.
        (WebCore::HTMLTableElement::tHead): Ditto.
        (WebCore::HTMLTableElement::setTHead): Ditto.
        (WebCore::HTMLTableElement::tFoot): Ditto.
        (WebCore::HTMLTableElement::setTFoot): Ditto.
        (WebCore::HTMLTableElement::createTHead): Ditto.
        (WebCore::HTMLTableElement::deleteTHead): Ditto.
        (WebCore::HTMLTableElement::createTFoot): Ditto.
        (WebCore::HTMLTableElement::deleteTFoot): Ditto.
        (WebCore::HTMLTableElement::createCaption): Ditto.
        (WebCore::HTMLTableElement::deleteCaption): Ditto.
        (WebCore::HTMLTableElement::lastBody): Added.
        (WebCore::HTMLTableElement::insertRow): Rewrote to use a loop based on code in HTMLTableRowsCollection.
        This is different from the old code mainly in how it handles rows outside any section.
        (WebCore::HTMLTableElement::deleteRow): Ditto.
        (WebCore::HTMLTableElement::addChild): Removed code to set the various members. Keeping pointers to
        these was a possible source of serious bugs too, including crashes with stale pointers, although I
        didn't write any test cases to prove those bugs existed.
        (WebCore::HTMLTableElement::parseMappedAttribute): Changed the rules code to visit all cells, not
        just the cells of the first body. I believe this fixed rendering on some table tests. I think the code
        visits too many cells and also the use of recursion is overkill, but I didn't try to fix that.
        (WebCore::HTMLTableElement::rows): Changed to use the new HTMLTableRowsCollection.
        * html/HTMLTableElement.h: Changed functions to return PassRefPtr, which can be important if strange
        things like DOM mutation events take things ot of the tree before they are safely referenced by
        JavaScript wrappers. Also changed functions to take PassRefPtr and added exceptions. Removed unneeded
        firstTBody and setTBody functions and childrenChanged function override, as well as unused Rules and
        Frame enums. Removed m_head, m_foot, m_firstBody, and m_caption, and added lastBody function. Removed
        unneeded friend declaration for HTMLTableCellElement.
        * html/HTMLTableElement.idl: Allow the setteres for caption, tHead, and tFoot to raise exceptions.

        * html/HTMLTableRowsCollection.cpp: Added. Implements the HTML 5 rule for which rows are in the
        collection in which order.
        * html/HTMLTableRowsCollection.h: Added.

        * loader/FTPDirectoryDocument.cpp:
        (WebCore::FTPDirectoryTokenizer::appendEntry): Use the standard insertRow function instead of
        coming up with our own way of inserting a row. Simplifies things -- we can remove the code to
        create a tbody element.

2008-01-02  Darin Adler  <darin@apple.com>

        Reviewed by Alice and Tim.

        - try to fix GTK and Qt builds

        * platform/win/ScrollViewWin.cpp:
        (WebCore::ScrollView::scroll): Improve logic slightly for the case of
        vertical scrolling when there's no vertical scroll bar.

        * platform/gtk/ScrollViewGtk.cpp:
        (WebCore::ScrollView::scroll): Copy the code from Windows. Maybe this
        should be factored differently.
        * platform/qt/ScrollViewQt.cpp:
        (WebCore::ScrollView::scroll): Ditto.

2008-01-02  Darin Adler  <darin@apple.com>

        Reviewed by Anders.

        - http://bugs.webkit.org/show_bug.cgi?id=16712
          change StringImpl to take and return PassRefPtr instead of raw pointers

        Also eliminated use of const StringImpl. Since StringImpl is immutable there
        is no distinction between a const and non-const one at the moment.

        * WebCore.base.exp: Updated.

        * css/CSSHelper.cpp:
        (WebCore::parseURL): Make String directly, not by making a StringImpl.
        * dom/Attr.cpp:
        (WebCore::Attr::createTextChild): Convert AtomicString to String with domString,
        not via StringImpl.
        (WebCore::Attr::setValue): Remove unneed call to impl() when passing a String
        to a function that takes a String.

        * dom/CDATASection.cpp: Removed unused constructor.
        (WebCore::CDATASection::cloneNode): Added a now-needed .get().
        (WebCore::CDATASection::createNew): Changed function to take a PassRefPtr.
        * dom/CDATASection.h:

        * dom/CharacterData.cpp:
        (WebCore::CharacterData::CharacterData): Removed unneeded initialization and
        ref() now that the string is a RefPtr. Also updated to not call "new StringImpl".
        (WebCore::CharacterData::~CharacterData): Removed unneeded deref() since it's
        a RefPtr.
        (WebCore::CharacterData::setData): More of that.
        (WebCore::CharacterData::substringData): Ditto.
        (WebCore::CharacterData::appendData): Ditto.
        (WebCore::CharacterData::insertData): Ditto.
        (WebCore::CharacterData::deleteData): Ditto.
        (WebCore::CharacterData::replaceData): Ditto.
        (WebCore::CharacterData::nodeValue): Ditto.
        (WebCore::CharacterData::dispatchModifiedEvent): Ditto.
        (WebCore::CharacterData::dump): Ditto.
        * dom/CharacterData.h: Changed to use a RefPtr. I could have used a String
        instead, but since String adds extra branches to handle 0, I figured it was
        more conservative to just use RefPtr. Later it would be good to figure out
        which is preferred style and be more consistent. Maybe we'll phase out
        StringImpl, or maybe we'll go the other way and use it more since it can be
        more efficient.

        * dom/DOMImplementation.cpp:
        (WebCore::addString): Changed set to use String rather than StringImpl.
        (WebCore::isSVG10Feature): Ditto.
        (WebCore::isSVG11Feature): Ditto.
        (WebCore::DOMImplementation::createDocument): Replaced custom code to
        find a colon with a call to String::find.

        * dom/Range.cpp:
        (WebCore::Range::insertNode): Updated since the result of splitText is now
        a PassRefPtr.

        * dom/Text.cpp:
        (WebCore::Text::splitText): Updated since str is now a RefPtr. Also made the
        result of this function be a PassRefPtr.
        (WebCore::Text::createRenderer): Ditto.
        (WebCore::Text::createNew): Made the parameter and result both be PassRefPtr.
        * dom/Text.h:

        * html/HTMLElement.cpp:
        (WebCore::HTMLElement::nodeName): Use String::upper.

        * html/HTMLInputElement.cpp:
        (WebCore::numGraphemeClusters): Remove now-unneeded const.
        (WebCore::numCharactersInGraphemeClusters): Ditto.

        * html/HTMLTokenizer.cpp:
        (WebCore::HTMLTokenizer::processToken): Updated for function name change.

        * platform/text/AtomicString.cpp:
        (WebCore::CStringTranslator::translate): Updated since there is no longer
        a constructor that takes a string.

        * platform/text/PlatformString.h: Added new constructors that take
        PassRefPtr and RefPtr. Removed misleading comment.

        * platform/text/String.cpp:
        (WebCore::String::String): Changed to use StringImpl::create, which handles
        the empty string automatically.
        (WebCore::String::append): Ditto.
        (WebCore::String::charactersWithNullTermination): Similar.
        (WebCore::String::format): Ditto.

        * platform/text/StringHash.h: Took out unneeded const.

        * platform/text/StringImpl.cpp:
        (WebCore::deleteUCharVector): Changed to take a const pointer since the
        buffers are now const UChar buffers.
        (WebCore::StringImpl::StringImpl): Removed some constructors. Got rid of the
        separate init functions. The constructors are now private and used only in
        the create functions and one or two other places.
        (WebCore::StringImpl::containsOnlyWhitespace): Removed now-meaningless const.
        (WebCore::StringImpl::substring): Ditto. Also changed return value to be a
        PassRefPtr.
        (WebCore::StringImpl::characterStartingAt): Ditto.
        (WebCore::StringImpl::toLength): Ditto.
        (WebCore::StringImpl::toCoordsArray): Ditto.
        (WebCore::StringImpl::toLengthArray): Ditto.
        (WebCore::StringImpl::isLower): Ditto.
        (WebCore::StringImpl::lower): Ditto. Changed to use Vector and adopt so we
        don't have to use new directly here. Makes empty string handling more consistent.
        (WebCore::StringImpl::upper): Ditto.
        (WebCore::StringImpl::secure): Ditto.
        (WebCore::StringImpl::foldCase): Ditto.
        (WebCore::StringImpl::stripWhiteSpace): Ditto.
        (WebCore::StringImpl::simplifyWhiteSpace): Ditto.
        (WebCore::StringImpl::capitalize): Ditto.
        (WebCore::StringImpl::toInt): Removed now-meaningless const.
        (WebCore::StringImpl::toInt64): Ditto.
        (WebCore::StringImpl::toUInt64): Ditto.
        (WebCore::StringImpl::toDouble): Ditto.
        (WebCore::StringImpl::toFloat): Ditto.
        (WebCore::StringImpl::find): Ditto.
        (WebCore::StringImpl::reverseFind): Ditto.
        (WebCore::StringImpl::endsWith): Ditto.
        (WebCore::StringImpl::replace): Ditto.
        (WebCore::equal): Ditto.
        (WebCore::equalIgnoringCase): Ditto.
        (WebCore::StringImpl::ascii): Ditto.
        (WebCore::StringImpl::defaultWritingDirection): Ditto.
        (WebCore::StringImpl::createStrippingNullCharacters): Ditto.
        (WebCore::StringImpl::adopt): Added special case so this uses the shared
        empty string like other functions. Also optimized the common case where the
        vector happens to already have the right size so we don't do a fastRealloc
        at all in those cases.
        (WebCore::StringImpl::create): Added. These are now the public functions for
        creating new StringImpl objects. They all implement the shared empty string.
        (WebCore::StringImpl::createWithTerminatingNullCharacter):
        * platform/text/StringImpl.h:

        * platform/text/cf/StringCF.cpp:
        (WebCore::String::String): Use StringImpl::create instead of new StringImpl.
        * platform/text/cf/StringImplCF.cpp:
        (WebCore::StringImpl::createCFString): Removed now-obsolete const.
        * platform/text/mac/StringImplMac.mm:
        (WebCore::StringImpl::operator NSString *): Ditto.
        * platform/text/mac/StringMac.mm:
        (WebCore::String::String): Use StringImpl::create instead of new StringImpl.
        * platform/text/qt/StringQt.cpp:
        (WebCore::String::String): Ditto.
        * platform/text/wx/StringWx.cpp:
        (WebCore::String::String): Ditto.
        * rendering/RenderBR.cpp:
        (WebCore::RenderBR::RenderBR): Ditto.

        * rendering/RenderSVGInlineText.cpp:
        (WebCore::RenderSVGInlineText::RenderSVGInlineText): Use PassRefPtr.
        * rendering/RenderSVGInlineText.h:

        * rendering/RenderText.cpp:
        (WebCore::charactersAreAllASCII): Removed now-unneeded const.
        * rendering/RenderTextFragment.cpp:
        (WebCore::RenderTextFragment::originalText): Use RefPtr.

2008-01-02  Timothy Hatcher  <timothy@apple.com>

        Reviewed by Oliver Hunt.

        <rdar://problem/5618086> WebInspector does not expand the DOM tree after being closed

        Closing the Web Inspector causes the DOM tree outline to be torn down, clearing the
        internal element lookup tables. The represented DOM node object still holds the identifier
        it was assigned, and a later call to findTreeElement will use that original identifier
        against a cleared lookup table. In that case we need to fallback on DOM ancestor lookup.

        * page/inspector/treeoutline.js:
        (TreeOutline.prototype.findTreeElement): If the DOM node already had a __treeElementIdentifier,
        but the TreeOutline no longer has the element in the _knownTreeElements list do an ancestor lookup
        instead of an early return.

2008-01-02  Alice Liu  <alice.liu@apple.com>

        Reviewed by Maciej.

        Fixed <rdar://5283861> (problems scrolling in gmail message content area)

        * platform/ScrollView.h:
        * platform/win/ScrollViewWin.cpp:
        (WebCore::ScrollView::scroll):
         Changed return value to bool to reflect success of scroll attempt

2008-01-02  Alexey Proskuryakov  <ap@webkit.org>

        Fixed a typo (pointed out in review, but I somehow missed it at first).

        * editing/EditorCommand.cpp: (WebCore::executeDelete):

2008-01-02  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Darin.

        Resolved several FIXMEs in EditorCommand.
        Made recently added commands hidden from JS again.
        Removed BackwardDelete implementation, which used to be dead code, but got exposed now.

        Tests: editing/execCommand/delete-no-scroll.html
               editing/execCommand/forward-delete-no-scroll.html
               editing/execCommand/insert-line-break-no-scroll.html

        * editing/EditorCommand.cpp:
        (WebCore::executeDelete):
        (WebCore::executeForwardDelete):
        (WebCore::executeInsertLineBreak):
        (WebCore::supportedFromMenuOrKeyBinding):
        (WebCore::CommandEntry::):

2008-01-02  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Darin.

        http://bugs.webkit.org/show_bug.cgi?id=14555
        action=mailto + method=get - The generated mailto URI is incorrect and the hvalues are encoded twice

        http://bugs.webkit.org/show_bug.cgi?id=14774
        Submitted data only includes first input item

        Reworked encoding of mailto URLs to match other browsers.
        Moved most of related logic from FrameLoader::submitForm() to HTMLFormElement::submit().

        Tests: fast/forms/mailto/advanced-get.html
               fast/forms/mailto/advanced-put.html
               fast/forms/mailto/get-multiple-items-text-plain.html
               fast/forms/mailto/get-multiple-items-x-www-form-urlencoded.html
               fast/forms/mailto/get-multiple-items.html
               fast/forms/mailto/get-non-ascii.html
               fast/forms/mailto/get-non-ascii-text-plain.html
               fast/forms/mailto/get-overwrite-query.html
               fast/forms/mailto/post-append-query.html
               fast/forms/mailto/post-multiple-items-multipart-form-data.html
               fast/forms/mailto/post-multiple-items-text-plain.html
               fast/forms/mailto/post-multiple-items-x-www-form-urlencoded.html
               fast/forms/mailto/post-multiple-items.html

        * html/HTMLFormElement.cpp:
        (WebCore::HTMLFormElement::submit):
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::submitForm):

2008-01-02  Mark Rowe  <mrowe@apple.com>

        Autotools build fix.

        * GNUmakefile.am: Remove files before generating them, not after.

2008-01-02  Mark Rowe  <mrowe@apple.com>

        Rubber-stamped by Alp Toker.

        Add missing dependencies to some GNUmakefile.am rules.

        * GNUmakefile.am:

2008-01-02  Mark Rowe  <mrowe@apple.com>

        Reviewed by Alp Toker.

        Autotools build fix.  Make can expand $@ to any of the targets for the rule,
        while we always want to use the name of the .cpp file as the output file.

        * GNUmakefile.am:

2008-01-02  Luca Bruno  <lethalman88@gmail.com>

        Reviewed by Alp Toker.

        http://bugs.webkit.org/show_bug.cgi?id=16115
        [GTK] ContextMenu and ContextMenuItem lacks an implementation

        Add context menu support.

        Based on a patch by Holger Freyther.

        * platform/gtk/ContextMenuGtk.cpp:
        (WebCore::menuItemActivated):
        (WebCore::ContextMenu::ContextMenu):
        (WebCore::ContextMenu::~ContextMenu):
        (WebCore::ContextMenu::appendItem):
        (WebCore::ContextMenu::setPlatformDescription):
        (WebCore::ContextMenu::releasePlatformDescription):
        * platform/gtk/ContextMenuItemGtk.cpp:
        (WebCore::ContextMenuItem::ContextMenuItem):
        (WebCore::ContextMenuItem::~ContextMenuItem):
        (WebCore::ContextMenuItem::releasePlatformDescription):
        (WebCore::ContextMenuItem::type):
        (WebCore::ContextMenuItem::action):
        (WebCore::ContextMenuItem::setAction):
        (WebCore::ContextMenuItem::platformSubMenu):
        (WebCore::ContextMenuItem::setSubMenu):
        (WebCore::ContextMenuItem::setChecked):
        (WebCore::ContextMenuItem::setEnabled):

2008-01-02  Alp Toker  <alp@atoker.com>

        GTK+ autotools build fix. Track changes in r29073.

        * GNUmakefile.am:

2008-01-01  Darin Adler  <darin@apple.com>

        - fix release build

        * bindings/js/kjs_binding.cpp:
        (KJS::setDOMException): Initialize to avoid uninitialized variable warning.
        Removed default so we get a warning if there's a missing case.

2008-01-01  David D. Kilzer  <ddkilzer@webkit.org>

        Scripting MIME Types application/ecmascript, application/javascript not viewable
        <http://bugs.webkit.org/show_bug.cgi?id=11063>

        Reviewed by Darin.

        This patch consolidates the list of acceptable MIME types for JavaScript
        source into the MIMETypeRegistry class, and replaces checks for these
        types with a call to MIMETypeRegistry::isSupportedJavaScriptMIMEType().

        No tests added since viewing JavaScript source is not testable.

        * dom/DOMImplementation.cpp:
        (WebCore::DOMImplementation::isTextMIMEType): Use
        MIMETypeRegistry::isSupportedJavaScriptMIMEType() instead of a single
        hard-coded MIME type, "application/x-javascript".

        * html/HTMLScriptElement.cpp:
        (WebCore::HTMLScriptElement::shouldExecuteAsJavaScript): Moved list of
        JavaScript MIME types from here to
        MIMETypeRegistry::initialiseSupportedJavaScriptMIMETypes().

        * platform/MIMETypeRegistry.cpp:
        (WebCore::initialiseSupportedJavaScriptMIMETypes): Added. List of
        MIME types came from HTMLScriptElement::shouldExecuteAsJavaScript().
        (WebCore::initialiseSupportedNonImageMimeTypes): Remove single
        hard-coded MIME type, "application/x-javascript", from the list.
        (WebCore::initialiseMIMETypeRegistry): Initialise
        supportedJavaScriptMIMETypes, then pre-populate supportedNonImageMIMETypes
        with values in supportedJavaScriptMIMETypes.
        (WebCore::MIMETypeRegistry::isSupportedJavaScriptMIMEType): Added.

        * platform/MIMETypeRegistry.h: Added isSupportedJavaScriptMIMEType().

2008-01-01  Sam Weinig  <sam@webkit.org>

        Reviewed by Darin.

        Patch for http://bugs.webkit.org/show_bug.cgi?id=16691
        Use real JS objects for the rest of the DOMExceptions (EventException, RangeException, etc)

        - Create JS objects for all the different types of exceptions, each with there own prototype and constructor.
        - Abstract all the logic and storage for exception classes in to an ExceptionBase class.
        - Move specialized ExceptionCodes into the exception classes. (ie. the EventExceptionCode enum is now in EventException).

        Tests: fast/dom/DOMException/EventException.html
               fast/dom/DOMException/RangeException.html
               fast/dom/DOMException/XPathException.html
               http/tests/xmlhttprequest/XMLHttpRequestException.html
               svg/custom/SVGException.html

        * DerivedSources.make:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * WebCoreSources.bkl:
        * bindings/js/JSSVGMatrixCustom.cpp:
        (WebCore::JSSVGMatrix::inverse):
        (WebCore::JSSVGMatrix::rotateFromVector):
        * bindings/js/kjs_binding.cpp:
        (KJS::setDOMException):
        * bindings/scripts/CodeGeneratorJS.pm: Use the constant values defined
        in the IDL as the ObjC bindings do.
        * bindings/scripts/CodeGeneratorObjC.pm:
        * dom/DOMCoreException.cpp: Removed.
        * dom/DOMCoreException.h:
        (WebCore::DOMCoreException::DOMCoreException):
        * dom/DOMCoreException.idl:
        * dom/Event.h:
        * dom/EventException.h: Copied from WebCore/dom/DOMCoreException.h.
        (WebCore::EventException::EventException):
        (WebCore::EventException::):
        * dom/EventException.idl: Copied from WebCore/dom/DOMCoreException.idl.
        * dom/EventTargetNode.cpp:
        (WebCore::EventTargetNode::dispatchEvent):
        * dom/ExceptionBase.cpp: Copied from WebCore/dom/DOMCoreException.cpp.
        (WebCore::ExceptionBase::ExceptionBase):
        (WebCore::ExceptionBase::toString):
        * dom/ExceptionBase.h: Copied from WebCore/dom/DOMCoreException.h.
        (WebCore::ExceptionBase::code):
        * dom/ExceptionCode.cpp:
        (WebCore::getExceptionCodeDescription):
        * dom/ExceptionCode.h:
        (WebCore::):
        * dom/Range.cpp:
        (WebCore::Range::insertNode):
        (WebCore::Range::checkNodeWOffset):
        (WebCore::Range::checkNodeBA):
        (WebCore::Range::selectNode):
        (WebCore::Range::selectNodeContents):
        (WebCore::Range::surroundContents):
        * dom/RangeException.h:
        (WebCore::RangeException::RangeException):
        (WebCore::RangeException::):
        * dom/RangeException.idl:
        * page/DOMWindow.idl:
        * svg/SVGColor.cpp:
        (WebCore::SVGColor::setRGBColor):
        * svg/SVGException.h:
        (WebCore::SVGException::SVGException):
        (WebCore::SVGException::):
        * svg/SVGException.idl:
        * svg/SVGLocatable.cpp:
        (WebCore::SVGLocatable::getTransformToElement):
        * xml/XMLHttpRequest.cpp:
        (WebCore::XMLHttpRequest::dispatchEvent):
        (WebCore::XMLHttpRequest::open):
        (WebCore::XMLHttpRequest::send):
        * xml/XMLHttpRequest.h:
        * xml/XMLHttpRequestException.h: Copied from WebCore/dom/DOMCoreException.h.
        (WebCore::XMLHttpRequestException::XMLHttpRequestException):
        (WebCore::XMLHttpRequestException::):
        * xml/XMLHttpRequestException.idl: Copied from WebCore/dom/DOMCoreException.idl.
        * xml/XPathEvaluator.h:
        * xml/XPathException.h: Copied from WebCore/dom/DOMCoreException.h.
        (WebCore::XPathException::XPathException):
        (WebCore::XPathException::):
        * xml/XPathException.idl: Copied from WebCore/dom/DOMCoreException.idl.
        * xml/XPathParser.cpp:
        (WebCore::XPath::Parser::parseStatement):
        * xml/XPathResult.cpp:
        (WebCore::XPathResult::convertTo):
        (WebCore::XPathResult::numberValue):
        (WebCore::XPathResult::stringValue):
        (WebCore::XPathResult::booleanValue):
        (WebCore::XPathResult::singleNodeValue):
        (WebCore::XPathResult::snapshotLength):
        (WebCore::XPathResult::iterateNext):
        (WebCore::XPathResult::snapshotItem):

2008-01-01  Sam Weinig  <sam@webkit.org>

        Remove JSDomExceptionConstructor.lut.h from clean step
        as it no longer exists.

        * GNUmakefile.am:

2008-01-01  Dan Bernstein  <mitz@apple.com>

        - Windows build fix

        * WebCore.vcproj/WebCore.vcproj:

2008-01-01  Sam Weinig  <sam@webkit.org>

        Try again to fix the builds

        * DerivedSources.make:

2008-01-01  Sam Weinig  <sam@webkit.org>

        Fix non-mac builds.

        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCoreSources.bkl:

2008-01-01  Eric Seidel  <eric@webkit.org>

        Reviewed by Alexey.

        Don't replace \ with / in data: urls
        http://bugs.webkit.org/show_bug.cgi?id=16692

        Test: fast/loader/url-data-replace-backslash.html

        * platform/KURL.cpp:
        (WebCore::KURL::init):

2008-01-01  Alp Toker  <alp@atoker.com>

        GTK+ autotools build fix. Track changes in r29051, r29058 and pass the
        correct parameter to AM_INIT_AUTOMAKE.

        * GNUmakefile.am:

2007-12-31  Sam Weinig  <sam@webkit.org>

        Reviewed by Darin.

        Patch for http://bugs.webkit.org/show_bug.cgi?id=16637
        Acid3 expects ExeceptionCode constants to be defined on DOMException objects

        - Make DOMException a real JS object.

        Test: fast/dom/DOMException/prototype-object.html

        * DerivedSources.make:
        * WebCore.xcodeproj/project.pbxproj:

        This is no longer needed as the autogenerated classes now includes the
        constructor.
        * bindings/js/JSDOMExceptionConstructor.cpp: Removed.
        * bindings/js/JSDOMExceptionConstructor.h: Removed.

        Create on demand and use the new class for DOMExceptions.
        * bindings/js/kjs_binding.cpp:
        (KJS::setDOMException):

        Remove no longer needed custom constructor getter.
        * bindings/js/kjs_window.cpp:
        (KJS::Window::getValueProperty):

        Don't expose DOMCoreException as the name of class by special casing
        the user visible class name to be DOMException.
        * bindings/scripts/CodeGeneratorJS.pm:

        The DOMException class/file needs to be named DOMCoreException because there is
        name conflict with one of the Objective-C bindings classes.  It should be renamed
        to DOMException when the Objective-C bindings are moved into WebKit.
        * dom/DOMCoreException.cpp: Added.
        (WebCore::DOMCoreException::DOMCoreException):
        (WebCore::DOMCoreException::toString):
        * dom/DOMCoreException.h: Added.
        (WebCore::DOMCoreException::):
        (WebCore::DOMCoreException::code):
        (WebCore::DOMCoreException::name):
        (WebCore::DOMCoreException::message):
        * dom/DOMCoreException.idl: Added.
        * page/DOMWindow.idl:

2007-12-31  Sam Weinig  <sam@webkit.org>

        Re-enable querySelector and querySelectorAll and touch the necessary files to not
        kill the windows build.

        * WebCore.vcproj/build-generated-files.sh:
        * bindings/scripts/CodeGeneratorCOM.pm:
        * dom/Document.idl:
        * dom/Element.idl:

2007-12-31  Darin Adler  <darin@apple.com>

        - fix Windows build

        * dom/Document.idl: Temporarily disable querySelector and querySelectorAll, since they are showing
        up as pure virtual functions. Sam can fix this later.
        * dom/Element.idl: Ditto.

2007-12-31  Dan Bernstein  <mitz@apple.com>

        Reviewed by Darin Adler.

        - fix http://bugs.webkit.org/show_bug.cgi?id=14134
          <rdar://problem/5655160> REGRESSION (r25353): Whitespace nodes ignored between inline list items

        Test: fast/dynamic/create-renderer-for-whitespace-only-text.html

        * dom/Node.cpp:
        (WebCore::Node::attach): Added code to check if this node's renderer
        has become the "previous renderer" of any sibling text node, and if so,
        ensure that that node gets a renderer if it now needs one.
        (WebCore::Node::createRendererIfNeeded): Removed the assertion that the
        node is not attached.

2007-12-31  Darin Adler  <darin@apple.com>

        Reviewed by Mitz.

        - fix http://bugs.webkit.org/show_bug.cgi?id=16641
          Acid3 reveals HTMLFormElement.elements fails to update when element name changes

        Test: fast/dom/HTMLFormElement/elements-not-in-document.html

        This was a bug specific to forms that are not in the document tree.
        The fix was to change the code to increment the document version number to match
        up with other document change tracking. Maybe at some point we can clean these up
        so we don't have so many competing change notification systems.

        * dom/ContainerNode.cpp:
        (WebCore::ContainerNode::replaceChild): Removed bogus comment.
        (WebCore::ContainerNode::addChild): Added an explicit incDOMTreeVersion
        call here, since this code path bypasses the subtree-modified event code.

        * dom/Element.cpp:
        (WebCore::Element::setAttribute): Remove the inDocument() check -- not all HTML
        collections are for things in the document.
        (WebCore::Element::setAttributeMap): Ditto.

        * dom/EventTargetNode.cpp:
        (WebCore::EventTargetNode::dispatchSubtreeModifiedEvent): Added a call to
        incDOMTreeVersion here; covers most cases of tree structure changes.

        * dom/Node.cpp:
        (WebCore::Node::attach): Remove call to incDOMTreeVersion -- creating a renderer
        has nothing to do with changes to the DOM tree!
        (WebCore::Node::detach): Ditto.

        * html/HTMLFormElement.cpp:
        (WebCore::HTMLFormElement::registerFormElement): Remove call to incDOMTreeVersion.
        This is handled at a lower level and doesn't need to be here.
        (WebCore::HTMLFormElement::removeFormElement): Ditto.

2007-12-31  Henry Mason  <hmason@mac.com>

        Reviewed by Darin.

        Patch for http://bugs.webkit.org/show_bug.cgi?id=14994
        Support for MessageEvent and cross-domain messaging

        Test: http/tests/messaging/cross-domain-message-send.html

        * DerivedSources.make:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * WebCoreSources.bkl:
        * bindings/js/JSDOMWindowCustom.cpp:
        (WebCore::JSDOMWindow::customGetOwnPropertySlot): Allow cross-domain access to the
        postMessage function.
        (WebCore::JSDOMWindow::postMessage):
        * bindings/js/JSEventCustom.cpp:
        (WebCore::toJS):
        * dom/Event.cpp:
        (WebCore::Event::isMessageEvent):
        * dom/Event.h:
        * dom/EventNames.h: New event name
        * dom/MessageEvent.cpp: Added.
        * dom/MessageEvent.h: Added.
        * dom/MessageEvent.idl: Added.
        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::postMessage): Added.
        * page/DOMWindow.h:
        * page/DOMWindow.idl:

2007-12-31  Darin Adler  <darin@apple.com>

        Suggested by Antti.

        - turn ENABLE_VIDEO back off for Windows until we can install QuickTime on the build bots

        * WebCore.vcproj/WebCore.vcproj: Removed ENABLE_VIDEO.
        * WebCore.vcproj/build-generated-files.sh: Ditto.

2007-12-30  Alp Toker  <alp@atoker.com>

        Reviewed by Dan Bernstein.

        Silence warning.

        * dom/NodeList.h:

2007-12-30  Sam Weinig  <sam@webkit.org>

        Reviewed by Oliver Hunt.

        Fix for http://bugs.webkit.org/show_bug.cgi?id=16387
        Variable names can be enumerated across domains
        <rdar://problem/5640454>

        Test: http/tests/security/cross-frame-access-enumeration.html

        * bindings/js/kjs_window.cpp:
        (KJS::Window::getPropertyNames): Override method to test same-origin policy.
        * bindings/js/kjs_window.h:

2007-12-30  Sam Weinig  <sam@webkit.org>

        Reviewed by Oliver Hunt.

        Patch for http://bugs.webkit.org/show_bug.cgi?id=10686
        event instanceof MouseEvent throws exception

        Add JS constructors for all the Event types.

        Test: fast/events/event-instanceof.html

        * WebCore.xcodeproj/project.pbxproj:
        * dom/KeyboardEvent.idl:
        * dom/MouseEvent.idl:
        * dom/MutationEvent.idl:
        * dom/OverflowEvent.idl:
        * dom/ProgressEvent.idl:
        * dom/TextEvent.idl:
        * dom/UIEvent.idl:
        * dom/WheelEvent.idl:
        * page/DOMWindow.idl:

2007-12-30  David Kilzer  <ddkilzer@webkit.org>

        Reviewed by Darin.

        - fix http://bugs.webkit.org/show_bug.cgi?id=15359
          JPEG image not shown when height is specified as percentage inside a table

        The problem occurs when a replaced element (image, canvas, etc.) with
        a percent-height attribute is contained by a table cell with an auto-
        or percent-height attribute.  If there are no other conditions to cause
        the table cell's height to expand, an available height of zero will
        always be returned.  In these cases, the intrinsic height of the
        replaced element should be used if it is greater than the available
        height of the table cell.

        Tests: fast/replaced/table-percent-height.html
               tables/mozilla/bugs/bug137388-1.html
               tables/mozilla/bugs/bug137388-2.html

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

2007-12-30  Luca Bruno  <lethalman88@gmail.com>

        Reviewed by Alp Toker.

        http://bugs.webkit.org/show_bug.cgi?id=16099
        Crash in CURL for empty POST

        We have to set POST even when the data is empty, otherwise cURL will
        hang while waiting for a response.

        * platform/network/curl/ResourceHandleManager.cpp
        (ResourceHandleManager::setupPOST): allow empty POST

2007-12-29  Jan Michael Alonzo  <jmalonzo@unpluggable.com>

        Reviewed by Alp Toker.

        Move all SVG related stuff inside SVG block. Don't include
        SVGNames, SVGElementFactory, and XLinkNames when SVG is not
        enabled

        * GNUmakefile.am:

2007-12-29  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Darin.

        http://bugs.webkit.org/show_bug.cgi?id=14428
        FCKEditor: Images disappear on drag/drop and copy/paste

        Test: editing/pasteboard/drag-image-in-about-blank-frame.html

        * editing/markup.cpp: (WebCore::createFragmentFromMarkup): Don't use "about:blank" as a
        base URL, just like we don't use an empty one.

2007-12-29  Jan Michael Alonzo  <jmalonzo@unpluggable.com>

        Reviewed by Alp Toker.

        http://bugs.webkit.org/show_bug.cgi?id=16669
        autotools update and fixes

        Autotools update and database/icon database inclusion guard fixes

        * GNUmakefile.am:
          - Update autotools config as per -r29012 changes
          - Fix CSSGrammar.h/cpp generation (Seo Sanghyeon, sanxiyn)
        * dom/Document.cpp:
        * loader/icon/IconDatabase.h:
        * page/DOMWindow.cpp:
        * page/InspectorController.cpp:
        * page/Settings.cpp:
        * storage/Database.h:
          - Remove ENABLE(DATABASE) inclusion guard. Let the includer add the guard instead.

2007-12-29  Nikolas Zimmermann  <zimmermann@kde.org>

        Reviewed by Alexey.

        Respect horiz-origin-x / horiz-origin-y / vert-origin-x / vert-origin-y properties when drawing SVG Fonts.
        (Fixes fonts-elem-05-t.svg in a --svg-fonts build)

        * svg/SVGFont.cpp:
        (WebCore::Font::drawGlyphsWithSVGFont):

2007-12-29  Nikolas Zimmermann  <zimmermann@kde.org>

        Reviewed by Oliver.

        Further SVG Font work. Parse all <glyph> attributes, using SVGGlyphElement::buildGlyphIdentifier.
        SVGFontElement::collectGlyphs() now uses this method. Per character advance values work well now.

        * platform/graphics/FontData.cpp:
        (WebCore::SVGFontData::convertEmUnitToPixel): Add helper function.
        (WebCore::FontData::ascent):
        (WebCore::FontData::descent):
        * platform/graphics/FontData.h:
        * svg/SVGFont.cpp:
        (WebCore::isVerticalWritingMode): Add helper function.
        (WebCore::Font::drawGlyphsWithSVGFont):
        * svg/SVGFontElement.cpp:
        (WebCore::SVGFontElement::collectGlyphs): Simplified implementation - SVGGlyphIdentifier now build by SVGGlyphElement.
        * svg/SVGGlyphElement.cpp:
        (WebCore::parseArabicForm): Helper function.
        (WebCore::parseOrientation): Ditto.
        (WebCore::parsePathData): Ditto.
        (WebCore::SVGGlyphElement::buildGlyphIdentifier):
        * svg/SVGGlyphElement.h:
        (WebCore::SVGGlyphElement::rendererIsNeeded):

2007-12-29  Nikolas Zimmermann  <zimmermann@kde.org>

        Reviewed by Oliver.

        Refactor SVGAnimationElement::parseValues into a generic function parseDelimitedString.
        SVGAnimationElement needs to parse semicolon-seperated strings, SVGGlyphElement comma-seperated.

        * svg/SVGAnimationElement.cpp:
        (WebCore::SVGAnimationElement::parseMappedAttribute):
        * svg/SVGParserUtilities.cpp:
        (WebCore::parseDelimitedString):
        * svg/SVGParserUtilities.h:

2007-12-29  Nikolas Zimmermann  <zimmermann@kde.org>

        Reviewed by Maciej.

        Add new helper structure SVGFontData - FontData holds this object as OwnPtr.
        Store several attribute values there (horiz-adv-x, horiz-origin-x etc..)

        To optimize for the common case ('FontData' used for HTML rendering) it feels
        better to hold one OwnPtr in FontData, than several floats.

        Parse all <font> attributes in SVGFontFaceElement::createFontData.

        * platform/graphics/FontData.cpp:
        (WebCore::SVGFontData::SVGFontData):
        (WebCore::FontData::FontData):
        (WebCore::FontData::ascent):
        (WebCore::FontData::descent):
        * platform/graphics/FontData.h:
        (WebCore::FontData::isSVGFont):
        (WebCore::FontData::svgFontData):
        * svg/SVGFont.cpp:
        (WebCore::Font::drawGlyphsWithSVGFont):
        * svg/SVGFontElement.cpp:
        * svg/SVGFontElement.h:
        (WebCore::SVGFontElement::rendererIsNeeded):
        * svg/SVGFontFaceElement.cpp:
        (WebCore::SVGFontFaceElement::unitsPerEm):
        (WebCore::SVGFontFaceElement::createFontData):

2007-12-28  Darin Adler  <darin@apple.com>

        - try to fix Windows and WX builds (broken by SVG Fonts check-in)

        * platform/graphics/win/FontWin.cpp:
        (WebCore::Font::drawGlyphs): Pass font size to FontData::ascent, now that it requires it.
        I can't see how it can be right to require the font size for ascent and descent,
        but not for other metrics functions in FontData.

        * platform/graphics/wx/FontWx.cpp:
        (WebCore::Font::drawGlyphs): Pass font size to FontData::ascent and FontData::descent.

2007-12-28  Dan Bernstein  <mitz@apple.com>

        Reviewed by Mark Rowe.

        - fix http://bugs.webkit.org/show_bug.cgi?id=16650
          <rdar://problem/5664872> REGRESSION (r28278-r28314): ATSUI uses LTR writing direction for all text runs

        Covered by existing pixel tests.

        * platform/graphics/mac/FontMac.mm:
        (WebCore::Font::drawComplexText): Corrected to maintain the style
        information in the adjusted text run when passing it to
        ATSUILayoutParameters. Prior to r28298 the style was passed separately.

2007-12-29  Nikolas Zimmermann  <zimmermann@kde.org>

        Build fix, not reviewed.

        Add wtf/OwnPtr.h include, to fix --svg-fonts build.

        * css/SVGCSSFontFace.h:

2007-12-29  Nikolas Zimmermann  <zimmermann@kde.org>

        Reviewed by Eric.

        Fixes: http://bugs.webkit.org/show_bug.cgi?id=10649 (WebKit SVG needs SVG Fonts support)

        Begin implementation of SVG Fonts module. Basic documents using SVG Fonts already work.
        Only local, in-document fonts who declare their glyphs using the <glyph d="..."> path syntax
        are supported. (<glyph> containing arbitary SVG content as child elements, not supported yet).

        Limited to single char <-> glyph mapping, no ligatures supported yet.
        (ie. <glyph unicode='A'/> <glyph unicode='AB'/> - it ignores the 'AB' glyph definition for now)

        Mark all SVG Font related classes & usages in ENABLE(SVG_FONTS) blocks.

        No layout test changes for a --no-svg-fonts build, heavy changes if enabled. Because a lot of SVG Font
        attributes are not processed yet, the rendering looks wrong - hence disabled by default.)

        * DerivedSources.make: Add SVGFontElement/SVGGlyphElement/SVGMissingGlyphElement
        * WebCore.pro: Updated build system.
        * WebCore.vcproj/WebCore.vcproj: Ditto.
        * WebCore.xcodeproj/project.pbxproj: Ditto.
        * bindings/js/JSSVGElementWrapperFactory.cpp: Add JSSVGFontElement/JSSVGGlyphElement/JSSVGMissingGlyphElement
        * bindings/objc/DOM.mm: Ditto (for DOMSVG*).
        (WebCore::createElementClassMap):
        * bindings/objc/DOMInternal.h: Ditto.
        * bindings/objc/DOMSVG.h: Ditto.
        * css/CSSFontFace.h: Mark three functions 'virtual', to be overriden by SVGCSSFontFace
        * css/CSSFontFaceSrcValue.h: Add functionality to identify as SVG CSS font face source.
        (WebCore::CSSFontFaceSrcValue::m_fontFaceElement): Hold a pointer to the font face which created it.
        (WebCore::CSSFontFaceSrcValue::svgFontFaceElement):
        (WebCore::CSSFontFaceSrcValue::setSVGFontFaceElement):
        * css/CSSFontSelector.cpp: Build 'SVGCSSFontFace' objects for local, in-document SVG fonts.
        (WebCore::CSSFontSelector::addFontFaceRule):
        * css/SVGCSSFontFace.cpp: Added. (Simplified implementation for SVG Fonts)
        (WebCore::SVGCSSFontFace::SVGCSSFontFace):
        (WebCore::SVGCSSFontFace::~SVGCSSFontFace):
        (WebCore::SVGCSSFontFace::isValid):
        (WebCore::SVGCSSFontFace::addSource):
        (WebCore::SVGCSSFontFace::getFontData):
        * css/SVGCSSFontFace.h: Added.
        * platform/graphics/cg/PathCG.cpp:
        (WebCore::Path::closeSubpath): Silence a CG warning when calling closeSubpath() on empty path.
        * platform/graphics/Font.cpp: Add some logic to call into SVG Font code when operating on SVG Fonts.
        (WebCore::Font::ascent): Pass font size to FontData::ascent() call
        (WebCore::Font::descent): Pass font size to FontData::descent() call
        (WebCore::Font::canUseGlyphCache): Always return true for SVG fonts here.
        (WebCore::Font::drawGlyphBuffer): Call drawGlyphsWithSVGFont (instead of drawGlyphs) if the primary font is a SVG font.
        * platform/graphics/Font.h: Add (SVG-only!) ability to store a RenderObject pointer, to the element which invoked the drawText() call.
        (WebCore::TextRun::TextRun):
        (WebCore::TextRun::referencingRenderObject):
        (WebCore::TextRun::setReferencingRenderObject):
        * platform/graphics/FontData.cpp:
        (WebCore::FontData::FontData):
        (WebCore::FontData::ascent):
        (WebCore::FontData::descent):
        * platform/graphics/FontData.h: Store a pointer to the SVGFontFaceElement, which created this FontData object - needed for drawGlyphsWithSVGFont().
        (WebCore::FontData::isSVGFont): Offer a way to determine wheter this is a FontData object, created by a SVGFontFaceElement.
        (WebCore::FontData::svgFontFace):
        * rendering/SVGInlineTextBox.cpp:
        (WebCore::SVGInlineTextBox::calculateGlyphWidth): Add assertion.
        * rendering/SVGRootInlineBox.cpp:
        (WebCore::svgTextRunForInlineTextBox): Always call 'setReferencingRenderObject(myRenderSVGText)' on the new TextRun
        * svg/SVGFont.cpp: Added.
        (WebCore::Font::drawGlyphsWithSVGFont): Outsourced implementation of SVG Fonts into it's own file.
        * svg/SVGFontElement.cpp: Added. (Note: this holds the GlyphHashMap which associates certain <glyph> objects with unicode values)
        (WebCore::SVGFontElement::SVGFontElement):
        (WebCore::SVGFontElement::~SVGFontElement):
        (WebCore::SVGFontElement::parseMappedAttribute):
        (WebCore::SVGFontElement::collectGlyphs):
        (WebCore::SVGFontElement::glyphIdentifierForGlyphCode):
        * svg/SVGFontElement.h: Added.
        (WebCore::GlyphHash::hash):
        (WebCore::GlyphHash::equal):
        (WebCore::GlyphHashTraits::deletedValue):
        (WebCore::SVGFontElement::rendererIsNeeded):
        (WebCore::SVGFontElement::contextElement):
        * svg/SVGFontElement.idl: Added.
        * svg/SVGFontFaceElement.cpp: Build SVG specific 'FontData' object
        (WebCore::SVGFontFaceElement::unitsPerEm):
        (WebCore::SVGFontFaceElement::fontFamily):
        (WebCore::SVGFontFaceElement::createFontData): Builds SVG specified 'FontData' object with the markup specified ascent/descent values etc..
        (WebCore::SVGFontFaceElement::rebuildFontFace): Construct CSSFontFaceSrc object (marked as 'isSVGFontFaceSrc') to satisfy CSSFontSelector::addFontFaceRule.
        (WebCore::SVGFontFaceElement::insertedIntoDocument): Rebuild font face.
        (WebCore::SVGFontFaceElement::glyphIdentifierForGlyphCode): Allows drawGlyphsWithSVGFont to access the glyph hash map living in the SVGFontElement.
        * svg/SVGFontFaceElement.h: Fixed code formatting issues & wrap in ENABLE(SVG_FONTS) blocks.
        * svg/SVGFontFaceElement.idl: Ditto.
        * svg/SVGFontFaceFormatElement.cpp: Ditto.
        * svg/SVGFontFaceFormatElement.h: Ditto.
        * svg/SVGFontFaceFormatElement.idl: Ditto.
        * svg/SVGFontFaceNameElement.cpp: Ditto.
        * svg/SVGFontFaceNameElement.h: Ditto.
        * svg/SVGFontFaceNameElement.idl: Ditto.
        * svg/SVGFontFaceSrcElement.cpp: Ditto.
        * svg/SVGFontFaceSrcElement.h: Ditto.
        * svg/SVGFontFaceSrcElement.idl: Ditto.
        * svg/SVGFontFaceUriElement.cpp: Ditto.
        * svg/SVGFontFaceUriElement.h: Ditto.
        * svg/SVGFontFaceUriElement.idl: Ditto.
        * svg/SVGDefinitionSrcElement.cpp: Ditto.
        * svg/SVGDefinitionSrcElement.h: Ditto.
        * svg/SVGDefinitionSrcElement.idl: Ditto.
        * svg/SVGGlyphElement.cpp: Added.
        (WebCore::SVGGlyphElement::SVGGlyphElement):
        (WebCore::SVGGlyphElement::parseMappedAttribute):
        (WebCore::SVGGlyphElement::childrenChanged):
        * svg/SVGGlyphElement.h: Added.
        (WebCore::SVGGlyphElement::rendererIsNeeded):
        (WebCore::SVGGlyphIdentifier::): Structure holding all data to represent a SVG glyph (origin, advance, orientation etc..)
        (WebCore::SVGGlyphIdentifier::SVGGlyphIdentifier):
        * svg/SVGGlyphElement.idl: Added.
        * svg/SVGMissingGlyphElement.cpp: Added. (stub implementation)
        (WebCore::SVGMissingGlyphElement::SVGMissingGlyphElement):
        (WebCore::SVGMissingGlyphElement::parseMappedAttribute):
        (WebCore::SVGMissingGlyphElement::childrenChanged):
        * svg/SVGMissingGlyphElement.h: Added.
        (WebCore::SVGMissingGlyphElement::rendererIsNeeded):
        * svg/SVGMissingGlyphElement.idl: Added.
        * svg/svgtags.in: Wrap all SVGFont* elements in ENABLE(SVG_FONTS) block - to assure --no-svg-fonts compilation works (which is the default for now!).

2007-12-27  Dan Bernstein  <mitz@apple.com>

        Reviewed by Alexey Proskuryakov.

        - fix http://bugs.webkit.org/show_bug.cgi?id=16628
          ASSERTION FAILED: m_resizeLayer (running layout tests)

        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::~RenderLayer): Avoid calling
        EventHandler::resizeLayerDestroyed() if the document is being destroyed.

2007-12-27  Dan Bernstein  <mitz@apple.com>

        Reviewed by Oliver Hunt.

        - fix http://bugs.webkit.org/show_bug.cgi?id=16603
          <rdar://problem/5664199> Crash when resizing text field

        Test: fast/layers/resize-layer-deletion-crash.html

        The event handler has only a weak reference to the layer that is
        currently in resize mode, so it is the layer's responsibility to let
        the event handler know if it has been destroyed while in that mode.

        * page/EventHandler.cpp:
        (WebCore::EventHandler::resizeLayerDestroyed): Added. Resets
        m_resizeLayer to 0.
        * page/EventHandler.h:
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::~RenderLayer): Added a call to
        EventHandler::resizeLayerDestroyed() if the layer is in resize mode.

2007-12-27  Collin Jackson  <webkit@collinjackson.com>

        Reviewed by Sam Weinig.

        http://bugs.webkit.org/show_bug.cgi?id=16539
        <rdar://problem/5659269>

        The same-origin check was missing in the implementation of 
        setTimeout, setInterval, addEventListener, and removeEventListener.

        Suppose <http://www.badguy.com/> contains an iframe to 
        <http://www.goodguy.com/>. Now www.badguy.com can steal
        www.goodguy.com cookies by running this code:

        setTimeout.call(frames[0], "alert(document.cookie)", 1000);

        This patch changes the behavior so that setTimeout to does 
        nothing and returns an undefined value if the caller is not
        permitted to script the window whose setTimeout method is being
        called. The same applies to setInterval, addEventListener, and 
        removeEventListener.

        Tests: http/tests/security/cross-frame-access-call.html

        * bindings/js/kjs_window.cpp:
        (KJS::WindowProtoFuncSetTimeout::callAsFunction)
        (KJS::WindowProtoFuncSetInterval::callAsFunction)
        (KJS::WindowProtoFuncAddEventListener::callAsFunction)
        (KJS::WindowProtoFuncRemoveEventListener::callAsFunction)

2007-12-27  Dan Bernstein  <mitz@apple.com>

        Reviewed by Dave Hyatt and Sam Weinig.

        - fix <rdar://problem/5605937> Inspector: Disclosure triangle not drawn in node's properties panel until click

        Test: fast/layers/add-layer-with-nested-stacking.html
        Test: fast/layers/remove-layer-with-nested-stacking.html

        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::addChild): If the new child is overflow-only
        but has children of its own, dirty the stacking context's z-order lists
        since the grandchildren might need to be in them.
        (WebCore::RenderLayer::removeChild): Similarly for the old child.

2007-12-27  Jan Michael Alonzo  <jmalonzo@unpluggable.com>

        Reviewed by Alp Toker.

        http://bugs.webkit.org/show_bug.cgi?id=16353
        [GTK] Check for deprecated API use (G_DISABLE_DEPRECATED etc.)

        Added the flags mentioned in the bug only when doing 'debug'
        builds. -DGST_DISABLE_DEPRECATED only added when video is enabled.

        * GNUmakefile.am:
        * WebCore.pro:

2007-12-27  Dan Bernstein  <mitz@apple.com>

        Reviewed by Eric Seidel.

        - fix http://bugs.webkit.org/show_bug.cgi?id=16490
          ASSERT in ~FrameView while viewing/reloading WICD test case

        Test: fast/dynamic/paused-event-dispatch.html

        * page/FrameView.cpp:
        (WebCore::FrameView::~FrameView):
        (WebCore::FrameView::layout): Changed to always pause event dispatch and
        always resume event dispatch, regardless of whether the post-layout
        task timer is active. However, if it is active, assert that event
        dispatch is still paused.

2007-12-27  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Maciej.

        http://bugs.webkit.org/show_bug.cgi?id=14500
        need to be more generous about charset declaration with meta tag
        
        http://bugs.webkit.org/show_bug.cgi?id=12526
        <rdar://problem/4867183> Safari ignores encoding description "charset=Shift_JIS" in invalid html

        <rdar://problem/4892428> Unlike other browsers, WebKit ignores <meta> charset definitions outside the head

        <rdar://problem/5643774> REGRESSION: Text is garbled when clicking a link inside an Arabic website

        Tests: fast/encoding/ahram-org-eg.html
               fast/encoding/bandai-co-jp-releases.html
               fast/encoding/floraexpress-ru.html
               fast/encoding/hanarei-blog32-fc2-com.html
               fast/encoding/yahoo-mail.html

        * loader/TextResourceDecoder.cpp:
        (WebCore::TextResourceDecoder::checkForHeadCharset): Don't stop looking for <meta> until we've
        seen at least 512 bytes of input.

2007-12-26  Jan Michael Alonzo  <jmalonzo@unpluggable.com>

        Reviewed by Alp Toker.

        http://bugs.webkit.org/show_bug.cgi?id=16390
        Use autotools or GNU make as the build system for the GTK port

        * GNUmakefile.am: Added.

2007-12-26  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Sam Weinig.

        http://bugs.webkit.org/show_bug.cgi?id=16609
        Make manual-tests/xmlhttprequest-contenttype-empty.html test automatic

        * manual-tests/xmlhttprequest-contenttype-empty.html: Removed (moved to LayoutTests/http).

2007-12-26  Mark Rowe  <mrowe@apple.com>

        Windows build fix.

        * platform/Threading.h:

2007-12-25  Rob Buis  <buis@kde.org>

        Reviewed by Eric.

        http://bugs.webkit.org/show_bug.cgi?id=15514
        <clipPath> with <use> not respected
        http://bugs.webkit.org/show_bug.cgi?id=16557
        SVG circle elements have been clipped away completely, instead of partially.

        Add toClipPath to get clip path data for the clipping paths. Implement it for <use>, thereby allowing clip paths using use.

        * svg/SVGClipPathElement.cpp:
        (WebCore::SVGClipPathElement::canvasResource):
        * svg/SVGStyledTransformableElement.h:
        (WebCore::SVGStyledTransformableElement::toClipPath):
        * svg/SVGUseElement.cpp:
        (WebCore::isDirectReference):
        (WebCore::SVGUseElement::toClipPath):
        * svg/SVGUseElement.h:

2007-12-25  Sam Weinig  <sam@webkit.org>

        Reviewed by Eric Seidel.

        Clean up the files relating to NodeLists.

        * dom/ChildNodeList.cpp:
        (WebCore::ChildNodeList::ChildNodeList):
        (WebCore::ChildNodeList::length):
        (WebCore::ChildNodeList::item):
        (WebCore::ChildNodeList::nodeMatches):
        * dom/ChildNodeList.h:
        * dom/DynamicNodeList.cpp:
        (WebCore::DynamicNodeList::itemForwardsFromCurrent):
        (WebCore::DynamicNodeList::itemBackwardsFromCurrent):
        (WebCore::DynamicNodeList::itemWithName):
        * dom/DynamicNodeList.h:
        (WebCore::DynamicNodeList::needsNotifications):
        * dom/NameNodeList.cpp:
        (WebCore::NameNodeList::NameNodeList):
        (WebCore::NameNodeList::rootNodeAttributeChanged):
        (WebCore::NameNodeList::nodeMatches):
        * dom/NameNodeList.h:
        * dom/NodeList.h:
        * dom/SelectorNodeList.h:

2007-12-25  Sam Weinig  <sam@webkit.org>

        Fix non-mac builds.

        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCoreSources.bkl:

2007-12-25  Sam Weinig  <sam@webkit.org>

        Rubber stamped by Eric Seidel.

        Move TagNodeList into its own file.

        * WebCore.xcodeproj/project.pbxproj:
        * dom/Node.cpp:
        * dom/TagNodeList.cpp: Copied from dom/Node.cpp.
        (WebCore::TagNodeList::TagNodeList):
        * dom/TagNodeList.h: Copied from dom/Node.cpp.

2007-12-25  Sam Weinig  <sam@webkit.org>

        Reviewed by Eric Seidel.

        Simplify the NodeList architecture.
        - Rename recursiveItem() to item(), since it is not recursive.
        - Make recursiveLength() iterative and rename to length().
        - Remove now unneeded overrides of item() and length() that used 
          to call the recursive variants.

        * dom/ClassNodeList.cpp:
        * dom/ClassNodeList.h:
        * dom/DynamicNodeList.cpp:
        (WebCore::DynamicNodeList::length):
        (WebCore::DynamicNodeList::item):
        (WebCore::DynamicNodeList::rootNodeAttributeChanged): Move implementation 
        into the .cpp file since virtual methods can't be inlined.
        * dom/DynamicNodeList.h:
        * dom/NameNodeList.cpp:
        * dom/NameNodeList.h:
        * dom/Node.cpp:

2007-12-25  Alp Toker  <alp@atoker.com>

        More complete GTK+/Qt/Wx/Win build fixes for breakage introduced in
        r28981.

        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCoreSources.bkl:

2007-12-25  Alp Toker  <alp@atoker.com>

        Win build fix for breakage introduced in r28981.

        * WebCore.vcproj/WebCore.vcproj:

2007-12-25  Alp Toker  <alp@atoker.com>

        Wx build fix for breakage introduced in r28981.

        * WebCoreSources.bkl:

2007-12-25  Alp Toker  <alp@atoker.com>

        GTK+/Qt build fix for breakage introduced in r28981.

        * WebCore.pro:

2007-12-25  David Smith  <catfish.man@gmail.com> and Sam Weinig  <sam@webkit.org>

        Reviewed by Oliver.
        
        - http://bugs.webkit.org/show_bug.cgi?id=16587
        Implement the most useful part of the W3C Selectors API.

        * WebCore.xcodeproj/project.pbxproj:
        * css/CSSStyleSelector.h: Make Node a friend of CSSStyleSelector so it can use checkSelector()
        * dom/ChildNodeList.cpp:
        (WebCore::ChildNodeList::ChildNodeList): Change to being a DynamicNodeList
        * dom/ChildNodeList.h:
        * dom/ClassNodeList.cpp:
        (WebCore::ClassNodeList::ClassNodeList): Change to being a DynamicNodeList
        * dom/ClassNodeList.h:
        * dom/Document.idl: Add the new functions
        * dom/DynamicNodeList.cpp: Copied from WebCore/dom/NodeList.cpp.
        (WebCore::DynamicNodeList::DynamicNodeList): Rename NodeList to DynamicNodeList, to differentiate it from the new StaticNodeList
        (WebCore::DynamicNodeList::~DynamicNodeList):
        (WebCore::DynamicNodeList::recursiveLength):
        (WebCore::DynamicNodeList::itemForwardsFromCurrent):
        (WebCore::DynamicNodeList::itemBackwardsFromCurrent):
        (WebCore::DynamicNodeList::recursiveItem):
        (WebCore::DynamicNodeList::itemWithName):
        (WebCore::DynamicNodeList::rootNodeChildrenChanged):
        (WebCore::DynamicNodeList::Caches::Caches):
        (WebCore::DynamicNodeList::Caches::reset):
        * dom/DynamicNodeList.h: Copied from WebCore/dom/NodeList.h.
        (WebCore::DynamicNodeList::rootNodeAttributeChanged):
        * dom/Element.idl: Add the new functions
        * dom/NameNodeList.cpp: Change to being a DynamicNodeList
        (WebCore::NameNodeList::NameNodeList):
        * dom/NameNodeList.h:
        (WebCore::NameNodeList::rootNodeAttributeChanged):
        * dom/Node.cpp:
        (WebCore::TagNodeList::TagNodeList): Change to being a DynamicNodeList
        (WebCore::Node::registerDynamicNodeList):
        (WebCore::Node::unregisterDynamicNodeList):
        (WebCore::Node::getElementsByName):
        (WebCore::Node::getElementsByClassName):
        (WebCore::Node::querySelector): new
        (WebCore::Node::querySelectorAll): new
        * dom/Node.h:
        * dom/NodeList.cpp: Removed.
        * dom/NodeList.h: This is now an abstract superclass of DynamicNodeList and StaticNodeList
        (WebCore::NodeList::NodeList):
        (WebCore::NodeList::~NodeList):
        * dom/SelectorNodeList.cpp: Added.
        (WebCore::SelectorNodeList::SelectorNodeList): New StaticNodeList subclass that filters elements by CSS selector
        * dom/SelectorNodeList.h: Added.
        * dom/StaticNodeList.cpp: Added.
        (WebCore::StaticNodeList::length):
        (WebCore::StaticNodeList::item):
        (WebCore::StaticNodeList::itemWithName):
        * dom/StaticNodeList.h: Added.
        (WebCore::StaticNodeList::StaticNodeList):
        (WebCore::StaticNodeList::~StaticNodeList):

2007-12-25  Mark Rowe  <mrowe@apple.com>

        Reviewed by Sam Weinig.

        Implement a lock-free ThreadSafeShared for i386, x86_64, ppc and ppc64.
        http://bugs.webkit.org/show_bug.cgi?id=16596

        This is a 1.7x as fast as the lock-based implementation on x86 for a single-threaded use
        of ThreadSafeShared but is closer to 280x as fast when there is heavy concurrent multi-threaded
        access to a single ThreadSafeShared object.

        The atomic operations are based on those used by the Boost C++ library's shared_ptr implementation.

        * platform/Threading.h:
        (WebCore::atomicIncrement):
        (WebCore::atomicDecrement):
        (WebCore::ThreadSafeShared::ThreadSafeShared):
        (WebCore::ThreadSafeShared::ref): Use lock-free operations if available.
        (WebCore::ThreadSafeShared::deref): Ditto.
        (WebCore::ThreadSafeShared::hasOneRef):
        (WebCore::ThreadSafeShared::refCount):
        (WebCore::ThreadSafeShared::isThreadSafe):

2007-12-24  Darin Adler  <darin@apple.com>

        * platform/text/PlatformString.h: Removed now-incorrect comment.
        Added a comment about copy().
        * platform/text/StringImpl.h: Added a comment about copy().

2007-12-24  Darin Adler  <darin@apple.com>

        Reviewed by Maciej.

        - http://bugs.webkit.org/show_bug.cgi?id=16550
          make StringImpl immutable

        I tried to keep the changes to a minimum. In some cases there is
        room for optimization -- I didn't try to add in the "single ref count"
        optimizations and there might be a tiny bit more string copying than
        we had before.

        * WebCore.base.exp: Updated.

        * dom/CharacterData.cpp:
        (WebCore::CharacterData::appendData): Changed to use String since
        StringImpl doesn't have mutating functions any more.
        (WebCore::CharacterData::insertData): Ditto.
        (WebCore::CharacterData::deleteData): Ditto.
        (WebCore::CharacterData::replaceData): Ditto.
        * dom/Text.cpp:
        (WebCore::Text::splitText): Changed to use substring instead of
        remove since StringImpl does't have mutating functions any more.
        * editing/CompositeEditCommand.cpp:
        (WebCore::CompositeEditCommand::deleteInsignificantText): Changed
        to use String instead of StringImpl so we can use remove.

        * platform/text/PlatformString.h: Removed newUninitialized.
        Added append that takes a character pointer and length.

        * platform/text/String.cpp:
        (WebCore::String::insert): Added an implementation that does not
        rely on an underlying StringImpl function.
        (WebCore::String::append): Ditto.
        (WebCore::String::truncate): Ditto.
        (WebCore::String::remove): Ditto.
        (WebCore::String::charactersWithNullTermination): Added an
        implementation that uses the new StringImpl null termination feature,
        which does not require modifying a string.

        * platform/text/StringImpl.cpp:
        (WebCore::isSpace): Fix comment.
        (WebCore::StringImpl::StringImpl): Added a new constructor that makes
        a string with a trailing null character.
        (WebCore::StringImpl::substring): Marked const.
        (WebCore::StringImpl::replace): Marked const; had to add quite a few
        const_cast. Also rewrote one of these to work without modifying the
        existing string.

        * platform/text/StringImpl.h: Fixed a mistake where the empty string had
        m_hasTerminatingNullCharacter uninitialized. Added a type and constructor
        for creating strings that have a trailing null character. Added a
        hasTerminatingNullCharacter function. Removed newUninitialized,
        charactersWithNullTermination, append, insert, truncate, and remove.
        Marked lots of other functions const.

        * platform/text/TextCodecLatin1.cpp:
        (WebCore::TextCodecLatin1::decode): Rewrote to use a Vector instead of
        newUninitialized.
        * platform/text/TextCodecUTF16.cpp:
        (WebCore::TextCodecUTF16::decode): Ditto.
        * platform/text/TextCodecUserDefined.cpp:
        (WebCore::TextCodecUserDefined::decode): Ditto.

        * rendering/RenderStyle.cpp:
        (WebCore::RenderStyle::setContent): Changed to use String since
        StringImpl doesn't have mutating functions any more.

2007-12-24  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Oliver.

        Fix fast/events/arrow-keys-on-body.html, failing on Windows.

        * platform/win/KeyEventWin.cpp:
        (WebCore::isKeypadEvent):
        (WebCore::PlatformKeyboardEvent::PlatformKeyboardEvent):
        Use HIWORD() macro instead of shifting the value explicitly (no change in behavior).

2007-12-23  Alexey Proskuryakov  <ap@webkit.org>

        Fix Debug and Release QTMovieWin bulds.

        * WebCore.vcproj/QTMovieWin.vcproj:
        * WebCore.vcproj/debug.vsprops:
        * WebCore.vcproj/debug_internal.vsprops:
        * WebCore.vcproj/release.vsprops:
        Use LibraryConfigSuffix instead of WebKitConfigSuffix for pthreadVC2.
        Build release import lib into \lib, not \bin.

2007-12-23  Alp Toker  <alp@atoker.com>

        Reviewed by Holger Freyther.

        http://bugs.webkit.org/show_bug.cgi?id=15382
        [CAIRO] Canvas pattern support

        http://bugs.webkit.org/show_bug.cgi?id=16577
        Merge Cairo enhancements from Apollo project

        Add support for canvas patterns.

        Make Image::nativeImageForCurrentFrame() public.

        Fix some typos along the way.

        The globalAlpha canvas fixes are not included in this patch as
        they're slightly more intrusive and may conflict conceptually with
        GraphicsContext::setAlpha().

        * html/CanvasPattern.cpp:
        (WebCore::CanvasPattern::CanvasPattern):
        (WebCore::CanvasPattern::~CanvasPattern):
        (WebCore::CanvasPattern::createPattern):
        * html/CanvasPattern.h:
        (WebCore::CanvasPattern::platformImage):
        * html/CanvasRenderingContext2D.cpp:
        (WebCore::CanvasRenderingContext2D::setShadow):
        (WebCore::CanvasRenderingContext2D::applyShadow):
        (WebCore::CanvasRenderingContext2D::drawImage):
        (WebCore::CanvasRenderingContext2D::createPattern):
        (WebCore::CanvasRenderingContext2D::applyStrokePattern):
        (WebCore::CanvasRenderingContext2D::applyFillPattern):
        * platform/graphics/Image.h:
        (WebCore::Image::nativeImageForCurrentFrame):

2007-12-23  Kevin Ollivier  <kevino@theolliviers.com>

        Reviewed by Eric Seidel.

        Remove getWxBitmap as we have nativeImageForCurrentFrame now,
        and don't draw a border in fillRect.

        * platform/graphics/BitmapImage.h:
        * platform/graphics/wx/GraphicsContextWx.cpp:
        (WebCore::GraphicsContext::fillRect):
        * platform/graphics/wx/ImageWx.cpp:

2007-12-23  Alp Toker  <alp@atoker.com>

        Reviewed by Holger Freyther.

        http://bugs.webkit.org/show_bug.cgi?id=16577
        Merge Cairo enhancements from Apollo project

        This patch is based on initial merging work by Brent Fulgham. Adobe's
        code has been modified in a few places to better suit the existing
        coding style.

        Implement more clipping and drawing functions.

        Save and restore the fill rule manually when clipping.

        Avoid image surface creation when the image buffer has height zero.

        * platform/graphics/cairo/GraphicsContextCairo.cpp:
        (WebCore::GraphicsContext::clip):
        (WebCore::GraphicsContext::addInnerRoundedRectClip):
        (WebCore::GraphicsContext::addPath):
        (WebCore::GraphicsContext::clipOut):
        (WebCore::GraphicsContext::clipOutEllipseInRect):
        (WebCore::GraphicsContext::fillRoundedRect):
        * platform/graphics/cairo/ImageSourceCairo.cpp:
        (WebCore::ImageSource::createFrameAtIndex):

2007-12-23  Nikolas Zimmermann  <zimmermann@kde.org>

        Reviewed by Mark.

        Fix wrong placed ifdef - wrapping SVGDefsElement, instead of SVGDefinitionSrcElement in SVG_FONTS block.

        * bindings/objc/DOM.mm:
        (WebCore::createElementClassMap):

2007-12-22  Alp Toker  <alp@atoker.com>

        GTK+ build fix

        GTK_TARGET_OTHER_APP is not available in older GTK+ versions. Pass
        empty target flags for now.

        Check GTK+, not GLib versions, since they are different.

        * platform/gtk/PasteboardGtk.cpp:
        (WebCore::Pasteboard::documentFragment):

2007-12-22  Luca Bruno  <lethalman88@gmail.com>

        Reviewed by Alp Toker.

        http://bugs.webkit.org/show_bug.cgi?id=16311
        [Gtk] Copy rich text to clipboard as text/plain and text/html.

        Hook into the WebView to get the correct clipboard object on the
        appropriate display. This is necessary because GTK+ does not have
        global clipboards.

        * WebCore.pro:
        * platform/Pasteboard.h:
        (WebCore::Pasteboard::setHelper): added for GTK
        (WebCore::Pasteboard::m_helper): private added for GTK
        * platform/gtk/PasteboardGtk.cpp:
        (WebCore::PasteboardSelectionData): added to support GTK selection data callback
        (WebCore::clipboard_get_contents_cb): added
        (WebCore::clipboard_clear_contents_cb): added
        (WebCore::Pasteboard::~Pasteboard):
        (WebCore::Pasteboard::setHelper):
        (WebCore::Pasteboard::writeSelection): copy rich text
        (WebCore::Pasteboard::documentFragment): 
        (WebCore::Pasteboard::plainText): 
        * platform/gtk/PasteboardHelper.h: Added.

2007-12-22  Nikolas Zimmermann  <zimmermann@kde.org>

        Reviewed by Oliver.

        Fixes: http://bugs.webkit.org/show_bug.cgi?id=15966 (Crash in SVGRootInlineBox::walkTextChunks() on mouse hover)

        Add new isSVGRootInlineBox() function to InlineBox to be able to differentiate between RootInlineBox/SVGRootInlineBox.
        SVG assumed it's root inline box (for <text> elements) is always of type SVGRootInlineBox, which is not the case
        for HTML text in <foreignObject>. Text selection doesn't work so far as line box offsets are wrong - which is visible
        in Web Inspector.

        * rendering/InlineBox.h:
        (WebCore::InlineBox::isSVGRootInlineBox):
        * rendering/SVGInlineTextBox.cpp:
        (WebCore::SVGInlineTextBox::svgRootInlineBox):
        (WebCore::SVGInlineTextBox::closestCharacterToPosition):
        (WebCore::SVGInlineTextBox::selectionRect):
        * rendering/SVGRenderTreeAsText.cpp:
        (WebCore::writeSVGInlineTextBox):
        * rendering/SVGRootInlineBox.h:
        (WebCore::SVGRootInlineBox::isSVGRootInlineBox):

2007-12-22  Alp Toker  <alp@atoker.com>

        LOW_BANDWIDTH_DISPLAY build fix

        Track recent KURL DeprecatedString changes.

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

2007-12-22  Dan Bernstein  <mitz@apple.com>

        - Windows build fix

        * WebCore.vcproj/WebCore.vcproj:

2007-12-22  Xan Lopez  <xan@gnome.org>

        Reviewed by Alp Toker.

        Add missing return 0 to fix a compile warning.

        * page/gtk/FrameGtk.cpp:
        (WebCore::Frame::createScriptInstanceForWidget):

2007-12-21  Antti Koivisto  <antti@apple.com>

        Reviewed by Darin, Adam and Steve.

        Add media playback support for Windows.
        
        The implementation uses low level QuickTime API. DLL is
        needed to work around CF use in both WebKit and QuickTime.
        
        This makes Windows build depend on the QuickTime SDK 
        
        http://developer.apple.com/quicktime/download/
        
        but not QuickTime itself.
        
        QTMovieWinTimer contains some copy code from SharedTimerWin. It
        is used in the QuickTime access DLL which can't use WebCore
        SharedTimer due to dependency problems.

        * WebCore.vcproj/QTMovieWin.vcproj: Added.
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.vcproj/build-generated-files.sh:
        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::setSrc):
        * platform/graphics/MediaPlayer.cpp:
        * platform/graphics/win/MediaPlayerPrivateQuickTimeWin.cpp: Added.
        (WebCore::MediaPlayerPrivate::MediaPlayerPrivate):
        (WebCore::MediaPlayerPrivate::~MediaPlayerPrivate):
        (WebCore::MediaPlayerPrivate::load):
        (WebCore::MediaPlayerPrivate::play):
        (WebCore::MediaPlayerPrivate::pause):
        (WebCore::MediaPlayerPrivate::duration):
        (WebCore::MediaPlayerPrivate::currentTime):
        (WebCore::MediaPlayerPrivate::seek):
        (WebCore::MediaPlayerPrivate::doSeek):
        (WebCore::MediaPlayerPrivate::cancelSeek):
        (WebCore::MediaPlayerPrivate::seekTimerFired):
        (WebCore::MediaPlayerPrivate::setEndTime):
        (WebCore::MediaPlayerPrivate::startEndPointTimerIfNeeded):
        (WebCore::MediaPlayerPrivate::endPointTimerFired):
        (WebCore::MediaPlayerPrivate::paused):
        (WebCore::MediaPlayerPrivate::seeking):
        (WebCore::MediaPlayerPrivate::naturalSize):
        (WebCore::MediaPlayerPrivate::hasVideo):
        (WebCore::MediaPlayerPrivate::setVolume):
        (WebCore::MediaPlayerPrivate::setMuted):
        (WebCore::MediaPlayerPrivate::setRate):
        (WebCore::MediaPlayerPrivate::dataRate):
        (WebCore::MediaPlayerPrivate::maxTimeBuffered):
        (WebCore::MediaPlayerPrivate::maxTimeSeekable):
        (WebCore::MediaPlayerPrivate::maxTimeLoaded):
        (WebCore::MediaPlayerPrivate::bytesLoaded):
        (WebCore::MediaPlayerPrivate::totalBytesKnown):
        (WebCore::MediaPlayerPrivate::totalBytes):
        (WebCore::MediaPlayerPrivate::cancelLoad):
        (WebCore::MediaPlayerPrivate::updateStates):
        (WebCore::MediaPlayerPrivate::didEnd):
        (WebCore::MediaPlayerPrivate::setRect):
        (WebCore::MediaPlayerPrivate::setVisible):
        (WebCore::MediaPlayerPrivate::paint):
        (WebCore::MediaPlayerPrivate::getSupportedTypes):
        (WebCore::MediaPlayerPrivate::movieEnded):
        (WebCore::MediaPlayerPrivate::movieLoadStateChanged):
        (WebCore::MediaPlayerPrivate::movieTimeChanged):
        (WebCore::MediaPlayerPrivate::movieNewImageAvailable):
        * platform/graphics/win/MediaPlayerPrivateQuickTimeWin.h: Added.
        (WebCore::MediaPlayerPrivate::networkState):
        (WebCore::MediaPlayerPrivate::readyState):
        * platform/graphics/win/QTMovieWin.cpp: Added.
        (updateTaskTimer):
        (QTMovieWinPrivate::QTMovieWinPrivate):
        (QTMovieWinPrivate::~QTMovieWinPrivate):
        (taskTimerFired):
        (QTMovieWinPrivate::startTask):
        (QTMovieWinPrivate::endTask):
        (QTMovieWinPrivate::task):
        (QTMovieWinPrivate::registerDrawingCallback):
        (QTMovieWinPrivate::drawingComplete):
        (QTMovieWinPrivate::createGWorld):
        (QTMovieWinPrivate::setSize):
        (QTMovieWinPrivate::deleteGWorld):
        (QTMovieWin::QTMovieWin):
        (QTMovieWin::~QTMovieWin):
        (QTMovieWin::play):
        (QTMovieWin::pause):
        (QTMovieWin::rate):
        (QTMovieWin::setRate):
        (QTMovieWin::duration):
        (QTMovieWin::currentTime):
        (QTMovieWin::setCurrentTime):
        (QTMovieWin::setVolume):
        (QTMovieWin::setMuted):
        (QTMovieWin::dataSize):
        (QTMovieWin::maxTimeLoaded):
        (QTMovieWin::loadState):
        (QTMovieWin::getNaturalSize):
        (QTMovieWin::setSize):
        (QTMovieWin::setVisible):
        (QTMovieWin::paint):
        (QTMovieWin::load):
        (movieDrawingCompleteProc):
        (initializeSupportedTypes):
        (QTMovieWin::countSupportedTypes):
        (QTMovieWin::getSupportedType):
        (QTMovieWin::initializeQuickTime):
        (DllMain):
        * platform/graphics/win/QTMovieWin.h: Added.
        * platform/graphics/win/QTMovieWinTimer.cpp: Added.
        (TimerWindowWndProc):
        (initializeOffScreenTimerWindow):
        (setSharedTimerFiredFunction):
        (timerFired):
        (setSharedTimerFireDelay):
        (stopSharedTimer):
        (setSharedTimerInstanceHandle):
        (systemTime):
        * platform/graphics/win/QTMovieWinTimer.h: Added.
        * rendering/RenderMedia.cpp:
        (WebCore::MediaControlPlayButtonElement::update):

2007-12-21  Brent Fulgham  <bfulgham@gmail.com>

        Reviewed by Alp Toker.

        http://bugs.webkit.org/show_bug.cgi?id=16558
        Cairo WebCore Rendering Fails on arc drawing

        Fix for bug reported (and patched) by Apollo team in which
        arcs were draw in reverse (resulting in inverted images).
        Review of the source found that the 'clockwise' term was
        actually meant to mean 'anticlockwise' so the IDL and
        supporting classes have been changed to match this. 

        * html/CanvasRenderingContext2D.cpp:
        (WebCore::CanvasRenderingContext2D::arc):
        * html/CanvasRenderingContext2D.idl:
        * platform/graphics/cairo/PathCairo.cpp:
        (WebCore::Path::addArc):
        (WebCore::Path::addEllipse):
        * platform/graphics/Path.h:

2007-12-21  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Oliver.

        <rdar://problem/5629995> Incorrect display of Danish characters on web site.

        Test: http/tests/xmlhttprequest/response-encoding.html

        * xml/XMLHttpRequest.cpp: (WebCore::XMLHttpRequest::didReceiveData):
        Default to UTF-8 for HTML, too. It's unfortunate that we have to use different
        rules for main content and XHR responses, but this matches both IE and Firefox.

2007-12-20  Jon Honeycutt  <jhoneycutt@apple.com>

        Reviewed by Kevin Decker.

        <rdar://problem/5655797> REGRESSION(304-306A10) Safari does not find
        shockwave plugin on freshly installed OS

        Look for Director plugin in its native directory.

        * plugins/win/PluginDatabaseWin.cpp:
        (WebCore::PluginDatabaseWin::getPluginsInPaths): The Director plugin
        doesn't start with "np," so special case its filename.
        (WebCore::addMacromediaPluginPaths): Add Flash and "Shockwave 10"
        directories to the plugin paths.
        (WebCore::PluginDatabaseWin::defaultPluginPaths):

2007-12-20  Peter Kasting  <zerodpx@gmail.com>

        Reviewed by Alp Toker.

        http://bugs.webkit.org/show_bug.cgi?id=16508
        Fix regression in GIFImageDecoder.cpp: "Haeberli hack" led to wrongly
        decoded transparent areas.

        * platform/image-decoders/gif/GIFImageDecoder.cpp:
        (WebCore::GIFImageDecoder::haveDecodedRow):
        * platform/image-decoders/gif/GIFImageDecoder.h:
        * platform/image-decoders/gif/GIFImageReader.cpp:
        (GIFImageReader::output_row):

2007-12-20  Justin Garcia  <justin.garcia@apple.com>

        Reviewed by Oliver Hunt.

        <rdar://problem/5543472> GoogleDocs: Safari hangs when creating a list from a particular selection
        
        Still need to fix similar issues with the other operations that iterate 
        over selected paragraphs, like FormatBlock, Indent and Outdent (<rdar://problem/5658933>).

        * editing/IndentOutdentCommand.cpp:
        (WebCore::IndentOutdentCommand::indentRegion): Added a FIXME.
        * editing/IndentOutdentCommand.h: Removed an unused function.
        * editing/InsertListCommand.cpp:
        (WebCore::InsertListCommand::modifyRange): 
        Renamed visibleStart to startOfSelection and visibleEnd to endOfSelection.
        Call the new selectionForParagraphIteration, which a) prevents operations like this
        one from being performed on a table that isn't fully selected (where the selection
        starts just before the table and ends inside it), and b) helps prevent paragraph
        iteration from going past the end of the selection.
        Call the new startOfNextParagraph, instead of using endOfParagraph(v).next(),
        since when v is in the last paragraph of the last cell of a table, that expression 
        will return the position after the table, not the start of the next paragraph.
        * editing/htmlediting.cpp:
        (WebCore::enclosingListChild): Don't go above a table cell, so that list operations
        take effect inside the table cell where they are performed.
        (WebCore::selectionForParagraphIteration): Added, see above.
        (WebCore::indexForVisiblePosition): Moved from IndentOutdentCommand.cpp.
        * editing/htmlediting.h:
        * editing/visible_units.cpp:
        (WebCore::startOfNextParagraph): Added, see above.
        * editing/visible_units.h:
        * editing/TextIterator.h:
        (WebCore::TextIterator::exitNode): Added a FIXME.

2007-12-20  Alp Toker  <alp@atoker.com>

        Rubber-stamped by Maciej.

        http://bugs.webkit.org/show_bug.cgi?id=16542
        [GTK] Text is missing with old Pango version

        Back out commits r28880, r28876, r28865, r28864 which added Pango font
        selection support. These changes caused a regression where no text was
        displayed with older Pango versions.

        * platform/graphics/gtk/FontCacheGtk.cpp:
        (WebCore::FontCache::fontExists):
        * platform/graphics/gtk/FontDataGtk.cpp:
        (WebCore::FontData::platformDestroy):
        (WebCore::FontData::containsCharacters):
        * platform/graphics/gtk/FontPlatformData.h:
        (WebCore::FontPlatformData::FontPlatformData):
        (WebCore::FontPlatformData::hash):
        * platform/graphics/gtk/FontPlatformDataGtk.cpp:
        (WebCore::FontPlatformData::FontPlatformData):
        (WebCore::FontPlatformData::init):
        (WebCore::FontPlatformData::~FontPlatformData):
        (WebCore::FontPlatformData::isFixedPitch):
        (WebCore::FontPlatformData::operator==):
        * platform/graphics/gtk/GlyphPageTreeNodeGtk.cpp:
        (WebCore::GlyphPage::fill):

2007-12-20  Timothy Hatcher  <timothy@apple.com>

        Reviewed by Sam Weinig.

        <rdar://problem/5604897> Double-clicking on JavaScript console error
        won't show the line where it occurred

        Make the URLs clickable in the console, since double clicking is used for
        word text selection. Makes the word "line" localizable. Messages that don't
        have a URL will no longer print "undefined". Messages that have a line number
        less than or equal to 0 will no longer be printed.

        * English.lproj/InspectorLocalizedStrings.js: Add "%s (line %d)".
        * page/inspector/ConsolePanel.js: Tweak how the DOM nodes are created
          and change the click handler to look for a link with the
          "console-message-url" class name.
        * page/inspector/SourcePanel.js: Call setupSourceFrameIfNeeded() if a
          line row is needed. 
        * page/inspector/inspector.css: Update the look of the URL in the console.

2007-12-20  Adam Barth  <hk9565@gmail.com>

        Reviewed and landed by Sam Weinig.

        http://bugs.webkit.org/show_bug.cgi?id=15313
        <rdar://problem/5514516>

        The same-origin check was incorrect in two cases (both fixed in this
        patch):

        A) If both the source and the target have set their document.domain
           to the same value, the protocol must also match in order for
           access to be allowed.  Without this requirement, the browser is
           vulnerable to the following attack:

           1) Suppose there is an HTTPS site (www.example.com) that sets
              document.domain = "example.com".
           2) A network attacker redirects the browser to http://www.example.com/
              a) injects script to set document.domain = "example.com", and
              b) opens a window to https://www.example.com/
           3) Now the network attacker can inject script into the HTTPS page,
              stealing cookies and issuing banking transactions.

        B) If only one of the source and target has set document.domain, then
           access should be denied.  With this behavior, the browser is
           vulnerable to the following attack:

           1) Suppose http://foo.example.com/ opens an iframe to
              http://foo.example.com/frame.html that
              a) sets document.domain = "example.com", and
              b) opens an iframe to http://bar.example.com/
              This is a common usage of document.domain for cross-domain
              communication, see for example:
                http://www.collinjackson.com/research/papers/fp801-jackson.pdf
           2) The inner-most iframe, which is from bar.example.com, sets
              document.domain = "example.com".
           3) Now the inner-most iframe can inject script into the middle
              iframe (say via document.write).  This bar.example.com script
              now has access to the outer-most frame (from foo.example.com).

        Both these changes cause WebKit to match the behavior of Firefox 2 and
        IE6 in these cases.  This patch includes regression tests for both
        issues.

        Internet Explorer 7 and Opera 9 are more strict in that they require
        the port numbers to match when both pages have document.domain set.
        Opera 9 allows access when only one page has set document.domain, but
        this is a security vulnerability.

        Tests: http/tests/security/cross-frame-access-child-explicit-domain.html
               http/tests/security/cross-frame-access-parent-explicit-domain.html

        * bindings/js/kjs_window.cpp:
        (KJS::createWindow):
        (KJS::Window::allowsAccessFrom):
        * dom/Document.cpp:
        (WebCore::Document::domain):
        (WebCore::Document::setDomain):
        (WebCore::Document::initSecurityOrigin):
        * dom/Document.h:
        (WebCore::Document::securityOrigin):
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::begin):
        (WebCore::FrameLoader::checkCallImplicitClose):
        (WebCore::FrameLoader::shouldAllowNavigation):
        * platform/SecurityOrigin.cpp:
        (WebCore::SecurityOrigin::setForURL):
        (WebCore::SecurityOrigin::createForFrame):
        (WebCore::SecurityOrigin::canAccess):
        * platform/SecurityOrigin.h:
        (WebCore::SecurityOrigin::domain):
        * storage/Database.cpp:
        (WebCore::Database::openDatabase):
        (WebCore::Database::Database):
        (WebCore::Database::securityOriginData):
        * storage/Database.h:
        (WebCore::Database::databaseDebugName):
        * storage/DatabaseTracker.cpp:
        (WebCore::DatabaseTracker::canEstablishDatabase):
        * storage/SQLTransaction.cpp:
        (WebCore::SQLTransaction::postflightAndCommit):
        (WebCore::SQLTransaction::cleanupAfterTransactionErrorCallback):

2007-12-20  Rodney Dawes  <dobey@wayofthemonkey.com>

        Reviewed by Darin Adler.

        Define XP_UNIX when building with plugins on X11.
        Use new npruntime_internal.h instead of npruntime.h.
        http://bugs.webkit.org/show_bug.cgi?id=15669

        * ForwardingHeaders/bindings/npruntime_internal.h
        * WebCore.pro:
        * html/HTMLPlugInElement.h:

2007-12-19  johnnyding.webkit  <johnnyding.webkit@gmail.com>

        Reviewed by Alexey. Landed by Stephanie.

        - fix http://bugs.webkit.org/show_bug.cgi?id=16179 | <rdar://problem/5619399>
          Any attribute name start with a unicode which like #xx00(x could be any hex number[0-9a-f]) will cause HTMLTokenizer parse error
          Actually any unicode characters which great than 255 in attribute name will cause Webkit parse the attribute name wrong. So after comparing 
          the same scenario in IE 6/7, FireFox 2/3, Opera, we should treat those characters as part of attribute name.


        * html/HTMLTokenizer.cpp:
        (WebCore::HTMLTokenizer::parseEntity): Handle Unicode Entity Name by using ASCII version of findEntity.
        (WebCore::HTMLTokenizer::parseTag): Let type of ptr match type of cBuffer.
        * html/HTMLTokenizer.h: Change type of cBuffer from char to UChar.

2007-12-20  Eric Seidel  <eric@webkit.org>

        Reviewed by Nikolas Zimmermann.

        WebKit claims to support SVG feature strings it shouldn't
        http://bugs.webkit.org/show_bug.cgi?id=15480

        * dom/DOMImplementation.cpp:
        (WebCore::isSVG10Feature):
        (WebCore::isSVG11Feature):

2007-12-20  John Sullivan  <sullivan@apple.com>

        Reviewed by Oliver and Geoff
        
        - fix <rdar://problem/5536858> Yellow highlight for find results is sometimes shorter 
          than white "hole" behind it

        * rendering/RenderText.cpp:
        (WebCore::RenderText::addLineBoxRects):
        respect useSelectionHeight in all cases; we were only respecting it in one of the two cases

2007-12-20  Dan Bernstein  <mitz@apple.com>

        Reviewed by Darin Adler.

        - fix <rdar://problem/5656368> REGRESSION(3.0.4-ToT): Acid2 test fails to render anything

        * platform/win/ScrollViewWin.cpp:
        (WebCore::ScrollView::maximumScroll): Changed back to return the maximum
        scroll offsets even if scrolling is not allowed, because navigation and
        scrollTo should still work.
        (WebCore::ScrollView::wheelEvent): Added early return if scrolling is
        not allowed.

2007-12-17  Tony Chang  <idealisms@gmail.com>

        Reviewed by Darin.

        - Fix for http://bugs.webkit.org/show_bug.cgi?id=16479
          text selection does not always begin at mouse down point
          Reset the m_dragSrc object on mouse down on all platforms.

        Test: fast/text/reset-drag-on-mouse-down.html

        * page/EventHandler.cpp:
        (WebCore::EventHandler::handleMousePressEvent):
        * page/mac/EventHandlerMac.mm:
        (WebCore::EventHandler::mouseDown):

2007-12-19  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Oliver Hunt.

        Build support:
        * ForwardingHeaders/kjs/SymbolTable.h: Added.
        * ForwardingHeaders/wtf/VectorTraits.h: Added.

        * bindings/js/JSDOMWindowCustom.cpp:
        (WebCore::JSDOMWindow::customGetOwnPropertySlot): Replaced use of
        getDirectLocation with getOwnPropertySlot. getDirectLocation is no
        longer valid, since global declarations are not stored in the property
        map.

        (WebCore::JSDOMWindow::customPut): Replaced use of JSObject::put with
        JSGlobalObject::put. JSObject::put is no longer valid, since global
        declarations are not stored in the property map.

        * bindings/js/kjs_window.cpp: Replaced JSObject:: calls with Base::
        calls, since JSObject is not our base class. This was always a bug, but
        the bug is even more apparent after some of my changes.

        (KJS::Window::clear): Removed call to clearProperties because
        JSGlobalObject::reset takes care of that now.

        * history/CachedPage.cpp:
        * history/CachedPage.h: Added support for saving a symbol table and
        localStorage to the page cache, and restoring it.

2007-12-19  Dan Bernstein  <mitz@apple.com>

        Reviewed by Darin Adler and Dave Hyatt.

        - Substitute the user's preferred standard font for an unknown primary
          font before falling back on the platform's last resort font

        Cannot be tested in DumpRenderTree because it sets the standard font to
        Times, which is also the hard-coded last resort font on Mac.

        * css/CSSFontSelector.cpp:
        (WebCore::CSSFontSelector::getFontData): Changed the early bail out
        condition to allow getting generic font families from settings even if
        there are not @font-face rules. Fixed a typo that mapped fantasy to
        cursive. Added a mapping from -webkit-standard to the standard family.
        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::CSSStyleSelector): Changed to always create
        a font selector.
        (WebCore::CSSRuleSet::addRulesFromSheet):
        (WebCore::CSSStyleSelector::applyProperty): Changed to always use the
        font selector.
        * css/CSSStyleSelector.h:
        (WebCore::CSSStyleSelector::fontSelector):
        * platform/graphics/FontCache.cpp:
        (WebCore::FontCache::getFontData): Try the user's preferred standard
        font before the platform's last resort font.

2007-12-19  Sven Herzberg  <sven@imendio.com>

        Reviewed by Alp Toker.

        Scaled font destruction takes place in FontData::platformDestroy(). No
        need to do it in FontPlatformData::~FontPlatformData().

        Destroying platform data in platformDestroy() is a convention we
        borrow from the Mac and Win ports.

        * platform/graphics/gtk/FontPlatformDataGtk.cpp:

2007-12-19  Alice Liu  <alice.liu@apple.com>

        build fix (Windows)

        Changed uint to unsigned int.  uint caused Windows build breakage

        * page/Page.cpp:
        (WebCore::Page::markAllMatchesForText):
        * page/Page.h:

2007-12-19  Christian Dywan  <christian@twotoasts.de> 

        Reviewed by Alp Toker.

        http://bugs.webkit.org/show_bug.cgi?id=16222
        [GTK] Implement inline search and highlighting of matching strings.

        Implement search and highlighting logic directly in WebCore.

        * page/Page.cpp:
        (WebCore::incrementFrame):
        (WebCore::Page::findString):
        (WebCore::Page::markAllMatchesForText):
        (WebCore::Page::unmarkAllTextMatches):
        * page/Page.h:

2007-12-19  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Sam Weinig, Dan Bernstein.

        Tiger build fix: restored some graphics code still needed on Tiger.

        * platform/graphics/GraphicsTypes.h:
        * platform/graphics/cg/GraphicsContextCG.cpp:
        * platform/graphics/mac/GraphicsContextMac.mm:
        (WebCore::GraphicsContext::setCompositeOperation):

2007-12-19  Alp Toker  <alp@atoker.com>

        Build fix for Pango < 1.18.0 breakage introduced in r28864. Use Fc and
        the Pango backend API in these cases.

        * platform/graphics/gtk/FontPlatformDataGtk.cpp:
        (WebCore::FontPlatformData::FontPlatformData):
        (WebCore::FontPlatformData::~FontPlatformData):

2007-12-19  Alice Liu  <alice.liu@apple.com>

        Reviewed by Darin.

        Fixed <rdar://problem/5592485> Safari crashed trying to get a motorcycle insurance quote
        on Geico.com WebCore::Document::inPageCache()

        Calling Node::willRemove on the focusedNode would immediately tell the document to remove
        the focused node, and trigger JS events.  This means that the document is mutated while
        the engine is trying to tell all child nodes that it's about to removed.  To avoid
        crashing, we need to hold off on mutating the document until node traversal is finished.

        * dom/ContainerNode.cpp:
        (WebCore::ContainerNode::removeChild):
        (WebCore::ContainerNode::removeChildren):
        * dom/Node.cpp:
        * dom/Node.h:
        (WebCore::Node::willRemove):
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::clear):

2007-12-19  Andre Boule  <aboule@apple.com>

        Reviewed by Dan Bernstein.

        Test: fast/canvas/canvas-composite.html

        Fix for:
        <rdar://problem/5640059> GraphicsContext::setCompositeOperation should use CGContextSetBlendMode

        This fix makes setCompositeOperation consistent across all platforms that use CG.

        The following compositing modes don't pass however that is covered by another bug:
        source-in
        source-out
        destination-in
        destination-atop
        copy
        <rdar://problem/5651783> Some canvas tag compositing modes don't render correctly

        * platform/graphics/GraphicsTypes.h:
        * platform/graphics/cg/GraphicsContextCG.cpp:
        (WebCore::GraphicsContext::setCompositeOperation):
        * platform/graphics/mac/GraphicsContextMac.mm:
        * platform/win/GraphicsContextWin.cpp:

2007-12-19  Dan Bernstein  <mitz@apple.com>

        Reviewed by Dave Hyatt.

        - fix <rdar://problem/5650045> REGRESSION: major layout problems in svn r28754 WebKit on Vox.com page

        Test: fast/dynamic/subtree-boundary-percent-height.html

        * rendering/RenderObject.cpp:
        (WebCore::objectIsRelayoutBoundary): Do not allow overflows with
        percent heights because sometimes they compute to 'auto'.

2007-12-19  Sam Weinig  <sam@webkit.org>

        Reviewed by Maciej.

        http://bugs.webkit.org/show_bug.cgi?id=16511
        Speed up ClassNodeList and NamedNodeList by using the caching mechanism employed by ChildNodeList.
        - This give a ~2.15x speedup on the native test @ http://ejohn.org/apps/classname/

        * dom/ChildNodeList.cpp: Use the caching NodeList constructor to turn on caching.
        (WebCore::ChildNodeList::ChildNodeList):
        * dom/ClassNodeList.cpp:
        (WebCore::ClassNodeList::ClassNodeList):
        * dom/ClassNodeList.h:

        Move getElementsByName and getElementsByClassName to Node so they
        can use easily employ the caching already used by ChildNodeLists.  In the case of 
        getElementsByClassName, this reduces code duplication in Element as well
        * dom/Document.cpp:
        * dom/Document.h:

        Move getElementsByClassName to Node.
        * dom/Element.cpp:
        * dom/Element.h:

        * dom/NameNodeList.cpp: Use the caching NodeList constructor to turn on caching.
        (WebCore::NameNodeList::NameNodeList):
        (WebCore::NameNodeList::item):
        * dom/NameNodeList.h:

        Add maps of caches for ClassNodeLists and NameNodeList to NodeListsNodeData.
        * dom/Node.cpp:
        (WebCore::TagNodeList::TagNodeList):
        (WebCore::Node::Node):
        (WebCore::Node::~Node):
        (WebCore::Node::childNodes):
        (WebCore::Node::registerNodeList):
        (WebCore::Node::getElementsByName):
        (WebCore::Node::getElementsByClassName):
        * dom/Node.h: Make m_nodeLists an OwnPtr.  Moved getElementsByName and getElementsByClassName here

        Allow subclasses to choose whether they want to receive the notifications using a new bit.
        * dom/NodeList.cpp:
        (WebCore::NodeList::NodeList):
        * dom/NodeList.h:
        (WebCore::NodeList::needsNotifications):

2007-12-19  Dave Hyatt  <hyatt@apple.com>

        Add support for GDI text rendering to WebKit.
      
        Reviewed by mitz
        
        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::applyProperty):
        * dom/Document.cpp:
        (WebCore::Document::recalcStyle):
        * page/Settings.cpp:
        (WebCore::Settings::setFontRenderingMode):
        (WebCore::Settings::fontRenderingMode):
        * page/Settings.h:
        * platform/graphics/Font.h:
        (WebCore::Font::renderingMode):
        * platform/graphics/FontCache.cpp:
        (WebCore::FontPlatformDataCacheKey::FontPlatformDataCacheKey):
        (WebCore::FontPlatformDataCacheKey::operator==):
        (WebCore::computeHash):
        (WebCore::FontCache::getCachedFontPlatformData):
        * platform/graphics/FontDescription.h:
        (WebCore::):
        (WebCore::FontDescription::FontDescription):
        (WebCore::FontDescription::renderingMode):
        (WebCore::FontDescription::setRenderingMode):
        (WebCore::FontDescription::operator==):
        * platform/graphics/GraphicsContext.h:
        * platform/graphics/win/FontCacheWin.cpp:
        (WebCore::FontCache::fontExists):
        (WebCore::FontCache::createFontPlatformData):
        * platform/graphics/win/FontDataWin.cpp:
        (WebCore::FontData::platformInit):
        (WebCore::FontData::smallCapsFontData):
        (WebCore::FontData::containsCharacters):
        (WebCore::FontData::determinePitch):
        (WebCore::FontData::platformWidthForGlyph):
        * platform/graphics/win/FontPlatformData.h:
        (WebCore::FontPlatformData::FontPlatformData):
        (WebCore::FontPlatformData::useGDI):
        (WebCore::FontPlatformData::operator==):
        * platform/graphics/win/FontPlatformDataWin.cpp:
        (WebCore::FontPlatformData::FontPlatformData):
        * platform/graphics/win/FontWin.cpp:
        (WebCore::Font::drawGlyphs):
        * platform/graphics/win/IconWin.cpp:
        (WebCore::Icon::paint):
        * platform/win/GraphicsContextWin.cpp:
        (WebCore::GraphicsContext::getWindowsContext):
        (WebCore::GraphicsContext::releaseWindowsContext):
        * platform/win/UniscribeController.cpp:
        (WebCore::UniscribeController::shapeAndPlaceItem):
        * platform/win/UniscribeController.h:
        * plugins/win/PluginViewWin.cpp:
        (WebCore::PluginViewWin::paint):

2007-12-19  Sven Herzberg  <sven@imendio.com>

        Reviewed by Alp Toker.

        Replace the fontconfig/freetype based font management with a pango
        based one. Fixes:
        http://bugs.webkit.org/show_bug.cgi?id=15229

        * platform/gtk/FontDataGtk.cpp (FontData::platformDestroy()): updated
        the platform specific destroy code
        (FontData::containsCharacters()): implemented font coverage with pango
        * platform/gtk/FontPlatformData.h: replaced fontconfig specific
        members with pango-specific ones
        * platform/gtk/FontPlatformDataGtk.cpp: added static members for the
        FontPlatformData class
        (FontPlatformData::FontPlatformData()): implemented the font-matching
        with a PangoFontDescription instead of an FcPattern; initialize the
        scaled font by using the API for PangoCairoFont
        (FontPlatformData::init()): initialize the PangoFontMap and set up a
        hash table to translate the font family name into a font family
        (FontPlatformData::isFixedPitch()): implemented by querying the
        PangoFontFamily
        (FontPlatformData::operator==): compare the FontPlatformData by
        comparing the font pointers or the described fonts
        * platform/gtk/GlyphPageTreeNodeGtk.cpp (pango_font_get_glyph()):
        added a function to query a glyph from a PangoFont
        (GlyphPage::fill()): implemented the fill function with Pango instead
        of fontconfig/freetype

2007-12-19  Alp Toker  <alp@atoker.com>

        Reviewed by Holger Freyther.

        Improve graphics operator approximations
        
        These changes match Cairo's own CG approximations.

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

2007-12-19  Alp Toker  <alp@atoker.com>

        Reviewed by Holger Freyther.

        Check the bounding box before doing a full hit test

        * platform/graphics/cairo/PathCairo.cpp:
        (WebCore::Path::contains):

2007-12-18  Sam Weinig  <sam@webkit.org>

        Reviewed by Geoff.

        Fix for <rdar://problem/5646478>
        REGRESSION: fast/events/event-view-toString fails on Leopard

        This fixes an issue where we were incorrectly setting the lastInPrototypeChain
        for the JSDOMWindow (the global object) before a call to setPrototype overwrote
        it. This fixes it by passing the prototype up the constructor chain so that it
        is set before any calls can be made.

        * bindings/js/kjs_window.cpp:
        (KJS::Window::Window):
        * bindings/js/kjs_window.h:
        * bindings/scripts/CodeGeneratorJS.pm:

2007-12-18  Beth Dakin  <bdakin@apple.com>

        Reviewed by Oliver.

        Fix for <rdar://problem/5616982> SVGs with width and height 100% 
        fail to render when used as <img> or CSS image (16167)

        This final part of the work fixes the <img> tag.

        This is the real fix. 
        * rendering/RenderImage.cpp:
        (WebCore::RenderImage::calcReplacedWidth): Set the container size 
        on the image. Setting the container size only actually sticks if 
        the values are non-zero, so if the container size really was set, 
        use the imageSize that is calculated using the container size. If 
        it did not stick but the image does have relative width (meaning 
        that the container size is 0), set the width to 0 by hand. We want 
        to avoid setting the width before we have a container size or we 
        will end up incorrectly using the default size of 300x150.
        (WebCore::RenderImage::calcReplacedHeight): Same as above, but for 
        height.

        A few more pieces of information have to be exposed through cached 
        image to make this happen.
        * loader/CachedImage.cpp:
        (WebCore::CachedImage::usesImageContainerSize): As mentioned above, 
        when setContainerSize() is called, the container size is only 
        actually set if the values are non-zero. This call tells you if it 
        was set.
        (WebCore::CachedImage::imageHasRelativeWidth):
        (WebCore::CachedImage::imageHasRelativeHeight):
        * loader/CachedImage.h:
        * platform/graphics/Image.h:
        (WebCore::Image::usesContainerSize):
        * svg/graphics/SVGImage.cpp:
        (WebCore::SVGImage::usesContainerSize):
        * svg/graphics/SVGImage.h:

2007-12-18  Mark Rowe  <mrowe@apple.com>

        Rubber-stamped by Maciej Stachowiak.

        Remove outdated and non-functioning project files for the Apollo port.

        * WebCore.apolloproj: Removed.

2007-12-18  Steve Falkenburg  <sfalken@apple.com>

        <rdar://problem/5649911> REGRESSION (304-306A9): Typing 'p' in popup menu for type-to-select brings up Safari Help
        
        Need to translate the char back into a key code for posting our WM_KEYDOWN.
        
        Reviewed by Ada.

        * platform/win/PopupMenuWin.cpp:
        (WebCore::PopupWndProc):

2007-12-18  Steve Falkenburg  <sfalken@apple.com>

        <rdar://problem/5651534> REGRESSION(r28764-r28765): GDI leak drawing text when no appropriate font is available
        
        Our captured metafile from Uniscribe may contain multiple calls to CreateFontIndirect.
        Only create a font with the last one.
        
        Reviewed by Mitz, Darin.

        * platform/graphics/win/FontCacheWin.cpp:
        (WebCore::metaFileEnumProc):
        (WebCore::FontCache::getFontDataForCharacters):

2007-12-17  Brent Fulgham  <bfulgham@gmail.com>

        Reviewed by Darin.

        http://bugs.webkit.org/show_bug.cgi?id=16464
        Modify WebCore to use win32 thread primitives

        Updates to support native windows threading primitives
        rather than pthreads emulation library.

        * WebCore.vcproj/WebCore.vcproj:
        * config.h:
        * platform/Threading.h:
        * platform/win/MutexWin.cpp: Added.
        (WebCore::Mutex::Mutex):
        (WebCore::Mutex::~Mutex):
        (WebCore::Mutex::lock):
        (WebCore::Mutex::tryLock):
        (WebCore::Mutex::unlock):
        * platform/win/ThreadConditionWin.cpp: Added.
        (WebCore::ThreadCondition::ThreadCondition):
        (WebCore::ThreadCondition::~ThreadCondition):
        (WebCore::ThreadCondition::wait):
        (WebCore::ThreadCondition::signal):
        (WebCore::ThreadCondition::broadcast):
        * platform/win/ThreadingWin.cpp:
        (WebCore::threadMapMutex):
        (WebCore::threadMap):
        (WebCore::storeThreadHandleByIdentifier):
        (WebCore::identifierByThreadHandle):
        (WebCore::threadHandleForIdentifier):
        (WebCore::clearThreadHandleForIdentifier):
        (WebCore::createThread):
        (WebCore::waitForThreadCompletion):
        (WebCore::detachThread):
        (WebCore::currentThread):

2007-12-18  Rodney Dawes  <dobey@wayofthemonkey.com>

        Reviewed by Darin Adler.

        Handle EINTR when set by select() and try the select() again
        http://bugs.webkit.org/show_bug.cgi?id=16071

        * platform/network/curl/ResourceHandleManager.cpp:
        (ResourceHandleManager::downloadTimerCallback):

2007-12-18  Dan Bernstein  <mitz@apple.com>

        Reviewed by Dave Hyatt.

        - avoid the simplified Chinese font linking code for characters that are
          not in any Windows code page

        * platform/graphics/win/FontCacheWin.cpp:
        (WebCore::FontCache::getFontDataForCharacters):

2007-12-18  Brady Eidson <beidson@apple.com>

        Reviewed by Adele

        <rdar://problem/5525770> REGRESSION: HTTP Auth protected favicon request results in a password sheet

        Some http-auth protected sites have the main resource(s) unprotected, but many subresources are
        protected by authentication.  Occasionally one can view the main page of a site but the favicon
        is behind the iron curtain - in these cases, we should *not* prompt for a username and password
        solely for the favicon.

        * loader/ResourceLoader.h: Make didReceiveAuthenticationChallenge virtual

        * loader/SubresourceLoader.cpp:
        (WebCore::SubresourceLoader::didReceiveAuthenticationChallenge): Now that this method
          is virtual from ResourceLoader, SubresourceLoader can override.  First call to the 
          SubresourceLoaderClient.  If they cancel the resource load, return early. Otherwise, let
          ResourceLoader work its magic (resulting in the auth sheet coming down)
        * loader/SubresourceLoader.h:

        * loader/SubresourceLoaderClient.h:
        (WebCore::SubresourceLoaderClient::didReceiveAuthenticationChallenge):

        * loader/icon/IconLoader.cpp:
        (WebCore::IconLoader::didReceiveAuthenticationChallenge): Cancel the resource load, since we should
          never prompt the user for credentials just for a favicon.
        * loader/icon/IconLoader.h:

2007-12-18  John Sullivan  <sullivan@apple.com>

        Reviewed by Brady
        
        - fixed <rdar://problem/5652380> Initial prompt shows "" for databases with no user-visible name

        * storage/DatabaseTracker.cpp:
        (WebCore::DatabaseTracker::canEstablishDatabase):
        pass "name" instead of "displayName" if there's no displayName

2007-12-17  Dan Bernstein  <mitz@apple.com>

        Reviewed by Maciej Stachowiak.

        - restore ButtonFace and ThreeDFace to their previous values for non-Mac
          platforms. The Mac port also uses the same values for now instead
          of NSColor-based ones.

        * rendering/RenderTheme.cpp:
        (WebCore::RenderTheme::systemColor):

2007-12-17  Rodney Dawes  <dobey@wayofthemonkey.com>

        Reviewed by Maciej Stachowiak.

        Define WTF_USE_NPOBJECT and WTF_USE_JAVASCRIPTCORE_BINDINGS for GTK+
        Add required Frame::createScriptInstanceForWidget to FrameGtk

        * config.h:
        * page/gtk/FrameGtk.cpp (Frame::createScriptInstanceForWidget):

2007-12-17  Alice Liu  <alice.liu@apple.com>

        Reviewed by Adam.

        Fixed <rdar://5566435> window with no scrollbars can be scrolled

        * platform/win/ScrollViewWin.cpp:
        (WebCore::ScrollView::maximumScroll):
        corrected maximumScroll() to account for scrolling not allowed.
        (WebCore::ScrollView::wheelEvent):

2007-12-14  Juan A. Suarez Romero  <jasuarez@igalia.com>

        Reviewed by Alp Toker.

        http://bugs.webkit.org/show_bug.cgi?id=16042
        [GTK] Eliminate webkit_init()

        Move webkit initialization to WebView class init.

        * WebCore.pro:

2007-12-17  Jon Honeycutt  <jhoneycutt@apple.com>

        Reviewed by Darin.

        <rdar://problem/5651291> REGRESSION: Flash content doesn't display
        (www.adobe.com)

        We were passing NPEvent** instead of NPEvent* to NPP_HandleEvent.

        * plugins/win/PluginViewWin.cpp:
        (WebCore::PluginViewWin::dispatchNPEvent): Changed to take NPEvent&, not
        NPEvent*
        (WebCore::PluginViewWin::paint): Pass NPEvent, not NPEvent*
        (WebCore::PluginViewWin::handleKeyboardEvent): same
        (WebCore::PluginViewWin::handleMouseEvent): same
        * plugins/win/PluginViewWin.h:

2007-12-17  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Darin.

        Live to the promise of never making AppKit special character codes visible via DOM.

        Test: fast/events/arrow-keys-on-body.html

        * page/EventHandler.cpp:
        (WebCore::EventHandler::keyEvent): Check for empty keypress characters after disambiguation,
        to let quirks-aware code strip special charactrers.
        * platform/mac/KeyEventMac.mm:
        (WebCore::PlatformKeyboardEvent::disambiguateKeyDownEvent): If not in keyboard event quirks
        mode, remove the text if it's a special character.

2007-12-17  Mark Rowe  <mrowe@apple.com>

        Reviewed by Darin Adler.

        Fix incorrect array size and incorrect array index in convertNSColorToColor.

        * rendering/RenderThemeMac.mm:
        (WebCore::convertNSColorToColor):

2007-12-17  Darin Adler  <darin@apple.com>

        Reviewed by Mark Rowe.

        - fix http://bugs.webkit.org/show_bug.cgi?id=16468
          REGRESSION(r28781): Crash running storage/transaction_callback_exception_crash.html

        * storage/DatabaseThread.cpp:
        (WebCore::DatabaseThread::dispatchNextTaskIdentifier): Use a RefPtr for the database
        because there's no guarantee it won't lose its last reference otherwise.

2007-12-17  Dan Bernstein  <mitz@apple.com>

        Reviewed by Maciej Stachowiak.

        - fix <rdar://problem/5333260> Some Chinese characters in Text Encoding menu are bold, others are not
          and <rdar://problem/5280188> Chinese text looks worse on Safari for Windows cf. Safari for Mac

        * platform/graphics/win/FontCacheWin.cpp:
        (WebCore::FontCache::getFontDataForCharacters): To ensure that font
        linking gives consistent results for characters that are exclusive to
        the simplified Chinese code page and characters that belong to that
        code page and other code pages, always ask to map to simplified Chinese
        alone first.

2007-12-17  Christian Dywan  <christian@twotoasts.de>

        Reviewed by Alp Toker.

        http://bugs.webkit.org/show_bug.cgi?id=16378
        Implement Icon for Gtk

        Icon provides a GdkPixbuf containing a themed icon.
        The icon theme is probed for an icon name according to the
        Icon Naming Specification or conventional Gnome icon names respectively.

        See http://standards.freedesktop.org/icon-naming-spec/icon-naming-spec-latest.html

        * platform/graphics/Icon.h:
        * platform/graphics/gtk/IconGtk.cpp:
        (WebCore::Icon::~Icon):
        (WebCore::lookupIconName):
        (WebCore::Icon::newIconForFile):
        (WebCore::Icon::paint):

2007-12-16  Sam Weinig  <sam@webkit.org>

        Reviewed by Mitz.

        Fix for http://bugs.webkit.org/show_bug.cgi?id=16466
        Move the JS Location object to its own file

        - Move Location into its own file and rename it JSLocation.

        * DerivedSources.make:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * WebCoreSources.bkl:
        * bindings/js/JSDocumentCustom.cpp:
        * bindings/js/JSLocation.cpp: Copied from WebCore/bindings/js/kjs_window.cpp.
        (WebCore::):
        (WebCore::JSLocation::JSLocation):
        (WebCore::JSLocation::getValueProperty):
        (WebCore::JSLocation::getOwnPropertySlot):
        (WebCore::JSLocation::put):
        (WebCore::JSLocationProtoFuncReplace::callAsFunction):
        (WebCore::JSLocationProtoFuncReload::callAsFunction):
        (WebCore::JSLocationProtoFuncAssign::callAsFunction):
        (WebCore::JSLocationProtoFuncToString::callAsFunction):
        * bindings/js/JSLocation.h: Copied from WebCore/bindings/js/kjs_window.h.
        (WebCore::JSLocation::):
        (WebCore::JSLocation::frame):
        (WebCore::JSLocation::classInfo):
        * bindings/js/kjs_window.cpp:
        (KJS::Window::location):
        * bindings/js/kjs_window.h:
        * history/CachedPage.cpp:

2007-12-16  Dan Bernstein  <mitz@apple.com>

        Reviewed by Sam Weinig.

        - make 'cursor: copy' and 'cursor: none' work.

        Already covered by manual-tests/cursor.html

        * rendering/RenderStyle.h: Increase the _cursor_style field to 6 bits,
        needed for the 33rd and 34th cursor values.

2007-12-16  Mark Rowe  <mrowe@apple.com>

        Reviewed by Maciej Stachowiak.

        Refactor Mac plugin stream code to use the shared NetscapePlugInStreamLoader implementation.

        * WebCore.base.exp:
        * WebCore.xcodeproj/project.pbxproj:
        * loader/NetscapePlugInStreamLoader.h:
        * loader/mac/NetscapePlugInStreamLoaderMac.mm: Removed.
        * loader/mac/WebPlugInStreamLoaderDelegate.h: Moved to WebKit.

2007-12-16  Sam Weinig  <sam@webkit.org>

        Reviewed by Maciej.

        Yet more of http://bugs.webkit.org/show_bug.cgi?id=16385
        Cleanup kjs_window

        - Move ScheduledAction into its own file and put it in the WebCore namespace.

        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * WebCoreSources.bkl:
        * bindings/js/PausedTimeouts.cpp:
        * bindings/js/PausedTimeouts.h:
        * bindings/js/ScheduledAction.cpp: Copied from bindings/js/kjs_window.cpp.
        (WebCore::ScheduledAction::ScheduledAction):
        (WebCore::ScheduledAction::execute):
        * bindings/js/ScheduledAction.h: Copied from bindings/js/kjs_window.h.
        (WebCore::ScheduledAction::ScheduledAction):
        * bindings/js/kjs_window.cpp:
        (KJS::DOMWindowTimer::DOMWindowTimer):
        (KJS::DOMWindowTimer::action):
        (KJS::DOMWindowTimer::takeAction):
        (KJS::Window::installTimeout):
        (KJS::Window::timerFired):
        * bindings/js/kjs_window.h:

2007-12-16  Alp Toker  <alp@atoker.com>

        Reviewed by Maciej.

        http://bugs.webkit.org/show_bug.cgi?id=16356
        [GTK] Integrate GStreamer video with the graphics backend

        Integrate the GStreamer media backend with the Cairo graphics backend.
        There are still some issues: Data is copied more often than necessary,
        and repaint() is not called, causing transformed video not to update
        sometimes.

        * WebCore.pro:
        * platform/graphics/gtk/MediaPlayerPrivateGStreamer.cpp:
        (WebCore::MediaPlayerPrivate::MediaPlayerPrivate):
        (WebCore::MediaPlayerPrivate::~MediaPlayerPrivate):
        (WebCore::MediaPlayerPrivate::currentTime):
        (WebCore::MediaPlayerPrivate::setEndTime):
        (WebCore::MediaPlayerPrivate::seeking):
        (WebCore::MediaPlayerPrivate::naturalSize):
        (WebCore::MediaPlayerPrivate::setMuted):
        (WebCore::MediaPlayerPrivate::setRect):
        (WebCore::MediaPlayerPrivate::setVisible):
        (WebCore::MediaPlayerPrivate::repaint):
        (WebCore::MediaPlayerPrivate::paint):
        (WebCore::MediaPlayerPrivate::createGSTPlayBin):
        * platform/graphics/gtk/MediaPlayerPrivateGStreamer.h:
        * platform/graphics/gtk/VideoSinkGStreamer.cpp: Added.
        (webkit_video_sink_base_init):
        (webkit_video_sink_init):
        (webkit_video_sink_idle_func):
        (webkit_video_sink_render):
        (webkit_video_sink_set_caps):
        (webkit_video_sink_dispose):
        (webkit_video_sink_finalize):
        (webkit_video_sink_set_property):
        (webkit_video_sink_get_property):
        (webkit_video_sink_stop):
        (webkit_video_sink_class_init):
        (webkit_video_sink_new):
        (webkit_video_sink_set_surface):
        (plugin_init):
        * platform/graphics/gtk/VideoSinkGStreamer.h: Added.

2007-12-16  Mark Rowe  <mrowe@apple.com>

        Mac build fix.

        * WebCore.xcodeproj/project.pbxproj: Remove NetscapePlugInStreamLoader.cpp from the WebCore target.
        Mac currently has its own implementation in NetscapePlugInStreamLoaderMac.mm which conflicts with the
        new shared implementation.

2007-12-16  Rodney Dawes  <dobey@wayofthemonkey.com>

        Reviewed by Maciej Stachowiak.

        http://bugs.webkit.org/show_bug.cgi?id=16389
        Bug 16389: Common Implementation of NetscapePlugInStreamLoader

        * WebCore.vcproj/WebCore.vcproj: Remove NetscapePlugInStreamLoaderWin.cpp.
        * loader/NetscapePlugInStreamLoader.cpp: Copy method implementations from NetscapePlugInStreamLoaderWin.cpp.
        * loader/win/NetscapePlugInStreamLoaderWin.cpp: Removed.

2007-12-16  Grace Kloba  <klobag@gmail.com>

        Reviewed by Darin Adler.

        Fix http://bugs.webkit.org/show_bug.cgi?id=16433.
        Bug 16433: LOW_BANDWIDTH_DISPLAY build is broken

        * dom/Document.cpp:
        (WebCore::Document::Document):
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::addLowBandwidthDisplayRequest):
        (WebCore::FrameLoader::switchOutLowBandwidthDisplayIfReady):

2007-12-16  Darin Adler  <darin@apple.com>

        Reviewed by Maciej.

        - fix <rdar://problem/5636065> First form of SQLTransaction.executeSql() fails with TYPE_ERROR dom exception

        Test: storage/execute-sql-args.html

        * bindings/js/JSSQLTransactionCustom.cpp:
        (WebCore::JSSQLTransaction::executeSql): Added exception handling code so that once an
        exception happens, we won't try to do any more argument processing. Changed processing
        of the second argument so that we allow an undefined value or null, and simply omit the
        array. Changed processing of the second argument so that we don't require an actual
        JavaScript array. Instead, as with the JavaScript array operations themselves, we use
        the length property and corresponding numeric properties of the object, allowing other
        objects to act as arrays. Changed processing of the third and fourth arguments to
        allow the undefined value as well as null; we check the value of the argument rather
        than looking at the size of the passed-in arguments list.

2007-12-16  Sam Weinig  <sam@webkit.org>

        Reviewed by Darin.

        More of http://bugs.webkit.org/show_bug.cgi?id=16385
        Cleanup kjs_window

        - Move PausedTimeouts into its own file and put it in the WebCore namespace.

        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * WebCoreSources.bkl:
        * bindings/js/PausedTimeouts.cpp: Copied from bindings/js/kjs_window.cpp.
        * bindings/js/PausedTimeouts.h: Copied from bindings/js/kjs_window.h.
        * bindings/js/kjs_window.cpp:
        (KJS::Window::pauseTimeouts):
        * bindings/js/kjs_window.h:
        * history/CachedPage.cpp:
        * history/CachedPage.h:
        * page/Chrome.cpp:

2007-12-16  Beth Dakin  <bdakin@apple.com>

        Reviewed by Geoff.

        Make relative-size SVGs work in border-image.

        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::calculateBackgroundSize):
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::paintBorderImage):

2007-12-16  Darin Adler  <darin@apple.com>

        - fix Tiger build (my fault it was broken)

        * rendering/RenderThemeMac.mm: Define NSUInteger if on Tiger.

2007-12-16  Andrew Wellington  <proton@wiretapped.net>

        Reviewed by Darin.
        
        http://bugs.webkit.org/show_bug.cgi?id=6129
        Incomplete implementation of CSS 2.1 system colors

        Test: fast/css/css2-system-color.html
        
        Based on original patch by Rob Buis.
        
        System colors are retrieved from NSColor as appropriate. If the color is a pattern color
        (and therefore NSColor won't let us retrieve a color from it) we draw a 1x1 image of the
        color and sample that to get a solid color.

        * css/CSSStyleSelector.cpp:
        (WebCore::):
        (WebCore::colorForCSSValue):
        * rendering/RenderTheme.cpp:
        (WebCore::RenderTheme::systemColor):
        * rendering/RenderTheme.h:
        * rendering/RenderThemeMac.h:
        * rendering/RenderThemeMac.mm:
        (WebCore::getSystemColor):
        (WebCore::RenderThemeMac::platformColorsDidChange):
        (WebCore::RenderThemeMac::systemColor):

2007-12-16  Dan Bernstein  <mitz@apple.com>

        Reviewed by Darin Adler.

        - fix http://bugs.webkit.org/show_bug.cgi?id=16426
          Divs with overflow:auto: scrollbars not correctly updated when contents change

        Test: fast/overflow/scrollbar-position-update.html

        * platform/mac/PlatformScrollBarMac.mm:
        (WebCore::PlatformScrollbar::updateThumbProportion): Update the
        NSScroller's value for the new proportions.
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::updateScrollInfoAfterLayout): Removed unnecessary
        repaint(). Scrollbars repaint themselves as needed.

2007-12-16  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Darin.

        http://bugs.webkit.org/show_bug.cgi?id=14140
        <rdar://problem/5270958> REGRESSION: Complex system KeyBindings don't work properly

        * dom/KeyboardEvent.h:
        (WebCore::KeypressCommand::KeypressCommand):
        (WebCore::KeyboardEvent::keypressCommands):
        Change stored command class to preserve complete information about commands.

        * editing/EditorCommand.cpp: (WebCore::CommandEntry::): Mark InsertText as a text insertion
        command, which it is. Previously, we couldn't do it because WebKit didn't really treat insertText:
        as a command.

        * page/EventHandler.cpp: (WebCore::EventHandler::keyEvent): Copy commands saved while interpreting
        a keydown event into keypress, to avoid losing state when running interpretKeyEvents: again.

2007-12-16  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Darin.

        http://bugs.webkit.org/show_bug.cgi?id=16462
        REGRESSION: access keys broken on Windows

        * page/EventHandler.cpp:
        (WebCore::EventHandler::handleAccessKey):
        (WebCore::EventHandler::keyEvent):
        * page/EventHandler.h:
        Make handleAccessKey a class method; rely on WebKit to call it on Windows and wxWidgets.

2007-12-16  Xan Lopez  <xan@gnome.org>

        Reviewed by Alexey Proskuryakov.

        http://bugs.webkit.org/show_bug.cgi?id=16454
        [GTK] Text input doesn't work consistently on PPC

        * platform/gtk/KeyEventGtk.cpp:
        (WebCore::singleCharacterString):

        UChar is 2 bytes (UTF-16), so transform accordingly from
        gunichar (UCS-4). Fixes keyboard input on big endian systems.

2007-12-15  Darin Adler  <darin@apple.com>

        Reviewed by Mark Rowe.

        - better build fix for the problem affecting GTK and some other platforms
          "this time for sure"

        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSEventTargetBase.cpp: Move the include of the .lut.h file here.
        * bindings/js/JSEventTargetBase.h: Instead of including the .lut.h file in the header,
        which won't work, declare the tables that are in the .lut.h file in the header.

2007-12-12  Kevin Watters  <kevin@dotsyntax.com>

        Reviewed by Darin Adler.

        Fixed the Wx port's FontPlatformData for use in HashTable.
        - FontPlatformData(Deleted) made unequal to FontPlatformData()

        * platform/graphics/wx/FontPlatformData

2007-12-15  Dan Bernstein  <mitz@apple.com>

        Reviewed by Darin Adler.

        - fix <rdar://problem/5636090> Text in Georgia, Armenian, Inuktitut, Cree, or Cherokee (KA, HY, IU, CR, CHR) draws as all missing glyphs

        * platform/graphics/win/FontCacheWin.cpp:
        (WebCore::metaFileEnumProc): Added. Called during metafile record
        enumeration and extracts the font from the create font record.
        (WebCore::FontCache::getFontDataForCharacters): If font linking fails,
        let Uniscribe draw the characters and see what font it chooses.

2007-12-15  Darin Adler  <darin@apple.com>

        * WebCore.pro: Roll my last change out. Was wrong and didn't fix the build.

2007-12-15  Darin Adler  <darin@apple.com>

        Another try at a GTK build fix.

        * WebCore.pro: Add JSEventTargetBase.cpp to LUT_TABLE_FILES instead of LUT_FILES.

2007-12-15  Sam Weinig  <sam@webkit.org>

        Force windows to regenerate COM DOM bindings.

        * WebCore.vcproj/build-generated-files.sh: Add license. 
        * bindings/scripts/CodeGeneratorCOM.pm: Use shared WK_ucfirst.

2007-12-15  Sam Weinig  <sam@webkit.org>

        Fix Windows and wx builds.

        * WebCore.vcproj/WebCore.vcproj:
        * WebCoreSources.bkl:

2007-12-15  Mark Rowe  <mrowe@apple.com>

        Gtk build fix.  Add JSEventTargetBase.cpp to SOURCES.

        * WebCore.pro:

2007-12-15  Sam Weinig  <sam@webkit.org>

        Fix wx build.

        * WebCoreSources.bkl:

2007-12-15  Nikolas Zimmermann  <zimmermann@kde.org>

        Not reviewed. Build fix for Qt/Gtk.

        * WebCore.pro: Include JSEventTargetBase.lut.h in generation

2007-12-15  Nikolas Zimmermann  <zimmermann@kde.org>

        Reviewed by Eric.

        Fixes: http://bugs.webkit.org/show_bug.cgi?id=16445 (Refactor EventTargetNode & JSEventTargetNode for an upcoming SVG patch)

        Split up JSEventTargetNode in JSEventTargetNode & JSEventTargetBase - where most functionality has been moved down
        in the base class. Applied the same refactorization to EventTargetNode.

        This makes it possible for the upcoming patch implementing the EventTarget interface for SVGElementInstance
        to share as much code as possible with the EventTargetNode classes.

        * DerivedSources.make:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSEventTargetBase.cpp: Added.
        (WebCore::retrieveEventTargetAndCorrespondingNode):
        (WebCore::eventNameForPropertyToken):
        * bindings/js/JSEventTargetBase.h: Added.
        (WebCore::JSEventTargetProperties::):
        (WebCore::JSEventTargetPrototypeFunctionBase::JSEventTargetPrototypeFunctionBase):
        (WebCore::JSEventTargetPrototypeFunction::JSEventTargetPrototypeFunction):
        (WebCore::):
        (WebCore::::create):
        (WebCore::JSEventTargetBase::JSEventTargetBase):
        (WebCore::JSEventTargetBase::getValueProperty):
        (WebCore::JSEventTargetBase::putValueProperty):
        (WebCore::JSEventTargetBase::getOwnPropertySlot):
        (WebCore::JSEventTargetBase::put):
        (WebCore::JSEventTargetPrototype::JSEventTargetPrototype):
        (WebCore::JSEventTargetPrototype::self):
        (WebCore::JSEventTargetPrototype::getOwnPropertySlot):
        (WebCore::JSEventTargetPrototype::classInfo):
        * bindings/js/JSEventTargetNode.cpp:
        (WebCore::JSEventTargetNode::getOwnPropertySlot):
        (WebCore::JSEventTargetNode::getValueProperty):
        (WebCore::JSEventTargetNode::put):
        (WebCore::JSEventTargetNode::putValueProperty):
        (WebCore::JSEventTargetNode::setListener):
        (WebCore::toEventTargetNode):
        * bindings/js/JSEventTargetNode.h:
        (WebCore::JSEventTargetPrototypeInformation::prototypeClassName):
        (WebCore::JSEventTargetPrototypeInformation::prototypeIdentifier):
        * dom/EventTarget.cpp:
        (WebCore::EventTarget::addEventListener):
        (WebCore::EventTarget::removeEventListener):
        (WebCore::EventTarget::dispatchGenericEvent):
        (WebCore::EventTarget::removeAllEventListeners):
        (WebCore::EventTarget::insertedIntoDocument):
        (WebCore::EventTarget::removedFromDocument):
        (WebCore::EventTarget::handleLocalEvents):
        (WebCore::EventTarget::applySVGEventTargetRules):
        (WebCore::forbidEventDispatch):
        (WebCore::allowEventDispatch):
        (WebCore::eventDispatchForbidden):
        * dom/EventTarget.h:
        (WebCore::EventTarget::preDispatchEventHandler):
        (WebCore::EventTarget::postDispatchEventHandler):
        (WebCore::forbidEventDispatch):
        (WebCore::allowEventDispatch):
        * dom/EventTargetNode.cpp:
        (WebCore::EventTargetNode::~EventTargetNode):
        (WebCore::EventTargetNode::insertedIntoDocument):
        (WebCore::EventTargetNode::removedFromDocument):
        (WebCore::EventTargetNode::addEventListener):
        (WebCore::EventTargetNode::removeEventListener):
        (WebCore::EventTargetNode::removeAllEventListeners):
        (WebCore::EventTargetNode::handleLocalEvents):
        (WebCore::EventTargetNode::dispatchEvent):
        (WebCore::EventTargetNode::dispatchWindowEvent):
        * dom/EventTargetNode.h:
        (WebCore::EventTargetNode::localEventListeners):
        * svg/SVGElement.cpp:
        (WebCore::SVGElement::sendSVGLoadEventIfPossible):
        (WebCore::SVGElement::dispatchEvent):

2007-12-15  Eric Seidel  <eric@webkit.org>

        Reviewed by Oliver.
        
        Width of SVG elements not applied to container elements
        http://bugs.webkit.org/show_bug.cgi?id=16305
        Added calcPrefWidths for RenderSVGRoot (copied from RenderReplaced)
        This is caused by poor factoring in the render tree.  RenderContainer probably should be a template.

        svg/css/css-box-min-width.html

        * rendering/RenderSVGRoot.cpp:
        (WebCore::RenderSVGRoot::calcPrefWidths): Added.
        * rendering/RenderSVGRoot.h:
        * css/SVGCSSStyleSelector::applySVGProperty: fixed ASSERT in debug builds

2007-12-15  David Kilzer  <ddkilzer@apple.com>

        Fix comment after isSafeScript() was renamed to allowsAccessFrom().

        * bindings/js/kjs_window.cpp:
        (KJS::createWindow):

2007-12-15  Alp Toker  <alp@atoker.com>

        Reviewed by Mark Rowe.

        http://bugs.webkit.org/show_bug.cgi?id=16449
        cairo_arc() functions hang or crash when passed inf as radius or start/end angle

        Add checks. This matches a similar workaround for a CG bug in the CG
        graphics backend: <rdar://problem/5189233>

        Fixes:
          fast/canvas/arc-crash.html
          fast/canvas/canvas-with-incorrect-args.html

        * platform/graphics/cairo/PathCairo.cpp:
        (WebCore::Path::addArc):

2007-12-15  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Darin.

        http://bugs.webkit.org/show_bug.cgi?id=16078
        Google Maps zooming via the scroll wheel (almost) always zooms IN only.

        * dom/WheelEvent.cpp: (WebCore::WheelEvent::WheelEvent):
        Ensure that delta is never rounded down to zero - we are getting values less than 1 from 
        many mice on OS X, and Google Maps code assumes scrolling up if event.wheelDelta is zero.

2007-12-14  Dan Bernstein  <mitz@apple.com>

        - Windows build fix

        * WebCore.vcproj/WebCore.vcproj:

2007-12-14  Alp Toker  <alp@atoker.com>

        GTK+/Qt build fix. Track added files in r28722.

        * WebCore.pro:

2007-12-14  Sam Weinig  <sam@webkit.org>

        Reviewed by Geoff.

        Speed up getElementByClassName.
        - This makes getElementByClassName 33% faster on the stress test
          linked to at http://bugs.webkit.org/show_bug.cgi?id=15760.

        * platform/text/StringImpl.cpp:
        (WebCore::StringImpl::foldCase): Optimize the case when all the characters are ASCII.

2007-12-14  Alp Toker  <alp@atoker.com>

        Reviewed by Maciej.

        http://bugs.webkit.org/show_bug.cgi?id=16432
        [GTK] Update license headers

        Consent has been given by the authors of these files to change license
        to the LGPL as outlined in the bug report.

        * platform/gtk/ClipboardGtk.cpp:
        * platform/gtk/ContextMenuGtk.cpp:
        * platform/gtk/ContextMenuItemGtk.cpp:
        * platform/gtk/CookieJarGtk.cpp:
        * platform/gtk/CursorGtk.cpp:
        * platform/gtk/DragDataGtk.cpp:
        * platform/gtk/DragImageGtk.cpp:
        * platform/gtk/PasteboardGtk.cpp:
        * platform/gtk/PlatformScreenGtk.cpp:
        * platform/gtk/PlatformScrollBarGtk.cpp:
        * platform/gtk/SearchPopupMenuGtk.cpp:
        * platform/gtk/WidgetGtk.cpp:

2007-12-14  Darin Adler  <darin@apple.com>

        Reviewed by Adele.

        - fix http://bugs.webkit.org/show_bug.cgi?id=16442
          navigation policy delegate gets called twice for each load

        * loader/MainResourceLoader.cpp:
        (WebCore::MainResourceLoader::willSendRequest): Removed call to checkNavigationPolicy.
        That's handled by FrameLoader.

        * loader/MainResourceLoader.h: Removed callContinueAfterNavigationPolicy
        and continueAfterNavigationPolicy.

2007-12-14  Anders Carlsson  <andersca@apple.com>

        Reviewed by Brady.

        Make document.open count as committing a document load, so that -[WebFrame dataSource:] won't
        return nil in that case.
        
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::didExplicitOpen):

2007-12-14  David Smith  <catfish.man@gmail.com>

        Reviewed by Mitz.

        - fix http://bugs.webkit.org/show_bug.cgi?id=14955
          Implement getElementsByClassName.

        This patch also renames AtomicStringList to ClassNames to better reflect its actual use,
        and takes advantage of admitting that it's class-specific to encapsulate class attribute 
        parsing so it can be shared.  It also changes the class to use a Vector, rather than a linked
        list to store the class names.

        Tests: fast/dom/getElementsByClassName/001.html
               fast/dom/getElementsByClassName/002.html
               fast/dom/getElementsByClassName/003.html
               fast/dom/getElementsByClassName/004.html
               fast/dom/getElementsByClassName/005.html
               fast/dom/getElementsByClassName/006.html
               fast/dom/getElementsByClassName/007.html
               fast/dom/getElementsByClassName/008.html
               fast/dom/getElementsByClassName/009.html
               fast/dom/getElementsByClassName/010.xml
               fast/dom/getElementsByClassName/011.xml
               fast/dom/getElementsByClassName/012.html
               fast/dom/getElementsByClassName/013.html
               fast/dom/getElementsByClassName/014.html
               fast/dom/getElementsByClassName/array/001.html
               fast/dom/getElementsByClassName/array/002.html
               fast/dom/getElementsByClassName/array/003.html
               fast/dom/getElementsByClassName/array/004.html
               fast/dom/getElementsByClassName/dumpNodeList.html

        * WebCore.xcodeproj/project.pbxproj:
        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::matchRules):
        (WebCore::CSSStyleSelector::checkOneSelector):
        * dom/AtomicStringList.h: Removed.
        * dom/ClassNames.cpp: Added.
        (WebCore::ClassNames::contains):
        (WebCore::ClassNames::parseClassAttribute):
        * dom/ClassNames.h: Copied from WebCore/dom/AtomicStringList.h.
        (WebCore::ClassNames::ClassNames):
        (WebCore::ClassNames::size):
        (WebCore::ClassNames::clear):
        (WebCore::ClassNames::operator[]):
        (WebCore::isClassWhitespace):
        * dom/ClassNodeList.cpp: Added.
        (WebCore::ClassNodeList::ClassNodeList):
        (WebCore::ClassNodeList::length):
        (WebCore::ClassNodeList::item):
        (WebCore::ClassNodeList::nodeMatches):
        * dom/ClassNodeList.h: Added.
        * dom/Document.cpp:
        (WebCore::Document::getElementsByName):
        (WebCore::Document::getElementsByClassName):
        * dom/Document.h:
        * dom/Document.idl:
        * dom/Element.cpp:
        (WebCore::Element::getClassNames):
        (WebCore::Element::getElementsByClassName):
        * dom/Element.h:
        * dom/Element.idl:
        * dom/NameNodeList.cpp:
        (WebCore::NameNodeList::NameNodeList):
        (WebCore::NameNodeList::item):
        (WebCore::NameNodeList::nodeMatches):
        * dom/NameNodeList.h:
        * dom/NamedMappedAttrMap.cpp:
        (WebCore::NamedMappedAttrMap::clearAttributes):
        (WebCore::NamedMappedAttrMap::parseClassAttribute):
        * dom/NamedMappedAttrMap.h:
        (WebCore::NamedMappedAttrMap::getClassNames):
        * dom/StyledElement.cpp:
        (WebCore::StyledElement::getClassNames):
        * dom/StyledElement.h:

2007-12-14  Darin Adler  <darin@apple.com>

        Reviewed by Sam.

        - fix http://bugs.webkit.org/show_bug.cgi?id=16351
          FontFallbackList.h doesn't include wtf/PassRefPtr.h
          
        * platform/graphics/FontFallbackList.h: Added include of <wtf/Forward.h>
        * platform/graphics/GlyphPageTreeNode.h: Removed an unneeded include.

2007-12-14  Darin Adler  <darin@apple.com>

        Reviewed by Alexey.

        - http://bugs.webkit.org/show_bug.cgi?id=16420
          change regression tests to use document.execCommand instead of textInputController.doCommand

        Add a few more operations to document.execCommand.

        Finished up the transition to the new Editor::Command, including removing
        the Editor::execCommand function.

        * WebCore.base.exp: Added Editor::Command::isSupported.
        * editing/Editor.h: Removed execCommand.
        * editing/EditorCommand.cpp:
        (WebCore::expandSelectionToGranularity): Added.
        (WebCore::verticalScrollDistance): Added; replaces canScroll.
        (WebCore::executeDeleteBackward): Added. Moved code here from WebHTMLView.
        (WebCore::executeDeleteBackwardByDecomposingPreviousCharacter): Ditto.
        (WebCore::executeDeleteForward): Ditto.
        (WebCore::executeDeleteToBeginningOfLine): Ditto.
        (WebCore::executeDeleteToBeginningOfParagraph): Ditto.
        (WebCore::executeDeleteToEndOfLine): Ditto.
        (WebCore::executeDeleteToEndOfParagraph): Ditto.
        (WebCore::executeMovePageDown): Renamed this command to be consistent with all the other
        Move commands. They all modify the caret. Reimplemented to match the Mac OS X version by
        removing the explicit scrolling, and letting it be done automatically by code that makes
        the caret visible. In some cases the old code would scroll twice which was harmless but
        unnecessary.
        (WebCore::executeMovePageDownAndModifySelection): Added. Moved code here from WebHTMLView.
        (WebCore::executeMovePageUp): See MovePageDown above.
        (WebCore::executeMovePageUpAndModifySelection): Added. Moved code here from WebHTMLView.
        (WebCore::executeSelectLine): Ditto.
        (WebCore::executeSelectParagraph): Ditto.
        (WebCore::executeSelectSentence): Ditto.
        (WebCore::executeSelectWord): Ditto.
        (WebCore::executeSwapWithMark): Some small tweaks.

        * page/ContextMenuController.cpp:
        (WebCore::ContextMenuController::contextMenuItemSelected): Changed to use Editor::command()
        instead of Editor::execCommand(). This code could be changed to use Editor::Command quite a
        bit more, but I didn't do that this time.

        - Removed some obsolete unused code.

        * page/mac/EventHandlerMac.mm:
        (WebCore::EventHandler::passMouseDownEventToWidget): Removed the special case code for
        NSTextView. This was left over from when we used NSTextField and NSTextView for form
        elements and is no longer used at all.

        * page/mac/WebCoreFrameBridge.h: Removed 20 unused methods that were still on one side
        of the bridge or another. We really need to find a time to tear down the rest of the
        bridge, but that's not this patch.

        * page/mac/WebCoreFrameBridge.mm:
        (-[WebCoreFrameBridge addData:]): Changed to get at the _shouldCreateRenderers field directly
        instead of using a method.
        (-[WebCoreFrameBridge rangeByAlteringCurrentSelection:SelectionController::direction:SelectionController::granularity:]):
        Took out obsolete comment about matching enums (we use a single enum now and have for some
        time).
        (-[WebCoreFrameBridge selectionGranularity]): Ditto.

2007-12-14  Justin Garcia  <justin.garcia@apple.com>

        Reviewed by Darin Adler.

        <rdar://problem/5575101> GoogleDocs: Hang in SplitElementCommand::doApply when outdenting a list item in a particular list

        * editing/CompositeEditCommand.cpp:
        (WebCore::CompositeEditCommand::splitTreeToNode): Moved here.
        * editing/CompositeEditCommand.h:
        * editing/IndentOutdentCommand.cpp: Moved splitTreeToNode.
        * editing/IndentOutdentCommand.h: Ditto, and removed unimplemented splitTreeTo.
        * editing/InsertListCommand.cpp:
        (WebCore::InsertListCommand::doApply): Split ancestors of listChildNode between
        it and listNode, if they exists, so that moving listChildNode doesn't put it out
        of order.  Added a test case to cover each change.
        * editing/SplitElementCommand.cpp:
        (WebCore::SplitElementCommand::doApply): Added an ASSERT to catch code that
        tries to split a container at a bogus child, and an early return to avoid a
        hang in that case.

2007-12-14  Anders Carlsson  <andersca@apple.com>

        Reviewed by Darin and Geoff.

        <rdar://problem/5619295> 
        REGRESSION: 303-304: Embedded YouTube video fails to render- JS errors (16150) (Flash 9)

        _NPN_CreateScriptObject doesn't take an origin root object anymore.
        
        * html/HTMLPlugInElement.cpp:
        (WebCore::HTMLPlugInElement::createNPObject):
        * page/Frame.cpp:
        (WebCore::Frame::windowScriptNPObject):

2007-12-14  Dan Bernstein  <mitz@apple.com>

        Reviewed by Darin Adler.

        - fix <rdar://problem/5643663> text-shadow and box-shadow offsets 1px smaller than specified
          which is the root cause of:
          http://bugs.webkit.org/show_bug.cgi?id=12943
          box-shadow: small values don't affect shadow position
          http://bugs.webkit.org/show_bug.cgi?id=14736
          Safari implementation of text-shadow off by 1px

        * platform/graphics/cg/GraphicsContextCG.cpp:
        (WebCore::GraphicsContext::setShadow): Slightly increase the magnitude
        of the offsets passed to CGContextSetShadow* to ensure that the end
        result after truncation is the desired integer offsets.

2007-12-13  Alp Toker  <alp@atoker.com>

        curl backend build fix for breakage introduced in r28709.

        * platform/network/ResourceHandleInternal.h:
        (WebCore::ResourceHandleInternal::ResourceHandleInternal):

2007-12-13  Justin Garcia  <justin.garcia@apple.com>

        Reviewed by Oliver Hunt.

        <rdar://problem/5607069> In Mail, a crash occurs at WebCore::AppendNodeCommand() after dragging image into a <FORM> element

        * editing/InsertLineBreakCommand.cpp:
        (WebCore::InsertLineBreakCommand::shouldUseBreakElement): Equip this function to
        handle editing positions, like [input, 0];
        * editing/InsertParagraphSeparatorCommand.cpp:
        (WebCore::InsertParagraphSeparatorCommand::doApply): Pass enclosingBlock a node peeled
        off of a non-editing position, to fix a bug where the enclosing block of [input, 0] was
        the input element itself.
        Insert a <br> when a <form> element is the enclosing block instead of splitting/cloning or
        nesting a <div>.

2007-12-13  Alp Toker  <alp@atoker.com>

        Reviewed by Oliver Hunt.

        http://bugs.webkit.org/show_bug.cgi?id=16365
        [cURL] Acid2 test segmentation fault

        This patch makes the Acid2 test pass.

        Defer the cleanup of cancelled jobs and halt further transfer as early
        as possible.

        Bug found by and initial patch provided by Luca Bruno.

        * platform/network/curl/ResourceHandleManager.cpp:
        (WebCore::writeCallback):
        (WebCore::headerCallback):
        (WebCore::ResourceHandleManager::downloadTimerCallback):
        (WebCore::ResourceHandleManager::cancel):

2007-12-13  Sam Weinig  <sam@webkit.org>

        Reviewed by Mark Rowe.

        Fix typos and rename InspectorController::moveByUnrestricted to InspectorController::moveWindowBy.

        * page/InspectorController.cpp:
        (WebCore::moveByUnrestricted):
        (WebCore::InspectorController::windowScriptObjectAvailable):
        (WebCore::InspectorController::moveWindowBy):
        * page/InspectorController.h:
        * page/inspector/inspector.js:

2007-12-13  Dan Bernstein  <mitz@apple.com>

        Reviewed by Dave Hyatt.

        - fix <rdar://problem/5642426> explicit cubic-bezier curves all treated as "default" for transition-timing-function

        Test: fast/css/transition-timing-function.html

        * css/CSSStyleSelector.cpp: Changed the HANDLE_MULTILAYER_VALUE macro to
        not reject non-primitive non-list values, and instead made sure that the
        mapping functions rejected them if necessary. This allows non-primitive
        timing functions to be mapped.
        (WebCore::CSSStyleSelector::mapBackgroundAttachment):
        (WebCore::CSSStyleSelector::mapBackgroundClip):
        (WebCore::CSSStyleSelector::mapBackgroundComposite):
        (WebCore::CSSStyleSelector::mapBackgroundOrigin):
        (WebCore::CSSStyleSelector::mapBackgroundImage):
        (WebCore::CSSStyleSelector::mapBackgroundRepeat):
        (WebCore::CSSStyleSelector::mapBackgroundXPosition):
        (WebCore::CSSStyleSelector::mapBackgroundYPosition):
        (WebCore::CSSStyleSelector::mapTransitionDuration):
        (WebCore::CSSStyleSelector::mapTransitionRepeatCount):
        (WebCore::CSSStyleSelector::mapTransitionTimingFunction):
        (WebCore::CSSStyleSelector::mapTransitionProperty):
        * css/CSSTimingFunctionValue.cpp:
        (WebCore::CSSTimingFunctionValue::cssText): Implemented for use in the
        regression test.
        * css/CSSTimingFunctionValue.h:
        (WebCore::CSSTimingFunctionValue::isTransitionTimingFunctionValue):
        Added. Returns true.
        * css/CSSValue.h:
        (WebCore::CSSValue::isTransitionTimingFunctionValue): Added. Returns
        false.

2007-12-13  Steve Falkenburg  <sfalken@apple.com>

        Move source file generation into its own vcproj to fix build dependencies.

        Reviewed by Adam.

        * WebCore.vcproj/WebCore.make:
        * WebCore.vcproj/WebCore.sln:
        * WebCore.vcproj/WebCore.submit.sln:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.vcproj/WebCoreGenerated.vcproj: Added.

2007-12-13  Justin Garcia  <justin.garcia@apple.com>

        Reviewed by Oliver Hunt.
        
        <rdar://problem/4145786> Undoing a color change of text in a compose window always changes it back to black
        
        Some of the operations performed in removeHTMLFontStyle were non-undoable.
        
        I'm having trouble writing a layout test for this because I can't get DRT to
        perform editing operations in separate Undo steps without adding unacceptably long
        wait times between operations.  I filed:
        
        <rdar://problem/5646779> Can't get DRT to perform editing operations in separate Undo steps

        * editing/ApplyStyleCommand.cpp:
        (WebCore::ApplyStyleCommand::removeHTMLFontStyle):

2007-12-13  Sam Weinig  <sam@webkit.org>

        Reviewed by Anders.

        Fix for http://bugs.webkit.org/show_bug.cgi?id=16352
        Toolbar dragged inspector cannot be moved beyond screen edges

        * page/InspectorController.cpp:
        (WebCore::moveByUnrestricted):
        (WebCore::InspectorController::windowScriptObjectAvailable):
        (WebCore::InspectorController::moveByUnrestricted):
        * page/InspectorController.h:
        * page/inspector/inspector.js:

2007-12-13  Adam Roben  <aroben@apple.com>

        Fix <rdar://5517707> Crash on wptv.wp.pl when "make bigger" button is clicked

        Windows Media Player has a modal message loop that will deliver
        messages to us at inappropriate times and we will crash if we handle
        them when they are delivered. In PluginViewWin, we add a quirk for
        Media Player to set a flag whenever we give the plugin a chance to
        execute code, and in SharedTimerWin we check if the plugin is
        executing code and repost messages if so.

        Reviewed by Anders.

        * platform/win/SharedTimerWin.cpp:
        (WebCore::TimerWindowWndProc): Repost messages if we're calling a
        plugin.
        * plugins/win/PluginViewWin.cpp: Surround all calls to the plugin with
        setCallingPlugin(true/false).
        (WebCore::PluginViewWin::updateWindow):
        (WebCore::PluginViewWin::dispatchNPEvent):
        (WebCore::PluginViewWin::setNPWindowRect):
        (WebCore::PluginViewWin::start):
        (WebCore::PluginViewWin::stop):
        (WebCore::PluginViewWin::performRequest):
        (WebCore::PluginViewWin::bindingInstance):
        (WebCore::PluginViewWin::determineQuirks):
        (WebCore::PluginViewWin::setCallingPlugin): Added.
        (WebCore::PluginViewWin::isCallingPlugin): Added.
        * plugins/win/PluginViewWin.h: Added a new quirk.

2007-12-13  Alp Toker  <alp@atoker.com>

        Add a missing DEPENDPATH. Fixes non-clean builds following networking
        header changes.

        * WebCore.pro:

2007-12-13  Dan Bernstein  <mitz@apple.com>

        Reviewed by Anders Carlsson.

        - fix regression in fast/text/international/bidi-override on Tiger

        * platform/graphics/GlyphPageTreeNode.cpp:
        (WebCore::GlyphPageTreeNode::initializePage): Add bidi overrides here
        too. I forgot to add them when I added them to treatAsZeroWidthSpace in
        an earlier patch.

2007-12-13  Justin Garcia  <justin.garcia@apple.com>

        Reviewed by Darin Adler.

        <rdar://problem/5601583> GMail Editor: Copied link doesn't paste as a link, just colored text
        
        The code that checks the selected Range to see if it's inside an anchor
        checks ancestors of the Range's commonAncestor() but not the
        commonAncestor() itself, and so we'd fail to add markup for the enclosing
        anchor to the pasteboard.
        
        Some enclosing element getters check the node passed to the getter and some
        don't.  There were a few places where we incorrectly assumed that enclosing 
        element getters check the node passed to the getter, but this is the only 
        case that I'm able to write a test case for at the moment.
        
        In this patch I've:
        Changed enclosingNodeWithType and enclosingNodeWithTag to take in positions,
        like the newer enclosing element getters.  This is important because we must
        soon add code to the getters so that they understand that some editing positions
        inside nodes don't actually refer to positions inside those nodes but positions
        before and after them.  Like [table, 0].
        Changed enclosingNodeWithType and enclosingNodeWithTag to check nodes starting with
        n where [n, o] is the position passed to the getter, instead of starting the the parent
        of n.  This makes all but a few of the enclosing element getters behave consistently.
        Changed enclosingNodeWithType and enclosingNodeWithTag to not return non-editable 
        nodes if the input position was editable.  This fixes a bug that that the above change
        exposed.
        Changed enclosingTableCell to simply call enclosingNodeWithType.  We should do
        this for the rest of the getters, or simply remove them in favor of enclosingNodeWithType
        unless doing so would affect readability, like it would in the case of enclosingTableCell.
        Ditto for enclosingBlock.

        * editing/AppendNodeCommand.cpp:
        (WebCore::AppendNodeCommand::doApply):
        * editing/DeleteButtonController.cpp:
        (WebCore::enclosingDeletableElement):
        * editing/DeleteSelectionCommand.cpp:
        (WebCore::DeleteSelectionCommand::initializePositionData):
        (WebCore::DeleteSelectionCommand::saveFullySelectedAnchor):
        * editing/Editor.cpp:
        (WebCore::Editor::selectionUnorderedListState):
        (WebCore::Editor::selectionOrderedListState):
        * editing/IndentOutdentCommand.cpp:
        (WebCore::IndentOutdentCommand::prepareBlockquoteLevelForInsertion):
        (WebCore::IndentOutdentCommand::outdentParagraph):
        * editing/InsertNodeBeforeCommand.cpp:
        (WebCore::InsertNodeBeforeCommand::doApply):
        * editing/InsertParagraphSeparatorCommand.cpp:
        (WebCore::InsertParagraphSeparatorCommand::doApply):
        * editing/ReplaceSelectionCommand.cpp:
        (WebCore::ReplaceSelectionCommand::shouldMerge):
        (WebCore::ReplaceSelectionCommand::removeUnrenderedTextNodesAtEnds):
        (WebCore::ReplaceSelectionCommand::positionAtEndOfInsertedContent):
        * editing/TextIterator.cpp:
        * editing/htmlediting.cpp:
        (WebCore::enclosingBlock):
        (WebCore::enclosingNodeWithTag):
        (WebCore::enclosingNodeOfType):
        (WebCore::enclosingTableCell):
        (WebCore::isTableCell):
        * editing/htmlediting.h:
        * editing/markup.cpp:
        (WebCore::appendStartMarkup):
        (WebCore::createMarkup):

2007-12-13  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Darin.

        Turn on keyboard event processing quirks for feed views and old applications on Mac OS X.

        * WebCore.base.exp:
        * dom/KeyboardEvent.cpp:
        (WebCore::KeyboardEvent::charCode):
        * page/EventHandler.cpp:
        (WebCore::EventHandler::needsKeyboardEventDisambiguationQuirks):
        (WebCore::EventHandler::keyEvent):
        * page/EventHandler.h:
        * page/Settings.cpp:
        (WebCore::Settings::Settings):
        (WebCore::Settings::setNeedsKeyboardEventDisambiguationQuirks):
        * page/Settings.h:
        (WebCore::Settings::needsKeyboardEventDisambiguationQuirks):
        * page/mac/EventHandlerMac.mm:
        (WebCore::EventHandler::needsKeyboardEventDisambiguationQuirks):
        * platform/PlatformKeyboardEvent.h:
        * platform/mac/KeyEventMac.mm:
        (WebCore::PlatformKeyboardEvent::PlatformKeyboardEvent):
        (WebCore::PlatformKeyboardEvent::disambiguateKeyDownEvent):

2007-12-13  Dan Bernstein  <mitz@apple.com>

        - build fix

        * platform/network/cf/ResourceErrorCF.cpp:

2007-12-13  Antti Koivisto  <antti@apple.com>

        Reviewed by Tim Hatcher.

        Fix <rdar://problem/5605674> 
        Make <video> display WebKit context menu instead of the QTKit one.
    
        It doesn't really matter where the QTMovieView is.

        * platform/graphics/mac/MediaPlayerPrivateQTKit.mm:
        (WebCore::MediaPlayerPrivate::createQTMovieView):
        (WebCore::MediaPlayerPrivate::setRect):

2007-12-13  Dan Bernstein  <mitz@apple.com>

        Reviewed by Adam Roben.

        - ensure that Unicode bidi control characters are rendered as zero width
          spaces

        Test: fast/text/international/bidi-control-chars-treated-as-ZWS.html

        * platform/graphics/Font.h:
        (WebCore::Font::treatAsZeroWidthSpace):
        * platform/graphics/GlyphPageTreeNode.cpp:
        (WebCore::GlyphPageTreeNode::initializePage):
        * platform/text/CharacterNames.h:

2007-12-13  Brady Eidson  <beidson@apple.com>

        Build fix

        * platform/wx/TemporaryLinkStubs.cpp:

2007-12-12  Brady Eidson  <beidson@apple.com>

        Build fix

        * platform/gtk/TemporaryLinkStubs.cpp:

2007-12-12  Brady Eidson  <beidson@apple.com>

        Build fix

        * WebCore.pro:
        * history/qt/CachedPageQt.cpp: Removed. Whole purpose for this method being platform-specific has been removed

2007-12-12  Brady Eidson  <beidson@apple.com>

        Build fix

        * platform/win/TemporaryLinkStubs.cpp:

2007-12-12  Brady Eidson  <beidson@apple.com>

        Reviewed by Sam Weinig

        Fix for <rdar://problem/4886844> and lay groundwork for <rdar://problem/4516170> (Back/Forward Cache on Windows)

        All back/forward list and page cache related items used to be in WebKit.
        When they were pushed into WebCore, some sloppy compromises were made to keep the Back/Forward cache working on Mac.
        Namely, a WebCore::HistoryItem had to know how to keep a WebDocumentView alive.  We accomplished this via some #ifdefs
        in CachedPage and having the Mac-only CachedPageMac.mm

        To get rid of that nastiness and pave the way for adding Back/Forward cache on other platforms, this patch adds the 
        concept of "CachedPagePlatformData" which can contain anything the platform API wants.  

        I also took the opportunity to do other cleanup and renaming client methods to better fit their new purposes.

        * WebCore.base.exp:
        * WebCore.xcodeproj/project.pbxproj:

        * history/CachedPage.cpp:
        (WebCore::CachedPage::~CachedPage): Combined "close()" and "clear()" to just "clear()" - call it from here.
        (WebCore::CachedPage::clear): Call clear() on the CachedPagePlatformData if it exists.  Also delete the CachedPagePlatformData.
        (WebCore::CachedPage::setCachedPagePlatformData):
        (WebCore::CachedPage::cachedPagePlatformData):
        * history/CachedPage.h:

        * history/CachedPagePlatformData.h: Added.
        (WebCore::CachedPagePlatformData::~CachedPagePlatformData): Virtual d'tor.
        (WebCore::CachedPagePlatformData::clear): Virtual method for platforms that need to do cleanup at the same time as CachedPage::clear().

        * history/PageCache.cpp:
        (WebCore::PageCache::releaseAutoreleasedPagesNow): Call "clear()" instead of "close()"

        * history/mac/CachedPageMac.mm: Removed. Functionality replaced with CachedPagePlatformData.

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::transitionToCommitted): Call the new client methods.  Make some work previously done by WebKitMac cross platform 
          (setting the cached DocumentLoader to the Frame).
        (WebCore::FrameLoader::cachePageForHistoryItem):  Renamed the client methods

        * loader/FrameLoaderClient.h:  The very Mac-centric "makeDocumentView", "setDocumentViewFromCachedPage", and "saveDocumentViewToCachedPage"
          become "transitionToCommittedForNewPage", "transitionToCommittedFromCachedPage", and "savePlatformDataToCachedPage" accordingly

        * svg/graphics/SVGImageEmptyClients.h:
        (WebCore::SVGEmptyFrameLoaderClient::savePlatformDataToCachedPage):
        (WebCore::SVGEmptyFrameLoaderClient::transitionToCommittedFromCachedPage):
        (WebCore::SVGEmptyFrameLoaderClient::transitionToCommittedForNewPage):

2007-12-12  Dan Bernstein  <mitz@apple.com>

        Reviewed by Oliver Hunt.

        - fix <rdar://problem/5074620> text with font:initial; fails to appear (causes fast/text/font-initial.html to fail)

        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::applyProperty): When the font property is
        set to 'initial', set the font size to its initial value, 'medium',
        and the font family to the standard family.

2007-12-12  Justin Garcia  <justin.garcia@apple.com>

        Reviewed by Darin Adler.

        <rdar://problem/5433862> Mail crashes at WebCore::highestAncestor() when deleting a particular selection

        * editing/DeleteSelectionCommand.cpp:
        (WebCore::DeleteSelectionCommand::removePreviouslySelectedEmptyTableRows):
        Don't remove the table row that contained the end of the selection if it is where we are
        about to place the ending selection.
        Don't remove all empty rows after the row that contained the start of the selection,
        they might come after the row that contained the end of the selection.

2007-12-12  Sam Weinig  <sam@webkit.org>

        Reviewed by Anders Carlsson.

        Add button to clear the Web Inspector's console.

        * English.lproj/InspectorLocalizedStrings.js:
        * page/inspector/ConsolePanel.js:
        * page/inspector/inspector.css:

2007-12-12  Anders Carlsson  <andersca@apple.com>

        Reviewed by Adam and Jon.

        <rdar://problem/5349282>
        popup blocking is not applied to plugins on Windows.
        
        Implement popup blocking. If the plug-in supports the new 
        NPN_PushPopupsEnabledState/NPN_PopPopupsEnabledState API we just use that
        to determine if a plug-in request can open new windows.
        
        If a plug-in does not support the new API, we assume that a plug-in can open new windows
        in response to either mouse click or key press events.
        
        * plugins/win/PluginViewWin.cpp:
        (WebCore::PluginRequestWin::PluginRequestWin):
        (WebCore::PluginRequestWin::shouldAllowPopups):
        Add new shouldAllowPopups member.
        
        (WebCore::PluginViewWin::popPopupsStateTimerFired):
        Reset the popup state.
        
        (WebCore::isWindowsMessageUserGesture):
        New function that given a windows message id returns whether it's a user gesture or not.
        
        (WebCore::PluginViewWin::wndProc):
        Allow popups if the window message is a user gesture.
        
        (WebCore::PluginViewWin::dispatchNPEvent):
        New method that dispatches an NPEvent, turning on popups if necessary.
        
        (WebCore::PluginViewWin::paint):
        (WebCore::PluginViewWin::handleKeyboardEvent):
        (WebCore::PluginViewWin::handleMouseEvent):
        Call dispatchNPEvent().
        
        (WebCore::PluginViewWin::performRequest):
        (WebCore::PluginViewWin::load):
        Add calls to shouldAllowPopups().
        
        (WebCore::PluginViewWin::pushPopupsEnabledState):
        (WebCore::PluginViewWin::popPopupsEnabledState):
        New methods that maintain the popup state stack.
        
        (WebCore::PluginViewWin::arePopupsAllowed):
        New method that returns whether popups are allowed.
        
        (WebCore::PluginViewWin::PluginViewWin):
        * plugins/win/PluginViewWin.h:
        Add new instance variables.
        
        * plugins/win/npapi.cpp:
        (NPN_PushPopupsEnabledState):
        (NPN_PopPopupsEnabledState):
        Implement these.

2007-12-12  Dan Bernstein  <mitz@apple.com>

        Reviewed by John Sullivan.

        - fix a bug in debug builds only where selecting an earlier item in
          a popup selects the first item

        Test: fast/forms/menulist-selection-reset.html

        * html/HTMLSelectElement.cpp:
        (WebCore::HTMLSelectElement::recalcListItems): Added an argument that
        tells that function whether it should update the selected state of
        option elements.
        (WebCore::HTMLSelectElement::checkListItems): Changed to pass false
        as the above argument.
        * html/HTMLSelectElement.h:

2007-12-12  Adele Peterson  <adele@apple.com>

        Reviewed by Geoff.

        Fix for <rdar://problem/5643054> Remove cue point implementation for media elements

        When the specification for cue ranges is more final, we will implement those.

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::~HTMLMediaElement):
        (WebCore::HTMLMediaElement::load):
        * html/HTMLMediaElement.h:
        * html/HTMLMediaElement.idl:
        * platform/graphics/MediaPlayer.cpp:
        * platform/graphics/MediaPlayer.h:
        (WebCore::MediaPlayerClient::mediaPlayerTimeChanged):
        * platform/graphics/mac/MediaPlayerPrivateQTKit.h:
        * platform/graphics/mac/MediaPlayerPrivateQTKit.mm:
        (WebCore::MediaPlayerPrivate::MediaPlayerPrivate):
        (WebCore::MediaPlayerPrivate::load):
        (WebCore::MediaPlayerPrivate::play):
        (WebCore::MediaPlayerPrivate::pause):
        (WebCore::MediaPlayerPrivate::setEndTime):
        (WebCore::MediaPlayerPrivate::startEndPointTimerIfNeeded):
        (WebCore::MediaPlayerPrivate::endPointTimerFired):
        (WebCore::MediaPlayerPrivate::timeChanged):
        (WebCore::MediaPlayerPrivate::didEnd):
        * platform/graphics/gtk/MediaPlayerPrivateGStreamer.cpp:
        (WebCore::MediaPlayerPrivate::MediaPlayerPrivate):
        (WebCore::MediaPlayerPrivate::startEndPointTimerIfNeeded):
        (WebCore::MediaPlayerPrivate::endPointTimerFired):
        * platform/graphics/gtk/MediaPlayerPrivateGStreamer.h:

2007-12-12  MorganL  <morganl.webkit@yahoo.com>

        Reviewed by Maciej.

        Fixes:
        http://bugs.webkit.org/show_bug.cgi?id=16408

        When navigating back/forward to a http:// link, we should prefer to
        load from cache if possible.

        * loader/FrameLoader.cpp:

2007-12-12  Anders Carlsson  <andersca@apple.com>

        Reviewed by Sam.

        <rdar://problem/5132003>
        dumpResourceLoadCallbacks is not implemented in DRT on Windows.
        
        * platform/network/cf/ResourceErrorCF.cpp:
        (WebCore::ResourceError::unpackPlatformError):
        Handle kCFErrorDomainWinSock.
        
        * platform/network/cf/ResourceHandleCFNet.cpp:
        (WebCore::willSendRequest):
        Ignore willSendRequest calls where the redirect response is null, like we do in 
        the Mac version.

2007-12-12  Steve Falkenburg  <sfalken@apple.com>

        <rdar://problem/5643785> Fix iBench regression caused by mis-placed nested timer check.
        
        Reviewed by Anders.

        * platform/win/SharedTimerWin.cpp:
        (WebCore::TimerWindowWndProc): Don't set high-resolution timer flag inside non-high-resolution timer proc.

2007-12-12  Beth Dakin  <bdakin@apple.com>

        Reviewed by Oliver.

        Fix for <rdar://problem/5643770> REGRESSION: Free-standing SVGs 
        with width and height 100% clip to 300 x 150

        Though it was correct in an earlier iteration of my patch, it is 
        not sufficient in the final, committed version to ask if the 
        relativeWidthValue() or relativeHeightValue() is greater than 0 
        just to determine if one has been set, for, they are now 
        initialized to 300 and 150 respectively! This patch instead adds a 
        bool to keep track of whether a container size has been set, and 
        only used the relative value if it has.

        * rendering/RenderSVGRoot.cpp:
        (WebCore::RenderSVGRoot::calcViewport):
        * svg/SVGSVGElement.cpp:
        (WebCore::SVGSVGElement::SVGSVGElement):
        * svg/SVGSVGElement.h:
        (WebCore::SVGSVGElement::setContainerSize):
        (WebCore::SVGSVGElement::hasSetContainerSize):

2007-12-12  Brady Eidson  <beidson@apple.com>

        Reviewed by Steve Falkenburg 

        <rdar://problem/5012636> - WebURLProtectionSpace::realm returns the hostname rather than the authentication realm

        * platform/network/ProtectionSpace.cpp:
        (WebCore::ProtectionSpace::ProtectionSpace): Assign the realm to m_realm, instead of the host

2007-12-12  Alp Toker  <alp@atoker.com>

        Reviewed by Maciej.

        http://bugs.webkit.org/show_bug.cgi?id=16388
        [GTK] Widget::setCursor() gets called frequently

        Cache the current cursor to avoid calling gdk_window_set_cursor() when
        there's no change in cursor.

        * platform/gtk/WidgetGtk.cpp:
        (WebCore::Widget::Widget):
        (WebCore::Widget::cursor):
        (WebCore::Widget::setCursor):

2007-12-12  Rodney Dawes  <dobey@wayofthemonkey.com>

        Reviewed by Maciej.

        http://bugs.webkit.org/show_bug.cgi?id=16342
        Build Warning and Error fixes in WebCore GTK+

        Use C-style casts for casting function pointers to gpointer
        Use static_cast<int> to cast a float to int to fix a warning

        * platform/gtk/PlatformScrollBarGtk.cpp:
        (PlatformScrollbar::PlatformScrollbar):
        (PlatformScrollbar::~PlatformScrollbar):
        (PlatformScrollbar::gtkValueChanged):
        * platform/gtk/ThreadingGtk.cpp:
        (callFunctionOnMainThread):
        (callOnMainThread):

2007-12-12  Dan Bernstein  <mitz@apple.com>

        Reviewed by Darin Adler.

        - better fix for a crash when pressing a key that is not associated
          with a command

        * editing/EditorCommand.cpp:
        (WebCore::Editor::command): Return the empty command if the command name
        is empty.

2007-12-12  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Darin.

        http://bugs.webkit.org/show_bug.cgi?id=16410
        Implement isKeypadEvent() on Windows

        Test: platform/win/fast/events/keyLocation-numpad.html

        * platform/win/KeyEventWin.cpp:
        (WebCore::isKeypadEvent): Added.
        (WebCore::PlatformKeyboardEvent::PlatformKeyboardEvent): Also fixed a mistake with autorepeat.

2007-12-12  Oliver Hunt  <oliver@apple.com>

        Reviewed by Maciej.

        <rdar://problem/5071781> window.mouseout events are not sent 
        to window when mouse moves out of window 

        Make PlatformMouseEvent recognise WM_MOUSELEAVE.

        * platform/win/PlatformMouseEventWin.cpp:
        (WebCore::messageToEventType):
        (WebCore::PlatformMouseEvent::PlatformMouseEvent):

2007-12-12  Sam Weinig  <sam@webkit.org>

        Fix Mac release build.

        * WebCore.base.exp:

2007-12-12  Sam Weinig  <sam@webkit.org>

        Build fix for Qt, Gtk, and Wx.

        * css/CSSParser.cpp:
        (WebCore::CSSParser::parseValue):
        * loader/win/FrameLoaderWin.cpp:
        (WebCore::FrameLoader::urlSelected):
        * platform/network/curl/ResourceHandleManager.cpp:
        (WebCore::parseDataUrl):
        (WebCore::ResourceHandleManager::startJob):
        * platform/network/win/CookieJarWin.cpp:
        (WebCore::setCookies):
        (WebCore::cookies):
        * platform/network/win/ResourceHandleWin.cpp:
        (WebCore::ResourceHandle::start):
        * platform/qt/PasteboardQt.cpp:
        (WebCore::Pasteboard::writeURL):

2007-12-11  Dan Bernstein  <mitz@apple.com>

        Reviewed by Maciej Stachowiak.

        - allow non-integer font sizes on Windows for small caps

        * platform/graphics/win/FontDataWin.cpp:
        (WebCore::FontData::smallCapsFontData):
        * platform/graphics/win/FontPlatformData.h:
        (WebCore::FontPlatformData::size):
        (WebCore::FontPlatformData::setSize):
        * platform/graphics/win/FontPlatformDataWin.cpp:
        (WebCore::FontPlatformData::FontPlatformData):

2007-12-11  Sam Weinig  <sam@webkit.org>

        Build fix for Qt, Gtk, and Wx.

        * platform/gtk/CookieJarGtk.cpp:
        (WebCore::setCookies):
        (WebCore::cookies):
        * platform/qt/ClipboardQt.cpp:
        (WebCore::ClipboardQt::writeURL):
        * platform/qt/CookieJarQt.cpp:
        (WebCore::setCookies):
        (WebCore::cookies):
        * platform/wx/PasteboardWx.cpp:
        (WebCore::Pasteboard::writeURL):

2007-12-11  Sam Weinig  <sam@webkit.org>

        Reviewed by Darin Adler.

        Scrub URL out of the tree in preparation for renaming KURL to URL.
            - Renames Document::URL() -> Document::url()
            - Renames DocumentLoader::URL() -> DocumentLoader::url()
            - Renames KURL::url() to KURL::string() and KURL::deprecatedString()
            - Remove FrameLoader::URL()
            - Various variable renames.

        The change from Document::URL() to Document::url() required changes
        to the bindings scripts as well, because URL() is the name of a DOM
        method.  The code generation scripts now have code to special case URL()
        to url().

        * WebCore.base.exp:
        * bindings/js/kjs_events.cpp:
        (WebCore::JSLazyEventListener::parseCode):
        * bindings/js/kjs_navigator.cpp:
        (KJS::Navigator::getValueProperty):
        * bindings/js/kjs_proxy.cpp:
        (WebCore::KJSProxy::initScript):
        * bindings/js/kjs_window.cpp:
        (KJS::Window::put):
        (KJS::Window::allowsAccessFrom):
        (KJS::Location::put):
        (KJS::LocationProtoFuncReplace::callAsFunction):
        (KJS::LocationProtoFuncReload::callAsFunction):
        (KJS::LocationProtoFuncAssign::callAsFunction):
        * bindings/scripts/CodeGenerator.pm:
        * bindings/scripts/CodeGeneratorCOM.pm:
        * bindings/scripts/CodeGeneratorJS.pm:
        * bindings/scripts/CodeGeneratorObjC.pm:
        * css/CSSImportRule.cpp:
        (WebCore::CSSImportRule::insertedIntoParent):
        * css/CSSParser.cpp:
        (WebCore::CSSParser::parseValue):
        (WebCore::CSSParser::parseContent):
        (WebCore::CSSParser::parseBackgroundImage):
        (WebCore::CSSParser::parseFontFaceSrc):
        (WebCore::CSSParser::parseBorderImage):
        (WebCore::CSSParser::createImportRule):
        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::setEncodedURL):
        * dom/Document.cpp:
        (WebCore::Document::processHttpEquiv):
        (WebCore::Document::cookie):
        (WebCore::Document::setCookie):
        (WebCore::Document::domain):
        (WebCore::Document::setDomain):
        (WebCore::Document::getImageMap):
        (WebCore::Document::completeURL):
        * dom/Document.h:
        (WebCore::Document::url):
        (WebCore::Document::baseURL):
        * dom/Element.cpp:
        (WebCore::Element::baseURI):
        * dom/ProcessingInstruction.h:
        * dom/StyledElement.cpp:
        (WebCore::StyledElement::addCSSImageProperty):
        * dom/StyledElement.h:
        * dom/XMLTokenizer.cpp:
        (WebCore::XMLTokenizer::endElementNs):
        (WebCore::XMLTokenizer::end):
        (WebCore::):
        * dom/XMLTokenizer.h:
        * editing/Editor.cpp:
        (WebCore::Editor::copy):
        * editing/markup.cpp:
        (WebCore::completeURLs):
        * history/CachedPage.h:
        (WebCore::CachedPage::url):
        * history/HistoryItem.cpp:
        (WebCore::HistoryItem::HistoryItem):
        (WebCore::HistoryItem::setURL):
        (WebCore::HistoryItem::isCurrentDocument):
        * html/HTMLBaseElement.cpp:
        (WebCore::HTMLBaseElement::process):
        * html/HTMLParser.cpp:
        (WebCore::HTMLParser::reportErrorToConsole):
        * html/HTMLScriptElement.cpp:
        (WebCore::HTMLScriptElement::childrenChanged):
        (WebCore::HTMLScriptElement::insertedIntoDocument):
        (WebCore::HTMLScriptElement::evaluateScript):
        * html/HTMLScriptElement.h:
        * html/HTMLTokenizer.cpp:
        (WebCore::HTMLTokenizer::scriptExecution):
        * loader/Cache.cpp:
        (WebCore::createResource):
        (WebCore::Cache::requestResource):
        * loader/CachedCSSStyleSheet.cpp:
        (WebCore::CachedCSSStyleSheet::checkNotify):
        * loader/CachedResource.cpp:
        (WebCore::CachedResource::CachedResource):
        * loader/CachedResource.h:
        (WebCore::CachedResource::):
        * loader/CachedScript.h:
        * loader/DocLoader.cpp:
        (WebCore::DocLoader::checkForReload):
        (WebCore::DocLoader::requestResource):
        * loader/DocumentLoader.cpp:
        (WebCore::DocumentLoader::url):
        (WebCore::DocumentLoader::replaceRequestURLForAnchorScroll):
        (WebCore::DocumentLoader::setRequest):
        (WebCore::DocumentLoader::startLoadingMainResource):
        * loader/DocumentLoader.h:
        * loader/FrameLoader.cpp:
        (WebCore::FormSubmission::FormSubmission):
        (WebCore::ScheduledRedirection::ScheduledRedirection):
        (WebCore::FrameLoader::changeLocation):
        (WebCore::FrameLoader::urlSelected):
        (WebCore::FrameLoader::requestFrame):
        (WebCore::FrameLoader::loadSubframe):
        (WebCore::FrameLoader::submitFormAgain):
        (WebCore::FrameLoader::submitForm):
        (WebCore::FrameLoader::didExplicitOpen):
        (WebCore::FrameLoader::replaceContentsWithScriptResult):
        (WebCore::FrameLoader::executeScript):
        (WebCore::FrameLoader::receivedFirstData):
        (WebCore::FrameLoader::begin):
        (WebCore::FrameLoader::startIconLoader):
        (WebCore::FrameLoader::commitIconURLToIconDatabase):
        (WebCore::FrameLoader::scheduleRefresh):
        (WebCore::FrameLoader::redirectionTimerFired):
        (WebCore::FrameLoader::loadPlugin):
        (WebCore::FrameLoader::didNotOpenURL):
        (WebCore::FrameLoader::updatePolicyBaseURL):
        (WebCore::FrameLoader::scrollToAnchor):
        (WebCore::FrameLoader::startRedirectionTimer):
        (WebCore::FrameLoader::load):
        (WebCore::FrameLoader::canLoad):
        (WebCore::FrameLoader::shouldHideReferrer):
        (WebCore::FrameLoader::shouldAllowNavigation):
        (WebCore::FrameLoader::commitProvisionalLoad):
        (WebCore::FrameLoader::clientRedirected):
        (WebCore::FrameLoader::open):
        (WebCore::FrameLoader::didTellBridgeAboutLoad):
        (WebCore::FrameLoader::haveToldBridgeAboutLoad):
        (WebCore::FrameLoader::post):
        (WebCore::FrameLoader::loadResourceSynchronously):
        (WebCore::FrameLoader::continueFragmentScrollAfterNavigationPolicy):
        (WebCore::FrameLoader::shouldTreatURLAsSameAsCurrent):
        (WebCore::FrameLoader::createHistoryItem):
        (WebCore::FrameLoader::addBackForwardItemClippedAtTarget):
        (WebCore::FrameLoader::loadItem):
        (WebCore::FrameLoader::urlsMatchItem):
        (WebCore::FrameLoader::recursiveGoToItem):
        (WebCore::FrameLoader::updateHistoryForStandardLoad):
        (WebCore::FrameLoader::updateHistoryForRedirectWithLockedHistory):
        * loader/FrameLoader.h:
        (WebCore::FrameLoader::url):
        * loader/ImageDocument.cpp:
        (WebCore::ImageDocument::createDocumentStructure):
        * loader/MainResourceLoader.cpp:
        (WebCore::shouldLoadAsEmptyDocument):
        (WebCore::MainResourceLoader::didFinishLoading):
        * loader/NavigationAction.cpp:
        (WebCore::NavigationAction::NavigationAction):
        * loader/NavigationAction.h:
        (WebCore::NavigationAction::url):
        * loader/PluginDocument.cpp:
        (WebCore::PluginTokenizer::createDocumentStructure):
        * loader/SubresourceLoader.cpp:
        (WebCore::SubresourceLoader::load):
        (WebCore::SubresourceLoader::create):
        * loader/icon/IconLoader.cpp:
        (WebCore::IconLoader::startLoading):
        (WebCore::IconLoader::finishLoading):
        * loader/loader.cpp:
        (WebCore::Loader::servePendingRequests):
        * loader/mac/LoaderNSURLExtras.m:
        (urlOriginalData):
        * page/Chrome.cpp:
        (WebCore::Chrome::setToolTip):
        * page/ContextMenuController.cpp:
        (WebCore::ContextMenuController::contextMenuItemSelected):
        * page/Frame.cpp:
        (WebCore::Frame::setUserStyleSheetLocation):
        * page/InspectorController.cpp:
        (WebCore::InspectorResource::type):
        (WebCore::addSourceToFrame):
        (WebCore::InspectorController::addScriptResource):
        (WebCore::InspectorController::updateScriptResourceRequest):
        (WebCore::InspectorController::didCommitLoad):
        * page/mac/WebCoreFrameBridge.mm:
        (-[WebCoreFrameBridge getData:andResponse:forURL:]):
        * platform/KURL.h:
        (WebCore::KURL::string):
        (WebCore::KURL::deprecatedString):
        * platform/mac/ClipboardMac.mm:
        (WebCore::ClipboardMac::getData):
        * platform/mac/CookieJar.mm:
        (WebCore::cookies):
        (WebCore::setCookies):
        * platform/mac/PasteboardMac.mm:
        (WebCore::Pasteboard::writeURL):
        (WebCore::fileWrapperForImage):
        (WebCore::Pasteboard::writeImage):
        (WebCore::Pasteboard::plainText):
        * platform/network/ResourceHandle.cpp:
        (WebCore::ResourceHandle::portAllowed):
        * platform/network/ResourceRequestBase.cpp:
        (WebCore::ResourceRequestBase::isNull):
        * platform/network/cf/ResourceHandleCFNet.cpp:
        (WebCore::willSendRequest):
        (WebCore::didReceiveResponse):
        (WebCore::didReceiveData):
        (WebCore::didFinishLoading):
        (WebCore::didFail):
        (WebCore::didReceiveChallenge):
        (WebCore::ResourceHandleInternal::~ResourceHandleInternal):
        (WebCore::ResourceHandle::~ResourceHandle):
        (WebCore::ResourceHandle::start):
        * platform/win/ClipboardUtilitiesWin.cpp:
        (WebCore::createGlobalData):
        (WebCore::urlToMarkup):
        * platform/win/ClipboardWin.cpp:
        (WebCore::writeURL):
        (WebCore::writeImageToDataObject):
        (WebCore::ClipboardWin::writeURL):
        (WebCore::ClipboardWin::writeRange):
        * platform/win/PasteboardWin.cpp:
        (WebCore::Pasteboard::writeSelection):
        (WebCore::Pasteboard::writeURL):
        * plugins/win/PluginDatabaseWin.cpp:
        (WebCore::PluginDatabaseWin::findPlugin):
        * plugins/win/PluginStreamWin.cpp:
        (WebCore::PluginStreamWin::startStream):
        (WebCore::PluginStreamWin::destroyStream):
        * plugins/win/PluginViewWin.cpp:
        (WebCore::scriptStringIfJavaScriptURL):
        (WebCore::PluginViewWin::performRequest):
        * svg/SVGImageLoader.cpp:
        (WebCore::SVGImageLoader::updateFromElement):
        * xml/XMLHttpRequest.cpp:
        (WebCore::XMLHttpRequest::getResponseXML):
        (WebCore::XMLHttpRequest::urlMatchesDocumentDomain):
        * xml/XSLImportRule.cpp:
        (WebCore::XSLImportRule::loadSheet):
        * xml/XSLTProcessor.cpp:
        (WebCore::XSLTProcessor::createDocumentFromSource):
        (WebCore::xsltStylesheetPointer):
        (WebCore::xmlDocPtrFromNode):

2007-12-11  Beth Dakin  <bdakin@apple.com>

        Reviewed by Darin.

        Fix for <rdar://problem/5641255> SVGs with width and height 100% 
        fail to render when used as background images

        CachedImage now has a setImageContainerSize function. It is only 
        needed for SVG right now.
        * loader/CachedImage.cpp:
        (WebCore::CachedImage::setImageContainerSize):
        * loader/CachedImage.h:

        Relatively sized SVGs have no intrinsic size. Because this call is 
        low-level enough that we cannot pass in the container size and get 
        the real size of the SVG, we need to know if it has relative 
        dimensions, and if so, we need to get the size from scaledTileSize.
        * platform/graphics/Image.cpp:
        (WebCore::Image::drawTiled):
        * platform/graphics/Image.h:
        (WebCore::Image::setContainerSize):
        (WebCore::Image::hasRelativeWidth):
        (WebCore::Image::hasRelativeHeight):

        Re-factored calculateBackgroundSize a bit so that it returns an 
        IntSize. Made it a member function so that it can send m_width and 
        m_height along to setImageContainerSize.
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::calculateBackgroundSize):
        (WebCore::RenderBox::calculateBackgroundImageGeometry):
        * rendering/RenderBox.h:

        Need to account for relatively sized SVGs in calcViewport()
        * rendering/RenderSVGRoot.cpp:
        (WebCore::RenderSVGRoot::calcViewport):
        
        Added new member variables to store the size of the SVG container. 
        relativeWidthValue() and relativeHeightValue() use the stored SVG 
        container size to correctly calculate the width and height of a 
        relatively sized SVG.
        * svg/SVGSVGElement.cpp:
        (WebCore::SVGSVGElement::SVGSVGElement):
        (WebCore::SVGSVGElement::setContainerSize):
        (WebCore::SVGSVGElement::relativeWidthValue):
        (WebCore::SVGSVGElement::relativeHeightValue):
        * svg/SVGSVGElement.h:
        (WebCore::SVGSVGElement::containerSize):
        
        Re-factored size calculations to use the size of the container.
        * svg/graphics/SVGImage.cpp:
        (WebCore::SVGImage::setContainerSize):
        (WebCore::SVGImage::size):
        (WebCore::SVGImage::hasRelativeWidth):
        (WebCore::SVGImage::hasRelativeHeight):
        * svg/graphics/SVGImage.h:

2007-12-11  Darin Adler  <darin@apple.com>

        * editing/Editor.cpp:
        (WebCore::Editor::yankFromKillRing): Try to fix non-Mac builds by adding
        a missing return statement.

2007-12-11  Darin Adler  <darin@apple.com>

        Reviewed by Geoff.

        - exposed many new commands to the DOM Document executeCommand function by
          merging the JSEditor and Editor executeCommand implementations
        - replaced the execCommand function with a EditorCommand class
        - replaced the WTF::StrHash<> class template with the WebCore::StringHash class
        - replaced the WTF::CaseInsensitiveHash<> class template with the
          WebCore::CaseFoldingHash class

        * WebCore.base.exp: Updated.
        * WebCore.pro: Added EditorCommand.cpp, removed JSEditor.cpp.
        * WebCore.vcproj/WebCore.vcproj: Ditto.
        * WebCore.xcodeproj/project.pbxproj: Ditto.
        * WebCoreSources.bkl: Ditto.

        * dom/Document.cpp:
        (WebCore::Document::Document): Removed code to set up m_jsEditor.
        (WebCore::Document::~Document): Removed code to delete m_jsEditor.
        (WebCore::command): Added. Helper function that gets an Editor::Command.
        (WebCore::Document::executeCommand): Changed to use Editor::Command instead of
        JSEditor.
        (WebCore::Document::queryCommandEnabled): Ditto.
        (WebCore::Document::queryCommandIndeterm):
        (WebCore::Document::queryCommandState): Ditto.
        (WebCore::Document::queryCommandSupported): Ditto.
        (WebCore::Document::queryCommandValue): Ditto.

        * dom/Document.h: Removed JSEditor, jsEditor, m_jsEditor. Changed to
        use CaseFoldingHash.

        * editing/Editor.cpp:
        (WebCore::Editor::selectionForCommand): Renamed from selectionForEvent and
        made into a member function so it is accessible from the new EditorCommand.cpp file.
        Also changed to get the selection from the passed-in frame instead of from the
        page, because this should work on the targeted frame unless the event overrides it.
        (WebCore::Editor::handleKeypress): Updated for selectionForCommand change.
        (WebCore::Editor::handleInputMethodKeypress): Ditto.
        (WebCore::imageElementFromImageDocument): Renamed and changed to return
        a HTMLImageElement instead of a Node*.
        (WebCore::Editor::canCopy): Updated for name change.
        (WebCore::Editor::selectionUnorderedListState): Updated for TriState change.
        (WebCore::Editor::selectionOrderedListState): Ditto.
        (WebCore::Editor::selectionStartHasStyle): Make type of local more specific.
        (WebCore::updateState): Moved here from Frame.
        (WebCore::Editor::selectionHasStyle): Ditto.
        (WebCore::Editor::Editor): Initialize m_shouldStartNewKillRingSequence.
        (WebCore::Editor::insertTextWithoutSendingTextEvent): Updated for
        selectionForCommand change.
        (WebCore::Editor::copy): Updated for imageElementFromImageDocument change.
        (WebCore::Editor::toggleBold): Call the ToggleBold command via the command
        machinery since it's no longer in this file as a local function.
        (WebCore::Editor::toggleUnderline): Call the ToggleUnderline command.
        (WebCore::Editor::setBaseWritingDirection): Change type of argument and of
        local variable.
        (WebCore::Editor::addToKillRing): Moved here from EditorMac. Not useful
        without a kill ring, but it's relatively straightforward to implement one.
        (WebCore::Editor::appendToKillRing): Put default implementation here for
        platforms other than Mac. We should probably put a simple kill ring
        implementation here -- doesn't need to be shared with the OS oh platforms
        other than Mac.
        (WebCore::Editor::prependToKillRing): Ditto.
        (WebCore::Editor::yankFromKillRing): Ditto.
        (WebCore::Editor::startNewKillRingSequence): Ditto.
        (WebCore::Editor::setKillRingToYankedState): Ditto.

        * editing/Editor.h: Moved the TriState enum here instead of inside the
        Frame class. Added EditorCommandSource enum. Moved selectionHasStyle
        here from the Frame class. Added Editor::Command class with five functions
        for the various things you can do with a command (execute it, check if it
        can be used, and its state and value). Changed hte parameter of
        setBaseWritingDirection to be a const String& rather than a String.
        Got rid of the kill-ring-related operations, but added the kill ring
        functions themselves. Made selectedRange() public. Made the
        m_startNewKillRingSequence not Mac-specific and added "should" to its
        name.

        * editing/EditorCommand.cpp: Copied from WebCore/editing/Editor.cpp.
        Retained only the editing commands.
        (WebCore::targetFrame): Moved to the top of the file.
        (WebCore::executeApplyStyle): Added. Helper function for commands
        that need to apply styles.
        (WebCore::executeToggleStyle): Added. Helper function for commands
        that need to toggle styles based on the style of the start of selection.
        (WebCore::executeApplyParagraphStyle): Added. Like executeApplyStyle, but
        for paragraph styles.
        (WebCore::executeInsertFragment): Added. Helper function for commands
        that need to insert a DOM fragment.
        (WebCore::executeInsertNode): Added. Helper function for commands that
        need to insert a tree rooted in a single DOM node.
        (WebCore::stateStyle): Added. Helper function for the state of commands
        that represent style.
        (WebCore::valueStyle): Added. Helper function for the value of commands
        that represent style.
        (WebCore::canScroll): Added. Helper functions for some move and scroll
        commands that need to determine if the renderer they are in can scroll.
        (WebCore::unionDOMRanges): Moved here from EditorMac.
        (WebCore::executeBackColor):
        (WebCore::executeBackwardDelete):
        (WebCore::executeCopy):
        (WebCore::executeCreateLink):
        (WebCore::executeCut):
        (WebCore::executeDelete):
        (WebCore::executeDeleteToMark):
        (WebCore::executeDeleteWordBackward):
        (WebCore::executeDeleteWordForward):
        (WebCore::executeFindString):
        (WebCore::executeFontName):
        (WebCore::executeFontSize):
        (WebCore::executeFontSizeDelta):
        (WebCore::executeForeColor):
        (WebCore::executeFormatBlock):
        (WebCore::executeForwardDelete):
        (WebCore::executeIndent):
        (WebCore::executeInsertBacktab):
        (WebCore::executeInsertHorizontalRule):
        (WebCore::executeInsertHTML):
        (WebCore::executeInsertImage):
        (WebCore::executeInsertLineBreak):
        (WebCore::executeInsertNewline):
        (WebCore::executeInsertNewlineInQuotedContent):
        (WebCore::executeInsertOrderedList):
        (WebCore::executeInsertParagraph):
        (WebCore::executeInsertTab):
        (WebCore::executeInsertText):
        (WebCore::executeInsertUnorderedList):
        (WebCore::executeJustifyCenter):
        (WebCore::executeJustifyFull):
        (WebCore::executeJustifyLeft):
        (WebCore::executeJustifyRight):
        (WebCore::executeMoveBackward):
        (WebCore::executeMoveBackwardAndModifySelection):
        (WebCore::executeMoveDown):
        (WebCore::executeMoveDownAndModifySelection):
        (WebCore::executeMoveDownByPageAndModifyCaret):
        (WebCore::executeMoveForward):
        (WebCore::executeMoveForwardAndModifySelection):
        (WebCore::executeMoveLeft):
        (WebCore::executeMoveLeftAndModifySelection):
        (WebCore::executeMoveRight):
        (WebCore::executeMoveRightAndModifySelection):
        (WebCore::executeMoveToBeginningOfDocument):
        (WebCore::executeMoveToBeginningOfDocumentAndModifySelection):
        (WebCore::executeMoveToBeginningOfLine):
        (WebCore::executeMoveToBeginningOfLineAndModifySelection):
        (WebCore::executeMoveToBeginningOfParagraph):
        (WebCore::executeMoveToBeginningOfParagraphAndModifySelection):
        (WebCore::executeMoveToBeginningOfSentence):
        (WebCore::executeMoveToBeginningOfSentenceAndModifySelection):
        (WebCore::executeMoveToEndOfDocument):
        (WebCore::executeMoveToEndOfDocumentAndModifySelection):
        (WebCore::executeMoveToEndOfSentence):
        (WebCore::executeMoveToEndOfSentenceAndModifySelection):
        (WebCore::executeMoveToEndOfLine):
        (WebCore::executeMoveToEndOfLineAndModifySelection):
        (WebCore::executeMoveToEndOfParagraph):
        (WebCore::executeMoveToEndOfParagraphAndModifySelection):
        (WebCore::executeMoveParagraphBackwardAndModifySelection):
        (WebCore::executeMoveParagraphForwardAndModifySelection):
        (WebCore::executeMoveUp):
        (WebCore::executeMoveUpAndModifySelection):
        (WebCore::executeMoveUpByPageAndModifyCaret):
        (WebCore::executeMoveWordBackward):
        (WebCore::executeMoveWordBackwardAndModifySelection):
        (WebCore::executeMoveWordForward):
        (WebCore::executeMoveWordForwardAndModifySelection):
        (WebCore::executeMoveWordLeft):
        (WebCore::executeMoveWordLeftAndModifySelection):
        (WebCore::executeMoveWordRight):
        (WebCore::executeMoveWordRightAndModifySelection):
        (WebCore::executeOutdent):
        (WebCore::executePaste):
        (WebCore::executePasteAndMatchStyle):
        (WebCore::executePrint):
        (WebCore::executeRedo):
        (WebCore::executeRemoveFormat):
        (WebCore::executeSelectAll):
        (WebCore::executeSelectToMark):
        (WebCore::executeSetMark):
        (WebCore::executeStrikethrough):
        (WebCore::executeSubscript):
        (WebCore::executeSuperscript):
        (WebCore::executeSwapWithMark):
        (WebCore::executeToggleBold):
        (WebCore::executeToggleItalic):
        (WebCore::executeTranspose):
        (WebCore::executeUnderline):
        (WebCore::executeUndo):
        (WebCore::executeUnlink):
        (WebCore::executeUnscript):
        (WebCore::executeUnselect):
        (WebCore::executeYank):
        (WebCore::executeYankAndSelect):
        (WebCore::supported):
        (WebCore::supportedPaste):
        (WebCore::enabled):
        (WebCore::enabledAnySelection):
        (WebCore::enabledAnySelectionAndMark):
        (WebCore::enableCaretInEditableText):
        (WebCore::enabledCopy):
        (WebCore::enabledCut):
        (WebCore::enabledInEditableText):
        (WebCore::enabledInRichlyEditableText):
        (WebCore::enabledPaste):
        (WebCore::enabledRangeInEditableText):
        (WebCore::enabledRangeInRichlyEditableText):
        (WebCore::enabledRedo):
        (WebCore::enabledUndo):
        (WebCore::stateNone):
        (WebCore::stateBold):
        (WebCore::stateItalic):
        (WebCore::stateOrderedList):
        (WebCore::stateStrikethrough):
        (WebCore::stateSubscript):
        (WebCore::stateSuperscript):
        (WebCore::stateUnderline):
        (WebCore::stateUnorderedList):
        (WebCore::valueNull):
        (WebCore::valueBackColor):
        (WebCore::valueFontName):
        (WebCore::valueFontSize):
        (WebCore::valueFontSizeDelta):
        (WebCore::valueForeColor):
        (WebCore::createCommandMap): Added lots of commands, including all the commands
        from JSEditor. A few commands needed different behavior based on whether they are
        invoked from the DOM or a keyboard binding.
        (WebCore::Editor::command): Added. Gets a command object given a name.
        (WebCore::Editor::Command::Command): Added.
        (WebCore::Editor::Command::execute): Added.
        (WebCore::Editor::Command::isSupported): Added.
        (WebCore::Editor::Command::isEnabled): Added.
        (WebCore::Editor::Command::state): Added.
        (WebCore::Editor::Command::value): Added.
        (WebCore::Editor::execCommand): Changed to call command().execute().

        * editing/JSEditor.cpp: Removed.
        * editing/JSEditor.h: Removed.

        * editing/mac/EditorMac.mm: Changed to provide kill ring primitives intead of
        kill ring commands, so the kill ring commands can be cross-platform.
        (WebCore::Editor::appendToKillRing): Added.
        (WebCore::Editor::prependToKillRing): Added.
        (WebCore::Editor::yankFromKillRing): Added.
        (WebCore::Editor::startNewKillRingSequence): Added.
        (WebCore::Editor::setKillRingToYankedState): Added.

        * page/Frame.cpp: Removed selectionHasStyle, TriState, and updateState.
        * page/Frame.h: Ditto.

        * page/mac/WebCoreFrameBridge.mm: Removed selectionHasStyle.
        * page/mac/WebCoreFrameBridge.h: Ditto.

        * platform/ContextMenu.cpp:
        (WebCore::ContextMenu::checkOrEnableIfNeeded): Updated for TriState change.

        * platform/text/StringHash.h:
        (WebCore::StringHash::hash): Merged the StrHash<> template classes into this.
        (WebCore::StringHash::equal): Ditto.
        (WebCore::CaseFoldingHash::hash): Merged the CaseInsensitiveHash<> template
        classes into this.
        (WebCore::CaseFoldingHash::equal): Ditto.

        * platform/text/StringImpl.cpp:
        (WebCore::equal): Changed to invoke StringHash.
        (WebCore::equalIgnoringCase): Changed to invoke CaseFoldingHash.

        * dom/DOMImplementation.cpp:
        (WebCore::addString): Updated to use StringHash and CaseFoldingHash.
        (WebCore::isSVG10Feature): Ditto.
        (WebCore::isSVG11Feature): Ditto.
        * loader/FrameLoader.cpp:
        (WebCore::localSchemes): Ditto.
        * platform/graphics/FontCache.cpp:
        (WebCore::computeHash): Ditto.
        * platform/network/HTTPHeaderMap.h: Ditto.
        * platform/text/PlatformString.h: Ditto.
        * platform/text/StringImpl.h: Ditto.
        * rendering/RenderPartObject.cpp:
        (WebCore::RenderPartObject::updateWidget): Ditto.
        * xml/XMLHttpRequest.cpp:
        (WebCore::canSetRequestHeader): Ditto.

        * rendering/RenderTreeAsText.cpp: Removed stray include of JSEditor.h.

2007-12-11  Darin Adler  <darin@apple.com>

        * platform/wx/KeyboardEventWx.cpp:
        (WebCore::PlatformKeyboardEvent::PlatformKeyboardEvent): Another try at fixing the
        WX build. Changes the code around a little bit.

2007-12-11  Darin Adler  <darin@apple.com>

        * platform/wx/KeyboardEventWx.cpp:
        (WebCore::PlatformKeyboardEvent::PlatformKeyboardEvent): Quick try at fixing build.

2007-12-11  Dan Bernstein  <mitz@apple.com>

        Reviewed by Darin Adler.

        - fix <rdar://problem/5631507> Text doesn't wrap properly at Tamil version of Wikipedia

        Test: fast/text/international/complex-character-based-fallback.html

        * platform/graphics/Font.cpp:
        (WebCore::Font::glyphDataForCharacter): Added a forceSmallCaps argument
        that forces this function to use the small caps font. It is used for
        combining marks that need to combine with a small cap.
        * platform/graphics/Font.h:
        * platform/win/UniscribeController.cpp:
        (WebCore::UniscribeController::advance): Changed to split the string
        into runs of characters that will be rendered using the same FontData.
        This is done by calling glyphDataForCharacter() for each cahracter to
        find the FontData it should be rendered with.
        (WebCore::UniscribeController::itemizeShapeAndPlace): Added a fontData
        argument that is passed on to shapeAndPlaceItem() instead of the
        smallCaps argument.
        (WebCore::UniscribeController::shapeAndPlaceItem): Added a fontData
        argument and removed the font fallback logic from this function, as
        it is now expected to be called with an item all of whose characters
        can be rendered with the given fontData.
        * platform/win/UniscribeController.h:

2007-12-07  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Darin.

        <rdar://problem/5535636>
        Have to press 4 times instead of 2 times to get the expected result of ^^ with german keyboard.

        http://bugs.webkit.org/show_bug.cgi?id=13916
        JavaScript detects Tab as a character input on a textfield validation

        Test: platform/win/fast/events/double-dead-char.html

        * platform/PlatformKeyboardEvent.h:
        (WebCore::PlatformKeyboardEvent::):
        (WebCore::PlatformKeyboardEvent::type):
        (WebCore::PlatformKeyboardEvent::windowsVirtualKeyCode):
        (WebCore::PlatformKeyboardEvent::setWindowsVirtualKeyCode):
        (WebCore::PlatformKeyboardEvent::keyIdentifier):
        (WebCore::PlatformKeyboardEvent::setIsAutoRepeat):
        Added an explicit type member to differentiate different kinds of events:
          RawKeyDown == keydown == WM_KEYDOWN
          KeyUp == keyup == WM_KEYUP
          Char == keypress == WM_CHAR
          KeyDown == e.g. NSKeyDown or NSFlagsChanged, used on platforms that have a different model for
          event processing, and needs to be converted to RawKeyDown (+ Char) for processing in DOM.

        * platform/mac/KeyEventMac.mm:
        (WebCore::PlatformKeyboardEvent::PlatformKeyboardEvent): Updated for changed data members.
        Fix Enter (numeric keypad) charCode to match Return, as we check for it from keypress default handlers.
        (WebCore::windowsKeyCodeForKeyEvent): 
        (WebCore::isKeyUpEvent): Made it do something closer to what it claims; added a FIXME explaining
        that it still fails.
        (WebCore::disambiguateKeyDownEvent): Downgrade from KeyDown to RawKeyDown or Char, removing information that
        should not be available in those (because it cannot be provided on Windows).

        * platform/win/KeyEventWin.cpp:
        (WebCore::PlatformKeyboardEvent::PlatformKeyboardEvent): Updated for changed data members.
        Used standard Windows constants for bit masks instead of our own ones.
        (WebCore::PlatformKeyboardEvent::disambiguateKeyDownEvent): Should never be called on Windows.

        * platform/gtk/KeyEventGtk.cpp:
        (WebCore::PlatformKeyboardEvent::PlatformKeyboardEvent):
        (WebCore::PlatformKeyboardEvent::disambiguateKeyDownEvent):
        * platform/qt/PlatformKeyboardEventQt.cpp:
        (WebCore::PlatformKeyboardEvent::PlatformKeyboardEvent):
        (WebCore::PlatformKeyboardEvent::disambiguateKeyDownEvent):
        * platform/wx/KeyboardEventWx.cpp:
        (WebCore::PlatformKeyboardEvent::PlatformKeyboardEvent):
        (WebCore::PlatformKeyboardEvent::disambiguateKeyDownEvent):
        Updated for cross-platform changes as much as it was possible without appropriate build
        environments.

        * WebCore.base.exp: Export PlatformKeyboardEvent::disambiguateKeyDownEvent(), used by platforms that need to
        convert their fancy key events to RawKeyDown/Char pairs. Export Editor::isTextInsertionCommand().

        * bridge/EditorClient.h:
        Renamed handleKeypress() to handleKeyboardEvent(), as it gets both keydowns and keypresses.
        Renamed handleInputMethodKeypress() to handleInputMethodKeydown(), as IMs work with raw keydowns.

        * dom/Document.h:
        * dom/Document.cpp:
        (WebCore::Document::defaultEventHandler): Moved accesskey processing to EventHandler.

        * dom/KeyboardEvent.h: Added comments describing keyCode/charCode behavior.

        * dom/KeyboardEvent.cpp:
        (WebCore::eventTypeForKeyboardEventType):
        (WebCore::KeyboardEvent::KeyboardEvent): Conversion between platform and DOM event types is
        now straightforward, so scary hacks such as using autorepeat to distinguish types are
        not needed.
        (WebCore::KeyboardEvent::keyCode): Added a comment describing other browsers' behavior.
        (WebCore::KeyboardEvent::charCode): Added a comment describing other browsers' behavior.
        Changed to a more compatible behavior: raw keydown/keyup events do not and can not have
        character codes.

        * editing/Editor.h:
        * editing/Editor.cpp:
        (WebCore::Editor::isTextInsertionCommand): Is this command actually text input in disguise?
        (WebCore::Editor::handleKeyboardEvent): Updated for new function names.
        (WebCore::Editor::handleInputMethodKeydown): Ditto.

        * html/HTMLButtonElement.cpp:
        (WebCore::HTMLButtonElement::defaultEventHandler): Perform the default action when handling an
        appropriate event. Enter is processed on keypress (and thus should be checked for via charCode,
        not keyIdentifier), Space is processed on keydown+keyup! We now match IE in that a button is
        highlighted when Space is pressed.

        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::defaultEventHandler):
        * html/HTMLSelectElement.cpp:
        (WebCore::HTMLSelectElement::menuListDefaultEventHandler):
        (WebCore::HTMLSelectElement::listBoxDefaultEventHandler):
        Made a number of fixes to when default actions take place, similar to HTMLButtonElement ones
        described above.

        * page/EventHandler.cpp:
        (WebCore::EventHandler::keyEvent): Unless we have a combined KeyDown, just forward the event
        to the target. Call accesskey handling directly, as it doesn't seem to be part of normal event
        handling in IE. Also streamlined the code in KeyDown case, thanks to handleInputMethodKeypress()
        now being handleInputMethodKeydown().
        (WebCore::EventHandler::handleTextInputEvent): Check that we were not called from keydown.
        (WebCore::EventHandler::defaultTextInputEventHandler): Removed a call to defaultTabEventHandler,
        as default tab handling happens when processing keydown.
        (WebCore::handleAccessKey): Moved from Document, as access keys are processed outside normal
        event handling. Fixed accesskey processing to use information that's available in a raw keydown
        event.

        (WebCore::EventHandler::defaultKeyboardEventHandler): Do not ignore keydown; in particular,
        handle tabs during keydown processing.

        * page/mac/EventHandlerMac.mm:
        (WebCore::EventHandler::currentKeyboardEvent): Disambiguate KeyDown as RawKeyDown, as this is
        what callers want.

        * platform/text/PlatformString.h:
        * platform/text/String.cpp:
        (WebCore::String::characterStartingAt):
        * platform/text/StringImpl.cpp:
        (WebCore::StringImpl::characterStartingAt):
        * platform/text/StringImpl.h:
        Added a UChar32 accessor.

        * svg/graphics/SVGImageEmptyClients.h:
        (WebCore::SVGEmptyEditorClient::handleKeyboardEvent):
        (WebCore::SVGEmptyEditorClient::handleInputMethodKeydown):
        Updated for new function names.

2007-12-11  John Sullivan  <sullivan@apple.com>

        Reviewed by Adele

        Tiger build fix -- don't call QTMovieView setDelegate: directly because it's not public

        * platform/graphics/mac/MediaPlayerPrivateQTKit.mm:
        (WebCore::MediaPlayerPrivate::createQTMovieView):
        (WebCore::MediaPlayerPrivate::detachQTMovieView):

2007-12-11  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Darin.

        http://bugs.webkit.org/show_bug.cgi?id=16325
        <rdar://problem/5632997> REGRESSION: www.xerox.ru doesn't work

        Fix this on Windows, too!

        Test: http/tests/misc/empty-cookie.html

        * platform/network/win/CookieJarWin.cpp:
        (WebCore::setCookies):
        (WebCore::cookies):
        Same fix as on Mac, translated into CF.

        * platform/win/CookieJarWin.cpp: Removed - the real one is in platform/network/win.

2007-12-11  Christian Dywan  <christian@twotoasts.de>

        Reviewed by Alp Toker.

        http://bugs.webkit.org/show_bug.cgi?id=16371
        Implement additional mouse cursors for Gtk

        Added cursor bitmaps from Mozilla:
        http://lxr.mozilla.org/mozilla1.8/source/widget/src/gtk2/nsGtkCursors.h

        * platform/gtk/CursorGtk.cpp:
        (WebCore::customCursorNew):
        (WebCore::verticalTextCursor):
        (WebCore::cellCursor):
        (WebCore::contextMenuCursor):
        (WebCore::noDropCursor):
        (WebCore::copyCursor):
        (WebCore::progressCursor):
        (WebCore::aliasCursor):
        (WebCore::noneCursor):
        (WebCore::notAllowedCursor):
        (WebCore::zoomInCursor):
        (WebCore::zoomOutCursor):
        * platform/gtk/CursorGtk.h: Added.

2007-12-10  Oliver Hunt  <oliver@apple.com>

        Reviewed by Weinig, Dan, and Alexey.

        Fix character set used for dynamically loaded scripts.

        Fix for:
            <rdar://problem/5333163> Safari can not display the mouse over pop menu on ChinaTimes News site correctly.
            <rdar://problem/5530048> [Safari]? :Leopard9A576: The typed CH characters displays as garbage in Sina website after reloading the webpage.
            <rdar://problem/5416588> All menus for chinese IBM site have wrong encoding
            
        Use the same logic to determine the charset for a script loaded dynamically
        as we do for a statically loaded script.

        * html/HTMLScriptElement.cpp:
        (WebCore::HTMLScriptElement::insertedIntoDocument):

2007-12-10  Justin Garcia  <justin.garcia@apple.com>

        Reviewed by Oliver Hunt.

        <rdar://problem/5482023> GoogleDocs: After FormatBlock in an empty document, certain functions are disabled
        
        We were trying to insert a block of the requested type before the body element.
        
        * editing/FormatBlockCommand.cpp:
        (WebCore::FormatBlockCommand::doApply): 
        Removed unnecessary ()s in the if condition.
        Removed "|| !upstreamStart.node()->isDescendantOf(root)" from the if condition, since
        a) upstreamStart will never be outside the root editable element, since in that case
        there would be no block inside the editable root to Format, and b) if upstreamStart.node() 
        *is* the root, then refNode is the root, and we shouldn't insert before the root, we should insert
        at [root, 0].
        Added comments to explain the use of upstream() in the second if-clause.
        Added an early return for case where there is nothing selected, in that case, there is nothing
        to move.

2007-12-10  Adele Peterson  <adele@apple.com>

        Reviewed and partially fixed by Tim Hatcher.

        Remaining part of fix for <rdar://problem/5633400>
        Transformed <video> is not clipped correctly until a repaint is forced

        Replace the implementation of a QTKit method to avoid repaints from the NSView system associated with the QTMovie
        from clobbering the WebCore repaints.

        * html/HTMLMediaElement.cpp: (WebCore::HTMLMediaElement::mediaPlayerRepaint): Added.
        * html/HTMLMediaElement.h:
        * platform/graphics/MediaPlayer.cpp: (WebCore::MediaPlayer::repaint): Added.
        * platform/graphics/MediaPlayer.h: (WebCore::MediaPlayerClient::mediaPlayerRepaint): Added.

        * platform/graphics/mac/MediaPlayerPrivateQTKit.h:
        * platform/graphics/mac/MediaPlayerPrivateQTKit.mm:
        (method_setImplementation): Added for Tiger.

        (WebCore::MediaPlayerPrivate::~MediaPlayerPrivate): Call detachQTMovieView, which now does more cleanup.
        (WebCore::MediaPlayerPrivate::cancelLoad): ditto.
        (WebCore::MediaPlayerPrivate::setVisible): ditto.
        (WebCore::MediaPlayerPrivate::detachQTMovieView): Clear the delegate as well as m_qtMovieView pointer.

        (WebCore::MediaPlayerPrivate::repaint): Added.  Triggers a repaint on the video renderer.
        (-[WebCoreMovieObserver repaint]): ditto.

        (WebCore::mainThreadSetNeedsDisplay): Added.
         Does a WebCore repaint instead of going through the view repaint system for QTMovieView.
        (WebCore::MediaPlayerPrivate::createQTMovieView): Replace the implementation of _mainThreadSetNeedsDisplay.

2007-12-10  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Sam Weinig.

        Updated for rename in JavaScriptCore.

        * bridge/mac/WebCoreScriptDebugger.mm:
        (-[WebCoreScriptCallFrame scopeChain]):
        (-[WebCoreScriptCallFrame functionName]):
        (-[WebCoreScriptCallFrame evaluateWebScript:]):

2007-12-10  Rodney Dawes  <dobey@wayofthemonkey.com>

        Bug 16383: Ambiguous Window Usage in kjs_dom.cpp
        <http://bugs.webkit.org/show_bug.cgi?id=16383>

        Use KJS::Window not the ambiguous Window

        Reviewed by ddkilzer.

        * bindings/js/kjs_dom.cpp (checkNodeSecurity):

2007-12-10  Sam Weinig  <sam@webkit.org>

        Fix non-mac builds.

        * page/WindowFeatures.cpp: #include <wtf/MathExtras.h> for isnan.

2007-12-10  Marvin Decker  <marv.decker@gmail.com>

        Reviewed by Darin.

        Fix a divide by 0 in the progress tracker.
        http://bugs.webkit.org/show_bug.cgi?id=15055

        * loader/ProgressTracker.cpp:
        (WebCore::ProgressTracker::incrementProgress):

2007-12-09  Sam Weinig  <sam@webkit.org>

        Reviewed by Darin.

        More cleanup of kjs_window.
        - Move WindowFeatures from bridge/ to page/
        - Move functions related to WindowFeatures (boolFeature,
          floatFeature, setWindowFeature, parseWindowFeatures) into the class.
        - Fix up whitespace.

        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/kjs_window.cpp:
        (KJS::DOMWindowTimer::~DOMWindowTimer):
        (KJS::createWindow):
        (KJS::showModalDialog):
        (KJS::Window::getOwnPropertySlot):
        (KJS::Window::allowsAccessFrom):
        (KJS::Window::shouldInterruptScript):
        (KJS::WindowProtoFuncAToB::callAsFunction):
        (KJS::WindowProtoFuncOpen::callAsFunction):
        (KJS::Window::setReturnValueSlot):
        (KJS::ScheduledAction::execute):
        (KJS::Window::timerFired):
        (KJS::Location::Location):
        (KJS::Location::getValueProperty):
        (KJS::Location::getOwnPropertySlot):
        (KJS::Location::put):
        (KJS::LocationProtoFuncReplace::callAsFunction): Use better variable names.
        (KJS::LocationProtoFuncAssign::callAsFunction): Ditto.
        (KJS::LocationProtoFuncToString::callAsFunction): Remove extraneous calls to
        allowsAccessFrom, cleanup the function a little.
        (KJS::PausedTimeouts::~PausedTimeouts):
        * bridge/WindowFeatures.h: Removed.
        * page/WindowFeatures.cpp: Added.
        (WebCore::isSeparator):
        (WebCore::WindowFeatures::WindowFeatures):
        (WebCore::WindowFeatures::setWindowFeature):
        (WebCore::WindowFeatures::boolFeature):
        (WebCore::WindowFeatures::floatFeature):
        * page/WindowFeatures.h: Copied from WebCore/bridge/WindowFeatures.h.
        (WebCore::WindowFeatures::WindowFeatures):

2007-12-10  Timothy Hatcher  <timothy@apple.com>

        Reviewed by Mark Rowe.

        <rdar://problem/5639463> Bundle versions on Tiger should be 4523.x not 523.x

        * Configurations/Version.xcconfig: Some Tiger versions of Xcode don't set MAC_OS_X_VERSION_MAJOR,
          so assume Tiger and use a 4 for the SYSTEM_VERSION_PREFIX.

2007-12-10  Alp Toker  <alp@atoker.com>

        Reviewed by Niko.

        Cairo implementation of GraphicsContext::setUseAntialiasing().

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

2007-12-10  Rob Buis  <buis@kde.org>

        Reviewed by Darin.

        http://bugs.webkit.org/show_bug.cgi?id=16182
        SVG should disable antialiasing for shape-rendering="crispEdges"

        Turn off anti-aliasing of shapes when shape-rendering="crispEdges".

        * platform/graphics/GraphicsContext.h:
        * platform/graphics/cairo/GraphicsContextCairo.cpp:
        (WebCore::GraphicsContext::setUseAntialiasing):
        * platform/graphics/cg/GraphicsContextCG.cpp:
        (WebCore::GraphicsContext::setUseAntialiasing):
        * platform/graphics/qt/GraphicsContextQt.cpp:
        (WebCore::GraphicsContext::setUseAntialiasing):
        * platform/graphics/wx/GraphicsContextWx.cpp:
        (WebCore::GraphicsContext::setUseAntialiasing):
        * rendering/RenderPath.cpp:
        (WebCore::RenderPath::paint):

2007-12-09  Rob Buis  <buis@kde.org>

        Reviewed by Niko.

        http://bugs.webkit.org/show_bug.cgi?id=16163
        SVG crash in Node::setChanged() on Debug builds only (trashed parent)

        Fix the crash by properly unregistering as client from SVGResource
        when deleting a styled svg node.

        * svg/SVGStyledElement.cpp:
        (WebCore::SVGStyledElement::~SVGStyledElement):

2007-12-10  Brady Eidson  <beidson@apple.com>

        Rubberstamped by John

        * storage/DatabaseTracker.cpp:
        (WebCore::DatabaseTracker::canEstablishDatabase): If the UI Delegate returns *exactly* the estimated size
          for the new quota, we should allow the database to be created

2007-12-10  David D. Kilzer  <ddkilzer@webkit.org>

        Bug 9683: Implement select.options.remove() method
        <http://bugs.webkit.org/show_bug.cgi?id=9683>

        Reviewed by Maciej.

        Implement select.options.remove() by calling select.remove()
        with the same arguments.  This is what MSIE 7 does, although its
        select.remove() method differs from WebKit's by throwing an
        exception when called with no arguments or with a negative
        integer argument.  Note that the DOM Level 1 documentation
        specifies that select.remove() does not throw an exception.

        Tests: fast/js/select-options-remove-gc.html
               fast/js/select-options-remove.html

        * bindings/js/JSHTMLOptionsCollectionCustom.cpp:
        (WebCore::JSHTMLOptionsCollection::remove): Added.
        * html/HTMLOptionsCollection.cpp:
        (WebCore::HTMLOptionsCollection::remove): Added.
        * html/HTMLOptionsCollection.h:
        * html/HTMLOptionsCollection.idl:

2007-12-09  Sam Weinig  <sam@webkit.org>

        Rubber stamped by Mark Rowe.

        * WebCore.xcodeproj/project.pbxproj: Add missing DerivedSources files.

2007-12-09  Oliver Hunt  <oliver@apple.com>

        Reviewed by Niko.

        Correction, 'z' and 'Z' are the only commands that cannot have an extended
        list of arguments.

        * svg/SVGParserUtilities.cpp:
        (WebCore::SVGPathParser::parseSVG):

2007-12-09  Oliver Hunt  <oliver@apple.com>

        Reviewed by Niko.

        Prevent unlimited iteration in the case of invalid path data.
        
        The only path commands that can leave numbers trailing the command processing
        are 'm' and 'M', in which trailing numbers are parsed as arguments to an
        implicit lineto command.  In any case we should just terminate as an invalid
        path.

        * svg/SVGParserUtilities.cpp:
        (WebCore::SVGPathParser::parseSVG):

2007-12-09  Luca Bruno  <lethalman88@gmail.com>

        Reviewed by Alp Toker.

        http://bugs.webkit.org/show_bug.cgi?id=15825
        [GTK] curl - slow dns causing hangs.

        Create a vector of jobs, to satisfy requests in the right order.
        Set a limit to the number of simultaneous connections.

        * platform/network/curl/ResourceHandleManager.cpp:
        (WebCore::maxRunningJobs): added
        (WebCore::ResourceHandleManager::ResourceHandleManager):
        (WebCore::ResourceHandleManager::removeFromCurl):
        (WebCore::ResourceHandleManager::startScheduledJobs):

        * platform/network/curl/ResourceHandleManager.h:
        (WebCore::ResourceHandleList): removed
        (WebCore::ResourceHandleManager::m_runningJobs): added
        (WebCore::ResourceHandleManager::m_resourceHandleListHead): removed
        (WebCore::ResourceHandleManager::m_resourceHandleList): added

2007-12-08  Sam Weinig  <sam@webkit.org>

        Reviewed by Oliver.

        Cleanup kjs_window.h/cpp.

        * bindings/js/kjs_window.cpp:
        (KJS::WindowPrivate::WindowPrivate):
        (KJS::DOMWindowTimer::DOMWindowTimer):
        (KJS::Window::Window):
        (KJS::Window::retrieveWindow):
        (KJS::Window::retrieveActive):
        (KJS::Window::retrieve):
        (KJS::Window::location):
        (KJS::Window::mark):
        (KJS::allowPopUp):
        (KJS::parseModalDialogFeatures):
        (KJS::floatFeature):
        (KJS::canShowModalDialog):
        (KJS::canShowModalDialogNow):
        (KJS::showModalDialog):
        (KJS::Window::getValueProperty):
        (KJS::Window::getOwnPropertySlot):
        (KJS::Window::globalExec):
        (KJS::Window::setListener):
        (KJS::Window::getListener):
        (KJS::Window::findOrCreateJSEventListener):
        (KJS::Window::findOrCreateJSUnprotectedEventListener):
        (KJS::Window::clearHelperObjectProperties):
        (KJS::Window::setCurrentEvent):
        (KJS::WindowProtoFuncAToB::callAsFunction):
        (KJS::WindowProtoFuncBToA::callAsFunction):
        (KJS::WindowProtoFuncOpen::callAsFunction):
        (KJS::WindowProtoFuncSetTimeout::callAsFunction):
        (KJS::WindowProtoFuncClearTimeout::callAsFunction):
        (KJS::WindowProtoFuncSetInterval::callAsFunction):
        (KJS::WindowProtoFuncAddEventListener::callAsFunction):
        (KJS::WindowProtoFuncRemoveEventListener::callAsFunction):
        (KJS::WindowProtoFuncShowModalDialog::callAsFunction):
        (KJS::WindowProtoFuncNotImplemented::callAsFunction):
        * bindings/js/kjs_window.h:
        (KJS::PausedTimeouts::PausedTimeouts):
        (KJS::PausedTimeouts::takeTimeouts):
        (KJS::ScheduledAction::ScheduledAction):

2007-12-08  Sam Weinig  <sam@webkit.org>

        Reviewed by Mitz.

        Move window scrolling, moving and resizing methods from KJS::Window
        to WebCore::DOMWindow so that there bindings can be autogenerated.

        Tests: fast/dom/Window/window-resize-and-move-arguments.html
               fast/dom/Window/window-scroll-arguments.html

        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/kjs_window.cpp:
        (KJS::Window::getValueProperty): Remove extraneous allowsAccessFrom check.
        (KJS::WindowProtoFuncOpen::callAsFunction):
        (KJS::WindowProtoFuncNotImplemented::callAsFunction): Remove extraneous allowsAccessFrom check.
        * bindings/js/kjs_window.h:
        * bindings/scripts/CodeGeneratorJS.pm: Add new extended attribute
        to ensure that the no less than the declared number of attributes
        is allowed.
        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::adjustWindowRect): Moved from kjs_window.
        (WebCore::DOMWindow::scrollBy):
        (WebCore::DOMWindow::scrollTo):
        (WebCore::DOMWindow::moveBy):
        (WebCore::DOMWindow::moveTo):
        (WebCore::DOMWindow::resizeBy):
        (WebCore::DOMWindow::resizeTo):
        * page/DOMWindow.h:
        (WebCore::DOMWindow::scroll):
        * page/DOMWindow.idl:

2007-12-08  Kevin Ollivier  <kevino@theolliviers.com>

        Reviewed by Alp Toker.

        http://bugs.webkit.org/show_bug.cgi?id=14651
        [CURL] didReceiveResponse() only called for HTTP loads

        http://bugs.webkit.org/show_bug.cgi?id=14583
        [GDK] file:// relative CSS include URLs handled incorrectly

        Make sure CURL sets the ResourceResponse URL and calls
        didReceiveResponse for local files too. 

        * platform/network/curl/ResourceHandleManager.cpp:
        (WebCore::writeCallback):

2007-12-08  Oliver Hunt  <oliver@apple.com>

        Reviewed by Sam W.

        Split the ENABLE_SVG_EXPERIMENTAL_FEATURES flag into separate flags.
        
        Fixes <rdar://problem/5620249> Must disable SVG animation
        <rdar://problem/5612772> Disable SVG filters on Mac to match Windows behavior
        
        In order to allow finer grained control over the set of SVG features
        this patch splits ENABLE_SVG_EXPERIMENTAL_FEATURES into the following
        distinct flags:
        ENABLE_SVG_ANIMATION
        ENABLE_SVG_FILTERS
        ENABLE_SVG_FONTS
        ENABLE_SVG_AS_IMAGE
        ENABLE_SVG_USE
        
        by default only ENABLE_SVG_AS_IMAGE and ENABLE_SVG_USE are set.

        * Configurations/WebCore.xcconfig:
        * DerivedSources.make:
          Handle the increased number of build flags that may be necessary
          
        * WebCore.SVG.Animation.exp: Added.
        * WebCore.SVG.Filters.exp: Added.
        * WebCore.SVG.exp:
          We now may not need the animation or filter exports so 
          these need to be separate.
          
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.vcproj/build-generated-files.sh:
          Update for new flags
          
        Remainder of changes are to swap ENABLE(SVG_EXPERIMENTAL_FEATURES) 
        with the appropriate specific feature flag.  
        * bindings/js/JSSVGElementWrapperFactory.cpp:
        (WebCore::createJSSVGWrapper):
        * bindings/objc/DOM.mm:
        (WebCore::createElementClassMap):
        * dom/make_names.pl:
        * loader/CachedImage.cpp:
        (WebCore::CachedImage::createImage):
        * page/DOMWindow.idl:
        * rendering/RenderPath.cpp:
        (WebCore::RenderPath::absoluteClippedOverflowRect):
        * rendering/RenderSVGContainer.cpp:
        (WebCore::RenderSVGContainer::absoluteClippedOverflowRect):
        * rendering/RenderSVGImage.cpp:
        (WebCore::RenderSVGImage::absoluteClippedOverflowRect):
        * rendering/RenderSVGRoot.cpp:
        (WebCore::RenderSVGRoot::paint):
        (WebCore::RenderSVGRoot::absoluteClippedOverflowRect):
        * rendering/RenderSVGText.cpp:
        (WebCore::RenderSVGText::absoluteClippedOverflowRect):
        * rendering/SVGRenderSupport.cpp:
        (WebCore::prepareToRenderSVGContent):
        (WebCore::finishRenderSVGContent):
        * svg/SVGAnimateElement.cpp:
        * svg/SVGAnimateElement.h:
        * svg/SVGAnimateElement.idl:
        * svg/SVGAnimateMotionElement.cpp:
        * svg/SVGAnimateMotionElement.h:
        * svg/SVGAnimateTransformElement.cpp:
        * svg/SVGAnimateTransformElement.h:
        * svg/SVGAnimateTransformElement.idl:
        * svg/SVGComponentTransferFunctionElement.cpp:
        * svg/SVGComponentTransferFunctionElement.h:
        * svg/SVGComponentTransferFunctionElement.idl:
        * svg/SVGDocumentExtensions.cpp:
        (WebCore::SVGDocumentExtensions::startAnimations):
        * svg/SVGFEBlendElement.cpp:
        * svg/SVGFEBlendElement.h:
        * svg/SVGFEBlendElement.idl:
        * svg/SVGFEColorMatrixElement.cpp:
        * svg/SVGFEColorMatrixElement.h:
        * svg/SVGFEColorMatrixElement.idl:
        * svg/SVGFEComponentTransferElement.cpp:
        * svg/SVGFEComponentTransferElement.h:
        * svg/SVGFEComponentTransferElement.idl:
        * svg/SVGFECompositeElement.cpp:
        * svg/SVGFECompositeElement.h:
        * svg/SVGFECompositeElement.idl:
        * svg/SVGFEDiffuseLightingElement.cpp:
        * svg/SVGFEDiffuseLightingElement.h:
        * svg/SVGFEDiffuseLightingElement.idl:
        * svg/SVGFEDisplacementMapElement.cpp:
        * svg/SVGFEDisplacementMapElement.h:
        * svg/SVGFEDisplacementMapElement.idl:
        * svg/SVGFEDistantLightElement.cpp:
        * svg/SVGFEDistantLightElement.h:
        * svg/SVGFEDistantLightElement.idl:
        * svg/SVGFEFloodElement.cpp:
        * svg/SVGFEFloodElement.h:
        * svg/SVGFEFloodElement.idl:
        * svg/SVGFEFuncAElement.cpp:
        * svg/SVGFEFuncAElement.h:
        * svg/SVGFEFuncAElement.idl:
        * svg/SVGFEFuncBElement.cpp:
        * svg/SVGFEFuncBElement.h:
        * svg/SVGFEFuncBElement.idl:
        * svg/SVGFEFuncGElement.cpp:
        * svg/SVGFEFuncGElement.h:
        * svg/SVGFEFuncGElement.idl:
        * svg/SVGFEFuncRElement.cpp:
        * svg/SVGFEFuncRElement.h:
        * svg/SVGFEFuncRElement.idl:
        * svg/SVGFEGaussianBlurElement.cpp:
        * svg/SVGFEGaussianBlurElement.h:
        * svg/SVGFEGaussianBlurElement.idl:
        * svg/SVGFEImageElement.cpp:
        * svg/SVGFEImageElement.h:
        * svg/SVGFEImageElement.idl:
        * svg/SVGFELightElement.cpp:
        * svg/SVGFELightElement.h:
        * svg/SVGFEMergeElement.cpp:
        * svg/SVGFEMergeElement.h:
        * svg/SVGFEMergeElement.idl:
        * svg/SVGFEMergeNodeElement.cpp:
        * svg/SVGFEMergeNodeElement.h:
        * svg/SVGFEMergeNodeElement.idl:
        * svg/SVGFEOffsetElement.cpp:
        * svg/SVGFEOffsetElement.h:
        * svg/SVGFEOffsetElement.idl:
        * svg/SVGFEPointLightElement.cpp:
        * svg/SVGFEPointLightElement.h:
        * svg/SVGFEPointLightElement.idl:
        * svg/SVGFESpecularLightingElement.cpp:
        * svg/SVGFESpecularLightingElement.h:
        * svg/SVGFESpecularLightingElement.idl:
        * svg/SVGFESpotLightElement.cpp:
        * svg/SVGFESpotLightElement.h:
        * svg/SVGFESpotLightElement.idl:
        * svg/SVGFETileElement.cpp:
        * svg/SVGFETileElement.h:
        * svg/SVGFETileElement.idl:
        * svg/SVGFETurbulenceElement.cpp:
        * svg/SVGFETurbulenceElement.h:
        * svg/SVGFETurbulenceElement.idl:
        * svg/SVGFilterElement.cpp:
        * svg/SVGFilterElement.h:
        * svg/SVGFilterElement.idl:
        * svg/SVGFilterPrimitiveStandardAttributes.cpp:
        * svg/SVGTimer.cpp:
        (WebCore::SVGTimer::animationsByElement):
        * svg/SVGUseElement.cpp:
        (WebCore::SVGUseElement::buildPendingResource):
        (WebCore::SVGUseElement::associateInstancesWithShadowTreeElements):
        * svg/SVGUseElement.h:
        * svg/TimeScheduler.cpp:
        (WebCore::TimeScheduler::connectIntervalTimer):
        (WebCore::TimeScheduler::disconnectIntervalTimer):
        * svg/graphics/SVGResourceFilter.cpp:
        * svg/graphics/SVGResourceFilter.h:
        * svg/graphics/cg/SVGResourceFilterCg.cpp:
        * svg/graphics/cg/SVGResourceFilterCg.mm:
        * svg/graphics/filters/SVGDistantLightSource.h:
        * svg/graphics/filters/SVGFEBlend.cpp:
        * svg/graphics/filters/SVGFEBlend.h:
        * svg/graphics/filters/SVGFEColorMatrix.cpp:
        * svg/graphics/filters/SVGFEColorMatrix.h:
        * svg/graphics/filters/SVGFEComponentTransfer.cpp:
        * svg/graphics/filters/SVGFEComponentTransfer.h:
        * svg/graphics/filters/SVGFEComposite.cpp:
        * svg/graphics/filters/SVGFEComposite.h:
        * svg/graphics/filters/SVGFEConvolveMatrix.cpp:
        * svg/graphics/filters/SVGFEConvolveMatrix.h:
        * svg/graphics/filters/SVGFEDiffuseLighting.cpp:
        * svg/graphics/filters/SVGFEDiffuseLighting.h:
        * svg/graphics/filters/SVGFEDisplacementMap.cpp:
        * svg/graphics/filters/SVGFEDisplacementMap.h:
        * svg/graphics/filters/SVGFEFlood.cpp:
        * svg/graphics/filters/SVGFEFlood.h:
        * svg/graphics/filters/SVGFEGaussianBlur.cpp:
        * svg/graphics/filters/SVGFEGaussianBlur.h:
        * svg/graphics/filters/SVGFEImage.cpp:
        * svg/graphics/filters/SVGFEImage.h:
        * svg/graphics/filters/SVGFEMerge.cpp:
        * svg/graphics/filters/SVGFEMerge.h:
        * svg/graphics/filters/SVGFEMorphology.cpp:
        * svg/graphics/filters/SVGFEMorphology.h:
        * svg/graphics/filters/SVGFEOffset.cpp:
        * svg/graphics/filters/SVGFEOffset.h:
        * svg/graphics/filters/SVGFESpecularLighting.cpp:
        * svg/graphics/filters/SVGFESpecularLighting.h:
        * svg/graphics/filters/SVGFETile.h:
        * svg/graphics/filters/SVGFETurbulence.cpp:
        * svg/graphics/filters/SVGFETurbulence.h:
        * svg/graphics/filters/SVGFilterEffect.cpp:
        * svg/graphics/filters/SVGFilterEffect.h:
        * svg/graphics/filters/SVGLightSource.cpp:
        * svg/graphics/filters/SVGLightSource.h:
        * svg/graphics/filters/SVGPointLightSource.h:
        * svg/graphics/filters/SVGSpotLightSource.h:
        * svg/graphics/filters/cg/SVGFEBlendCg.mm:
        * svg/graphics/filters/cg/SVGFEColorMatrixCg.mm:
        * svg/graphics/filters/cg/SVGFEComponentTransferCg.mm:
        * svg/graphics/filters/cg/SVGFECompositeCg.mm:
        * svg/graphics/filters/cg/SVGFEDiffuseLightingCg.mm:
        * svg/graphics/filters/cg/SVGFEDisplacementMapCg.mm:
        * svg/graphics/filters/cg/SVGFEFloodCg.mm:
        * svg/graphics/filters/cg/SVGFEGaussianBlurCg.mm:
        * svg/graphics/filters/cg/SVGFEHelpersCg.h:
        * svg/graphics/filters/cg/SVGFEHelpersCg.mm:
        * svg/graphics/filters/cg/SVGFEImageCg.mm:
        * svg/graphics/filters/cg/SVGFEMergeCg.mm:
        * svg/graphics/filters/cg/SVGFEOffsetCg.mm:
        * svg/graphics/filters/cg/SVGFESpecularLightingCg.mm:
        * svg/graphics/filters/cg/SVGFETileCg.mm:
        * svg/graphics/filters/cg/SVGFilterEffectCg.mm:
        * svg/graphics/filters/cg/WKArithmeticFilter.h:
        * svg/graphics/filters/cg/WKArithmeticFilter.m:
        * svg/graphics/filters/cg/WKComponentMergeFilter.h:
        * svg/graphics/filters/cg/WKComponentMergeFilter.m:
        * svg/graphics/filters/cg/WKDiffuseLightingFilter.h:
        * svg/graphics/filters/cg/WKDiffuseLightingFilter.m:
        * svg/graphics/filters/cg/WKDiscreteTransferFilter.h:
        * svg/graphics/filters/cg/WKDiscreteTransferFilter.m:
        * svg/graphics/filters/cg/WKDisplacementMapFilter.h:
        * svg/graphics/filters/cg/WKDisplacementMapFilter.m:
        * svg/graphics/filters/cg/WKDistantLightFilter.h:
        * svg/graphics/filters/cg/WKDistantLightFilter.m:
        * svg/graphics/filters/cg/WKGammaTransferFilter.h:
        * svg/graphics/filters/cg/WKGammaTransferFilter.m:
        * svg/graphics/filters/cg/WKIdentityTransferFilter.h:
        * svg/graphics/filters/cg/WKIdentityTransferFilter.m:
        * svg/graphics/filters/cg/WKLinearTransferFilter.h:
        * svg/graphics/filters/cg/WKLinearTransferFilter.m:
        * svg/graphics/filters/cg/WKNormalMapFilter.h:
        * svg/graphics/filters/cg/WKNormalMapFilter.m:
        * svg/graphics/filters/cg/WKPointLightFilter.h:
        * svg/graphics/filters/cg/WKPointLightFilter.m:
        * svg/graphics/filters/cg/WKSpecularLightingFilter.h:
        * svg/graphics/filters/cg/WKSpecularLightingFilter.m:
        * svg/graphics/filters/cg/WKSpotLightFilter.h:
        * svg/graphics/filters/cg/WKSpotLightFilter.m:
        * svg/graphics/filters/cg/WKTableTransferFilter.h:
        * svg/graphics/filters/cg/WKTableTransferFilter.m:
        * svg/graphics/mac/SVGResourceFilterPlatformDataMac.h:
        * svg/graphics/mac/SVGResourceFilterPlatformDataMac.mm:
        * svg/svgtags.in:

2007-12-08  Dan Bernstein  <mitz@apple.com>

        Reviewed by Adele Peterson.

        - fix two bugs in parsing of stylesheets in <style> elements created by
          the parser:
          1. each such stylesheet is parsed twice, once when the text node is
             added and again when the </style> tag is reached
          2. re-inserting such a <style> element into the document fails to
             re-parse and apply its stylesheet.

        Test for bug #2: fast/dom/HTMLStyleElement/insert-parser-generated.html

        * html/HTMLStyleElement.cpp:
        (WebCore::HTMLStyleElement::finishedParsing):
        * svg/SVGStyleElement.cpp:
        (WebCore::SVGStyleElement::finishedParsing):

2007-12-07  Sam Weinig  <sam@webkit.org>

        Reviewed by Darin.

        - Removes the faulty isSafeScript implementation that was only
          used for plugins.
        - Renames isSafeScript to allowsAccessFrom.

        * bindings/js/JSDOMWindowCustom.cpp:
        (WebCore::JSDOMWindow::customGetOwnPropertySlot):
        (WebCore::JSDOMWindow::customPut):
        * bindings/js/kjs_dom.cpp:
        (WebCore::checkNodeSecurity):
        * bindings/js/kjs_window.cpp:
        (KJS::createWindow):
        (KJS::Window::getValueProperty):
        (KJS::Window::namedItemGetter):
        (KJS::Window::getOwnPropertySlot):
        (KJS::Window::put):
        (KJS::Window::allowsAccessFrom):
        (KJS::Window::setListener):
        (KJS::Window::getListener):
        (KJS::WindowProtoFuncOpen::callAsFunction):
        (KJS::WindowProtoFuncSetTimeout::callAsFunction):
        (KJS::WindowProtoFuncClearTimeout::callAsFunction):
        (KJS::WindowProtoFuncSetInterval::callAsFunction):
        (KJS::WindowProtoFuncAddEventListener::callAsFunction):
        (KJS::WindowProtoFuncRemoveEventListener::callAsFunction):
        (KJS::WindowProtoFuncNotImplemented::callAsFunction):
        (KJS::Location::getOwnPropertySlot):
        (KJS::Location::put):
        (KJS::LocationProtoFuncReplace::callAsFunction):
        (KJS::LocationProtoFuncReload::callAsFunction):
        (KJS::LocationProtoFuncAssign::callAsFunction):
        (KJS::LocationProtoFuncToString::callAsFunction):
        * bindings/js/kjs_window.h:
        (KJS::Window::allowsAccessFrom):
        * bindings/objc/WebScriptObject.mm:
        (-[WebScriptObject _isSafeScript]): Reverse caller/argument of allowsAccessFrom to match
        the new call.
        * bindings/scripts/CodeGeneratorJS.pm:

2007-12-08  Rob Buis  <buis@kde.org>

        Reviewed by Darin.

        http://bugs.webkit.org/show_bug.cgi?id=15464
        SVGLengthList allows bad values

        Be more strict with svg lengths without a unit identifier.

        Test: svg/custom/invalid-lengthlist.svg

        * svg/SVGLength.cpp:
        (WebCore::SVGLength::setValueAsString):

2007-12-08  Rob Buis  <buis@kde.org>

        Mac Tiger build fix.

        Use the wtf prefix when including MathExtras.h.

        * rendering/RenderMedia.cpp:

2007-12-08  Alp Toker  <alp@atoker.com>

        GTK+ build fix (for ENABLE_VIDEO builds):

        Include MathExtras.h to get isfinite().

        * rendering/RenderMedia.cpp:

2007-12-08  Rob Buis  <buis@kde.org>

        Reviewed by Darin.

        http://bugs.webkit.org/show_bug.cgi?id=15528
        svg_dynamic_cast should be removed

        Replace svg_dynamic_cast with a combination of
        isSVGElement and static_cast.

        * rendering/SVGRootInlineBox.cpp:
        (WebCore::SVGRootInlineBox::buildLayoutInformation):
        (WebCore::SVGRootInlineBox::buildTextChunks):
        * svg/SVGAnimationElement.cpp:
        (WebCore::SVGAnimationElement::targetElement):
        * svg/SVGElement.h:
        * svg/SVGElementInstance.cpp:
        (WebCore::SVGElementInstance::updateInstance):
        * svg/SVGFilterElement.cpp:
        (WebCore::SVGFilterElement::canvasResource):
        * svg/SVGGradientElement.cpp:
        (WebCore::SVGGradientElement::buildStops):
        * svg/SVGLocatable.cpp:
        (WebCore::SVGLocatable::getTransformToElement):
        * svg/SVGMaskElement.cpp:
        (WebCore::SVGMaskElement::drawMaskerContent):
        * svg/SVGSwitchElement.cpp:
        (WebCore::SVGSwitchElement::childShouldCreateRenderer):
        * svg/SVGUseElement.cpp:
        (WebCore::SVGUseElement::insertedIntoDocument):
        (WebCore::SVGUseElement::buildPendingResource):
        (WebCore::SVGUseElement::buildInstanceTree):
        (WebCore::SVGUseElement::handleDeepUseReferencing):
        (WebCore::SVGUseElement::buildShadowTree):
        (WebCore::SVGUseElement::expandUseElementsInShadowTree):
        (WebCore::SVGUseElement::associateInstancesWithShadowTreeElements):
        * svg/graphics/SVGResource.cpp:
        (WebCore::getResourceById):

2007-12-07  Antti Koivisto  <antti@apple.com>

        Reviewed by Adele.
        
        Partial fix for <rdar://problem/5633400>
        Transformed <video>, <img>, <embed> are not clipped correctly until a repaint is forced
        
        Fix video painting when transform is applied.

        Test: media/video-transformed.html

        * platform/graphics/mac/MediaPlayerPrivateQTKit.mm:
        (WebCore::MediaPlayerPrivate::paint):

2007-12-07  Dan Bernstein  <mitz@apple.com>

        Reviewed by Sam Weinig.

        - fix http://bugs.webkit.org/show_bug.cgi?id=16348
          @font-face does not affect the default style

        Test: fast/css/font-face-default-font.html

        * dom/Document.cpp:
        (WebCore::Document::recalcStyle): Pass our font selector to
        Font::update() if we already have one.

2007-12-07  Darin Adler  <darin@apple.com>

        - fix Windows build

        * bridge/win/GlobalHistoryWin.cpp:
        (WebCore::historyContains): Missed a rename.

2007-12-07  Brady Eidson  <beidson@apple.com>

        Reviewed by Anders and Darin

        When a statement bumps up against the quota and the UI Delegate grants more space, we need to
        actually set the new maximum size on the SQLiteDatabase (in addition to storing the new max quota
        in the DatabaseTracker, which was already done)

        * storage/SQLTransaction.cpp:
        (WebCore::SQLTransaction::runStatements): If a statement is being retried, set the maximum size on
          the SQLiteDatabase to the new maximum size

2007-12-07  Darin Adler  <darin@apple.com>

        - fix Tiger build

        * platform/graphics/mac/MediaPlayerPrivateQTKit.mm: Tiger didn't even have
        QTKIT_VERSION_MAX_ALLOWED, so add logic to work without that.

2007-12-07  Darin Adler  <darin@apple.com>

        - fix 64-bit build, hopefully without breaking Tiger build

        * platform/graphics/mac/MediaPlayerPrivateQTKit.mm:
        (WebCore::MediaPlayerPrivate::updateStates):
        Don't use Movies.h constants that are nonexistent in 64-bit.
        Define the new QTMovie.h constants, though, when using an older QTKit.

2007-12-07  Brady Eidson  <beidson@apple.com>

        Reviewed by Anders

        Fix <rdar://problem/5636115> - Prompted for quota increase to create database when it already existed

        * storage/DatabaseTracker.cpp:
        (WebCore::DatabaseTracker::canEstablishDatabase): Check hasEntryForDatabase before doing any prompting
        (WebCore::DatabaseTracker::hasEntryForDatabase): Check and see if this database already exists
        * storage/DatabaseTracker.h:

2007-12-07  Darin Adler  <darin@apple.com>

        Reviewed by Mitz.

        - http://bugs.webkit.org/show_bug.cgi?id=15981
          speed up visited-link code a bit

        * bridge/GlobalHistory.h: Change historyContains to take a character pointer plus length
        instead of requiring a DeprecatedString.

        * bridge/mac/GlobalHistoryMac.mm: (WebCore::historyContains): Updated for above change.
        Also removes pointless "fast Latin-1" case that was never used.
        * bridge/win/GlobalHistoryWin.cpp: (WebCore::historyContains): Ditto.
        * platform/gtk/TemporaryLinkStubs.cpp: (WebCore::historyContains): Ditto.
        * platform/wx/TemporaryLinkStubs.cpp: (WebCore::historyContains): Ditto.

        * css/CSSStyleSelector.cpp:
        (WebCore::findHash): Added. Helper for cleanpath.
        (WebCore::findSlashDotDotSlash): Ditto.
        (WebCore::findSlashSlash): Ditto.
        (WebCore::findSlashDotSlash): Ditto.
        (WebCore::cleanpath): Changed to use fast helper functions instead of slower general-purpose
        DeprecatedString find function.
        (WebCore::containsColonSlashSlash): Added. Helper for checkPseudoState.
        (WebCore::checkPseudoState): Got rid of reference count churn by using an AtomicString*
        instead of an AtomicString for the attribute value. Changed to use fast helper function
        instead of slower DeprecatedString::contains function, and also made the fast case not
        bother allocating a DeprecatedConstString.

        - unrelated tiny cleanup

        * platform/graphics/svg/cg/SVGPaintServerGradientCg.cpp:
        (WebCore::releaseCachedStops): Use static_cast instead of reinterpret_cast.
        (WebCore::cgGradientCallback): Ditto.

2007-12-07  Darin Adler  <darin@apple.com>

        Fix build on Tiger (Mark Rowe told me how).

        * platform/graphics/mac/MediaPlayerPrivateQTKit.mm:
        Include <objc/objc-runtime.h>, which existed back on Tiger,
        rather than <objc/runtime.h>, which did not.

2007-12-07  Geoffrey Garen  <ggaren@apple.com>

        Build fix: rolling out last build fix to change #include path.

        * platform/graphics/mac/MediaPlayerPrivateQTKit.mm:

2007-12-07  Steve Falkenburg  <sfalken@apple.com>

        Re-named our B&I flag from BUILDBOT to PRODUCTION.

        Reviewed by Sam Weinig.

        * WebCore.vcproj/WebCore.make:

2007-12-07  Geoffrey Garen  <ggaren@apple.com>

        Build fix: corrected #include path.

        * platform/graphics/mac/MediaPlayerPrivateQTKit.mm:

2007-12-07  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Sam Weinig.

        Added some namespace qualifications and a forwarding header, now that
        KJS::Node is sometimes #included in WebCore by JavaScriptCore headers.

        * ForwardingHeaders/wtf/ListRefPtr.h: Added.
        * bindings/js/JSXSLTProcessor.cpp:
        (KJS::JSXSLTProcessorPrototypeFunctionTransformToFragment::callAsFunction):
        * bindings/js/kjs_binding.cpp:
        (KJS::ScriptInterpreter::getDOMNodeForDocument):
        (KJS::ScriptInterpreter::forgetDOMNodeForDocument):
        (KJS::ScriptInterpreter::putDOMNodeForDocument):
        (KJS::ScriptInterpreter::markDOMNodesForDocument):
        (KJS::ScriptInterpreter::updateDOMNodeDocument):

2007-12-07  Adam Roben  <aroben@apple.com>

        Add SoftLinking.h for Windows and use it in a few places

        Reviewed by Oliver.

        * WebCore.vcproj/WebCore.vcproj: Added new file to project.
        * platform/win/PlatformScrollBarSafari.cpp: Use SoftLinking.h.
        (WebCore::PlatformScrollbar::PlatformScrollbar): Removed manual
        soft-linking calls.
        (WebCore::PlatformScrollbar::paintButton): Check for the presence of
        the SafariTheme library now that we can't check for the presence of
        paintThemePart directly.
        (WebCore::PlatformScrollbar::paintTrack): Ditto.
        (WebCore::PlatformScrollbar::paintThumb): Ditto.
        * platform/win/SoftLinking.h: Copied from WebCore/platform/mac/SoftLinking.h.
        * rendering/RenderThemeSafari.cpp: Same basic changes as to
        PlatformScrollBarSafari.cpp.
        (WebCore::RenderThemeSafari::RenderThemeSafari):
        (WebCore::RenderThemeSafari::isControlStyled):
        (WebCore::RenderThemeSafari::paintCapsLockIndicator):
        * rendering/RenderThemeSafari.h: Removed m_themeDLL member.

2007-12-07  Darin Adler  <darin@apple.com>

        Reviewed by Adele.

        - fix <rdar://problem/5608795> CrashTracer: 481 crashes in Safari
          at WebCore::HTMLSelectElement::saveState const + 152

        Test: fast/forms/select-set-inner.html

        * dom/ContainerNode.cpp:
        (WebCore::ContainerNode::removeChildren): Added a return value, as with other
        calls that change children, so we can optimize for the case where it does nothing.
        (WebCore::ContainerNode::cloneChildNodes): Changed parameter type to ContainerNode.
        * dom/ContainerNode.h: See above.

        * html/HTMLOptGroupElement.cpp:
        (WebCore::HTMLOptGroupElement::removeChildren): Override removeChildren and call
        recalcSelectOptions in that case.
        (WebCore::HTMLOptGroupElement::childrenChanged): Override childrenChanged instead of
        addChild, for consistency with HTMLSelectElement; no need to override both.
        (WebCore::HTMLOptGroupElement::groupLabelText): Made const.
        * html/HTMLOptGroupElement.h: See above.

        * html/HTMLSelectElement.cpp: Don't override addChild any more, because we already
        override childrenChanged, and addChild calls that.
        (WebCore::HTMLSelectElement::removeChildren): Override removeChildren and call
        recalcSelectOptions in that case.
        (WebCore::HTMLSelectElement::recalcListItems): Tightened up the code a little bit
        by using a for loop and traverseNextSibling. Also added some new comments and
        removed some obsolete ones.
        (WebCore::HTMLSelectElement::checkListItems): Added. Debug-only check to make
        sure we don't have a stale list items vector.
        * html/HTMLSelectElement.h: Changed listItems() to invoke checkListItems().
        This will help us catch cases where we have too few calls to setRecalcListItems.

2007-12-07  Dan Bernstein  <mitz@apple.com>

        Reviewed by Darin Adler.

        - WebCore part of fixing <rdar://problem/5499918> REGRESSION: insertion point in input field with custom border cuts holes in focus ring interior edges

        Test: fast/repaint/focus-ring.html

        * editing/SelectionController.cpp:
        (WebCore::SelectionController::caretRepaintRect): Changed to return just
        the caret rect without any padding.
        (WebCore::SelectionController::recomputeCaretRect): Changed to repaint
        just the caret rect without any padding.
        * platform/graphics/GraphicsContext.h: Removed setFocusRingClip() and
        clearFocusRingClip().
        * platform/graphics/cairo/GraphicsContextCairo.cpp: Ditto.
        * platform/graphics/cg/GraphicsContextCG.cpp: Ditto.
        * platform/graphics/cg/GraphicsContextPlatformPrivate.h: Removed
        m_focusRingClip member.
        * platform/graphics/mac/GraphicsContextMac.mm:
        (WebCore::GraphicsContext::drawFocusRing): Changed to call
        wkDrawFocusRing() once without setting up additional clip. On Leopard,
        wkDrawFocusRing() respects the context clip now. On Tiger, a
        transparency layer is used to apply clipping to the focus ring.
        * platform/graphics/qt/GraphicsContextQt.cpp: Removed focus ring clip
        methods and member.
        * platform/graphics/wx/GraphicsContextWx.cpp: Ditto.
        * platform/mac/WebCoreSystemInterface.h: Removed the clipRect argument
        to wkDrawFocusRing().
        * platform/mac/WebCoreSystemInterface.mm: Ditto.
        * rendering/RenderLayer.cpp:
        (WebCore::setClip): Removed call to set the focus ring clip.
        (WebCore::restoreClip): Removed call to reset the focus ring clip.

2007-12-07  Darin Adler  <darin@apple.com>

        Reviewed by Antti Koivisto and Kevin Decker.

        - fix <rdar://problem/5601586> QtKit should be dynamically loaded upon need, not linked at startup

        Also did a lot of small tweaks to MediaPlayerPrivateQTKit.

        * WebCore.xcodeproj/project.pbxproj: Don't link to QTKit.

        * platform/graphics/mac/MediaPlayerPrivateQTKit.h: Omit unneeded includes and declarations.
        Made a lot more functions const. Made a few more members private and a couple inline.
        * platform/graphics/mac/MediaPlayerPrivateQTKit.mm: Added soft linking machinery for all the
        things we currently use in QTKit. It's a little more awkward for classes and other data objects
        than it is for functions, but still relatively straightforward, with no changes needed to the
        client code. Added using namespace directives. Made a cuePointTimerInterval constant and put
        it at the top of the file. Use 0 consistently instead of sometimes 0 and sometimes 0.0f.
        (WebCore::MediaPlayerPrivate::MediaPlayerPrivate): Removed unneeded initialization of RetainPtr
        members to nil.
        (WebCore::MediaPlayerPrivate::createQTMovie): Use adoptNS instead of autorelease.
        (WebCore::MediaPlayerPrivate::createQTMovieView): Ditto. Also use -[NSColor clearColor].
        (WebCore::MediaPlayerPrivate::createQTTime): Remove an unneeded type cast that had no effect.
        Changed to use long instead of int because that's the type for a QTTime time scale anyway.
        (WebCore::MediaPlayerPrivate::duration): Use a static_cast instead of a C-style cast.
        (WebCore::MediaPlayerPrivate::currentTime): Ditto. Also merged into a single expression.
        (WebCore::MediaPlayerPrivate::cuePointTimerFired): Added code to make a copy of the cue
        points set to avoid a potential problem with a set being modified as we iterate it.
        (WebCore::MediaPlayerPrivate::bytesLoaded): Removed unneeded null check of m_qtMovie.
        (WebCore::MediaPlayerPrivate::updateStates): Instead of comments explaining the numeric
        values, used the constants from the headers directly.
        (WebCore::MediaPlayerPrivate::getSupportedTypes): Instead of (QTMovieFileTypeOptions)0,
        pass the named constant with value 0, QTIncludeCommonTypes. Skipped the intermediate type
        of NSString to remove one cast. Replaced C-style cast with reinterpret_cast (arguably
        no better). Used RetainPtr instead of explicit CFRelease calls.

        * platform/mac/SoftLinking.h: Added macros to do soft linking for classes and for pointers.
        It's not quite as automatic as the soft linking we can do for functions, since these define
        functions to get the values, so you need to define macros to make what look like variable
        accesses turn into function calls. See MediaPlayerPrivateQTKit for the details.

        * html/HTMLMediaElement.h:
        * html/TimeRanges.h:
        * html/VoidCallback.h:
        * platform/graphics/MediaPlayer.h:
        Use angle brackets for wtf includes. Omit unneeded includes.

2007-12-07  Dan Bernstein  <mitz@apple.com>

        Reviewed by Darin Adler.

        - fix http://bugs.webkit.org/show_bug.cgi?id=16334
          <rdar://problem/5634923> REGRESSION (r28299): Homepage of any DotMac Web Gallery won't load completely

        Test: fast/dynamic/subtree-no-common-root-static-y.html

        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::markContainingBlocksForLayout): Changed the call
        to setChildNeedsLayout() to not mark containing blocks and added a
        separate call to markContainingBlocksForLayout() that will not schedule
        a layout if we are already in the middle of scheduleRelayoutOfSubtree().

2007-12-07  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Darin.

        http://bugs.webkit.org/show_bug.cgi?id=16325
        <rdar://problem/5632997> REGRESSION: www.xerox.ru doesn't work
        
        Test: http/tests/misc/empty-cookie.html

        * platform/mac/CookieJar.mm:
        (WebCore::setCookies): Don't store empty cookies.
        (WebCore::cookies): Filter out empty cookies if we have them, as they could have been set
        with an earlier version of Leopard!

2007-12-06  Ada Chan  <adachan@apple.com>

        Fixed the if statement (ERROR_SUCCESS is 0 and we were actually
        returning true when there's an error).

        Reviewed by Steve.

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

2007-12-06  Darin Adler  <darin@apple.com>

        - fix broken regression test

        * bindings/js/kjs_binding.cpp:
        (KJS::setDOMException): Oops, this was just supposed to be PERMISSION_DENIED.

2007-12-06  Darin Adler  <darin@apple.com>

        Reviewed by Sam Weinig.

        - fix http://bugs.webkit.org/show_bug.cgi?id=16332
          ObjC DOM exception object descriptions should include the exception name

        * WebCore.pro: Added ExceptionCode.cpp.
        * WebCore.vcproj/WebCore.vcproj: Added ExceptionCode.cpp.
        * WebCore.xcodeproj/project.pbxproj: Added ExceptionCode.cpp.
        * WebCoreSources.bkl: Added ExceptionCode.cpp.

        * bindings/js/kjs_binding.cpp: (KJS::setDOMException): Moved the code to decompose an
        ExceptionCode into ExceptionCode.h/cpp -- getExceptionCodeDescription. Also removed
        the many unneeded includes that were here. Had to keep one special case here, for
        SECURITY_ERR.

        * bindings/objc/ExceptionHandlers.mm: (WebCore::raiseDOMException): Changed to use the
        new getExceptionCodeDescription function so that this shares the exception name
        information that was previously only available to JavaScript.

        * dom/ExceptionCode.cpp: Copied from bindings/js/kjs_binding.cpp.
        (WebCore::getExceptionCodeDescription): Added some assertions, and made the function
        handle exception names in a slightly more robust way that is not subject to integer
        overflow. (Not a real world issue since we should never receive a bad exception code.)

        * dom/ExceptionCode.h: Added the ExceptionCodeDescription struct and the
        getExceptionCodeDescription function.

        * svg/SVGException.h: Added a missing #include and got rid of some comments. Some of
        the comments were mildly helpful, but others were incorrect. This now matches the other
        exception-related headers such as RangeException.h.

2007-12-06  Brady Eidson  <beidson@apple.com>

        Reviewed by Darin

        Fixed a glaring bug that would prevent a statement from getting run a second time

        * storage/SQLStatement.cpp:
        (WebCore::SQLStatement::execute): Clear failure due to quota *before* we check the error
          and return early
        (WebCore::SQLStatement::clearFailureDueToQuota): Only clear the error if it was a quota error

2007-12-06  Timothy Hatcher  <timothy@apple.com>

        Reviewed by Oliver Hunt.

        Use keydown instead of keypress so keyIdentifier can be used.

        * page/inspector/ConsolePanel.js: Use keydown instead of keypress.
        * page/inspector/DatabasePanel.js: Ditto.
        * page/inspector/inspector.js: Ditto. Plus call removeEventListener
        before deleting windowLoaded.

2007-12-06  Adam Roben  <aroben@apple.com>

        Rename FontsTable.plist to FontsList.plist

        Rubberstamped by Hyatt.

        * platform/graphics/win/FontDatabase.cpp:

2007-12-06  Brady Eidson  <beidson@apple.com>

        Reviewed by Darin

        Tweaked a comment and a few assertions from my last checkin

        * storage/SQLStatement.cpp:
        (WebCore::SQLStatement::execute):
        (WebCore::SQLStatement::clearFailureDueToQuota):
        (WebCore::SQLStatement::lastExecutionFailedDueToQuota):

2007-12-06  Brady Eidson <beidson@apple.com>

        Reviewed by Darin

        Finished hooking up UI Delegate for databases - Database operations will now enforce a size quota and
        will ask the UI Delegate for more space when that quota is met

        * platform/sql/SQLiteDatabase.cpp: Add the new SQLResultFull constant
        * platform/sql/SQLiteDatabase.h: Ditto

        * storage/Database.cpp:
        (WebCore::Database::securityOriginData): Added this accessor, copying for thread safety
        (WebCore::Database::stringIdentifier): Ditto
        * storage/Database.h:

        * storage/SQLStatement.cpp:
        (WebCore::SQLStatement::SQLStatement):
        (WebCore::SQLStatement::execute): Change to return an enum that represents 3 states - success, error, and quota.
          If the result is quota, this statement expects that it might be run again, presumably after the user increases 
          the quota
        (WebCore::SQLStatement::setFailureDueToQuota): Setup a quota failure, including a flag and the error
        (WebCore::SQLStatement::clearFailureDueToQuota): Clear a quota failure, for when the statement is rerun
        (WebCore::SQLStatement::lastExecutionFailedDueToQuota):
        * storage/SQLStatement.h:

        * storage/SQLTransaction.cpp:
        (WebCore::SQLTransaction::SQLTransaction):
        (WebCore::SQLTransaction::performPendingCallback): Added an acceptable callback pointer
        (WebCore::SQLTransaction::openTransactionAndPreflight): Setup the quota in the database that will remain for this 
          transaction.  Note that in this patch, the quota being set is wrong - it makes sense to fix that in a follow up patch
        (WebCore::SQLTransaction::runStatements): Modified to add the ability to re-run a statement based on the UI delegate
          decision and whether the current statement was already run
        (WebCore::SQLTransaction::runCurrentStatement): Added another result condition - the Quota result - and handle it
        (WebCore::SQLTransaction::handleCurrentStatementError): Statements can now error-out from two places, so the code
          that handles a statement error was moved here
        (WebCore::SQLTransaction::deliverQuotaIncreaseCallback): Added - Consult the UI delegate for more quota, then 
          reschedule the current statement on the database thread
        * storage/SQLTransaction.h:

2007-12-06  Steve Falkenburg  <sfalken@apple.com>

        <rdar://problem/5614257> Crash in timer / hashtable code due to uncaught exception
        
        Don't use callback-based timers, since these cause Windows to eat Windows crashes
        in code the timers call.
        
        Windows appears to be defending against "shatter" attacks partially by setting
        up a structured exception block while dispatching callback-based WM_TIMERs.
        
        I verified this by adding a divide by zero into some timer callback code.
        In the case where the timer was dispatched via a callback, the divide by zero
        exception was silently handled and ignored, with execution continuing after
        our call to DispatchMessage.  When processed via the WNDPROC, no SEH
        block was established by Windows, and our divide by zero generated a real
        crash (which is what we wanted).
        
        Windows handling our crashes for us led us to leave the timer data structures
        in an invalid state so the next time a timer was set, we'd crash accessing an
        invalid HashMap of timer data.
        
        Reviewed by Hyatt.

        * platform/win/SharedTimerWin.cpp:
        (WebCore::TimerWindowWndProc):
        (WebCore::setSharedTimerFireTime):

2007-12-06  Adam Roben  <aroben@apple.com>

        Fix <rdar://5108390> Feed title is too low in blue banner

        Way back in r23069 we started applying the same font ascent hack that
        Mac WebKit applies to Helvetica, Times, and Courier. We did this so
        that those fonts would match the Mac metrics when we run the
        regression tests. However, this hack was applying to Arial on Windows
        when a site would specify the Helvetica font face because Windows will
        alias the font names. Instead of removing the hack entirely, we
        turn it off by default but provide some SPI so that DumpRenderTree can
        turn it on.

        Reviewed by Hyatt.

        All tests pass.

        * platform/graphics/FontData.h: Add a new static method to turn on the
        hack on Windows only.
        * platform/graphics/win/FontDataWin.cpp:
        (WebCore::FontData::setShouldApplyMacAscentHack): Added.
        (WebCore::FontData::platformInit): Only perform the hack if
        shouldApplyMacAscentHack is true.

2007-12-06  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Sam Weinig.

        Fixed http://bugs.webkit.org/show_bug.cgi?id=16328
        REGRESSION (r28470): Crash expanding a GMail conversation
        
        * page/Frame.cpp:
        (WebCore::Frame::scriptProxy): Only return 0 if JS seems disabled *and*
        we haven't created the proxy yet. If we've created the proxy already, a
        script may be in the midst of execution, even though we've lost our
        settings object. During execution, scripts assume they have free access
        to the proxy.

2007-12-06  Adele Peterson  <adele@apple.com>

        Reviewed by Oliver.

        Fix for <rdar://problem/5631356> Toggling display property on video causes controls to get lost

        * html/HTMLMediaElement.cpp: (WebCore::HTMLMediaElement::attach): Call updateFromElement.
        * html/HTMLMediaElement.h:

2007-12-05  Antti Koivisto  <antti@apple.com>

        Reviewed by Oliver.

        Rename

        Movie -> MediaPlayer
        MoviePrivate -> MediaPlayerPrivate
        
        Movie is QuickTime terminology and clashes with its C API.

        * WebCore.xcodeproj/project.pbxproj:
        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::HTMLMediaElement):
        (WebCore::HTMLMediaElement::~HTMLMediaElement):
        (WebCore::HTMLMediaElement::initAndDispatchProgressEvent):
        (WebCore::HTMLMediaElement::bufferingRate):
        (WebCore::HTMLMediaElement::load):
        (WebCore::HTMLMediaElement::mediaPlayerNetworkStateChanged):
        (WebCore::HTMLMediaElement::mediaPlayerReadyStateChanged):
        (WebCore::HTMLMediaElement::setReadyState):
        (WebCore::HTMLMediaElement::progressEventTimerFired):
        (WebCore::HTMLMediaElement::seek):
        (WebCore::HTMLMediaElement::currentTime):
        (WebCore::HTMLMediaElement::duration):
        (WebCore::HTMLMediaElement::playbackRate):
        (WebCore::HTMLMediaElement::setPlaybackRate):
        (WebCore::HTMLMediaElement::play):
        (WebCore::HTMLMediaElement::pause):
        (WebCore::HTMLMediaElement::setVolume):
        (WebCore::HTMLMediaElement::setMuted):
        (WebCore::HTMLMediaElement::pickMedia):
        (WebCore::HTMLMediaElement::checkIfSeekNeeded):
        (WebCore::HTMLMediaElement::mediaPlayerVolumeChanged):
        (WebCore::HTMLMediaElement::mediaPlayerTimeChanged):
        (WebCore::HTMLMediaElement::mediaPlayerCuePointReached):
        (WebCore::HTMLMediaElement::addCuePoint):
        (WebCore::HTMLMediaElement::buffered):
        (WebCore::HTMLMediaElement::seekable):
        (WebCore::HTMLMediaElement::effectiveStart):
        (WebCore::HTMLMediaElement::effectiveEnd):
        (WebCore::HTMLMediaElement::effectiveLoopStart):
        (WebCore::HTMLMediaElement::effectiveLoopEnd):
        (WebCore::HTMLMediaElement::updateMediaPlayer):
        (WebCore::HTMLMediaElement::willSaveToCache):
        * html/HTMLMediaElement.h:
        (WebCore::HTMLMediaElement::player):
        * html/HTMLVideoElement.cpp:
        (WebCore::HTMLVideoElement::videoWidth):
        (WebCore::HTMLVideoElement::videoHeight):
        * platform/MIMETypeRegistry.cpp:
        (WebCore::initialiseSupportedMediaMIMETypes):
        (WebCore::MIMETypeRegistry::isSupportedMediaMIMEType):
        (WebCore::MIMETypeRegistry::getSupportedMediaMIMETypes):
        * platform/MIMETypeRegistry.h:
        * platform/graphics/MediaPlayer.cpp: Copied from WebCore/platform/graphics/Movie.cpp.
        (WebCore::MediaPlayer::MediaPlayer):
        (WebCore::MediaPlayer::~MediaPlayer):
        (WebCore::MediaPlayer::load):
        (WebCore::MediaPlayer::cancelLoad):
        (WebCore::MediaPlayer::play):
        (WebCore::MediaPlayer::pause):
        (WebCore::MediaPlayer::duration):
        (WebCore::MediaPlayer::currentTime):
        (WebCore::MediaPlayer::seek):
        (WebCore::MediaPlayer::paused):
        (WebCore::MediaPlayer::seeking):
        (WebCore::MediaPlayer::naturalSize):
        (WebCore::MediaPlayer::hasVideo):
        (WebCore::MediaPlayer::networkState):
        (WebCore::MediaPlayer::readyState):
        (WebCore::MediaPlayer::volume):
        (WebCore::MediaPlayer::setVolume):
        (WebCore::MediaPlayer::rate):
        (WebCore::MediaPlayer::setRate):
        (WebCore::MediaPlayer::muted):
        (WebCore::MediaPlayer::setMuted):
        (WebCore::MediaPlayer::dataRate):
        (WebCore::MediaPlayer::setEndTime):
        (WebCore::MediaPlayer::addCuePoint):
        (WebCore::MediaPlayer::removeCuePoint):
        (WebCore::MediaPlayer::clearCuePoints):
        (WebCore::MediaPlayer::maxTimeBuffered):
        (WebCore::MediaPlayer::maxTimeSeekable):
        (WebCore::MediaPlayer::bytesLoaded):
        (WebCore::MediaPlayer::totalBytesKnown):
        (WebCore::MediaPlayer::totalBytes):
        (WebCore::MediaPlayer::setRect):
        (WebCore::MediaPlayer::visible):
        (WebCore::MediaPlayer::setVisible):
        (WebCore::MediaPlayer::paint):
        (WebCore::MediaPlayer::getSupportedTypes):
        (WebCore::MediaPlayer::networkStateChanged):
        (WebCore::MediaPlayer::readyStateChanged):
        (WebCore::MediaPlayer::volumeChanged):
        (WebCore::MediaPlayer::timeChanged):
        (WebCore::MediaPlayer::cuePointReached):
        * platform/graphics/MediaPlayer.h: Copied from WebCore/platform/graphics/Movie.h.
        (WebCore::MediaPlayerClient::~MediaPlayerClient):
        (WebCore::MediaPlayerClient::mediaPlayerNetworkStateChanged):
        (WebCore::MediaPlayerClient::mediaPlayerReadyStateChanged):
        (WebCore::MediaPlayerClient::mediaPlayerVolumeChanged):
        (WebCore::MediaPlayerClient::mediaPlayerTimeChanged):
        (WebCore::MediaPlayerClient::mediaPlayerCuePointReached):
        * platform/graphics/Movie.cpp: Removed.
        * platform/graphics/Movie.h: Removed.
        * platform/graphics/gtk/MediaPlayerPrivateGStreamer.cpp: Copied from WebCore/platform/graphics/gtk/MoviePrivateGStreamer.cpp.
        (WebCore::mediaPlayerPrivateErrorCallback):
        (WebCore::mediaPlayerPrivateEOSCallback):
        (WebCore::mediaPlayerPrivateStateCallback):
        (WebCore::mediaPlayerPrivateBufferingCallback):
        (WebCore::MediaPlayerPrivate::MediaPlayerPrivate):
        (WebCore::MediaPlayerPrivate::~MediaPlayerPrivate):
        (WebCore::MediaPlayerPrivate::load):
        (WebCore::MediaPlayerPrivate::play):
        (WebCore::MediaPlayerPrivate::pause):
        (WebCore::MediaPlayerPrivate::duration):
        (WebCore::MediaPlayerPrivate::currentTime):
        (WebCore::MediaPlayerPrivate::seek):
        (WebCore::MediaPlayerPrivate::setEndTime):
        (WebCore::MediaPlayerPrivate::addCuePoint):
        (WebCore::MediaPlayerPrivate::removeCuePoint):
        (WebCore::MediaPlayerPrivate::clearCuePoints):
        (WebCore::MediaPlayerPrivate::startCuePointTimerIfNeeded):
        (WebCore::MediaPlayerPrivate::cancelSeek):
        (WebCore::MediaPlayerPrivate::cuePointTimerFired):
        (WebCore::MediaPlayerPrivate::paused):
        (WebCore::MediaPlayerPrivate::seeking):
        (WebCore::MediaPlayerPrivate::naturalSize):
        (WebCore::MediaPlayerPrivate::hasVideo):
        (WebCore::MediaPlayerPrivate::setVolume):
        (WebCore::MediaPlayerPrivate::setMuted):
        (WebCore::MediaPlayerPrivate::setRate):
        (WebCore::MediaPlayerPrivate::dataRate):
        (WebCore::MediaPlayerPrivate::networkState):
        (WebCore::MediaPlayerPrivate::readyState):
        (WebCore::MediaPlayerPrivate::maxTimeBuffered):
        (WebCore::MediaPlayerPrivate::maxTimeSeekable):
        (WebCore::MediaPlayerPrivate::maxTimeLoaded):
        (WebCore::MediaPlayerPrivate::bytesLoaded):
        (WebCore::MediaPlayerPrivate::totalBytesKnown):
        (WebCore::MediaPlayerPrivate::totalBytes):
        (WebCore::MediaPlayerPrivate::cancelLoad):
        (WebCore::MediaPlayerPrivate::updateStates):
        (WebCore::MediaPlayerPrivate::loadStateChanged):
        (WebCore::MediaPlayerPrivate::rateChanged):
        (WebCore::MediaPlayerPrivate::sizeChanged):
        (WebCore::MediaPlayerPrivate::timeChanged):
        (WebCore::MediaPlayerPrivate::volumeChanged):
        (WebCore::MediaPlayerPrivate::didEnd):
        (WebCore::MediaPlayerPrivate::loadingFailed):
        (WebCore::MediaPlayerPrivate::setRect):
        (WebCore::MediaPlayerPrivate::setVisible):
        (WebCore::MediaPlayerPrivate::paint):
        (WebCore::MediaPlayerPrivate::getSupportedTypes):
        (WebCore::MediaPlayerPrivate::createGSTPlayBin):
        * platform/graphics/gtk/MediaPlayerPrivateGStreamer.h: Copied from WebCore/platform/graphics/gtk/MoviePrivateGStreamer.h.
        * platform/graphics/gtk/MoviePrivateGStreamer.cpp: Removed.
        * platform/graphics/gtk/MoviePrivateGStreamer.h: Removed.
        * platform/graphics/mac/MediaPlayerPrivateQTKit.h: Copied from WebCore/platform/graphics/mac/MoviePrivateQTKit.h.
        * platform/graphics/mac/MediaPlayerPrivateQTKit.mm: Copied from WebCore/platform/graphics/mac/MoviePrivateQTKit.mm.
        (WebCore::MediaPlayerPrivate::MediaPlayerPrivate):
        (WebCore::MediaPlayerPrivate::~MediaPlayerPrivate):
        (WebCore::MediaPlayerPrivate::createQTMovie):
        (WebCore::MediaPlayerPrivate::createQTMovieView):
        (WebCore::MediaPlayerPrivate::createQTTime):
        (WebCore::MediaPlayerPrivate::load):
        (WebCore::MediaPlayerPrivate::play):
        (WebCore::MediaPlayerPrivate::pause):
        (WebCore::MediaPlayerPrivate::duration):
        (WebCore::MediaPlayerPrivate::currentTime):
        (WebCore::MediaPlayerPrivate::seek):
        (WebCore::MediaPlayerPrivate::doSeek):
        (WebCore::MediaPlayerPrivate::cancelSeek):
        (WebCore::MediaPlayerPrivate::seekTimerFired):
        (WebCore::MediaPlayerPrivate::setEndTime):
        (WebCore::MediaPlayerPrivate::addCuePoint):
        (WebCore::MediaPlayerPrivate::removeCuePoint):
        (WebCore::MediaPlayerPrivate::clearCuePoints):
        (WebCore::MediaPlayerPrivate::startCuePointTimerIfNeeded):
        (WebCore::MediaPlayerPrivate::cuePointTimerFired):
        (WebCore::MediaPlayerPrivate::paused):
        (WebCore::MediaPlayerPrivate::seeking):
        (WebCore::MediaPlayerPrivate::naturalSize):
        (WebCore::MediaPlayerPrivate::hasVideo):
        (WebCore::MediaPlayerPrivate::setVolume):
        (WebCore::MediaPlayerPrivate::setMuted):
        (WebCore::MediaPlayerPrivate::setRate):
        (WebCore::MediaPlayerPrivate::dataRate):
        (WebCore::MediaPlayerPrivate::networkState):
        (WebCore::MediaPlayerPrivate::readyState):
        (WebCore::MediaPlayerPrivate::maxTimeBuffered):
        (WebCore::MediaPlayerPrivate::maxTimeSeekable):
        (WebCore::MediaPlayerPrivate::maxTimeLoaded):
        (WebCore::MediaPlayerPrivate::bytesLoaded):
        (WebCore::MediaPlayerPrivate::totalBytesKnown):
        (WebCore::MediaPlayerPrivate::totalBytes):
        (WebCore::MediaPlayerPrivate::cancelLoad):
        (WebCore::MediaPlayerPrivate::updateStates):
        (WebCore::MediaPlayerPrivate::loadStateChanged):
        (WebCore::MediaPlayerPrivate::rateChanged):
        (WebCore::MediaPlayerPrivate::sizeChanged):
        (WebCore::MediaPlayerPrivate::timeChanged):
        (WebCore::MediaPlayerPrivate::volumeChanged):
        (WebCore::MediaPlayerPrivate::didEnd):
        (WebCore::MediaPlayerPrivate::setRect):
        (WebCore::MediaPlayerPrivate::setVisible):
        (WebCore::MediaPlayerPrivate::paint):
        (WebCore::MediaPlayerPrivate::getSupportedTypes):
        (-[WebCoreMovieObserver initWithCallback:WebCore::]):
        * platform/graphics/mac/MoviePrivateQTKit.h: Removed.
        * platform/graphics/mac/MoviePrivateQTKit.mm: Removed.
        * rendering/RenderMedia.cpp:
        (WebCore::RenderMedia::player):
        * rendering/RenderMedia.h:
        * rendering/RenderVideo.cpp:
        (WebCore::RenderVideo::RenderVideo):
        (WebCore::RenderVideo::~RenderVideo):
        (WebCore::RenderVideo::videoSizeChanged):
        (WebCore::RenderVideo::paintReplaced):
        (WebCore::RenderVideo::layout):
        (WebCore::RenderVideo::updateFromElement):
        (WebCore::RenderVideo::updatePlayer):
        * rendering/RenderVideo.h:

2007-12-06  Geoffrey Garen  <ggaren@apple.com>

        Build fix: access global object directly.

        * plugins/win/PluginViewWin.cpp:
        (WebCore::PluginViewWin::bindingInstance):

2007-12-06  Mark Rowe  <mrowe@apple.com>

        Reviewed by Eric.

        Fix bug spotted by GCC 4.2.

        * bindings/js/kjs_window.cpp:
        (KJS::allowPopUp): Remove extraneous semicolon that completely changed the meaning of allowPopUp.

2007-12-06  Holger Hans Peter Freyther <holger.freyther@trolltech.com>

        Reviewed by Alp Toker.

        http://bugs.webkit.org/show_bug.cgi?id=16173
        Licensing change

        Change license from BSD to LGPL.

        * platform/gtk/FileSystemGtk.cpp:

2007-12-05  Rob Buis  <buis@kde.org>

        Reviewed by Mitz.

        http://bugs.webkit.org/show_bug.cgi?id=15289
        WebKit does not respect clip paths of a 0x0 rect

        Make empty clip paths clip the whole referencing graphic.

        * svg/SVGClipPathElement.cpp:
        (WebCore::SVGClipPathElement::canvasResource):
        * svg/graphics/SVGResourceClipper.h:
        (WebCore::ClipDataList::isEmpty):

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

        Reviewed by Maciej.

        - fix http://bugs.webkit.org/show_bug.cgi?id=16266
          <rdar://problem/5625279> REGRESSION: crash loading CNN.com at
          Interpreter::createObjectsForGlobalObjectProperties()

        I don't know how to reproduce this in a test.

        * bindings/js/JSDocumentCustom.cpp: (WebCore::JSDocument::mark):
        Call JSEventTargetNode::mark instead of DOMObject::mark. There's no difference
        right now, but it's best to call your base class, not your base's base.

        * bindings/js/kjs_events.h: Removed unneeded virtual from the
        JSUnprotectedEventListener::mark() function; it neither derives from or is
        derived from anyone else with a mark() function so there's no need for virtual.

        * bindings/js/kjs_window.cpp: (KJS::Window::mark): Call JSGlobalObject::mark,
        not JSObject::mark. This is the actual bug fix.

2007-12-05  Pierre-Luc Beaudoin  <pierre-luc.beaudoin@collabora.co.uk>

        http://bugs.webkit.org/show_bug.cgi?id=16145
        [gtk] Implement media support in GTK backend

        Reviewed by Alp Toker.

        Remove old comments, fix variable names, match WebKit coding style.

        * platform/graphics/gtk/MoviePrivateGStreamer.cpp:
        (WebCore::moviePrivateEOSCallback):
        (WebCore::MoviePrivate::MoviePrivate):
        (WebCore::MoviePrivate::load):
        (WebCore::MoviePrivate::play):
        (WebCore::MoviePrivate::pause):
        (WebCore::MoviePrivate::currentTime):
        (WebCore::MoviePrivate::seek):
        (WebCore::MoviePrivate::cancelSeek):
        (WebCore::MoviePrivate::seeking):
        (WebCore::MoviePrivate::naturalSize):
        (WebCore::MoviePrivate::setVolume):
        (WebCore::MoviePrivate::setMuted):
        (WebCore::MoviePrivate::maxTimeBuffered):
        (WebCore::MoviePrivate::bytesLoaded):
        (WebCore::MoviePrivate::totalBytesKnown):
        (WebCore::MoviePrivate::totalBytes):
        (WebCore::MoviePrivate::updateStates):
        (WebCore::MoviePrivate::didEnd):
        (WebCore::MoviePrivate::paint):
        (WebCore::MoviePrivate::createGSTPlayBin):
        * platform/graphics/gtk/MoviePrivateGStreamer.h:

2007-12-05  Mark Rowe  <mrowe@apple.com>

        Speculative wx build fix.  Add PlugInInfoStore::pluginNameForMIMEType to the temporary link stubs.

        * platform/wx/TemporaryLinkStubs.cpp:

2007-12-05  Alp Toker  <alp@atoker.com>

        Rubber stamped by Mark Rowe.

        Remove DEPENDPATH on the generated sources directory. This causes
        trouble and is no longer necessary following the glib-genmarshal
        generator split.

        * WebCore.pro:

2007-12-04  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Darin Adler.

        Third step in refactoring JSGlobalObject: Moved data members and data
        member access from Interpreter to JSGlobalObject. Changed Interpreter
        member functions to static functions. Same for the subclass, 
        ScriptInterpreter.
        
        This is a big change, but it's mostly code motion and renaming.
        
2007-12-05  Darin Adler  <darin@apple.com>

        "Reviewed" by Geoff.

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::checkLoadCompleteForThisFrame): Removed assertion.
        (WebCore::FrameLoader::dispatchDidCommitLoad): This one too.
        The assertions are firing like crazy. Not sure why yet.

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

        Reviewed by Adam Roben.

        - fix http://bugs.webkit.org/show_bug.cgi?id=16306
          Assertion failed in WebCore/loader/FrameLoader.cpp:4642

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::dispatchDidCommitLoad): Check m_creatingInitialEmptyDocument
        and don't deliver the client call in that case.

2007-12-05  Mark Rowe  <mrowe@apple.com>

        Reviewed by Kevin Decker.

        Fix 64-bit debug build.

        * platform/text/mac/TextCodecMac.cpp:
        (WebCore::TextCodecMac::decode): OSStatus is a long for 32-bit but int on 64-bit,
        so we need to cast it to be able to use a single format specifier on both.

2007-12-05  Kevin Decker  <kdecker@apple.com>

        Reviewed by Hyatt.

        <rdar://problem/5613106> Acordex: REGRESSION (Tiger-Leopard): plug-ins can no longer take over TIFF images (affects uspto.gov)
       
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::shouldUsePlugin): Allow plug-ins (with the exception of QuickTime) to
        takeover TIFF once again.
        
2007-12-05  Luca Bruno  <lethalman88@gmail.com>

        Reviewed by Alp Toker.

        http://bugs.webkit.org/show_bug.cgi?id=16290
        [GTK] Pasting clipboard in rich text.

        * platform/gtk/PasteboardGtk.cpp:
        (Pasteboard::documentFragment): Implement rich text paste support.

2007-12-05  Adele Peterson  <adele@apple.com>

        Reviewed by Hyatt.

        Reverting fix for <rdar://problem/5499918> REGRESSION: insertion point in input field with custom border cuts holes in focus ring interior edges

        We need to just fix the underlying focus ring repaint problem.

        * rendering/RenderTextControl.cpp: (WebCore::RenderTextControl::setStyle):

2007-12-04  Kevin McCullough  <kmccullough@apple.com>

        Reviewed by Darin.

        - <rdar://5621435>
        - Security Fix. Instead of having it off by default, WebKit now must
        explicitly turn off local-resource restriction when needed for backwards
        compatibility reasons.

        * loader/FrameLoader.cpp:

2007-12-05  Adam Roben  <aroben@apple.com>

        Set the menu item identifier for all menu items

        This allows WebKit clients to distinguish between submenus in the
        context menu.

        Reviewed by Darin.

        No test possible.

        * platform/win/ContextMenuItemWin.cpp:
        (WebCore::ContextMenuItem::ContextMenuItem):

2007-12-05  Dan Bernstein  <mitz@apple.com>

        Reviewed by Darin Adler.

        - WebCore part of fixing <rdar://problem/5111082> Flash popup video ad doesn't close when clicked at http://www.firestonecompleteautocare.com/

        * manual-tests/nested-plug-ins.html: Added.
        * manual-tests/resources/nested-plug-ins-inner-frame.html: Added.
        * manual-tests/resources/nested-plug-ins-outer-frame.html: Added.
        * platform/ScrollView.h:
        * platform/Widget.h:
        (WebCore::Widget::attachToWindow): Added. Tells the widget that it is connected
        via visible ScrollViews to the root ScrollView of the WebView.
        (WebCore::Widget::detachFromWindow): Added. Tells the widget that it is no longer
        connected via visible ScrollViews to the root ScrollView of the WebView.
        * platform/win/ScrollViewWin.cpp:
        (WebCore::ScrollView::ScrollViewPrivate::ScrollViewPrivate): Added
        m_visible and m_attachedToWindow members.
        (WebCore::ScrollView::attachToWindow): Added. Attaches all children if this
        view is visible.
        (WebCore::ScrollView::detachFromWindow): Added. Detaches all children if this
        view is visible (otherwise they would be detached already).
        (WebCore::ScrollView::show): Added. Attaches all children if this view
        is attached.
        (WebCore::ScrollView::hide): Added. Detaches all children if this view
        is attached (otherwise they would be detached already).
        (WebCore::ScrollView::isAttachedToWindow): Added.
        * platform/win/WidgetWin.cpp:
        (WebCore::Widget::setParent): Added calls to attachToWindow() and detachFromWindow()
        depending on whether the parent is set and attached or not.
        * plugins/win/PluginViewWin.cpp:
        (WebCore::PluginViewWin::setFocus):
        (WebCore::PluginViewWin::show): Changed to show the plug-in only if
        this view is attached.
        (WebCore::PluginViewWin::hide): Changed to hide the plug-in only if this
        view is attached (otherwise it would be hidden already).
        (WebCore::PluginViewWin::attachToWindow): Added. Shows the plug-in if this view
        is visible.
        (WebCore::PluginViewWin::detachFromWindow): Added. Hides the plug-in if this view
        is visible (otherwise it would be hidden already).
        (WebCore::PluginViewWin::PluginViewWin):
        * plugins/win/PluginViewWin.h: Added m_attachedToWindow member.

2007-12-04  Alp Toker  <alp@atoker.com>

        Potential GTK+ build fix for the glib-genmarshal issue.

        Split the glib-genmarshal qmake generator in two; one for the source
        file, another for the header.

        * WebCore.pro:

2007-12-04  Alp Toker  <alp@atoker.com>

        GTK+ build fix.

        * platform/PlugInInfoStore.h:

2007-12-04  Kevin Decker  <kdecker@apple.com>

        Reviewed by Anders.

        <rdar://problem/5629125> PluginInfoStore needs the ability to return the name of a plug-in for a given MIME type

        * page/mac/WebCoreViewFactory.h: Added pluginNameForMIMEType: method.
        * platform/PlugInInfoStore.h:
        * platform/gtk/TemporaryLinkStubs.cpp: Added stub version of pluginNameForMIMEType.
        (PlugInInfoStore::pluginNameForMIMEType):
        * platform/mac/PlugInInfoStoreMac.mm:
        (WebCore::PlugInInfoStore::pluginNameForMIMEType): Added.
        * platform/qt/PlugInInfoStoreQt.cpp: 
        (WebCore::PlugInInfoStore::pluginNameForMIMEType): Added stub version of pluginNameForMIMEType.
        * plugins/win/PlugInInfoStoreWin.cpp: 
        (WebCore::PlugInInfoStore::pluginNameForMIMEType): Added stub version of pluginNameForMIMEType.

2007-12-04  Adele Peterson  <adele@apple.com>

        Reviewed by Darin.

        Fix for <rdar://problem/5499918> REGRESSION: insertion point in input field with custom border cuts holes in focus ring interior edges

        * rendering/RenderTextControl.cpp: (WebCore::RenderTextControl::setStyle):
        Adjust outline-offset so it doesn't extend beyond the border to interfere with typing

2007-12-04  Anders Carlsson  <andersca@apple.com>

        Reviewed by Jon.

        Always call NPP_NewStream, NPP_DestroyStream and NPP_URLNotify for JavaScript
        result streams, even if the JavaScript expression threw an exception or returned undefined.
        This matches what Firefox does.
        
        * plugins/win/PluginStreamWin.cpp:
        (WebCore::PluginStreamWin::sendJavaScriptStream):
        Handle the result string being null, and set the correct NPReason if it is.
        
        * plugins/win/PluginViewWin.cpp:
        (WebCore::PluginViewWin::performRequest):
        Always send the JavaScript stream, regardless of the result could be converted to a string or not.

2007-12-04  Adele Peterson  <adele@apple.com>

        Reviewed by Hyatt.

        Fix for <rdar://problem/5622464> controls should show up for audio element

        * css/html4.css: Added styles for audio controls.  This will need to be refined, since we may want a different look for audio controls.
        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::attributeChanged): When the controls attribute changes detach and reattach if necessary. 
        (WebCore::HTMLMediaElement::rendererIsNeeded): Added.
        (WebCore::HTMLMediaElement::createRenderer): Added.  Uses RenderMedia.
        * html/HTMLMediaElement.h:
        * rendering/RenderMedia.cpp: (WebCore::RenderMedia::RenderMedia): Added constructor that doesn't take intrinsic size.
        * rendering/RenderMedia.h:

2007-12-04  Anders Carlsson  <andersca@apple.com>

        Reviewed by Sam.

        Add isSafeScript(const JSGlobalObject*) so we won't get the JSGlobalObject
        implementation, which always returns true(!).
        
        * bindings/js/kjs_window.cpp:
        (KJS::Window::isSafeScript):
        Make the static isSafeScript method take two JSGlobalObjects.
        
        * bindings/js/kjs_window.h:
        (KJS::Window::isSafeScript):
        Implement isSafeScript and have it call the static method.

2007-11-27  Adam Roben  <aroben@apple.com>

        Make the implementation of Frame::setNeedsReapplyStyles cross-platform

        Reviewed by Hyatt.

        No change in functionality.

        * page/Frame.cpp:
        (WebCore::Frame::setNeedsReapplyStyles): Added. Invalidates the
        FrameView so that FrameView::layout will be called, which ends up
        calling reapplyStyles.
        (WebCore::Frame::needsReapplyStyles): Added.
        (WebCore::Frame::reapplyStyles): Renamed from reparseConfiguration.
        (WebCore::FramePrivate::FramePrivate):
        * page/Frame.h:
        * page/FramePrivate.h: Added new boolean member.
        * page/FrameView.cpp:
        (WebCore::FrameView::layout): Call Frame::reapplyStyles if needed.
        (WebCore::FrameView::needsLayout): Say that we need layout if the
        Frame needs styles reapplied.
        * page/mac/WebCoreFrameBridge.h: Removed setNeedsReapplyStyles.
        * page/mac/WebCoreFrameBridge.mm:
        (-[WebCoreFrameBridge reapplyStylesForDeviceType:]): Updated for
        rename.

        * bridge/win/FrameWin.cpp: Removed Frame::setNeedsReapplyStyles.
        * page/gtk/FrameGtk.cpp: Ditto.
        * page/mac/FrameMac.mm: Ditto.
        * page/qt/FrameQt.cpp: Ditto.
        * platform/wx/TemporaryLinkStubs.cpp: Ditto.

2007-12-04  Antti Koivisto  <antti@apple.com>

        Reviewed by Adele.

        Pass intrinsic size to the base class.

        * rendering/RenderMedia.cpp:
        (WebCore::RenderMedia::RenderMedia):

2007-12-04  Adele Peterson  <adele@apple.com>

        Reviewed by Darin.

        Fix for <rdar://problem/5578209> REGRESSION: Crash in WebCore::DeprecatedValueListImpl::Private::copyList when going back on zoomerang.com/survey

        * loader/FrameLoader.cpp: (WebCore::FrameLoader::scheduleHistoryNavigation):
          When the new url is exactly the same as the old url, don't treat it like a fragment navigation, since its going to cause a reload.

2007-12-04  Darin Adler  <darin@apple.com>

        Reviewed by Kevin Decker.

        - added an assertion for a situation that leads to a Safari assertion:
          a commit that is not followed by a load completion

        - removed some unneeded FrameLoader stuff -- maybe some day we'll get this
          class cut down to size

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::FrameLoader): Added boolean for assertion.
        (WebCore::FrameLoader::checkLoadCompleteForThisFrame): Added code to assert
        that we already sent a commit before sending a complete.
        (WebCore::FrameLoader::continueFragmentScrollAfterNavigationPolicy): Call
        client directly instead of indirecting through a function.
        (WebCore::FrameLoader::loadItem): Ditto.
        (WebCore::FrameLoader::goToItem): Ditto.
        (WebCore::FrameLoader::addHistoryForCurrentLocation): Get the private browsing
        state from Settings instead of FrameLoaderClient. Also call client directly
        instead of indirecting through a function.
        (WebCore::FrameLoader::updateHistoryForReload): Call client directly instead
        of indirecting through a function.
        (WebCore::FrameLoader::dispatchDidCommitLoad): Added code to assert
        that we did not yet send a commit and set the flag that will be used to check
        that we don't do this twice in a row without an intervening completion call.

        * loader/FrameLoader.h: Added a boolean for the assertion. Removed six
        now-unneeded functions.

        * loader/FrameLoaderClient.h: Removed now-unneeded privateBrowsingEnabled function.

        * loader/ResourceLoader.cpp: (WebCore::ResourceLoader::willCacheResponse): Get
        the private browsing state from Settings instead of FrameLoaderClient.

        * svg/graphics/SVGImageEmptyClients.h: Removed obsolete privateBrowsingEnabled.

2007-12-03  Antti Koivisto  <antti@apple.com>

        Reviewed by Adele.
        
        Fix <rdar://problem/5624802> 
        Controller displays outside of <video> element when width and height aren't specified 

        - Explicitly adjust size of the controls tree root.
        - Switch RenderMedia base class back to RenderReplaced. It is easier to manage the shadow tree
          by hand. This also allows better code sharing with other replaced element classes.
        - Move duplicated layout and painting code from subclasses up to RenderReplaced.

        Test: media/video-controls-rendering.html

        * rendering/RenderHTMLCanvas.cpp:
        (WebCore::RenderHTMLCanvas::paintReplaced):
        * rendering/RenderHTMLCanvas.h:
            Share code.
        * rendering/RenderImage.cpp:
        (WebCore::RenderImage::paintReplaced):
        (WebCore::RenderImage::minimumReplacedHeight):
        * rendering/RenderImage.h:
            Share code.
        * rendering/RenderMedia.cpp:
        (WebCore::RenderMediaControlShadowRoot::RenderMediaControlShadowRoot):
        (WebCore::RenderMediaControlShadowRoot::setParent):
            Add a subclass just to get through encapsulation to use setParent().
        (WebCore::MediaControlShadowRootElement::MediaControlShadowRootElement):
            Move initialization to the constructor.
        (WebCore::RenderMedia::RenderMedia):
        (WebCore::RenderMedia::~RenderMedia):
        (WebCore::RenderMedia::layout):
            Resize and layout the controller root by hand.
        (WebCore::RenderMedia::firstChild):
        (WebCore::RenderMedia::lastChild):
        (WebCore::RenderMedia::removeChild):
            Support one child renderer for controls.
        (WebCore::RenderMedia::createControlsShadowRoot):
        * rendering/RenderMedia.h:
        (WebCore::RenderMedia::isMedia):
            Switch base class to RenderReplaced, delete the now unnecessary stuff.
        * rendering/RenderReplaced.cpp:
        (WebCore::RenderReplaced::layout):
        (WebCore::RenderReplaced::paint):
        * rendering/RenderReplaced.h:
        (WebCore::RenderReplaced::minimumReplacedHeight):
        (WebCore::RenderReplaced::paintReplaced):
            Share code.
        * rendering/RenderVideo.cpp:
        (WebCore::RenderVideo::videoSizeChanged):
            Simplify, just request relayout.
        (WebCore::RenderVideo::paintReplaced):
        (WebCore::RenderVideo::layout):
        * rendering/RenderVideo.h:
            Share code.

2007-12-04  Michael Natterer  <mitch@imendio.com>

        Reviewed by Alp Toker.

        * WebCore.pro: fix build of webkit-marshal by building the
        functions into a separate .cpp file instead of including them in
        the header. This way we can use the marshallers from more than one
        file without using bad hacks.

        Add the generated sources directory to DEPENDPATH.

2007-12-04  Pierre-Luc Beaudoin  <pierre-luc.beaudoin@collabora.co.uk>

        Reviewed by Alp Toker.

        http://bugs.webkit.org/show_bug.cgi?id=16145
        [gtk] Implement media support in GTK backend

        This implements the media tags of HTML5 on the GTK+ port based on the 
        Mac port. Media tests pass although some tests required a small modifications: 
        As per the HTML5 spec, the loading of the clip should start only after 
        all script are done.  But in the case of the tests, the loading starts 
        before some callbacks get registered.  This has been discussed with 
        Antti Koivisto, and the tests should be updated.

        There is only one known issue: one time in 10 tries, loading a buffered 
        clip will never end buffering.  The buffering will stall at 97% for no 
        apparent reasons.  Reloading the page usually works around the problem.
        On the GStreamer side, some codecs don't return correct values, therefore
        they make the tests fail.  For instance H.264 will make the video-end 
        test fail.  This should be fixed in GStreamer 0.10.15.

        This version displays video in a pop up window.  A place holder is drawn
        on the page where the video should appear.

        By default, it is turned off in WebCore.pro until GStreamer/X
        detection issues are sorted out.

        * WebCore.pro:
        Disable video for now
        * platform/Logging.cpp:
        (WebCore::):
        * platform/Logging.h:
        Added a logging level for Media stuff
        * platform/graphics/Movie.cpp:
        * platform/graphics/gtk/MoviePrivateGStreamer.cpp: Added.
        (WebCore::moviePrivateErrorCallback):
        (WebCore::moviePrivateEOSCallback):
        (WebCore::moviePrivateStateCallback):
        (WebCore::moviePrivateBufferingCallback):
        (WebCore::moviePrivateWindowIDCallback):
        (WebCore::MoviePrivate::MoviePrivate):
        (WebCore::MoviePrivate::~MoviePrivate):
        (WebCore::MoviePrivate::load):
        (WebCore::MoviePrivate::play):
        (WebCore::MoviePrivate::pause):
        (WebCore::MoviePrivate::duration):
        (WebCore::MoviePrivate::currentTime):
        (WebCore::MoviePrivate::seek):
        (WebCore::MoviePrivate::setEndTime):
        (WebCore::MoviePrivate::addCuePoint):
        (WebCore::MoviePrivate::removeCuePoint):
        (WebCore::MoviePrivate::clearCuePoints):
        (WebCore::MoviePrivate::startCuePointTimerIfNeeded):
        (WebCore::MoviePrivate::cancelSeek):
        (WebCore::MoviePrivate::cuePointTimerFired):
        (WebCore::MoviePrivate::paused):
        (WebCore::MoviePrivate::seeking):
        (WebCore::MoviePrivate::naturalSize):
        (WebCore::MoviePrivate::hasVideo):
        (WebCore::MoviePrivate::setVolume):
        (WebCore::MoviePrivate::setMuted):
        (WebCore::MoviePrivate::setRate):
        (WebCore::MoviePrivate::dataRate):
        (WebCore::MoviePrivate::networkState):
        (WebCore::MoviePrivate::readyState):
        (WebCore::MoviePrivate::maxTimeBuffered):
        (WebCore::MoviePrivate::maxTimeSeekable):
        (WebCore::MoviePrivate::maxTimeLoaded):
        (WebCore::MoviePrivate::bytesLoaded):
        (WebCore::MoviePrivate::totalBytesKnown):
        (WebCore::MoviePrivate::totalBytes):
        (WebCore::MoviePrivate::cancelLoad):
        (WebCore::MoviePrivate::updateStates):
        (WebCore::MoviePrivate::loadStateChanged):
        (WebCore::MoviePrivate::rateChanged):
        (WebCore::MoviePrivate::sizeChanged):
        (WebCore::MoviePrivate::timeChanged):
        (WebCore::MoviePrivate::volumeChanged):
        (WebCore::MoviePrivate::didEnd):
        (WebCore::MoviePrivate::loadingFailed):
        (WebCore::MoviePrivate::setRect):
        (WebCore::MoviePrivate::setVisible):
        (WebCore::MoviePrivate::paint):
        (WebCore::MoviePrivate::getSupportedTypes):
        (WebCore::MoviePrivate::createGSTPlayBin):
        * platform/graphics/gtk/MoviePrivateGStreamer.h: Added.

2007-12-04  Holger Hans Peter Freyther <holger.freyther@trolltech.com>

        Reviewed by Simon.

        * Implement the InspectorClient for the Qt port
        * It does not support highlighting of nodes yet
        * Use QRC to open the internal page. The important thing is the
        '/' in the URL to make WebCore::Document::completeURL behave the
        way we want.
        * To make the InspectorClient work we will have to mark qrc as secure.

        * WebCore.pro:
        * loader/FrameLoader.cpp:
        (WebCore::localSchemes):
        * page/inspector/WebKit.qrc: Added.

2007-12-04  Alp Toker  <alp@atoker.com>

        Rubber stamped by Mark Rowe.

        Remove two unused variables to silence warnings.

        * html/CanvasRenderingContext2D.cpp:
        (WebCore::CanvasRenderingContext2D::fill):
        (WebCore::CanvasRenderingContext2D::stroke):

2007-12-03  Dan Bernstein  <mitz@apple.com>

        Reviewed by Darin Adler.

        - fix <rdar://problem/5134044> fast/frames/frame-src-attribute.html fails on Windows

        * platform/win/ScrollViewWin.cpp:
        (WebCore::ScrollView::visibleWidth): Do not return negative values.
        (WebCore::ScrollView::visibleHeight): Ditto.

2007-12-03  Dan Bernstein  <mitz@apple.com>

        Reviewed by Dave Hyatt.

        - fix <rdar://problem/5346452> Resize event doesn't fire on body element inside a frame

        Test: fast/events/resize-subframe.html

        * page/FrameView.cpp:
        (WebCore::FrameViewPrivate::FrameViewPrivate): Added a timer used when
        deferring tasks that need to be done after layout.
        (WebCore::FrameViewPrivate::reset):
        (WebCore::FrameView::~FrameView):
        (WebCore::FrameView::layout): Moved the updating of widget positions,
        loading plug-ins and sending events queued up during layout into
        performPostLayoutTasks(). performPostLayoutTasks() is called after
        layout unless the layout was triggered by a previous layout's post-
        layout tasks. In the latter case, performPostLayoutTasks() is scheduled
        to run later.
        (WebCore::FrameView::performPostLayoutTasks): Performs work that needs
        to be done after layout but which can result in arbitrary code
        execution and therefore may re-invalidate the layout. This includes
        updating widget positions, loading plug-ins, and dispatching layout-
        related DOM events (scroll, overflow and resize).
        (WebCore::FrameView::postLayoutTimerFired):
        (WebCore::FrameView::dispatchScheduledEvents):
        * page/FrameView.h:
        * page/mac/WebCoreFrameBridge.h:
        * page/mac/WebCoreFrameBridge.mm: Removed -sendResizeEvent since this
        is handled by FrameView now.

2007-12-03  Rob Buis  <buis@kde.org>

        Reviewed by Darin.

        http://bugs.webkit.org/show_bug.cgi?id=15767
        Text decorations do not respect "visibility" property

        Only paint decorations if visibility is "visible".

        * rendering/SVGInlineTextBox.cpp:
        (WebCore::SVGInlineTextBox::paintDecoration):

2007-12-03  Steve Falkenburg  <sfalken@apple.com>

        Fix build.

        * WebCore.vcproj/WebCore.vcproj:

2007-12-03  Nikolas Zimmermann  <zimmermann@kde.org>

        Reviewed by David.

        Fixes: http://bugs.webkit.org/show_bug.cgi?id=15645
        Don't allow selectors to interfere with the SVG shadow tree (<use> internal non-exposed tree).

        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::checkSelector):

2007-12-03  Dan Bernstein  <mitz@apple.com>

        Reviewed by Adam Roben.

        - fix <rdar://problem/5538651> REGRESSSION: domfuzz: null deref in WebCore::Document::canReplaceChild

        Test: fast/dom/Document/replaceChild-null-oldChild.html

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

2007-12-03  Holger Hans Peter Freyther  <holger.freyther@trolltech.com>

        Reviewed by Simon.

        * Avoid crashes by making sure everything is layouted before
        we start painting. This avoids a crash in Widget::invalidateRect
        because QPainter::begin would fail
        * The QWebFrame::layout() methods and calls are left untouched because
        this would be an API decision.
        

        WARNING: NO TEST CASES ADDED OR CHANGED

        * page/FrameView.cpp:
        (WebCore::FrameView::updateControlTints):
        * page/FrameView.h:
        * platform/ScrollView.h:
        * platform/qt/ScrollViewQt.cpp:
        (WebCore::ScrollView::children):

2007-12-03  Holger Hans Peter Freyther  <holger.freyther@trolltech.com>

        Reviewed by Simon.

        * Implement GraphicsContext::fillRoundedRect similiar to the
        CoreGraphics implementation only addPath is not called this
        seems to be only needed for CoreGraphics.
        

        WARNING: NO TEST CASES ADDED OR CHANGED

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

2007-12-03  Holger Hans Peter Freyther  <holger.freyther@trolltech.com>

        Reviewed by Simon.

        * Coding Style fixes
        

        WARNING: NO TEST CASES ADDED OR CHANGED

        * platform/qt/ScrollViewQt.cpp:
        (WebCore::ScrollView::addChild):
        (WebCore::ScrollView::removeChild):

2007-12-03  Alp Toker  <alp@atoker.com>

        Reviewed by Mark Rowe.

        Don't delete the decoder if it's already been created. The one we have
        is fine.

        Cairo image cleanups. Nothing substantial.

        Notify ImageObservers where appropriate.

        * platform/graphics/cairo/ImageCairo.cpp:
        (WebCore::BitmapImage::draw):
        (WebCore::Image::drawPattern):
        * platform/graphics/cairo/ImageSourceCairo.cpp:
        (WebCore::ImageSource::setData):
        * platform/graphics/gtk/ImageGtk.cpp:

2007-12-03  Simon Hausmann  <hausmann@webkit.org>

        Reviewed by Lars.

        Fixed crash when rendering form elements with Qt 4.4

        QPainter::device() is not guaranteed to return a QWidget, so do the safe "cast" with the
        help of QPaintDevice::devType().
        Also fall back to the QApplication::style() if we don't have a widget.

        * platform/qt/RenderThemeQt.cpp:
        (WebCore::RenderThemeQt::paintButton):
        (WebCore::RenderThemeQt::paintTextField):
        (WebCore::RenderThemeQt::paintMenuList):
        (WebCore::RenderThemeQt::getStylePainterAndWidgetFromPaintInfo):

2007-12-02  Holger Hans Peter Freyther  <holger.freyther@trolltech.com>

        Reviewed by Sam Weinig.

        * Add FrameLoader::shouldTreatSchemeAsLocal which is similar to
        shouldTreatURLAsLocal.
        * Make use of FrameLoader::shouldTreatSchemeAsLocal in SecurityOrigin
        and do not hardcode "file". This is needed for the WebKit/qt port to make
        the Web Inspector work as it using the qrc protocol instead of file.


        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::shouldTreatSchemeAsLocal):
        * loader/FrameLoader.h:
        * platform/SecurityOrigin.cpp:
        (WebCore::SecurityOrigin::isSecureTransitionTo):

2007-12-02  Holger Hans Peter Freyther  <holger.freyther@trolltech.com>

        Rubber stamped by Sam Weinig.

        Only add applewebdata to the localSchemes when building for the
        mac. This is in preparation of adding qrc for the Qt port there
        as well and http://bugs.webkit.org/show_bug.cgi?id=15938.

        According to Anders applewebdata is not used on the win port.

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

2007-12-02  Holger Hans Peter Freyther  <holger.freyther@trolltech.com>

        Rubber stamped by Sam Weinig.

        Fix a typo. It is contains and not containts

        * loader/FrameLoader.cpp:

2007-12-03  Alp Toker  <alp@atoker.com>

        Add another missing DEPENDPATH.

        Noticed when fixing the build.

        * WebCore.pro:

2007-12-03  Adam Roben  <aroben@apple.com>

        Speculative Windows build fix

        * plugins/win/PluginViewWin.cpp:
        (WebCore::getString):

2007-12-03  Geoffrey Garen  <ggaren@apple.com>

        Build fix: added symbols to the right .exp file.

        * WebCore.base.exp:

2007-12-02  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Eric Seidel.

        Updated to match the JavaScriptCore change to move virtual methods from
        Interpreter to JSGlobalObject.
        
        Moved virtual ScriptInterpreter functions to Window.

2007-12-02  Darin Adler  <darin@apple.com>

        Reviewed by Mitz.

        - fix <rdar://problem/5601995> Hang/crash on http://ebay-uk.custhelp.com/

        There were two problems here:

            1) Incorrect HTMLCollection behavior led to us trying to insert a
               new row inside an existing row instead of next to it. The fix for
               this is to make HTMLCollection work better for table-related
               collections.

            2) HTMLTableRowElement::insertCell would return a bad pointer if
               the insertion failed. The code should have failed, but not crashed,
               so it's worth fixing that too.

        While fixing the HTMLCollection issues, I did some clean-up of that
        class and its derived classes.

        Test: fast/dom/HTMLTableElement/rows.html
        Test: fast/dom/HTMLTableElement/tBodies.html
        Test: fast/dom/HTMLTableRowElement/cells.html
        Test: fast/dom/HTMLTableRowElement/insertCell.html
        Test: fast/dom/HTMLTableSectionElement/rows.html

        * bindings/js/JSHTMLCollectionCustom.cpp:
        (WebCore::toJS): Updated because collectionType() was renamed to type().

        * html/HTMLCollection.cpp:
        (WebCore::HTMLCollection::HTMLCollection): Updated for data member name
        changes. Also added a protected constructor for use by derived classes
        that pass in a CollectionInfo.
        (WebCore::HTMLCollection::CollectionInfo::copyCacheMap): Moved out of
        the header.
        (WebCore::isTableSection): Added.
        (WebCore::HTMLCollection::itemAfter): Renamed from traverseNextItem,
        because the old name was grammatically incorrect and thus a bit confusing.
        Changed to operate on Element* instead of Node*, and use 0 to start
        rather than passing in the base node (required since the base node can be
        a document, which is not an element). Generalized the code that made
        NodeChildren not descend into deeper descendants so it can be used for
        TRCells, TSectionRows, TableTBodies, and TableRows. Reformatted the
        switch statement and got rid of the "found" boolean since we can just
        return when we find something. Got rid of the default case, and instead
        listed all the enum values. Also changed to use a for loop for clarity.
        (WebCore::HTMLCollection::calcLength): Updated for itemAfter changes.
        (WebCore::HTMLCollection::item): Ditto.
        (WebCore::HTMLCollection::nextItem): Ditto.
        (WebCore::HTMLCollection::checkForNameMatch): Updated to take an Element
        instead of a Node pointer.
        (WebCore::HTMLCollection::namedItem): More of the same.
        (WebCore::HTMLCollection::updateNameCache): Ditto.
        (WebCore::HTMLCollection::namedItems): Ditto.
        (WebCore::HTMLCollection::nextNamedItem): Ditto.
        (WebCore::HTMLCollection::tags): Ditto.

        * html/HTMLCollection.h: Added a type FormElements, so that the
        HTMLFormCollection would not have a type of DocImages, which is what
        it previously did. Changed the base parameter to be a PassRefPtr to
        make it clear we take ownership of it. Added a comment explaining
        why we should change the name CollectionInfo. Made a lot more members
        private instead of protected. Renamed traverseNextItem to itemAfter.
        Changed most functions to take Element* instead of Node*.

        * html/HTMLFormCollection.cpp:
        (WebCore::HTMLFormCollection::formCollectionInfo): Added.
        (WebCore::HTMLFormCollection::HTMLFormCollection): Updated to pass
        collection info into the base class.
        (WebCore::HTMLFormCollection::calcLength): Updated to use base() so we
        don't need to get at m_base directly.
        (WebCore::HTMLFormCollection::item): Same, but for info().
        (WebCore::HTMLFormCollection::getNamedItem): Removed unused first
        argument.
        (WebCore::HTMLFormCollection::getNamedFormItem): Got rid of unneeded
        checks that the base is still an element and still a form, since that's
        guaranteed.
        (WebCore::HTMLFormCollection::nextItem): Use info().
        (WebCore::HTMLFormCollection::nextNamedItemInternal): Node instead of
        Element, some name changes.
        (WebCore::HTMLFormCollection::namedItem): Update for changes elsewhere.
        (WebCore::HTMLFormCollection::nextNamedItem): Ditto, also rewrote loop
        to be much simpler.
        (WebCore::HTMLFormCollection::updateNameCache): More of the same.

        * html/HTMLFormCollection.h: Changed constructor to take an
        HTMLFormElement, using a PassRefPtr to communicate transfer of
        ownership. Made everything private instead of protected. Removed
        unneeded override of firstItem. Made getNamedItem and
        nextNamedItemInternal non-virtual. Removed unused first argument of
        getNamedItem. Added declaration of formCollectionInfo.

        * html/HTMLNameCollection.cpp:
        (WebCore::HTMLNameCollection::HTMLNameCollection): Updated to pass
        collection info into the base class.
        (WebCore::HTMLNameCollection::itemAfter): Reformatted a bit and
        changed into a for loop.

        * html/HTMLNameCollection.h: Updated for name changes. Made function
        private instead of public. Used PassRefPtr in constructor.

        * html/HTMLOptionsCollection.cpp:
        (WebCore::HTMLOptionsCollection::HTMLOptionsCollection): Updated to
        pass collection info into the base class.
        (WebCore::HTMLOptionsCollection::add): Updated for public/private
        changes in the base class.
        (WebCore::HTMLOptionsCollection::selectedIndex): Ditto.
        (WebCore::HTMLOptionsCollection::setSelectedIndex): Ditto.
        (WebCore::HTMLOptionsCollection::setLength): Ditto.

        * html/HTMLOptionsCollection.h: Changed constructor parameter to be a
        PassRefPtr.

        * html/HTMLTableRowElement.cpp:
        (WebCore::HTMLTableRowElement::insertCell): Changed code to use RefPtr
        and PassRefPtr since this creates a new object. This alone fixed the
        crash. Also cleaned up logic a bit to be more readable.

        * html/HTMLTableRowElement.h: Changed insertCell to return a PassRefPtr.
        Also reordered functions a bit to make things a little more logical and
        removed the unused ncols data member.

        * html/HTMLTableSectionElement.cpp:
        (WebCore::HTMLTableSectionElement::rows): Pass TSectionRows, not
        TableRows. This mistake was harmless before because TableRows and
        TSectionRows were handled identically inside HTMLCollection, but that is
        no longer the case with this fix.

        * bindings/scripts/CodeGeneratorJS.pm: Add an include to cope with the
        fact that HTMLOptionsCollection no longer includes HTMLOptionElement.
        I don't think this really should be a special case -- might be worth
        returning later to see if this can be optimized.

2007-12-02  Nikolas Zimmermann  <zimmermann@kde.org>

        Reviewed by Adam.

        RenderSVGViewportContainer sets wrong width/height.
        Share code with RenderSVGContainer in a central calcBounds() function.

        Fixes:
        - svg/custom/use-css-events.svg (http://bugs.webkit.org/show_bug.cgi?id=15403)
        - svg/custom/deep-dynamic-updates.svg
        - svg/custom/use-clipped-hit.svg
        - svg/custom/image-clipped-hit.svg

        * rendering/RenderSVGContainer.cpp:
        (WebCore::RenderSVGContainer::layout):
        (WebCore::RenderSVGContainer::calcBounds):
        * rendering/RenderSVGContainer.h:
        * rendering/RenderSVGViewportContainer.cpp:
        (WebCore::RenderSVGViewportContainer::layout):

2007-12-02  Brady Eidson <beidson@apple.com>

        Reviewed by Darin

        databaseChanged notifications were being sent out on the database thread - they need to be on the main thread
        like all other notifications we send out!

        * platform/SecurityOriginData.cpp:
        (WebCore::SecurityOriginData::copy): Add a deep copy method, for when an object thread hops
        * platform/SecurityOriginData.h:

        * storage/DatabaseTracker.cpp:
        (WebCore::notificationMutex):
        (WebCore::notificationQueue):
        (WebCore::DatabaseTracker::scheduleNotifyDatabaseChanged): Add the origin/name pair to a queue
        (WebCore::DatabaseTracker::scheduleForNotification): Schedule to deliver this queue of notifications
          on the main thread
        (WebCore::DatabaseTracker::notifyDatabasesChanged): Deliver all notifications in the queue
        * storage/DatabaseTracker.h:

        * storage/SQLTransaction.cpp:
        (WebCore::SQLTransaction::postflightAndCommit): scheduleNotifyDatabaseChanged() instead of "notify now!"
        (WebCore::SQLTransaction::cleanupAfterTransactionErrorCallback): Ditto

2007-12-02  Rob Buis  <buis@kde.org>

        Reviewed by Darin.

        http://bugs.webkit.org/show_bug.cgi?id=16002
        Load SVG (and other) UA StyleSheets dynamically when needed

        Load svg sheet when needed.

        * css/CSSStyleSelector.cpp:
        (WebCore::screenEval):
        (WebCore::printEval):
        (WebCore::CSSStyleSelector::CSSStyleSelector):
        (WebCore::CSSStyleSelector::loadDefaultStyle):
        (WebCore::CSSStyleSelector::styleForElement):
        (WebCore::CSSRuleSet::addRulesFromSheet):

2007-12-02  Mark Rowe  <mrowe@apple.com>

        Try and fix the Windows build.

        * plugins/win/PluginViewWin.cpp:
        (WebCore::PluginViewWin::bindingInstance):

2007-12-02  Nikolas Zimmermann  <zimmermann@kde.org>

        Rubber stamped by Eric.

        Move platform/graphics/svg to graphics/svg as discussed on webkit-dev.
        Updated all project files.

        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * platform/graphics/svg: Removed.
        * platform/graphics/svg/SVGImage.cpp: Removed.
        * platform/graphics/svg/SVGImage.h: Removed.
        * platform/graphics/svg/SVGImageEmptyClients.h: Removed.
        * platform/graphics/svg/SVGPaintServer.cpp: Removed.
        * platform/graphics/svg/SVGPaintServer.h: Removed.
        * platform/graphics/svg/SVGPaintServerGradient.cpp: Removed.
        * platform/graphics/svg/SVGPaintServerGradient.h: Removed.
        * platform/graphics/svg/SVGPaintServerLinearGradient.cpp: Removed.
        * platform/graphics/svg/SVGPaintServerLinearGradient.h: Removed.
        * platform/graphics/svg/SVGPaintServerPattern.cpp: Removed.
        * platform/graphics/svg/SVGPaintServerPattern.h: Removed.
        * platform/graphics/svg/SVGPaintServerRadialGradient.cpp: Removed.
        * platform/graphics/svg/SVGPaintServerRadialGradient.h: Removed.
        * platform/graphics/svg/SVGPaintServerSolid.cpp: Removed.
        * platform/graphics/svg/SVGPaintServerSolid.h: Removed.
        * platform/graphics/svg/SVGResource.cpp: Removed.
        * platform/graphics/svg/SVGResource.h: Removed.
        * platform/graphics/svg/SVGResourceClipper.cpp: Removed.
        * platform/graphics/svg/SVGResourceClipper.h: Removed.
        * platform/graphics/svg/SVGResourceFilter.cpp: Removed.
        * platform/graphics/svg/SVGResourceFilter.h: Removed.
        * platform/graphics/svg/SVGResourceListener.h: Removed.
        * platform/graphics/svg/SVGResourceMarker.cpp: Removed.
        * platform/graphics/svg/SVGResourceMarker.h: Removed.
        * platform/graphics/svg/SVGResourceMasker.cpp: Removed.
        * platform/graphics/svg/SVGResourceMasker.h: Removed.
        * platform/graphics/svg/cairo: Removed.
        * platform/graphics/svg/cairo/RenderPathCairo.cpp: Removed.
        * platform/graphics/svg/cairo/SVGPaintServerCairo.cpp: Removed.
        * platform/graphics/svg/cairo/SVGPaintServerGradientCairo.cpp: Removed.
        * platform/graphics/svg/cairo/SVGPaintServerPatternCairo.cpp: Removed.
        * platform/graphics/svg/cairo/SVGPaintServerSolidCairo.cpp: Removed.
        * platform/graphics/svg/cairo/SVGResourceClipperCairo.cpp: Removed.
        * platform/graphics/svg/cairo/SVGResourceMaskerCairo.cpp: Removed.
        * platform/graphics/svg/cg: Removed.
        * platform/graphics/svg/cg/CgSupport.cpp: Removed.
        * platform/graphics/svg/cg/CgSupport.h: Removed.
        * platform/graphics/svg/cg/RenderPathCg.cpp: Removed.
        * platform/graphics/svg/cg/SVGPaintServerCg.cpp: Removed.
        * platform/graphics/svg/cg/SVGPaintServerGradientCg.cpp: Removed.
        * platform/graphics/svg/cg/SVGPaintServerPatternCg.cpp: Removed.
        * platform/graphics/svg/cg/SVGPaintServerSolidCg.cpp: Removed.
        * platform/graphics/svg/cg/SVGResourceClipperCg.cpp: Removed.
        * platform/graphics/svg/cg/SVGResourceFilterCg.cpp: Removed.
        * platform/graphics/svg/cg/SVGResourceFilterCg.mm: Removed.
        * platform/graphics/svg/cg/SVGResourceMaskerCg.cpp: Removed.
        * platform/graphics/svg/cg/SVGResourceMaskerCg.mm: Removed.
        * platform/graphics/svg/filters: Removed.
        * platform/graphics/svg/filters/SVGDistantLightSource.h: Removed.
        * platform/graphics/svg/filters/SVGFEBlend.cpp: Removed.
        * platform/graphics/svg/filters/SVGFEBlend.h: Removed.
        * platform/graphics/svg/filters/SVGFEColorMatrix.cpp: Removed.
        * platform/graphics/svg/filters/SVGFEColorMatrix.h: Removed.
        * platform/graphics/svg/filters/SVGFEComponentTransfer.cpp: Removed.
        * platform/graphics/svg/filters/SVGFEComponentTransfer.h: Removed.
        * platform/graphics/svg/filters/SVGFEComposite.cpp: Removed.
        * platform/graphics/svg/filters/SVGFEComposite.h: Removed.
        * platform/graphics/svg/filters/SVGFEConvolveMatrix.cpp: Removed.
        * platform/graphics/svg/filters/SVGFEConvolveMatrix.h: Removed.
        * platform/graphics/svg/filters/SVGFEDiffuseLighting.cpp: Removed.
        * platform/graphics/svg/filters/SVGFEDiffuseLighting.h: Removed.
        * platform/graphics/svg/filters/SVGFEDisplacementMap.cpp: Removed.
        * platform/graphics/svg/filters/SVGFEDisplacementMap.h: Removed.
        * platform/graphics/svg/filters/SVGFEFlood.cpp: Removed.
        * platform/graphics/svg/filters/SVGFEFlood.h: Removed.
        * platform/graphics/svg/filters/SVGFEGaussianBlur.cpp: Removed.
        * platform/graphics/svg/filters/SVGFEGaussianBlur.h: Removed.
        * platform/graphics/svg/filters/SVGFEImage.cpp: Removed.
        * platform/graphics/svg/filters/SVGFEImage.h: Removed.
        * platform/graphics/svg/filters/SVGFEMerge.cpp: Removed.
        * platform/graphics/svg/filters/SVGFEMerge.h: Removed.
        * platform/graphics/svg/filters/SVGFEMorphology.cpp: Removed.
        * platform/graphics/svg/filters/SVGFEMorphology.h: Removed.
        * platform/graphics/svg/filters/SVGFEOffset.cpp: Removed.
        * platform/graphics/svg/filters/SVGFEOffset.h: Removed.
        * platform/graphics/svg/filters/SVGFESpecularLighting.cpp: Removed.
        * platform/graphics/svg/filters/SVGFESpecularLighting.h: Removed.
        * platform/graphics/svg/filters/SVGFETile.h: Removed.
        * platform/graphics/svg/filters/SVGFETurbulence.cpp: Removed.
        * platform/graphics/svg/filters/SVGFETurbulence.h: Removed.
        * platform/graphics/svg/filters/SVGFilterEffect.cpp: Removed.
        * platform/graphics/svg/filters/SVGFilterEffect.h: Removed.
        * platform/graphics/svg/filters/SVGLightSource.cpp: Removed.
        * platform/graphics/svg/filters/SVGLightSource.h: Removed.
        * platform/graphics/svg/filters/SVGPointLightSource.h: Removed.
        * platform/graphics/svg/filters/SVGSpotLightSource.h: Removed.
        * platform/graphics/svg/filters/cg: Removed.
        * platform/graphics/svg/filters/cg/SVGFEBlendCg.mm: Removed.
        * platform/graphics/svg/filters/cg/SVGFEColorMatrixCg.mm: Removed.
        * platform/graphics/svg/filters/cg/SVGFEComponentTransferCg.mm: Removed.
        * platform/graphics/svg/filters/cg/SVGFECompositeCg.mm: Removed.
        * platform/graphics/svg/filters/cg/SVGFEDiffuseLightingCg.mm: Removed.
        * platform/graphics/svg/filters/cg/SVGFEDisplacementMapCg.mm: Removed.
        * platform/graphics/svg/filters/cg/SVGFEFloodCg.mm: Removed.
        * platform/graphics/svg/filters/cg/SVGFEGaussianBlurCg.mm: Removed.
        * platform/graphics/svg/filters/cg/SVGFEHelpersCg.h: Removed.
        * platform/graphics/svg/filters/cg/SVGFEHelpersCg.mm: Removed.
        * platform/graphics/svg/filters/cg/SVGFEImageCg.mm: Removed.
        * platform/graphics/svg/filters/cg/SVGFEMergeCg.mm: Removed.
        * platform/graphics/svg/filters/cg/SVGFEOffsetCg.mm: Removed.
        * platform/graphics/svg/filters/cg/SVGFESpecularLightingCg.mm: Removed.
        * platform/graphics/svg/filters/cg/SVGFETileCg.mm: Removed.
        * platform/graphics/svg/filters/cg/SVGFilterEffectCg.mm: Removed.
        * platform/graphics/svg/filters/cg/WKArithmeticFilter.cikernel: Removed.
        * platform/graphics/svg/filters/cg/WKArithmeticFilter.h: Removed.
        * platform/graphics/svg/filters/cg/WKArithmeticFilter.m: Removed.
        * platform/graphics/svg/filters/cg/WKComponentMergeFilter.cikernel: Removed.
        * platform/graphics/svg/filters/cg/WKComponentMergeFilter.h: Removed.
        * platform/graphics/svg/filters/cg/WKComponentMergeFilter.m: Removed.
        * platform/graphics/svg/filters/cg/WKDiffuseLightingFilter.cikernel: Removed.
        * platform/graphics/svg/filters/cg/WKDiffuseLightingFilter.h: Removed.
        * platform/graphics/svg/filters/cg/WKDiffuseLightingFilter.m: Removed.
        * platform/graphics/svg/filters/cg/WKDiscreteTransferFilter.cikernel: Removed.
        * platform/graphics/svg/filters/cg/WKDiscreteTransferFilter.h: Removed.
        * platform/graphics/svg/filters/cg/WKDiscreteTransferFilter.m: Removed.
        * platform/graphics/svg/filters/cg/WKDisplacementMapFilter.cikernel: Removed.
        * platform/graphics/svg/filters/cg/WKDisplacementMapFilter.h: Removed.
        * platform/graphics/svg/filters/cg/WKDisplacementMapFilter.m: Removed.
        * platform/graphics/svg/filters/cg/WKDistantLightFilter.cikernel: Removed.
        * platform/graphics/svg/filters/cg/WKDistantLightFilter.h: Removed.
        * platform/graphics/svg/filters/cg/WKDistantLightFilter.m: Removed.
        * platform/graphics/svg/filters/cg/WKGammaTransferFilter.cikernel: Removed.
        * platform/graphics/svg/filters/cg/WKGammaTransferFilter.h: Removed.
        * platform/graphics/svg/filters/cg/WKGammaTransferFilter.m: Removed.
        * platform/graphics/svg/filters/cg/WKIdentityTransferFilter.h: Removed.
        * platform/graphics/svg/filters/cg/WKIdentityTransferFilter.m: Removed.
        * platform/graphics/svg/filters/cg/WKLinearTransferFilter.cikernel: Removed.
        * platform/graphics/svg/filters/cg/WKLinearTransferFilter.h: Removed.
        * platform/graphics/svg/filters/cg/WKLinearTransferFilter.m: Removed.
        * platform/graphics/svg/filters/cg/WKNormalMapFilter.cikernel: Removed.
        * platform/graphics/svg/filters/cg/WKNormalMapFilter.h: Removed.
        * platform/graphics/svg/filters/cg/WKNormalMapFilter.m: Removed.
        * platform/graphics/svg/filters/cg/WKPointLightFilter.cikernel: Removed.
        * platform/graphics/svg/filters/cg/WKPointLightFilter.h: Removed.
        * platform/graphics/svg/filters/cg/WKPointLightFilter.m: Removed.
        * platform/graphics/svg/filters/cg/WKSpecularLightingFilter.cikernel: Removed.
        * platform/graphics/svg/filters/cg/WKSpecularLightingFilter.h: Removed.
        * platform/graphics/svg/filters/cg/WKSpecularLightingFilter.m: Removed.
        * platform/graphics/svg/filters/cg/WKSpotLightFilter.cikernel: Removed.
        * platform/graphics/svg/filters/cg/WKSpotLightFilter.h: Removed.
        * platform/graphics/svg/filters/cg/WKSpotLightFilter.m: Removed.
        * platform/graphics/svg/filters/cg/WKTableTransferFilter.cikernel: Removed.
        * platform/graphics/svg/filters/cg/WKTableTransferFilter.h: Removed.
        * platform/graphics/svg/filters/cg/WKTableTransferFilter.m: Removed.
        * platform/graphics/svg/mac: Removed.
        * platform/graphics/svg/mac/SVGResourceFilterPlatformDataMac.h: Removed.
        * platform/graphics/svg/mac/SVGResourceFilterPlatformDataMac.mm: Removed.
        * platform/graphics/svg/qt: Removed.
        * platform/graphics/svg/qt/RenderPathQt.cpp: Removed.
        * platform/graphics/svg/qt/SVGPaintServerGradientQt.cpp: Removed.
        * platform/graphics/svg/qt/SVGPaintServerLinearGradientQt.cpp: Removed.
        * platform/graphics/svg/qt/SVGPaintServerPatternQt.cpp: Removed.
        * platform/graphics/svg/qt/SVGPaintServerQt.cpp: Removed.
        * platform/graphics/svg/qt/SVGPaintServerRadialGradientQt.cpp: Removed.
        * platform/graphics/svg/qt/SVGPaintServerSolidQt.cpp: Removed.
        * platform/graphics/svg/qt/SVGResourceClipperQt.cpp: Removed.
        * platform/graphics/svg/qt/SVGResourceFilterQt.cpp: Removed.
        * platform/graphics/svg/qt/SVGResourceMaskerQt.cpp: Removed.
        * svg/graphics: Copied from platform/graphics/svg.

2007-12-02  Nikolas Zimmermann  <zimmermann@kde.org>

        Reviewed by Maciej.

        Fix IDL lookup in subdirectories. Missing 'my' prefix for the 'thisDir' variable.
        When entering subdirectories the 'thisDir' variable got altered - see snippet:

        THISDIR: WebCore/page FOUND FILE: FrameView.h (endCondition: 0)
        ..
        -> ENTER: WebCore/page/gtk (THIS DIR: WebCore/page)
        ...
        <- LEAVE: WebCore/page/gtk (THIS DIR: WebCore/page/gtk)
        THISDIR: WebCore/page/gtk FOUND FILE: History.cpp (endCondition: 0)

        'History.cpp' is located in WebCore/page not WebCore/page/gtk.

        * bindings/scripts/CodeGenerator.pm:

2007-12-01  Alp Toker  <alp@atoker.com>

        Reviewed by Adam Roben.

        Add the newly introduced webkit.h convenience header.

        * WebCore.pro:

2007-12-01  Antti Koivisto  <antti@apple.com>

        Reviewed by Adam.
        
        - Fix crash when removing a loading media element from the tree.
        - Follow the spec by invoking pause() when element is removed from the tree instead of unloading.

        Tests: http/tests/media/remove-while-loading.html
               media/remove-from-document.html

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::removedFromDocument):

2007-12-01  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Beth Dakin.

        Restored the test string in this test.

        * manual-tests/window-open-features-parsing.html:

2007-11-30  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Beth Dakin.
        
        Modified WebCore to follow the new JSGlobalObject/Interpreter ownership
        rules in JavaScriptCore.

        * bindings/js/kjs_binding.cpp:
        * bindings/js/kjs_binding.h: Removed stale, unused 
        interpreterForGlobalObject().

        * bindings/js/kjs_proxy.cpp: Changed to store a global object, rather
        than an interpreter.
        (WebCore::KJSProxy::finishedWithEvent): Need to NULL check 
        m_globalObject here because we no longer unnecessarily instantiate it.

        * bindings/js/kjs_window.cpp:
        (KJS::ScheduledAction::execute):
        * bindings/js/kjs_window.h: Removed redundant and less efficient 
        interpreter() function -- global objects have direct access to their
        interpreters now.

        Changed these functions to pass around JSGlobalObjects instead of 
        Interpreters:

        * page/Frame.cpp:
        (WebCore::Frame::bindingRootObject):
        (WebCore::Frame::createRootObject):
        * page/Frame.h:
        * page/mac/WebCoreFrameBridge.mm:
        (createRootObject):

2007-12-01  Darin Adler  <darin@apple.com>

        Reviewed by Mitz.

        - fix problem tracked by these bugs:
          http://bugs.webkit.org/show_bug.cgi?id=16097
          <rdar://problem/5619305> Safari crashes during load of LexisNexis search results
          <rdar://problem/5510779> CrashTracer: [USER] 25 crashes in Safari at
          WebCore::DocumentLoader::isLoadingMultipartContent const

        * loader/ImageDocument.cpp:
        (WebCore::ImageDocument::createDocumentStructure): Create an ImageDocumentElement
        instead of an HTMLImageElement.
        (WebCore::ImageDocument::scale): Added a null check for m_imageElement.
        (WebCore::ImageDocument::resizeImageToFit): Ditto.
        (WebCore::ImageDocument::restoreImageSize): Ditto.
        (WebCore::ImageDocument::imageFitsInWindow): Ditto.
        (WebCore::ImageDocument::windowSizeChanged): Ditto.
        (WebCore::ImageDocumentElement::~ImageDocumentElement): Call
        disconnectImageElement so m_imageElement will be set to 0
         if we're still connected to the document.
        (WebCore::ImageDocumentElement::willMoveToNewOwnerDocument): Ditto.

        * loader/ImageDocument.h: Changed image element type to be
        ImageDocumentElement instead of HTMLImageElement. Also added
        a disconnectImageElement function that sets m_imageElement to 0.

2007-12-01  Darin Adler  <darin@apple.com>

        - remove the empty directories

        * ksvg2: Removed.
        * ksvg2/css: Removed.
        * ksvg2/events: Removed.
        * ksvg2/misc: Removed.
        * ksvg2/scripts: Removed.

2007-12-01  Julien Chaffraix  <julien.chaffraix@gmail.com>

        Bug 16189: XMLHttpRequest::setRequestHeader() should not set certain headers

        Reviewed by Darin Adler.

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

        Test: http/tests/xmlhttprequest/set-dangerous-headers.html

2007-12-01  Rahul Abrol  <ra5ul@comcast.net>

        Reviewed by Adam Roben.

        http://bugs.webkit.org/show_bug.cgi?id=16128
        Ignore resizable=no for window.open().

        * bindings/js/kjs_window.cpp:
        (KJS::setWindowFeature):
        (KJS::parseWindowFeatures):
        * manual-tests/window-open-features-parsing.html:

2007-12-01  Dan Bernstein  <mitz@apple.com>

        Reviewed by Darin Adler.

        - fix <rdar://problem/5619240> REGRESSION (Leopard-r28069): Reproducible crash with a Mootools-based calendar picker (jump to null in FrameView::layout)

        Test: fast/dynamic/subtree-common-root.html

        * page/FrameView.cpp:
        (WebCore::FrameView::layoutRoot): Added a parameter to let this method
        return the layout root for a pending layout as well.
        (WebCore::FrameView::scheduleRelayoutOfSubtree): Pass the new root
        to markContainingBlocksForLayout(). Otherwise,
        markContainingBlocksForLayout() could mark past the new root, if it had
        previously been marked as having a normal child needing layout and then
        was reached via a positioned child.
        * page/FrameView.h:
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::calcWidth):
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::~RenderObject): Fixed the ASSERT so that
        it would really catch deletion of the layout root.
        (WebCore::RenderObject::markContainingBlocksForLayout): Added the
        newRoot parameter, which tells this method where to stop marking.
        * rendering/RenderObject.h:

2007-12-01  Dan Bernstein  <mitz@apple.com>

        Reviewed by Darin Adler.

        - fold FontStyle into TextRun

        * WebCore.xcodeproj/project.pbxproj:
        * platform/graphics/Font.cpp:
        (WebCore::WidthIterator::WidthIterator):
        (WebCore::WidthIterator::advance):
        (WebCore::Font::width):
        (WebCore::Font::drawSimpleText):
        (WebCore::Font::drawGlyphBuffer):
        (WebCore::Font::drawText):
        (WebCore::Font::floatWidth):
        (WebCore::Font::floatWidthForSimpleText):
        (WebCore::Font::selectionRectForText):
        (WebCore::Font::selectionRectForSimpleText):
        (WebCore::Font::offsetForPosition):
        (WebCore::Font::offsetForPositionForSimpleText):
        * platform/graphics/Font.h:
        (WebCore::TextRun::TextRun):
        (WebCore::TextRun::setText):
        (WebCore::TextRun::allowTabs):
        (WebCore::TextRun::xPos):
        (WebCore::TextRun::padding):
        (WebCore::TextRun::rtl):
        (WebCore::TextRun::ltr):
        (WebCore::TextRun::directionalOverride):
        (WebCore::TextRun::applyRunRounding):
        (WebCore::TextRun::applyWordRounding):
        (WebCore::TextRun::spacingDisabled):
        (WebCore::TextRun::disableSpacing):
        (WebCore::TextRun::disableRoundingHacks):
        (WebCore::TextRun::setRTL):
        (WebCore::TextRun::setDirectionalOverride):
        * platform/graphics/FontStyle.h: Removed.
        * platform/graphics/GraphicsContext.cpp:
        (WebCore::GraphicsContext::drawText):
        (WebCore::GraphicsContext::drawBidiText):
        (WebCore::GraphicsContext::drawHighlightForText):
        * platform/graphics/GraphicsContext.h:
        * platform/graphics/StringTruncator.cpp:
        (WebCore::stringWidth):
        * platform/graphics/gtk/FontGtk.cpp:
        (WebCore::Font::drawComplexText):
        (WebCore::Font::floatWidthForComplexText):
        (WebCore::Font::offsetForPositionForComplexText):
        (WebCore::Font::selectionRectForComplexText):
        * platform/graphics/mac/FontMac.mm:
        (WebCore::ATSULayoutParameters::ATSULayoutParameters):
        (WebCore::addDirectionalOverride):
        (WebCore::overrideLayoutOperation):
        (WebCore::ATSULayoutParameters::initialize):
        (WebCore::Font::selectionRectForComplexText):
        (WebCore::Font::drawComplexText):
        (WebCore::Font::floatWidthForComplexText):
        (WebCore::Font::offsetForPositionForComplexText):
        * platform/graphics/qt/FontQt.cpp:
        (WebCore::generateComponents):
        (WebCore::Font::drawText):
        (WebCore::Font::width):
        (WebCore::Font::offsetForPosition):
        (WebCore::cursorToX):
        (WebCore::Font::selectionRectForText):
        * platform/graphics/win/FontWin.cpp:
        (WebCore::Font::selectionRectForComplexText):
        (WebCore::Font::drawComplexText):
        (WebCore::Font::floatWidthForComplexText):
        (WebCore::Font::offsetForPositionForComplexText):
        * platform/graphics/wx/FontWx.cpp:
        (WebCore::Font::selectionRectForComplexText):
        (WebCore::Font::drawComplexText):
        (WebCore::Font::floatWidthForComplexText):
        (WebCore::Font::offsetForPositionForComplexText):
        * platform/mac/WebCoreTextRenderer.mm:
        (WebCoreDrawTextAtPoint):
        (WebCoreTextFloatWidth):
        * platform/win/PopupMenuWin.cpp:
        (WebCore::PopupMenu::paint):
        * platform/win/UniscribeController.cpp:
        (WebCore::UniscribeController::UniscribeController):
        (WebCore::UniscribeController::offsetForPosition):
        (WebCore::UniscribeController::advance):
        (WebCore::UniscribeController::itemizeShapeAndPlace):
        (WebCore::UniscribeController::resetControlAndState):
        (WebCore::UniscribeController::shapeAndPlaceItem):
        * platform/win/UniscribeController.h:
        * platform/win/WebCoreTextRenderer.cpp:
        (WebCore::doDrawTextAtPoint):
        * rendering/EllipsisBox.cpp:
        (WebCore::EllipsisBox::paint):
        * rendering/InlineTextBox.cpp:
        (WebCore::InlineTextBox::selectionRect):
        (WebCore::InlineTextBox::paint):
        (WebCore::InlineTextBox::paintSelection):
        (WebCore::InlineTextBox::paintCompositionBackground):
        (WebCore::InlineTextBox::paintSpellingOrGrammarMarker):
        (WebCore::InlineTextBox::paintTextMatchMarker):
        (WebCore::InlineTextBox::offsetForPosition):
        (WebCore::InlineTextBox::positionForOffset):
        * rendering/RenderFileUploadControl.cpp:
        (WebCore::RenderFileUploadControl::paintObject):
        (WebCore::RenderFileUploadControl::calcPrefWidths):
        * rendering/RenderImage.cpp:
        * rendering/RenderListBox.cpp:
        (WebCore::RenderListBox::updateFromElement):
        (WebCore::RenderListBox::paintItemForeground):
        * rendering/RenderMenuList.cpp:
        (WebCore::RenderMenuList::updateOptionsWidth):
        * rendering/RenderText.cpp:
        (WebCore::RenderText::widthFromCache):
        (WebCore::RenderText::calcPrefWidths):
        (WebCore::RenderText::width):
        * rendering/RenderText.h:
        (WebCore::RenderText::allowTabs):
        * rendering/RenderTextControl.cpp:
        (WebCore::RenderTextControl::calcPrefWidths):
        * rendering/SVGInlineTextBox.cpp:
        (WebCore::SVGInlineTextBox::calculateGlyphWidth):
        (WebCore::SVGInlineTextBox::paintCharacters):
        (WebCore::SVGInlineTextBox::paintSelection):
        * rendering/SVGRootInlineBox.cpp:
        (WebCore::SVGRootInlineBoxPaintWalker::chunkPortionCallback):
        (WebCore::cummulatedWidthOfInlineBoxCharacterRange):
        (WebCore::svgTextRunForInlineTextBox):
        * rendering/SVGRootInlineBox.h:

2007-12-01  Adam Treat  <treat@kde.org>

        Reviewed by Simon.

        * Don't hide symbols when in Debug mode
        * On Linux (glibc) provide a backtrace in the test output for debugging purposes

        * WebCore.pro:

2007-11-30  Alp Toker  <alp@atoker.com>

        Reviewed by Adam Roben.

        http://bugs.webkit.org/show_bug.cgi?id=15691
        [GTK] Public API does not follow GTK+ conventions

        Refactor the WebKit/GTK+ public API. Changes:
          WebKitPage -> WebKitWebView
          WebKitFrame -> WebKitWebFrame

        Public API source and header names have been updated to mirror the API
        changes.

        The API is now kept in WebKit/gtk/WebView to match other ports in the
        same class such as Mac and Win.

        * WebCore.pro:

2007-11-30   Anders Carlsson  <andersca@apple.com>

        Add platform/text project group.
        
        * WebCore.vcproj/WebCore.vcproj:

2007-11-30   Anders Carlsson  <andersca@apple.com>

        Remove extra </Filter> tag which prevented the vcproj from being parsed correctly.
        
        * WebCore.vcproj/WebCore.vcproj:

2007-11-30  Nikolas Zimmermann  <zimmermann@kde.org>

        Not reviewed. Try to fix qt/gtk build.

        * WebCore.pro:

2007-11-30  Nikolas Zimmermann  <zimmermann@kde.org>

        Rubber stamped by Eric.

        Final integration of ksvg2 in WebKit. Moving ksvg2/ to svg/ and killing all it's subdirectories,
        by moving the files into approriate locations (css, rendering, ...) - as dicsussed on the
        mailing list and on IRC with David/Darin & Eric.

        Updated all build files - though I can't guarantee it builds on non-mac. Need buildbot to verify.

        * DerivedSources.make:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSSVGLazyEventListener.cpp: Copied from ksvg2/events/JSSVGLazyEventListener.cpp.
        * bindings/js/JSSVGLazyEventListener.h: Copied from ksvg2/events/JSSVGLazyEventListener.h.
        * css/SVGCSSComputedStyleDeclaration.cpp: Copied from ksvg2/css/SVGCSSComputedStyleDeclaration.cpp.
        * css/SVGCSSParser.cpp: Copied from ksvg2/css/SVGCSSParser.cpp.
        * css/SVGCSSPropertyNames.in: Copied from ksvg2/css/SVGCSSPropertyNames.in.
        * css/SVGCSSStyleSelector.cpp: Copied from ksvg2/css/SVGCSSStyleSelector.cpp.
        * css/SVGCSSValueKeywords.in: Copied from ksvg2/css/SVGCSSValueKeywords.in.
        * dom/make_names.pl: Copied from ksvg2/scripts/make_names.pl.
        * ksvg2/css/SVGCSSComputedStyleDeclaration.cpp: Removed.
        * ksvg2/css/SVGCSSParser.cpp: Removed.
        * ksvg2/css/SVGCSSPropertyNames.in: Removed.
        * ksvg2/css/SVGCSSStyleSelector.cpp: Removed.
        * ksvg2/css/SVGCSSValueKeywords.in: Removed.
        * ksvg2/css/SVGRenderStyle.cpp: Removed.
        * ksvg2/css/SVGRenderStyle.h: Removed.
        * ksvg2/css/SVGRenderStyleDefs.cpp: Removed.
        * ksvg2/css/SVGRenderStyleDefs.h: Removed.
        * ksvg2/events/JSSVGLazyEventListener.cpp: Removed.
        * ksvg2/events/JSSVGLazyEventListener.h: Removed.
        * ksvg2/events/SVGZoomEvent.cpp: Removed.
        * ksvg2/events/SVGZoomEvent.h: Removed.
        * ksvg2/events/SVGZoomEvent.idl: Removed.
        * ksvg2/misc/PointerEventsHitRules.cpp: Removed.
        * ksvg2/misc/PointerEventsHitRules.h: Removed.
        * ksvg2/misc/SVGDocumentExtensions.cpp: Removed.
        * ksvg2/misc/SVGDocumentExtensions.h: Removed.
        * ksvg2/misc/SVGImageLoader.cpp: Removed.
        * ksvg2/misc/SVGImageLoader.h: Removed.
        * ksvg2/misc/SVGTimer.cpp: Removed.
        * ksvg2/misc/SVGTimer.h: Removed.
        * ksvg2/misc/TimeScheduler.cpp: Removed.
        * ksvg2/misc/TimeScheduler.h: Removed.
        * ksvg2/misc/xlinkattrs.in: Removed.
        * ksvg2/scripts/make_names.pl: Removed.
        * ksvg2/svg: Removed.
        * ksvg2/svg/ColorDistance.cpp: Removed.
        * ksvg2/svg/ColorDistance.h: Removed.
        * ksvg2/svg/GradientAttributes.h: Removed.
        * ksvg2/svg/LinearGradientAttributes.h: Removed.
        * ksvg2/svg/PatternAttributes.h: Removed.
        * ksvg2/svg/RadialGradientAttributes.h: Removed.
        * ksvg2/svg/SVGAElement.cpp: Removed.
        * ksvg2/svg/SVGAElement.h: Removed.
        * ksvg2/svg/SVGAElement.idl: Removed.
        * ksvg2/svg/SVGAngle.cpp: Removed.
        * ksvg2/svg/SVGAngle.h: Removed.
        * ksvg2/svg/SVGAngle.idl: Removed.
        * ksvg2/svg/SVGAnimateColorElement.cpp: Removed.
        * ksvg2/svg/SVGAnimateColorElement.h: Removed.
        * ksvg2/svg/SVGAnimateColorElement.idl: Removed.
        * ksvg2/svg/SVGAnimateElement.cpp: Removed.
        * ksvg2/svg/SVGAnimateElement.h: Removed.
        * ksvg2/svg/SVGAnimateElement.idl: Removed.
        * ksvg2/svg/SVGAnimateMotionElement.cpp: Removed.
        * ksvg2/svg/SVGAnimateMotionElement.h: Removed.
        * ksvg2/svg/SVGAnimateTransformElement.cpp: Removed.
        * ksvg2/svg/SVGAnimateTransformElement.h: Removed.
        * ksvg2/svg/SVGAnimateTransformElement.idl: Removed.
        * ksvg2/svg/SVGAnimatedAngle.idl: Removed.
        * ksvg2/svg/SVGAnimatedBoolean.idl: Removed.
        * ksvg2/svg/SVGAnimatedEnumeration.idl: Removed.
        * ksvg2/svg/SVGAnimatedInteger.idl: Removed.
        * ksvg2/svg/SVGAnimatedLength.idl: Removed.
        * ksvg2/svg/SVGAnimatedLengthList.idl: Removed.
        * ksvg2/svg/SVGAnimatedNumber.idl: Removed.
        * ksvg2/svg/SVGAnimatedNumberList.idl: Removed.
        * ksvg2/svg/SVGAnimatedPathData.cpp: Removed.
        * ksvg2/svg/SVGAnimatedPathData.h: Removed.
        * ksvg2/svg/SVGAnimatedPathData.idl: Removed.
        * ksvg2/svg/SVGAnimatedPoints.cpp: Removed.
        * ksvg2/svg/SVGAnimatedPoints.h: Removed.
        * ksvg2/svg/SVGAnimatedPoints.idl: Removed.
        * ksvg2/svg/SVGAnimatedPreserveAspectRatio.idl: Removed.
        * ksvg2/svg/SVGAnimatedRect.idl: Removed.
        * ksvg2/svg/SVGAnimatedString.idl: Removed.
        * ksvg2/svg/SVGAnimatedTemplate.h: Removed.
        * ksvg2/svg/SVGAnimatedTransformList.idl: Removed.
        * ksvg2/svg/SVGAnimationElement.cpp: Removed.
        * ksvg2/svg/SVGAnimationElement.h: Removed.
        * ksvg2/svg/SVGAnimationElement.idl: Removed.
        * ksvg2/svg/SVGCircleElement.cpp: Removed.
        * ksvg2/svg/SVGCircleElement.h: Removed.
        * ksvg2/svg/SVGCircleElement.idl: Removed.
        * ksvg2/svg/SVGClipPathElement.cpp: Removed.
        * ksvg2/svg/SVGClipPathElement.h: Removed.
        * ksvg2/svg/SVGClipPathElement.idl: Removed.
        * ksvg2/svg/SVGColor.cpp: Removed.
        * ksvg2/svg/SVGColor.h: Removed.
        * ksvg2/svg/SVGColor.idl: Removed.
        * ksvg2/svg/SVGComponentTransferFunctionElement.cpp: Removed.
        * ksvg2/svg/SVGComponentTransferFunctionElement.h: Removed.
        * ksvg2/svg/SVGComponentTransferFunctionElement.idl: Removed.
        * ksvg2/svg/SVGCursorElement.cpp: Removed.
        * ksvg2/svg/SVGCursorElement.h: Removed.
        * ksvg2/svg/SVGCursorElement.idl: Removed.
        * ksvg2/svg/SVGDefinitionSrcElement.cpp: Removed.
        * ksvg2/svg/SVGDefinitionSrcElement.h: Removed.
        * ksvg2/svg/SVGDefinitionSrcElement.idl: Removed.
        * ksvg2/svg/SVGDefsElement.cpp: Removed.
        * ksvg2/svg/SVGDefsElement.h: Removed.
        * ksvg2/svg/SVGDefsElement.idl: Removed.
        * ksvg2/svg/SVGDescElement.cpp: Removed.
        * ksvg2/svg/SVGDescElement.h: Removed.
        * ksvg2/svg/SVGDescElement.idl: Removed.
        * ksvg2/svg/SVGDocument.cpp: Removed.
        * ksvg2/svg/SVGDocument.h: Removed.
        * ksvg2/svg/SVGDocument.idl: Removed.
        * ksvg2/svg/SVGElement.cpp: Removed.
        * ksvg2/svg/SVGElement.h: Removed.
        * ksvg2/svg/SVGElement.idl: Removed.
        * ksvg2/svg/SVGElementInstance.cpp: Removed.
        * ksvg2/svg/SVGElementInstance.h: Removed.
        * ksvg2/svg/SVGElementInstance.idl: Removed.
        * ksvg2/svg/SVGElementInstanceList.cpp: Removed.
        * ksvg2/svg/SVGElementInstanceList.h: Removed.
        * ksvg2/svg/SVGElementInstanceList.idl: Removed.
        * ksvg2/svg/SVGEllipseElement.cpp: Removed.
        * ksvg2/svg/SVGEllipseElement.h: Removed.
        * ksvg2/svg/SVGEllipseElement.idl: Removed.
        * ksvg2/svg/SVGException.h: Removed.
        * ksvg2/svg/SVGException.idl: Removed.
        * ksvg2/svg/SVGExternalResourcesRequired.cpp: Removed.
        * ksvg2/svg/SVGExternalResourcesRequired.h: Removed.
        * ksvg2/svg/SVGExternalResourcesRequired.idl: Removed.
        * ksvg2/svg/SVGFEBlendElement.cpp: Removed.
        * ksvg2/svg/SVGFEBlendElement.h: Removed.
        * ksvg2/svg/SVGFEBlendElement.idl: Removed.
        * ksvg2/svg/SVGFEColorMatrixElement.cpp: Removed.
        * ksvg2/svg/SVGFEColorMatrixElement.h: Removed.
        * ksvg2/svg/SVGFEColorMatrixElement.idl: Removed.
        * ksvg2/svg/SVGFEComponentTransferElement.cpp: Removed.
        * ksvg2/svg/SVGFEComponentTransferElement.h: Removed.
        * ksvg2/svg/SVGFEComponentTransferElement.idl: Removed.
        * ksvg2/svg/SVGFECompositeElement.cpp: Removed.
        * ksvg2/svg/SVGFECompositeElement.h: Removed.
        * ksvg2/svg/SVGFECompositeElement.idl: Removed.
        * ksvg2/svg/SVGFEDiffuseLightingElement.cpp: Removed.
        * ksvg2/svg/SVGFEDiffuseLightingElement.h: Removed.
        * ksvg2/svg/SVGFEDiffuseLightingElement.idl: Removed.
        * ksvg2/svg/SVGFEDisplacementMapElement.cpp: Removed.
        * ksvg2/svg/SVGFEDisplacementMapElement.h: Removed.
        * ksvg2/svg/SVGFEDisplacementMapElement.idl: Removed.
        * ksvg2/svg/SVGFEDistantLightElement.cpp: Removed.
        * ksvg2/svg/SVGFEDistantLightElement.h: Removed.
        * ksvg2/svg/SVGFEDistantLightElement.idl: Removed.
        * ksvg2/svg/SVGFEFloodElement.cpp: Removed.
        * ksvg2/svg/SVGFEFloodElement.h: Removed.
        * ksvg2/svg/SVGFEFloodElement.idl: Removed.
        * ksvg2/svg/SVGFEFuncAElement.cpp: Removed.
        * ksvg2/svg/SVGFEFuncAElement.h: Removed.
        * ksvg2/svg/SVGFEFuncAElement.idl: Removed.
        * ksvg2/svg/SVGFEFuncBElement.cpp: Removed.
        * ksvg2/svg/SVGFEFuncBElement.h: Removed.
        * ksvg2/svg/SVGFEFuncBElement.idl: Removed.
        * ksvg2/svg/SVGFEFuncGElement.cpp: Removed.
        * ksvg2/svg/SVGFEFuncGElement.h: Removed.
        * ksvg2/svg/SVGFEFuncGElement.idl: Removed.
        * ksvg2/svg/SVGFEFuncRElement.cpp: Removed.
        * ksvg2/svg/SVGFEFuncRElement.h: Removed.
        * ksvg2/svg/SVGFEFuncRElement.idl: Removed.
        * ksvg2/svg/SVGFEGaussianBlurElement.cpp: Removed.
        * ksvg2/svg/SVGFEGaussianBlurElement.h: Removed.
        * ksvg2/svg/SVGFEGaussianBlurElement.idl: Removed.
        * ksvg2/svg/SVGFEImageElement.cpp: Removed.
        * ksvg2/svg/SVGFEImageElement.h: Removed.
        * ksvg2/svg/SVGFEImageElement.idl: Removed.
        * ksvg2/svg/SVGFELightElement.cpp: Removed.
        * ksvg2/svg/SVGFELightElement.h: Removed.
        * ksvg2/svg/SVGFEMergeElement.cpp: Removed.
        * ksvg2/svg/SVGFEMergeElement.h: Removed.
        * ksvg2/svg/SVGFEMergeElement.idl: Removed.
        * ksvg2/svg/SVGFEMergeNodeElement.cpp: Removed.
        * ksvg2/svg/SVGFEMergeNodeElement.h: Removed.
        * ksvg2/svg/SVGFEMergeNodeElement.idl: Removed.
        * ksvg2/svg/SVGFEOffsetElement.cpp: Removed.
        * ksvg2/svg/SVGFEOffsetElement.h: Removed.
        * ksvg2/svg/SVGFEOffsetElement.idl: Removed.
        * ksvg2/svg/SVGFEPointLightElement.cpp: Removed.
        * ksvg2/svg/SVGFEPointLightElement.h: Removed.
        * ksvg2/svg/SVGFEPointLightElement.idl: Removed.
        * ksvg2/svg/SVGFESpecularLightingElement.cpp: Removed.
        * ksvg2/svg/SVGFESpecularLightingElement.h: Removed.
        * ksvg2/svg/SVGFESpecularLightingElement.idl: Removed.
        * ksvg2/svg/SVGFESpotLightElement.cpp: Removed.
        * ksvg2/svg/SVGFESpotLightElement.h: Removed.
        * ksvg2/svg/SVGFESpotLightElement.idl: Removed.
        * ksvg2/svg/SVGFETileElement.cpp: Removed.
        * ksvg2/svg/SVGFETileElement.h: Removed.
        * ksvg2/svg/SVGFETileElement.idl: Removed.
        * ksvg2/svg/SVGFETurbulenceElement.cpp: Removed.
        * ksvg2/svg/SVGFETurbulenceElement.h: Removed.
        * ksvg2/svg/SVGFETurbulenceElement.idl: Removed.
        * ksvg2/svg/SVGFilterElement.cpp: Removed.
        * ksvg2/svg/SVGFilterElement.h: Removed.
        * ksvg2/svg/SVGFilterElement.idl: Removed.
        * ksvg2/svg/SVGFilterPrimitiveStandardAttributes.cpp: Removed.
        * ksvg2/svg/SVGFilterPrimitiveStandardAttributes.h: Removed.
        * ksvg2/svg/SVGFilterPrimitiveStandardAttributes.idl: Removed.
        * ksvg2/svg/SVGFitToViewBox.cpp: Removed.
        * ksvg2/svg/SVGFitToViewBox.h: Removed.
        * ksvg2/svg/SVGFitToViewBox.idl: Removed.
        * ksvg2/svg/SVGFontFaceElement.cpp: Removed.
        * ksvg2/svg/SVGFontFaceElement.h: Removed.
        * ksvg2/svg/SVGFontFaceElement.idl: Removed.
        * ksvg2/svg/SVGFontFaceFormatElement.cpp: Removed.
        * ksvg2/svg/SVGFontFaceFormatElement.h: Removed.
        * ksvg2/svg/SVGFontFaceFormatElement.idl: Removed.
        * ksvg2/svg/SVGFontFaceNameElement.cpp: Removed.
        * ksvg2/svg/SVGFontFaceNameElement.h: Removed.
        * ksvg2/svg/SVGFontFaceNameElement.idl: Removed.
        * ksvg2/svg/SVGFontFaceSrcElement.cpp: Removed.
        * ksvg2/svg/SVGFontFaceSrcElement.h: Removed.
        * ksvg2/svg/SVGFontFaceSrcElement.idl: Removed.
        * ksvg2/svg/SVGFontFaceUriElement.cpp: Removed.
        * ksvg2/svg/SVGFontFaceUriElement.h: Removed.
        * ksvg2/svg/SVGFontFaceUriElement.idl: Removed.
        * ksvg2/svg/SVGForeignObjectElement.cpp: Removed.
        * ksvg2/svg/SVGForeignObjectElement.h: Removed.
        * ksvg2/svg/SVGForeignObjectElement.idl: Removed.
        * ksvg2/svg/SVGGElement.cpp: Removed.
        * ksvg2/svg/SVGGElement.h: Removed.
        * ksvg2/svg/SVGGElement.idl: Removed.
        * ksvg2/svg/SVGGradientElement.cpp: Removed.
        * ksvg2/svg/SVGGradientElement.h: Removed.
        * ksvg2/svg/SVGGradientElement.idl: Removed.
        * ksvg2/svg/SVGImageElement.cpp: Removed.
        * ksvg2/svg/SVGImageElement.h: Removed.
        * ksvg2/svg/SVGImageElement.idl: Removed.
        * ksvg2/svg/SVGLangSpace.cpp: Removed.
        * ksvg2/svg/SVGLangSpace.h: Removed.
        * ksvg2/svg/SVGLangSpace.idl: Removed.
        * ksvg2/svg/SVGLength.cpp: Removed.
        * ksvg2/svg/SVGLength.h: Removed.
        * ksvg2/svg/SVGLength.idl: Removed.
        * ksvg2/svg/SVGLengthList.cpp: Removed.
        * ksvg2/svg/SVGLengthList.h: Removed.
        * ksvg2/svg/SVGLengthList.idl: Removed.
        * ksvg2/svg/SVGLineElement.cpp: Removed.
        * ksvg2/svg/SVGLineElement.h: Removed.
        * ksvg2/svg/SVGLineElement.idl: Removed.
        * ksvg2/svg/SVGLinearGradientElement.cpp: Removed.
        * ksvg2/svg/SVGLinearGradientElement.h: Removed.
        * ksvg2/svg/SVGLinearGradientElement.idl: Removed.
        * ksvg2/svg/SVGList.h: Removed.
        * ksvg2/svg/SVGListTraits.h: Removed.
        * ksvg2/svg/SVGLocatable.cpp: Removed.
        * ksvg2/svg/SVGLocatable.h: Removed.
        * ksvg2/svg/SVGLocatable.idl: Removed.
        * ksvg2/svg/SVGMPathElement.cpp: Removed.
        * ksvg2/svg/SVGMPathElement.h: Removed.
        * ksvg2/svg/SVGMarkerElement.cpp: Removed.
        * ksvg2/svg/SVGMarkerElement.h: Removed.
        * ksvg2/svg/SVGMarkerElement.idl: Removed.
        * ksvg2/svg/SVGMaskElement.cpp: Removed.
        * ksvg2/svg/SVGMaskElement.h: Removed.
        * ksvg2/svg/SVGMaskElement.idl: Removed.
        * ksvg2/svg/SVGMatrix.idl: Removed.
        * ksvg2/svg/SVGMetadataElement.cpp: Removed.
        * ksvg2/svg/SVGMetadataElement.h: Removed.
        * ksvg2/svg/SVGMetadataElement.idl: Removed.
        * ksvg2/svg/SVGNumber.idl: Removed.
        * ksvg2/svg/SVGNumberList.cpp: Removed.
        * ksvg2/svg/SVGNumberList.h: Removed.
        * ksvg2/svg/SVGNumberList.idl: Removed.
        * ksvg2/svg/SVGPaint.cpp: Removed.
        * ksvg2/svg/SVGPaint.h: Removed.
        * ksvg2/svg/SVGPaint.idl: Removed.
        * ksvg2/svg/SVGParserUtilities.cpp: Removed.
        * ksvg2/svg/SVGParserUtilities.h: Removed.
        * ksvg2/svg/SVGPathElement.cpp: Removed.
        * ksvg2/svg/SVGPathElement.h: Removed.
        * ksvg2/svg/SVGPathElement.idl: Removed.
        * ksvg2/svg/SVGPathSeg.h: Removed.
        * ksvg2/svg/SVGPathSeg.idl: Removed.
        * ksvg2/svg/SVGPathSegArc.cpp: Removed.
        * ksvg2/svg/SVGPathSegArc.h: Removed.
        * ksvg2/svg/SVGPathSegArcAbs.idl: Removed.
        * ksvg2/svg/SVGPathSegArcRel.idl: Removed.
        * ksvg2/svg/SVGPathSegClosePath.cpp: Removed.
        * ksvg2/svg/SVGPathSegClosePath.h: Removed.
        * ksvg2/svg/SVGPathSegClosePath.idl: Removed.
        * ksvg2/svg/SVGPathSegCurvetoCubic.cpp: Removed.
        * ksvg2/svg/SVGPathSegCurvetoCubic.h: Removed.
        * ksvg2/svg/SVGPathSegCurvetoCubicAbs.idl: Removed.
        * ksvg2/svg/SVGPathSegCurvetoCubicRel.idl: Removed.
        * ksvg2/svg/SVGPathSegCurvetoCubicSmooth.cpp: Removed.
        * ksvg2/svg/SVGPathSegCurvetoCubicSmooth.h: Removed.
        * ksvg2/svg/SVGPathSegCurvetoCubicSmoothAbs.idl: Removed.
        * ksvg2/svg/SVGPathSegCurvetoCubicSmoothRel.idl: Removed.
        * ksvg2/svg/SVGPathSegCurvetoQuadratic.cpp: Removed.
        * ksvg2/svg/SVGPathSegCurvetoQuadratic.h: Removed.
        * ksvg2/svg/SVGPathSegCurvetoQuadraticAbs.idl: Removed.
        * ksvg2/svg/SVGPathSegCurvetoQuadraticRel.idl: Removed.
        * ksvg2/svg/SVGPathSegCurvetoQuadraticSmooth.cpp: Removed.
        * ksvg2/svg/SVGPathSegCurvetoQuadraticSmooth.h: Removed.
        * ksvg2/svg/SVGPathSegCurvetoQuadraticSmoothAbs.idl: Removed.
        * ksvg2/svg/SVGPathSegCurvetoQuadraticSmoothRel.idl: Removed.
        * ksvg2/svg/SVGPathSegLineto.cpp: Removed.
        * ksvg2/svg/SVGPathSegLineto.h: Removed.
        * ksvg2/svg/SVGPathSegLinetoAbs.idl: Removed.
        * ksvg2/svg/SVGPathSegLinetoHorizontal.cpp: Removed.
        * ksvg2/svg/SVGPathSegLinetoHorizontal.h: Removed.
        * ksvg2/svg/SVGPathSegLinetoHorizontalAbs.idl: Removed.
        * ksvg2/svg/SVGPathSegLinetoHorizontalRel.idl: Removed.
        * ksvg2/svg/SVGPathSegLinetoRel.idl: Removed.
        * ksvg2/svg/SVGPathSegLinetoVertical.cpp: Removed.
        * ksvg2/svg/SVGPathSegLinetoVertical.h: Removed.
        * ksvg2/svg/SVGPathSegLinetoVerticalAbs.idl: Removed.
        * ksvg2/svg/SVGPathSegLinetoVerticalRel.idl: Removed.
        * ksvg2/svg/SVGPathSegList.cpp: Removed.
        * ksvg2/svg/SVGPathSegList.h: Removed.
        * ksvg2/svg/SVGPathSegList.idl: Removed.
        * ksvg2/svg/SVGPathSegMoveto.cpp: Removed.
        * ksvg2/svg/SVGPathSegMoveto.h: Removed.
        * ksvg2/svg/SVGPathSegMovetoAbs.idl: Removed.
        * ksvg2/svg/SVGPathSegMovetoRel.idl: Removed.
        * ksvg2/svg/SVGPatternElement.cpp: Removed.
        * ksvg2/svg/SVGPatternElement.h: Removed.
        * ksvg2/svg/SVGPatternElement.idl: Removed.
        * ksvg2/svg/SVGPoint.idl: Removed.
        * ksvg2/svg/SVGPointList.cpp: Removed.
        * ksvg2/svg/SVGPointList.h: Removed.
        * ksvg2/svg/SVGPointList.idl: Removed.
        * ksvg2/svg/SVGPolyElement.cpp: Removed.
        * ksvg2/svg/SVGPolyElement.h: Removed.
        * ksvg2/svg/SVGPolygonElement.cpp: Removed.
        * ksvg2/svg/SVGPolygonElement.h: Removed.
        * ksvg2/svg/SVGPolygonElement.idl: Removed.
        * ksvg2/svg/SVGPolylineElement.cpp: Removed.
        * ksvg2/svg/SVGPolylineElement.h: Removed.
        * ksvg2/svg/SVGPolylineElement.idl: Removed.
        * ksvg2/svg/SVGPreserveAspectRatio.cpp: Removed.
        * ksvg2/svg/SVGPreserveAspectRatio.h: Removed.
        * ksvg2/svg/SVGPreserveAspectRatio.idl: Removed.
        * ksvg2/svg/SVGRadialGradientElement.cpp: Removed.
        * ksvg2/svg/SVGRadialGradientElement.h: Removed.
        * ksvg2/svg/SVGRadialGradientElement.idl: Removed.
        * ksvg2/svg/SVGRect.idl: Removed.
        * ksvg2/svg/SVGRectElement.cpp: Removed.
        * ksvg2/svg/SVGRectElement.h: Removed.
        * ksvg2/svg/SVGRectElement.idl: Removed.
        * ksvg2/svg/SVGRenderingIntent.h: Removed.
        * ksvg2/svg/SVGRenderingIntent.idl: Removed.
        * ksvg2/svg/SVGSVGElement.cpp: Removed.
        * ksvg2/svg/SVGSVGElement.h: Removed.
        * ksvg2/svg/SVGSVGElement.idl: Removed.
        * ksvg2/svg/SVGScriptElement.cpp: Removed.
        * ksvg2/svg/SVGScriptElement.h: Removed.
        * ksvg2/svg/SVGScriptElement.idl: Removed.
        * ksvg2/svg/SVGSetElement.cpp: Removed.
        * ksvg2/svg/SVGSetElement.h: Removed.
        * ksvg2/svg/SVGSetElement.idl: Removed.
        * ksvg2/svg/SVGStopElement.cpp: Removed.
        * ksvg2/svg/SVGStopElement.h: Removed.
        * ksvg2/svg/SVGStopElement.idl: Removed.
        * ksvg2/svg/SVGStringList.cpp: Removed.
        * ksvg2/svg/SVGStringList.h: Removed.
        * ksvg2/svg/SVGStringList.idl: Removed.
        * ksvg2/svg/SVGStylable.cpp: Removed.
        * ksvg2/svg/SVGStylable.h: Removed.
        * ksvg2/svg/SVGStylable.idl: Removed.
        * ksvg2/svg/SVGStyleElement.cpp: Removed.
        * ksvg2/svg/SVGStyleElement.h: Removed.
        * ksvg2/svg/SVGStyleElement.idl: Removed.
        * ksvg2/svg/SVGStyledElement.cpp: Removed.
        * ksvg2/svg/SVGStyledElement.h: Removed.
        * ksvg2/svg/SVGStyledLocatableElement.cpp: Removed.
        * ksvg2/svg/SVGStyledLocatableElement.h: Removed.
        * ksvg2/svg/SVGStyledTransformableElement.cpp: Removed.
        * ksvg2/svg/SVGStyledTransformableElement.h: Removed.
        * ksvg2/svg/SVGSwitchElement.cpp: Removed.
        * ksvg2/svg/SVGSwitchElement.h: Removed.
        * ksvg2/svg/SVGSwitchElement.idl: Removed.
        * ksvg2/svg/SVGSymbolElement.cpp: Removed.
        * ksvg2/svg/SVGSymbolElement.h: Removed.
        * ksvg2/svg/SVGSymbolElement.idl: Removed.
        * ksvg2/svg/SVGTRefElement.cpp: Removed.
        * ksvg2/svg/SVGTRefElement.h: Removed.
        * ksvg2/svg/SVGTRefElement.idl: Removed.
        * ksvg2/svg/SVGTSpanElement.cpp: Removed.
        * ksvg2/svg/SVGTSpanElement.h: Removed.
        * ksvg2/svg/SVGTSpanElement.idl: Removed.
        * ksvg2/svg/SVGTests.cpp: Removed.
        * ksvg2/svg/SVGTests.h: Removed.
        * ksvg2/svg/SVGTests.idl: Removed.
        * ksvg2/svg/SVGTextContentElement.cpp: Removed.
        * ksvg2/svg/SVGTextContentElement.h: Removed.
        * ksvg2/svg/SVGTextContentElement.idl: Removed.
        * ksvg2/svg/SVGTextElement.cpp: Removed.
        * ksvg2/svg/SVGTextElement.h: Removed.
        * ksvg2/svg/SVGTextElement.idl: Removed.
        * ksvg2/svg/SVGTextPathElement.cpp: Removed.
        * ksvg2/svg/SVGTextPathElement.h: Removed.
        * ksvg2/svg/SVGTextPathElement.idl: Removed.
        * ksvg2/svg/SVGTextPositioningElement.cpp: Removed.
        * ksvg2/svg/SVGTextPositioningElement.h: Removed.
        * ksvg2/svg/SVGTextPositioningElement.idl: Removed.
        * ksvg2/svg/SVGTitleElement.cpp: Removed.
        * ksvg2/svg/SVGTitleElement.h: Removed.
        * ksvg2/svg/SVGTitleElement.idl: Removed.
        * ksvg2/svg/SVGTransform.cpp: Removed.
        * ksvg2/svg/SVGTransform.h: Removed.
        * ksvg2/svg/SVGTransform.idl: Removed.
        * ksvg2/svg/SVGTransformDistance.cpp: Removed.
        * ksvg2/svg/SVGTransformDistance.h: Removed.
        * ksvg2/svg/SVGTransformList.cpp: Removed.
        * ksvg2/svg/SVGTransformList.h: Removed.
        * ksvg2/svg/SVGTransformList.idl: Removed.
        * ksvg2/svg/SVGTransformable.cpp: Removed.
        * ksvg2/svg/SVGTransformable.h: Removed.
        * ksvg2/svg/SVGTransformable.idl: Removed.
        * ksvg2/svg/SVGURIReference.cpp: Removed.
        * ksvg2/svg/SVGURIReference.h: Removed.
        * ksvg2/svg/SVGURIReference.idl: Removed.
        * ksvg2/svg/SVGUnitTypes.h: Removed.
        * ksvg2/svg/SVGUnitTypes.idl: Removed.
        * ksvg2/svg/SVGUseElement.cpp: Removed.
        * ksvg2/svg/SVGUseElement.h: Removed.
        * ksvg2/svg/SVGUseElement.idl: Removed.
        * ksvg2/svg/SVGViewElement.cpp: Removed.
        * ksvg2/svg/SVGViewElement.h: Removed.
        * ksvg2/svg/SVGViewElement.idl: Removed.
        * ksvg2/svg/SVGViewSpec.cpp: Removed.
        * ksvg2/svg/SVGViewSpec.h: Removed.
        * ksvg2/svg/SVGViewSpec.idl: Removed.
        * ksvg2/svg/SVGZoomAndPan.cpp: Removed.
        * ksvg2/svg/SVGZoomAndPan.h: Removed.
        * ksvg2/svg/SVGZoomAndPan.idl: Removed.
        * ksvg2/svg/svgattrs.in: Removed.
        * ksvg2/svg/svgtags.in: Removed.
        * rendering/PointerEventsHitRules.cpp: Copied from ksvg2/misc/PointerEventsHitRules.cpp.
        * rendering/PointerEventsHitRules.h: Copied from ksvg2/misc/PointerEventsHitRules.h.
        * rendering/SVGRenderStyle.cpp: Copied from ksvg2/css/SVGRenderStyle.cpp.
        * rendering/SVGRenderStyle.h: Copied from ksvg2/css/SVGRenderStyle.h.
        * rendering/SVGRenderStyleDefs.cpp: Copied from ksvg2/css/SVGRenderStyleDefs.cpp.
        * rendering/SVGRenderStyleDefs.h: Copied from ksvg2/css/SVGRenderStyleDefs.h.
        * svg: Copied from ksvg2/svg.
        * svg/SVGDocumentExtensions.cpp: Copied from ksvg2/misc/SVGDocumentExtensions.cpp.
        * svg/SVGDocumentExtensions.h: Copied from ksvg2/misc/SVGDocumentExtensions.h.
        * svg/SVGImageLoader.cpp: Copied from ksvg2/misc/SVGImageLoader.cpp.
        * svg/SVGImageLoader.h: Copied from ksvg2/misc/SVGImageLoader.h.
        * svg/SVGTimer.cpp: Copied from ksvg2/misc/SVGTimer.cpp.
        * svg/SVGTimer.h: Copied from ksvg2/misc/SVGTimer.h.
        * svg/SVGZoomEvent.cpp: Copied from ksvg2/events/SVGZoomEvent.cpp.
        * svg/SVGZoomEvent.h: Copied from ksvg2/events/SVGZoomEvent.h.
        * svg/SVGZoomEvent.idl: Copied from ksvg2/events/SVGZoomEvent.idl.
        * svg/TimeScheduler.cpp: Copied from ksvg2/misc/TimeScheduler.cpp.
        * svg/TimeScheduler.h: Copied from ksvg2/misc/TimeScheduler.h.
        * svg/xlinkattrs.in: Copied from ksvg2/misc/xlinkattrs.in.

2007-11-30  Kevin Ollivier  <kevino@theolliviers.com>

        wx build fix. Add WebCore/platform/graphics/wx to includes.

        * webcore-wx.bkl:

2007-11-30  Brady Eidson  <beidson@apple.com>

        Reviewed by Geoff

        Further hookup of Database API
        With this change, any database operation that writes to the database (UPDATE, INSERT, CREATE, etc) will
        result in a didModifyDatabase notification when the transaction is successfully committed

        * storage/DatabaseAuthorizer.cpp: Global rename of "m_lastActionIncreasedSize" to "m_lastActionChangedDatabase"
        (WebCore::DatabaseAuthorizer::reset):
        (WebCore::DatabaseAuthorizer::createTable):
        (WebCore::DatabaseAuthorizer::allowAlterTable):
        (WebCore::DatabaseAuthorizer::createIndex):
        (WebCore::DatabaseAuthorizer::createTrigger):
        (WebCore::DatabaseAuthorizer::createVTable):
        (WebCore::DatabaseAuthorizer::allowInsert):
        (WebCore::DatabaseAuthorizer::allowUpdate):
        * storage/DatabaseAuthorizer.h:
        (WebCore::DatabaseAuthorizer::lastActionChangedDatabase):

        * storage/DatabaseTracker.cpp:
        (WebCore::DatabaseTracker::notifyDatabaseChanged): Added.  Allow external entities (SQLTransaction) to be able
          to request a didModifyDatabase notification to the delegate
        * storage/DatabaseTracker.h:

        * storage/SQLTransaction.cpp: Added m_modifiedDatabase flag which tracks if any statement over the course of 
          a transaction resulted in a change to the database.
        (WebCore::SQLTransaction::SQLTransaction):
        (WebCore::SQLTransaction::runCurrentStatement): Set m_modifiedDatabase to true if the authorizer reports a mutation
          statement occurred
        (WebCore::SQLTransaction::postflightAndCommit): If the transaction successfully commits, call DatabaseTracker::notifyDatabaseChanged
        (WebCore::SQLTransaction::cleanupAfterTransactionErrorCallback): Ditto
        * storage/SQLTransaction.h:

2007-11-30  Nikolas Zimmermann  <zimmermann@kde.org>

        Rubber stamped by David.

        Next round of moves - platform reorganization.
        Move text/font/glyph related files from the individual port directories
        into platform/text/<port> or platform/graphics/<port>.

        * DerivedSources.make:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * platform/cf/StringCF.cpp: Removed.
        * platform/cf/StringImplCF.cpp: Removed.
        * platform/graphics/gtk/FontCacheGtk.cpp: Copied from platform/gtk/FontCacheGtk.cpp.
        * platform/graphics/gtk/FontDataGtk.cpp: Copied from platform/gtk/FontDataGtk.cpp.
        * platform/graphics/gtk/FontGtk.cpp: Copied from platform/gtk/FontGtk.cpp.
        * platform/graphics/gtk/FontPlatformData.h: Copied from platform/gtk/FontPlatformData.h.
        * platform/graphics/gtk/FontPlatformDataGtk.cpp: Copied from platform/gtk/FontPlatformDataGtk.cpp.
        * platform/graphics/gtk/GlyphPageTreeNodeGtk.cpp: Copied from platform/gtk/GlyphPageTreeNodeGtk.cpp.
        * platform/graphics/mac/FontCacheMac.mm: Copied from platform/mac/FontCacheMac.mm.
        * platform/graphics/mac/FontCustomPlatformData.cpp: Copied from platform/mac/FontCustomPlatformData.cpp.
        * platform/graphics/mac/FontCustomPlatformData.h: Copied from platform/mac/FontCustomPlatformData.h.
        * platform/graphics/mac/FontDataMac.mm: Copied from platform/mac/FontDataMac.mm.
        * platform/graphics/mac/FontMac.mm: Copied from platform/mac/FontMac.mm.
        * platform/graphics/mac/FontPlatformData.h: Copied from platform/mac/FontPlatformData.h.
        * platform/graphics/mac/FontPlatformDataMac.mm: Copied from platform/mac/FontPlatformDataMac.mm.
        * platform/graphics/mac/GlyphPageTreeNodeMac.cpp: Copied from platform/mac/GlyphPageTreeNodeMac.cpp.
        * platform/graphics/qt/FontCacheQt.cpp: Copied from platform/qt/FontCacheQt.cpp.
        * platform/graphics/qt/FontCustomPlatformData.cpp: Copied from platform/qt/FontCustomPlatformData.cpp.
        * platform/graphics/qt/FontCustomPlatformData.h: Copied from platform/qt/FontCustomPlatformData.h.
        * platform/graphics/qt/FontDataQt.cpp: Copied from platform/qt/FontDataQt.cpp.
        * platform/graphics/qt/FontPlatformData.h: Copied from platform/qt/FontPlatformData.h.
        * platform/graphics/qt/FontQt.cpp: Copied from platform/qt/FontQt.cpp.
        * platform/graphics/qt/GlyphPageTreeNodeQt.cpp: Copied from platform/qt/GlyphPageTreeNodeQt.cpp.
        * platform/graphics/win/FontCacheWin.cpp: Copied from platform/win/FontCacheWin.cpp.
        * platform/graphics/win/FontCustomPlatformData.cpp: Copied from platform/win/FontCustomPlatformData.cpp.
        * platform/graphics/win/FontCustomPlatformData.h: Copied from platform/win/FontCustomPlatformData.h.
        * platform/graphics/win/FontDataWin.cpp: Copied from platform/win/FontDataWin.cpp.
        * platform/graphics/win/FontDatabase.cpp: Copied from platform/win/FontDatabase.cpp.
        * platform/graphics/win/FontDatabase.h: Copied from platform/win/FontDatabase.h.
        * platform/graphics/win/FontPlatformData.h: Copied from platform/win/FontPlatformData.h.
        * platform/graphics/win/FontPlatformDataWin.cpp: Copied from platform/win/FontPlatformDataWin.cpp.
        * platform/graphics/win/FontWin.cpp: Copied from platform/win/FontWin.cpp.
        * platform/graphics/win/GlyphPageTreeNodeWin.cpp: Copied from platform/win/GlyphPageTreeNodeWin.cpp.
        * platform/graphics/wx/FontCacheWx.cpp: Copied from platform/wx/FontCacheWx.cpp.
        * platform/graphics/wx/FontDataWx.cpp: Copied from platform/wx/FontDataWx.cpp.
        * platform/graphics/wx/FontPlatformData.h: Copied from platform/wx/FontPlatformData.h.
        * platform/graphics/wx/FontPlatformDataWx.cpp: Copied from platform/wx/FontPlatformDataWx.cpp.
        * platform/graphics/wx/FontWx.cpp: Copied from platform/wx/FontWx.cpp.
        * platform/graphics/wx/GlyphMapWx.cpp: Copied from platform/wx/GlyphMapWx.cpp.
        * platform/gtk/FontCacheGtk.cpp: Removed.
        * platform/gtk/FontDataGtk.cpp: Removed.
        * platform/gtk/FontGtk.cpp: Removed.
        * platform/gtk/FontPlatformData.h: Removed.
        * platform/gtk/FontPlatformDataGtk.cpp: Removed.
        * platform/gtk/GlyphPageTreeNodeGtk.cpp: Removed.
        * platform/gtk/TextBreakIteratorInternalICUGtk.cpp: Removed.
        * platform/mac/FontCacheMac.mm: Removed.
        * platform/mac/FontCustomPlatformData.cpp: Removed.
        * platform/mac/FontCustomPlatformData.h: Removed.
        * platform/mac/FontDataMac.mm: Removed.
        * platform/mac/FontMac.mm: Removed.
        * platform/mac/FontPlatformData.h: Removed.
        * platform/mac/FontPlatformDataMac.mm: Removed.
        * platform/mac/GlyphPageTreeNodeMac.cpp: Removed.
        * platform/mac/ShapeArabic.c: Removed.
        * platform/mac/ShapeArabic.h: Removed.
        * platform/mac/StringImplMac.mm: Removed.
        * platform/mac/StringMac.mm: Removed.
        * platform/mac/TextBoundaries.mm: Removed.
        * platform/mac/TextBreakIteratorInternalICUMac.mm: Removed.
        * platform/mac/TextCodecMac.cpp: Removed.
        * platform/mac/TextCodecMac.h: Removed.
        * platform/mac/character-sets.txt: Removed.
        * platform/mac/mac-encodings.txt: Removed.
        * platform/mac/make-charset-table.pl: Removed.
        * platform/qt/FontCacheQt.cpp: Removed.
        * platform/qt/FontCustomPlatformData.cpp: Removed.
        * platform/qt/FontCustomPlatformData.h: Removed.
        * platform/qt/FontDataQt.cpp: Removed.
        * platform/qt/FontPlatformData.h: Removed.
        * platform/qt/FontQt.cpp: Removed.
        * platform/qt/GlyphPageTreeNodeQt.cpp: Removed.
        * platform/qt/StringQt.cpp: Removed.
        * platform/qt/TextBoundaries.cpp: Removed.
        * platform/qt/TextBreakIteratorQt.cpp: Removed.
        * platform/qt/TextCodecQt.cpp: Removed.
        * platform/qt/TextCodecQt.h: Removed.
        * platform/symbian/StringImplSymbian.cpp: Removed.
        * platform/symbian/StringSymbian.cpp: Removed.
        * platform/text/cf: Added.
        * platform/text/cf/StringCF.cpp: Copied from platform/cf/StringCF.cpp.
        * platform/text/cf/StringImplCF.cpp: Copied from platform/cf/StringImplCF.cpp.
        * platform/text/gtk: Added.
        * platform/text/gtk/TextBreakIteratorInternalICUGtk.cpp: Copied from platform/gtk/TextBreakIteratorInternalICUGtk.cpp.
        * platform/text/mac/ShapeArabic.c: Copied from platform/mac/ShapeArabic.c.
        * platform/text/mac/ShapeArabic.h: Copied from platform/mac/ShapeArabic.h.
        * platform/text/mac/StringImplMac.mm: Copied from platform/mac/StringImplMac.mm.
        * platform/text/mac/StringMac.mm: Copied from platform/mac/StringMac.mm.
        * platform/text/mac/TextBoundaries.mm: Copied from platform/mac/TextBoundaries.mm.
        * platform/text/mac/TextBreakIteratorInternalICUMac.mm: Copied from platform/mac/TextBreakIteratorInternalICUMac.mm.
        * platform/text/mac/TextCodecMac.cpp: Copied from platform/mac/TextCodecMac.cpp.
        * platform/text/mac/TextCodecMac.h: Copied from platform/mac/TextCodecMac.h.
        * platform/text/mac/character-sets.txt: Copied from platform/mac/character-sets.txt.
        * platform/text/mac/mac-encodings.txt: Copied from platform/mac/mac-encodings.txt.
        * platform/text/mac/make-charset-table.pl: Copied from platform/mac/make-charset-table.pl.
        * platform/text/qt: Added.
        * platform/text/qt/StringQt.cpp: Copied from platform/qt/StringQt.cpp.
        * platform/text/qt/TextBoundaries.cpp: Copied from platform/qt/TextBoundaries.cpp.
        * platform/text/qt/TextBreakIteratorQt.cpp: Copied from platform/qt/TextBreakIteratorQt.cpp.
        * platform/text/qt/TextCodecQt.cpp: Copied from platform/qt/TextCodecQt.cpp.
        * platform/text/qt/TextCodecQt.h: Copied from platform/qt/TextCodecQt.h.
        * platform/text/symbian: Added.
        * platform/text/symbian/StringImplSymbian.cpp: Copied from platform/symbian/StringImplSymbian.cpp.
        * platform/text/symbian/StringSymbian.cpp: Copied from platform/symbian/StringSymbian.cpp.
        * platform/text/win: Added.
        * platform/text/win/TextBreakIteratorInternalICUWin.cpp: Copied from platform/win/TextBreakIteratorInternalICUWin.cpp.
        * platform/text/wx: Added.
        * platform/text/wx/StringWx.cpp: Copied from platform/wx/StringWx.cpp.
        * platform/win/FontCacheWin.cpp: Removed.
        * platform/win/FontCustomPlatformData.cpp: Removed.
        * platform/win/FontCustomPlatformData.h: Removed.
        * platform/win/FontDataWin.cpp: Removed.
        * platform/win/FontDatabase.cpp: Removed.
        * platform/win/FontDatabase.h: Removed.
        * platform/win/FontPlatformData.h: Removed.
        * platform/win/FontPlatformDataWin.cpp: Removed.
        * platform/win/FontWin.cpp: Removed.
        * platform/win/GlyphPageTreeNodeWin.cpp: Removed.
        * platform/win/TextBreakIteratorInternalICUWin.cpp: Removed.
        * platform/wx/FontCacheWx.cpp: Removed.
        * platform/wx/FontDataWx.cpp: Removed.
        * platform/wx/FontPlatformData.h: Removed.
        * platform/wx/FontPlatformDataWx.cpp: Removed.
        * platform/wx/FontWx.cpp: Removed.
        * platform/wx/GlyphMapWx.cpp: Removed.
        * platform/wx/StringWx.cpp: Removed.
        * webcore-wx.bkl:

2007-11-30  Kevin Ollivier  <kevino@theolliviers.com>

        Build fix for wx port. Adding editing/RemoveFormatCommand.cpp

        * WebCoreSources.bkl:

2007-11-30  Simon Hausmann  <hausmann@webkit.org>

        Reviewed by Adam Roben.

        Fix the build with DATABASE=0.

        * page/Settings.cpp:
        (WebCore::Settings::setDefaultDatabaseOriginQuota):
        (WebCore::Settings::defaultDatabaseOriginQuota):

2007-11-30  Nikolas Zimmermann  <zimmermann@kde.org>

        Rubber stamped by Darin.

        Fix misplaced file. The name "FontStyle" is not correct though - it probably
        needs yet another move - but this time inside platform/graphics - as soon
        as we agree on a better name.

        * WebCore.xcodeproj/project.pbxproj:
        * platform/graphics/FontStyle.h: Copied from platform/text/FontStyle.h.
        * platform/text/FontStyle.h: Removed.

2007-11-30  Nikolas Zimmermann  <zimmermann@kde.org>

        Reviewed by Sam.

        Rename "FontStyle FontStyle(...)" to "FontStyle fontStyle(...)".
        I scripted a bit too much while doing the TextStyle -> FontStyle change.

        * platform/win/PopupMenuWin.cpp:
        (WebCore::PopupMenu::paint):
        * rendering/EllipsisBox.cpp:
        (WebCore::EllipsisBox::paint):
        * rendering/RenderFileUploadControl.cpp:
        (WebCore::RenderFileUploadControl::paintObject):
        * rendering/RenderListBox.cpp:
        (WebCore::RenderListBox::updateFromElement):
        (WebCore::RenderListBox::paintItemForeground):
        * rendering/RenderTextControl.cpp:
        (WebCore::RenderTextControl::setStyle):
        (WebCore::RenderTextControl::createInnerTextStyle):
        (WebCore::RenderTextControl::createSubtreeIfNeeded):
        * rendering/RenderTextControl.h:
        * rendering/SVGRootInlineBox.cpp:
        (WebCore::svgFontStyleForInlineTextBox):

2007-11-30  Alp Toker  <alp@atoker.com>

        GTK+ build fix following the recent text reorganization.

        * WebCore.pro:

2007-11-29  Jon Honeycutt  <jhoneycutt@apple.com>

        Reviewed by Adam.

        Part of <rdar://problem/5506522> Seed: cannot type into text box in
        Facebook, don't see plugin content (Adobe Flash)

        * plugins/win/PluginViewWin.cpp:
        (WebCore::PluginViewWin::handleMouseEvent): Focus the plugin's parent
        frame  

2007-11-30  Nikolas Zimmermann  <zimmermann@kde.org>

        Not reviewed. Trying to fix gtk/qt/wx build. (I expected problems because of the moves)

        * WebCore.pro:
        * webcore-base.bkl:

2007-11-30  Nikolas Zimmermann  <zimmermann@kde.org>

        Rubber stamped by Brady.

        Started platform reorganization (platform/text addition).
        Moving string/text/font related classes into new places - as discussed on webkit-dev.

        In a follow-up commit I'll move classes out of platform/{mac,win,...} into
        platform/text/{mac,win,...}, and also do the ksvg2/ -> svg/ move.

        * WebCore.order:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * WebCoreSources.bkl:
        * editing/ReplaceSelectionCommand.cpp:
        (WebCore::ReplacementFragment::insertFragmentForTestRendering):
        * platform/AtomicString.cpp: Removed.
        * platform/AtomicString.h: Removed.
        * platform/AtomicStringImpl.h: Removed.
        * platform/Base64.cpp: Removed.
        * platform/Base64.h: Removed.
        * platform/BidiContext.cpp: Removed.
        * platform/BidiContext.h: Removed.
        * platform/BidiResolver.h: Removed.
        * platform/CString.cpp: Removed.
        * platform/CString.h: Removed.
        * platform/CharacterNames.h: Removed.
        * platform/CharsetData.h: Removed.
        * platform/Font.cpp: Removed.
        * platform/Font.h: Removed.
        * platform/FontCache.cpp: Removed.
        * platform/FontCache.h: Removed.
        * platform/FontData.cpp: Removed.
        * platform/FontData.h: Removed.
        * platform/FontDescription.h: Removed.
        * platform/FontFallbackList.cpp: Removed.
        * platform/FontFallbackList.h: Removed.
        * platform/FontFamily.cpp: Removed.
        * platform/FontFamily.h: Removed.
        * platform/FontSelector.h: Removed.
        * platform/GlyphBuffer.h: Removed.
        * platform/GlyphPageTreeNode.cpp: Removed.
        * platform/GlyphPageTreeNode.h: Removed.
        * platform/GlyphWidthMap.cpp: Removed.
        * platform/GlyphWidthMap.h: Removed.
        * platform/PlatformString.h: Removed.
        * platform/RegularExpression.cpp: Removed.
        * platform/RegularExpression.h: Removed.
        * platform/SegmentedString.cpp: Removed.
        * platform/SegmentedString.h: Removed.
        * platform/String.cpp: Removed.
        * platform/StringHash.h: Removed.
        * platform/StringImpl.cpp: Removed.
        * platform/StringImpl.h: Removed.
        * platform/StringTruncator.cpp: Removed.
        * platform/StringTruncator.h: Removed.
        * platform/TextBoundaries.h: Removed.
        * platform/TextBoundariesICU.cpp: Removed.
        * platform/TextBreakIterator.h: Removed.
        * platform/TextBreakIteratorICU.cpp: Removed.
        * platform/TextBreakIteratorInternalICU.h: Removed.
        * platform/TextCodec.cpp: Removed.
        * platform/TextCodec.h: Removed.
        * platform/TextCodecICU.cpp: Removed.
        * platform/TextCodecICU.h: Removed.
        * platform/TextCodecLatin1.cpp: Removed.
        * platform/TextCodecLatin1.h: Removed.
        * platform/TextCodecUTF16.cpp: Removed.
        * platform/TextCodecUTF16.h: Removed.
        * platform/TextCodecUserDefined.cpp: Removed.
        * platform/TextCodecUserDefined.h: Removed.
        * platform/TextDecoder.cpp: Removed.
        * platform/TextDecoder.h: Removed.
        * platform/TextDirection.h: Removed.
        * platform/TextEncoding.cpp: Removed.
        * platform/TextEncoding.h: Removed.
        * platform/TextEncodingRegistry.cpp: Removed.
        * platform/TextEncodingRegistry.h: Removed.
        * platform/TextStream.cpp: Removed.
        * platform/TextStream.h: Removed.
        * platform/TextStyle.h: Removed.
        * platform/UnicodeRange.cpp: Removed.
        * platform/UnicodeRange.h: Removed.
        * platform/graphics/Font.cpp: Copied from platform/Font.cpp.
        (WebCore::WidthIterator::WidthIterator):
        (WebCore::Font::width):
        (WebCore::Font::drawSimpleText):
        (WebCore::Font::drawGlyphBuffer):
        (WebCore::Font::drawText):
        (WebCore::Font::floatWidth):
        (WebCore::Font::floatWidthForSimpleText):
        (WebCore::Font::selectionRectForText):
        (WebCore::Font::selectionRectForSimpleText):
        (WebCore::Font::offsetForPosition):
        (WebCore::Font::offsetForPositionForSimpleText):
        * platform/graphics/Font.h: Copied from platform/Font.h.
        * platform/graphics/FontCache.cpp: Copied from platform/FontCache.cpp.
        * platform/graphics/FontCache.h: Copied from platform/FontCache.h.
        * platform/graphics/FontData.cpp: Copied from platform/FontData.cpp.
        * platform/graphics/FontData.h: Copied from platform/FontData.h.
        * platform/graphics/FontDescription.h: Copied from platform/FontDescription.h.
        * platform/graphics/FontFallbackList.cpp: Copied from platform/FontFallbackList.cpp.
        * platform/graphics/FontFallbackList.h: Copied from platform/FontFallbackList.h.
        * platform/graphics/FontFamily.cpp: Copied from platform/FontFamily.cpp.
        * platform/graphics/FontFamily.h: Copied from platform/FontFamily.h.
        * platform/graphics/FontSelector.h: Copied from platform/FontSelector.h.
        * platform/graphics/GlyphBuffer.h: Copied from platform/GlyphBuffer.h.
        * platform/graphics/GlyphPageTreeNode.cpp: Copied from platform/GlyphPageTreeNode.cpp.
        * platform/graphics/GlyphPageTreeNode.h: Copied from platform/GlyphPageTreeNode.h.
        * platform/graphics/GlyphWidthMap.cpp: Copied from platform/GlyphWidthMap.cpp.
        * platform/graphics/GlyphWidthMap.h: Copied from platform/GlyphWidthMap.h.
        * platform/graphics/GraphicsContext.cpp:
        (WebCore::GraphicsContext::drawText):
        (WebCore::GraphicsContext::drawBidiText):
        (WebCore::GraphicsContext::drawHighlightForText):
        * platform/graphics/GraphicsContext.h:
        * platform/graphics/StringTruncator.cpp: Copied from platform/StringTruncator.cpp.
        (WebCore::stringWidth):
        * platform/graphics/StringTruncator.h: Copied from platform/StringTruncator.h.
        * platform/graphics/qt/GraphicsContextQt.cpp:
        * platform/gtk/FontGtk.cpp:
        (WebCore::Font::drawComplexText):
        (WebCore::Font::floatWidthForComplexText):
        (WebCore::Font::offsetForPositionForComplexText):
        (WebCore::Font::selectionRectForComplexText):
        * platform/mac/FontMac.mm:
        (WebCore::ATSULayoutParameters::ATSULayoutParameters):
        (WebCore::Font::selectionRectForComplexText):
        (WebCore::Font::drawComplexText):
        (WebCore::Font::floatWidthForComplexText):
        (WebCore::Font::offsetForPositionForComplexText):
        * platform/mac/WebCoreTextRenderer.mm:
        (WebCoreDrawTextAtPoint):
        (WebCoreTextFloatWidth):
        * platform/qt/FontQt.cpp:
        (WebCore::generateComponents):
        (WebCore::Font::drawText):
        (WebCore::Font::width):
        (WebCore::Font::floatWidth):
        (WebCore::Font::offsetForPosition):
        (WebCore::cursorToX):
        (WebCore::Font::selectionRectForText):
        * platform/text: Added.
        * platform/text/AtomicString.cpp: Copied from platform/AtomicString.cpp.
        * platform/text/AtomicString.h: Copied from platform/AtomicString.h.
        * platform/text/AtomicStringImpl.h: Copied from platform/AtomicStringImpl.h.
        * platform/text/Base64.cpp: Copied from platform/Base64.cpp.
        * platform/text/Base64.h: Copied from platform/Base64.h.
        * platform/text/BidiContext.cpp: Copied from platform/BidiContext.cpp.
        * platform/text/BidiContext.h: Copied from platform/BidiContext.h.
        * platform/text/BidiResolver.h: Copied from platform/BidiResolver.h.
        * platform/text/CString.cpp: Copied from platform/CString.cpp.
        * platform/text/CString.h: Copied from platform/CString.h.
        * platform/text/CharacterNames.h: Copied from platform/CharacterNames.h.
        * platform/text/FontStyle.h: Copied from platform/TextStyle.h.
        (WebCore::FontStyle::FontStyle):
        * platform/text/PlatformString.h: Copied from platform/PlatformString.h.
        * platform/text/RegularExpression.cpp: Copied from platform/RegularExpression.cpp.
        * platform/text/RegularExpression.h: Copied from platform/RegularExpression.h.
        * platform/text/SegmentedString.cpp: Copied from platform/SegmentedString.cpp.
        * platform/text/SegmentedString.h: Copied from platform/SegmentedString.h.
        * platform/text/String.cpp: Copied from platform/String.cpp.
        * platform/text/StringHash.h: Copied from platform/StringHash.h.
        * platform/text/StringImpl.cpp: Copied from platform/StringImpl.cpp.
        * platform/text/StringImpl.h: Copied from platform/StringImpl.h.
        * platform/text/TextBoundaries.h: Copied from platform/TextBoundaries.h.
        * platform/text/TextBoundariesICU.cpp: Copied from platform/TextBoundariesICU.cpp.
        (WebCore::findNextWordFromIndex):
        * platform/text/TextBreakIterator.h: Copied from platform/TextBreakIterator.h.
        * platform/text/TextBreakIteratorICU.cpp: Copied from platform/TextBreakIteratorICU.cpp.
        * platform/text/TextBreakIteratorInternalICU.h: Copied from platform/TextBreakIteratorInternalICU.h.
        * platform/text/TextCodec.cpp: Copied from platform/TextCodec.cpp.
        * platform/text/TextCodec.h: Copied from platform/TextCodec.h.
        * platform/text/TextCodecICU.cpp: Copied from platform/TextCodecICU.cpp.
        * platform/text/TextCodecICU.h: Copied from platform/TextCodecICU.h.
        * platform/text/TextCodecLatin1.cpp: Copied from platform/TextCodecLatin1.cpp.
        * platform/text/TextCodecLatin1.h: Copied from platform/TextCodecLatin1.h.
        * platform/text/TextCodecUTF16.cpp: Copied from platform/TextCodecUTF16.cpp.
        * platform/text/TextCodecUTF16.h: Copied from platform/TextCodecUTF16.h.
        * platform/text/TextCodecUserDefined.cpp: Copied from platform/TextCodecUserDefined.cpp.
        * platform/text/TextCodecUserDefined.h: Copied from platform/TextCodecUserDefined.h.
        * platform/text/TextDecoder.cpp: Copied from platform/TextDecoder.cpp.
        * platform/text/TextDecoder.h: Copied from platform/TextDecoder.h.
        * platform/text/TextDirection.h: Copied from platform/TextDirection.h.
        * platform/text/TextEncoding.cpp: Copied from platform/TextEncoding.cpp.
        * platform/text/TextEncoding.h: Copied from platform/TextEncoding.h.
        * platform/text/TextEncodingRegistry.cpp: Copied from platform/TextEncodingRegistry.cpp.
        * platform/text/TextEncodingRegistry.h: Copied from platform/TextEncodingRegistry.h.
        * platform/text/TextStream.cpp: Copied from platform/TextStream.cpp.
        * platform/text/TextStream.h: Copied from platform/TextStream.h.
        * platform/text/UnicodeRange.cpp: Copied from platform/UnicodeRange.cpp.
        * platform/text/UnicodeRange.h: Copied from platform/UnicodeRange.h.
        * platform/text/mac: Added.
        * platform/text/mac/CharsetData.h: Copied from platform/CharsetData.h.
        * platform/win/FontWin.cpp:
        (WebCore::Font::selectionRectForComplexText):
        (WebCore::Font::drawComplexText):
        (WebCore::Font::floatWidthForComplexText):
        (WebCore::Font::offsetForPositionForComplexText):
        * platform/win/PopupMenuWin.cpp:
        (WebCore::PopupMenu::paint):
        * platform/win/UniscribeController.cpp:
        (WebCore::UniscribeController::UniscribeController):
        * platform/win/UniscribeController.h:
        * platform/win/WebCoreTextRenderer.cpp:
        (WebCore::doDrawTextAtPoint):
        * platform/wx/FontWx.cpp:
        (WebCore::Font::selectionRectForComplexText):
        (WebCore::Font::drawComplexText):
        (WebCore::Font::floatWidthForComplexText):
        (WebCore::Font::offsetForPositionForComplexText):
        * rendering/EllipsisBox.cpp:
        (WebCore::EllipsisBox::paint):
        * rendering/InlineTextBox.cpp:
        (WebCore::InlineTextBox::selectionRect):
        (WebCore::InlineTextBox::paint):
        (WebCore::InlineTextBox::paintSelection):
        (WebCore::InlineTextBox::paintCompositionBackground):
        (WebCore::InlineTextBox::paintSpellingOrGrammarMarker):
        (WebCore::InlineTextBox::paintTextMatchMarker):
        (WebCore::InlineTextBox::offsetForPosition):
        (WebCore::InlineTextBox::positionForOffset):
        * rendering/RenderFileUploadControl.cpp:
        (WebCore::RenderFileUploadControl::paintObject):
        (WebCore::RenderFileUploadControl::calcPrefWidths):
        * rendering/RenderImage.cpp:
        * rendering/RenderListBox.cpp:
        (WebCore::RenderListBox::updateFromElement):
        (WebCore::RenderListBox::paintItemForeground):
        * rendering/RenderMenuList.cpp:
        (WebCore::RenderMenuList::updateOptionsWidth):
        * rendering/RenderText.cpp:
        (WebCore::RenderText::widthFromCache):
        (WebCore::RenderText::calcPrefWidths):
        (WebCore::RenderText::width):
        * rendering/RenderTextControl.cpp:
        (WebCore::RenderTextControl::setStyle):
        (WebCore::RenderTextControl::createInnerFontStyle):
        (WebCore::RenderTextControl::createSubtreeIfNeeded):
        (WebCore::RenderTextControl::calcPrefWidths):
        * rendering/RenderTextControl.h:
        * rendering/SVGInlineTextBox.cpp:
        (WebCore::SVGInlineTextBox::calculateGlyphWidth):
        (WebCore::SVGInlineTextBox::paintCharacters):
        (WebCore::SVGInlineTextBox::paintSelection):
        * rendering/SVGRootInlineBox.cpp:
        (WebCore::cummulatedWidthOfInlineBoxCharacterRange):
        (WebCore::svgFontStyleForInlineTextBox):
        * rendering/SVGRootInlineBox.h:

2007-11-30  Adele Peterson  <adele@apple.com>

        Reviewed by Darin.

        Fix for http://bugs.webkit.org/show_bug.cgi?id=16072
        <rdar://problem/5463821> REGRESSION: Mousemove event isn't fired when mouse moves over scrollbar with pressed button (16072)

        Test: fast/events/mousemove-after-drag-over-scrollbar.html

        * page/EventHandler.cpp:
        (WebCore::EventHandler::handleMouseMoveEvent): If the mouse is pressed, and we've moved over a new scrollbar, then we can clear m_lastScrollbarUnderMouse.
         We should only need to show the hover effect when the mouse isn't pressed.

2007-11-29  Brady Eidson <beidson@apple.com>

        Reviewed by Tim

        Part of <rdar://problem/5556377> - Need to accurately track and enforce database quota

        SQLite has the ability to enforce the page usage for databases.  This gives us bulletproof
        enforcement of the database size limit with reasonable granularity (within 1023 bytes by 
        default on OS X with SQLite 3.4.0)

        This also involved enhancing the ability to install/remove the authorizer to run the PRAGMA
        statements involved

        Note this patch does not actually use the new maximumSize() functionality of the 
        SQLiteDatabase class - that can be reviewed/landed seperately
        
        * platform/sql/SQLiteDatabase.cpp:
        (WebCore::SQLiteDatabase::SQLiteDatabase): 
        (WebCore::SQLiteDatabase::maximumSize): Return the current maximum size in bytes
        (WebCore::SQLiteDatabase::setMaximumSize): Based on m_pageSize, set the maximum page count
          to enforce the maximum size in bytes
        (WebCore::SQLiteDatabase::pageSize): Fetch m_pageSize if it hasn't been fetched, or return
          the cached value
        (WebCore::SQLiteDatabase::setAuthorizer): Use enableAuthorizer for the sqlite_* level 
          authorizer setup
        (WebCore::SQLiteDatabase::enableAuthorizer): Install or remove the sqlite authorizer handler
        * platform/sql/SQLiteDatabase.h: Add the m_pageSize member so we only have to fetch it once

2007-11-29  Holger Hans Peter Freyther  <holger.freyther@trolltech.com>

        Reviewed by Maciej.

        * Fix fast/events/mousedown_in_scrollbar.html
        * This test used to crash in PlatformScrollbarQt::mouse*Event due parent() returning 0.
        * Extend the current check that the scrollbar in the mev can be go away.
        This happens if we destroy a RenderLayer as the result of a click. In the
        case of Qt we can have this scrollbar in m_lastScrollbarUnderMouse. The RenderLayer
        is the ScrollbarClient, m_lastScrollbarUnderMouse is a RefPtr and keeps the
        last reference. When calling into this scrollbar the m_client pointer is a dangling pointer.
        We extend the check to set m_lastScrollbarUnderMouse back to zero when it was the
        scrollbar in the old mev and is gone in the new one.
        * This happens only on the Qt port because we send more/different move events.

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

2007-11-29  Antti Koivisto  <antti@apple.com>

        Reviewed by Mitz.

        Fix aspect ratio calculation of video.
        
        Video should always be treated as a replaced element in size calculation.
        
        Test: media/video-aspect-ratio.html

        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::calcWidth):
        (WebCore::RenderBox::calcHeight):
        * rendering/RenderBox.h:
        (WebCore::RenderBox::shouldCalculateSizeAsReplaced):
        * rendering/RenderMedia.h:
        (WebCore::RenderMedia::shouldCalculateSizeAsReplaced):

2007-11-29  Sam Weinig  <sam@webkit.org>

        Reviewed by Oliver.

        Additional fix for <rdar://problem/5592988> / http://bugs.webkit.org/show_bug.cgi?id=15936
        - More closely match IE's policy for frame navigation.

        * bindings/js/kjs_window.cpp:
        (KJS::WindowProtoFuncOpen::callAsFunction):
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::shouldAllowNavigation):
        * page/FrameTree.cpp:
        (WebCore::FrameTree::top):
        * page/FrameTree.h:

2007-11-29  Dan Bernstein  <mitz@apple.com>

        Reviewed by Adam Roben and John Sullivan.

        - make the recent searches popup extend only along the straight part of
          the search field (unless it needs to be wider).

        * platform/PopupMenuClient.h:
          Added clientInsetLeft() and clientInsetRight() for clients to
          specify desired horizontal insets for the menu.
        * platform/win/PopupMenuWin.cpp:
        (WebCore::PopupMenu::calculatePositionAndSize):
        (WebCore::PopupMenu::paint):
        * rendering/RenderMenuList.cpp:
        (WebCore::RenderMenuList::clientInsetLeft): Added. Returns 0.
        (WebCore::RenderMenuList::clientInsetRight): Ditto.
        * rendering/RenderMenuList.h:
        * rendering/RenderTextControl.cpp:
        (WebCore::RenderTextControl::clientInsetLeft): Added. Returns half the
        control's height, which is the radius of the cap on the left.
        (WebCore::RenderTextControl::clientInsetRight): Added.
        * rendering/RenderTextControl.h:

2007-11-30  Alp Toker  <alp@atoker.com>

        Reviewed by Maciej.

        http://bugs.webkit.org/show_bug.cgi?id=16173
        Licensing change

        Change license from BSD to LGPL.

        This is being done to encourage vendors to contribute their fixes back
        upstream.

        * platform/graphics/gtk/ColorGtk.cpp:
        * platform/graphics/gtk/IntPointGtk.cpp:
        * platform/graphics/gtk/IntRectGtk.cpp:
        * platform/graphics/svg/cairo/RenderPathCairo.cpp:
        * platform/graphics/svg/cairo/SVGPaintServerCairo.cpp:
        * platform/graphics/svg/cairo/SVGPaintServerGradientCairo.cpp:
        * platform/graphics/svg/cairo/SVGPaintServerPatternCairo.cpp:
        * platform/graphics/svg/cairo/SVGPaintServerSolidCairo.cpp:
        * platform/graphics/svg/cairo/SVGResourceClipperCairo.cpp:
        * platform/graphics/svg/cairo/SVGResourceMaskerCairo.cpp:
        * platform/gtk/Language.cpp:
        * platform/gtk/LoggingGtk.cpp:
        * platform/gtk/SoundGtk.cpp:
        * platform/gtk/SystemTimeGtk.cpp:
        * platform/gtk/TextBreakIteratorInternalICUGtk.cpp:

2007-11-29  Darin Adler  <darin@apple.com>

        Reviewed by Adele.

        - fix http://bugs.webkit.org/show_bug.cgi?id=16191
          REGRESSION: cannot tab to radio input after setting checked to false

        Test: fast/forms/input-radio-checked-tab.html

        * html/HTMLFormElement.cpp:
        (WebCore::HTMLFormElement::CheckedRadioButtons::addButton): Fix this code
        so that it doesn't call setChecked(false) until after the map has been updated.
        Otherwise, we can end up deallocating the map before manipulating it. As long
        as I was changing the function, I decided to make it do only a single hash
        table lookup.

        * html/HTMLInputElement.cpp: (WebCore::HTMLInputElement::setChecked):
        Remove the button from the radio buttons set before changing the checked
        state. This matches the idiom used elsewhere and fixes the problem where
        setting checked to false would not remove it from the set.

2007-11-29  Justin Garcia  <justin.garcia@apple.com>

        Reviewed by Darin Adler.

        <rdar://problem/5620093> Brief hang when Safari caches page text of XML document

        * editing/TextIterator.cpp:
        (WebCore::TextIterator::representNodeOffsetZero): When we haven't been emitting any 
        characters, shouldRepresentNodeOffsetZero() can create VisiblePositions, which is
        expensive.  So, we perform the inexpensive checks on m_node to see if it necessitates 
        emitting a character first and will early return before encountering 
        shouldRepresentNodeOffsetZero()s worse case behavior.

2007-11-29  Anders Carlsson  <andersca@apple.com>

        Reviewed by Sam.

        Don't install event handlers or set the zoom cursor if auto-shrink has been disabled.

        * loader/ImageDocument.cpp:
        (WebCore::ImageDocument::createDocumentStructure):
        (WebCore::ImageDocument::imageChanged):

2007-11-29  Beth Dakin  <bdakin@apple.com>

        Reviewed by Geoff.

        Fix for <rdar://problem/5620151> Disable JavaScript for SVG as 
        image for <img> and CSS images

        * platform/graphics/svg/SVGImage.cpp:
        (WebCore::SVGImage::dataChanged): When we create the empty clients, 
        explicitly disable JavaScript in the settings.

2007-11-29  Brady Eidson  <beidson@apple.com>

        Reviewed by Anders

        Support for <rdar://problem/5556381> and <rdar://problem/5556379>

        The Database feature in the engine needs to support delegate calls for policy decisions and
        also provide notifications when origins and databases change their state.

        This patch also polishes off the missing features of the management API

        * page/Chrome.cpp: Implement the two UIDelegate methods
        (WebCore::Chrome::requestQuotaIncreaseForNewDatabase): Ask for more space to create a new database if it won't fit
        (WebCore::Chrome::requestQuotaIncreaseForDatabaseOperation): Ask for more space to complete an in-progress operation
        * page/Chrome.h:
        * page/ChromeClient.h:
        * platform/graphics/svg/SVGImageEmptyClients.h:
        (WebCore::SVGEmptyChromeClient::requestQuotaIncreaseForNewDatabase):
        (WebCore::SVGEmptyChromeClient::requestQuotaIncreaseForDatabaseOperation):

        * storage/Database.cpp:
        (WebCore::Database::openDatabase): Check to see if this database can be opened - the quota must be high 
          enough and if it isn't, the UIDelegate should have a change to bump the quota.
          Also update the UI-relevant details (display name and estimated size) upon successful opening of the database

        * storage/DatabaseDetails.h: Remove the version parameter as it is a programatic detail of a
          site database and is not important to API clients
        (WebCore::DatabaseDetails::DatabaseDetails):
        (WebCore::DatabaseDetails::isValid):
        (WebCore::DatabaseDetails::name):

        * storage/DatabaseTracker.cpp:
        (WebCore::DatabaseTracker::openTrackerDatabase): Tweaked the schema here - there was a horrible bug with the old schema that would
          prevent you from having two databases of the same name from two different origins.  Also simplify the origin-management schema
        (WebCore::DatabaseTracker::canEstablishDatabase): Added.  Does some estimated size vs quota checks, and asks the UI delegate for 
          more space if necessary
        (WebCore::DatabaseTracker::hasEntryForOrigin):
        (WebCore::DatabaseTracker::establishEntryForOrigin): Establishes a tracker entry for the given origin with the current default quota
          Also notifies the client of the new origin
        (WebCore::DatabaseTracker::setDatabaseDetails): Update the display name and estimated size for the given database
        (WebCore::DatabaseTracker::fullPathForDatabase): Tweak to add the ability to get the path without creating it - for management purposes
        (WebCore::DatabaseTracker::populateOrigins): Populate origins from the Origins table instead of the Databases table
        (WebCore::DatabaseTracker::origins):
        (WebCore::DatabaseTracker::detailsForNameAndOrigin): For API management
        (WebCore::DatabaseTracker::usageForDatabase):
        (WebCore::DatabaseTracker::usageForOrigin):
        (WebCore::DatabaseTracker::quotaForOrigin):
        (WebCore::DatabaseTracker::setQuota): Notify the client
        (WebCore::DatabaseTracker::addDatabase): Notify the client 
        (WebCore::DatabaseTracker::deleteAllDatabases):
        (WebCore::DatabaseTracker::deleteDatabasesWithOrigin):
        (WebCore::DatabaseTracker::deleteDatabase):
        (WebCore::DatabaseTracker::deleteDatabaseFile):
        * storage/DatabaseTracker.h:

2007-11-29  Dan Bernstein  <mitz@apple.com>

        Reviewed by Beth Dakin and Darin Adler.

        - manual test for <rdar://problem/5346394> Contextmenu event doesn't fire on body element inside frame

        * manual-tests/context-click-unfocused-frame.html: Added.

2007-11-28  Antti Koivisto  <antti@apple.com>

        Reviewed by Geoff.
        
        Fallback content inside media elements should not be rendered.

        Test: media/fallback.html

        * rendering/RenderMedia.h:
        (WebCore::RenderMedia::canHaveChildren):

2007-11-28  Mark Rowe  <mrowe@apple.com>

        Windows build fix.

        * WebCore.vcproj/WebCore.vcproj:

2007-11-28  Mark Rowe  <mrowe@apple.com>

        Gtk build fix.

        * WebCore.pro:

2007-11-28  Antti Koivisto  <antti@apple.com>

        Reviewed by Oliver.

        Make QTMovieView fill color transparent. This behavior matches the specification
        (and allows nice alpha blended video).

        * platform/graphics/mac/MoviePrivateQTKit.mm:
        (WebCore::MoviePrivate::createQTMovieView):

2007-11-28  Antti Koivisto  <antti@apple.com>

        Reviewed by Darin.

        Test: media/video-controls.html
        
        <rdar://problem/5605668>
        Implement controls attribute for video element
        
        - Add RenderMedia and make RenderVideo its subclass. Controls code goes to RenderMedia while
          video specific (painting etc) code stays in RenderVideo. For example audio controls can be implemented
          later by just instantiating RenderMedia as renderer.
        - Make media renderer hierarchy inherit from RenderBlock instead of RenderReplaced so it can 
          have child nodes (for controls).
        - Controls are implemented as a shadow DOM.
        - Current look is a placeholder. It is defined purely in CSS.
        - Some things like volume controls are not yet implemented.
        - Fade-in/out is done manually, CSS animations don't work well in shadow trees.
          
        * WebCore.xcodeproj/project.pbxproj:
        * css/html4.css:
        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::attributeChanged):
        (WebCore::HTMLMediaElement::updateMovie):
        (WebCore::HTMLMediaElement::defaultEventHandler):
        * html/HTMLMediaElement.h:
        * rendering/RenderMedia.cpp: Added.
        (WebCore::MediaControlShadowRootElement::MediaControlShadowRootElement):
        (WebCore::MediaControlShadowRootElement::isShadowNode):
        (WebCore::MediaControlShadowRootElement::shadowParentNode):
        (WebCore::MediaControlInputElement::MediaControlInputElement):
        (WebCore::MediaControlInputElement::attachToParent):
        (WebCore::MediaControlPlayButtonElement::MediaControlPlayButtonElement):
        (WebCore::MediaControlPlayButtonElement::inPausedState):
        (WebCore::MediaControlPlayButtonElement::defaultEventHandler):
        (WebCore::MediaControlPlayButtonElement::update):
        (WebCore::MediaControlTimelineElement::MediaControlTimelineElement):
        (WebCore::MediaControlTimelineElement::defaultEventHandler):
        (WebCore::MediaControlTimelineElement::update):
        (WebCore::RenderMedia::RenderMedia):
        (WebCore::RenderMedia::~RenderMedia):
        (WebCore::RenderMedia::mediaElement):
        (WebCore::RenderMedia::movie):
        (WebCore::RenderMedia::setStyle):
        (WebCore::RenderMedia::createControlsShadowRoot):
        (WebCore::RenderMedia::createPanel):
        (WebCore::RenderMedia::createPlayButton):
        (WebCore::RenderMedia::createTimeline):
        (WebCore::RenderMedia::createTimeDisplay):
        (WebCore::RenderMedia::updateFromElement):
        (WebCore::RenderMedia::updateControls):
        (WebCore::RenderMedia::timeUpdateTimerFired):
        (WebCore::RenderMedia::updateTimeDisplay):
        (WebCore::RenderMedia::updateControlVisibility):
        (WebCore::RenderMedia::changeOpacity):
        (WebCore::RenderMedia::opacityAnimationTimerFired):
        (WebCore::RenderMedia::forwardEvent):
        * rendering/RenderMedia.h: Added.
        (WebCore::RenderMedia::renderName):
        (WebCore::RenderMedia::isMedia):
        (WebCore::RenderMedia::intrinsicSize):
        * rendering/RenderObject.h:
        (WebCore::RenderObject::isMedia):
        * rendering/RenderVideo.cpp:
        (WebCore::RenderVideo::RenderVideo):
        (WebCore::RenderVideo::videoSizeChanged):
        (WebCore::RenderVideo::paintObject):
        (WebCore::RenderVideo::layout):
        (WebCore::RenderVideo::updateFromElement):
        (WebCore::RenderVideo::calcAspectRatioWidth):
        (WebCore::RenderVideo::calcAspectRatioHeight):
        * rendering/RenderVideo.h:

2007-11-28  Justin Garcia  <justin.garcia@apple.com>

        Reviewed by Darin Adler.

        <rdar://problem/5573879> GMail Beta: Crash in when undoing Remove Formating
        
        In the new beta, Google has added some custom code on top of our RemoveFormat
        to work around a bug where fully selected lists aren't removed.  This code corrupts
        the undo stack and causes crashes.  This change fixes two problems with RemoveFormat
        so that Google doesn't have to have any custom code. After checking this in I'll 
        work on bulletproofing the undo stack

        * WebCore.xcodeproj/project.pbxproj: 
        * editing/CompositeEditCommand.cpp:
        (WebCore::CompositeEditCommand::insertLineBreak): Added this convenience method.
        (WebCore::CompositeEditCommand::inputText): Added code to select all inserted text, not
        just the last paragraph.  Added code to support an input string with '\n's.
        * editing/CompositeEditCommand.h:
        * editing/Editor.cpp:
        (WebCore::Editor::removeFormattingAndStyle): Moved code to its own EditCommand.
        * editing/RemoveFormatCommand.cpp: Added. Moved code from removeFormattingAndStyle here.
        (WebCore::RemoveFormatCommand::RemoveFormatCommand):
        (WebCore::RemoveFormatCommand::doApply): Added code to remove fully selected lists.
        * editing/RemoveFormatCommand.h: Added.
        (WebCore::RemoveFormatCommand::editingAction):

2007-11-28  Dan Bernstein  <mitz@apple.com>

        Reviewed by Dave Hyatt.

        - fix <rdar://problem/5612459> CrashTracer: [REGRESSION] 61 crashes in Safari at com.apple.WebCore: WebCore::AutoTableLayout::layout + 2046

        Test: fast/table/empty-auto-column-zero-divide.html

        * rendering/AutoTableLayout.cpp:
        (WebCore::AutoTableLayout::recalcColumn):
        (WebCore::AutoTableLayout::fullRecalc):
        (WebCore::AutoTableLayout::calcEffectiveWidth):
        (WebCore::AutoTableLayout::layout): When distributing the remaining
        width among columns, skip those whose effective (rather than
        specified) width is auto and contain only empty cells.

2007-11-28  Peter Kasting  <zerodpx@gmail.com>

        Reviewed by Alp Toker.

        http://bugs.webkit.org/show_bug.cgi?id=16169
        GIF decoder needs to set hasAlpha() correctly on subsequent frames.
        
        This also removes the workaround for this problem in
        ImageSourceCairo.cpp.

        * platform/graphics/cairo/ImageSourceCairo.cpp:
        (WebCore::ImageSource::frameHasAlphaAtIndex):
        * platform/image-decoders/gif/GIFImageDecoder.cpp:
        (WebCore::GIFImageDecoder::initFrameBuffer):

2007-11-28  Dan Bernstein  <mitz@apple.com>

        Reviewed by Darin Adler and Adam Roben.

        - <rdar://problem/5057218> Reenable "recent searches" search field menu when menu is fully implemented

        * platform/win/SearchPopupMenuWin.cpp:
        (WebCore::SearchPopupMenu::enabled): Changed to return true.
        (WebCore::autosaveKey): Added. Returns a preferences key for the
        autosave name by prefixing it with "com.apple.WebKit.searchField:".
        (WebCore::SearchPopupMenu::saveRecentSearches): Implemented.
        (WebCore::SearchPopupMenu::loadRecentSearches): Implemented.

2007-11-28  Alp Toker  <alp@atoker.com>

        Reviewed by Mark Rowe.

        http://bugs.webkit.org/show_bug.cgi?id=15689
        [GTK] Background of loading images is always black

        frameHasAlphaAtIndex() exists only to allow optimization for cases we
        are certain the image can be blitted rather than composited.

        Thus we need to be conservative, returning false only when we are
        absolutely certain there is no need for composited copying, and true
        otherwise.

        CG doesn't even bother with this optimization at all and always
        returns true.

        Patch includes a workaround for
          http://bugs.webkit.org/show_bug.cgi?id=16169
          GIF ImageDecoder hasAlpha() return value incorrect

        * platform/graphics/cairo/ImageSourceCairo.cpp:
        (WebCore::ImageSource::frameHasAlphaAtIndex):

2007-11-27  Alp Toker  <alp@atoker.com>

        Reviewed by Mark Rowe.

        Install the JavaScriptCore headers as part of the GTK+ port.

        * WebCore.pro:

2007-11-27  Beth Dakin  <bdakin@apple.com>

        Reviewed by Oliver.

        Fix for <rdar://problem/5616052> SVGs with width or height of 100% 
        hang when used as a background-image (16164)

        * platform/graphics/svg/SVGImage.cpp:
        (WebCore::SVGImage::size): Use valueAsPercentage() for percents 
        instead of valueInSpecifiedUnits(). valueInSpecifiedUnits() 
        returns, for example, 50 for 50%, so multiplying percentages by the 
        default size of 300 x 150 led to ridiculously huge dimensions for 
        SVG images, and the subsequent hang. 

2007-11-27  Jon Honeycutt  <jhoneycutt@apple.com>

        Reviewed by Adam.

        Set haveRegisteredWindowClass when we register the window class.

        * plugins/win/PluginViewWin.cpp:
        (WebCore::registerPluginView):

2007-11-27  Timothy Hatcher  <timothy@apple.com>

        Reviewed by Sam Weinig.

        Bug 16165: Dragging the inspector toolbar should move the window
        http://bugs.webkit.org/show_bug.cgi?id=16165

        * page/inspector/DocumentPanel.js: Call the new drag functions, and cleanup code.
        * page/inspector/inspector.css: Only make the toolbar transparent in detached mode.
        * page/inspector/inspector.js: Call the new drag functions, and cleanup code. Add
          toolbar drag functions that move the window.

2007-11-27  Antti Koivisto  <antti@apple.com>

        Reviewed by Mitz.

        Small changes to make RenderSlider a bit more generic so it can be used in video controls.

        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::defaultEventHandler): Fix coordinates with forwarded events.
        * rendering/RenderSlider.cpp:
        (WebCore::HTMLSliderThumbElement::defaultEventHandler): Fix coordinates with forwarded events.
        (WebCore::RenderSlider::setStyle):
        (WebCore::RenderSlider::createThumbStyle): Copy thumb left and top from the orginal style so position does not reset.
        (WebCore::RenderSlider::mouseEventIsInThumb): Make this work with forwarded events.
        * rendering/RenderSlider.h:

2007-11-27  Antti Koivisto  <antti@apple.com>

        Reviewed by Darin.

        - Don't use hasPseudoId() optimization for pseudo styles used in shadow trees. These styles
          generally exist when asked for so the optimization does not do much. This reverses the continuing
          growth of the _pseudoBits bitfield in RenderStyle.
        - Add some pseudo elements for media controls

        * css/CSSSelector.cpp:
        (WebCore::CSSSelector::extractPseudoType):
        * css/CSSSelector.h:
        (WebCore::CSSSelector::):
        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::matchRulesForList):
        (WebCore::CSSStyleSelector::checkOneSelector):
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::getPseudoStyle):
        * rendering/RenderStyle.cpp:
        (WebCore::pseudoBit):
        (WebCore::RenderStyle::hasPseudoStyle):
        (WebCore::RenderStyle::setHasPseudoStyle):
        * rendering/RenderStyle.h:
        (WebCore::RenderStyle::):

2007-11-27  Timothy Hatcher  <timothy@apple.com>

        Reviewed by Kevin McCullough.

        Bug 16161: window.moveBy(0, 0) moves the window by -22px vertically
        http://bugs.webkit.org/show_bug.cgi?id=16161

        Removed the "Adjust the window rect to be in the coordinate space of
        the screen rect" step which was always adding (0,22) to the window
        position (on the main screen). Instead, account for screen X and Y
        in the bottom and right constrain step.

        Added more test cases to: fast/dom/Window/window-resize.html

        * bindings/js/kjs_window.cpp:
        (KJS::adjustWindowRect):

2007-11-27  Timothy Hatcher  <timothy@apple.com>

        Reviewed by Adam Roben.

        * page/inspector/inspector.css: Make the text in the Network
        panel legend more readable.

2007-11-27  Timothy Hatcher  <timothy@apple.com>

        Reviewed by Adam Roben.

        Don't call setNeedsReapplyStylesInAllFrames if the
        authorAndUserStylesEnabled setting didn't change.

        * page/Settings.cpp:
        (WebCore::Settings::setAuthorAndUserStylesEnabled):

2007-11-27  Alp Toker  <alp@atoker.com>

        Fix potential broken build due to a missing DEPENDPATH.

        * WebCore.pro:

2007-11-26  Timothy Hatcher  <timothy@apple.com>

        Reviewed by Dave Hyatt.

        <rdar://problem/5569233> Add the ability to disable author and user CSS styles

        * WebCore.base.exp: Add the Settings::setAuthorAndUserStylesEnabled symbol.
        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::CSSStyleSelector): Add a new matchAuthorAndUserStyles parameter.
        (WebCore::CSSStyleSelector::styleForElement): Check m_matchAuthorAndUserStyles before
        matching user and author rules.
        (WebCore::CSSStyleSelector::pseudoStyleForElement): Ditto.
        (WebCore::CSSStyleSelector::styleRulesForElement): Ditto.
        * css/CSSStyleSelector.h: Add m_matchAuthorAndUserStyles and new constructor parameter.
        * dom/Document.cpp:
        (WebCore::Document::Document): Pass Settings::authorAndUserStylesEnabled to the CSSStyleSelector.
        (WebCore::Document::recalcStyleSelector): Skip collecting the author stylesheets if
        Settings::authorAndUserStylesEnabled is false, and pass that to the CSSStyleSelector.
        * page/Settings.cpp:
        (WebCore::Settings::Settings): Initialize m_authorAndUserStylesEnabled to true.
        (WebCore::Settings::setAuthorAndUserStylesEnabled): Recalc style in all the frames
        when the setting changes.
        * page/Settings.h: Add m_authorAndUserStylesEnabled.
        (WebCore::Settings::authorAndUserStylesEnabled): Return m_authorAndUserStylesEnabled.

2007-11-27  Alp Toker  <alp@atoker.com>

        Reviewed by Mark Rowe.

        Based on changes by Mike Emmel.

        CURL HTTP backend local file fixes:

        Set a MIME type for local files based on the file extension.

        Remove any HTTP query part sent to a local file.

        * platform/network/curl/ResourceHandleManager.cpp:
        (WebCore::ResourceHandleManager::startJob):

2007-11-26  Brady Eidson  <beidson@apple.com>

        Reviewed by Mark Rowe

        Allow setting the default storage quota per database origin

        * WebCore.base.exp:

        * page/Settings.cpp:
        (WebCore::Settings::setDefaultDatabaseOriginQuota):
        (WebCore::Settings::defaultDatabaseOriginQuota):
        * page/Settings.h:

        * storage/DatabaseTracker.cpp:
        (WebCore::DatabaseTracker::DatabaseTracker):
        (WebCore::DatabaseTracker::setDefaultOriginQuota):
        (WebCore::DatabaseTracker::defaultOriginQuota):
        * storage/DatabaseTracker.h:

2007-11-26  Peter Kasting  <zerodpx@gmail.com>

        Reviewed by Alp Toker.

        http://bugs.webkit.org/show_bug.cgi?id=15974
        GIF decoding should respect frames' specified disposal methods.

        * platform/image-decoders/ImageDecoder.h:
        (WebCore::RGBA32Buffer::):
        (WebCore::RGBA32Buffer::RGBA32Buffer):
        (WebCore::RGBA32Buffer::disposalMethod):
        (WebCore::RGBA32Buffer::setDisposalMethod):
        * platform/image-decoders/gif/GIFImageDecoder.cpp:
        (WebCore::GIFImageDecoder::frameBufferAtIndex):
        (WebCore::GIFImageDecoder::initFrameBuffer):
        (WebCore::GIFImageDecoder::prepEmptyFrameBuffer):
        (WebCore::GIFImageDecoder::haveDecodedRow):
        (WebCore::GIFImageDecoder::frameComplete):
        * platform/image-decoders/gif/GIFImageDecoder.h:
        * platform/image-decoders/gif/GIFImageReader.cpp:
        (GIFImageReader::read):
        * platform/image-decoders/gif/GIFImageReader.h:
        (GIFFrameReader::GIFFrameReader):

2007-11-26  Adam Roben  <aroben@apple.com>

        Add a Color(CGColorRef) constructor

        Reviewed by Darin.

        * platform/graphics/Color.h:
        * platform/graphics/cg/ColorCG.cpp:
        (WebCore::Color::Color): Added.

2007-11-26  Adele Peterson  <adele@apple.com>

        Reviewed by Darin.

        Update to last change.  Moved addPendingSheet call to within nil check for m_cachedSheet.

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

2007-11-26  Adele Peterson  <adele@apple.com>

        Reviewed by Darin.

        Fix for <rdar://problem/5591583> CrashTracer: [USER] 157 in Mail crashes at -[WebCoreFrameBridge reapplyStylesForDeviceType:]

        * page/Frame.cpp: Add nil checks since every other caller of requestCSSStyleSheet checks for nil.
        (WebCore::UserStyleSheetLoader::UserStyleSheetLoader):
        (WebCore::UserStyleSheetLoader::~UserStyleSheetLoader):

2007-11-26  Mark Rowe  <mrowe@apple.com>

        GCC 4.2 build fix.

        * xml/XSLTUnicodeSort.cpp: Add another WTF_ATTRIBUTE_PRINTF.

2007-11-26  Feng Qian <ian.eng.webkit@gmail.com>

        Reviewed and touched up by Sam Weinig.

        Fix for http://bugs.webkit.org/show_bug.cgi?id=16073

        Test: http/tests/security/xss-DENIED-invalid-domain-change.html

        * dom/Document.cpp:
        (WebCore::Document::setDomain): Don't set the securityOrigin policy unless
        the set succeeds.  Adds some early returns as well.

2007-11-26  Steve Falkenburg  <sfalken@apple.com>

        Build fix.

        * WebCore.vcproj/WebCore.make:
        * WebCore.vcproj/migrate-idls.sh:

2007-11-26  Sam Weinig  <sam@webkit.org>

        Fix potential null-dereference.

        Reviewed by Adam Roben.

        * page/FrameTree.cpp:
        (WebCore::FrameTree::isDescendantOf):

2007-11-26  Sam Weinig  <sam@webkit.org>

        Reviewed by Darin.

        Fix for <rdar://problem/5592988>
        - Enforce tighter restrictions on what frames in other domains
          can be navigated.

        Tests: http/tests/security/frameNavigation/xss-ALLOWED-parent-navigation-change.html
               http/tests/security/frameNavigation/xss-ALLOWED-targeted-subframe-navigation-change.html

        * bindings/js/kjs_window.cpp:
        (KJS::Window::put):
        (KJS::Location::put):
        (KJS::LocationProtoFuncReplace::callAsFunction):
        (KJS::LocationProtoFuncAssign::callAsFunction):
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::createWindow):
        (WebCore::FrameLoader::load):
        (WebCore::FrameLoader::shouldAllowNavigation): Move and update logic from canTarget().
        * loader/FrameLoader.h:
        * page/FrameTree.cpp:
        (WebCore::FrameTree::isDescendantOf): Make this O(1) in the case when both frames are not
        in the same page.

2007-11-26  Steve Falkenburg  <sfalken@apple.com>

        Build fix.

        * WebCore.vcproj/migrate-idls.sh:

2007-11-26  Dan Bernstein  <mitz@apple.com>

        Reviewed by Dave Hyatt.

        - fix <rdar://problem/5609337> Making a float shorter does not remove it from the floating object list of a nested block it intruded into

        Test: fast/dynamic/float-withdrawal-2.html

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::layoutBlockChildren): When a float may have
        been withdrawn from a child, mark all descendants if necessary and not
        just the child.

2007-11-26  Steve Falkenburg  <sfalken@apple.com>

        Build fix.

        * WebCore.vcproj/MigrateIDLAndScripts: Copied from WebCore.vcproj/MigrateIDLAndScripts.make.
        * WebCore.vcproj/MigrateIDLAndScripts.make: Removed.
        * WebCore.vcproj/migrate-idls.sh:

2007-11-26  Brady Eidson  <beidson@apple.com>

        Reviewed by Anders (and typo lovingly found by Adam)

        Change Databases to be stored in a per-origin directory hierarchy - this will make
        storage quotas much easier to enforce

        * platform/SecurityOriginData.cpp:
        (WebCore::SecurityOriginData::SecurityOriginData): Parse string based on '_' instead of ':'
        (WebCore::SecurityOriginData::stringIdentifier): Change to use '_' as a separator instead of ':'.  
          '_' still works due to not being allowed in domain names, but also is a valid filename character '
          on all filesystems we care about

        * storage/DatabaseTracker.cpp:
        (WebCore::DatabaseTracker::fullPathForDatabase): Create a per-origin directory hierarchy to categorize
          databases by origin

2007-11-26  Timothy Hatcher  <timothy@apple.com>

        Reviewed by Adam Roben.

        Bug 16137: Web Inspector window on Leopard should have a unified toolbar and window title
        http://bugs.webkit.org/show_bug.cgi?id=16137

        On Leopard the toolbar background will be transparent, to allow the
        window background to show through the transparent WebView. The 
        search results divs needed to move inside the "main" div, so they
        would be clipped and not show where the toolbar is.

        * page/InspectorController.cpp:
        (WebCore::platform): Return a string for which platform we are.
        (WebCore::InspectorController::windowScriptObjectAvailable):
        Define the platform function on the JavaScript class.
        * page/inspector/Panel.js: Add panels to the panels div.
        * page/inspector/inspector.css: On the Leopard platform make
        the toolbar background transparent so the window background shows.
        * page/inspector/inspector.html: Add a panels div and move search
        result divs inside the main div.
        * page/inspector/inspector.js: Tweak the resize code to acount for
        the search results divs moving inside the main div.

2007-11-25  Rodney Dawes  <dobey@wayofthemonkey.com>

        Reviewed by Maciej Stachowiak.

        Remove the unneeded CFNETWORK #ifdefs.

        * loader/NetscapePlugInStreamLoader.h:

2007-11-24  Laszlo Gombos  <laszlo.gombos@gmail.com>

        Reviewed by Sam Weinig.

        Add printf format attribute to several functions. Use the the new WTF_ATTRIBUTE_PRINTF define.

        * dom/XMLTokenizer.cpp:
        * dom/XMLTokenizer.h:
        * platform/DeprecatedString.h:
        * platform/PlatformString.h:

2007-11-25  Dan Bernstein  <mitz@apple.com>

        Reviewed by Adam Roben.

        - fix off-center error images

        Covered by many pixel tests with missing images

        * rendering/RenderImage.cpp:
        (WebCore::RenderImage::paint): Account for the 1 pixel outline when
        positioning the error image.

2007-11-25  Kevin Ollivier  <kevino@theolliviers.com>

        wx build fix. Fix filename case for case-sensitive filesystems.

        * WebCoreSources.bkl:

2007-11-22  Nikolas Zimmermann  <zimmermann@kde.org>

        Reviewed by Adam Roben.

        Fixes: http://bugs.webkit.org/show_bug.cgi?id=15564

        Fix problems with hidden glyphs. They were taken into account for quite
        some operations (hit testing, length calulcations etc..) except painting.
        Especially fixes boundaries of <textPath> (see using Web Inspector) if
        text-anchor isn't equal to 'start'.

        Added testcase:
        svg/text/textPathBoundsBug.svg

        Fixed testcase: (all showed text selection problems on text paths)
        svg/batik/text/textGlyphOrientationHorizontal.svg
        svg/batik/text/textOnPath.svg
        svg/batik/text/textOnPath3.svg
        svg/batik/text/verticalTextOnPath.svg
        svg/text/text-align-04-b.svg
        svg/W3C-SVG-1.1/text-align-04-b.svg

        * rendering/SVGCharacterLayoutInfo.cpp:
        (WebCore::SVGChar::isHidden):
        * rendering/SVGCharacterLayoutInfo.h:
        (WebCore::SVGCharOnPath::SVGCharOnPath):
        * rendering/SVGInlineTextBox.cpp:
        (WebCore::SVGInlineTextBoxClosestCharacterToPositionWalker::chunkPortionCallback):
        (WebCore::SVGInlineTextBoxSelectionRectWalker::chunkPortionCallback):
        * rendering/SVGRootInlineBox.cpp:
        (WebCore::topLeftPositionOfCharacterRange):
        (WebCore::SVGRootInlineBoxPaintWalker::chunkPortionCallback):
        (WebCore::cummulatedWidthOrHeightOfTextChunk):
        (WebCore::applyTextAnchorToTextChunk):
        (WebCore::applyTextLengthCorrectionToTextChunk):
        (WebCore::SVGRootInlineBox::layoutInlineBoxes):
        (WebCore::SVGRootInlineBox::buildLayoutInformationForTextBox):
        (WebCore::SVGRootInlineBox::buildTextChunks):

2007-11-25  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Maciej.

        http://bugs.webkit.org/show_bug.cgi?id=15919
        XSLTProcessor.transformToFragment creates an extra not defined TEXT_NODE at the end

        Test: fast/xsl/extra-lf-at-end.html

        * xml/XSLTProcessor.cpp:
        (WebCore::writeToVector): Changed to use Vector to avoid slow String::apend().
        (WebCore::saveResultToString): Remove trailing line feed if present.

2007-11-24  Mark Rowe  <mrowe@apple.com>

        Reviewed by Tim Hatcher.

        Fix <rdar://problem/5432686> 333MB RPRVT seems to leak @ www.43folders.com (1hr plug-in stream).
        http://bugs.webkit.org/show_bug.cgi?id=13705

        Don't buffer the entire stream contents in memory in the ResourceLoader.

        * loader/mac/NetscapePlugInStreamLoaderMac.mm:
        (WebCore::NetscapePlugInStreamLoader::NetscapePlugInStreamLoader):
        (WebCore::NetscapePlugInStreamLoader::didFinishLoading):
        * loader/mac/WebPlugInStreamLoaderDelegate.h:

2007-11-23  Adam Roben  <aroben@apple.com>

        Get rid of WebCoreSystemInterface on Windows

        The one function defined in that file is now in WebKitSystemInterface.

        Reviewed by Tim.

        * WebCore.vcproj/WebCore.vcproj: Removed
        WebCoreSystemInterface.{cpp,h}.
        * platform/graphics/cg/ImageCG.cpp: Made #include of
        WebCoreSystemInterface.h Mac-only.
        * platform/win/GraphicsContextWin.cpp: Ditto.
        * platform/win/WebCoreSystemInterface.cpp: Removed.
        * platform/win/WebCoreSystemInterface.h: Removed.

2007-11-24  Adam Roben  <aroben@apple.com>

        Replace uses of %@ with %s in the inspector

        Rubberstamped by Tim.

        * English.lproj/InspectorLocalizedStrings.js: Changed %@ to %s.
        * page/inspector/DatabasePanel.js: Ditto.
        * page/inspector/StylesSidebarPane.js: Ditto.
        * page/inspector/inspector.js: Ditto.
        * page/inspector/utilities.js:
        (String.vsprintf): Removed @ as a format specifier.

2007-11-24  Adam Roben  <aroben@apple.com>

        Windows build fix

        Turn off the change made in r27984 on Windows for now.

        * xml/XSLTProcessor.cpp:
        (WebCore::XSLTProcessor::transformToString):
        * xml/XSLTUnicodeSort.cpp:

2007-11-24  Timothy Hatcher  <timothy@apple.com>

        Reviewed by Adam Roben.

        Bug 16121: Web Inspector needs helper functions that pass a 'this' object to
        addEventListener and setTimeout
        http://bugs.webkit.org/show_bug.cgi?id=16121

        Add Function.prototype.bind. This helper will return a wrapper function
        that will call the original function with the supplied arguments
        and using the supplied 'this' object.

        * page/inspector/Database.js: Remove a use of setTimeout by
          inheriting some common functions from Resource.
        * page/inspector/DatabasePanel.js: Use the new bind function.
        * page/inspector/ConsolePanel.js: Ditto.
        * page/inspector/DocumentPanel.js: Ditto.
        * page/inspector/NetworkPanel.js: Ditto.
        * page/inspector/PropertiesSection.js: Ditto.
        * page/inspector/Resource.js: Ditto.
        * page/inspector/SidebarPane.js: Ditto.
        * page/inspector/inspector.html: Moved Database.js after Resource.js,
          now that Database.js uses it.
        * page/inspector/inspector.js: Use the new bind function. Also
          removed a setTimeout used for the localized strings code. There is
          now a load event listener added to the localized strings script
          element that will call WebInspector.loaded.
        * page/inspector/utilities.js: Add Function.prototype.bind.

2007-11-24  Timothy Hatcher  <timothy@apple.com>

        Reviewed by Adam Roben.

        Bug 16112: Some Web Inspector UI elements use offsetWidth and offsetHeight before the stylesheet loads
        http://bugs.webkit.org/show_bug.cgi?id=16112

        In the places where we use offsetWidth and offsetHeight before
        the stylesheet loads there is now a check. If the body's
        offsetWidth is not greater than zero, then set a timeout
        to do the updates requiring the stylesheet later.

        The three places this happened:
        - DOM tree selection highlight would show up at the wrong height
          when using Inspect Element to open the inspector.
        - DOM tree breadcrumbs would not collapse when using Inspect Element
          to open the inspector.
        - Network Timeline divider lines would not show when opening directly
          into the timeline.

        * page/inspector/DocumentPanel.js: Check if the stylesheet loaded.
        * page/inspector/NetworkPanel.js: Ditto.
        * page/inspector/inspector.html: Include the stylesheet before
          any scripts, this will help get it loaded sooner.

2007-11-24  Kevin Ollivier  <kevino@theolliviers.com>

        Add wx implementation for pathGetFilename

        Reviewed by David D. Kilzer.

        * html/HTMLFormElement.cpp:
        (WebCore::pathGetFilename):

2007-11-23  Timothy Hatcher  <timothy@apple.com>

        Reviewed by Adam Roben.

        Bug 16110: Clicking inside the resource headers in the network timeline collapses them
        http://bugs.webkit.org/show_bug.cgi?id=16110

        Toggle the resource headers only if the click happens on the
        resource row, not within the headers area.

        * WebCore.xcodeproj/project.pbxproj:
        * page/inspector/NetworkPanel.js:

2007-11-23  Kevin Ollivier  <kevino@theolliviers.com>

        Win build fixes. CURL needs winsock, so don't disable it, and
        include pthreads.h to get the threadsafe *_r functions.

        Reviewed by Adam Roben.

        * config.h:
        * loader/FTPDirectoryDocument.cpp:
        * loader/FTPDirectoryParser.cpp:

2007-11-23  Kevin Ollivier  <kevino@theolliviers.com>

        wx build fix. Move wx settings to project build settings,
        remove some old settings that were masking a build problem,
        and fix include ordering to ensure proper config.h and
        unicode/utf8.h headers are used. 

        * webcore-base.bkl:
        * webcore-wx.bkl:

2007-11-23  Simon Hausmann  <hausmann@webkit.org>

        Reviewed by George Staikos <staikos@kde.org>.

        Another build fix specific to trunk (instead of the stable branch) to fix make clean (which the buildbots call).

        * WebCore.pro:

2007-11-23  Alexey Proskuryakov  <ap@webkit.org>

        Not reviewed, trivial leak fix.

        Fix xsltUnicodeSortFunction() memory leaks.

        * xml/XSLTUnicodeSort.cpp:
        (WebCore::xsltUnicodeSortFunction):

2007-11-23  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Maciej.

        <rdar://problem/5539306> REGRESSION: redirect fails when subframe's document is opened but
        not closed (affects digg.com)

        Tests: fast/loader/meta-refresh-vs-open.html
               fast/loader/redirect-with-open-subframe-2.html
               fast/loader/redirect-with-open-subframe.html
               http/tests/loading/onload-vs-immediate-refresh.pl

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::scheduleRedirection): Only check whether the load is complete for
        HTTP redirects - JavaScript-initiated ones are effective immediately.

2007-11-23  Dan Bernstein  <mitz@apple.com>

        Reviewed by Alexey Proskuryakov.

        - apply matrix transforms on the correct side of the transformation
          matrix (not on the side where the vector is multiplied).

        Test: fast/transforms/matrix-02.html

        * rendering/RenderStyle.h:
        (WebCore::MatrixTransformOperation::apply):

2007-11-23  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Maciej.

        http://bugs.webkit.org/show_bug.cgi?id=16077
        <rdar://problem/5609785> XSLT processor <xsl:sort> algorithm is incompatible with other
        browser implementations

        Test: fast/xsl/sort-unicode.xml

        * xml/XSLTProcessor.cpp:
        (WebCore::XSLTProcessor::transformToString): Set a custom sort function.

        * xml/XSLTUnicodeSort.cpp: Added.
        (init_xsltTransformError):
        (xsltTransformError):
        (WebCore::xsltUnicodeSortFunction):
        * xml/XSLTUnicodeSort.h: Added.
        ICU-based implementation of xsl:sort, using an example from libxslt distribution.
        Only minimal coding style fixes to ease synchronization with upstream in the future.

        * icu/unicode/ucol.h: Added.
        * icu/unicode/uset.h: Added.
        Taken from ICU 3.2

        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * WebCoreSources.bkl:
        Added XSLTUnicodeSort.cpp.

2007-11-22  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Maciej.

        http://bugs.webkit.org/show_bug.cgi?id=14977
        Hixie's DOM Core performance test shows insert >10x slower than append

        Each invocation of Element.childNodes[n] was creating and registering a new ChildNodeList,
        which persisted and listened to notifications until GC.

        A fix is to avoid registering child node lists for notifications - they don't need them, as
        they share a common cache in Node.

        * dom/Node.cpp:
        (WebCore::Node::registerNodeList):
        (WebCore::Node::unregisterNodeList):
        (WebCore::Node::notifyLocalNodeListsAttributeChanged):
        (WebCore::Node::notifyLocalNodeListsChildrenChanged):
        * dom/NodeList.h:
        (WebCore::NodeList::needsNotifications):

2007-11-22  Dan Bernstein  <mitz@apple.com>

        Reviewed by Antti Koivisto.

        - fix http://bugs.webkit.org/show_bug.cgi?id=15811
          WebKit plug-ins can re-enter WebKit under attach()
          <rdar://problem/5577978>

        Defer plug-in loading until after attach and recalcStyle using the
        post-attach callback mechanism. Netscape plug-ins are still loaded only
        after layout.

        * dom/ContainerNode.cpp:
        Made NodeCallbackQueue elements retain the Node because callbacks might
        delete nodes that are in the callback queue.
        (WebCore::ContainerNode::suspendPostAttachCallbacks): Added. Needed to
        prevent post-attach callbacks from being dispatched under recalcStyle().
        (WebCore::ContainerNode::resumePostAttachCallbacks): Ditto.
        (WebCore::ContainerNode::dispatchPostAttachCallbacks): Factored out from
        attach().
        (WebCore::ContainerNode::attach):
        * dom/ContainerNode.h:
        * dom/Document.cpp:
        (WebCore::Document::recalcStyle): Added calls to
        suspendPostAttachCallbacks() and resumePostAttachCallbacks().
        * html/HTMLEmbedElement.cpp:
        (WebCore::HTMLEmbedElement::HTMLEmbedElement):
        (WebCore::HTMLEmbedElement::attach): Changed to queue the widget update
        for post-attach.
        (WebCore::HTMLEmbedElement::updateWidget): Added. Called by the
        post-attach callback.
        * html/HTMLEmbedElement.h: Added an m_needWidgetUpdate member needed to
        prevent a double update if another plug-in's post-attach updateWidget()
        triggers a layout which updates the widget before this plug-in's
        post-attach callback is invoked.
        (WebCore::HTMLEmbedElement::setNeedWidgetUpdate): Added a setter for
        m_needWidgetUpdate.
        * html/HTMLObjectElement.cpp:
        (WebCore::HTMLObjectElement::attach): Changed to queue the widget update
        for post-attach.
        (WebCore::HTMLObjectElement::updateWidget): Added. Called by the
        post-attach callback.
        * html/HTMLObjectElement.h:
        (WebCore::HTMLObjectElement::setNeedWidgetUpdate): Added a setter for
        m_needWidgetUpdate.
        * html/HTMLPlugInElement.cpp:
        (WebCore::HTMLPlugInElement::updateWidgetCallback): Added.
        * html/HTMLPlugInElement.h:
        (WebCore::HTMLPlugInElement::updateWidget):
        * rendering/RenderPartObject.cpp:
        (WebCore::RenderPartObject::updateWidget): Added calls to
        setNeedWidgetUpdate(false) so that if this method is called from
        FrameView::layout() during post-attach dispatch of another plug-in,
        it will not be called again when this plug-in's post-attach callback
        is dispatched.
        * rendering/RenderPartObject.h:
        (WebCore::RenderPartObject::updateWidget) Renamed argument to match
        the method definition.

2007-11-22  Timothy Hatcher  <timothy@apple.com>

        Reviewed by Dan Bernstein.

        Fix the Element.hasStyleClass and Element.removeStyleClass helpers
        to not find and replace substrings, but whole class names at the
        beginning or end of the string or surrounded by whitespace.

        * page/inspector/utilities.js:

2007-11-22  Timothy Hatcher  <timothy@apple.com>

        Revert part of my r27935 change that made the Tip balloons
        animate with CSS transitions. The balloon was only opacity 0,
        so it would cause its row to highlight when hovering over
        another row.

        * page/inspector/NetworkPanel.js:
        * page/inspector/inspector.css:

2007-11-22  Dan Bernstein  <mitz@apple.com>

        Reviewed by Maciej Stachowiak.

        - fix http://bugs.webkit.org/show_bug.cgi?id=15943
          -webkit-transform matrix does not work

        Test: fast/transforms/matrix-01.html

        Parse all six matrix entries as numbers.

        * css/CSSParser.cpp:
        (WebCore::TransformOperationInfo::TransformOperationInfo):
        (WebCore::CSSParser::parseTransform):
        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::applyProperty):
        * rendering/RenderStyle.cpp:
        (WebCore::MatrixTransformOperation::blend):
        * rendering/RenderStyle.h:
        (WebCore::MatrixTransformOperation::MatrixTransformOperation):
        (WebCore::MatrixTransformOperation::apply):

2007-11-22  Laszlo Gombos  <laszlo.gombos@gmail.com>

        Reviewed by Alp Toker.

        Fix some compilation warnings.  Do not reference undefined (platform) specific type (WebCore::CachedFont::m_fontData)

        * loader/CachedFont.cpp:
        (WebCore::CachedFont::~CachedFont):
        (WebCore::CachedFont::allReferencesRemoved):

2007-11-22  Alp Toker  <alp@atoker.com>

        Reviewed by Mark Rowe.

        GTK+ drawing fix.

        Add a check to avoid crashing when the GraphicsContext is not
        associated with a GdkEventExpose. This was noticed when adding
        printing support but might be triggered in other situations too.

        * platform/gtk/WidgetGtk.cpp:
        (WebCore::Widget::paint):

2007-11-22  Julien Chaffraix  <julien.chaffraix@gmail.com>

        Reviewed by Alexey.

        Bug 15530: XMLHttpRequest should not support certain methods

        Test: http/tests/xmlhttprequest/xmlhttprequest-forbidden-methods-exception.html

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

2007-11-22  Simon Hausmann  <hausmann@kde.org>

        Reviewed by George.

        For the build inside Qt include qbase.pri and don't duplicate what qbase.pri otherwise does (install targets, etc.)

        * WebCore.pro:

2007-11-22  Simon Hausmann  <hausmann@kde.org>

        Reviewed by George.

        Don't set OBJECTS_DIR when building inside Qt

        * WebCore.pro:

2007-11-22  Simon Hausmann  <hausmann@kde.org>

        Reviewed by George.

        Use ../generated as path for the generated sources for builds inside Qt

        * WebCore.pro:

2007-11-22  Simon Hausmann  <hausmann@kde.org>

        Reviewed by George.

        Make the directory of where to put the generated sources configurable through the GENERATED_SOURCE_DIR variable

        * WebCore.pro:

2007-11-22  Simon Hausmann  <hausmann@kde.org>

        Reviewed by George.

        Centralize the setup for all the extra compilers in a addExtraCompiler function.
        
        This allows adding a "generated_files" target that builds all generated files using "make generated_files".
        For the build inside Qt we do not generate actual rules for the extra compilers but instead
        do the variable substitution of compiler.output manually and add the generated sources to SOURCES.

        * WebCore.pro:

2007-11-21  Timothy Hatcher  <timothy@apple.com>

        Reviewed by Eric Seidel.

        Show Fonts as Yellow in the network timeline.

        * page/inspector/NetworkPanel.js:
        * page/inspector/inspector.css:

2007-11-21  Dan Bernstein  <mitz@apple.com>

        Reviewed by Eric Seidel.

        - fix <rdar://problem/5607037> REGRESSION (r27351): Departure date does not repaint when changed on Google Maps public transit planner (16034)

        Test: fast/repaint/subtree-root-skipped.html

        * page/FrameView.cpp:
        (WebCore::FrameViewPrivate::FrameViewPrivate): Initialize the layout
        root to 0.
        (WebCore::FrameView::layoutRoot): Changed to return a RenderObject
        instead of a Node.
        (WebCore::FrameView::layout): Changed for layout root being a renderer
        rather than a DOM node. Also replaced clearing the repaint rects
        set with asserting that it is empty if this is the top-level call to
        layout(). If it is not, the set may contain rects from enclosing
        layout() and those should not be removed.
        (WebCore::FrameView::scheduleRelayout): Changed for layout root being
        a renderer rather than a DOM node.
        (WebCore::isObjectAncestorContainerOf): Added this helper function that
        tests whether one object will be marked by calling
        markContainingBlocksForLayout() on the other.
        (WebCore::FrameView::scheduleRelayoutOfSubtree): Changed for layout
        root being a renderer rather than a DOM node. Changed the check if new
        and current layout roots are on the same path from the root to use
        the subgraph of the render tree defined by container()hood instead of
        the DOM tree and parenthood.
        * page/FrameView.h:
        * rendering/RenderBox.cpp: 
        (WebCore::RenderBox::calcWidth): Changed for layout root being a
        renderer rather than a DOM node.
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::~RenderObject): Added an assertion that the
        object being deleted is not currently the layout root.
        (WebCore::RenderObject::scheduleRelayout): Changed for layout root being
        a renderer rather than a DOM node.

2007-11-21  Mark Rowe  <mrowe@apple.com>

        Reviewed by Eric.

        Fix WebCore to build without warnings under GCC 4.2.

        * Configurations/Base.xcconfig:
        * css/CSSRuleList.cpp:
        (WebCore::CSSRuleList::deleteRule):
        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::locateSharedStyle):
        * html/HTMLParser.cpp:
        (WebCore::HTMLParser::allowNestedRedundantTag):
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::fillInlineSelectionGaps):
        (WebCore::RenderBlock::fillBlockSelectionGaps):
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::stackingContext):
        (WebCore::RenderLayer::enclosingPositionedAncestor):
        (WebCore::RenderLayer::transparentAncestor):
        * rendering/RenderStyle.cpp:
        (WebCore::BackgroundLayer::fillUnsetProperties):
        (WebCore::Transition::fillUnsetProperties):
        * rendering/RenderText.cpp:
        (WebCore::RenderText::containsOnlyWhitespace):
        * rendering/bidi.cpp:
        (WebCore::RenderBlock::determineStartPosition):

2007-11-21  Alp Toker  <alp@atoker.com>

        Reviewed by Mark Rowe.

        http://bugs.webkit.org/show_bug.cgi?id=16071
        Curl backend handles EINTR incorrectly

        Defer timers during select() to avoid interruption by timer signals.

        * platform/network/curl/ResourceHandleManager.cpp:
        (WebCore::ResourceHandleManager::downloadTimerCallback):

2007-11-21  Mark Rowe  <mrowe@apple.com>

        Reviewed by Tim Hatcher.

        Changes due to <rdar://problem/5602936> Need to resolve new GCC 4.2 warnings

        Update format strings to use format specifiers that match the argument types.

        * loader/icon/IconDatabase.cpp:
        (WebCore::IconDatabase::performURLImport):
        (WebCore::IconDatabase::writeToDatabase):
        * platform/mac/TextCodecMac.cpp:
        (WebCore::TextCodecMac::decode):
        * storage/Database.cpp:
        (WebCore::Database::deliverAllPendingCallbacks):

2007-11-21  Xan Lopez  <xan@gnome.org>

        Reviewed by Alp Toker.

        Clarify scroll event processing with a comment.

        * platform/gtk/PlatformScrollBarGtk.cpp:
        (gtkScrollEventCallback):

2007-11-21  Timothy Hatcher  <timothy@apple.com>

        Reviewed by Adam Roben.

        Bug 16085: Web Inspector's Network Timeline graph code clean up and misc. fixes
        http://bugs.webkit.org/show_bug.cgi?id=16085
        
        Changes include:
        - Refactor the drawing code as nested functions instead of global functions.
        - Compute the segment percentages only once per call to drawSummaryGraph.
        - Account for percentages that rounded down to total less-than 100%.
        - Draw the pill shadow better using the canvas shadow drawing properties.
        - Removes a couple canvas context saves and restores.

        * page/inspector/NetworkPanel.js:

2007-11-21  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Adam Roben.

        http://bugs.webkit.org/show_bug.cgi?id=16056
        Unicode not being interpreted correctly in Web Inspector source view

        Cannot be tested automatically.

        * loader/CachedCSSStyleSheet.cpp:
        (WebCore::CachedCSSStyleSheet::encoding):
        * loader/CachedCSSStyleSheet.h:
        * loader/CachedResource.h:
        (WebCore::CachedResource::encoding):
        * loader/CachedScript.cpp:
        (WebCore::CachedScript::encoding):
        * loader/CachedScript.h:
        * loader/CachedXBLDocument.cpp:
        (WebCore::CachedXBLDocument::encoding):
        * loader/CachedXBLDocument.h:
        * loader/CachedXSLStyleSheet.cpp:
        (WebCore::CachedXSLStyleSheet::encoding):
        * loader/CachedXSLStyleSheet.h:
        Teach textual CachedResources to report their encodings.

        * page/InspectorController.cpp:
        (WebCore::addSourceToFrame):
        (WebCore::updateResourceResponse):
        Use the actual encoding - the network layer has little idea about it.

2007-11-20  Mark Rowe  <mrowe@apple.com>

        Reviewed by Maciej Stachowiak.

        Fix <rdar://problem/5609579> (DOMParser().parseFromString() freezes Safari when parsing large nodes with XML entities)
        http://bugs.webkit.org/show_bug.cgi?id=16076

        XMLTokenizer was calling CharacterData::appendData twice per entity in the fragment of XML being
        parsed (once for text before the entity, once for the entity itself).  This triggered O(n^2) copying
        of the CharacterData's string due to resizing.  We now prevent this happening by buffering all the
        content for a given Text node in the XMLTokenizer before sending it out to the node in a single go.

        * dom/XMLTokenizer.cpp:
        (WebCore::XMLTokenizer::characters): Append the characters to the buffer.
        (WebCore::XMLTokenizer::endDocument): Ensure the buffer is flushed when the document has ended.
        (WebCore::endDocumentHandler):
        (WebCore::XMLTokenizer::enterText):
        (WebCore::XMLTokenizer::exitText): Append the contents of the buffer to the node.
        (WebCore::XMLTokenizer::initializeParserContext): Add the endDocument handler.
        (WebCore::parseXMLDocumentFragment): Force endDocument to be called when parsing a fragment to ensure
        that the buffer gets flushed to the node.
        * dom/XMLTokenizer.h:

2007-11-20  Timothy Hatcher  <timothy@apple.com>

        Reviewed by Mark Rowe.

        Animate the status area and tip balloons in the Web Inspector
        with CSS animations.

        * page/inspector/NetworkPanel.js:
        * page/inspector/inspector.css:
        * page/inspector/inspector.js:

2007-11-20  Kevin Ollivier  <kevino@theolliviers.com>

        wx build fix for Windows. Don't use WebCore/move-js-headers.sh as
        it indiscriminately copies any headers inside JavaScriptCore,
        which includes Tiger ICU headers. 

        * webcore-base.bkl:
        Remove references to the WebCore/include dir generated by
        move-js-headers.sh, and also get headers from JavaScriptCore
        directly rather than from WebCore/ForwardingHeaders. 

2007-11-20  Alp Toker  <alp@atoker.com>

        Reviewed by Mark Rowe.

        Avoid pointlessly mallocing and freeing this transform matrix.

        * platform/gtk/FontPlatformDataGtk.cpp:
        (WebCore::FontPlatformData::FontPlatformData):

2007-11-20  Naiem Shaik  <naiem.shaik@gmail.com>

        Reviewed by Alp Toker.

        http://bugs.webkit.org/show_bug.cgi?id=15763
        [GTK] Enter key does not take to the link highlighted.

        Add missing keycode cases.

        * platform/gtk/KeyEventGtk.cpp:
        (WebCore::keyIdentifierForGdkKeyCode):
        (WebCore::windowsKeyCodeForKeyEvent):
        (WebCore::PlatformKeyboardEvent::PlatformKeyboardEvent):

2007-11-20  Mark Rowe  <mrowe@apple.com>

        Reviewed by Sam Weinig.

        Fix http://bugs.webkit.org/show_bug.cgi?id=16074
        Bug 16074: execCommand("InsertHorizontalRule", false, "") results in id="" being inserted

        For consistency with InsertOrderedList and InsertUnorderedList a value parameter of "" should
        not result in an id being set.

        * editing/JSEditor.cpp: Don't set the id attribute if value is empty.

2007-11-20  Dan Bernstein  <mitz@apple.com>

        Reviewed by Adam Roben.

        - fix <rdar://problem/5090708> Textareas render broken-looking scrollbars when too short to show full scrollbar

        * platform/win/PlatformScrollBar.h:
        * platform/win/PlatformScrollBarSafari.cpp:
        Added the "hit inset" constants (representing how far the track eats
        into the button).
        (WebCore::PlatformScrollbar::paint): Changed to paint the buttons and
        the thumb only if they should be showing.
        (WebCore::PlatformScrollbar::hasButtons): Added. Returns whether the
        arrows should be drawn.
        (WebCore::PlatformScrollbar::hasThumb): Added. Returns whether the thumb
        should be drawn.
        (WebCore::PlatformScrollbar::forwardButtonRect):
        (WebCore::PlatformScrollbar::trackRect): Changed to return the entire
        bounds of the scrollbar if the scrollbar has no buttons.
        (WebCore::PlatformScrollbar::paintTrack): Changed to paint a disabled
        track along the entire scrollbar if it has not buttons.
        (WebCore::PlatformScrollbar::hitTest): Changed to hit test only the
        parts that the scrollbar has in its current dimensions.

2007-11-20  Mark Rowe  <mrowe@apple.com>

        Reviewed by Alp Toker.

        * config.h: Change #if to #ifdef to silence warnings on non-Apple platforms.

2007-11-20  Simon Hausmann  <hausmann@kde.org>

        Reviewed by Adam Treat <treat@kde.org>.

        Remove static linkage of QtWebKit against the ICO image format plugin.
        Instead build the support for the ICO image format as a proper standalone qt image format plugin and install it.

        * WebCore.pro:
        * platform/graphics/qt/ImageDecoderQt.cpp:

2007-11-20  David D. Kilzer  <ddkilzer@webkit.org>

        no-svg build broken after r27278
        <http://bugs.webkit.org/show_bug.cgi?id=16061>

        Reviewed by Eric.

        * bindings/scripts/CodeGeneratorObjC.pm: Always generate DOMHTMLEmbedElementPrivate.h
        and DOMHTMLObjectElementPrivate.h for no-svg build.

2007-11-20  Adam Treat  <treat@kde.org>

        Reviewed by Simon.

        * Don't use so much heap memory.

        * platform/graphics/qt/ImageDecoderQt.cpp:
        * platform/graphics/qt/ImageDecoderQt.h:
        * platform/graphics/qt/ImageSourceQt.cpp:
        (WebCore::ImageSource::createFrameAtIndex):

2007-11-20  Lars Knoll  <lars@trolltech.com>

        Reviewed by Simon.

        Fix text break interators.
        
        The break iterators where trying to be smart about the input
        string and caching their results. Unfortunately a pointer/string length
        comparison is not good enough in all cases (since some input is stack based
        temp strings). Removed the caching but at the same time started to use a more
        efficient constructor of QTextBoundaryFinder that doesn't need to malloc for
        most strings.
        
        Fixes two test cases that test "text-transform: capitalize".

        * platform/qt/TextBreakIteratorQt.cpp:
        (WebCore::wordBreakIterator):
        (WebCore::characterBreakIterator):
        (WebCore::lineBreakIterator):
        (WebCore::sentenceBreakIterator):

2007-11-20  Adam Treat  <treat@kde.org>

        Reviewed by George.

        * Make gif animations work for instance.

        * platform/graphics/qt/ImageDecoderQt.cpp:
        (WebCore::ImageDecoderQt::reset):
        (WebCore::ImageDecoderQt::setData):
        (WebCore::ImageDecoderQt::frameCount):
        (WebCore::ImageDecoderQt::repetitionCount):
        * platform/graphics/qt/ImageDecoderQt.h:

2007-11-20  Adam Treat  <treat@kde.org>

        * Build in release mode

        * platform/NotImplemented.h:

2007-11-20  Adam Treat  <treat@kde.org>

        Reviewed by Simon and George.

        * Be quiet and allow suppression of NotImplemented calls at runtime.

        * platform/NotImplemented.h:

2007-11-19  Doug Turner  <dougt@meer.net>

        Reviewed by Alp Toker.

        http://bugs.webkit.org/show_bug.cgi?id=16054
        Crash when GlyphPage::fill is called with more than 256 bytes of data

        http://bugs.webkit.org/show_bug.cgi?id=14446
        [GDK] Crash on http://www.wikipedia.org/

        setGlyphDataForIndex() uses a fixed array of size 256 which we can't
        exceed. We need to return failure if the buffer has Unicode
        supplementary characters for now.

        This strategy matches the Win port, which also doesn't support this
        case yet.

        Add an assertion so nobody makes this mistake again.

        * platform/GlyphPageTreeNode.h:
        (WebCore::GlyphPage::setGlyphDataForIndex):
        * platform/gtk/GlyphPageTreeNodeGtk.cpp:
        (WebCore::GlyphPage::fill):

2007-11-19  Doug Turner  <dougt@meer.net>

        Reviewed by Timothy Hatcher.

        http://bugs.webkit.org/show_bug.cgi?id=16050
        sqlite3_prepare16_v2 build bustage.

        Using the correct SQLITE_VERSION_NUMBER around sqlite_prepare16_v2
        to fix build bustage.

        * platform/sql/SQLiteStatement.cpp:
        (WebCore::SQLiteStatement::prepare):

2007-11-19  Mark Rowe  <mrowe@apple.com>

        Build fix.  Don't over-qualify the constructor name.

        * storage/DatabaseDetails.h:

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

        Reviewed by Maciej

        Stub out the WebCore parts of the WebKit API

        * WebCore.base.exp:
        * WebCore.xcodeproj/project.pbxproj:

        * storage/DatabaseDetails.h: Added.  Simple container for vitals on a specific database
        (WebCore::DatabaseDetails::DatabaseDetails::DatabaseDetails):
        (WebCore::DatabaseDetails::DatabaseDetails):
        (WebCore::DatabaseDetails::isValid):
        (WebCore::DatabaseDetails::name):
        (WebCore::DatabaseDetails::version):
        (WebCore::DatabaseDetails::displayName):
        (WebCore::DatabaseDetails::expectedUsage):
        (WebCore::DatabaseDetails::currentUsage):

        * storage/DatabaseTracker.cpp:  Added various methods for API usage
        (WebCore::DatabaseTracker::detailsForNameAndOrigin):
        (WebCore::DatabaseTracker::usageForOrigin):
        (WebCore::DatabaseTracker::quotaForOrigin):
        (WebCore::DatabaseTracker::setQuota):
        * storage/DatabaseTracker.h:

2007-11-19  Kevin Ollivier  <kevino@theolliviers.com>

        wx port build fix.

        * platform/graphics/wx/AffineTransformWx.cpp:
        (WebCore::AffineTransform::operator== ):
        m_transform is only available when using wxGraphicsContext.

2007-11-19  Alp Toker  <alp@atoker.com>

        Reviewed by Mark Rowe.

        GTK+ drawing fixes.

        Add a check to avoid crashing when the GraphicsContext is not
        associated with a GdkDrawable. This was noticed when adding printing
        support but might be triggered in other situations too.

        Do not render themes when painting is disabled. This is an
        optimisation for cases where GraphicsContext is used to calculate page
        dimensions etc. without actually rendering.

        * platform/graphics/cairo/GraphicsContextCairo.cpp:
        (WebCore::GraphicsContext::gdkDrawable):
        * platform/gtk/RenderThemeGtk.cpp:
        (WebCore::paintMozWidget):

2007-11-13  Rahul Abrol  <ra5ul@comcast.net>

        Reviewed by Tim Hatcher.

        http://bugs.webkit.org/show_bug.cgi?id=15977
        Resizing images preference now toggles default image state.

        * loader/ImageDocument.cpp:
        (WebCore::ImageDocument::ImageDocument):
        (WebCore::ImageDocument::createDocumentStructure):
        (WebCore::ImageDocument::imageChanged):

2007-11-19  Kevin Ollivier  <kevino@theolliviers.com>

        Update wx port build sources with recent changes, update
        wx FontPlatformData to be a class (MSVC7 gets confused
        otherwise...) and implement its hash() method.

        Reviewed by Adam.

        * WebCoreSources.bkl:
        * platform/wx/FontPlatformData.h:
        (WebCore::FontPlatformData::hash):

2007-11-19  Julien Chaffraix  <julien.chaffraix@gmail.com>

        Reviewed by Darin.

        http://bugs.webkit.org/show_bug.cgi?id=12194
        Bug 12194: Trying to access XMLHttpRequest.responseText or responseXML when they 
        are not available should raise an exception

        Tests: http/tests/xmlhttprequest/xmlhttprequest-responseText-exception.html
               http/tests/xmlhttprequest/xmlhttprequest-responseXML-exception.html

        * bindings/js/JSXMLHttpRequest.cpp:
        (KJS::JSXMLHttpRequest::getValueProperty):
        * xml/XMLHttpRequest.cpp:
        (WebCore::XMLHttpRequest::getResponseText):
        (WebCore::XMLHttpRequest::getResponseXML):
        * xml/XMLHttpRequest.h:

2007-11-19  Peter Kasting  <zerodpx@gmail.com>

        Reviewed by Darin Adler.

        http://bugs.webkit.org/show_bug.cgi?id=15971
        The GIF decoder should not fail decoding if the caller asks it to
        decode again when no new data has arrived since the last call.

        * platform/image-decoders/gif/GIFImageReader.cpp:
        (GIFImageReader::read):

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

        Reviewed by Eric

        Fix a crash hashing a default SecurityOriginData object 

        * storage/DatabaseTracker.cpp:
        (WebCore::SecurityOriginDataHash::hash): The default object has some default strings with NULL
          StringImpls - don't try to hash those!

2007-11-18  Timothy Hatcher  <timothy@apple.com>

        Reviewed by Sam Weinig.

        Bug 16043: Remove InspectorController.log now that console.log works
        http://bugs.webkit.org/show_bug.cgi?id=16043

        Remove the last uses of InspectorController.log. Once use was no longer needed,
        checking an erro case that can't happen anymore. The other case now uses console.error.

        * page/InspectorController.cpp: Remove the log function.
        (WebCore::InspectorController::windowScriptObjectAvailable): Remove the log function from
        InspectorController script class.
        * page/inspector/DocumentPanel.js: Remove a use of InspectorController.log that isn't needed.
        * page/inspector/Panel.js: Change InspectorController.log to console.log and early return.

2007-11-18  Timothy Hatcher  <timothy@apple.com>

        Reviewed by Brady.

        Bug 16041: REGRESSION: the Database panel in the Inspector stopped showing errors
        http://bugs.webkit.org/show_bug.cgi?id=16041

        * page/inspector/DatabasePanel.js: Implement error callbacks to pass to executeSql()
          and transaction(). Refactored some code for the success and error callbacks to use.

2007-11-18  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Maciej.

        <rdar://problem/5546393> Whitespace handling doesn't match HTML5.

        HTML5 definition is the same as MSIE's, with the exception that the latter strips null
        characters. Firefox also treats U+0008 as whitespace, but not U+000B or U+000C.

        Test: fast/parser/html-whitespace.html

        * html/HTMLTokenizer.cpp:
        (WebCore::HTMLTokenizer::parseSpecial):
        (WebCore::HTMLTokenizer::parseTag):
        Use isASCIISpace, which matches HTML5 definition of whitespace, and also what we use to
        check for whitespace almost everywhere.

2007-11-17  Mark Rowe  <mrowe@apple.com>

        Reviewed by Darin Adler.

        Fix: <rdar://problem/5607032> REGRESSION: testapi exits with assertion failure in debug build
             <rdar://problem/5440659> JSGlobalContextCreate throws away globalObjectClass's prototype
             http://bugs.webkit.org/show_bug.cgi?id=16033

        Update for changes in Interpreter method signatures.

        * bindings/js/kjs_binding.cpp:
        (KJS::ScriptInterpreter::ScriptInterpreter):
        * bindings/js/kjs_window.cpp:
        (KJS::Window::clear):

2007-11-17  Timothy Hatcher  <timothy@apple.com>

        Reviewed by Mark Rowe.

        Bug 13470: i18n: The Web Inspector is not localizable
        http://bugs.webkit.org/show_bug.cgi?id=13470

        Add support for localization to the Web Inspector. Clients need to
        implement localizedStringsURL() to return the URL of the
        InspectorLocalizedStrings.js that best matches the user's language.

        * English.lproj: Added.
        * English.lproj/InspectorLocalizedStrings.js: Added.
        * WebCore.xcodeproj/project.pbxproj: Add InspectorLocalizedStrings.js.
        * page/InspectorClient.h: Add localizedStringsURL.
        * page/InspectorController.cpp: Add localizedStringsURL that calls
          the client. Also added a version exposed to JavaScript.
        * page/InspectorController.h: Add localizedStringsURL.
        * page/inspector/ConsolePanel.js: Call WebInspector.UIString
          for user visible strings.
        * page/inspector/DatabasePanel.js: Ditto.
        * page/inspector/DocumentPanel.js: Ditto.
        * page/inspector/ImagePanel.js: Ditto.
        * page/inspector/MetricsSidebarPane.js: Ditto.
        * page/inspector/NetworkPanel.js: Ditto.
        * page/inspector/Panel.js: Ditto.
        * page/inspector/PropertiesSidebarPane.js: Ditto.
        * page/inspector/Resource.js: Ditto.
        * page/inspector/ResourceCategory.js: Ditto.
        * page/inspector/SourcePanel.js: Ditto.
        * page/inspector/StylesSidebarPane.js: Ditto.
        * page/inspector/inspector.css: Use pre-wrap so database errors can use \n.
        * page/inspector/inspector.html: Remove some user visible strings.
        * page/inspector/inspector.js: Added WebInspector.UIString and call
          WebInspector.UIString for user visible strings. Some code needed to be 
          moved to WebInspector.loaded to use UIString after the localized strings
          get loaded.
        * platform/graphics/svg/SVGImageEmptyClients.h:
        (WebCore::SVGEmptyFrameLoaderClient::redirectDataToPlugin): Remove WebCore:: prefix.
        (WebCore::SVGEmptyInspectorClient::createPage): Ditto.
        (WebCore::SVGEmptyInspectorClient::localizedStringsURL): Add empty stub.
        (WebCore::SVGEmptyInspectorClient::highlight): Remove WebCore:: prefix.
        (WebCore::SVGEmptyInspectorClient::inspectedURLChanged): Ditto.

2007-11-17  Timothy Hatcher  <timothy@apple.com>

        Reviewed by Adam.

        Reworte String.sprintf to fix many bad bugs and to not use RegExp. Also added
        String.vsprintf so it can be used later for the localization function.

        This version only supports argument reordering, precision for floats, and these
        format characters: d, f, s and @. Any unsupported format characters are logged
        and substituted like strings.

        * page/inspector/utilities.js:

2007-11-17  Alexey Proskuryakov  <ap@webkit.org>

        Windows build fix.

        * editing/Editor.h: Made canSmartCopyOrDelete public, as Windows WebView still needs it.

2007-11-17  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Darin.

        http://bugs.webkit.org/show_bug.cgi?id=15969
        Eliminate Editor::deleteRange()

        No change in functionality.

        * editing/CompositeEditCommand.h: Removed unimplemented deleteKeyPressed().

        * editing/Editor.cpp:
        (WebCore::Editor::deleteWithDirection):
        (WebCore::Editor::cut):
        (WebCore::Editor::performDelete):
        * editing/Editor.h:
        Moved relevant Editor::deleteRange() functionality to its callers.
        Removed deleteSelectionWithSmartDelete(void), which was more confusing than helpful
        in my opinion.

        * editing/mac/EditorMac.mm:
        (WebCore::initializeKillRingIfNeeded):
        (WebCore::Editor::addToKillRing):
        (WebCore::Editor::yank):
        (WebCore::Editor::yankAndSelect):
        (WebCore::Editor::setMark):
        (WebCore::unionDOMRanges):
        (WebCore::Editor::deleteToMark):
        (WebCore::Editor::selectToMark):
        (WebCore::Editor::swapWithMark):
        Pushed kill ring handling down from WebCore.

        * page/mac/WebCoreFrameBridge.h:
        * page/mac/WebCoreFrameBridge.mm:
        Removed setMarkDOMRange (the corresponding getter is still needed).

        * WebCore.base.exp: No longer need to export Editor::deleteRange() and Editor::insertTextWithoutSendingTextEvent().
        Export the new kill ring functions.

2007-11-16  Ryan Leavengood  <leavengood@gmail.com>

        Reviewed by David Kilzer.

        Build fix: the needed headers for POSIX file functions were not
        included.

        * platform/posix/FileSystemPOSIX.cpp:

2007-11-16  Dan Bernstein  <mitz@apple.com>

        Reviewed by Darin Adler.

        - fix the common case of <http://bugs.webkit.org/show_bug.cgi?id=15994>
          REGRESSION: Incomplete repaint of CSS image substitution

        Test: fast/repaint/clip-with-layout-delta.html

        * rendering/LayoutState.cpp:
        (WebCore::LayoutState::LayoutState): Account for layout delta when
        pushing additional clip.

2007-11-16  Antti Koivisto  <antti@apple.com>

        Reviewed by Adele.
        
        Seeking related fixes, updates to match the latest specification
        - rename loopCount of HTMLMediaElement to playCount
        - add explicit seeking attribute to HTMLMediaElement to get semantics right
        - implement the specification behavior that currentTime must immediately return seeked position in HTMLMediaElement 
          instead of MoviePrivateQTKit 
        - fix broken behavior when seeking past end of the media, add tests
        - replace Movie didEnd callback with broader timeChanged callback (which gets called in didEnd case too)
        - use setDelayCallbacks: in various MoviePrivateQTKit methods to avoid bug prone synchronous callbacks from QT, make
          HTMLMediaElement not depend on synchronous callbacks
        - do some cleanups and simplifications in MoviePrivateQTKit, get rid of m_rateBeforeSeek and m_blockStateUpdate variables

        Tests: http/tests/media/video-seekable-stall.html
               media/video-seeking.html
               media/video-seek-past-end-paused.html
               media/video-seek-past-end-playing.html

        * html/HTMLAttributeNames.in: 
        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::HTMLMediaElement):
        (WebCore::HTMLMediaElement::load):
        (WebCore::HTMLMediaElement::movieNetworkStateChanged):
        (WebCore::HTMLMediaElement::setReadyState):
        (WebCore::HTMLMediaElement::seek):
        (WebCore::HTMLMediaElement::seeking):
        (WebCore::HTMLMediaElement::currentTime):
        (WebCore::HTMLMediaElement::ended):
        (WebCore::HTMLMediaElement::play):
        (WebCore::HTMLMediaElement::pause):
        (WebCore::HTMLMediaElement::playCount):
        (WebCore::HTMLMediaElement::setPlayCount):
        (WebCore::HTMLMediaElement::checkIfSeekNeeded):
        (WebCore::HTMLMediaElement::movieTimeChanged):
        (WebCore::HTMLMediaElement::endedPlayback):
        (WebCore::HTMLMediaElement::updateMovie):
        * html/HTMLMediaElement.h:
        * html/HTMLMediaElement.idl:
        * platform/graphics/Movie.cpp:
        (WebCore::Movie::timeChanged):
        * platform/graphics/Movie.h:
        (WebCore::MovieClient::movieTimeChanged):
        * platform/graphics/mac/MoviePrivateQTKit.h:
        * platform/graphics/mac/MoviePrivateQTKit.mm:
        (WebCore::MoviePrivate::MoviePrivate):
        (WebCore::MoviePrivate::load):
        (WebCore::MoviePrivate::play):
        (WebCore::MoviePrivate::pause):
        (WebCore::MoviePrivate::currentTime):
        (WebCore::MoviePrivate::seek):
        (WebCore::MoviePrivate::doSeek):
        (WebCore::MoviePrivate::cancelSeek):
        (WebCore::MoviePrivate::seekTimerFired):
        (WebCore::MoviePrivate::startCuePointTimerIfNeeded):
        (WebCore::MoviePrivate::paused):
        (WebCore::MoviePrivate::updateStates):
        (WebCore::MoviePrivate::timeChanged):
        (WebCore::MoviePrivate::didEnd):

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

        Reviewed by Adam.

        <rdar://problem/5603832>
        XMLHttpRequest readyState 3 & responseText buffer issues.

        * platform/network/cf/ResourceHandleCFNet.cpp:
        (WebCore::makeFinalRequest):
        Add new parameter which controls whether content sniffing should be turned off.
        
        (WebCore::ResourceHandle::loadResourceSynchronously):
        Always content sniff sync loads.
        
        * platform/network/cf/ResourceRequestCFNet.cpp:
        (WebCore::ResourceRequest::doUpdatePlatformRequest):
        If the ResourceRequest already has a backing CFURLRequest, make a copy of it. This preserves
        any properties set on the CFURLRequest.

2007-11-16  Jon Honeycutt  <jhoneycutt@apple.com>

        Reviewed by Ollie.

        <rdar://problem/5605175> Crash closing or leaving window with ViewPoint 
        Media player plugin

        ViewPoint plugin requires that we pass a valid NPSavedData* to
        NPP_Destroy.

        * plugins/win/PluginViewWin.cpp: Pass a valid NPSavedData* to
        NPP_Destroy. If the plugin allocates data, discard it

2007-11-16  Mark Rowe  <mrowe@apple.com>

        Reviewed by Tim Hatcher.

        Build WebCore as a sub-framework of WebKit in all configurations.

        * Configurations/WebCore.xcconfig:
        * WebCore.xcodeproj/project.pbxproj:

2007-11-16  Doug Turner  <dougt@meer.net>

        Reviewed by Alp.

        http://bugs.webkit.org/show_bug.cgi?id=16018
        build bustage when building on debian 4.0

        Fix build bustage on GTK+ with older versions of Pango.

        Don't cache the return value since the docs say it can change.

        * platform/gtk/Language.cpp:
        (WebCore::defaultLanguage):

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

        Build fix

        * platform/SecurityOriginData.h:
        (WebCore::operator!=): Whoops!

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

        Reviewed by Sam

        Further purify DatabaseTracker to use SecurityOriginData instead of "a String"

        * WebCore.base.exp:
        * WebCore.xcodeproj/project.pbxproj:
        * WebCore.vcproj/WebCore.vcproj
        * WebCore.pro

        * platform/SecurityOriginData.cpp: Added.
        (WebCore::SecurityOriginData::SecurityOriginData): Add a constructor that takes a "stringIdentifier"-style string,
          since that form is what will be stored in the Databases.db on disk
        (WebCore::SecurityOriginData::stringIdentifier):
        * platform/SecurityOriginData.h:
        (WebCore::SecurityOriginData::protocol):
        (WebCore::SecurityOriginData::host):
        (WebCore::SecurityOriginData::port):

        * storage/DatabaseTracker.cpp:
        (WebCore::SecurityOriginDataHash::hash): Follow the pattern Darin set in FontCache.cpp to make a decent hash for 
          a SecurityOriginData object
        (WebCore::SecurityOriginDataHash::equal):
        (WebCore::SecurityOriginDataTraits::deletedValue): "file::1" will never exist in normal operation
        (WebCore::SecurityOriginDataTraits::emptyValue): "file::2" will never exist in normal operation
        (WebCore::DatabaseTracker::fullPathForDatabase):
        (WebCore::DatabaseTracker::populateOrigins):
        (WebCore::DatabaseTracker::origins):
        (WebCore::DatabaseTracker::addDatabase):
        * storage/DatabaseTracker.h:

2007-11-16  Alexey Proskuryakov  <ap@webkit.org>

        Windows build fix.

        * WebCore.vcproj/WebCore.vcproj: Removed VoidCallback.cpp, added JSCustomVoidCallback.{h,cpp}.

2007-11-16  Nikolas Zimmermann  <zimmermann@kde.org>

        Reviewed by Eric.

        Fixes: http://bugs.webkit.org/show_bug.cgi?id=12290

        Implement all SVGTextContentElement DOM methods.
        This is the last missing SVG text feature. SVG fonts is next.

        Added testcase: svg/custom/text-dom-01-f.svg (tests all new methods)

        * ksvg2/svg/SVGTextContentElement.cpp:
        (WebCore::cummulatedCharacterRangeLength):
        (WebCore::SVGInlineTextBoxQueryWalker::):
        (WebCore::SVGInlineTextBoxQueryWalker::SVGInlineTextBoxQueryWalker):
        (WebCore::SVGInlineTextBoxQueryWalker::chunkPortionCallback):
        (WebCore::SVGInlineTextBoxQueryWalker::setQueryInputParameters):
        (WebCore::SVGInlineTextBoxQueryWalker::longResult):
        (WebCore::SVGInlineTextBoxQueryWalker::floatResult):
        (WebCore::SVGInlineTextBoxQueryWalker::pointResult):
        (WebCore::SVGInlineTextBoxQueryWalker::rectResult):
        (WebCore::SVGInlineTextBoxQueryWalker::stopProcessing):
        (WebCore::findInlineTextBoxInTextChunks):
        (WebCore::rootInlineBoxForTextContentElement):
        (WebCore::executeTextQuery):
        (WebCore::SVGTextContentElement::getNumberOfChars):
        (WebCore::SVGTextContentElement::getComputedTextLength):
        (WebCore::SVGTextContentElement::getSubStringLength):
        (WebCore::SVGTextContentElement::getStartPositionOfChar):
        (WebCore::SVGTextContentElement::getEndPositionOfChar):
        (WebCore::SVGTextContentElement::getExtentOfChar):
        (WebCore::SVGTextContentElement::getRotationOfChar):
        (WebCore::SVGTextContentElement::getCharNumAtPosition):
        (WebCore::SVGTextContentElement::selectSubString):
        * ksvg2/svg/SVGTextContentElement.h:
        * rendering/SVGInlineTextBox.h:

2007-11-15  Adele Peterson  <adele@apple.com>

        Reviewed by Oliver.

        Fix for <rdar://problem/5566652> CrashTracer: [USER] 3 crashes in Safari at HTMLSelectElement::menuListDefaultEventHandler (reproducible on mactc30.com)

        Test: fast/forms/menulist-no-renderer-onmousedown.html

        * html/HTMLSelectElement.cpp:
        (WebCore::HTMLSelectElement::defaultEventHandler): Nil check the renderer here.  None of the default behavior makes sense if there's no renderer.
        (WebCore::HTMLSelectElement::listBoxDefaultEventHandler): Moved the nil check to the main defaultEventHandler.

2007-11-15  Antti Koivisto  <antti@apple.com>

        Reviewed by Adele.

        Fix <rdar://problem/5601598>
        The movie tag should do initialization on need and not during startup.
        
        Initialize Movie MIME type hash on demand

        * platform/MIMETypeRegistry.cpp:
        (WebCore::initialiseSupportedMovieMIMETypes):
        (WebCore::initialiseMIMETypeRegistry):
        (WebCore::MIMETypeRegistry::isSupportedMovieMIMEType):
        (WebCore::MIMETypeRegistry::getSupportedMovieMIMETypes):

2007-11-15  Mark Rowe  <mrowe@apple.com>

        Build fix for Qt on Windows.

        * xml/XPathStep.cpp:
        (WebCore::XPath::Step::nodesInAxis):

2007-11-15  Timothy Hatcher  <timothy@apple.com>

        Reviewed by Mark Rowe.

        Bug 14761: Web Inspector leaks JS objects and DOM nodes
        http://bugs.webkit.org/show_bug.cgi?id=14761

        * page/InspectorController.cpp:
        (WebCore::InspectorController::~InspectorController):
        Change the tear down order so that inspectorDestroyed() is called before
        InspectorController private data is set to Zero. The inspectorDestroyed()
        call ends up closing the WebView and triggering InspectorController::close()
        which unprotects m_scriptObject. This didn't happen when the private data
        was cleared before calling inspectorDestroyed().

2007-11-15  Mark Rowe  <mrowe@apple.com>

        Gtk build fix.

        * WebCore.pro:

2007-11-15  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Darin.

        http://bugs.webkit.org/show_bug.cgi?id=15989
        XPath queries with predicates incorrectly retains the current node across unions

        Test: fast/xpath/union-context-node.xhtml

        * xml/XPathPath.cpp:
        (WebCore::XPath::LocationPath::evaluate): Restore context after evaluation.
        * xml/XPathStep.cpp:
        (WebCore::XPath::Step::evaluate): Do not backup context, as we can easily re-create it.

2007-11-15  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Darin.

        http://bugs.webkit.org/show_bug.cgi?id=15988
        REGRESSION: XPath preceding-axis query misses nested elements

        Test: fast/xpath/preceding-axis.xhtml

        * xml/XPathStep.cpp:
        (WebCore::XPath::Step::nodesInAxis): Hopefully correct this time.

2007-11-15  Timothy Hatcher  <timothy@apple.com>

        Reviewed by Mark Rowe and Sam.

        This corrects a couple of issues in the Web Inspector where selected search results
        would not have the right text color when the window is inactive or the results are focused.

        * page/inspector/inspector.css:

2007-11-15  Timothy Hatcher  <timothy@apple.com>

        Reviewed by Sam.

        Bug 16007: REGRESSION: Disclosure triangle click zone for resource categories is off by 10 pixels
        http://bugs.webkit.org/show_bug.cgi?id=16007

        Makes the click width an option on TreeElement and make ResourceCategoryTreeElement
        a true subclass of TreeElement. The click width for ResourceCategoryTreeElement is 
        20 pixels, and the default is 10 pixels.

        * page/inspector/ResourceCategory.js:
        * page/inspector/treeoutline.js:

2007-11-15  Anders Carlsson  <andersca@apple.com>

        Reviewed by Brady.

        Pass a VoidCallback to Database::transaction and Database::changeVersion.
        This is not yet hooked up to the database machinery.
        
        * WebCore.vcproj/WebCore.vcproj:
        * bindings/js/JSDatabaseCustom.cpp:
        (WebCore::JSDatabase::changeVersion):
        (WebCore::JSDatabase::transaction):
        * storage/Database.cpp:
        (WebCore::Database::changeVersion):
        (WebCore::Database::transaction):
        * storage/Database.h:

2007-11-15  Timothy Hatcher  <timothy@apple.com>

        Reviewed by Adam.

        Bug 16005: Hovering in the breadcrumbs causes jumpy behavior
        http://bugs.webkit.org/show_bug.cgi?id=16005

        Hovering over cumbs no longer exposes new crumbs. Clicking on a collapsed
        crumb will expose as many hidden crumbs as possible to the user. Also crumbs
        that have ID attributes will compact to the ID over the tag name.

        * page/inspector/DocumentPanel.js:

2007-11-15  Anders Carlsson  <andersca@apple.com>

        Reviewed by Sam.

        Make the VoidCallback DOM interface behave more like our other DOM interfaces.
        
        * bindings/js/JSCustomVoidCallback.h: Added.
        * bindings/js/JSCustomVoidCallback.cpp: Added.
        (WebCore::JSCustomVoidCallback::JSCustomVoidCallback):
        (WebCore::JSCustomVoidCallback::handleEvent):
        VoidCallback implementation that wraps a JS object.
        
        (WebCore::toVoidCallback):
        New method that creates a VoidCallback implementation given a JS object.
        
        * bindings/scripts/CodeGeneratorJS.pm:
        Specify that VoidCallback can fail conversion and add a custom conversion function.
        
        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::movieCuePointReached):
        Call handleEvent on the callback.
        
        (WebCore::HTMLMediaElement::removeCuePoint):
        Comment out parts of this method, it has already been removed in the HTML5 spec and it relies
        on overriding VoidCallback equality.
        
        * html/VoidCallback.cpp: Removed.
        
        * html/VoidCallback.h:
        (WebCore::VoidCallback::VoidCallback):
        (WebCore::VoidCallback::~VoidCallback):
        Make this an abstract class with a pure virtual handleEvent method.
        
2007-11-15  Adam Roben  <aroben@apple.com>

        Fix <rdar://5485108> Type-select while a <select> menu is open doesn't work

        There were two things broken here:
           - WebView now requires a WM_CHAR message to be sent before it will
             create a keyboard event with a charCode, but we were only sending
             a WM_KEYDOWN event.
           - The popup menu was not updating its focused index when the
             <select> element's selectedIndex changed.

        Reviewed by Adele.

        * platform/win/PopupMenuWin.cpp:
        (WebCore::PopupMenu::updateFromElement): Update the focused index from
        the client's selected index.
        (WebCore::PopupWndProc): When we receive a WM_CHAR message for a
        printable character, manufacture a WM_KEYDOWN message for it and post
        both that and the current WM_CHAR message to the WebView.

2007-11-15  Brady Eidson  <beidson@apple.com>

        Build fix

        * storage/DatabaseTracker.cpp:
        (WebCore::DatabaseTracker::fullPathForDatabase):
        (WebCore::DatabaseTracker::databaseNamesForOrigin):

2007-11-15  Brady Eidson  <beidson@apple.com>

        Reviewed by John and Sam

        Stubbing out everything required for a WebKit API for databases

        Biggest change in WebCore is that we passed around SecurityOriginData as the representation
        of a SecurityOrigin, instead of a String or a SecurityOrigin itself (which is an opaque object
        that has a different purpose besides just hanging on to the data)

        * WebCore.base.exp:
        * WebCore.xcodeproj/project.pbxproj:

        * platform/SecurityOrigin.cpp:
        * platform/SecurityOrigin.h:
        * platform/SecurityOriginData.h: Added.  Simple object to encapsulate the 3
          pieces of data in the SecurityOrigin tuple
        (WebCore::SecurityOriginData::SecurityOriginData):
        (WebCore::SecurityOriginData::protocol):
        (WebCore::SecurityOriginData::host):
        (WebCore::SecurityOriginData::port):
        (WebCore::SecurityOriginData::toString): Simple concatenation of the 3 components,
          colon separated

        * storage/Database.cpp:
        (WebCore::Database::Database): Use SecurityOriginData instead

        * storage/DatabaseTracker.cpp:
        (WebCore::DatabaseTracker::fullPathForDatabase):
        (WebCore::DatabaseTracker::databaseNamesForOrigin):
        (WebCore::DatabaseTracker::deleteDatabasesWithOrigin):
        (WebCore::DatabaseTracker::deleteDatabase):
        * storage/DatabaseTracker.h:

        * storage/DatabaseTrackerClient.h: Added.  For dispatching notifications up to WebKit
        (WebCore::DatabaseTrackerClient::~DatabaseTrackerClient):2007-11-15  Jon Honeycutt  <jhoneycutt@apple.com>

2007-11-15  Jon Honeycutt  <jhoneycutt@apple.com>

        Reviewed by Anders.

        NP_ASFILEONLY streams should not buffer data in m_deliveryData.

        * plugins/win/PluginStreamWin.cpp:
        (WebCore::PluginStreamWin::didReceiveData):

2007-11-15  Justin Garcia  <justin.garcia@apple.com>

        Reviewed by Adele Peterson.

        <rdar://problem/5497643> Crash at Node::isDescendantOf when switching out of Edit HTML Source mode
        
        A textarea that contained the selection was removed but the selection wasn't cleared,
        and we'd crash in code that assumed a valid, in-document selection.

        * editing/SelectionController.cpp:
        (WebCore::removingNodeRemovesPosition): Clear the selection if the node being removed is the
        shadowAncestorNode of the node that contains the position, not just if the node being removed
        contains that shadowAncestorNode.

2007-11-15  Nikolas Zimmermann  <zimmermann@kde.org>

        Reviewed by Maciej.

        Fix logic error: calculateGlyphBoundaries takes RTL text into account itself, no need to adjust offsets before.

        * rendering/SVGInlineTextBox.cpp:
        (WebCore::SVGInlineTextBoxClosestCharacterToPositionWalker::chunkPortionCallback):
        (WebCore::SVGInlineTextBoxSelectionRectWalker::chunkPortionCallback):

2007-11-15  Anders Carlsson  <andersca@apple.com>

        Reviewed by Brady.

        <rdar://problem/5562470>
        openDatabase does not work when the version string is empty

        If the string is empty, pass a real empty string to sqlite3_bind_text16.
        
        * platform/sql/SQLiteStatement.cpp:
        (WebCore::SQLiteStatement::bindText):

2007-11-15  Anders Carlsson  <andersca@apple.com>

        Reviewed by Brady.

        Get rid of SQLiteStatement::bindText and rename bindText16 to bindText.
        Remove the copy parameter from bindText and bindBlob and always copy passed in data instead.

        * loader/icon/IconDatabase.cpp:
        (WebCore::IconDatabase::setIconIDForPageURLInSQLDatabase):
        (WebCore::IconDatabase::removePageURLFromSQLDatabase):
        (WebCore::IconDatabase::getIconIDForIconURLFromSQLDatabase):
        (WebCore::IconDatabase::addIconURLToSQLDatabase):
        (WebCore::IconDatabase::getImageDataForIconURLFromSQLDatabase):
        (WebCore::IconDatabase::writeIconSnapshotToSQLDatabase):
        * platform/sql/SQLiteStatement.cpp:
        (WebCore::SQLiteStatement::prepare):
        * platform/sql/SQLiteStatement.h:
        * storage/Database.cpp:
        (WebCore::setTextValueInDatabase):
        * storage/DatabaseTracker.cpp:
        (WebCore::DatabaseTracker::fullPathForDatabase):
        (WebCore::DatabaseTracker::databaseNamesForOrigin):
        (WebCore::DatabaseTracker::addDatabase):

2007-11-14  Brady Eidson <beidson@apple.com>

        Rubberstamped by Sam

        * platform/SecurityOrigin.h: Lets make this an unsigned short and *not* rule out half the possible ports?

2007-11-14  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Justin Garcia.

        http://bugs.webkit.org/show_bug.cgi?id=15781
        REGRESSION: Ligatures fail to form when typing in Devanagari (because WebKit can't handle
        a marked range that covers half of a composed character sequence)

        Test: platform/mac/editing/input/devanagari-ligature.html

        This fix is somewhat of a hack, as it asks editing commands to work with invalid selections.
        However, this is not entirely new for them, as Roman accents are typed in a similar manner.

        In the future, we probably want to make commands work with ranges (or Positions explicitly).

        * editing/Editor.cpp:
        (WebCore::Editor::selectComposition): Force selection to composition range.
        * editing/InsertTextCommand.cpp:
        (WebCore::InsertTextCommand::input): Force ending selection to inserted text range.

2007-11-14  Beth Dakin  <bdakin@apple.com>

        Reviewed by Hyatt.

        Fix for <rdar://problem/5540855> REGRESSION: Combination of client-
        side image map and <a> tag is not working properly (15522)

        * html/HTMLMapElement.cpp:
        (WebCore::HTMLMapElement::checkDTD): Allow <map> to have both block 
        and inline children rather than just block children. This matches 
        Firefox. 

2007-11-14  Justin Garcia  <justin.garcia@apple.com>

        Reviewed by Alexey Proskuryakov.

        <rdar://problem/5546763> CrashTracer: [USER] 362 crashes at WebCore::DeleteSelectionCommand::mergeParagraphs

        * editing/DeleteSelectionCommand.cpp:
        (WebCore::DeleteSelectionCommand::handleGeneralDelete): 
        Removed an irrelevant FIXME.
        (WebCore::DeleteSelectionCommand::mergeParagraphs): If the block that contained the end of the selection
        hasn't been removed but has been emptied by deletion, we would to try and fail to create a VisiblePosition
        inside that block, which could lead to a crash.  If that happens, there's no content in the block to move,
        so just remove the block and return.
        Preserve m_needPlaceholder during the call to moveParagraphs, since it may change it and since it does
        its own placeholder insertion when necessary.
        (WebCore::DeleteSelectionCommand::doApply): No need to check m_needPlaceholder before calling mergeParagraphs,
        because it handles preserving m_needPlaceholder when it calls moveParagraphs.
        
2007-11-14  Timothy Hatcher  <timothy@apple.com>

        Reviewed by Adam.

        Bug 14380: Long DOM ancestry breadcrumb lists get cut off
        http://bugs.webkit.org/show_bug.cgi?id=14380

        The breadcumbs will now be compacted and collapsed if there isn't enough room
        to show everything. The collapsing algorithm always affects the crumbs that
        are farthest away from the selected or hovered crumb first.

        * page/inspector/DocumentPanel.js:
        * page/inspector/inspector.css:

2007-11-14  Anders Carlsson  <andersca@apple.com>

        Use the correct include path.
        
        * platform/Cursor.h:
        * plugins/win/PluginPackageWin.h:
        * plugins/win/PluginStreamWin.h:

2007-11-13  Brady Eidson  <beidson@apple.com>

        Reviewed by Adam

        http://bugs.webkit.org/show_bug.cgi?id=15976 - ASSERT/crash when SQLTransactionCallback throws an exception

        * storage/SQLTransaction.cpp:
        (WebCore::SQLTransaction::deliverTransactionCallback): Make a transaction error for the case where the 
          SQLTransactionCallback fails
        (WebCore::SQLTransaction::deliverTransactionErrorCallback): Don't assert on the error callback, but null check it
          and make the commit/rollback decision accordingly

2007-11-13  Oliver Hunt  <oliver@apple.com>

        Reviewed by Anders.

        <rdar://problem/5365030> calling dataWithPDFInsideRect on an SVG with a gradient crashes (14780)

        When drawing directly to PDF CG may delay the use of the gradient function until outside our
        standard drawing path, which in turn could let us invalidate the caches before they were used.

        To work around this we now store the cached stops in a RefCounted object, so that we can ensure
        that cache exists as long as required.
        
        * platform/graphics/svg/SVGPaintServerGradient.cpp:
        (WebCore::SVGPaintServerGradient::SVGPaintServerGradient):
        * platform/graphics/svg/SVGPaintServerGradient.h:
        * platform/graphics/svg/cg/SVGPaintServerGradientCg.cpp:
        (WebCore::cgGradientCallback):
        (WebCore::CGShadingRefForLinearGradient):
        (WebCore::CGShadingRefForRadialGradient):
        (WebCore::SVGPaintServerGradient::updateQuartzGradientStopsCache):

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

        Fix Windows build.
        
        * platform/Cursor.h:
        * plugins/win/PluginPackageWin.h:
        * plugins/win/PluginStreamWin.h:

2007-11-13  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Anders Carlsson.

        Renamed Shared to RefCounted.

        * ForwardingHeaders/wtf/RefCounted.h: Copied from WebCore/ForwardingHeaders/wtf/Shared.h.
        * ForwardingHeaders/wtf/Shared.h: Removed.
        * bindings/js/JSSVGPODTypeWrapper.h:
        * css/CSSFontFace.h:
        * css/CSSRuleList.h:
        * css/Counter.h:
        * css/Pair.h:
        * css/Rect.h:
        * css/StyleBase.h:
        * css/StyleSheetList.h:
        * dom/Attribute.h:
        * dom/Clipboard.h:
        * dom/DOMImplementation.h:
        * dom/Event.h:
        * dom/EventListener.h:
        * dom/NamedNodeMap.h:
        * dom/NodeFilter.h:
        * dom/NodeFilterCondition.h:
        * dom/NodeList.h:
        * dom/QualifiedName.h:
        * dom/Range.h:
        * dom/RangeException.h:
        * dom/RegisteredEventListener.h:
        * dom/Traversal.h:
        * editing/EditCommand.h:
        * history/BackForwardList.h:
        * history/CachedPage.h:
        * history/HistoryItem.cpp:
        (WebCore::HistoryItem::HistoryItem):
        * history/HistoryItem.h:
        * html/CanvasGradient.h:
        * html/CanvasPattern.h:
        * html/CanvasRenderingContext2D.h:
        * html/CanvasStyle.h:
        * html/HTMLCollection.h:
        * html/MediaError.h:
        * html/TimeRanges.h:
        * html/VoidCallback.h:
        * ksvg2/css/SVGRenderStyle.cpp:
        (WebCore::SVGRenderStyle::SVGRenderStyle):
        * ksvg2/css/SVGRenderStyle.h:
        * ksvg2/css/SVGRenderStyleDefs.cpp:
        (StyleFillData::StyleFillData):
        (StyleStrokeData::StyleStrokeData):
        (StyleStopData::StyleStopData):
        (StyleTextData::StyleTextData):
        (StyleClipData::StyleClipData):
        (StyleMaskData::StyleMaskData):
        (StyleMarkerData::StyleMarkerData):
        (StyleMiscData::StyleMiscData):
        * ksvg2/css/SVGRenderStyleDefs.h:
        * ksvg2/svg/SVGAngle.cpp:
        (WebCore::SVGAngle::SVGAngle):
        * ksvg2/svg/SVGAngle.h:
        * ksvg2/svg/SVGAnimatedTemplate.h:
        * ksvg2/svg/SVGElementInstanceList.h:
        * ksvg2/svg/SVGException.h:
        * ksvg2/svg/SVGList.h:
        * ksvg2/svg/SVGPathSeg.h:
        * ksvg2/svg/SVGPreserveAspectRatio.cpp:
        (WebCore::SVGPreserveAspectRatio::SVGPreserveAspectRatio):
        * ksvg2/svg/SVGPreserveAspectRatio.h:
        * ksvg2/svg/SVGRenderingIntent.h:
        * ksvg2/svg/SVGTransform.h:
        * ksvg2/svg/SVGUnitTypes.h:
        * loader/DocumentLoader.h:
        * loader/FormState.h:
        * loader/ResourceLoader.h:
        * loader/TextResourceDecoder.h:
        * loader/icon/IconRecord.h:
        * page/BarInfo.h:
        * page/Console.h:
        * page/DOMSelection.h:
        * page/DOMWindow.h:
        * page/Frame.h:
        * page/History.h:
        * page/InspectorController.cpp:
        * page/Plugin.h:
        * page/Screen.h:
        * platform/ArrayImpl.h:
        * platform/CString.h:
        * platform/Cursor.h:
        * platform/DeprecatedValueListImpl.cpp:
        (WebCore::DeprecatedValueListImpl::Private::Private):
        * platform/FileChooser.h:
        * platform/FontFallbackList.h:
        * platform/FontFamily.cpp:
        (WebCore::FontFamily::FontFamily):
        * platform/FontFamily.h:
        * platform/FontSelector.h:
        * platform/GlyphPageTreeNode.h:
        * platform/PopupMenu.h:
        * platform/RegularExpression.cpp:
        * platform/ScrollBar.h:
        * platform/SharedBuffer.h:
        * platform/StringImpl.h:
        * platform/graphics/Icon.h:
        * platform/graphics/svg/SVGResource.h:
        * platform/network/FormData.cpp:
        (WebCore::FormData::FormData):
        * platform/network/FormData.h:
        * platform/network/ResourceHandle.h:
        * platform/network/ResourceHandleClient.h:
        * rendering/RenderStyle.cpp:
        (WebCore::StyleSurroundData::StyleSurroundData):
        (WebCore::StyleBoxData::StyleBoxData):
        (WebCore::StyleVisualData::StyleVisualData):
        (WebCore::StyleBackgroundData::StyleBackgroundData):
        (WebCore::StyleMarqueeData::StyleMarqueeData):
        (WebCore::StyleFlexibleBoxData::StyleFlexibleBoxData):
        (WebCore::StyleMultiColData::StyleMultiColData):
        (WebCore::StyleTransformData::StyleTransformData):
        (WebCore::StyleRareNonInheritedData::StyleRareNonInheritedData):
        (WebCore::StyleRareInheritedData::StyleRareInheritedData):
        (WebCore::StyleInheritedData::StyleInheritedData):
        * rendering/RenderStyle.h:
        * rendering/SVGCharacterLayoutInfo.h:
        (WebCore::SVGCharOnPath::SVGCharOnPath):
        * storage/SQLResultSetRowList.h:
        * xml/DOMParser.h:
        * xml/XMLHttpRequest.h:
        * xml/XMLSerializer.h:
        * xml/XPathEvaluator.h:
        * xml/XPathExpression.h:
        * xml/XPathNSResolver.h:
        * xml/XPathResult.h:
        * xml/XPathValue.h:
        * xml/XSLTProcessor.h:

2007-11-13  Brady Eidson  <beidson@apple.com>

        Reviewed by Mark Rowe

        Remove errantly added files, and fix the idl (for reference's sake)

        * storage/JSCustomSQLStatementCallback.h: Removed.
        * storage/JSCustomSQLStatementErrorCallback.h: Removed.
        * storage/JSCustomSQLTransactionCallback.h: Removed.
        * storage/JSCustomSQLTransactionErrorCallback.h: Removed.
        * storage/SQLStatementCallback.idl:

2007-11-13  Adam Roben  <aroben@apple.com>

        Fix a bug and improve upon Brady's fix

        Reviewed by Anders.

        * bindings/js/JSSQLTransactionCustom.cpp:
        (WebCore::JSSQLTransaction::executeSql): Made the code a little
        clearer and more correct.
        * loader/icon/IconDatabase.cpp: Put parentheses around the expansion
        of IS_ICON_SYNC_THREAD() so that ASSERT_NOT_SYNC_THREAD() does the
        comparison it meant to.

2007-11-13  Sam Weinig  <sam@webkit.org>

        Fix Qt and Gtk builds.

        * WebCore.pro: Remove non-generated idl files.

2007-11-13  Mark Rowe  <mrowe@apple.com>

        Remove removed file from the project.

        * WebCore.pro:

2007-11-13  Brady Eidson  <beidson@apple.com>

        Release build fix

        * bindings/js/JSSQLTransactionCustom.cpp:
        (WebCore::JSSQLTransaction::executeSql):

2007-11-13  Adam Roben  <aroben@apple.com>

        Add WindowMessageBroadcaster

        This class is used to listen in on messages sent to HWNDs. Multiple
        WindowMessageListeners can be notified about messages sent to a single
        HWND, and one WindowMessageListener can listen to messages from
        multiple HWNDs.

        Reviewed by Ada.

        * WebCore.vcproj/WebCore.vcproj: Added new files to project.
        * platform/win/WindowMessageBroadcaster.cpp: Added.
        (WebCore::instancesMap): Static helper.
        (WebCore::WindowMessageBroadcaster::addListener): Registers a listener
        for a particular HWND.
        (WebCore::WindowMessageBroadcaster::removeListener): Removes a
        listener for a particular HWND.
        (WebCore::WindowMessageBroadcaster::WindowMessageBroadcaster):
        (WebCore::WindowMessageBroadcaster::~WindowMessageBroadcaster):
        (WebCore::WindowMessageBroadcaster::destroy): Removes this broadcaster
        from the instancesMap, removes all of its listeners, unsubclasses the
        window, and deletes the broadcaster.
        (WebCore::WindowMessageBroadcaster::unsubclassWindow): Unsubclasses
        the window (which means that SubclassedWndProc won't be called again
        for this window).
        (WebCore::WindowMessageBroadcaster::SubclassedWndProc): Notifies all
        the listeners about every message sent to the HWND
        * platform/win/WindowMessageBroadcaster.h: Added.
        (WebCore::WindowMessageBroadcaster::listeners):
        (WebCore::WindowMessageBroadcaster::originalWndProc):
        * platform/win/WindowMessageListener.h: Added.

2007-11-13  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Sam Weinig.

        Moved Shared.h into wtf so it could be used in more places. Retained 
        TreeShared, but moved it to its own file, TreeShared.h.

        * ForwardingHeaders/wtf/Shared.h: Added.
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSSVGPODTypeWrapper.h:
        * css/CSSFontFace.h:
        * css/CSSRuleList.h:
        * css/Counter.h:
        * css/Pair.h:
        * css/Rect.h:
        * css/StyleBase.h:
        * css/StyleSheetList.h:
        * dom/Clipboard.h:
        * dom/DOMImplementation.h:
        * dom/Event.h:
        * dom/EventListener.h:
        * dom/NamedNodeMap.h:
        * dom/NodeFilterCondition.h:
        * dom/NodeList.h:
        * dom/Range.h:
        * dom/RangeException.h:
        * dom/RegisteredEventListener.h:
        * dom/Traversal.h:
        * history/BackForwardList.h:
        * history/CachedPage.h:
        * history/HistoryItem.h:
        * html/CanvasGradient.h:
        * html/CanvasPattern.h:
        * html/HTMLCollection.h:
        * html/MediaError.h:
        * html/TimeRanges.h:
        * html/VoidCallback.h:
        * ksvg2/css/SVGRenderStyleDefs.h:
        * ksvg2/svg/SVGAnimatedTemplate.h:
        * ksvg2/svg/SVGElementInstanceList.h:
        * ksvg2/svg/SVGList.h:
        * ksvg2/svg/SVGPathSeg.h:
        * ksvg2/svg/SVGPreserveAspectRatio.h:
        * ksvg2/svg/SVGRenderingIntent.h:
        * ksvg2/svg/SVGTransform.h:
        * ksvg2/svg/SVGUnitTypes.h:
        * loader/DocumentLoader.h:
        * loader/FormState.h:
        * loader/ResourceLoader.h:
        * loader/TextResourceDecoder.h:
        * loader/icon/IconRecord.h:
        * page/BarInfo.h:
        * page/Console.h:
        * page/DOMSelection.h:
        * page/DOMWindow.h:
        * page/History.h:
        * page/InspectorController.cpp:
        * page/Plugin.h:
        * page/Screen.h:
        * platform/ArrayImpl.h:
        * platform/CString.h:
        * platform/DeprecatedValueListImpl.cpp:
        * platform/FontFallbackList.h:
        * platform/FontFamily.h:
        * platform/FontSelector.h:
        * platform/GlyphPageTreeNode.h:
        * platform/PopupMenu.h:
        * platform/RegularExpression.cpp:
        * platform/ScrollBar.h:
        * platform/Shared.h: Removed.
        * platform/SharedBuffer.h:
        * platform/StringImpl.h:
        * platform/graphics/Icon.h:
        * platform/graphics/svg/SVGResource.h:
        * platform/network/FormData.h:
        * platform/network/ResourceHandleClient.h:
        * rendering/RenderStyle.h:
        * rendering/SVGCharacterLayoutInfo.h:
        * storage/SQLResultSetRowList.h:
        * xml/DOMParser.h:
        * xml/XMLSerializer.h:
        * xml/XPathEvaluator.h:
        * xml/XPathExpression.h:
        * xml/XPathNSResolver.h:
        * xml/XPathResult.h:

2007-11-13  Brady Eidson  <beidson@apple.com>

        JS bindings by Anders, reviewed by Brady
        WebCore changes by Brady, reviewed by Anders and Tim

        Adapt to the new iteration of the HTML5 client-side storage spec.

        Based largely on implementation feedback we generated in landing our first version of this API and also
        on the input of others in the community, the database spec went through a large overhaul that addresses
        many concerns.  Amongst other changes/improvements:
        - SQLTransaction object is added and all transactions are explicit.  In addition, since the API manages
          transactions explicitly, transaction-related language in SQL statements is disallowed
        - executeSql() is now on a transaction object instead of the database object.
        - Database.changeVersion() now takes place within the context of a transaction.  Therefore the version 
          change can be atomic along with the statements that modify the DB schema

        Most of the logic now takes place during the "transaction steps," which the specification clearly lays out
        as a chain of events on the SQLTransaction object where processing is handed off between being processed 
        asynchronously and calling back up to javascript.  To accomplish this voodoo, SQLTransaction has a series of 
        methods that roughly match up with the "transaction steps" and it keeps a pointer to the next step.

        * DerivedSources.make:
        * WebCore.xcodeproj/project.pbxproj:

        * bindings/js/JSDatabaseCustom.cpp:
        (WebCore::JSDatabase::changeVersion): Adapt to the new API
        (WebCore::JSDatabase::transaction): Added

        * bindings/js/JSSQLTransactionCustom.cpp: Added.
        (WebCore::JSSQLTransaction::executeSql): Added

        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::openDatabase): Add the new arguments
        * page/DOMWindow.h:
        * page/DOMWindow.idl:

        * page/inspector/DatabasePanel.js: Use the new API

        * storage/ChangeVersionWrapper.cpp: Added.  Implementation of "SQLTransactionWrapper" that enforces
          changing the version of the database
        (WebCore::ChangeVersionWrapper::ChangeVersionWrapper):
        (WebCore::ChangeVersionWrapper::performPreflight):
        (WebCore::ChangeVersionWrapper::performPostflight):
        * storage/ChangeVersionWrapper.h: Added.
        (WebCore::ChangeVersionWrapper::sqlError):

        * storage/Database.cpp: Removed the "main thread" and "background thread" sqlite handles as all sqlite operations can now
          happen solely on the background thread - most of these changes result from that change
        (WebCore::Database::Database): Removed an obsolete FIXME
        (WebCore::Database::openAndVerifyVersion): 
        (WebCore::Database::getVersionFromDatabase):
        (WebCore::Database::setVersionInDatabase):
        (WebCore::Database::versionMatchesExpected): Atomically guarantee that the current version and expected version are the same
        (WebCore::Database::performOpenAndVerify):
        (WebCore::Database::performTransactionStep): Added, as a hook for the DatabaseTransactionTask on the DatabaseThread
        (WebCore::Database::changeVersion): Changed for the new API from JS
        (WebCore::Database::transaction): Added, for the new API from JS
        (WebCore::Database::scheduleTransaction): Add a transaction to this Database's transaction queue
        (WebCore::Database::scheduleTransactionStep): Schedule the current transaction to be called on the background thread
        (WebCore::Database::scheduleTransactionCallback): Schedule the current transaction to perform a callback on the main thread
        (WebCore::Database::performGetTableNames):
        (WebCore::Database::deliverAllPendingCallbacks):
        (WebCore::Database::deliverPendingCallback):
        (WebCore::Database::setExpectedVersion):
        * storage/Database.h: 
        * storage/Database.idl:

        * storage/DatabaseTask.cpp:  Changed DatabaseTask to create a mutex on demand, and use the existence of that mutex
          to replace the m_synchronous flag
        (WebCore::DatabaseTask::performTask):
        (WebCore::DatabaseTask::lockForSynchronousScheduling):
        (WebCore::DatabaseTask::waitForSynchronousCompletion):
        (WebCore::DatabaseTransactionTask::DatabaseTransactionTask):
        * storage/DatabaseTask.h:

        * storage/SQLError.h: New API object

        * storage/SQLResultSet.cpp:
        (WebCore::SQLResultSet::SQLResultSet): Small changes to the API object
        * storage/SQLResultSet.h:
        * storage/SQLResultSet.idl:

        * storage/SQLStatement.cpp: Added.
        (WebCore::SQLStatement::SQLStatement):
        (WebCore::SQLStatement::execute): Actually execute the sql statement on the SQLiteDatabase if it's still valid
        (WebCore::SQLStatement::setVersionMismatchedError): Flag this statement as bad before it even starts in case
          of an actual version vs. expected version mismatch
        (WebCore::SQLStatement::performCallback): Call the right callback (SQLStatement or SQLStatementError) for this statement
        * storage/SQLStatement.h: Added.
        (WebCore::SQLStatement::hasStatementCallback):
        (WebCore::SQLStatement::hasStatementErrorCallback):
        (WebCore::SQLStatement::sqlError): Get the error for this statement, if any

        * storage/SQLTransaction.cpp: Added.
        (WebCore::SQLTransaction::SQLTransaction):
        (WebCore::SQLTransaction::executeSQL): Entry point for the API from JS
        (WebCore::SQLTransaction::enqueueStatement): Add a new statement onto the queue
        (WebCore::SQLTransaction::performNextStep): Call the method for the next step
        (WebCore::SQLTransaction::performPendingCallback): Call the method for the pending callback
        (WebCore::SQLTransaction::openTransactionAndPreflight): Open a transaction to the database and preflight 
          using the SQLTransactionWrapper, if any
        (WebCore::SQLTransaction::deliverTransactionCallback): Deliver the transaction callback to the javascript thread
        (WebCore::SQLTransaction::scheduleToRunStatements): Convinience to schedule this transaction on the database thread 
          and make runStatements() the next step
        (WebCore::SQLTransaction::runStatements): Start running the sql statements queued up for this transaction 
        (WebCore::SQLTransaction::getNextStatement): Bring the next statement off the queue
        (WebCore::SQLTransaction::runCurrentStatement): Execute the current statement
        (WebCore::SQLTransaction::deliverStatementCallback): Deliver the SQLStatementCallback for this statement
        (WebCore::SQLTransaction::postflightAndCommit): Postflight the transaction using SQLTransactionWrapper and commit it
        (WebCore::SQLTransaction::handleTransactionError): Make the right call for any error that occurred on the Transaction
        (WebCore::SQLTransaction::deliverTransactionErrorCallback): Deliver the SQLTransactionErrorCallback
        (WebCore::SQLTransaction::cleanupAfterTransactionErrorCallback): Either do a final commit or rollback to cleanup the
          transaction after it error'ed out
        * storage/SQLTransaction.h:
        (WebCore::SQLTransactionWrapper::~SQLTransactionWrapper): 
        (WebCore::SQLTransaction::database):
        * storage/SQLTransaction.idl:

        The following were made obsolete by the new version of the API:
        * bindings/js/JSCustomSQLCallback.cpp: Removed.
        * bindings/js/JSCustomSQLCallback.h: Removed.
        * bindings/js/JSCustomVersionChangeCallback.cpp: Removed.
        * bindings/js/JSCustomVersionChangeCallback.h: Removed.
        * storage/DatabaseCallback.cpp: Removed.
        * storage/DatabaseCallback.h: Removed.
        * storage/SQLCallback.h: Removed.
        * storage/SQLCallback.idl: Removed.
        * storage/VersionChangeCallback.h: Removed.
        * storage/VersionChangeCallback.idl: Removed.

2007-11-13  Dan Bernstein  <mitz@apple.com>

        Reviewed by Beth Dakin.

        - fix <rdar://problem/5551163> REGRESSION: Cursor does not change to arrow on "X" button in google maps, making it hard to click

        * css/html4.css: Added a 'cursor: auto' rule for links.
        * manual-tests/link-cursor-auto.html: Added.

2007-11-13  Dan Bernstein  <mitz@apple.com>

        Reviewed by Beth Dakin.

        - fix <rdar://problem/5516272> Reproducible crash in RenderObject::setStyle involving going Back from a non-HTML document (Bookmarks view, PDF view)

        The root cause for the crash is that when a non-HTML view enters the
        frame, the frame's document pointer keeps pointing at the last HTML-type
        document it contained. This patch does not address the root cause, but
        makes changes to account for that condition.

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::receivedMainResourceError): Do not change the
        frame's current document's page cache state here.
        (WebCore::FrameLoader::invalidateCurrentItemCachedPage): If the frame's
        current document is in fact the history item being invalidated, then
        set its page cache state here.

2007-11-12  Antti Koivisto  <antti@apple.com>

        Reviewed by Adele.

        Fix that 'timeupdate' and 'waiting' events were never dispatched.
        
        Add explicit m_paused attribute instead of trying to derive paused state from
        underlying media. Call updatePlayState() to start/stop media playback
        when any attribute that affects active playback state changes. This matches 
        specification text.
        
        Test: http/tests/media/video-play-stall.html

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::HTMLMediaElement):
        (WebCore::HTMLMediaElement::setReadyState):
        (WebCore::HTMLMediaElement::paused):
        (WebCore::HTMLMediaElement::play):
        (WebCore::HTMLMediaElement::pause):
        (WebCore::HTMLMediaElement::checkIfSeekNeeded):
        (WebCore::HTMLMediaElement::movieDidEnd):
        (WebCore::HTMLMediaElement::updatePlayState):
        * html/HTMLMediaElement.h:

2007-11-13  John Sullivan  <sullivan@apple.com>

        Reviewed by Darin.

        removed recently-added PreferredType concept; we found a better way to do what
        ths was accomplishing

        * bridge/WindowFeatures.h:
        (WebCore::WindowFeatures::WindowFeatures):
        removed definition of PreferredType
                        
        * page/ContextMenuController.cpp:
        (WebCore::openNewWindow):
        removed use of PreferredType

2007-11-12  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Darin.

        http://bugs.webkit.org/show_bug.cgi?id=15954
        Move DOM Selection operations out of SelectionController

        No change in functionality.

        * editing/SelectionController.cpp:
        (WebCore::SelectionController::setSelectedRange):
        * editing/SelectionController.h:
        * page/DOMSelection.cpp:
        (WebCore::DOMSelection::anchorNode):
        (WebCore::DOMSelection::baseNode):
        (WebCore::DOMSelection::anchorOffset):
        (WebCore::DOMSelection::baseOffset):
        (WebCore::DOMSelection::focusNode):
        (WebCore::DOMSelection::extentNode):
        (WebCore::DOMSelection::focusOffset):
        (WebCore::DOMSelection::extentOffset):
        (WebCore::DOMSelection::isCollapsed):
        (WebCore::DOMSelection::type):
        (WebCore::DOMSelection::rangeCount):
        (WebCore::DOMSelection::collapse):
        (WebCore::DOMSelection::collapseToEnd):
        (WebCore::DOMSelection::collapseToStart):
        (WebCore::DOMSelection::empty):
        (WebCore::DOMSelection::setBaseAndExtent):
        (WebCore::DOMSelection::setPosition):
        (WebCore::DOMSelection::modify):
        (WebCore::DOMSelection::extend):
        (WebCore::DOMSelection::getRangeAt):
        (WebCore::DOMSelection::removeAllRanges):
        (WebCore::DOMSelection::addRange):
        (WebCore::DOMSelection::deleteFromDocument):
        (WebCore::DOMSelection::containsNode):
        (WebCore::DOMSelection::selectAllChildren):
        (WebCore::DOMSelection::toString):
        * page/DOMSelection.h:
        Moved all DOM API methods to DOMSelection; changed SelectionController::setSelectedRange()
        to return its result directly instead of via an ExceptionCode that no caller wanted.

        * editing/Editor.cpp:
        (WebCore::Editor::deleteRange):
        (WebCore::Editor::removeFormattingAndStyle):
        (WebCore::Editor::selectComposition):
        (WebCore::Editor::setComposition):
        * html/HTMLInputElement.cpp: (WebCore::HTMLInputElement::defaultEventHandler):
        Adapted for SelectionController::setSelectedRange() now returning a bool.
        SelectionController::toString() is no longer avasilable, use plainText() explicitly.

        * WebCore.base.exp: Changed SelectionController::setSelectedRange() signature.

2007-11-12  Dan Bernstein  <mitz@apple.com>

        Reviewed by Darin Adler.

        - <http://bugs.webkit.org/show_bug.cgi?id=15890>
          Most of www.aol.com still redraws unnecessarily when headline/photo section changes

        Test: fast/repaint/invisible-objects.html

        Avoid repainting invisible blocks if they are enclosed in a layer that
        contains no visible objects.

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::layoutBlock):
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::absoluteClippedOverflowRect):

2007-11-12  Timothy Hatcher  <timothy@apple.com>

        Reviewed by Mark Rowe.

        Prevent selecting a word in the breadcrumb or the styles section when double
        clicking on a DOM node in the outline tree.

        * page/inspector/DocumentPanel.js: Call preventDefault() when a mousedown event
          with a detail of 2 or higher comes in. This prevents the selection.
        * page/inspector/inspector.css: Mark the breadcrumb as user-select: none.

2007-11-12  Oliver Hunt  <oliver@apple.com>

        Reviewed by John S.

        <rdar://problem/5537289> REGRESSION: Dragging a link or an image from an IFrame causes the page to not respond to clicks afterwards (15460)
        
        EventHandler needs to reset these fields when a drag terminates, otherwise
        EventHandler is left in an inconsistent state when a drag is initiated on a
        page with multiple frames.

        * page/EventHandler.cpp:
        (WebCore::EventHandler::cancelDragAndDrop):
        (WebCore::EventHandler::performDragAndDrop):
        (WebCore::EventHandler::clearDragState):
        * page/EventHandler.h:

2007-11-12  Oliver Hunt  <oliver@apple.com>

        Reviewed by Darin and Antti.

        Return behaviour for 0 sized pattern back to what it was prior to r27704

        This change in behaviour broke two layout tests in DRT, so correcting it
        corrects existing tests.

        * platform/graphics/cg/ImageBufferCG.cpp:

2007-11-12  Timothy Hatcher  <timothy@apple.com>

        Reviewed by John.

        <rdar://problem/5268311> REGRESSION (Safari 2-3): Exception thrown when calling -[WebDataSource subresources]

        * page/mac/WebCoreFrameBridge.mm:
        (-[WebCoreFrameBridge getAllResourceDatas:andResponses:]):
        If the SharedBuffer is null insert an empty NSData instead of nil.

2007-11-12  Darin Adler  <darin@apple.com>

        Reviewed by Tim.

        - http://bugs.webkit.org/show_bug.cgi?id=15947
          speed up page loading a bit by inlining

        * loader/FrameLoader.cpp: (WebCore::FrameLoader::isLocationChange):
        Factored out the slow case of isScheduledLocationChangePending into this.

        * loader/FrameLoader.h:
        (WebCore::FrameLoader::isScheduledLocationChangePending): Added an
        inline check of the far and away most common case, where m_scheduledRedirection
        is 0; the rest is in the isLocationChange function.

2007-11-12  George Staikos  <staikos@kde.org>

        Reviewed by Tim.

        Extract the text match marker highlight color into RenderTheme instead
        of the hardcoded yellow.

        * rendering/InlineTextBox.cpp:
        (WebCore::InlineTextBox::paintTextMatchMarker):
        * rendering/RenderTheme.cpp:
        (WebCore::RenderTheme::platformTextSearchHighlightColor):
        * rendering/RenderTheme.h:

2007-11-12  Mark Rowe  <mrowe@apple.com>

        Fix deadlock on launch on the Mac.

        * loader/icon/IconDatabase.cpp:
        (WebCore::IconDatabase::open): Restore unlock that was mistakenly removed in r27717.

2007-11-12  Justin Haygood  <jhaygood@reaktix.com>

        Reviewed by Brady.

        http://bugs.webkit.org/show_bug.cgi?id=15955
        Reimplement threading functions in IconDatabase and SQLiteDatabase in terms of the threading abstractions

        * loader/icon/IconDatabase.cpp:
        (WebCore::IconDatabase::open):
        (WebCore::IconDatabase::close):
        * loader/icon/IconDatabase.h:
        * platform/sql/SQLiteDatabase.cpp:
        (WebCore::SQLiteDatabase::SQLiteDatabase):
        (WebCore::SQLiteDatabase::open):
        (WebCore::SQLiteDatabase::close):
        * platform/sql/SQLiteDatabase.h:

2007-11-12  Adam Roben  <aroben@apple.com>

        Windows build fix

        * config.h: Touch because VS apparently can't figure out which files
        depend on ResourceResponse.h.
        * WebCore.vcproj/WebCore.vcproj: Add ResourceResponseBase files to
        project and remove old ResourceResponse files.

2007-11-12  Julien Chaffraix  <julien.chaffraix@gmail.com>

        Reviewed by Darin.

        http://bugs.webkit.org/show_bug.cgi?id=15334
        Split ResourceResponse into platform specific files

        * WebCore.base.exp:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * platform/network/ResourceResponse.cpp: Removed.
        * platform/network/ResourceResponse.h: Removed.
        * platform/network/ResourceResponseBase.cpp: Copied from platform/network/ResourceResponse.cpp.
        (WebCore::ResourceResponseBase::asResourceResponse):
        (WebCore::ResourceResponseBase::isHTTP):
        (WebCore::ResourceResponseBase::url):
        (WebCore::ResourceResponseBase::setUrl):
        (WebCore::ResourceResponseBase::mimeType):
        (WebCore::ResourceResponseBase::setMimeType):
        (WebCore::ResourceResponseBase::expectedContentLength):
        (WebCore::ResourceResponseBase::setExpectedContentLength):
        (WebCore::ResourceResponseBase::textEncodingName):
        (WebCore::ResourceResponseBase::setTextEncodingName):
        (WebCore::ResourceResponseBase::suggestedFilename):
        (WebCore::ResourceResponseBase::setSuggestedFilename):
        (WebCore::ResourceResponseBase::httpStatusCode):
        (WebCore::ResourceResponseBase::setHTTPStatusCode):
        (WebCore::ResourceResponseBase::httpStatusText):
        (WebCore::ResourceResponseBase::setHTTPStatusText):
        (WebCore::ResourceResponseBase::httpHeaderField):
        (WebCore::ResourceResponseBase::setHTTPHeaderField):
        (WebCore::ResourceResponseBase::httpHeaderFields):
        (WebCore::ResourceResponseBase::isAttachment):
        (WebCore::ResourceResponseBase::setExpirationDate):
        (WebCore::ResourceResponseBase::expirationDate):
        (WebCore::ResourceResponseBase::setLastModifiedDate):
        (WebCore::ResourceResponseBase::lastModifiedDate):
        (WebCore::ResourceResponseBase::updateResourceResponse):
        * platform/network/ResourceResponseBase.h: Copied from platform/network/ResourceResponse.h.
        (WebCore::ResourceResponseBase::ResourceResponseBase):
        * platform/network/cf/ResourceResponse.h: Added.
        (WebCore::ResourceResponse::ResourceResponse):
        * platform/network/curl/ResourceResponse.h: Added.
        (WebCore::ResourceResponse::ResourceResponse):
        (WebCore::ResourceResponse::doUpdateResourceResponse):
        * platform/network/mac/ResourceResponse.h: Added.
        (WebCore::ResourceResponse::ResourceResponse):
        * platform/network/qt/ResourceResponse.h: Added.
        (WebCore::ResourceResponse::ResourceResponse):
        (WebCore::ResourceResponse::doUpdateResourceResponse):

2007-11-11  Justin Haygood  <jhaygood@reaktix.com>

        Reviewed by Adam Roben.

        http://bugs.webkit.org/show_bug.cgi?id=15939
        Adds a currentThread API for use by SQLiteDatabase, etc.

        * platform/Threading.h:
        * platform/ThreadingNone.cpp:
        (WebCore::currentThread):
        * platform/gtk/ThreadingGtk.cpp:
        (WebCore::identifierByGthreadHandle):
        (WebCore::):
        * platform/pthreads/ThreadingPthreads.cpp:
        (WebCore::identifierByPthreadHandle):
        (WebCore::currentThread):

2007-11-11  Dan Bernstein  <mitz@apple.com>

        Reviewed by Adam Roben.

        - fix http://bugs.webkit.org/show_bug.cgi?id=15942
          REGRESSION: Selecting "Edit Html" tab in Blogger causes crash (Assertion failed: isRange())

        Test: editing/selection/cleared-by-relayout.html

        * editing/Selection.cpp:
        (WebCore::Selection::toRange): Check if the selection has been cleared
        by updating layout.

2007-11-11  Darin Adler  <darin@apple.com>

        Reviewed by Mark Rowe.

        - fix line numbers that were off since my recent patch

        * platform/SegmentedString.h:
        (WebCore::SegmentedSubstring::SegmentedSubstring): Reversed the sense of m_excludeLineNumbers
        and rename it to m_doNotExcludeLineNumbers.
        (WebCore::SegmentedSubstring::excludeLineNumbers): Updated.
        (WebCore::SegmentedSubstring::doNotExcludeLineNumbers): Added.
        (WebCore::SegmentedSubstring::setExcludeLineNumbers): Updated.
        (WebCore::SegmentedString::advance): Use doNotExcludeLineNumbers to reverse the sense and fix
        the regression, but keep the speediness. I accidentally had removed a ! here.

        * platform/SegmentedString.cpp:
        (WebCore::SegmentedString::advanceSlowCase): Use doNotExcludeLineNumbers.

2007-11-11  Oliver Hunt  <oliver@apple.com>

        Reviewed by Darin.

        Fix for <rdar://problem/5585334> numfuzz: integer overflows opening
        malformed SVG file in WebCore::ImageBuffer::create. Add protection
        against a potential overflow.

        * platform/graphics/cg/ImageBufferCG.cpp:

2007-11-11  Antti Koivisto  <antti@apple.com>

        Reviewed by Darin.

        Fix a bunch of cases where the exception code is checked by the function but is not zeroed first.

        * bindings/js/kjs_binding.cpp:
        (KJS::setDOMException):
        * dom/Attr.cpp:
        (WebCore::Attr::setPrefix):
        * dom/Document.cpp:
        (WebCore::Document::createElement):
        * dom/Element.cpp:
        (WebCore::Element::setPrefix):
        * dom/Range.cpp:
        (WebCore::Range::setStart):
        (WebCore::Range::setEnd):
        (WebCore::Range::isPointInRange):
        (WebCore::Range::comparePoint):
        (WebCore::Range::compareBoundaryPoints):
        (WebCore::Range::deleteContents):
        (WebCore::Range::processContents):
        (WebCore::Range::extractContents):
        (WebCore::Range::insertNode):
        (WebCore::Range::setStartAfter):
        (WebCore::Range::setEndBefore):
        (WebCore::Range::setEndAfter):
        (WebCore::Range::selectNode):
        (WebCore::Range::surroundContents):
        (WebCore::Range::setStartBefore):
        * editing/TextIterator.cpp:
        (WebCore::TextIterator::TextIterator):
        * html/CanvasRenderingContext2D.cpp:
        (WebCore::CanvasRenderingContext2D::createPattern):
        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::play):
        (WebCore::HTMLMediaElement::pause):
        * html/HTMLSelectElement.cpp:
        (WebCore::HTMLSelectElement::add):
        (WebCore::HTMLSelectElement::setOption):
        * xml/XPathEvaluator.cpp:
        (WebCore::XPathEvaluator::evaluate):

2007-11-11  Darin Adler  <darin@apple.com>

        Reviewed by Mitz.

        - http://bugs.webkit.org/show_bug.cgi?id=15945
          speed up GraphicsContextCG typical case by skipping roundToDevicePixels

        * platform/graphics/cg/GraphicsContextCG.cpp:
        (WebCore::GraphicsContext::restorePlatformState): Clear the flag since we no
        longer know if the transform is identity or not.
        (WebCore::GraphicsContext::strokeArc): Removed an extra set of redundant
        CGContextSave/RestoreGState.
        (WebCore::GraphicsContext::beginTransparencyLayer): Clear the flag since we no
        longer know if the transform is identity or not.
        (WebCore::GraphicsContext::endTransparencyLayer): Ditto.
        (WebCore::GraphicsContext::scale): Ditto.
        (WebCore::GraphicsContext::rotate): Ditto.
        (WebCore::GraphicsContext::translate): Ditto.
        (WebCore::GraphicsContext::concatCTM): Ditto.
        (WebCore::GraphicsContext::roundToDevicePixels): Return quickly if the transform
        is known to be identity, and record that fact when we discover it otherwise.

        * platform/graphics/cg/GraphicsContextPlatformPrivate.h:
        (WebCore::GraphicsContextPlatformPrivate::GraphicsContextPlatformPrivate):
        Added a m_userToDeviceTransformKnownToBeIdentity flag, initialized to false.

2007-11-11  Darin Adler  <darin@apple.com>

        Reviewed by Mitz.

        - http://bugs.webkit.org/show_bug.cgi?id=15944
          streamline SegmentedString to speed up parsing

        I measured a speed-up of the page load test while developing this patch. I don't
        have a precise figure, though.

        * html/HTMLTokenizer.h: Removed unneeded lineNumberPtr() function. Also renamed
        lineno to m_lineNumber.
        * html/HTMLTokenizer.cpp:
        (WebCore::HTMLTokenizer::processListing): Don't pass 0 to the advance function
        since we don't want to update a line number.
        (WebCore::HTMLTokenizer::parseSpecial): Ditto.
        (WebCore::HTMLTokenizer::parseComment): Pass the line number data member directly
        instead of lineNumberPtr() since the advance function now takes a reference.
        (WebCore::HTMLTokenizer::parseServer): Ditto.
        (WebCore::HTMLTokenizer::parseProcessingInstruction): Ditto.
        (WebCore::HTMLTokenizer::parseText): Ditto.
        (WebCore::HTMLTokenizer::parseEntity): Ditto.
        (WebCore::HTMLTokenizer::parseTag): Ditto.
        (WebCore::HTMLTokenizer::write): Ditto.

        * loader/FTPDirectoryDocument.cpp: (WebCore::FTPDirectoryTokenizer::write):
        * loader/TextDocument.cpp: (WebCore::TextTokenizer::write):
        Don't pass 0 to the advance function.

        * platform/SegmentedString.h: (WebCore::SegmentedString::advance): Streamlined
        the most common case, and pushed less common cases into a separate function
        that is not inlined. Also got rid of a branch by separating the case with a
        line number from the case without one.

        * platform/SegmentedString.cpp: (WebCore::SegmentedString::advanceSlowCase):
        Added. The aforementioned less common cases are here.

2007-11-11  Antti Koivisto  <antti@apple.com>

        Forgot to do this review change (and test HTTP commit).

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::play):

2007-11-11  Antti Koivisto  <antti@apple.com>

        Reviewed by Darin.
        
        - Update play() and pause() to match current HTML5 draft
            - send events asynchronously
            - add timeupdate event to pause
            - rethrow load() exception, not others
        - Use list for async events to get ordering right

        Tests: media/video-pause-empty-events.html
               media/video-play-empty-events.html
               media/video-play-pause-events.html
               media/video-play-pause-exception.html

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::dispatchEventAsync): 
        (WebCore::HTMLMediaElement::asyncEventTimerFired):
        (WebCore::HTMLMediaElement::play):
        (WebCore::HTMLMediaElement::pause):
        * html/HTMLMediaElement.h:

2007-11-11  Nikolas Zimmermann  <zimmermann@kde.org>

        Reviewed by Eric.

        Fixes: http://bugs.webkit.org/show_bug.cgi?id=6424 (<text>, <tspan> dominant-baseline attribute is not respected)

        Add (basic) support for dominant-baseline / alignment-baseline text properties.
        Note: there are no official testcases, and no-one implemented it before. Only ASV3
              supported dominant-baseline, but not correct it seems.

        * rendering/SVGRootInlineBox.cpp:
        (WebCore::dominantBaselineToShift):
        (WebCore::alignmentBaselineToShift):
        (WebCore::SVGRootInlineBox::buildLayoutInformationForTextBox):

2007-11-11  Adam Roben  <aroben@apple.com>

        Add wrappers around CoCreateInstance to COMPtr

        I followed the example of the Query constructor and query method by
        adding a Create constructor and create method.

        Reviewed by Darin.

        * platform/win/COMPtr.h:
        (COMPtr::COMPtr): Added a new constructor that calls
        CoCreateInstance.
        (COMPtr::create): Added.
        (COMPtr::createInstance): Added.

2007-11-11  Alexey Proskuryakov  <ap@nypop.com>

        Reviewed by Darin.

        http://bugs.webkit.org/show_bug.cgi?id=15896
        More editing cleanup

        No functionality changes.

        * dom/Node.h: Moved several editing-related methods elsewhere.
        * dom/Node.cpp: (WebCore::Node::maxCharacterOffset): Renamed from maxOffset()
        to highlight that it is a match to offsetInCharacters(), and much different from other
        offset-related methods. Added ASSERT_NOT_REACHED(), as callers are supposed to check
        offsetInCharacters() before calling this.

        * dom/CharacterData.cpp: (WebCore::CharacterData::maxCharacterOffset):
        * dom/CharacterData.h: (WebCore::CharacterData::isCharacterDataNode):
        Updated for above renamings.

        * dom/Comment.{h,cpp}: Removed an override for offsetInCharacters(), which is already present in CharacterData.

        * dom/Document.{h,cpp}: Folded updateSelection() into Frame::selectionLayoutChanged().

        * dom/Position.h:
        * dom/Position.cpp:
        (WebCore::Position::uncheckedPreviousOffset): Moved from Node::previousOffset().
        (WebCore::Position::uncheckedNextOffset): Moved from Node::NextOffset().
        (WebCore::Position::previous): Adapted to the above move.
        (WebCore::Position::next): Ditto.
        (WebCore::Position::upstream): Removed an isBR() check, since a non-BR element cannot have a BR renderer (I think),
        and BR elements are covered by editingIgnoresContent().
        (WebCore::Position::downstream): Ditto.
        (WebCore::caretMaxRenderedOffset): Moved from Node::caretMaxRenderedOffset().
        (WebCore::Position::rendersInDifferentPosition): Updated for the above moves.

        * dom/PositionIterator.h: Added a comment describing this class from the original check-in.
        * dom/PositionIterator.cpp:
        (WebCore::PositionIterator::increment): Updated for the above moves.
        (WebCore::PositionIterator::decrement): Ditto.

        * dom/ProcessingInstruction.h:
        * dom/ProcessingInstruction.cpp: (WebCore::ProcessingInstruction::maxCharacterOffset):
        ProcessingInstruction was already returning true from offsetInCharacters(), but didn't override maxCharacterOffset().
        I think that implementing it has no actual effect, as PIs are not rendered, but it looks cleaner this way.

        * dom/Range.cpp:
        (WebCore::Range::selectNodeContents):
        * editing/ApplyStyleCommand.cpp:
        (WebCore::ApplyStyleCommand::applyRelativeFontStyleChange):
        (WebCore::ApplyStyleCommand::applyInlineStyle):
        (WebCore::maxRangeOffset):
        (WebCore::ApplyStyleCommand::removeInlineStyle):
        (WebCore::ApplyStyleCommand::splitTextAtStartIfNeeded):
        (WebCore::ApplyStyleCommand::splitTextAtEndIfNeeded):
        (WebCore::ApplyStyleCommand::splitTextElementAtStartIfNeeded):
        (WebCore::ApplyStyleCommand::splitTextElementAtEndIfNeeded):
        (WebCore::ApplyStyleCommand::mergeEndWithNextIfIdentical):
        * editing/CompositeEditCommand.cpp:
        (WebCore::CompositeEditCommand::insertNodeAt):
        (WebCore::CompositeEditCommand::positionOutsideTabSpan):
        * editing/DeleteSelectionCommand.cpp:
        (WebCore::DeleteSelectionCommand::handleGeneralDelete):
        * editing/InsertLineBreakCommand.cpp:
        (WebCore::InsertLineBreakCommand::doApply):
        * editing/InsertParagraphSeparatorCommand.cpp:
        (WebCore::InsertParagraphSeparatorCommand::doApply):
        * editing/InsertTextCommand.cpp:
        (WebCore::InsertTextCommand::insertTab):
        * editing/visible_units.cpp:
        (WebCore::previousLinePosition):
        (WebCore::nextLinePosition):
        Updated for the above moves.

        * editing/Editor.cpp:
        (WebCore::Editor::advanceToNextMisspelling): Added a missing rangeCompliantEquivalent() call.

        * editing/TextIterator.cpp:
        (WebCore::SimplifiedBackwardsTextIterator::SimplifiedBackwardsTextIterator): Changed the condition to obviously
        match a maxCharacterOffset() call made after it; hopefully, this doesn't break any border cases.
        (WebCore::SimplifiedBackwardsTextIterator::advance): Updated for the above moves.

        * editing/htmlediting.h:
        * editing/htmlediting.cpp:
        (WebCore::canHaveChildrenForEditing): Removed a bogus comment: I don't thin BRs have a special ability to accept
        child nodes, other than via DOM manipulation, which is not specific to BRs.
        (WebCore::rangeCompliantEquivalent): Removed a check for BR, which is already covered by editingIgnoresContent().
        (WebCore::maxDeepOffset): Ditto.
        (WebCore::caretMinOffset): Moved from Node. Changed some runtime checks that seemingly cannot fail into assertions.
        (WebCore::caretMaxOffset): Ditto.

        * page/EventHandler.cpp:
        (WebCore::EventHandler::handleMousePressEventSingleClick): Pass 0 to VisiblePosition constructor instead of
        caretMinOffset. I didn't want to include htmlediting.h here, and I think that VisiblePosition constructor
        will take care of adjusting the offset.

        * page/Frame.cpp: (WebCore::Frame::selectionLayoutChanged): Folded Document::updateSelection() here.
        * page/mac/WebCoreFrameBridge.mm:
        (-[WebCoreFrameBridge smartDeleteRangeForProposedRange:]): Added missing rangeCompliantEquivalent() calls.
        * rendering/RenderBlock.cpp: (WebCore::RenderBlock::positionForRenderer): Changed to not round-trip via editing.
        Changed some runtime checks that seemingly cannot fail into assertions.

2007-11-11  Darin Adler  <darin@apple.com>

        Reviewed by Sam.

        - updated for JSRegExp function changes

        * platform/RegularExpression.cpp:
        (WebCore::RegularExpression::Private::compile):
        (WebCore::RegularExpression::match):

2007-11-10  Mark Rowe  <mrowe@apple.com>

        Qt Linux build fix.

        * platform/UnicodeRange.h:

2007-11-10  Mark Rowe  <mrowe@apple.com>

        Qt Windows build fix.

        * platform/UnicodeRange.h:

2007-11-10  Nikolas Zimmermann  <zimmermann@kde.org>

        Reviewed by Eric.

        Fixes: http://bugs.webkit.org/show_bug.cgi?id=15937 (Add glyph-orientation-horizontal/vertical support)
        Fixes: http://bugs.webkit.org/show_bug.cgi?id=13971 (text-anchor support on vertical text seems slightly off)

        Add glyph-orientation-* support for text & textPath. (90/180/270 and 'auto')
        Also fix all vertical text handling - for text & textPath! (especially latin1 characters auto orientation in vertical writing modes)

        * WebCore.pro: Add platform/UnicodeRange.cpp to build
        * WebCore.xcodeproj/project.pbxproj: Dito.
        * rendering/SVGCharacterLayoutInfo.cpp: Respect orientationShiftX/Y & angle in characterTransform()
        (WebCore::SVGChar::characterTransform):
        * rendering/SVGCharacterLayoutInfo.h: New variables.
        (WebCore::SVGCharOnPath::SVGCharOnPath):
        (WebCore::SVGChar::SVGChar):
        * rendering/SVGRootInlineBox.cpp: Added glyph-orientation-* handling.
        (WebCore::glyphOrientationToAngle):
        (WebCore::glyphOrientationIsMultiplyOf180Degrees):
        (WebCore::calculateGlyphAdvanceAndShiftRespectingOrientation):
        (WebCore::cummulatedHeightOfInlineBoxCharacterRange):
        (WebCore::cummulatedWidthOrHeightOfTextChunk):
        (WebCore::SVGRootInlineBox::buildLayoutInformationForTextBox):

2007-11-10  Timothy Hatcher  <timothy@apple.com>

        Reviewed by Sam Weinig.

        * page/inspector/StylesSidebarPane.js: Fix the wording of a comment
          and switch over to use getUniqueProperties in another place.

2007-11-10  John Sullivan  <sullivan@apple.com>

        Reviewed by Sam Weinig

        Rest of fix for 5394877

        * bindings/js/kjs_window.cpp:
        (KJS::Window::isSafeScript):
        Don't log unsafe JavaScript attempts in the other version of isSafeScript() if in
        private browsing mode either.

2007-11-10  Nikolas Zimmermann  <zimmermann@kde.org>

        Reviewed by Oliver.

        Fix function name difference - header said 'unicodeRangeForCharacter', actually
        implemented function is 'findCharUnicodeRange'. They are not compiled yet.

        * platform/UnicodeRange.h:

2007-11-10  Dan Bernstein  <mitz@apple.com>

        Reviewed by Darin Adler.

        - fix <rdar://problem/5450655> Control-clicking text in a link can surprisingly select only part of the link, should select entire link

        No test because context menu events cannot be tested in DumpRenderTree.

        * page/EventHandler.cpp:
        (WebCore::EventHandler::selectClosestWordOrLinkFromMouseEvent): Added.
        If the click occurred in an active link, selects the entire link
        element. Otherwise selects the closest word.
        (WebCore::EventHandler::sendContextMenuEvent): Call
        selectClosestWordOrLinkFromMouseEvent().
        * page/EventHandler.h:

2007-11-10  John Sullivan  <sullivan@apple.com>

        Reviewed by Tim Hatcher

        - fixed <rdar://problem/5394877> Safari should not log unsafe JavaScript attempts when 
          in private browsing mode (only an issue if Log JavaScript Exceptions is turned on)

        * bindings/js/kjs_window.cpp:
        (KJS::Window::isSafeScript):
        Don't log unsafe JavaScript attempts to console or chromeClient if in private browsing mode

2007-11-10  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Darin.

        http://bugs.webkit.org/show_bug.cgi?id=15922
        Implement more of Mozilla Selection API

        Tests: editing/selection/containsNode.html
               editing/selection/deleteFromDocument.html
               editing/selection/extend.html
               editing/selection/selectAllChildren.html

        * editing/SelectionController.cpp:
        (WebCore::SelectionController::deleteFromDocument):
        (WebCore::SelectionController::containsNode):
        (WebCore::SelectionController::selectAllChildren):
        (WebCore::SelectionController::extend):
        * editing/SelectionController.h:
        Added deleteFromDocument(), containsNode(), and selectAllChildren(). Reimplemented extend(),
        which existed, but didn't match Firefox behavior and wasn't exposed via bindings.
        Removed a comment mentioning removeRange(), as this method makes no sense without multiple
        selection range support.

        * page/DOMSelection.cpp:
        (WebCore::DOMSelection::extend):
        (WebCore::DOMSelection::deleteFromDocument):
        (WebCore::DOMSelection::containsNode):
        (WebCore::DOMSelection::selectAllChildren):
        * page/DOMSelection.h:
        * page/DOMSelection.idl:
        Exposed the new methods.

2007-11-10  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Darin.

        http://bugs.webkit.org/show_bug.cgi?id=15892
        DOM Range operations are not implemented for ProcessingInstruction nodes

        Test: fast/dom/Range/range-processing-instructions.html

        * dom/Range.cpp:
        (WebCore::Range::processContents): Implemented ProcessingInstruction cases.
        (WebCore::Range::checkNodeWOffset): Removed a FIXME - yes, I think that we are supposed
        to use ProcessingInstruction.data.

2007-11-09  Timothy Hatcher  <timothy@apple.com>

        Reviewed by Mark Rowe.

        Bug 12054: Ability to serialize an element subtree (into clipboard?) from the DOM inspector
        http://bugs.webkit.org/show_bug.cgi?id=12054

        - Add support code for routing copy events to the focused element.
        - Implement copying the currently selected DOM node. The node
          and it's subtree is copied to the clipboard. If the node has no
          outerHTML, the nodeValue is copied (text nodes, etc.)
        - Implement copy for the resource sidebar. The URL is copied for the
          currently selected resource.

        * page/inspector/DocumentPanel.js:
        * page/inspector/inspector.js:

2007-11-09  Antti Koivisto  <antti@apple.com>

        Reviewed by Adele.

        Fix occasional blank video with poster attribute.

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::load):
        (WebCore::HTMLMediaElement::didRestoreFromCache):
        Just calling updateFromElement() does the right thing for both poster image and video.

2007-11-04  Sam Weinig  <sam@webkit.org>

        Reviewed by Adam Roben.

        <rdar://problem/5435940>
        The COM bindings for the DOM should be autogenerated like the other DOM bindings

        Initial commit of the autogeneration of the COM DOM Bindings.  No behavior change
        is being introduced in this patch and to insure that no conflicts arise, a temporary
        prefix of "GEN_" has been used for all the new classes.

        The build architecture for these bindings differs slightly from the other autogenerated
        bindings.  Instead of building in WebCore and migrating the resuting code to WebKit (as
        is done for the Objective-C bindigs currently), the IDLs and generation scripts are
        migrated to WebKit and built there.  This is done with a series of scripts and Makefiles.

        This commit includes:
            - Hand rolled root class/Interface GEN_DOMObject used to facilated object creation
              and ref-counting.
            - Generating all of the Core DOM and most of HTML and CSS
            - Generating Event, EventTarget, and EventListener

        * WebCore.vcproj/MigrateIDLAndScripts.make: Added.
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.vcproj/migrate-idls.sh: Added.
        * bindings/scripts/CodeGenerator.pm:
        * bindings/scripts/CodeGeneratorCOM.pm: Added.
        * dom/EventListener.h: Make the isWindowEvent parameter default to false
        to allow autogeneration based on the IDL.

2007-11-09  Tristan O'Tierney  <tristan@apple.com>

        Reviewed by Timothy Hatcher.
        
        This patch is for the WebKit side of <rdar://problem/5591115>.
        We need a way to tell context menu navigations, such as "Open in New Window"
        to override any sort of browser preference for tab based navigation.

        * bridge/WindowFeatures.h:
        (WebCore::WindowFeatures::WindowFeatures):
        Added a new struct member var, preferredType
        and an accompanying enum type PreferredType
        to send a window type recommendation up to the Chrome. 
        
        * page/ContextMenuController.cpp:
        (WebCore::openNewWindow):
        Set the window features to recommend a new Window for
        "Open in New Window" context menu action.

2007-11-08  Adam Roben  <aroben@apple.com>

        Fix <rdar://5483519> Pressing Enter on selected buttons should fire onclick

        We now match the behavior of Firefox and IE, which is to always just
        send a click event to the focused button when the Enter key is pressed
        (previously we were submitting forms directly in some cases).

        Reviewed by Adele.

        Test: fast/forms/enter-clicks-buttons.html

        * html/HTMLButtonElement.cpp:
        (WebCore::HTMLButtonElement::defaultEventHandler): Don't do anything
        fancy when Enter is pressed on a <button type=button> -- just send a
        click event like we do for other button types.
        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::defaultEventHandler): Treat type=button
        the same way we treat type=submit and type=reset: just send a click
        event when Enter is pressed.

2007-11-09  Dan Bernstein  <mitz@apple.com>

        Reviewed by Antti Koivisto.

        - fix a bug in invisible layer culling: dynamically changing a 
          descendant of an invisible layer to be visible did not work

        Test: fast/layers/layer-content-visibility-change.html

        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::setHasVisibleContent): If we got visible content,
        make sure that our stacking context rebuilds its z-order lists to
        include us.

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

        Clean up matrix() parsing.  Make sure the first four arguments can be lengths or numbers.  The last two
        args can be lengths or numbers or percents.

        Reviewed by Beth

        * WebCore.xcodeproj/project.pbxproj:
        * css/CSSParser.cpp:
        (WebCore::TransformOperationInfo::TransformOperationInfo):
        (WebCore::CSSParser::parseTransform):
        * rendering/RenderStyle.h:
        (WebCore::MatrixTransformOperation::apply):

2007-11-09  Beth Dakin  <bdakin@apple.com>

        Reviewed by Oliver.

        Fix for <rdar://problem/5586370> CSS Transform - incorrect matrix 
        math leads to crazy problems

        Transform matrices accept the first four parameters as CSS lengths. 
        CSS lengths get mapped into WebCore::Lengths as percents by 
        WebCore::convertToLength(). Percent lengths cannot call value(). It 
        does not yield a correct result and it asserts on Debug builds. 

        * rendering/RenderStyle.h:
        (WebCore::MatrixTransformOperation::apply): Instead of calling 
        value() on the lengths, call calcValue. This fixes the assert and 
        the bad rendering. 

2007-11-09  Simon Hausmann  <hausmann@kde.org>

        build/link fix for Qt/Windows.

        userIdleTime() is stubbed in win/SystemTimeWin.cpp, so don't
        define it twice.

        * platform/qt/TemporaryLinkStubs.cpp:

2007-11-09  Simon Hausmann  <hausmann@kde.org>

        Reviewed by Holger.

        Fix ContextMenu allocation in the Qt port.

        Store all items and submenus value based in ContextMenu and ContextMenuItem.
        That fixes the crashes when the context menu was populated with sub-menus because
        of the use of temporary ContextMenu objects like this:

        ContextMenu subMenu(...);
        subMenu.appendItem(...);
        subMenu.appendItem(...);

        subMenuItem.setSubMenu(&subMenu); // temporary pointer, need to _copy_ contents

        * platform/ContextMenu.h:
        * platform/ContextMenuItem.h:
        * platform/PlatformMenuDescription.h:
        * platform/qt/ContextMenuItemQt.cpp:
        (WebCore::ContextMenuItem::ContextMenuItem):
        (WebCore::ContextMenuItem::platformSubMenu):
        * platform/qt/ContextMenuQt.cpp:
        (WebCore::ContextMenu::ContextMenu):
        (WebCore::ContextMenu::~ContextMenu):
        (WebCore::ContextMenu::appendItem):
        (WebCore::ContextMenu::itemCount):

2007-11-09  Peter Kasting  <zerodpx@gmail.com>

        Reviewed by Mark Rowe.

        http://bugs.webkit.org/show_bug.cgi?id=15909
        Malformed GIFs should not result in memory corruption.

        * platform/image-decoders/gif/GIFImageDecoder.cpp:
        (WebCore::GIFImageDecoder::haveDecodedRow):

2007-11-08  Timothy Hatcher  <timothy@apple.com>

        Reviewed by Sam Weinig.

        Some Web Inspector CSS editing changes.
        - Only delete the property if all the text is delete or the new user input correctly parses.
          This prevents deleting the existing property if the new text is invalid.
        - Intercept the Escape key and cancel editing, not saving any changes.

        * page/inspector/StylesSidebarPane.js:

2007-11-08  Kevin Ollivier  <kevino@theolliviers.com>

        Bakefiles for building WebCore, needed by wx port.

        Reviewed by Mark Rowe.

        * WebCoreSources.bkl: Added.
        * webcore-base.bkl: Added.
        * webcore-wx.bkl: Added.

2007-11-08  Justin Haygood  <jhaygood@reaktix.com>

        Reviewed by Mark Rowe.

        http://bugs.webkit.org/show_bug.cgi?id=15905

        Fix builds with HTML 5 Storage support disabled.
        ENABLE(DATABASE) needs to be added in a few places.

        * page/InspectorController.cpp:
        * storage/Database.h:

2007-11-08  Steve Falkenburg  <sfalken@apple.com>

        <rdar://problem/5524082> Allow images to be dragged out directly into other apps
        
        We weren't including CF_HDROP in our image drops.  This broke drag of
        images out of the browser window directly into other apps (examples
        include notepad, mspaint, msword).
        
        Reviewed by Oliver, Ada.

        * platform/win/ClipboardWin.cpp:
        (WebCore::createGlobalImageFileContent): Removed unused variable.
        (WebCore::createGlobalHDropContent): Added
        (WebCore::writeFileToDataObject): Write HDROP data if available.
        (WebCore::writeImageToDataObject): Write HDROP for dragged images.
        (WebCore::ClipboardWin::writeURL): Don't write HDROP for dragged URLs.

2007-11-08  Xan Lopez  <xan@gnome.org>

        Reviewed by Alp.

        http://bugs.webkit.org/show_bug.cgi?id=15908
        Use g_object_ref_sink when available

        * platform/gtk/PopupMenuGtk.cpp:
        (WebCore::PopupMenu::show):
        * platform/gtk/ScrollViewGtk.cpp:
        (WebCore::ScrollView::setGtkAdjustments):

2007-11-08  Dan Bernstein  <mitz@apple.com>

        Reviewed by Beth Dakin.

        - fix <rdar://problem/5491922> REGRESSION (Safari 2-3): Flash-based "Cash Optimizer" on etrade.com does not draw completely

        Test: fast/dom/length-attribute-mapping.html

        * dom/StyledElement.cpp:
        (WebCore::StyledElement::addCSSLength): Changed the garbage-stripping
        logic to stop after the first "%" or "*" in the string. This allows for
        "100%25" to be mapped to "100%" like it is in Firefox and WinIE.

2007-11-08  Kevin McCullough  <kmccullough@apple.com>

        - Build fix.

        * loader/FrameLoaderClient.h:
        * platform/graphics/svg/SVGImageEmptyClients.h:
        (WebCore::SVGEmptyFrameLoaderClient::windowObjectCleared):

2007-11-08  Kevin McCullough  <kmccullough@apple.com>

        Reviewed by Sam.

        - windowObjectCleared() is no longer const.  It needs to setup the
        script debugger and cannot be const to do so.

        * loader/FrameLoaderClient.h:
        * platform/graphics/svg/SVGImageEmptyClients.h:
        (WebCore::SVGEmptyFrameLoaderClient::windowObjectCleared):

2007-11-08  Adam Roben  <aroben@apple.com>

        Hopeful Windows build fix

        * rendering/RenderObject.cpp: Touch this file to make it recompile.

2007-11-08  Sam Weinig  <sam@webkit.org>

        Reviewed by Darin.

        Convert JavaScript internal function objects to use one class per
        function.  This avoids a switch statement inside what used to be
        the shared function classes and will allow Shark to better analyze
        the code.

        To make this switch, the value property of the HashEntry was changed
        to a union of an intptr_t (which is used to continue handle valueGetters)
        and function pointer which points to a static constructor for the
        individual new function objects.

        SunSpider claims this is a 1.0% speedup.

        - On the WebCore side, I updated CodeGeneratorJS.pm to generate the
          new classes and hand updated the remain non-generated (groan) classes.

        * bindings/js/JSDOMWindowCustom.cpp:
        (WebCore::JSDOMWindow::customGetOwnPropertySlot):
        * bindings/js/JSEventTargetNode.cpp:
        (WebCore::JSEventTargetNodePrototypeFunctionAddEventListener::callAsFunction):
        (WebCore::JSEventTargetNodePrototypeFunctionRemoveEventListener::callAsFunction):
        (WebCore::JSEventTargetNodePrototypeFunctionDispatchEvent::callAsFunction):
        * bindings/js/JSEventTargetNode.h:
        * bindings/js/JSHTMLInputElementBase.cpp:
        (WebCore::JSHTMLInputElementBaseFunctionSetSelectionRange::callAsFunction):
        (WebCore::JSHTMLInputElementBase::getOwnPropertySlot):
        * bindings/js/JSHTMLInputElementBase.h:
        (WebCore::JSHTMLInputElementBase::):
        * bindings/js/JSXMLHttpRequest.cpp:
        (KJS::JSXMLHttpRequestPrototypeFunctionAbort::callAsFunction):
        (KJS::JSXMLHttpRequestPrototypeFunctionGetAllResponseHeaders::callAsFunction):
        (KJS::JSXMLHttpRequestPrototypeFunctionGetResponseHeader::callAsFunction):
        (KJS::JSXMLHttpRequestPrototypeFunctionOpen::callAsFunction):
        (KJS::JSXMLHttpRequestPrototypeFunctionSend::callAsFunction):
        (KJS::JSXMLHttpRequestPrototypeFunctionSetRequestHeader::callAsFunction):
        (KJS::JSXMLHttpRequestPrototypeFunctionOverrideMIMEType::callAsFunction):
        (KJS::JSXMLHttpRequestPrototypeFunctionAddEventListener::callAsFunction):
        (KJS::JSXMLHttpRequestPrototypeFunctionRemoveEventListener::callAsFunction):
        (KJS::JSXMLHttpRequestPrototypeFunctionDispatchEvent::callAsFunction):
        * bindings/js/JSXMLHttpRequest.h:
        (KJS::JSXMLHttpRequest::impl):
        * bindings/js/JSXSLTProcessor.cpp:
        (KJS::JSXSLTProcessorPrototypeFunctionImportStylesheet::callAsFunction):
        (KJS::JSXSLTProcessorPrototypeFunctionTransformToFragment::callAsFunction):
        (KJS::JSXSLTProcessorPrototypeFunctionTransformToDocument::callAsFunction):
        (KJS::JSXSLTProcessorPrototypeFunctionSetParameter::callAsFunction):
        (KJS::JSXSLTProcessorPrototypeFunctionGetParameter::callAsFunction):
        (KJS::JSXSLTProcessorPrototypeFunctionRemoveParameter::callAsFunction):
        (KJS::JSXSLTProcessorPrototypeFunctionClearParameters::callAsFunction):
        (KJS::JSXSLTProcessorPrototypeFunctionReset::callAsFunction):
        * bindings/js/JSXSLTProcessor.h:
        * bindings/js/kjs_events.cpp:
        (WebCore::JSClipboardPrototypeFunctionClearData::callAsFunction):
        (WebCore::JSClipboardPrototypeFunctionGetData::callAsFunction):
        (WebCore::JSClipboardPrototypeFunctionSetData::callAsFunction):
        (WebCore::JSClipboardPrototypeFunctionSetDragImage::callAsFunction):
        * bindings/js/kjs_events.h:
        * bindings/js/kjs_navigator.cpp:
        (KJS::Plugins::):
        (KJS::Navigator::getOwnPropertySlot):
        (KJS::Plugins::getOwnPropertySlot):
        (KJS::PluginsFunctionRefresh::callAsFunction):
        (KJS::NavigatorProtoFuncJavaEnabled::callAsFunction):
        * bindings/js/kjs_navigator.h:
        (KJS::Navigator::):
        * bindings/js/kjs_window.cpp:
        (KJS::Window::getOwnPropertySlot):
        (KJS::Window::put):
        (KJS::WindowProtoFuncAToB::callAsFunction):
        (KJS::WindowProtoFuncBToA::callAsFunction):
        (KJS::WindowProtoFuncOpen::callAsFunction):
        (KJS::WindowProtoFuncScrollBy::callAsFunction):
        (KJS::WindowProtoFuncScrollTo::callAsFunction):
        (KJS::WindowProtoFuncMoveBy::callAsFunction):
        (KJS::WindowProtoFuncMoveTo::callAsFunction):
        (KJS::WindowProtoFuncResizeBy::callAsFunction):
        (KJS::WindowProtoFuncResizeTo::callAsFunction):
        (KJS::WindowProtoFuncSetTimeout::callAsFunction):
        (KJS::WindowProtoFuncClearTimeout::callAsFunction):
        (KJS::WindowProtoFuncSetInterval::callAsFunction):
        (KJS::WindowProtoFuncAddEventListener::callAsFunction):
        (KJS::WindowProtoFuncRemoveEventListener::callAsFunction):
        (KJS::WindowProtoFuncShowModalDialog::callAsFunction):
        (KJS::WindowProtoFuncNotImplemented::callAsFunction):
        (KJS::Location::getOwnPropertySlot):
        (KJS::Location::put):
        (KJS::LocationProtoFuncReplace::callAsFunction):
        (KJS::LocationProtoFuncReload::callAsFunction):
        (KJS::LocationProtoFuncAssign::callAsFunction):
        (KJS::LocationProtoFuncToString::callAsFunction):
        * bindings/js/kjs_window.h:
        (KJS::Window::):
        * bindings/scripts/CodeGeneratorJS.pm:

2007-11-08  Mark Rowe  <mrowe@apple.com>

        Fix the Gtk, Qt and Wx builds.

        * platform/gtk/TemporaryLinkStubs.cpp:
        * platform/qt/TemporaryLinkStubs.cpp:
        * platform/wx/TemporaryLinkStubs.cpp:

2007-11-08  Mark Rowe  <mrowe@apple.com>

        Not reviewed.  Fix two instances of includes using the wrong case in the filename.

        * platform/graphics/mac/MoviePrivateQTKit.mm:
        * platform/wx/MimeTypeRegistryWx.cpp:

2007-11-08  Darin Adler  <darin@apple.com>

        Reviewed by Adam.

        - fix <rdar://problem/5552943> accesskey does not focus <button> elements

        Test: fast/forms/access-key.html

        * html/HTMLButtonElement.cpp: (WebCore::HTMLButtonElement::accessKeyAction):
        Added a call to focus.

2007-11-07  Darin Adler  <darin@apple.com>

        Reviewed by Steve.

        - cut down on notImplemented() functions on Windows

        * bridge/AXObjectCache.h: Put #if around the accessibility
        global.

        * bridge/win/FrameWin.cpp: (WebCore::Frame::setNeedsReapplyStyles):
        Moved here from TemporaryLinkStubs.

        * dom/Document.cpp: (WebCore::Document::lastModified): Re-implemented
        using the ResourceResponse that's now available from the DocumentLoader.

        * editing/JSEditor.cpp: (execTranspose): Changed to call transpose() on
        the Editor instead of the obsolete one on the Frame.

        * loader/DocumentLoader.h: Removed getResponseModifiedHeader.
        * loader/FrameLoader.h: Removed overrideMediaType.

        * loader/gtk/DocumentLoaderGtk.cpp: Removed.
        * loader/mac/DocumentLoaderMac.mm: Removed.
        * loader/qt/DocumentLoaderQt.cpp: Removed.

        * page/Frame.cpp: Removed transpose.
        * page/Frame.h: Ditto.
        * page/FrameView.h: Removed updateBorder.
        * page/gtk/FrameGtk.cpp: Removed issueTransposeCommand.
        * page/mac/FrameMac.mm: Ditto.
        * page/mac/WebCoreFrameBridge.h: Removed issueTransposeCommand and
        overrideMediaType.
        * page/qt/FrameQt.cpp: Removed issueTransposeCommand.

        * platform/gtk/TemporaryLinkStubs.cpp: Removed gAccessibilityEnabled.
        * platform/qt/TemporaryLinkStubs.cpp: Ditto.
        * platform/win/TemporaryLinkStubs.cpp: Removed or moved all but 3 of the stubs.
        * platform/wx/TemporaryLinkStubs.cpp: Removed gAccessibilityEnabled,
        issueTransposeCommand, and overrideMediaType.

        * platform/network/cf/ResourceHandleCFNet.cpp:
        (WebCore::ResourceHandle::loadsBlocked): Moved here from TemporaryLinkStubs.
        (WebCore::ResourceHandle::willLoadFromCache): Ditto.
        * platform/win/GraphicsContextWin.cpp:
        (WebCore::GraphicsContextPlatformPrivate::clip): Ditto.
        * platform/win/ScrollViewWin.cpp: (WebCore::ScrollView::inWindow): Ditto.
        * platform/win/SystemTimeWin.cpp: (WebCore::userIdleTime): Ditto.
        * platform/win/WidgetWin.cpp: (WebCore::Widget::setIsSelected): Ditto.

        * WebCore.pro: Updated for removed files.
        * WebCore.xcodeproj/project.pbxproj: Updated for removed file.

2007-11-08  Mark Rowe  <mrowe@apple.com>

       Build fix for case-sensitive file systems.  Fix case of file names
       in #include's.

        * html/HTMLMediaElement.cpp:
        * platform/graphics/Movie.cpp:

2007-11-08  Holger Hans Peter Freyther  <holger.freyther@trolltech.com>

        Reviewed by Lars Knoll <lars@trolltech.com>.

        Remove some warnings about not implemented methods.

        * ResourceHandle::loadsBlocked and ResourceHandle::supportsBufferedData are
        specific to the NS API and won't be implemented on Qt.
        * ResourceHandle::bufferedData can not be reached as we return false in
        ResourceHandle::supportsBufferedData.


        * platform/network/qt/ResourceHandleQt.cpp:
        (WebCore::ResourceHandle::supportsBufferedData):

2007-11-08  Holger Hans Peter Freyther  <holger.freyther@trolltech.com>

        Reviewed by Lars Knoll <lars@trolltech.com>.

        Cleanup checking for the request method.

        * Check the request method only in QWebNetworkManager::add.
        * Currently HEAD, GET, POST are allowed and for everything else
        QWebNetworkManager::add returns false.
        * Returning false is compatible with ResourceHandle::start and it
        can be used in ResourceHandle::loadResourceSynchronously to generate
        a ResourceError


        * platform/network/qt/ResourceHandleQt.cpp:
        (WebCore::ResourceHandle::start):
        (WebCore::ResourceHandle::loadResourceSynchronously):

2007-11-08  Holger Hans Peter Freyther  <holger.freyther@trolltech.com>

        Reviewed by Lars Knoll <lars@trolltech.com>.

        Implement WebCore::callOnMainThread

        Implemented using a global QObject, that is moved to the main thread
        and then sending a custom event to it.
        Picked a number below QEvent::User but above any other documented value.


        * platform/qt/ThreadingQt.cpp:
        (WebCore::PerformFunctionEvent::PerformFunctionEvent):
        (WebCore::MainThreadInvoker::MainThreadInvoker):
        (WebCore::MainThreadInvoker::event):
        (WebCore::callOnMainThread):

2007-11-08  Holger Hans Peter Freyther  <holger.freyther@trolltech.com>

        Reviewed by Lars Knoll <lars@trolltech.com>.

        Avoid problems with calling QPainter::begin() on an already active paintdevice

        * Partial pick from 6200e04c3e0a77873c3b3f3969b65bc701020326 to avoid getting
        crashes on Qt/Mac 4.4 with QPainter::begin to fail because we already draw.
        * If we are in a layout or need one do not paint. This can happen for the PlatformScrollBar
        used by the ScrollView on a layout triggered by QWebPage::paintEvent.


        * platform/qt/WidgetQt.cpp:
        (WebCore::Widget::invalidateRect):

2007-11-08  Eric Seidel  <eric@webkit.org>

        No review.

        * ksvg2/svg/SVGPathElement.h: remove old comment

2007-11-07  Antti Koivisto  <antti@apple.com>

        Reviewed by Ollie.

        Ensure video renderer has correct size if video has already been loaded
        when it is constructed.

        * rendering/RenderVideo.cpp:
        (WebCore::RenderVideo::RenderVideo):

2007-11-07  Antti Koivisto  <antti@apple.com>

        Reviewed by Ollie.

        Ensure video is visible when it should be.

        * rendering/RenderVideo.cpp:
        (WebCore::RenderVideo::updateMovie):

2007-11-07  Dan Bernstein  <mitz@apple.com>

        Reviewed by Darin Adler.

        - fix <rdar://problem/5523503> Safari crashes clicking scroll bar in FaceBook 'Trips'

        Layers and listboxes are two kinds of ScrollBarClient that can be
        removed while the scrollbar is tracking the mouse. The scrollbar is not
        destroyed until later, and meanwhile it can try to call the client,
        which results in a crash.

        * manual-tests/stale-scrollbar-client-crash.html: Added.
        * platform/ScrollBar.h:
        (WebCore::Scrollbar::setClient): Added.
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::destroyScrollbar): Call Scrollbar::setClient().
        * rendering/RenderListBox.cpp:
        (WebCore::RenderListBox::~RenderListBox): Ditto.

2007-11-07  Adam Roben  <aroben@apple.com>

        Fix <rdar://5569268> Crash when opening any FTP site in second tab/window

        Reviewed by Sam.

        No test possible.

        * platform/win/SharedBufferWin.cpp:
        (WebCore::SharedBuffer::createWithContentsOfFile): Bail if we get an
        empty path, because _wfopen_s will crash if we pass it a null pointer.

2007-11-07  David Kilzer  <ddkilzer@apple.com>

        WebKit confuses width/height for Media Queries device-aspect-ratio evaluation
        <http://bugs.webkit.org/show_bug.cgi?id=14893>
        <rdar://problem/5380295>

        Reviewed by Darin.

        Tests: fast/css/device-aspect-ratio.html
               fast/css/max-device-aspect-ratio.html
               fast/css/min-device-aspect-ratio.html

        * css/MediaQueryEvaluator.cpp:
        (WebCore::parseAspectRatio): Renamed method parameters from a/b to h/v.
        (WebCore::device_aspect_ratioMediaFeatureEval): Renamed local variables from
        a/b to h/v.  Switched first two arguments of the call to cmpvalue() to fix
        the bug.

2007-11-07  Dan Bernstein  <mitz@apple.com>

        Reviewed by Dave Hyatt.

        - fix http://bugs.webkit.org/show_bug.cgi?id=15887
          REGRESSION (r27576): Crash in RenderStyle::affectedByHoverRules clicking link on Digg

        Test: fast/css/display-none-inline-style-change-crash.html

        * dom/Element.cpp:
        (WebCore::Element::recalcStyle): Fixed the crash by null-checking
        the current style and removed other checks that are not strictly
        necessary.

2007-11-07  Brady Eidson  <beidson@apple.com>

        Rubberstamped by Sam

        Remove FrameLoaderClient methods from SVG that were pruned awhile ago

        * platform/graphics/svg/SVGImageEmptyClients.h:

2007-11-07  Dan Bernstein  <mitz@apple.com>

        Reviewed by Darin Adler.

        - fix a bug where CSS rules with :hover in the ancestor chain stopped
          working after changing the inline style declaration of the ancestor

        Test: fast/css/affected-by-hover-after-style-change.html

        * dom/Element.cpp:
        (WebCore::Element::recalcStyle): If we are not forcing style
        recalculation for all descendants, preserve any "affected by
        {hover|active|drag} bits that we may have acquired from them.
        Also renamed _style to currentStyle.

2007-11-06  Timothy Hatcher  <timothy@apple.com>

        Reviewed by Adam.

        Bug 11920: Web Inspector should have Firebug-like CSS editing
        http://bugs.webkit.org/show_bug.cgi?id=11920

        * css/CSSComputedStyleDeclaration.h:
          (WebCore::CSSComputedStyleDeclaration::isPropertyImplicit): Return false. I'm not sure why
          this was true, but computed style has no concept of implicit. So false makes more sense
          and makes the code simpler in the inspector. This function was added for the inspector,
          so this isn't a compatibility change.
        * page/inspector/PropertiesSection.js: Add a getter/setter to reset populated status.
        * page/inspector/StylesSidebarPane.js: Some refactoring along with the main support for
          style editing.
        * page/inspector/inspector.css: Style changes for propery editing and focus correctness.
        * page/inspector/inspector.js: Look for a handleKeyEvent function of the focus element before
          trying to call a function based on the element's id. Call focused and blurred on the focused
          element when currentFocusElement is changed. Use the new listItemElement getter instead of
          the private property.
        * page/inspector/treeoutline.js: No longer expand on double click if ondblclick is implemented.
          Shrink the toggle zone to 10px to better match the size of the arrow. Add an onattach call
          to allow generation of the title using the DOM element. Add listItemElement and
          childrenListElement getters.
        * page/inspector/utilities.js: Add new helper prototype methods on CSSStyleDeclaration.
        * page/inspector/DocumentPanel.js: Use the new listItemElement getter instead of the private
          property. Also expand the DOM node on double click now that the TreeOutline dosen't do it.
        * page/inspector/Resource.js: Use the new listItemElement and childrenListElement getters
          instead of the private properties.

2007-11-07  Simon Hausmann  <hausmann@kde.org>

        Reviewed by Alexey Proskuryakov.

        Coding style fix, don't use inline explicitly.

        * bridge/WindowFeatures.h:

2007-11-07  Simon Hausmann  <hausmann@kde.org>

        Reviewed by Maciej.

        For safety provide a default constructor for WindowFeatures().
        ContextMenuController.cpp: createNewWindow as well as QWebPage need to
        create a default initialized WindowFeatures object on the fly.

        * bridge/WindowFeatures.h:
        (WebCore::WindowFeatures::WindowFeatures):

2007-11-07  Simon Hausmann  <shausman@trolltech.com>

        Reviewed by Lars.

        Fix "nmake clean" for the Qt/Windows build by replacing tmp/ with a variable that ends with the correct type of slash/backslash depending on the choice of compiler/make tool.

        * WebCore.pro:

2007-11-07  Simon Hausmann  <hausmann@kde.org>

        Reviewed by Lars.

        Made the QWebSettings::webGraphic functions static. The implementation was using QWebSettings::global() anyway.

        * platform/graphics/qt/ImageQt.cpp:
        (loadResourcePixmap):

2007-11-07  Simon Hausmann  <hausmann@kde.org>

        Reviewed by Lars.

        Moved the WebCore::Image specific function loadResourcePixmap from qwebsettings.cpp to ImageQt.cpp and made it static.

        * platform/graphics/qt/ImageQt.cpp:
        (loadResourcePixmap):

2007-11-07  Simon Hausmann  <hausmann@kde.org>

        Reviewed by Lars.

        Restructure the context menu classes for the Qt port. ContextMenu and ContextMenuItem don't store
        QActions/QMenus anymore but just store the action type, tag, title and optionally submenu as created
        in ContextMenu::populate().
        For the actual Qt context menu we traverse this structure after sendContextMenuEvent and create a QMenu
        out of it. That menu is currently not functional anymore though.

        * platform/ContextMenu.h:
        * platform/ContextMenuItem.h:
        (WebCore::PlatformMenuItemDescription::PlatformMenuItemDescription):
        * platform/PlatformMenuDescription.h:
        * platform/qt/ContextMenuItemQt.cpp:
        (WebCore::ContextMenuItem::ContextMenuItem):
        (WebCore::ContextMenuItem::type):
        (WebCore::ContextMenuItem::setType):
        (WebCore::ContextMenuItem::action):
        (WebCore::ContextMenuItem::setAction):
        (WebCore::ContextMenuItem::title):
        (WebCore::ContextMenuItem::setTitle):
        (WebCore::ContextMenuItem::platformSubMenu):
        (WebCore::ContextMenuItem::setSubMenu):
        (WebCore::ContextMenuItem::setChecked):
        (WebCore::ContextMenuItem::setEnabled):
        * platform/qt/ContextMenuQt.cpp:
        (WebCore::ContextMenu::ContextMenu):
        (WebCore::ContextMenu::~ContextMenu):
        (WebCore::ContextMenu::appendItem):
        (WebCore::ContextMenu::itemCount):
        (WebCore::ContextMenu::insertItem):
        (WebCore::ContextMenu::setPlatformDescription):
        (WebCore::ContextMenu::platformDescription):

2007-11-07  Simon Hausmann  <hausmann@kde.org>

        Reviewed by Lars.

        Changed ContextMenu::setPlatformDescription for the Qt port to not show the qmenu right away
        but instead just behave as a normal setter that takes ownership of the platform menu description (the qmenu).
        Instead now QWebPage::contextMenuEvent() retrieves the QMenu after calling sendContextMenuEvent and calls exec()
        on it.

        * platform/qt/ContextMenuQt.cpp:

2007-11-07  Simon Hausmann  <hausmann@kde.org>

        Reviewed by Lars.

        Changed to PlatformMouseEvent constructor to allow construction from a QContextMenuEvent.
        Call sendContextMenuEvent on the event handler from a QWidget::contextMenuEvent re-implementation instead of in mousePressEvent.

        * platform/PlatformMouseEvent.h:
        * platform/qt/PlatformMouseEventQt.cpp:
        (WebCore::PlatformMouseEvent::PlatformMouseEvent):

2007-11-07  Lars Knoll  <lars@trolltech.com>

        Reviewed by Simon.

        don't put nbsp's into the plan text paste
        
        Fix both ClipboardQt and PasteboardQt to replace
        nbsp's with spaces before putting the text onto the
        native clipboard. This is consistent with Mac and Win
        and fixes at least editing/pasteboard/4076267-3.html

        * platform/qt/ClipboardQt.cpp:
        (WebCore::ClipboardQt::writeRange):
        * platform/qt/PasteboardQt.cpp:
        (WebCore::Pasteboard::writeSelection):

2007-11-07  Holger Hans Peter Freyther  <holger.freyther@trolltech.com>

        Reviewed by Lars Knoll <lars@trolltech.com>.

        Implement Pasteboard::writeImage()
        
        * Pasteboard is now fully implemented. Copying of Images into the Clipboard
        is now supported.
        * As with URLs we only copy into the Clipboard (and not additionally to the
        Selection)

        * platform/qt/PasteboardQt.cpp:
        (WebCore::Pasteboard::writeImage):

2007-11-07  Holger Hans Peter Freyther  <holger.freyther@trolltech.com>

        Reviewed by Lars Knoll <lars@trolltech.com>.

        Apple CodingStyle fixes

        * platform/qt/PasteboardQt.cpp:
        (WebCore::Pasteboard::documentFragment):

2007-11-07  Holger Hans Peter Freyther  <holger.freyther@trolltech.com>

        Reviewed by Lars Knoll <lars@trolltech.com>.

        Implement Pasteboard::writeURL()
        * The URL currently gets written as text/plain and text/uri-list.
        The win and mac port have some more types which we currently do
        not support. When supporting them we can use the 'titleString'
        as well.
        * As with writeSelection we only copy into the Clipboard. We could
        consider copying into the Selection as well.

        * platform/qt/PasteboardQt.cpp:
        (WebCore::Pasteboard::writeURL):

2007-11-07  Holger Hans Peter Freyther  <holger.freyther@trolltech.com>

        Reviewed by Lars Knoll <lars@trolltech.com>.

        Kill whitespace

        * platform/qt/PasteboardQt.cpp:
        (WebCore::Pasteboard::documentFragment):

2007-11-07  Lars Knoll  <lars@trolltech.com>

        Reviewed by Simon.

        Use the correct function calls to convert a selection to
        HTML or plain text.

        * platform/qt/ClipboardQt.cpp:
        (WebCore::ClipboardQt::setData):
        (WebCore::ClipboardQt::writeRange):
        * platform/qt/PasteboardQt.cpp:
        (WebCore::Pasteboard::writeSelection):

2007-11-07  Lars Knoll  <lars@trolltech.com>

        Reviewed by Simon.

        Some more clipboard fixes.
        
        We have to set things immediately on the QClipBoard if the
        Clipboard object is not for dragging.
        
        This is due to the fact that the Clipboard object might be
        rather long lived if accessed through javascript (it'll only
        get deleted by JS garbage collection). We have to transfer
        the data over to the QClipboard before that to make things work.
        
        Fixes editing/execCommand/copy-without-selection.html

        * platform/qt/ClipboardQt.cpp:
        (WebCore::ClipboardQt::ClipboardQt):
        (WebCore::ClipboardQt::~ClipboardQt):
        (WebCore::ClipboardQt::clearData):
        (WebCore::ClipboardQt::clearAllData):
        (WebCore::ClipboardQt::getData):
        (WebCore::ClipboardQt::setData):
        (WebCore::ClipboardQt::declareAndWriteDragImage):
        (WebCore::ClipboardQt::writeURL):
        (WebCore::ClipboardQt::writeRange):

2007-11-07  Simon Hausmann  <hausmann@kde.org>

        Reviewed by Mark.

        Fix compilation on Windows with non-cygwin perl. open FILE, "|-" is
        not supported due to implicit forks, use IPC::Open2 instead.

        * bindings/scripts/IDLParser.pm:

2007-11-07  Dan Bernstein  <mitz@apple.com>

        Reviewed by Brady Eidson.

        - fix http://bugs.webkit.org/show_bug.cgi?id=15877
          REGRESSION: r27486 caused a layout regression at my bank's website

        Test: fast/block/float/overhanging-after-height-decrease-offsets.html

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::layoutBlock):

2007-11-06  Beth Dakin  <bdakin@apple.com>

        Reviewed by Sam.

        <rdar://problem/5575812> REGRESSION:When using absolute positioning 
        with overflow:auto div, WebKit seems to add an additional 15px

        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::containingBlockWidthForPositioned): We need to 
        subtract off the vertical scrollbar width too.

2007-11-06  Justin Garcia  <justin.garcia@apple.com>

        Reviewed by Dan Bernstein.
        
        <rdar://problem/5583387> ASSERTION FAILED: !refChild->hasTagName(bodyTag) when pasting newline in plain text into rich text Mail
        <rdar://problem/5583362> REGRESSION (5523.10.3-TOT): Newlines stripped when pasting plain text in Mail

        * editing/markup.cpp:
        (WebCore::createFragmentFromText): Put paragraphs of text into clones of the block
        that encloses the input context, unless that block is the body, which shouldn't
        be cloned.  In that case, use regular divs, as we did before r27369.

2007-11-06  Christian Dywan  <christian@twotoasts.de>

        Reviewed by Darin.

        Fix http://bugs.webkit.org/show_bug.cgi?id=15828
        Bug 15828: WebKit GTK include and lib directory is installed in qt4-named directory

        * WebCore.pro: Use sane default install paths for the gtk port.

2007-11-06  Justin Garcia  <justin.garcia@apple.com>

        Reviewed by Darin Adler.
        
        <rdar://problem/5576619> 
        REGRESSION: Caret disappears after deleting the last character in inline hole (15714)

        * editing/TypingCommand.cpp:
        (WebCore::TypingCommand::deleteSelection): Like the other TypingCommands, including
        both of the other deletion commands, call typingAddedToOpenCommand(), which takes 
        the command's endingSelection and sets it as selection.

2007-11-06  Dan Bernstein  <mitz@apple.com>

        Reviewed by Antti Koivisto and Dave Hyatt.

        - fix <rdar://problem/5582961> Incorrect layout and floating object list corruption when CSS decreases a block's height

        Test: fast/block/float/overhanging-after-height-decrease.html

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::layoutBlock): If after calculating the height
        it turns out that there are overhanging floats that were not overhanging
        before, rescan children with overhanging floats and add them. 
        (WebCore::RenderBlock::layoutBlockChildren): Added a parameter that
        returns the lowest float bottom of any of the children.
        (WebCore::RenderBlock::addOverhangingFloats): Changed to return the
        lowest float bottom.
        * rendering/RenderBlock.h:

2007-11-06  Adele Peterson  <adele@apple.com>

        Reviewed by Darin.

        Switched all uses of HTMLImageLoader to use OwnPtrs.

        * html/HTMLInputElement.h:
        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::init):
        (WebCore::HTMLInputElement::~HTMLInputElement):
        (WebCore::HTMLInputElement::setInputType):
        (WebCore::HTMLInputElement::parseMappedAttribute):
        (WebCore::HTMLInputElement::attach):
        * html/HTMLObjectElement.h:
        * html/HTMLObjectElement.cpp:
        (WebCore::HTMLObjectElement::HTMLObjectElement):
        (WebCore::HTMLObjectElement::~HTMLObjectElement):
        (WebCore::HTMLObjectElement::parseMappedAttribute):
        (WebCore::HTMLObjectElement::attach):
        * html/HTMLVideoElement.h:
        * html/HTMLVideoElement.cpp:
        (WebCore::HTMLVideoElement::HTMLVideoElement):
        (WebCore::HTMLVideoElement::attach):
        (WebCore::HTMLVideoElement::detach):
        (WebCore::HTMLVideoElement::parseMappedAttribute):

2007-11-06  Antti Koivisto  <antti@apple.com>

        Reviewed by Darin.
        
        Trigger media load on on src attribute changes as specified in new HTML5 draft.

        Tests: media/video-src-change.html
               media/video-src-remove.html
               media/video-src-set.html

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::attributeChanged):
        * html/HTMLMediaElement.h:

2007-11-06  Dan Bernstein  <mitz@apple.com>

        Reviewed by Darin Adler.

        - fix http://bugs.webkit.org/show_bug.cgi?id=15838
          Incomplete repaint toggling "How you know this person" on Facebook

        Test: fast/repaint/make-children-non-inline.html

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::makeChildrenNonInline): Repaint the block. This
        is needed because the inline children may be repositioned as they move
        into new anonymous blocks, but those blocks have no knowledge of where
        their children used to be, so they cannot invalidate those areas.

2007-11-06  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Darin.

        http://bugs.webkit.org/show_bug.cgi?id=15847
        Some editing cleanup

        No change in functionality.

        * editing/TextIterator.cpp:
        (WebCore::plainText):
        * editing/TextIterator.h:
        Made WebCore::plainText() return String instead of DeprecatedString.

        * bridge/mac/WebCoreAXObject.mm:
        (-[WebCoreAXObject textUnderElement]):
        (-[WebCoreAXObject value]):
        (-[WebCoreAXObject doAXBoundsForTextMarkerRange:]):
        (-[WebCoreAXObject doAXNextSentenceEndTextMarkerForTextMarker:]):
        (-[WebCoreAXObject doAXPreviousSentenceStartTextMarkerForTextMarker:]):
        Updated for the above change. There is no need to explicitly convert to NSString now.

        * editing/EditCommand.cpp:
        (WebCore::EditCommand::EditCommand): m_startingSelection and m_endingSelection are actually
        initialized in constructor body, so the work done in initializer list was wasted.

        (WebCore::EditCommand::apply): Moved some stars.
        (WebCore::EditCommand::unapply): Ditto.
        (WebCore::EditCommand::reapply): Ditto.
        (WebCore::EditCommand::setStartingSelection): The loop exit condition was evaluated twice,
        removed one of the checks.

        * editing/SelectionController.cpp:
        (WebCore::SelectionController::toString): plainText() result type now matches what we need here.

        * page/mac/WebCoreFrameBridge.h:
        * page/mac/WebCoreFrameBridge.mm:
        Removed unused -[WebCoreFrameBridge deleteKeyPressedWithSmartDelete:granularity:] and
        -[WebCoreFrameBridge forwardDeleteKeyPressedWithSmartDelete:granularity:].

2007-11-05  Mark Rowe  <mrowe@apple.com>

        Mac build fix.

        * bindings/js/JSHTMLDocumentCustom.cpp:
        (WebCore::writeHelper):

2007-11-05  Adam Roben  <aroben@apple.com>

        Don't crash if SafariTheme can't be loaded

        PlatformScrollBarSafari and RenderThemeSafari were not checking
        whether SafariTheme was successfully loaded. All other uses of
        SafariTheme already check this.

        Reviewed by Steve.

        * platform/win/PlatformScrollBarSafari.cpp: Don't paint if SafariTheme
        couldn't be loaded.
        (WebCore::PlatformScrollbar::paintButton):
        (WebCore::PlatformScrollbar::paintTrack):
        (WebCore::PlatformScrollbar::paintThumb):
        * rendering/RenderThemeSafari.cpp:
        (WebCore::RenderThemeSafari::isControlStyled): Always return true if
        we couldn't load SafariTheme. This way we should never try to paint
        themed controls (and we assert as such in the paint functions).
        (WebCore::RenderThemeSafari::paintCheckbox):
        (WebCore::RenderThemeSafari::paintRadio):
        (WebCore::RenderThemeSafari::paintButton):
        (WebCore::RenderThemeSafari::paintTextField):
        (WebCore::RenderThemeSafari::paintCapsLockIndicator):
        (WebCore::RenderThemeSafari::paintTextArea):
        (WebCore::RenderThemeSafari::paintMenuList):
        (WebCore::RenderThemeSafari::paintSliderThumb):
        (WebCore::RenderThemeSafari::paintSearchField):
        (WebCore::RenderThemeSafari::paintSearchFieldCancelButton):
        (WebCore::RenderThemeSafari::paintSearchFieldResultsDecoration):
        (WebCore::RenderThemeSafari::paintSearchFieldResultsButton):

2007-11-05  Kevin Ollivier  <kevino@theolliviers.com>

        Adding the rest of wx port's graphics impl. 

        Rubber-stamped by Maciej Stachowiak.

        * platform/graphics/wx/AffineTransformWx.cpp: Added.
        * platform/graphics/wx/GraphicsContextWx.cpp: Added.
        * platform/graphics/wx/ImageBufferWx.cpp: Added.
        * platform/graphics/wx/ImageSourceWx.cpp: Added.
        * platform/graphics/wx/ImageWx.cpp: Added.
        * platform/graphics/wx/PathWx.cpp: Added.

2007-11-05  Kevin Ollivier  <kevino@theolliviers.com>

        wx port bug fixes and new files to get platform/wx building on trunk.

        Rubber-stamped by Maciej Stachowiak.

        * platform/wx/CursorWx.cpp:
        * platform/wx/FileSystemWx.cpp: Added.
        * platform/wx/FontCacheWx.cpp:
        * platform/wx/FontPlatformDataWx.cpp:
        * platform/wx/FontWx.cpp:
        * platform/wx/KeyboardEventWx.cpp:
        * platform/wx/LocalizedStringsWx.cpp: Added.
        * platform/wx/LoggingWx.cpp: Added.
        * platform/wx/RenderThemeWx.cpp:
        * platform/wx/ScrollViewWx.cpp:
        * platform/wx/SharedTimerWx.cpp:
        * platform/wx/StringWx.cpp:
        * platform/wx/ThreadingWx.cpp: Added.
        * platform/wx/WidgetWx.cpp:

2007-11-05  Adele Peterson  <adele@apple.com>

        Reviewed by Maciej.

        Fix for <rdar://problem/5579999> Add poster attribute for video element

        * html/HTMLAttributeNames.in: Added poster attribute.

        * html/HTMLImageLoader.cpp: (WebCore::HTMLImageLoader::updateFromElement):
          Calls imageSourceAttributeName instead of having special cases for the different kinds of elements. 
        * dom/Element.cpp: (WebCore::Element::imageSourceAttributeName): Added.
        * dom/Element.h:
        * html/HTMLObjectElement.cpp: (WebCore::HTMLObjectElement::imageSourceAttributeName): Added.
        * html/HTMLObjectElement.h:

        * html/HTMLMediaElement.cpp: (WebCore::HTMLMediaElement::movieNetworkStateChanged):
          Calls updatePosterImage when the network state is empty and when the first frame has been loaded.
        * html/HTMLMediaElement.h: (WebCore::HTMLMediaElement::rendererIsNeeded): Made this inline.  HTMLVideoElement now also implements this.

        * html/HTMLVideoElement.idl: Added case for poster attribute.
        * html/HTMLVideoElement.h: Added image loader and flag to keep track of whether or not the poster image should be shown.
        * html/HTMLVideoElement.cpp:
        (WebCore::HTMLVideoElement::HTMLVideoElement): Initialize m_imageLoader and m_shouldShowPosterImage.
        (WebCore::HTMLVideoElement::rendererIsNeeded): Calls HTMLElement::rendererIsNeeded since HTMLMediaElements have renderer by default.
        (WebCore::HTMLVideoElement::createRenderer): Create a RenderImage or RenderVideo depending on whether or not the poster image should be shown.
        (WebCore::HTMLVideoElement::attach): Set up image loader and RenderImage if necessary.
        (WebCore::HTMLVideoElement::detach): Delete image loader if its no longer needed.
        (WebCore::HTMLVideoElement::parseMappedAttribute): Added case to process poster attribute.
        (WebCore::HTMLVideoElement::poster): Added getter for poster attribute.
        (WebCore::HTMLVideoElement::setPoster): Added setter for poster attribute.
        (WebCore::HTMLVideoElement::isURLAttribute): Added.
        (WebCore::HTMLVideoElement::imageSourceAttributeName): Added.
        (WebCore::HTMLVideoElement::updatePosterImage): Added.  Updates m_shouldShowPosterImage and if its changed, detaches and attaches so the renderer is correct.

2007-11-05  Adam Roben  <aroben@apple.com>

        Fix <rdar://5563572> SVG image support is turned off

        Turned on SVG images for all platforms.

        Reviewed by Eric.

        * WebCore.vcproj/WebCore.vcproj: Added SVGImage.{cpp,h}
        * loader/CachedImage.cpp:
        (WebCore::CachedImage::createImage): Removed platform checks for
        SVGImage.

2007-11-05  Antti Koivisto  <antti@apple.com>

        Reviewed by Darin.

        QTMovieView can generate callbacks during paint. This can lead to crashes.
        
        Delay callbacks so they get handled after painting is completed. No test case,
        I don't know how to reliably reproduce this.

        * platform/graphics/mac/MoviePrivateQTKit.mm:
        (WebCore::MoviePrivate::MoviePrivate):
        (WebCore::MoviePrivate::~MoviePrivate):
        (WebCore::MoviePrivate::paint):
        (-[WebCoreMovieObserver initWithCallback:WebCore::]):
        (-[WebCoreMovieObserver disconnect]):
        (-[WebCoreMovieObserver loadStateChanged:]):
        (-[WebCoreMovieObserver rateChanged:]):
        (-[WebCoreMovieObserver sizeChanged:]):
        (-[WebCoreMovieObserver timeChanged:]):
        (-[WebCoreMovieObserver volumeChanged:]):
        (-[WebCoreMovieObserver didEnd:]):
        (-[WebCoreMovieObserver setDelayCallbacks:]):

2007-11-05  Antti Koivisto  <antti@apple.com>

        Reviewed by Adam.

        Add some missing WebCore* prefixes to ObjC classes

        * platform/mac/FileChooserMac.mm:
        (WebCore::FileChooser::FileChooser):
        * platform/mac/SharedBufferMac.mm:
        (WebCore::SharedBuffer::createNSData):
        (WebCore::SharedBuffer::createCFData):
        * platform/mac/SharedTimerMac.cpp:
        (WebCore::setSharedTimerFireTime):

2007-11-05  Ada Chan  <adachan@apple.com>

        <rdar://problem/5579772> Regression: AltGr does not work
        We now store the system key event info in PlatforkKeyboardEvent().

        Reviewed by Oliver.

        * platform/PlatformKeyboardEvent.h:
        (WebCore::PlatformKeyboardEvent::isSystemKey):
        * platform/win/KeyEventWin.cpp:
        (WebCore::PlatformKeyboardEvent::PlatformKeyboardEvent):

2007-11-02  Tristan O'Tierney  <tristan@apple.com>

        Reviewed by Darin Adler.

        * WebCore.xcodeproj/project.pbxproj:
        Set WindowFeatures.h as a Private header.
        
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::createWindow):
        Revised to use a single createWindow function instead of
        two createWindow functions and one createModalDialog function.
        The logic for this is now addressed in WebKit in an effort
        to make this easier to follow.
        
        * page/Chrome.cpp:
        (WebCore::Chrome::createWindow):
        * page/Chrome.h:
        * page/ChromeClient.h:
        * page/ContextMenuController.cpp:
        (WebCore::openNewWindow):
        * platform/graphics/svg/SVGImageEmptyClients.h:
        (WebCore::SVGEmptyChromeClient::createWindow):
        Revised to take new additional windowFeatures parameter.

2007-11-04  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Darin Adler.
        
        http://bugs.webkit.org/show_bug.cgi?id=15835

        Small adaptations to new KJS::List class.

        * bindings/js/kjs_window.cpp:
        (KJS::WindowFunc::callAsFunction):
        (KJS::ScheduledAction::ScheduledAction):

2007-11-05  Adam Roben  <aroben@apple.com>

        Allow passing a base class pointer to COMPtr::copyRefTo

        Reviewed by Sam.

        * platform/win/COMPtr.h:

2007-11-05  Dan Bernstein  <mitz@apple.com>

        Reviewed by Oliver Hunt.

        - fix ASSERTION FAILED: !HashTranslator::equal(KeyTraits::emptyValue(), key) when a class attribute is all-whitespace

        Test: fast/dom/class-all-whitespace.html

        * dom/StyledElement.cpp:
        (WebCore::StyledElement::parseMappedAttribute): Check if there is any
        non-whitespace character in the class attribute.

2007-11-05  Brady Eidson  <beidson@apple.com>

        Reviewed by Sam

        Add transaction blocking to the DatabaseAuthorizer in preparation for the new version
        of the sql storage API

        * storage/DatabaseAuthorizer.cpp:
        (WebCore::DatabaseAuthorizer::allowTransaction):
        * storage/DatabaseAuthorizer.h:

2007-11-05  Mark Rowe  <mrowe@apple.com>

        Reviewed by Alp Toker.

        Have getMIMETypeForExtension return a null string when no MIME type is known
        for the extension rather than returning "text/plain".  This prevents plugin data
        being dumped into object elements when plugins are disabled.

        * platform/gtk/MIMETypeRegistryGtk.cpp:
        (WebCore::MIMETypeRegistry::getMIMETypeForExtension):

2007-11-04  Sam Weinig  <sam@webkit.org>

        Rubber-stamped by Adam Roben.

        Rename SecurityOrigin::allowsAccessFrom to SecurityOrigin::canAccess to 
        clear up ambiguity.

        * bindings/js/kjs_window.cpp:
        (KJS::Window::isSafeScript):
        * platform/SecurityOrigin.cpp:
        (WebCore::SecurityOrigin::canAccess):
        * platform/SecurityOrigin.h:

2007-11-04  Timothy Hatcher  <timothy@apple.com>

        Reviewed by Adam.

        Bug 15834: There are many subtle bugs in the Styles pane of the Web Inspector
        http://bugs.webkit.org/show_bug.cgi?id=15834

        - Broke up DocumentPanel and added three SidebarPane sub-classes.
        - Fixed many Style pane bugs, including:
          * Poor handling of duplicate properties in the same rule. Some of this can't be
            fixed since we can't only get the "winning" value for duplicate properties.
            So we should only show one entry per unique property name.
          * Computed style does not show font shorthand sub-properties if 'font' was used.
          * Property priority was broken, the wrong properties were crossed out.
          * The 'border' shorthand shows null for the shorthand value.
          * Shorthands didn't show their priority (e.g. !important).
          * HSL and HTML hex colors didn't have preview swatch blocks.
          * Code refactoring, making it easier to reuse for console.log later.

        * page/inspector/DocumentPanel.js: Move sidebar pane code to three seperate
          classes in new files.
        * page/inspector/MetricsSidebarPane.js: Added.
        * page/inspector/Panel.js: Remove an InspectorController.log() call.
        * page/inspector/PropertiesSection.js: Add the section to the TreeOutline.
          So TreeElements can access properties on their section.
        * page/inspector/PropertiesSidebarPane.js: Added.
        * page/inspector/SidebarPane.js: Remove the explicit asignment of the
          onexpand and oncollapse to null. These were hiding prototypes.
        * page/inspector/StylesSidebarPane.js: Added.
        * page/inspector/inspector.html: Include the new script files.
        * page/inspector/treeoutline.js: If a null representedObject is passed
          in just use a empty object.

2007-11-04  David D. Kilzer  <ddkilzer@webkit.org>

        Fix build when spaces appear in the WebKit source path.

        Reviewed by Mark Rowe.

        * bindings/scripts/IDLParser.pm: Use safer open() method which lists
        arguments individually and prevents the need to work around spaces
        in the path.

2007-11-04  Alp Toker  <alp@atoker.com>

        Reviewed by Alexey Proskuryakov.

        Fix a crash when no clipboard text is available

        * platform/gtk/PasteboardGtk.cpp:
        (WebCore::Pasteboard::plainText):

2007-11-03  Darin Adler  <darin@apple.com>

        Reviewed by Maciej.

        - WebCore part of http://bugs.webkit.org/show_bug.cgi?id=15821
          remove unused PCRE features for speed

        * page/Frame.cpp: (WebCore::Frame::matchLabelsAgainstElement):
        * page/mac/FrameMac.mm: (WebCore::Frame::matchLabelsAgainstElement):
        Remove use of "[[:digit:]]" syntax. This hasn't worked for some time.
        Use "\d" instead.

        * platform/RegularExpression.h: Remove the unused cap function. We can
        add it back later if we find we need it.
        * platform/RegularExpression.cpp:
        (WebCore::RegularExpression::Private::compile): Update for JavaScriptCore
        regular expression entry point changes.
        (WebCore::RegularExpression::Private::~Private): Ditto.
        (WebCore::RegularExpression::match): Remove the code to set PCRE_NOTBOL.
        This means that regular expressions with metacharactesr like ^ in them
        won't work any more with non-whole-string searches, but we don't use
        any regular expressions like that.

2007-11-03  Kevin Ollivier  <kevino@theolliviers.com>

        Update the link stubs to match the current build,
        and fix coding style issues.

        Reviewed by Mark Rowe.

        * platform/wx/TemporaryLinkStubs.cpp:
        (loadResourceIntoArray):
        (findNextSentenceFromIndex):
        (findSentenceBoundary):
        (Frame::dashboardRegionsChanged):
        (WebCore::historyContains):
        (CachedPage::close):
        (Editor::showStylesPanel):
        (EventHandler::passSubframeEventToSubframe):
        (EventHandler::passWheelEventToWidget):
        (WebCore::currentTextBreakLocaleID):

2007-11-03  Kevin Ollivier  <kevino@theolliviers.com>

        wx <-> WebKit conversions for IntPoint, IntRect and FloatRect

        Reviewed by Mark Rowe.

        * platform/graphics/wx/FloatRectWx.cpp: Added.
        * platform/graphics/wx/IntPointWx.cpp: Added.
        * platform/graphics/wx/IntRectWx.cpp: Added.

2007-11-03  Kevin Ollivier  <kevino@theolliviers.com>

        wx <-> WebKit data type conversions for Pen and Color.

        Reviewed by Darin Adler.

        * platform/graphics/wx: Added.
        * platform/graphics/wx/ColorWx.cpp: Added.
        * platform/graphics/wx/PenWx.cpp: Added.

2007-11-03  Sam Weinig  <sam@webkit.org>

        Reviewed by Oliver.

        Remove dummy variable from ClassInfo reducing the size of the struct by 1 word.
        The variable had been kept around for binary compatibility, but since nothing
        else is there is no point in continuing to keep it around.

        * bindings/js/JSDOMExceptionConstructor.cpp:
        (WebCore::):
        * bindings/js/JSHTMLInputElementBase.cpp:
        (WebCore::):
        * bindings/js/JSNamedNodesCollection.cpp:
        (WebCore::):
        * bindings/js/JSXMLHttpRequest.cpp:
        (KJS::):
        * bindings/js/JSXSLTProcessor.cpp:
        (KJS::):
        * bindings/js/kjs_css.cpp:
        (WebCore::):
        * bindings/js/kjs_events.cpp:
        (WebCore::):
        * bindings/js/kjs_navigator.cpp:
        (KJS::):
        * bindings/js/kjs_window.cpp:
        (KJS::):
        * bindings/scripts/CodeGeneratorJS.pm:

2007-11-03  Kevin Ollivier  <kevino@theolliviers.com>

        Build fixes to get wx impls. building on trunk.

        Reviewed by Mark Rowe.

        * platform/wx/DragDataWx.cpp:
        (WebCore::DragData::containsFiles):
        (WebCore::DragData::asFilenames):
        * platform/wx/DragImageWx.cpp:
        (WebCore::scaleDragImage):
        * platform/wx/MimeTypeRegistryWx.cpp:
        (WebCore::MIMETypeRegistry::getMIMETypeForExtension):
        * platform/wx/MouseEventWx.cpp:
        (WebCore::PlatformMouseEvent::PlatformMouseEvent):
        * platform/wx/MouseWheelEventWx.cpp:
        * platform/wx/PasteboardWx.cpp:
        (WebCore::Pasteboard::writeImage):
        * platform/wx/WidgetWx.cpp:
        (WebCore::Widget::setCursor):

2007-11-03  David D. Kilzer  <ddkilzer@webkit.org>

        Sort files(...); sections of Xcode project files.

        Rubber-stamped by Darin.

        * WebCore.xcodeproj/project.pbxproj:
        * manual-tests/NPN_Invoke/NPN_Invoke.xcodeproj/project.pbxproj:

2007-11-03  Kevin Ollivier  <kevino@theolliviers.com>

        Coding style fixes for platform/wx files.

        Reviewed by Mark Rowe.

        * platform/wx/ClipboardWx.cpp:
        * platform/wx/GlyphMapWx.cpp:
        * platform/wx/ScreenWx.cpp:

2007-11-03  Alp Toker  <alp@atoker.com>

        Reviewed by Mark Rowe.

        Implement platform scrollbar static width/height getters

        * platform/gtk/PlatformScrollBar.h:
        * platform/gtk/PlatformScrollBarGtk.cpp:
        (scrollbarSize):
        (PlatformScrollbar::horizontalScrollbarHeight):

2007-11-03  Alp Toker  <alp@atoker.com>

        Reviewed by Mark Rowe.

        Cast function pointers to gpointer.

        * platform/gtk/PlatformScrollBarGtk.cpp:
        (PlatformScrollbar::~PlatformScrollbar):

2007-11-03  Alp Toker  <alp@atoker.com>

        Reviewed by Adam Roben.

        RenderThemeGtk implementation based on Mozilla's GTK+ style code

        There is still work needed to complete this feature.

        * WebCore.pro:
        * platform/gtk/RenderThemeGtk.cpp:
        (WebCore::theme):
        (WebCore::RenderThemeGtk::RenderThemeGtk):
        (WebCore::supportsFocus):
        (WebCore::RenderThemeGtk::supportsFocusRing):
        (WebCore::RenderThemeGtk::controlSupportsTints):
        (WebCore::RenderThemeGtk::baselinePosition):
        (WebCore::adjustMozStyle):
        (WebCore::setMozState):
        (WebCore::paintMozWidget):
        (WebCore::setButtonPadding):
        (WebCore::setToggleSize):
        (WebCore::RenderThemeGtk::setCheckboxSize):
        (WebCore::RenderThemeGtk::paintCheckbox):
        (WebCore::RenderThemeGtk::setRadioSize):
        (WebCore::RenderThemeGtk::paintRadio):
        (WebCore::RenderThemeGtk::adjustButtonStyle):
        (WebCore::RenderThemeGtk::paintButton):
        (WebCore::RenderThemeGtk::adjustMenuListStyle):
        (WebCore::RenderThemeGtk::paintMenuList):
        (WebCore::RenderThemeGtk::adjustTextFieldStyle):
        (WebCore::RenderThemeGtk::paintTextField):
        (WebCore::RenderThemeGtk::adjustSearchFieldResultsButtonStyle):
        (WebCore::RenderThemeGtk::paintSearchFieldResultsButton):
        (WebCore::RenderThemeGtk::adjustSearchFieldResultsDecorationStyle):
        (WebCore::RenderThemeGtk::paintSearchFieldResultsDecoration):
        (WebCore::RenderThemeGtk::adjustSearchFieldCancelButtonStyle):
        (WebCore::RenderThemeGtk::paintSearchFieldCancelButton):
        (WebCore::RenderThemeGtk::adjustSearchFieldStyle):
        (WebCore::RenderThemeGtk::paintSearchField):
        (WebCore::RenderThemeGtk::platformActiveSelectionBackgroundColor):
        (WebCore::RenderThemeGtk::platformInactiveSelectionBackgroundColor):
        (WebCore::RenderThemeGtk::platformActiveSelectionForegroundColor):
        (WebCore::RenderThemeGtk::platformInactiveSelectionForegroundColor):
        (WebCore::RenderThemeGtk::activeListBoxSelectionBackgroundColor):
        (WebCore::RenderThemeGtk::inactiveListBoxSelectionBackgroundColor):
        (WebCore::RenderThemeGtk::activeListBoxSelectionForegroundColor):
        (WebCore::RenderThemeGtk::inactiveListBoxSelectionForegroundColor):
        (WebCore::RenderThemeGtk::caretBlinkFrequency):
        (WebCore::RenderThemeGtk::systemFont):
        (WebCore::gtkStyleSetCallback):
        (WebCore::RenderThemeGtk::gtkContainer):
        (WebCore::RenderThemeGtk::gtkEntry):
        (WebCore::RenderThemeGtk::gtkTreeView):
        * platform/gtk/RenderThemeGtk.h:
        * platform/gtk/gtk2drawing.c: Added.
        (moz_gtk_enable_style_props):
        (ensure_window_widget):
        (setup_widget_prototype):
        (ensure_button_widget):
        (ensure_checkbox_widget):
        (ensure_radiobutton_widget):
        (ensure_scrollbar_widget):
        (ensure_spin_widget):
        (ensure_scale_widget):
        (ensure_entry_widget):
        (ensure_option_menu_widget):
        (ensure_arrow_widget):
        (ensure_handlebox_widget):
        (ensure_toolbar_widget):
        (ensure_tooltip_widget):
        (ensure_tab_widget):
        (ensure_progress_widget):
        (ensure_frame_widget):
        (ensure_menu_bar_widget):
        (ensure_menu_bar_item_widget):
        (ensure_menu_popup_widget):
        (ensure_menu_item_widget):
        (ensure_check_menu_item_widget):
        (ConvertGtkState):
        (TSOffsetStyleGCArray):
        (TSOffsetStyleGCs):
        (moz_gtk_button_paint):
        (moz_gtk_init):
        (moz_gtk_checkbox_get_metrics):
        (moz_gtk_radio_get_metrics):
        (moz_gtk_checkbox_get_focus):
        (moz_gtk_radio_get_focus):
        (moz_gtk_button_get_focus):
        (moz_gtk_option_menu_get_metrics):
        (moz_gtk_toggle_paint):
        (calculate_arrow_dimensions):
        (moz_gtk_scrollbar_button_paint):
        (moz_gtk_scrollbar_trough_paint):
        (moz_gtk_scrollbar_thumb_paint):
        (moz_gtk_spin_paint):
        (moz_gtk_scale_paint):
        (moz_gtk_scale_thumb_paint):
        (moz_gtk_gripper_paint):
        (moz_gtk_entry_paint):
        (moz_gtk_option_menu_paint):
        (moz_gtk_dropdown_arrow_paint):
        (moz_gtk_container_paint):
        (moz_gtk_toggle_label_paint):
        (moz_gtk_toolbar_paint):
        (moz_gtk_tooltip_paint):
        (moz_gtk_frame_paint):
        (moz_gtk_progressbar_paint):
        (moz_gtk_progress_chunk_paint):
        (moz_gtk_tab_paint):
        (moz_gtk_tabpanels_paint):
        (moz_gtk_menu_bar_paint):
        (moz_gtk_menu_popup_paint):
        (moz_gtk_menu_item_paint):
        (moz_gtk_check_menu_item_paint):
        (moz_gtk_window_paint):
        (moz_gtk_get_widget_border):
        (moz_gtk_get_dropdown_arrow_size):
        (moz_gtk_get_scalethumb_metrics):
        (moz_gtk_get_scrollbar_metrics):
        (moz_gtk_widget_paint):
        (moz_gtk_get_scrollbar_widget):
        (moz_gtk_shutdown):
        * platform/gtk/gtkdrawing.h: Added.

2007-11-03  Alp Toker  <alp@atoker.com>

        Reviewed by Mark Rowe.

        Do not allow scrollbars to handle wheel events
        
        We bubble the wheel event up so the parent can handle it instead.

        * platform/gtk/PlatformScrollBarGtk.cpp:
        (gtkScrollEventCallback):
        (PlatformScrollbar::PlatformScrollbar):
        (PlatformScrollbar::~PlatformScrollbar):

2007-11-03  Alp Toker  <alp@atoker.com>

        Reviewed by Mark Rowe.

        Frame scrolling and invalidation fixes

        Make upward scroll events have a positive delta to match other ports.

        Fix the invalidation rect offset for frames so that scrolling works properly.

        Avoid allocating negative sizes to widgets to avoid GTK+ warnings.

        Allow tabbing to all widgets and links.

        Fix event returns, improving the focus situation and correcting scroll wheel
        behavior.

        * page/gtk/EventHandlerGtk.cpp:
        (WebCore::EventHandler::tabsToAllControls):
        (WebCore::EventHandler::passWheelEventToWidget):
        * platform/gtk/ScrollViewGtk.cpp:
        (WebCore::ScrollViewScrollbar::geometryChanged):
        (WebCore::ScrollView::updateContents):
        (WebCore::ScrollView::update):
        (WebCore::ScrollView::wheelEvent):
        (WebCore::ScrollView::updateScrollbars):
        * platform/gtk/WheelEventGtk.cpp:
        (WebCore::PlatformWheelEvent::PlatformWheelEvent):

2007-11-03  David D. Kilzer  <ddkilzer@webkit.org>

        LGPL'ed files contain incorrect FSF address
        <http://bugs.webkit.org/show_bug.cgi?id=14885>

        * bindings/js/JSSVGTransformListCustom.cpp:
        * ksvg2/svg/SVGException.idl:
        * ksvg2/svg/SVGTextPathElement.cpp:
        * ksvg2/svg/SVGTextPathElement.h:
        * ksvg2/svg/SVGViewSpec.cpp:
        * ksvg2/svg/SVGViewSpec.h:
        * platform/mac/FontCustomPlatformData.cpp:
        * platform/mac/FontCustomPlatformData.h:
        * platform/mac/FontPlatformDataMac.mm:
        * platform/win/FontCustomPlatformData.cpp:
        * platform/win/FontCustomPlatformData.h:
        * rendering/RenderSVGRoot.cpp:
        * rendering/RenderSVGRoot.h:
        * rendering/RenderSVGTextPath.cpp:
        * rendering/RenderSVGTextPath.h:
        * rendering/RenderSVGTransformableContainer.h:
        * rendering/RenderSVGViewportContainer.cpp:
        * rendering/RenderSVGViewportContainer.h:
        * rendering/SVGCharacterLayoutInfo.cpp:
        * rendering/SVGCharacterLayoutInfo.h:
        * rendering/SVGRenderSupport.cpp:
        * rendering/SVGRenderSupport.h:

2007-11-02  Antti Koivisto  <antti@apple.com>

        Reviewed by Adam.
        
        Add video width/height DOM and content attributes from latest HTML5 draft.

        Test: media/video-width-height.html

        * html/HTMLVideoElement.cpp:
        (WebCore::HTMLVideoElement::parseMappedAttribute):
        (WebCore::HTMLVideoElement::width):
        (WebCore::HTMLVideoElement::setWidth):
        (WebCore::HTMLVideoElement::height):
        (WebCore::HTMLVideoElement::setHeight):
        * html/HTMLVideoElement.h:
        * html/HTMLVideoElement.idl:

2007-11-02  Darin Adler  <darin@apple.com>

        Reviewed by Maciej.

        * DerivedSources.make: Remove a few explicit filenames from some rules by using
        make variables a little more.
        * WebCore.LP64.exp: Fix typo, grammar.

2007-11-02  Darin Adler  <darin@apple.com>

        Reviewed by Maciej.

        - use the new HashMap::take function where appropriate

        * bindings/js/kjs_binding.cpp:
        (KJS::addWrapper): Made an inline rather than a macro; inlines good, macros bad.
        (KJS::removeWrapper): Ditto.
        (KJS::removeWrappers): Ditto.
        (KJS::ScriptInterpreter::putDOMObject): Use the inline instead of the macro.
        (KJS::ScriptInterpreter::forgetDOMObject): Ditto. This involves using take instead
        of remove -- in theory ever so slightly less efficient, but I think it's fine.
        (KJS::ScriptInterpreter::forgetDOMNodeForDocument): Ditto.
        (KJS::ScriptInterpreter::putDOMNodeForDocument): Use the inline instead of the macro.
        (KJS::ScriptInterpreter::forgetAllDOMNodesForDocument): Use take instead of find/remove.
        (KJS::ScriptInterpreter::updateDOMNodeDocument): Use the inlines instead of the macros.

        * bindings/js/kjs_window.cpp: (KJS::Window::clearTimeout): Use take instead of find/remove.
        * bridge/mac/AXObjectCacheMac.mm: (WebCore::AXObjectCache::remove): Ditto.
        * page/AnimationController.cpp: (WebCore::AnimationControllerPrivate::clear): Ditto.
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::~RenderBlock): Ditto.
        (WebCore::RenderBlock::setDesiredColumnCountAndWidth): Ditto.
        * rendering/RootInlineBox.cpp: Ditto.(WebCore::RootInlineBox::detachEllipsisBox): Ditto.

2007-11-02  Antti Koivisto  <antti@apple.com>

        Reviewed by Darin.

        Enable video composition.

        * WebCore.base.exp:
        * platform/graphics/mac/MoviePrivateQTKit.mm:
        (WebCore::MoviePrivate::createQTMovieView):
        * platform/mac/WebCoreSystemInterface.h:
        * platform/mac/WebCoreSystemInterface.mm:

2007-11-02  Darin Adler  <darin@apple.com>

        Reviewed by Mitz.

        - fix http://bugs.webkit.org/show_bug.cgi?id=15806
          <rdar://problem/5561626> ASSERT(element->isRadioButton()) fires destroying form elements

        Test: fast/forms/remove-radio-button-assert.html

        * html/HTMLGenericFormElement.cpp: (WebCore::HTMLGenericFormElement::removeFromForm):
        Added protected function to be used by derived classes that need to do the same sort
        of removal from form that's automatically done by the base class in certain circumstances.
        * html/HTMLGenericFormElement.h: Added removeFromForm.

        * html/HTMLInputElement.cpp: (WebCore::HTMLInputElement::~HTMLInputElement):
        Call removeFromForm here so the element is removed before we destroy the HTMLInputElement
        part of this object. By the time we get to the base class's destructor it's too late.
        The problem is specific to radio buttons so we don't have to worry about other classes
        derived from HTMLGenericFormElement.

2007-11-02  Darin Adler  <darin@apple.com>

        Reviewed by Mitz.

        - speculative fix for http://bugs.webkit.org/show_bug.cgi?id=15805
          <rdar://problem/5510779> crashes in isLoadingMultipartContent

        * loader/DocumentLoader.cpp: (WebCore::DocumentLoader::isLoadingMultipartContent):
        Instead of asserting the frame loader is non-0, return false if it is 0.

2007-11-02  Darin Adler  <darin@apple.com>

        Reviewed by Mitz.

        - fix <rdar://problem/5530185> WebKit does not show <object> fallback content when both
          URL and MIME type is omitted

        Already covered by existing tests (that had incorrect results).

        * loader/FrameLoader.cpp: (WebCore::FrameLoader::requestObject): Return false to indicate
        failure when both URL and MIME type are empty. The old code would not attempt a load, but
        it would indicate success.

        * rendering/RenderPartObject.cpp: (WebCore::RenderPartObject::updateWidget): Remove
        non-helpful early exit for the case where there is no URL and no type. Returning early
        prevents the fallback code from running.

2007-11-02  Alp Toker  <alp@atoker.com>

        Reviewed by Darin.

        Include Cairo headers properly

        * platform/graphics/AffineTransform.h:
        * platform/graphics/ImageBuffer.h:
        * platform/graphics/cairo/AffineTransformCairo.cpp:
        * platform/gtk/FontPlatformDataGtk.cpp:

2007-11-01  Oliver Hunt  <oliver@apple.com>

        Reviewed by Alexey.

        Make sure we send the correct events for Capslock, Shift, Ctrl, Alt and the Windows key        

        * platform/win/KeyEventWin.cpp:
        (WebCore::keyIdentifierForWindowsKeyCode):
        (WebCore::PlatformKeyboardEvent::PlatformKeyboardEvent):

2007-11-01  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Maciej Stachowiak.
        
        In preparation for making List a simple stack-allocated Vector:

        Removed all instances of List copying, assignment, and/or storage.
        
        Layout tests and JS tests pass.

        * bindings/js/kjs_window.cpp:
        (KJS::WindowFunc::callAsFunction): Stores a Vector of protected 
        JSValue*'s instead of a List now. Converts to List on the fly when 
        calling the timer function. This is slightly less efficient, but the 
        common case is 0-2 arguments, so it's no biggie.

        (HTML iBench shows no regression. PLT does not use JS timers.)
        
        (KJS::ScheduledAction::execute): Uses the more efficient and non-copying
        List::slice now.
        (KJS::ScheduledAction::ScheduledAction): ditto

        * bindings/objc/WebScriptObject.mm:
        (getListFromNSArray): Takes a List out parameter now, to avoid copying.

2007-11-01  Oliver Hunt  <oliver@apple.com>

        Reviewed by Geoff.

        Correct event behaviour on certain control keys

        Make sure we send the correct keyDown and keyUp events for the
        control keys CapsLock, Shift, Ctrl, Alt, and Meta/Command, and
        uses Windows key codes for the event keyCode.

        * WebCore.base.exp:
        * page/EventHandler.cpp:
        (WebCore::EventHandler::keyEvent):
        * platform/PlatformKeyboardEvent.h:
        * platform/gtk/KeyEventGtk.cpp:
        (WebCore::PlatformKeyboardEvent::PlatformKeyboardEvent):
        * platform/mac/KeyEventMac.mm:
        (WebCore::keyIdentifierForKeyEvent):
        (WebCore::WindowsKeyCodeForKeyEvent):
        (WebCore::isKeyUpEvent):
        (WebCore::textFromEvent):
        (WebCore::unmodifiedTextFromEvent):
        (WebCore::PlatformKeyboardEvent::PlatformKeyboardEvent):
        * platform/win/KeyEventWin.cpp:
        (WebCore::PlatformKeyboardEvent::PlatformKeyboardEvent):
        * platform/wx/KeyEventWin.cpp:
        (WebCore::PlatformKeyboardEvent::PlatformKeyboardEvent):

2007-11-01  Timothy Hatcher  <timothy@apple.com>

        Reviewed by Sam.

        * page/inspector/inspector.css: Use the white disclosure triangles
          when a parent DOM element is sepected.

2007-11-01  Justin Garcia  <justin.garcia@apple.com>

        Reviewed by Oliver Hunt.

        <rdar://problem/5195056> Huge plain text pastes are slow, time spent in ApplyStyleCommand::doApply

        * editing/ReplaceSelectionCommand.cpp:
        (WebCore::ReplaceSelectionCommand::doApply): No need to match style when pasting
        into a plaintext-only region, since when we build the fragment to insert from
        plain text, we don't put any style information on it, so it will automatically
        match style with no intervention.
        * editing/markup.cpp:
        (WebCore::createFragmentFromText): Place paragraphs into clones of the
        block being inserted into, instead of default paragraph elements,
        so that when inserted content will match the surrounding paragraph style.
        This was broken before, but I haven't added a layout test yet because
        there currently isn't a way to get only plain text onto the pasteboard
        in a layout test.

2007-11-01  Sam Weinig  <sam@webkit.org>

        Reviewed by Adam Roben. 

        Add a releaseRef method to COMPtr which matches the behavior
        of the method by the same name in PassRefPtr.  This is in
        preparation of adding autogenerated COM DOM bindings.

        * platform/win/COMPtr.h:
        (COMPtr::releaseRef):

2007-11-01  Kevin Ollivier  <kevino@theolliviers.com>

        wx impl. for DragController and EventHandler interfaces.

        Reviewed by Adam Roben.

        * page/wx: Added.
        * page/wx/DragControllerWx.cpp: Added.
        (WebCore::DragController::isCopyKeyDown):
        (WebCore::DragController::dragOperation):
        (WebCore::DragController::maxDragImageSize):
        * page/wx/EventHandlerWx.cpp: Added.
        (WebCore::EventHandler::passMousePressEventToSubframe):
        (WebCore::EventHandler::passMouseMoveEventToSubframe):
        (WebCore::EventHandler::passMouseReleaseEventToSubframe):
        (WebCore::EventHandler::passMousePressEventToScrollbar):
        (WebCore::EventHandler::passWidgetMouseDownEventToWidget):
        (WebCore::EventHandler::focusDocumentView):
        (WebCore::EventHandler::eventActivatedView):
        (WebCore::EventHandler::createDraggingClipboard):

2007-11-01  Kevin Ollivier  <kevino@theolliviers.com>

        Adding files for wx impl. of editing interfaces.

        Reviewed by Adam Roben.

        * editing/wx: Added.
        * editing/wx/EditorWx.cpp: Added.
        (WebCore::Editor::newGeneralClipboard):

2007-11-01  Sam Weinig  <sam@webkit.org>

        Reviewed by Adam Roben.

        Make implicit conversions from LPCSTRs and BSTRs to WebCore string
        types possible in preparation of adding autogenerated COM DOM bindings.

        * platform/AtomicString.cpp: 
        (WebCore::AtomicString::add):
        * platform/AtomicString.h:
        (WebCore::AtomicString::AtomicString):
        * platform/PlatformString.h:
        * platform/win/BString.cpp:
        (WebCore::BString::BString):
        * platform/win/BString.h:

2007-11-01  Brady Eidson  <beidson@apple.com>

        Reviewed by Anders

        Renamed a flag inside of SQLiteTransaction and added an accessor (for future work)

        * platform/sql/SQLiteTransaction.cpp:
        (WebCore::SQLiteTransaction::SQLiteTransaction):
        (WebCore::SQLiteTransaction::~SQLiteTransaction):
        (WebCore::SQLiteTransaction::begin):
        (WebCore::SQLiteTransaction::commit):
        (WebCore::SQLiteTransaction::rollback):
        * platform/sql/SQLiteTransaction.h:
        (WebCore::SQLiteTransaction::inProgress):

2007-11-01  Adam Roben  <aroben@apple.com>

        Remove all duplicate xcopy commands from WebCore's post-build step

        Also add the /d option to the copy of platform/sql.

        Rubberstamped by Sam.

        * WebCore.vcproj/WebCore.vcproj:

2007-11-01  Adele Peterson  <adele@apple.com>

        Reviewed by Maciej.

        Add support for the animation of the -webkit-border-raduis properties.

        * page/AnimationController.cpp:
        (WebCore::blendFunc): Added for IntSize.
        (WebCore::ImplicitAnimation::animate): Added cases for border radius properties.

2007-11-01  Alp Toker  <alp@atoker.com>

        Reviewed by Mitz Pettel.

        Fix an unbalanced save/restore.

        * platform/graphics/cg/ImageCG.cpp:
        (WebCore::BitmapImage::draw):

2007-11-01  David Hyatt  <hyatt@apple.com>

        Add support for the animation of the visibility property.

        Reviewed by oliver, aroben

        * page/AnimationController.cpp:
        (WebCore::blendFunc):
        (WebCore::ImplicitAnimation::animate):

2007-11-01  Kevin McCullough  <kmccullough@apple.com>

        Reviewed by Adam.

        - Made COMPtr be able to be used by certain other templates,
        specifically HashSet.

        * platform/win/COMPtr.h:
        (WTF::):

2007-11-01  Dan Bernstein  <mitz@apple.com>

        Reviewed by Dave Hyatt.

        - fix http://bugs.webkit.org/show_bug.cgi?id=15015
          <rdar://problem/5420308> Most of www.aol.com redraws unnecessarily when headline/photo section changes

        Test: fast/repaint/overflow-clip-subtree-layout.html

        This patch does not address the bigger issue of doing a full relayout
        of inline flows containing floats, but it addresses the problem on
        aol.com, where the changes that trigger layout are confined to an
        overflow area inside the float.

        * page/FrameView.cpp:
        (WebCore::FrameView::scheduleRelayoutOfSubtree): If the new and old
        layout roots are different but one descends from the other, make (or
        keep) the ancestor as the layout root.
        * rendering/RenderObject.cpp:
        (WebCore::objectIsRelayoutBoundary): Made boxes with overflow
        clipping and non-auto width and height relayout boundaries.

2007-11-01  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Mark Rowe.

        Fixed line endings that got confused in this file somehow.

        * platform/network/ResourceResponse.cpp:
        (WebCore::ResourceResponse::isAttachment):

2007-11-01  Peter Kasting  <zerodpx@gmail.com>

        Reviewed by Dave Hyatt.

        http://bugs.webkit.org/show_bug.cgi?id=15778
        Malformed GIFs should not result in memory corruption.

        * platform/image-decoders/gif/GIFImageDecoder.cpp:
        (WebCore::GIFImageDecoder::haveDecodedRow):
        * platform/image-decoders/gif/GIFImageReader.cpp:
        (GIFImageReader::output_row):
        (GIFImageReader::read):

2007-10-31  Adam Roben  <aroben@apple.com>

        Fix a crash when parsing a cubic-bezier function

        Reviewed by Hyatt.

        Test: fast/css/parse-timing-function-crash.html

        * WebCore.vcproj/WebCore.vcproj:
        * css/CSSParser.cpp:
        (WebCore::CSSParser::parseTimingFunctionValue): Don't walk off the end
        of the ValueList.

2007-10-31  David Hyatt  <hyatt@apple.com>

        Fix a merge error from when I applied my patch to ToT.  A couple of lines should be part of an if.

        * rendering/RenderStyle.cpp:
        (WebCore::RenderStyle::adjustTransitions):

2007-10-31  Anders Carlsson  <andersca@apple.com>

        Reviewed by Sam.

        Add new SQL callback interfaces and JS implementations of them.
        
        * DerivedSources.make:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSCustomSQLStatementCallback.cpp: Added.
        (WebCore::JSCustomSQLStatementCallback::JSCustomSQLStatementCallback):
        (WebCore::JSCustomSQLStatementCallback::handleEvent):
        * bindings/js/JSCustomSQLStatementCallback.h: Added.
        * bindings/js/JSCustomSQLStatementErrorCallback.cpp: Added.
        (WebCore::JSCustomSQLStatementErrorCallback::JSCustomSQLStatementErrorCallback):
        (WebCore::JSCustomSQLStatementErrorCallback::handleEvent):
        * bindings/js/JSCustomSQLStatementErrorCallback.h: Added.
        * bindings/js/JSCustomSQLTransactionCallback.cpp: Added.
        (WebCore::JSCustomSQLTransactionCallback::JSCustomSQLTransactionCallback):
        (WebCore::JSCustomSQLTransactionCallback::handleEvent):
        * bindings/js/JSCustomSQLTransactionCallback.h: Added.
        * bindings/js/JSCustomSQLTransactionErrorCallback.cpp: Added.
        (WebCore::JSCustomSQLTransactionErrorCallback::JSCustomSQLTransactionErrorCallback):
        (WebCore::JSCustomSQLTransactionErrorCallback::handleEvent):
        * bindings/js/JSCustomSQLTransactionErrorCallback.h: Added.
        * storage/JSCustomSQLStatementCallback.h: Added.
        * storage/JSCustomSQLStatementErrorCallback.h: Added.
        * storage/JSCustomSQLTransactionCallback.h: Added.
        * storage/JSCustomSQLTransactionErrorCallback.h: Added.
        * storage/SQLStatementCallback.h: Added.
        (WebCore::SQLStatementCallback::~SQLStatementCallback):
        * storage/SQLStatementCallback.idl: Added.
        * storage/SQLStatementErrorCallback.h: Added.
        (WebCore::SQLStatementErrorCallback::~SQLStatementErrorCallback):
        * storage/SQLStatementErrorCallback.idl: Added.
        * storage/SQLTransaction.h: Added.
        * storage/SQLTransaction.idl: Added.
        * storage/SQLTransactionCallback.h: Added.
        (WebCore::SQLTransactionCallback::~SQLTransactionCallback):
        * storage/SQLTransactionCallback.idl: Added.
        * storage/SQLTransactionErrorCallback.h: Added.
        (WebCore::SQLTransactionErrorCallback::~SQLTransactionErrorCallback):
        * storage/SQLTransactionErrorCallback.idl: Added.

2007-10-31  Justin Garcia  <justin.garcia@apple.com>

        Reviewed by Dave Harrison.

        <rdar://problem/5569741> Pasting content with a line break into a list can remove the list

        * editing/htmlediting.cpp:
        (WebCore::enclosingEmptyListItem): A single list item can contain multiple 
        paragraphs, so if the incoming VisiblePosition is in an empty paragraph in a 
        list item, that list item isn't necessarily empty.

2007-10-31  David Hyatt  <hyatt@apple.com>

        Disable style sharing for animating styles.

        Reviewed by mitzpettel

        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::canShareStyleWithElement):

2007-10-31  Dan Bernstein  <mitz@apple.com>

        Reviewed by Darin Adler.

        - fix intermediate length calculation

        * rendering/Length.h:
        (WebCore::Length::blend):

2007-10-31  Anders Carlsson  <andersca@apple.com>

        Reviewed by Darin.

        Add new SQLError implementation.
        
        * DerivedSources.make:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * storage/SQLError.h: Added.
        (WebCore::SQLError::SQLError):
        (WebCore::SQLError::code):
        (WebCore::SQLError::message):
        * storage/SQLError.idl: Added.

2007-10-31  David Hyatt  <hyatt@apple.com>

        Change the initial value of transition-property to all.  Change the initial value of
        transition-duration to 0.

        Reviewed by antti

        * rendering/RenderStyle.h:
        (WebCore::RenderStyle::initialTransitionDuration):
        (WebCore::RenderStyle::initialTransitionProperty):

2007-10-31  Alp Toker  <alp@atoker.com>

        Reviewed by Mark Rowe.

        The new Color must be marked valid.

        * platform/graphics/gtk/ColorGtk.cpp:

2007-10-31  Simon Hausmann  <hausmann@kde.org>

        Reviewed by Maciej;

        Build fix for non-Qt builds.

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

2007-10-31  Simon Hausmann  <hausmann@kde.org>

        Reviewed by Lars.

        Fix dependency path to header files of the public API of the Qt port.

        * WebCore.pro:

2007-10-31  Holger Freyther  <zecke@selfish.org>

        Reviewed by Simon.

        * QXmlStreamNamespaceDeclaration doesn't have the constructor we
        want to use for Qt4.3. Reenable the old code path which is likely
        to be dead as I have not checked if m_prefixToNamespaceMap is actually
        used.
        * Guard the entity resolver with the QT_VERSION as well.
        * Partially reverts 369506279abdaa863e15efed649ca19e062f2c30 and
        d2b54d0fc1b07a2480f4f7a1417abd7a636b0107 for Qt4.3.

        * dom/XMLTokenizer.cpp:
        (WebCore::XMLTokenizer::XMLTokenizer):
        * dom/XMLTokenizer.h:

2007-10-31  Holger Freyther  <zecke@selfish.org>

        Reviewed by Lars Knoll <lars@trolltech.com>.

        * QMimeData::removeData will be new in Qt4.4, don't use it for Qt4.3 
        * Provide a bad fallback implementation to filter the format list.

        * platform/qt/ClipboardQt.cpp:
        (WebCore::ClipboardQt::clearData):

2007-10-31  Lars Knoll  <lars@trolltech.com>

        Reviewed by Simon.

        add an entitiy resolver to QXmlStream.
        Fixes fast/parser/entities-in-attributes.xhtml.

        * dom/XMLTokenizer.cpp:
        (WebCore::EntityResolver::resolveUndeclaredEntity):
        (WebCore::XMLTokenizer::XMLTokenizer):
        (WebCore::XMLTokenizer::~XMLTokenizer):

2007-10-31  Lars Knoll  <lars@trolltech.com>

        Reviewed by Simon.

        Fixes in the XML tokenizer when using QXmlStream.
        
        Use new functionality of QXmlStream in Qt 4.4 to simplify
        the code (but keep the old code for now to still support Qt 4.3).
        
        Add proper support for namespace handling when parsing into
        a document fragment.

        * dom/XMLTokenizer.cpp:
        (WebCore::XMLTokenizer::XMLTokenizer):
        (WebCore::XMLTokenizer::write):
        (WebCore::XMLTokenizer::startElementNs):
        (WebCore::):
        * dom/XMLTokenizer.h:

2007-10-31  Lars Knoll  <lars@trolltech.com>

        Reviewed by Simon.

        add support for dragging images.

        * platform/DragImage.h:
        * platform/qt/ClipboardQt.cpp:
        (WebCore::ClipboardQt::clearData):
        (WebCore::ClipboardQt::setDragImage):
        (WebCore::ClipboardQt::setDragImageElement):
        (WebCore::ClipboardQt::createDragImage):
        (WebCore::getCachedImage):
        (WebCore::ClipboardQt::declareAndWriteDragImage):
        * platform/qt/ClipboardQt.h:

2007-10-31  Lars Knoll  <lars@trolltech.com>

        Reviewed by Simon.

        fix most of the issues I found with Clipboard and DnD.

        * editing/qt/EditorQt.cpp:
        * platform/qt/ClipboardQt.cpp:
        (WebCore::ClipboardQt::ClipboardQt):
        (WebCore::ClipboardQt::~ClipboardQt):
        (WebCore::ClipboardQt::clearData):
        (WebCore::ClipboardQt::clearAllData):
        (WebCore::ClipboardQt::getData):
        (WebCore::ClipboardQt::setData):
        (WebCore::ClipboardQt::types):
        (WebCore::ClipboardQt::setDragImage):
        (WebCore::ClipboardQt::setDragImageElement):
        (WebCore::ClipboardQt::declareAndWriteDragImage):
        (WebCore::ClipboardQt::writeURL):
        (WebCore::ClipboardQt::writeRange):
        (WebCore::ClipboardQt::hasData):
        * platform/qt/ClipboardQt.h:
        * platform/qt/DragDataQt.cpp:
        (WebCore::DragData::asURL):

2007-10-30  Mark Rowe  <mrowe@apple.com>

        Fix the Gtk and Qt builds by stubbing out PlatformKeyboardEvent::currentCapsLockState.

        * platform/gtk/KeyEventGtk.cpp:
        (WebCore::PlatformKeyboardEvent::currentCapsLockState):
        * platform/qt/PlatformKeyboardEventQt.cpp:
        (WebCore::PlatformKeyboardEvent::currentCapsLockState):

2007-10-31  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Anders.

        http://bugs.webkit.org/show_bug.cgi?id=15762
        XSLStylesheet loads subresources from a wrong URL

        Covered by corrected existing tests.

        * xml/XSLStyleSheet.cpp:
        (WebCore::XSLStyleSheet::parseString): Pass stylesheet URL, not
        the document one.

2007-10-31  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Darin.

        http://bugs.webkit.org/show_bug.cgi?id=10818
        String::append does 2 full copies instead of 1 (or zero!)

        No change in functionality, thus no test.

        * platform/String.cpp:
        (WebCore::String::append): Rewrote to copy once. Also removed an ancient
        FIXME that doesn't seem to make any sense. Note that append() behavior doesn't 
        match documented String behavior ("modifications to one instance will
        also modify all others"), but there are a lot of methods that don't.

2007-10-31  Adam Roben  <aroben@apple.com>

        Windows build fix

        * WebCore.vcproj/WebCore.vcproj: Add [JS]ProgressEvent.{cpp,h} files.

2007-10-30  Adam Roben  <aroben@apple.com>

        Windows build fixes

        I'm not completely sure why these const issues weren't caught by GCC,
        but MSVC was certainly not happy with them.

        * editing/IndentOutdentCommand.cpp:
        (WebCore::isIndentBlockquote):
        * editing/markup.cpp:
        (WebCore::styleFromMatchedRulesAndInlineDecl):

2007-10-30  David Hyatt  <hyatt@apple.com>

        transition-property was defaulting to all when it should default to none.  

        It was taking a string type.  I figured out how to make it take an ident instead, so you can write:

        transition-property: opacity

        instead of

        transition-property: "opacity"

        Transition layers also weren't properly repeating patterns the way they were supposed to.  I fixed that.

        Finally, I fixed a bug in the code to fix up transition layers where something was misplaced that should have been inside a null check.

        Reviewed by aroben

        * css/CSSHelper.h:
        * css/CSSParser.cpp:
        (WebCore::CSSParser::parseTransitionProperty):
        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::adjustRenderStyle):
        * page/AnimationController.cpp:
        (WebCore::ImplicitAnimation::animate):
        * rendering/RenderStyle.cpp:
        (WebCore::RenderStyle::adjustTransitions):
        * rendering/RenderStyle.h:
        (WebCore::RenderStyle::initialTransitionProperty):

2007-10-30  Antti Koivisto  <antti@apple.com>

        Reviewed by Geoff.

        Leak fix

        * platform/graphics/mac/MoviePrivateQTKit.mm:
        (WebCore::MoviePrivate::getSupportedTypes):

2007-10-30  Dan Bernstein  <mitz@apple.com>

        Reviewed by Stephanie Lewis.

        - fix <rdar://problem/5547237> REGRESSION (304-ToT): Repro font-related crash in fontdatawin.cpp Line 93 (many sites)

        * platform/win/FontDataWin.cpp:
        (WebCore::FontData::platformInit): Handle the case where the font has no
        glyphs on page zero.

2007-10-30  David Hyatt  <hyatt@apple.com>

        Make sure CSS transforms can be animated using the CSS transition property.

        Reviewed by Dan and Antti

        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::applyProperty):
        * page/AnimationController.cpp:
        (WebCore::blendFunc):
        (WebCore::ImplicitAnimation::animate):
        * rendering/Length.h:
        (WebCore::Length::blend):
        * rendering/RenderStyle.cpp:
        (WebCore::StyleTransformData::operator==):
        (WebCore::TransformOperations::operator==):
        (WebCore::blendLengths):
        (WebCore::ScaleTransformOperation::blend):
        (WebCore::RotateTransformOperation::blend):
        (WebCore::SkewTransformOperation::blend):
        (WebCore::TranslateTransformOperation::blend):
        (WebCore::MatrixTransformOperation::blend):
        * rendering/RenderStyle.h:
        (WebCore::TransformOperations::operator!=):
        (WebCore::TransformOperations::isEmpty):
        (WebCore::TransformOperations::size):
        (WebCore::TransformOperations::operator[]):
        (WebCore::TransformOperations::append):
        (WebCore::RenderStyle::transform):
        (WebCore::RenderStyle::setTransform):
        (WebCore::RenderStyle::initialTransform):

2007-10-30  Antti Koivisto  <antti@apple.com>

        Another Qt/GTK build fix.

        * bindings/js/JSHTMLElementWrapperFactory.cpp:

2007-10-30  Antti Koivisto  <antti@apple.com>

        Attempt to fix Qt/GTK build.

        * WebCore.pro:

2007-10-30  Justin Garcia  <justin.garcia@apple.com>

        Reviewed by Darin Adler.

        <rdar://problem/5549929> CrashTracer: [USER] 35 crashes at WebCore::CharacterData::insertData
        
        We were trying to insert a tab into a br, after the br incorrectly ended up inside
        a tab span.
        
        * editing/DeleteButtonController.cpp: 
        (WebCore::isDeletableElement): Changed to take in a const Node* instead of a Node*.
        * editing/DeleteSelectionCommand.cpp:
        (WebCore::isTableRow): Ditto.
        * editing/IndentOutdentCommand.cpp:
        (WebCore::isIndentBlockquote): Ditto.
        (WebCore::isListOrIndentBlockquote): Ditto.
        * editing/InsertLineBreakCommand.cpp:
        (WebCore::InsertLineBreakCommand::shouldUseBreakElement): Added, moved code from
        doApply here.
        (WebCore::InsertLineBreakCommand::doApply): 
        Don't upstream() the insertion position.  upstream()ing it will only have an effect
        when the insertion position is the first in its paragraph (since we canonicalize
        VisiblePositions to the upstream() candidate).  In this start of paragraph case, 
        upstream() can move outside inline elements like tab spans or elements that might
        have a different whitespace mode (added two test cases to cover these).
        Moved code to decide whether to insert a br or a '\n' to its own method.
        Removed special case code for inserting at a position inside a tab span.  We instead
        adjust the insertion position before insertion if it is inside a tab span and
        handle insertion in the appropriate if-block.  This fixes a bug where we would 
        only insert one line break when two were needed (added a testcase).
        Removed special case code for inserting before and after tables and horizontal
        rules.  We handle these insertions in the appropriate if-block.
        * editing/InsertLineBreakCommand.h:
        * editing/ReplaceSelectionCommand.cpp:
        (WebCore::isMailPasteAsQuotationNode): Change to take in a const Node*.
        * editing/htmlediting.cpp:
        (WebCore::isContentEditable): Ditto.
        (WebCore::isBlock): Ditto.
        (WebCore::enclosingNodeOfType): Changed to take a function pointer to a function
        that takes in a const Node*.
        (WebCore::isTabSpanTextNode): Check to see that the node actually a text node,
        and not, say, a br.
        * editing/htmlediting.h:
        * editing/markup.cpp:
        (WebCore::styleFromMatchedRulesAndInlineDecl): Changed to take in a const Node*.
        (WebCore::elementHasTextDecorationProperty): Ditto.

2007-10-30  Antti Koivisto  <antti@apple.com>

        Add missing files.

        * html/VoidCallback.cpp: Added.
        (VoidCallback::VoidCallback):
        (VoidCallback::~VoidCallback):
        (VoidCallback::handleEvent):
        (VoidCallback::execute):
        (VoidCallback::operator==):
        (WebCore::toVoidCallback):
        * html/VoidCallback.h: Added.
        * html/VoidCallback.idl: Added.

2007-10-30  David Kilzer  <ddkilzer@webkit.org>

        Generated files missing from WebCore's Xcode project file
        <http://bugs.webkit.org/show_bug.cgi?id=15406>

        Reviewed by Darin.

        Added the following files to the Xcode project file (note that
        JSHTMLInputElementBaseTable.cpp is used as a header file):

        - DOMCSSStyleSheetPrivate.h
        - DOMEventPrivate.h
        - DOMHTMLCollectionPrivate.h
        - DOMHTMLEmbedElementPrivate.h
        - DOMHTMLIFrameElementPrivate.h
        - DOMHTMLObjectElementPrivate.h
        - DOMHTMLSelectElementPrivate.h
        - DOMTextEventInternal.h
        - JSHTMLInputElementBaseTable.cpp

        * DerivedSources.make: Removed DOMSVGException.h and JSSVGAnimatedPoints.h
        since their generated code was not used.
        * WebCore.xcodeproj/project.pbxproj: Added missing header files.

2007-10-29  Antti Koivisto  <antti@apple.com>

        Rubber stamped by Adele.

        Initial media (<video> and <audio>) support from feature branch and 
        QTKit based platform implementation.
        
        This will need to be updated to match current draft specification.

        * Configurations/WebCore.xcconfig:
        * DerivedSources.make:
        * WebCore.base.exp:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSEventCustom.cpp:
        (WebCore::toJS):
        * bindings/js/JSHTMLAudioElementConstructor.cpp: Added.
        (WebCore::JSHTMLAudioElementConstructor::JSHTMLAudioElementConstructor):
        (WebCore::JSHTMLAudioElementConstructor::implementsConstruct):
        (WebCore::JSHTMLAudioElementConstructor::construct):
        * bindings/js/JSHTMLAudioElementConstructor.h: Added.
        * bindings/js/JSHTMLElementWrapperFactory.cpp:
        (WebCore::createJSHTMLWrapper):
        * bindings/js/kjs_window.cpp:
        (KJS::Window::getValueProperty):
        * bindings/js/kjs_window.h:
        (KJS::Window::):
        * bindings/scripts/CodeGeneratorJS.pm:
        * dom/Document.cpp:
        (WebCore::Document::createEvent):
        (WebCore::Document::willSaveToCache):
        (WebCore::Document::didRestoreFromCache):
        (WebCore::Document::registerForCacheCallbacks):
        (WebCore::Document::unregisterForCacheCallbacks):
        * dom/Document.h:
        * dom/Element.cpp:
        (WebCore::Element::setBooleanAttribute):
        * dom/Element.h:
        (WebCore::Element::willSaveToCache):
        * dom/Event.cpp:
        (WebCore::Event::isProgressEvent):
        * dom/Event.h:
        * dom/EventNames.h:
        * dom/EventTargetNode.cpp:
        (WebCore::EventTargetNode::dispatchProgressEvent):
        * dom/EventTargetNode.h:
        * dom/ProgressEvent.cpp: Added.
        (WebCore::ProgressEvent::ProgressEvent):
        (WebCore::ProgressEvent::initProgressEvent):
        (WebCore::ProgressEvent::initProgressEventNS):
        * dom/ProgressEvent.h: Added.
        (WebCore::ProgressEvent::lengthComputable):
        (WebCore::ProgressEvent::loaded):
        (WebCore::ProgressEvent::total):
        (WebCore::ProgressEvent::isProgressEvent):
        * dom/ProgressEvent.idl: Added.
        * history/CachedPage.cpp:
        (WebCore::CachedPage::CachedPage):
        * html/HTMLAttributeNames.in:
        * html/HTMLAudioElement.cpp: Added.
        (WebCore::HTMLAudioElement::HTMLAudioElement):
        * html/HTMLAudioElement.h: Added.
        (WebCore::HTMLAudioElement::tagPriority):
        * html/HTMLAudioElement.idl: Added.
        * html/HTMLElement.cpp:
        (WebCore::inlineTagList):
        * html/HTMLElementFactory.cpp:
        (WebCore::audioConstructor):
        (WebCore::videoConstructor):
        (WebCore::sourceConstructor):
        (WebCore::createFunctionMap):
        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::~HTMLInputElement):
        (WebCore::HTMLInputElement::setInputType):
        (WebCore::HTMLInputElement::willMoveToNewOwnerDocument):
        (WebCore::HTMLInputElement::didMoveToNewOwnerDocument):
        * html/HTMLMediaElement.cpp: Added.
        (WebCore::HTMLMediaElement::HTMLMediaElement):
        (WebCore::HTMLMediaElement::~HTMLMediaElement):
        (WebCore::HTMLMediaElement::checkDTD):
        (WebCore::HTMLMediaElement::rendererIsNeeded):
        (WebCore::HTMLMediaElement::createRenderer):
        (WebCore::HTMLMediaElement::insertedIntoDocument):
        (WebCore::HTMLMediaElement::removedFromDocument):
        (WebCore::HTMLMediaElement::scheduleLoad):
        (WebCore::HTMLMediaElement::initAndDispatchProgressEvent):
        (WebCore::HTMLMediaElement::dispatchEventAsync):
        (WebCore::HTMLMediaElement::loadTimerFired):
        (WebCore::HTMLMediaElement::asyncEventTimerFired):
        (WebCore::serializeTimeOffset):
        (WebCore::parseTimeOffset):
        (WebCore::HTMLMediaElement::getTimeOffsetAttribute):
        (WebCore::HTMLMediaElement::setTimeOffsetAttribute):
        (WebCore::HTMLMediaElement::error):
        (WebCore::HTMLMediaElement::src):
        (WebCore::HTMLMediaElement::HTMLMediaElement::setSrc):
        (WebCore::HTMLMediaElement::currentSrc):
        (WebCore::HTMLMediaElement::networkState):
        (WebCore::HTMLMediaElement::bufferingRate):
        (WebCore::HTMLMediaElement::load):
        (WebCore::HTMLMediaElement::movieNetworkStateChanged):
        (WebCore::HTMLMediaElement::movieReadyStateChanged):
        (WebCore::HTMLMediaElement::setReadyState):
        (WebCore::HTMLMediaElement::progressEventTimerFired):
        (WebCore::HTMLMediaElement::seek):
        (WebCore::HTMLMediaElement::readyState):
        (WebCore::HTMLMediaElement::seeking):
        (WebCore::HTMLMediaElement::currentTime):
        (WebCore::HTMLMediaElement::setCurrentTime):
        (WebCore::HTMLMediaElement::duration):
        (WebCore::HTMLMediaElement::paused):
        (WebCore::HTMLMediaElement::defaultPlaybackRate):
        (WebCore::HTMLMediaElement::setDefaultPlaybackRate):
        (WebCore::HTMLMediaElement::playbackRate):
        (WebCore::HTMLMediaElement::setPlaybackRate):
        (WebCore::HTMLMediaElement::ended):
        (WebCore::HTMLMediaElement::autoplay):
        (WebCore::HTMLMediaElement::setAutoplay):
        (WebCore::HTMLMediaElement::play):
        (WebCore::HTMLMediaElement::pause):
        (WebCore::HTMLMediaElement::loopCount):
        (WebCore::HTMLMediaElement::setLoopCount):
        (WebCore::HTMLMediaElement::start):
        (WebCore::HTMLMediaElement::setStart):
        (WebCore::HTMLMediaElement::end):
        (WebCore::HTMLMediaElement::setEnd):
        (WebCore::HTMLMediaElement::loopStart):
        (WebCore::HTMLMediaElement::setLoopStart):
        (WebCore::HTMLMediaElement::loopEnd):
        (WebCore::HTMLMediaElement::setLoopEnd):
        (WebCore::HTMLMediaElement::currentLoop):
        (WebCore::HTMLMediaElement::setCurrentLoop):
        (WebCore::HTMLMediaElement::controls):
        (WebCore::HTMLMediaElement::setControls):
        (WebCore::HTMLMediaElement::volume):
        (WebCore::HTMLMediaElement::setVolume):
        (WebCore::HTMLMediaElement::muted):
        (WebCore::HTMLMediaElement::setMuted):
        (WebCore::HTMLMediaElement::pickMedia):
        (WebCore::HTMLMediaElement::checkIfSeekNeeded):
        (WebCore::HTMLMediaElement::movieVolumeChanged):
        (WebCore::HTMLMediaElement::movieDidEnd):
        (WebCore::HTMLMediaElement::movieCuePointReached):
        (WebCore::HTMLMediaElement::addCuePoint):
        (WebCore::HTMLMediaElement::removeCuePoint):
        (WebCore::HTMLMediaElement::buffered):
        (WebCore::HTMLMediaElement::played):
        (WebCore::HTMLMediaElement::seekable):
        (WebCore::HTMLMediaElement::effectiveStart):
        (WebCore::HTMLMediaElement::effectiveEnd):
        (WebCore::HTMLMediaElement::effectiveLoopStart):
        (WebCore::HTMLMediaElement::effectiveLoopEnd):
        (WebCore::HTMLMediaElement::activelyPlaying):
        (WebCore::HTMLMediaElement::endedPlayback):
        (WebCore::HTMLMediaElement::willSaveToCache):
        (WebCore::HTMLMediaElement::didRestoreFromCache):
        * html/HTMLMediaElement.h: Added.
        (WebCore::HTMLMediaElement::movie):
        (WebCore::HTMLMediaElement::isVideo):
        (WebCore::HTMLMediaElement::):
        (WebCore::HTMLMediaElement::CallbackEntry::CallbackEntry):
        * html/HTMLMediaElement.idl: Added.
        * html/HTMLSourceElement.cpp: Added.
        (WebCore::HTMLSourceElement::HTMLSourceElement):
        (WebCore::HTMLSourceElement::~HTMLSourceElement):
        (WebCore::HTMLSourceElement::insertedIntoDocument):
        (WebCore::HTMLSourceElement::src):
        (WebCore::HTMLSourceElement::setSrc):
        (WebCore::HTMLSourceElement::media):
        (WebCore::HTMLSourceElement::setMedia):
        (WebCore::HTMLSourceElement::type):
        (WebCore::HTMLSourceElement::setType):
        * html/HTMLSourceElement.h: Added.
        (WebCore::HTMLSourceElement::endTagRequirement):
        (WebCore::HTMLSourceElement::tagPriority):
        * html/HTMLSourceElement.idl: Added.
        * html/HTMLTagNames.in:
        * html/HTMLVideoElement.cpp: Added.
        (WebCore::HTMLVideoElement::HTMLVideoElement):
        (WebCore::HTMLVideoElement::videoWidth):
        (WebCore::HTMLVideoElement::videoHeight):
        * html/HTMLVideoElement.h: Added.
        (WebCore::HTMLVideoElement::tagPriority):
        (WebCore::HTMLVideoElement::isVideo):
        * html/HTMLVideoElement.idl: Added.
        * html/MediaError.h: Added.
        (WebCore::MediaError::):
        (WebCore::MediaError::MediaError):
        (WebCore::MediaError::code):
        * html/MediaError.idl: Added.
        * html/TimeRanges.cpp: Added.
        (TimeRanges::TimeRanges):
        (TimeRanges::start):
        (TimeRanges::end):
        (TimeRanges::add):
        (TimeRanges::contain):
        * html/TimeRanges.h: Added.
        (WebCore::TimeRanges::TimeRanges):
        (WebCore::TimeRanges::length):
        (WebCore::TimeRanges::Range::Range):
        * html/TimeRanges.idl: Added.
        * page/DOMWindow.idl:
        * platform/MIMETypeRegistry.cpp:
        (WebCore::initialiseSupportedMovieMIMETypes):
        (WebCore::initialiseMIMETypeRegistry):
        (WebCore::MIMETypeRegistry::isSupportedMovieMIMEType):
        (WebCore::MIMETypeRegistry::getSupportedMovieMIMETypes):
        * platform/MIMETypeRegistry.h:
        * platform/graphics/Movie.cpp: Added.
        (WebCore::Movie::Movie):
        (WebCore::Movie::~Movie):
        (WebCore::Movie::load):
        (WebCore::Movie::cancelLoad):
        (WebCore::Movie::play):
        (WebCore::Movie::pause):
        (WebCore::Movie::duration):
        (WebCore::Movie::currentTime):
        (WebCore::Movie::seek):
        (WebCore::Movie::paused):
        (WebCore::Movie::seeking):
        (WebCore::Movie::naturalSize):
        (WebCore::Movie::hasVideo):
        (WebCore::Movie::networkState):
        (WebCore::Movie::readyState):
        (WebCore::Movie::volume):
        (WebCore::Movie::setVolume):
        (WebCore::Movie::rate):
        (WebCore::Movie::setRate):
        (WebCore::Movie::muted):
        (WebCore::Movie::setMuted):
        (WebCore::Movie::dataRate):
        (WebCore::Movie::setEndTime):
        (WebCore::Movie::addCuePoint):
        (WebCore::Movie::removeCuePoint):
        (WebCore::Movie::clearCuePoints):
        (WebCore::Movie::maxTimeBuffered):
        (WebCore::Movie::maxTimeSeekable):
        (WebCore::Movie::bytesLoaded):
        (WebCore::Movie::totalBytesKnown):
        (WebCore::Movie::totalBytes):
        (WebCore::Movie::setRect):
        (WebCore::Movie::visible):
        (WebCore::Movie::setVisible):
        (WebCore::Movie::paint):
        (WebCore::Movie::getSupportedTypes):
        (WebCore::Movie::networkStateChanged):
        (WebCore::Movie::readyStateChanged):
        (WebCore::Movie::volumeChanged):
        (WebCore::Movie::didEnd):
        (WebCore::Movie::cuePointReached):
        * platform/graphics/Movie.h: Added.
        (WebCore::MovieClient::~MovieClient):
        (WebCore::MovieClient::movieNetworkStateChanged):
        (WebCore::MovieClient::movieReadyStateChanged):
        (WebCore::MovieClient::movieVolumeChanged):
        (WebCore::MovieClient::movieDidEnd):
        (WebCore::MovieClient::movieCuePointReached):
        (WebCore::Movie::parentWidget):
        (WebCore::Movie::setParentWidget):
        (WebCore::Movie::rect):
        (WebCore::Movie::):
        * platform/graphics/mac/MoviePrivateQTKit.h: Added.
        * platform/graphics/mac/MoviePrivateQTKit.mm: Added.
        (WebCore::MoviePrivate::MoviePrivate):
        (WebCore::MoviePrivate::~MoviePrivate):
        (WebCore::MoviePrivate::createQTMovie):
        (WebCore::MoviePrivate::createQTMovieView):
        (WebCore::MoviePrivate::createQTTime):
        (WebCore::MoviePrivate::load):
        (WebCore::MoviePrivate::play):
        (WebCore::MoviePrivate::pause):
        (WebCore::MoviePrivate::duration):
        (WebCore::MoviePrivate::currentTime):
        (WebCore::MoviePrivate::seek):
        (WebCore::MoviePrivate::setEndTime):
        (WebCore::MoviePrivate::addCuePoint):
        (WebCore::MoviePrivate::removeCuePoint):
        (WebCore::MoviePrivate::clearCuePoints):
        (WebCore::MoviePrivate::startCuePointTimerIfNeeded):
        (WebCore::MoviePrivate::cancelSeek):
        (WebCore::MoviePrivate::seekTimerFired):
        (WebCore::MoviePrivate::cuePointTimerFired):
        (WebCore::MoviePrivate::paused):
        (WebCore::MoviePrivate::seeking):
        (WebCore::MoviePrivate::naturalSize):
        (WebCore::MoviePrivate::hasVideo):
        (WebCore::MoviePrivate::setVolume):
        (WebCore::MoviePrivate::setMuted):
        (WebCore::MoviePrivate::setRate):
        (WebCore::MoviePrivate::dataRate):
        (WebCore::MoviePrivate::networkState):
        (WebCore::MoviePrivate::readyState):
        (WebCore::MoviePrivate::maxTimeBuffered):
        (WebCore::MoviePrivate::maxTimeSeekable):
        (WebCore::MoviePrivate::maxTimeLoaded):
        (WebCore::MoviePrivate::bytesLoaded):
        (WebCore::MoviePrivate::totalBytesKnown):
        (WebCore::MoviePrivate::totalBytes):
        (WebCore::MoviePrivate::cancelLoad):
        (WebCore::MoviePrivate::updateStates):
        (WebCore::MoviePrivate::loadStateChanged):
        (WebCore::MoviePrivate::rateChanged):
        (WebCore::MoviePrivate::sizeChanged):
        (WebCore::MoviePrivate::timeChanged):
        (WebCore::MoviePrivate::volumeChanged):
        (WebCore::MoviePrivate::didEnd):
        (WebCore::MoviePrivate::setRect):
        (WebCore::MoviePrivate::setVisible):
        (WebCore::MoviePrivate::paint):
        (WebCore::MoviePrivate::getSupportedTypes):
        (-[WebCoreMovieObserver loadStateChanged:]):
        (-[WebCoreMovieObserver rateChanged:]):
        (-[WebCoreMovieObserver sizeChanged:]):
        (-[WebCoreMovieObserver timeChanged:]):
        (-[WebCoreMovieObserver volumeChanged:]):
        (-[WebCoreMovieObserver didEnd:]):
        (-[WebCoreMovieObserver setCallback:WebCore::]):
        * platform/mac/WebCoreSystemInterface.h:
        * platform/mac/WebCoreSystemInterface.mm:
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::collectLayers):
        * rendering/RenderVideo.cpp: Added.
        (WebCore::RenderVideo::RenderVideo):
        (WebCore::RenderVideo::~RenderVideo):
        (WebCore::RenderVideo::movie):
        (WebCore::RenderVideo::videoSizeChanged):
        (WebCore::RenderVideo::paint):
        (WebCore::RenderVideo::layout):
        (WebCore::RenderVideo::updateFromElement):
        (WebCore::RenderVideo::updateMovie):
        (WebCore::RenderVideo::isWidthSpecified):
        (WebCore::RenderVideo::isHeightSpecified):
        (WebCore::RenderVideo::calcReplacedWidth):
        (WebCore::RenderVideo::calcReplacedHeight):
        (WebCore::RenderVideo::calcAspectRatioWidth):
        (WebCore::RenderVideo::calcAspectRatioHeight):
        (WebCore::RenderVideo::calcPrefWidths):
        * rendering/RenderVideo.h: Added.
        (WebCore::RenderVideo::renderName):

2007-10-30  Sam Weinig  <sam@webkit.org>

        Reviewed by Adam Roben.

        Add Interface and Class UUIDs to the IDLs in preparation of adding
        autogeneration of the COM DOM bindings.

        * bindings/scripts/IDLParser.pm: Relax parsing rules to allow newlines as whitespace.
        * css/CSSCharsetRule.idl:
        * css/CSSFontFaceRule.idl:
        * css/CSSImportRule.idl:
        * css/CSSMediaRule.idl:
        * css/CSSPageRule.idl:
        * css/CSSPrimitiveValue.idl:
        * css/CSSRule.idl:
        * css/CSSRuleList.idl:
        * css/CSSStyleDeclaration.idl:
        * css/CSSStyleRule.idl:
        * css/CSSStyleSheet.idl:
        * css/CSSUnknownRule.idl:
        * css/CSSValue.idl:
        * css/CSSValueList.idl:
        * css/Counter.idl:
        * css/MediaList.idl:
        * css/RGBColor.idl:
        * css/Rect.idl:
        * css/StyleSheet.idl:
        * css/StyleSheetList.idl:
        * dom/Attr.idl:
        * dom/CDATASection.idl:
        * dom/CharacterData.idl:
        * dom/Comment.idl:
        * dom/DOMImplementation.idl:
        * dom/Document.idl:
        * dom/DocumentFragment.idl:
        * dom/DocumentType.idl:
        * dom/Element.idl:
        * dom/Entity.idl:
        * dom/EntityReference.idl:
        * dom/Event.idl:
        * dom/EventListener.idl:
        * dom/EventTarget.idl:
        * dom/NamedNodeMap.idl:
        * dom/Node.idl:
        * dom/NodeList.idl:
        * dom/Notation.idl:
        * dom/ProcessingInstruction.idl:
        * dom/Text.idl:
        * html/CanvasGradient.idl:
        * html/CanvasPattern.idl:
        * html/CanvasRenderingContext2D.idl:
        * html/HTMLAnchorElement.idl:
        * html/HTMLAppletElement.idl:
        * html/HTMLAreaElement.idl:
        * html/HTMLBRElement.idl:
        * html/HTMLBaseElement.idl:
        * html/HTMLBaseFontElement.idl:
        * html/HTMLBlockquoteElement.idl:
        * html/HTMLBodyElement.idl:
        * html/HTMLButtonElement.idl:
        * html/HTMLCanvasElement.idl:
        * html/HTMLCollection.idl:
        * html/HTMLDListElement.idl:
        * html/HTMLDirectoryElement.idl:
        * html/HTMLDivElement.idl:
        * html/HTMLDocument.idl:
        * html/HTMLElement.idl:
        * html/HTMLEmbedElement.idl:
        * html/HTMLFieldSetElement.idl:
        * html/HTMLFontElement.idl:
        * html/HTMLFormElement.idl:
        * html/HTMLFrameElement.idl:
        * html/HTMLFrameSetElement.idl:
        * html/HTMLHRElement.idl:
        * html/HTMLHeadElement.idl:
        * html/HTMLHeadingElement.idl:
        * html/HTMLHtmlElement.idl:
        * html/HTMLIFrameElement.idl:
        * html/HTMLImageElement.idl:
        * html/HTMLInputElement.idl:
        * html/HTMLIsIndexElement.idl:
        * html/HTMLLIElement.idl:
        * html/HTMLLabelElement.idl:
        * html/HTMLLegendElement.idl:
        * html/HTMLLinkElement.idl:
        * html/HTMLMapElement.idl:
        * html/HTMLMarqueeElement.idl:
        * html/HTMLMenuElement.idl:
        * html/HTMLMetaElement.idl:
        * html/HTMLModElement.idl:
        * html/HTMLOListElement.idl:
        * html/HTMLObjectElement.idl:
        * html/HTMLOptGroupElement.idl:
        * html/HTMLOptionElement.idl:
        * html/HTMLOptionsCollection.idl:
        * html/HTMLParagraphElement.idl:
        * html/HTMLParamElement.idl:
        * html/HTMLPreElement.idl:
        * html/HTMLQuoteElement.idl:
        * html/HTMLScriptElement.idl:
        * html/HTMLSelectElement.idl:
        * html/HTMLStyleElement.idl:
        * html/HTMLTableCaptionElement.idl:
        * html/HTMLTableCellElement.idl:
        * html/HTMLTableColElement.idl:
        * html/HTMLTableElement.idl:
        * html/HTMLTableRowElement.idl:
        * html/HTMLTableSectionElement.idl:
        * html/HTMLTextAreaElement.idl:
        * html/HTMLTitleElement.idl:
        * html/HTMLUListElement.idl:

2007-10-30  Adele Peterson  <adele@apple.com>

        RS by Darin.

        * page/AnimationController.cpp: (WebCore::blendFunc): Use lround instead of round.

2007-10-29  Timothy Hatcher  <timothy@apple.com>

        Reviewed by John Sullivan.

        - Allow showing and closing the inspector programatically.
        - Add showConsole() and showTimeline() methods. 

        * WebCore.base.exp: Add exports for WebKit.
        * page/InspectorController.cpp:
        (WebCore::callSimpleFunction): Renamed from callClearFunction().
        (WebCore::unloading): Renamed to close().
        (WebCore::InspectorController::InspectorController):
        (WebCore::InspectorController::inspect): Moved showing code to show().
        (WebCore::InspectorController::setWindowVisible): Show the timeline or console if needed.
        (WebCore::InspectorController::show): Code factored out of inspect().
        (WebCore::InspectorController::showConsole): Call show() and the JS showConsole().
        (WebCore::InspectorController::showTimeline): Call show() and the JS showTimeline().
        (WebCore::InspectorController::close):
        (WebCore::InspectorController::clearScriptResources): Call the new callSimpleFunction.
        (WebCore::InspectorController::clearDatabaseScriptResources): Ditto.
        (WebCore::InspectorController::clearScriptConsoleMessages): Ditto.
        (WebCore::InspectorController::clearNetworkTimeline): Ditto.
        * page/InspectorController.h: Add and rename methods.
        * page/inspector/inspector.js: Add showConsole() and showTimeline().

2007-10-30  Adele Peterson  <adele@apple.com>

        Reviewed by Sam.

        Build fix.

        * page/AnimationController.cpp: (WebCore::blendFunc):

2007-10-30  Adele Peterson  <adele@apple.com>

        Reviewed by Darin.

        WebCore part of fix for http://bugs.webkit.org/show_bug.cgi?id=10577
        <rdar://problem/5103625> REGRESSION: Caps lock icon should show in password fields

        Test: manual-tests/password-caps-lock.html

        * WebCore.base.exp: Added symbol for capsLockStateMayHaveChanged.

        * page/Frame.cpp: (WebCore::Frame::setIsActive): Calls capsLockStateMayHaveChanged.
        * page/EventHandler.cpp: (WebCore::EventHandler::capsLockStateMayHaveChanged): Added. Tells the focused node's renderer that the capsLockStateMayHaveChanged.
        * page/EventHandler.h:

        * platform/PlatformKeyboardEvent.h:
        * platform/mac/KeyEventMac.mm: (WebCore::PlatformKeyboardEvent::currentCapsLockState): Added.
        * platform/win/KeyEventWin.cpp: (WebCore::PlatformKeyboardEvent::currentCapsLockState): Added.

        * rendering/RenderTextControl.cpp:
        (WebCore::RenderTextControl::RenderTextControl):
        (WebCore::RenderTextControl::paint): Added.  If m_shouldDrawCapsLockIndicator is true, paints the caps lock indicator after the background.
        (WebCore::RenderTextControl::forwardEvent): When the control gets and loses focus, update the caps lock state.
        (WebCore::RenderTextControl::capsLockStateMayHaveChanged): Added. Updates m_shouldDrawCapsLockIndicator, which is true if the field is a password field, 
         and the frame is active, and the element is focused, and the caps lock is on.  Causes a repaint when m_shouldDrawCapsLockIndicator changes state.
        * rendering/RenderTextControl.h: Added m_shouldDrawCapsLockIndicator.
        * rendering/RenderObject.h: (WebCore::RenderObject::capsLockStateMayHaveChanged): Added.

        * rendering/RenderTheme.h: (WebCore::RenderTheme::paintCapsLockIndicator): Added.
        * rendering/RenderThemeMac.h:
        * rendering/RenderThemeMac.mm: (WebCore::RenderThemeMac::paintCapsLockIndicator): Added.  Calls wkDrawCapsLockIndicator.
        * rendering/RenderThemeSafari.cpp: (WebCore::RenderThemeSafari::paintCapsLockIndicator): Added.  Calls paintThemePart for the CapsLockPart.
        * rendering/RenderThemeSafari.h:

2007-10-30  David Hyatt  <hyatt@apple.com>

        Land support for implicit animation in CSS.

        Reviewed by mitz, darin

        * css/CSSParser.cpp:
        (WebCore::CSSParser::parseTimingFunctionValue):
        (WebCore::CSSParser::parseTransitionTimingFunction):
        (WebCore::CSSParser::parseTransitionProperty):
        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::mapTransitionDuration):
        (WebCore::CSSStyleSelector::mapTransitionRepeatCount):
        (WebCore::CSSStyleSelector::mapTransitionTimingFunction):
        (WebCore::CSSStyleSelector::mapTransitionProperty):
        * css/CSSTimingFunctionValue.h:
        (WebCore::CSSTimingFunctionValue::CSSTimingFunctionValue):
        (WebCore::CSSTimingFunctionValue::x1):
        (WebCore::CSSTimingFunctionValue::y1):
        (WebCore::CSSTimingFunctionValue::x2):
        (WebCore::CSSTimingFunctionValue::y2):
        * dom/Element.cpp:
        (WebCore::Element::styleForRenderer):
        (WebCore::Element::createRenderer):
        * dom/Node.cpp:
        (WebCore::Node::createRendererIfNeeded):
        (WebCore::Node::setRenderStyle):
        * page/AnimationController.cpp:
        (WebCore::CurveData::CurveData):
        (WebCore::CurveData::sampleCurveX):
        (WebCore::CurveData::sampleCurveY):
        (WebCore::CurveData::sampleCurveDerivativeX):
        (WebCore::CurveData::solveCurveX):
        (WebCore::solveEpsilon):
        (WebCore::solveCubicBezierFunction):
        (WebCore::ImplicitAnimation::finished):
        (WebCore::CompositeImplicitAnimation::~CompositeImplicitAnimation):
        (WebCore::CompositeImplicitAnimation::hasAnimationForProperty):
        (WebCore::ImplicitAnimation::ImplicitAnimation):
        (WebCore::ImplicitAnimation::~ImplicitAnimation):
        (WebCore::ImplicitAnimation::reset):
        (WebCore::ImplicitAnimation::progress):
        (WebCore::blendFunc):
        (WebCore::ImplicitAnimation::animate):
        (WebCore::CompositeImplicitAnimation::animate):
        (WebCore::CompositeImplicitAnimation::animating):
        (WebCore::CompositeImplicitAnimation::reset):
        (WebCore::AnimationControllerPrivate::hasImplicitAnimations):
        (WebCore::AnimationControllerPrivate::AnimationControllerPrivate):
        (WebCore::AnimationControllerPrivate::~AnimationControllerPrivate):
        (WebCore::AnimationControllerPrivate::get):
        (WebCore::AnimationControllerPrivate::clear):
        (WebCore::AnimationControllerPrivate::updateTimer):
        (WebCore::AnimationControllerPrivate::timerFired):
        (WebCore:::m_data):
        (WebCore::AnimationController::~AnimationController):
        (WebCore::AnimationController::cancelImplicitAnimations):
        (WebCore::AnimationController::updateImplicitAnimations):
        (WebCore::AnimationController::suspendAnimations):
        (WebCore::AnimationController::resumeAnimations):
        * page/AnimationController.h:
        * page/Frame.cpp:
        (WebCore::FramePrivate::FramePrivate):
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::setStyle):
        (WebCore::RenderBox::destroy):
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::setAnimatableStyle):
        (WebCore::RenderObject::destroy):
        * rendering/RenderObject.h:
        * rendering/RenderStyle.h:
        (WebCore::TimingFunction::TimingFunction):
        (WebCore::TimingFunction::operator==):
        (WebCore::TimingFunction::x1):
        (WebCore::TimingFunction::y1):
        (WebCore::TimingFunction::x2):
        (WebCore::TimingFunction::y2):
        (WebCore::TimingFunction::type):
        (WebCore::Transition::transitionProperty):
        (WebCore::Transition::setTransitionProperty):
        (WebCore::RenderStyle::initialTransitionProperty):
        * rendering/RenderWidget.cpp:
        (WebCore::RenderWidget::destroy):

2007-10-29  Beth Dakin  <bdakin@apple.com>

        Reviewed by Hyatt.

        Fix for <rdar://problem/5399614> anchor tag is not rendered without 
        text content, works in Firefox with CSS background-image (13237)

        This patch allows empty inlines that have box decorations or width 
        from border/padding/margin to have line boxes.

        * rendering/bidi.cpp:
        (WebCore::inlineFlowAllowsLineBox): Convenience function that 
        defines when we allow an inline flow to have a line box.
        (WebCore::requiresLineBox): Call inlineFlowAllowsLineBox.
        (WebCore::shouldSkipWhitespaceAfterStartObject): New function to 
        merge some shared code between list markers and empty inline flows 
        that fall at the beginning of a line.
        (WebCore::RenderBlock::findNextLineBreak): Make flows more like 
        list markers.

        One interesting side effect of this bug appeared in our xhtml/svg 
        tests that generate parser error tags. The tag we generate was 
        actually an empty inline with box decorations. This patch causes 
        those inlines to draw now, and the parser errors looked strange. So 
        I changed it so that the parsererror tag is display:block. This 
        matches Firefox, and I think was the original intent of the tag 
        since that causes its red background and border to show up.
        * dom/XMLTokenizer.cpp:
        (WebCore::createXHTMLParserErrorHeader):

2007-10-29  Dan Bernstein  <mitz@apple.com>

        Reviewed by Dave Hyatt.

        - fix crashing tests fast/frames/inline-object-inside-frameset.html and
          fast/forms/form-hides-table.html

        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::destroy):
        * rendering/RenderWidget.cpp:
        (WebCore::RenderWidget::destroy):

2007-10-29  Dan Bernstein  <mitz@apple.com>

        Reviewed by Adam Roben.

        - fix http://bugs.webkit.org/show_bug.cgi?id=15750
          REGRESSION(r27173): Web Inspector freezes beneath Image::drawPattern()

        Test: fast/backgrounds/size/zero.html

        * platform/graphics/cg/ImageCG.cpp:
        (WebCore::Image::drawPattern): Added an ASSERT and an early return
        to guard against singular pattern transforms.
        * rendering/RenderBox.cpp:
        (WebCore::cacluateBackgroundSize): Changed to ensure a minimum tile
        size of 1x1.

2007-10-29  Alp Toker  <alp@atoker.com>

        Reviewed by Maciej.

        Add GTK+ convenience conversions for various primitives

        * WebCore.pro:
        * platform/graphics/Color.h:
        * platform/graphics/IntPoint.h:
        * platform/graphics/IntRect.h:
        * platform/graphics/gtk/ColorGtk.cpp: Added.
        (WebCore::Color::Color):
        * platform/graphics/gtk/IntPointGtk.cpp: Added.
        (WebCore::IntPoint::IntPoint):
        (WebCore::IntPoint::operator GdkPoint):
        * platform/graphics/gtk/IntRectGtk.cpp: Added.
        (WebCore::IntRect::IntRect):
        (WebCore::IntRect::operator GdkRectangle):

2007-10-29  Jon Honeycutt  <jhoneycutt@apple.com>

        Reviewed by Anders.

        Speculative fix for <rdar://5538489> Safari 3.0.4 seed hangs at
        http://tgmonline.futuregamer.it/ (works fine on Safari 2.0.4 and Safari
        Beta for Mac)
        
        I cannot reproduce this hang, but it is likely due to our not limiting
        WM_USER+1 messages or InvalidateRect calls for a plugin with initially-
        unknown MIME type. The embed tag on the page is missing a type
        attribute, so as fallback, we choose to load the Flash plugin based on
        the file extension of "swf." However, we do not record this determined
        MIME type, and so our quirks cannot be established.
        
        Changed findPlugin() so that, if it fails to find a plugin for the
        given MIME type, it will lookup the MIME type for the file extension -
        overwriting its passed MIME type parameter - and search for a plugin
        for that MIME type.

        * plugins/win/PluginDatabaseWin.cpp:
        (WebCore::PluginDatabaseWin::pluginForMIMEType): Added an early return
        if the MIME type is empty
        (WebCore::PluginDatabaseWin::MIMETypeForExtension): Added to replace
        pluginForExtension. Returns a String with the MIME type for the file
        extension. Also, changed to use case-insensitive compares
        (WebCore::PluginDatabaseWin::findPlugin): If we fail to find a plugin
        for the given extension, overwrite the incoming MIME type parameter
        with the MIME type for the file extension, and search for a plugin for
        that MIME type. Also, changed the way that the extension is determined
        (WebCore::PluginDatabaseWin::createPluginView): Pass a mutable String
        to findPlugin() so that it can be updated if necessary
        * plugins/win/PluginDatabaseWin.h: Changed findPlugin() to take a non-
        const String, removed definition of pluginForExtension, added
        definition for MIMETypeForExtension
        * plugins/win/PluginPackageWin.cpp: 
        (WebCore::PluginPackageWin::fetchInfo): Store the MIME type in
        lowercase for easier compares

2007-10-29  Andrew Wellington  <proton@wiretapped.net>

        Not reviewed - build fix

        Fix Mac Build.
        
        WebKit/WebCore/xml/XSLTProcessor.cpp:79: warning: 'level' may be used uninitialized
        in this function

        * xml/XSLTProcessor.cpp:
        (WebCore::XSLTProcessor::parseErrorFunc):

2007-10-29  Alp Toker  <alp@atoker.com>

        Reviewed by Adam Roben.

        http://bugs.webkit.org/show_bug.cgi?id=15725
        [GTK] WebCore.pro header dependencies are incorrect

        Fix header dependencies in the build system

        INCLUDEPATH and DEPENDPATH are now up to date.

        * WebCore.pro:

2007-10-29  Beth Dakin  <bdakin@apple.com>

        Build fix.

        * css/CSSParser.cpp:
        (WebCore::CSSParser::parseTimingFunctionValue):
        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::mapTransitionTimingFunction):

2007-10-29  David Hyatt  <hyatt@apple.com>

        Land the back end for CSS animated property transitions.  I am landing this in stages, so the AnimationController
        class is deliberately left empty.

        Reviewed by darin/aroben

        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::CSSComputedStyleDeclaration::getPropertyCSSValue):
        * css/CSSPropertyNames.in:
        * css/CSSTimingFunctionValue.cpp: Added.
        (WebCore::CSSTimingFunctionValue::cssText):
        * css/CSSTimingFunctionValue.h: Added.
        (WebCore::CSSTimingFunctionValue::CSSTimingFunctionValue):
        (WebCore::CSSTimingFunctionValue::firstPoint):
        (WebCore::CSSTimingFunctionValue::secondPoint):
        * css/CSSValueKeywords.in:
        * history/CachedPage.cpp:
        (WebCore::CachedPage::restore):
        * page/AnimationController.cpp: Added.
        (WebCore::AnimationController::AnimationController):
        (WebCore::AnimationController::~AnimationController):
        (WebCore::AnimationController::cancelTransitions):
        (WebCore::AnimationController::updateTransitions):
        (WebCore::AnimationController::suspendAnimations):
        (WebCore::AnimationController::resumeAnimations):
        * page/AnimationController.h: Added.
        * page/Frame.cpp:
        (WebCore::Frame::animationController):
        (WebCore::Frame::clearTimers):
        * page/Frame.h:
        * page/FramePrivate.h:
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::setStyle):
        (WebCore::RenderBox::destroy):
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::animationController):
        * rendering/RenderObject.h:
        * rendering/RenderStyle.cpp:
        (WebCore::Transition::Transition):
        (WebCore::Transition::~Transition):
        (WebCore::Transition::operator=):
        (WebCore::Transition::operator==):
        (WebCore::Transition::fillUnsetProperties):
        (WebCore::StyleRareNonInheritedData::StyleRareNonInheritedData):
        (WebCore::StyleRareNonInheritedData::~StyleRareNonInheritedData):
        (WebCore::StyleRareNonInheritedData::operator==):
        (WebCore::StyleRareNonInheritedData::transitionDataEquivalent):
        (WebCore::RenderStyle::diff):
        (WebCore::RenderStyle::adjustTransitions):
        (WebCore::RenderStyle::accessTransitions):
        * rendering/RenderStyle.h:
        (WebCore::BackgroundLayer::next):
        (WebCore::):
        (WebCore::TimingFunction::TimingFunction):
        (WebCore::TimingFunction::operator==):
        (WebCore::Transition::next):
        (WebCore::Transition::isTransitionDurationSet):
        (WebCore::Transition::isTransitionRepeatCountSet):
        (WebCore::Transition::isTransitionTimingFunctionSet):
        (WebCore::Transition::isTransitionPropertySet):
        (WebCore::Transition::isEmpty):
        (WebCore::Transition::clearTransitionDuration):
        (WebCore::Transition::clearTransitionRepeatCount):
        (WebCore::Transition::clearTransitionTimingFunction):
        (WebCore::Transition::clearTransitionProperty):
        (WebCore::Transition::transitionDuration):
        (WebCore::Transition::transitionRepeatCount):
        (WebCore::Transition::transitionTimingFunction):
        (WebCore::Transition::transitionProperty):
        (WebCore::Transition::setTransitionDuration):
        (WebCore::Transition::setTransitionRepeatCount):
        (WebCore::Transition::setTransitionTimingFunction):
        (WebCore::Transition::setTransitionProperty):
        (WebCore::Transition::setNext):
        (WebCore::Transition::operator!=):
        (WebCore::RenderStyle::transitions):
        (WebCore::RenderStyle::clearTransitions):
        (WebCore::RenderStyle::inheritTransitions):
        (WebCore::RenderStyle::initialTransitionDuration):
        (WebCore::RenderStyle::initialTransitionRepeatCount):
        (WebCore::RenderStyle::initialTransitionTimingFunction):
        (WebCore::RenderStyle::initialTransitionProperty):
        * rendering/RenderWidget.cpp:
        (WebCore::RenderWidget::destroy):

2007-10-29  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Darin.

        http://bugs.webkit.org/show_bug.cgi?id=6040
        XSLT does not report errors to the user

        Made parseErrorFunc a static member function of XSLTProcessor to be reusable from XSLStylesheet.
        Switched to xmlSetStructuredErrorFunc to get an error structure instead of pre-formatted console
        output. Got rid of DeprecatedString in XSLTProcessor.

        * dom/Document.cpp:
        (WebCore::Document::applyXSLTransform):
        * xml/XSLStyleSheet.cpp:
        (WebCore::XSLStyleSheet::parseString):
        * xml/XSLTProcessor.cpp:
        (WebCore::XSLTProcessor::parseErrorFunc):
        (WebCore::docLoaderFunc):
        (WebCore::setXSLTLoadCallBack):
        (WebCore::writeToString):
        (WebCore::saveResultToString):
        (WebCore::transformTextStringToXHTMLDocumentString):
        (WebCore::xsltParamArrayFromParameterMap):
        (WebCore::freeXsltParamArray):
        (WebCore::XSLTProcessor::createDocumentFromSource):
        (WebCore::createFragmentFromSource):
        (WebCore::xsltStylesheetPointer):
        (WebCore::xmlDocPtrFromNode):
        (WebCore::resultMIMEType):
        (WebCore::XSLTProcessor::transformToString):
        (WebCore::XSLTProcessor::transformToDocument):
        (WebCore::XSLTProcessor::transformToFragment):
        * xml/XSLTProcessor.h:
        (WebCore::XSLTProcessor::setXSLStylesheet):
        (WebCore::XSLTProcessor::importStylesheet):
        (WebCore::XSLTProcessor::xslStylesheet):

2007-10-29  Dan Bernstein  <mitz@apple.com>

        Reviewed by John Sullivan.

        - fix <rdar://problem/5424455> REGRESSION (r21168-r21193, Tiger only): Safari scrollbar is clipped at top when loading particular RSS page

        Test: fast/repaint/layout-state-only-positioned.html

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::layoutOnlyPositionedObjects): Pop layout state
        before updating scroll info, which possibly repaints us.

2007-10-29  David Kilzer  <ddkilzer@webkit.org>

        REGRESSION (r17701): Favicons should be viewable as image documents
        <http://bugs.webkit.org/show_bug.cgi?id=15640>

        Reviewed by Darin.

        On Tiger and Leopard, the image/x-icon MIME type is not returned from
        CGImageSourceCopyTypeIdentifiers(), so opening a URL to a favicon caused
        the icon to be downloaded instead being displayed in an image document.

        Test: fast/images/favicon-as-image.html

        * platform/MIMETypeRegistry.cpp:
        (WebCore::initialiseSupportedImageMIMETypes): Manually add image/x-icon to
        supportedImageMIMETypes and supportedImageResourceMIMETypes.  Also fixed
        comment about the image/bmp MIME type since it applies to both Tiger and
        Leopard.

2007-10-29  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Mark.

        - fixed assertion failures detected by the new assertions

        * bindings/objc/DOMRGBColor.mm:
        (-[DOMRGBColor dealloc]): Clear _internal before calling [super dealloc]
        because it's not a pointer and shouldn't be in the normal wrapper cache.
        * dom/Document.cpp:
        (WebCore::Document::addImageMap): Don't access hashmap if name is null.
        (WebCore::Document::removeImageMap): ditto
        * dom/StyledElement.cpp:
        (WebCore::StyledElement::parseMappedAttribute): Don't claim we have a class
        when the class attribute is empty.
        * platform/TextCodecICU.cpp:
        (WebCore::gbkCallbackEscape): Don't look up 0 code points.

2007-10-28  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Darin.

        http://bugs.webkit.org/show_bug.cgi?id=10734
        Made HTMLOptionElement.index read-only, matching IE and DOM standard.

        Test: fast/dom/HTMLOptionElement/set-option-index-text.html

        * html/HTMLOptionElement.idl: Marked index as readonly.

        * html/HTMLOptionElement.cpp:
        * html/HTMLOptionElement.h:
        Removed setIndex().

2007-10-28  Eric Seidel  <eric@webkit.org>

        Reviewed by darin.

        Fix leaks on TOT and prevent Path code from logging to console so frequently

        * platform/graphics/svg/SVGResourceFilter.h:
        (WebCore::SVGResourceFilterPlatformData::SVGResourceFilterPlatformData):
        (WebCore::SVGResourceFilterPlatformData::~SVGResourceFilterPlatformData):
        * platform/graphics/svg/cg/CgSupport.cpp:
        (WebCore::strokeBoundingBox):
        * platform/graphics/svg/cg/SVGResourceFilterCg.mm:
        * platform/graphics/svg/mac/SVGResourceFilterPlatformDataMac.h:

2007-10-28  Mark Rowe  <mrowe@apple.com>

        Reviewed by Maciej.

        Replace uses of isNaN and isInf with isnan and isinf.

        * bindings/js/JSHTMLOptionsCollectionCustom.cpp:
        (WebCore::JSHTMLOptionsCollection::setLength):

2007-10-28  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Mark.

        - fixed REGRESSION(r27176): Reproducible crash while trying to order dinner makes bdash sad
        http://bugs.webkit.org/show_bug.cgi?id=15731

        * bindings/js/kjs_window.cpp:
        (KJS::Window::installTimeout): Avoid putting in or accessing empty or deleted keys.
        (KJS::Window::clearTimeout): ditto
        * manual-tests/bad-clearTimeout-crash.html: Added. Automated test not possible.

2007-10-28  Kevin Ollivier  <kevino@theolliviers.com>

        wx port defines for graphics and network layers.

        Reviewed by Darin Adler.

        * platform/graphics/AffineTransform.h:
        * platform/graphics/BitmapImage.h:
        * platform/graphics/Color.h:
        * platform/graphics/FloatRect.h:
        * platform/graphics/GraphicsContext.h:
        * platform/graphics/ImageSource.h:
        * platform/graphics/IntPoint.h:
        * platform/graphics/IntRect.h:
        * platform/graphics/Path.h:
        * platform/graphics/Pen.h:
        * platform/network/ResourceHandle.h:


2007-10-28  Alp Toker  <alp@atoker.com>

        Reviewed by Anders Carlsson.

        http://bugs.webkit.org/show_bug.cgi?id=14124
        [CURL] Support data URLs

        Add data URL support (both Base64 and percent-encoded formats).

        Inspired by code from the Qt port.

        * platform/Base64.cpp:
        (WebCore::base64Decode):
        * platform/Base64.h:
        * platform/network/curl/ResourceHandleManager.cpp:
        (WebCore::ResourceHandleManager::startScheduledJobs):
        (WebCore::parseDataUrl):

2007-10-28  Alp Toker  <alp@atoker.com>

        Reviewed by Adam Roben.

        http://bugs.webkit.org/show_bug.cgi?id=15701
        The curl http backend does not deal properly with redirects

        Implement http redirect support.

        * platform/network/curl/ResourceHandleManager.cpp:
        (WebCore::headerCallback):

2007-10-28  Kevin Ollivier  <kevino@theolliviers.com>

        Define types and accessors needed for wx implementation
        of platform classes. Also, turn off DisallowCTypes.h because
        disallowed methods appear in wx headers.

        Reviewed by Adam Roben.

        * config.h:
        * platform/ContextMenuItem.h:
        * platform/Cursor.h:
        * platform/DeprecatedString.h:
        * platform/DragData.h:
        * platform/DragImage.h:
        * platform/FontData.h:
        (WebCore::FontData::getWxFont):
        * platform/GlyphBuffer.h:
        (WebCore::GlyphBuffer::glyphAt):
        (WebCore::GlyphBuffer::advanceAt):
        (WebCore::GlyphBuffer::add):
        * platform/PlatformKeyboardEvent.h:
        (WebCore::PlatformKeyboardEvent::isWxCharEvent):
        * platform/PlatformMenuDescription.h:
        * platform/PlatformMouseEvent.h:
        * platform/PlatformString.h:
        * platform/PlatformWheelEvent.h:
        * platform/ScrollView.h:
        * platform/Widget.h:
        * platform/image-decoders/bmp/BMPImageDecoder.cpp:
        * platform/image-decoders/gif/GIFImageDecoder.cpp:
        * platform/image-decoders/gif/GIFImageReader.cpp:
        * platform/image-decoders/ico/ICOImageDecoder.cpp:
        * platform/image-decoders/jpeg/JPEGImageDecoder.cpp:
        * platform/image-decoders/png/PNGImageDecoder.cpp:
        * platform/image-decoders/xbm/XBMImageDecoder.cpp:

2007-10-28  Mark Rowe  <mrowe@apple.com>

        We don't include "config.h" in headers.

        * dom/XMLTokenizer.h:
        * platform/graphics/svg/SVGResourceFilter.h:
        * platform/image-decoders/ImageDecoder.h:
        * platform/wx/FontPlatformData.h:

2007-10-28  Darin Adler  <darin@apple.com>

        * platform/graphics/svg/mac/SVGResourceFilterPlatformDataMac.h:
        We don't include "config.h" in headers. Hope this desn't break
        the non-SVG build again.

2007-10-28  Eric Seidel  <eric@webkit.org>

        Build fix for non-SVG build, no review.

        * platform/graphics/svg/mac/SVGResourceFilterPlatformDataMac.h:
        * platform/graphics/svg/mac/SVGResourceFilterPlatformDataMac.mm:

2007-10-28  Eric Seidel  <eric@webkit.org>

        Reviewed by Oliver.

        Push SVGResourceFilter platform specific data down into m_platformData
        in preparation for implementing a non-mac filter solution.
        
        Also update a very old email address in copyright headers

        * WebCore.xcodeproj/project.pbxproj:
        * platform/graphics/FloatPoint3D.cpp:
        (WebCore::FloatPoint3D::FloatPoint3D):
        * platform/graphics/FloatPoint3D.h:
        * platform/graphics/svg/SVGResourceFilter.cpp:
        (WebCore::SVGResourceFilter::SVGResourceFilter):
        * platform/graphics/svg/SVGResourceFilter.h:
        (WebCore::SVGResourceFilter::platformData):
        (WebCore::SVGResourceFilter::effects):
        * platform/graphics/svg/cg/SVGResourceFilterCg.mm:
        (WebCore::SVGResourceFilter::createPlatformData):l
        (WebCore::SVGResourceFilter::prepareFilter):
        (WebCore::SVGResourceFilter::applyFilter):
        * platform/graphics/svg/filters/SVGDistantLightSource.h:
        * platform/graphics/svg/filters/SVGFEBlend.cpp:
        * platform/graphics/svg/filters/SVGFEBlend.h:
        * platform/graphics/svg/filters/SVGFEColorMatrix.cpp:
        * platform/graphics/svg/filters/SVGFEColorMatrix.h:
        * platform/graphics/svg/filters/SVGFEComponentTransfer.cpp:
        * platform/graphics/svg/filters/SVGFEComponentTransfer.h:
        * platform/graphics/svg/filters/SVGFEComposite.cpp:
        * platform/graphics/svg/filters/SVGFEComposite.h:
        * platform/graphics/svg/filters/SVGFEConvolveMatrix.cpp:
        * platform/graphics/svg/filters/SVGFEConvolveMatrix.h:
        * platform/graphics/svg/filters/SVGFEDiffuseLighting.cpp:
        * platform/graphics/svg/filters/SVGFEDiffuseLighting.h:
        * platform/graphics/svg/filters/SVGFEDisplacementMap.cpp:
        * platform/graphics/svg/filters/SVGFEDisplacementMap.h:
        * platform/graphics/svg/filters/SVGFEFlood.cpp:
        * platform/graphics/svg/filters/SVGFEFlood.h:
        * platform/graphics/svg/filters/SVGFEGaussianBlur.cpp:
        * platform/graphics/svg/filters/SVGFEGaussianBlur.h:
        * platform/graphics/svg/filters/SVGFEImage.cpp:
        * platform/graphics/svg/filters/SVGFEImage.h:
        * platform/graphics/svg/filters/SVGFEMerge.cpp:
        * platform/graphics/svg/filters/SVGFEMerge.h:
        * platform/graphics/svg/filters/SVGFEMorphology.cpp:
        * platform/graphics/svg/filters/SVGFEMorphology.h:
        * platform/graphics/svg/filters/SVGFEOffset.cpp:
        * platform/graphics/svg/filters/SVGFEOffset.h:
        * platform/graphics/svg/filters/SVGFESpecularLighting.cpp:
        * platform/graphics/svg/filters/SVGFESpecularLighting.h:
        * platform/graphics/svg/filters/SVGFETile.h:
        * platform/graphics/svg/filters/SVGFETurbulence.cpp:
        * platform/graphics/svg/filters/SVGFETurbulence.h:
        * platform/graphics/svg/filters/SVGFilterEffect.cpp:
        * platform/graphics/svg/filters/SVGFilterEffect.h:
        * platform/graphics/svg/filters/SVGLightSource.cpp:
        * platform/graphics/svg/filters/SVGLightSource.h:
        * platform/graphics/svg/filters/SVGPointLightSource.h:
        * platform/graphics/svg/filters/SVGSpotLightSource.h:
        * platform/graphics/svg/filters/cg/SVGFEBlendCg.mm:
        (WebCore::SVGFEBlend::getCIFilter):
        * platform/graphics/svg/filters/cg/SVGFEColorMatrixCg.mm:
        (WebCore::SVGFEColorMatrix::getCIFilter):
        * platform/graphics/svg/filters/cg/SVGFEComponentTransferCg.mm:
        (WebCore::SVGFEComponentTransfer::getCIFilter):
        * platform/graphics/svg/filters/cg/SVGFECompositeCg.mm:
        (WebCore::SVGFEComposite::getCIFilter):
        * platform/graphics/svg/filters/cg/SVGFEDiffuseLightingCg.mm:
        (WebCore::SVGFEDiffuseLighting::getCIFilter):
        * platform/graphics/svg/filters/cg/SVGFEDisplacementMapCg.mm:
        (WebCore::SVGFEDisplacementMap::getCIFilter):
        * platform/graphics/svg/filters/cg/SVGFEFloodCg.mm:
        (WebCore::SVGFEFlood::getCIFilter):
        * platform/graphics/svg/filters/cg/SVGFEHelpersCg.h:
        * platform/graphics/svg/filters/cg/SVGFEImageCg.mm:
        (WebCore::SVGFEImage::getCIFilter):
        * platform/graphics/svg/filters/cg/SVGFEMergeCg.mm:
        (WebCore::SVGFEMerge::getCIFilter):
        * platform/graphics/svg/filters/cg/SVGFESpecularLightingCg.mm:
        (WebCore::SVGFESpecularLighting::getCIFilter):
        * platform/graphics/svg/mac: Added.
        * platform/graphics/svg/mac/SVGResourceFilterPlatformDataMac.h: Added.
        * platform/graphics/svg/mac/SVGResourceFilterPlatformDataMac.mm: Added.
        (WebCore::SVGResourceFilterPlatformDataMac::SVGResourceFilterPlatformDataMac):
        (WebCore::SVGResourceFilterPlatformDataMac::~SVGResourceFilterPlatformDataMac):
        (WebCore::SVGResourceFilterPlatformDataMac::getCIFilterStack):
        (WebCore::alphaImageForImage):
        (WebCore::SVGResourceFilterPlatformDataMac::imageForName):
        (WebCore::SVGResourceFilterPlatformDataMac::setImageForName):
        (WebCore::SVGResourceFilterPlatformDataMac::setOutputImage):
        (WebCore::SVGResourceFilterPlatformDataMac::inputImage):

2007-10-28  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Adam Roben.

        http://bugs.webkit.org/show_bug.cgi?id=15217
        Plugin complains that xpcom_core.dll missing

        * plugins/win/PluginDatabaseWin.cpp:
        (WebCore::PluginDatabaseWin::isPluginBlacklisted): Blacklist npmozax.dll.

2007-10-28  Timothy Hatcher  <timothy@apple.com>

        Reviewed by Adam.

        Pass the Document's domain to InspectorController:didOpenDatabase. This matches
        what the Inspector shows for other resources.

        * storage/Database.cpp:
        (WebCore::Database::openDatabase):

        * dom/Document.h: Remove KURL.h, no longer needed.

2007-10-28  Timothy Hatcher  <timothy@apple.com>

        Reviewed by Adam.

        Bug 15728: Selected Resource background image gradient has banding
        http://bugs.webkit.org/show_bug.cgi?id=15728

        - Reduced images to 1px wide that are tiled horizontally in CSS.
        - Corrected the -webkit-background-size usage to specify auto for the width.

        * page/inspector/Images/attachedShadow.png:
        * page/inspector/Images/bottomShadow.png:
        * page/inspector/Images/darkShadow.png:
        * page/inspector/Images/gradient.png:
        * page/inspector/Images/gradientHighlight.png:
        * page/inspector/Images/gradientHighlightBottom.png:
        * page/inspector/Images/sidebarSelection.png:
        * page/inspector/Images/sidebarSelectionBlurred.png:
        * page/inspector/Images/sidebarSelectionBlurredTall.png:
        * page/inspector/Images/sidebarSelectionGray.png:
        * page/inspector/Images/sidebarSelectionGrayTall.png:
        * page/inspector/Images/sidebarSelectionTall.png:
        * page/inspector/inspector.css:

2007-10-27  Timothy Hatcher  <timothy@apple.com>

        Reviewed by Adam.

        Bug 15727: Resizing the resource sidebar doesn't scale the font preview or network timeline
        http://bugs.webkit.org/show_bug.cgi?id=15727

        Add one window resize listener and call the new resize function on the currentPanel.
        Also call the currentPanel's resize function when resizing the sidebar.

        * page/inspector/DocumentPanel.js: Implement resize and call updateTreeSelection() when
          the panel is shown and when resizing the DOM sidebar.
        * page/inspector/FontPanel.js: Implement resize.
        * page/inspector/NetworkPanel.js: Ditto.
        * page/inspector/inspector.js: Add a window resize listener.

2007-10-27  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Oliver.
        
        - update for HashTable changes

        * bindings/js/JSSVGPODTypeWrapper.h:
        * dom/Document.h:
        * dom/QualifiedName.cpp:
        * dom/StyledElement.cpp:
        * ksvg2/svg/SVGAnimatedTemplate.h:
        * platform/FontCache.cpp:
        * platform/StringHash.h:
        (WTF::):
        * platform/TextEncodingRegistry.cpp:
        * platform/graphics/IntSizeHash.h:
        (WTF::):
        * plugins/win/PluginPackageWin.h:

2007-10-28  Alp Toker  <alp@atoker.com>

        Reviewed by Adam Roben.

        http://bugs.webkit.org/show_bug.cgi?id=15646
        [GTK] caretBlinkFrequency is hard-coded in Frame.cpp

        Abstract caretBlinkFrequency to RenderTheme.

        * page/Frame.cpp:
        (WebCore::Frame::selectionLayoutChanged):
        * platform/gtk/RenderThemeGtk.cpp:
        (WebCore::RenderThemeGtk::caretShouldBlink):
        (WebCore::RenderThemeGtk::caretBlinkFrequency):
        * platform/gtk/RenderThemeGtk.h:
        * rendering/RenderTheme.h:

2007-10-27  Timothy Hatcher  <timothy@apple.com>

        Reviewed by Adam.

        Don't print the line number in the Inspector Console if it is Zero.

        * page/inspector/ConsolePanel.js:

2007-10-27  Sam Weinig  <sam@webkit.org>

        Reviewed by Adam Roben.

        Fix http://bugs.webkit.org/show_bug.cgi?id=14953
        Implement window.console in WebCore

        - Adds a window.console object that has 4 methods (log, info, warn, and error)
          that send messages to the Chrome.  This moves functionality that was in the
          app down into WebCore.

        * DerivedSources.make:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/scripts/CodeGeneratorJS.pm: Add extended attribute
        to mark attributes as [Replacable] which indicates they can 
        overridden when set.
        * page/Chrome.cpp:
        (WebCore::Chrome::addMessageToConsole): Allow all messages to go
        up to the ChromeClient.
        * page/Console.cpp: Added.
        (WebCore::Console::Console):
        (WebCore::Console::disconnectFrame):
        (WebCore::Console::error):
        (WebCore::Console::info):
        (WebCore::Console::log):
        (WebCore::Console::warn):
        * page/Console.h: Added.
        * page/Console.idl: Added.
        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::clear):
        (WebCore::DOMWindow::console):
        * page/DOMWindow.h:
        * page/DOMWindow.idl:

2007-10-27  Eric Seidel  <eric@webkit.org>

        Reviewed by aroben.
        
        Remove legacy createFilterEffect function (causing extra filter tests to fail on windows)

        No functional changes, thus no tests.

        * ksvg2/svg/SVGFEBlendElement.cpp:
        (WebCore::SVGFEBlendElement::filterEffect):
        * ksvg2/svg/SVGFEColorMatrixElement.cpp:
        (WebCore::SVGFEColorMatrixElement::filterEffect):
        * ksvg2/svg/SVGFEComponentTransferElement.cpp:
        (WebCore::SVGFEComponentTransferElement::filterEffect):
        * ksvg2/svg/SVGFECompositeElement.cpp:
        (WebCore::SVGFECompositeElement::filterEffect):
        * ksvg2/svg/SVGFEDiffuseLightingElement.cpp:
        (WebCore::SVGFEDiffuseLightingElement::filterEffect):
        * ksvg2/svg/SVGFEDisplacementMapElement.cpp:
        (WebCore::SVGFEDisplacementMapElement::filterEffect):
        * ksvg2/svg/SVGFEFloodElement.cpp:
        (WebCore::SVGFEFloodElement::filterEffect):
        * ksvg2/svg/SVGFEGaussianBlurElement.cpp:
        (WebCore::SVGFEGaussianBlurElement::filterEffect):
        * ksvg2/svg/SVGFEImageElement.cpp:
        (WebCore::SVGFEImageElement::filterEffect):
        * ksvg2/svg/SVGFEMergeElement.cpp:
        (WebCore::SVGFEMergeElement::filterEffect):
        * ksvg2/svg/SVGFEOffsetElement.cpp:
        (WebCore::SVGFEOffsetElement::filterEffect):
        * ksvg2/svg/SVGFESpecularLightingElement.cpp:
        (WebCore::SVGFESpecularLightingElement::filterEffect):
        * ksvg2/svg/SVGFETileElement.cpp:
        (WebCore::SVGFETileElement::filterEffect):
        * ksvg2/svg/SVGFETurbulenceElement.cpp:
        (WebCore::SVGFETurbulenceElement::filterEffect):
        * platform/graphics/svg/SVGResourceFilter.h:
        * platform/graphics/svg/cg/SVGResourceFilterCg.cpp:
        * platform/graphics/svg/cg/SVGResourceFilterCg.mm:
        * platform/graphics/svg/qt/SVGResourceFilterQt.cpp:

2007-10-27  Dan Bernstein  <mitz@apple.com>

        Reviewed by Darin Adler.

        - fix a crash when opening Zenoss server history view
          <rdar://problem/5530657>

        Test: fast/table/colgroup-relative.html

        * rendering/LayoutState.cpp:
        (WebCore::LayoutState::LayoutState): Added a hasLayer() check before
        accessing layer().

2007-10-27  Julien  <julien.chaffraix@gmail.com>

        Reviewed by Alexey.

        http://bugs.webkit.org/show_bug.cgi?id=13141
        XMLHttpRequest should set readyState to 0 after abort()
        
        Test: http/tests/xmlhttprequest/xmlhttprequest-abort-readyState.html

        * xml/XMLHttpRequest.cpp:
        (WebCore::XMLHttpRequest::open):
        (WebCore::XMLHttpRequest::abort):

2007-10-27  Dan Bernstein  <mitz@apple.com>

        Reviewed by Dave Hyatt.

        - fix rotated border images by using a temporary subimage containing
          only the part we want to tile

        Test: fast/borders/border-image-rotate-transform.html

        * platform/graphics/cg/ImageCG.cpp:
        (WebCore::Image::drawPatternCallback):
        (WebCore::Image::drawPattern):

2007-10-27  Jan Michael Alonzo  <jmalonzo@unpluggable.com>

        Reviewed by Alp.

        http://bugs.webkit.org/show_bug.cgi?id=15722
        [GTK] Refactor gtk/RenderThemeGtk and implement a few more methods

        Refactor/enhance GTK RenderTheme

        * platform/gtk/RenderThemeGtk.cpp:
        (WebCore::RenderThemeGtk::supportsFocus): added TextArea, Menulist, Radio, and Checkbox Appearances
        (WebCore::RenderThemeGtk::supportsFocusRing): call supportsFocus() to check if focus on appearance is supported
        (WebCore::RenderThemeGtk::controlSupportsTints): copied from Qt and Safari ports
        (WebCore::RenderThemeGtk::baselinePosition): copied from Qt and Safari ports
        (WebCore::RenderThemeGtk::paintCheckbox): moved painting in paintButton
        (WebCore::RenderThemeGtk::paintRadio): moved painting in paintButton
        (WebCore::RenderThemeGtk::paintButton): paint the different buttons here, checking for the right appearance before doing so
        (WebCore::RenderThemeGtk::paintMenuList): use 0 instead of NULLs
        (WebCore::RenderThemeGtk::adjustTextFieldStyle):
        (WebCore::RenderThemeGtk::getThemeData):
        * platform/gtk/RenderThemeGtk.h:
        (WebCore::RenderThemeGtk::supportsControlTints):

2007-10-27  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Darin.

        http://bugs.webkit.org/show_bug.cgi?id=15555
        XMLHttpRequest does not support charset "x-user-defined", which can
        facilitate loading of binary data

        Test: http/tests/xmlhttprequest/binary-x-user-defined.html

        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * platform/TextCodecUserDefined.cpp: Added.
        (WebCore::TextCodecUserDefined::registerEncodingNames):
        (WebCore::newStreamingTextDecoderUserDefined):
        (WebCore::TextCodecUserDefined::registerCodecs):
        (WebCore::TextCodecUserDefined::decode):
        (WebCore::encodeComplexUserDefined):
        (WebCore::TextCodecUserDefined::encode):
        * platform/TextCodecUserDefined.h: Added.
        * platform/TextEncodingRegistry.cpp:
        (WebCore::buildBaseTextCodecMaps):

2007-10-27  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Darin.

        http://bugs.webkit.org/show_bug.cgi?id=15467
        Setting innerHTML to blank string in application/xhtml+xml mode
        throws DOM Exception 7

        Test: fast/dom/blank-innerHTML.xhtml

        * dom/XMLTokenizer.cpp:
        (WebCore::parseXMLDocumentFragment): Bail out early if the input string is empty.

2007-10-26  Sam Weinig  <sam@webkit.org>

        Enable dragging the left sidebar using the separator.

        Reviewed by Anders (unless Mitz says otherwise).

        * page/inspector/DocumentPanel.js:
        * page/inspector/inspector.css:
        * page/inspector/inspector.html:
        * page/inspector/inspector.js:

2007-10-26  Sam Weinig  <sam@webkit.org>

        Fix an off by one error when resizing the Inspector find window.

        Reviewed by Hyatt.

        * page/inspector/inspector.js:

2007-10-26  Jon Honeycutt  <jhoneycutt@apple.com>

        Reviewed by Adam.

        Fix fallout from r26072, which leads to all plugin streams for local
        resources being cancelled

        * loader/win/NetscapePlugInStreamLoaderWin.cpp:
        (WebCore::NetscapePlugInStreamLoader::didReceiveResponse): Ensure this
        is an HTTP response before checking the HTTP response code

2007-10-26  David Hyatt  <hyatt@apple.com>

        Fix for http://bugs.webkit.org/show_bug.cgi?id=15719, transformed box doesn't repaint properly
        when only translation changes.

        Move the updating of the transform to in between the old repaint and the new repaint.

        Reviewed by mitz

        fast/repaint/transform-translate.html

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

2007-10-26  Jon Honeycutt  <jhoneycutt@apple.com>

        Reviewed by Darin.

        <rdar://5557379> Crash in Silverlight when opening microsoft.com

        The crash is within Silverlight, and the latest version of the plugin
        does not exhibit this crash, so just avoid loading this version of the
        plugin.

        * plugins/win/PluginDatabaseWin.cpp: Added isPluginBlacklisted() and
        constants silverlightPluginMinRequiredVersionMSDWORD and
        silverlightPluginMinRequiredVersionLSDWORD. Their values are taken from 
        the version info of Silverlight 1.0.20926.0, which is a version known
        not to exhibit this crash
        (WebCore::PluginDatabaseWin::isPluginBlacklisted): Determine whether
        this plugin is blacklisted
        * plugins/win/PluginDatabaseWin.h:
        * plugins/win/PluginPackageWin.cpp:
        (WebCore::PluginPackageWin::PluginPackageWin): Initialize m_fileVersion*
        (WebCore::PluginPackageWin::getFileVersion):
        (WebCore::PluginPackageWin::storeFileVersion): Read version info for
        the plugin, and store the file version
        (WebCore::PluginPackageWin::fetchInfo): After determining the name,
        description, and file version, determine whether this plug-in is
        blacklisted. If so, return false so this plug-in isn't loaded
        * plugins/win/PluginPackageWin.h:

2007-10-26  Sam Weinig  <sam@webkit.org>

        Reviewed by Adele Peterson.

        Fix for <rdar://problem/5421754>
        m_frameName member variable in HTMLPlugInElement unnecessary

        - Refactor the willRemove() method down into HTMLFrameOwnerElement now that
          we no longer need to use the m_frameName variable.

        * html/HTMLFrameElementBase.cpp:
        * html/HTMLFrameElementBase.h:
        * html/HTMLFrameOwnerElement.cpp:
        (WebCore::HTMLFrameOwnerElement::willRemove):
        * html/HTMLFrameOwnerElement.h:
        * html/HTMLPlugInElement.cpp:
        * html/HTMLPlugInElement.h:
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::requestObject):

2007-10-26  Adele Peterson  <adele@apple.com>

        Export _wkDrawCapsLockIndicator.

        * WebCore.base.exp:

2007-10-26  Adele Peterson  <adele@apple.com>

        Reviewed by Oliver.

        Adding WebKitSystemInterface support for the caps lock indicator

        * platform/mac/WebCoreSystemInterface.h:
        * platform/mac/WebCoreSystemInterface.mm:

2007-10-26  Tristan O'Tierney  <tristan@apple.com>

        Reviewed by Darin Adler.

        <rdar://problem/5555053> REGRESSION:9A581: Window disappears when opening http://research.microsoft.com/users/darkok/
        The problem was caused by checkin r24654. This change moved explicit bounds checking into adjustWindowRect
        but failed to account for bounds checking (instead replaced with bounds clipping).  This caused issues
        when NaN was used. This patch goes one step further and does NaN checking to prevent the possibility of
        setting window bounds to NaN before an update occurs.

        Test: fast/dom/Window/window-resize-nan.html
        
        * bindings/js/kjs_window.cpp:
        (KJS::adjustWindowRect):
        Added a new parameter, pendingChanges, which takes pending changes to the window
        rect, and if they are valid (not NaN) sets them on window.
        
        (KJS::WindowFunc::callAsFunction):
        Adjusted uses of adjustWindowRect to take new update parameter.

2007-10-26  Sam Weinig  <sam@webkit.org>

        Reviewed by Tim Hatcher.

        Fix for http://bugs.webkit.org/show_bug.cgi?id=15175
        Cannot copy text of errors from Web Inspector from Console view

        * page/inspector/inspector.css: add -webkit-user-select: text for console messages.

2007-10-26  Sam Weinig  <sam@webkit.org>

        Reviewed by Tim Hatcher.

        Fix for http://bugs.webkit.org/show_bug.cgi?id=15446
        Web Inspector find window is not resizable

        - Adds ability to resize the find window.
        - Fixes bug that messed up the find window when resizing the left sidebar. 

        * page/inspector/inspector.css:
        * page/inspector/inspector.html:
        * page/inspector/inspector.js:

2007-10-26  Ada Chan  <adachan@apple.com>

        Update m_current index after we've removed an item:
        - if item removed is before m_current, decrement m_current
        - if the current item is removed, make sure m_current is within bounds.

        Reviewed by Darin.

        * history/BackForwardList.cpp:
        (WebCore::BackForwardList::removeItem):

2007-10-26  Mark Rowe  <mrowe@apple.com>

        Debug build fix.

        * bindings/js/kjs_proxy.cpp:
        (WebCore::KJSProxy::~KJSProxy):

2007-10-26  Maciej Stachowiak  <mjs@apple.com>

        No review, build fix.

        * bindings/objc/WebScriptObject.mm:
        (+[WebScriptObject throwException:]):
        (-[WebScriptObject setException:]):

2007-10-26  Maciej Stachowiak  <mjs@apple.com>

        Rubber Stamped by Mark.

        - fix build

        * bridge/mac/WebCoreScriptDebugger.mm:
        (-[WebCoreScriptCallFrame scopeChain]):
        (-[WebCoreScriptCallFrame functionName]):
        (-[WebCoreScriptCallFrame evaluateWebScript:]):

2007-10-26  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Oliver.

        - update for JavaScriptCore header changes

        * bindings/objc/WebScriptObject.mm:
        * bridge/mac/WebCoreScriptDebugger.mm:

2007-10-26  Alp Toker  <alp@atoker.com>

        Reviewed by Mark Rowe.

        http://bugs.webkit.org/show_bug.cgi?id=15693
        [GTK] Paging does not work when widget is added to a GtkScrolledWindow

        Eliminate MagicGtkScrollConstant in favour of the same calculations as
        GtkTextView for step and page increments. This also makes paging work,
        as the page increment was previously always 0.

        * platform/gtk/ScrollViewGtk.cpp:
        (WebCore::ScrollView::updateScrollbars):

2007-10-25  Dan Bernstein  <mitz@apple.com>

        Reviewed by Dave Hyatt and Sam Weinig.

        Build fix

        * platform/graphics/cg/ImageCG.cpp:
        (WebCore::Image::drawPattern):

2007-10-23  Jan Michael Alonzo  <jmalonzo@unpluggable.com>

        Reviewed by Alp.

        http://bugs.webkit.org/show_bug.cgi?id=15656
        [GTK] Implement WebCore::Widget::isEnabled/setEnabled

        * platform/gtk/WidgetGtk.cpp:
        (WebCore::Widget::isEnabled):
        (WebCore::Widget::setEnabled): Implemented.

2007-10-25  David Hyatt  <hyatt@apple.com>

        Fix for bug 15672, background images don't tile properly inside transforms.  This patch fixes background
        tiling to work in the presence of transforms and fixes bugs in both SVG and CSS transforms.

        Reviewed by aroben and mitz

        * WebCore.base.exp:
        * platform/graphics/Image.cpp:
        (WebCore::Image::setData):
        * platform/graphics/cg/ImageCG.cpp:
        (WebCore::ImageInfo::ImageInfo):
        (WebCore::Image::drawPatternCallback):
        (WebCore::Image::drawPattern):
        * platform/graphics/mac/GraphicsContextMac.mm:
        (WebCore::GraphicsContext::drawLineForMisspellingOrBadGrammar):
        * platform/mac/WebCoreSystemInterface.h:
        * platform/mac/WebCoreSystemInterface.mm:

2007-10-25  Brady Eidson  <beidson@apple.com>

        Blind build fix attempt

        * WebCore.pro:

2007-10-25  Brady Eidson  <beidson@apple.com>

        Reviewed by Anders and Sam

        Bulk rename of platform/sql/SQL* to platform/sql/SQLite*
        
        This is more accurate in that there is no realistic "SQL" abstraction, the classes are obviously
        tied extremely close to SQLite, and is necessitated by the introduction of "SQLTransaction" in 
        the HTML5 database API which we are adopting.

        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * loader/icon/IconDatabase.cpp:
        (WebCore::IconDatabase::iconDatabaseSyncThread):
        (WebCore::databaseVersionNumber):
        (WebCore::isValidDatabase):
        (WebCore::createDatabaseTables):
        (WebCore::IconDatabase::performOpenInitialization):
        (WebCore::IconDatabase::checkIntegrity):
        (WebCore::IconDatabase::performURLImport):
        (WebCore::IconDatabase::writeToDatabase):
        (WebCore::IconDatabase::pruneUnretainedIcons):
        (WebCore::IconDatabase::checkForDanglingPageURLs):
        (WebCore::IconDatabase::imported):
        (WebCore::IconDatabase::setImported):
        (WebCore::readySQLiteStatement):
        (WebCore::IconDatabase::setIconIDForPageURLInSQLDatabase):
        (WebCore::IconDatabase::removePageURLFromSQLDatabase):
        (WebCore::IconDatabase::getIconIDForIconURLFromSQLDatabase):
        (WebCore::IconDatabase::addIconURLToSQLDatabase):
        (WebCore::IconDatabase::getImageDataForIconURLFromSQLDatabase):
        (WebCore::IconDatabase::removeIconFromSQLDatabase):
        (WebCore::IconDatabase::writeIconSnapshotToSQLDatabase):
        * loader/icon/IconDatabase.h:
        * loader/icon/IconRecord.cpp:
        * platform/sql/SQLAuthorizer.cpp: Removed.
        * platform/sql/SQLAuthorizer.h: Removed.
        * platform/sql/SQLDatabase.cpp: Removed.
        * platform/sql/SQLDatabase.h: Removed.
        * platform/sql/SQLStatement.cpp: Removed.
        * platform/sql/SQLStatement.h: Removed.
        * platform/sql/SQLTransaction.cpp: Removed.
        * platform/sql/SQLTransaction.h: Removed.
        * platform/sql/SQLiteAuthorizer.cpp: Copied from platform/sql/SQLAuthorizer.cpp.
        * platform/sql/SQLiteAuthorizer.h: Copied from platform/sql/SQLAuthorizer.h.
        (WebCore::SQLiteAuthorizer::~SQLiteAuthorizer):
        * platform/sql/SQLiteDatabase.cpp: Copied from platform/sql/SQLDatabase.cpp.
        (WebCore::SQLiteDatabase::SQLiteDatabase):
        (WebCore::SQLiteDatabase::~SQLiteDatabase):
        (WebCore::SQLiteDatabase::open):
        (WebCore::SQLiteDatabase::close):
        (WebCore::SQLiteDatabase::setFullsync):
        (WebCore::SQLiteDatabase::setSynchronous):
        (WebCore::SQLiteDatabase::setBusyTimeout):
        (WebCore::SQLiteDatabase::setBusyHandler):
        (WebCore::SQLiteDatabase::executeCommand):
        (WebCore::SQLiteDatabase::returnsAtLeastOneResult):
        (WebCore::SQLiteDatabase::tableExists):
        (WebCore::SQLiteDatabase::clearAllTables):
        (WebCore::SQLiteDatabase::runVacuumCommand):
        (WebCore::SQLiteDatabase::lastInsertRowID):
        (WebCore::SQLiteDatabase::lastChanges):
        (WebCore::SQLiteDatabase::lastError):
        (WebCore::SQLiteDatabase::lastErrorMsg):
        (WebCore::SQLiteDatabase::authorizerFunction):
        (WebCore::SQLiteDatabase::setAuthorizer):
        (WebCore::SQLiteDatabase::lock):
        (WebCore::SQLiteDatabase::unlock):
        * platform/sql/SQLiteDatabase.h: Copied from platform/sql/SQLDatabase.h.
        * platform/sql/SQLiteStatement.cpp: Copied from platform/sql/SQLStatement.cpp.
        (WebCore::SQLiteStatement::SQLiteStatement):
        (WebCore::SQLiteStatement::~SQLiteStatement):
        (WebCore::SQLiteStatement::prepare):
        * platform/sql/SQLiteStatement.h: Copied from platform/sql/SQLStatement.h.
        (WebCore::SQLiteStatement::database):
        * platform/sql/SQLiteTransaction.cpp: Copied from platform/sql/SQLTransaction.cpp.
        (WebCore::SQLiteTransaction::SQLiteTransaction):
        (WebCore::SQLiteTransaction::~SQLiteTransaction):
        (WebCore::SQLiteTransaction::begin):
        (WebCore::SQLiteTransaction::commit):
        (WebCore::SQLiteTransaction::rollback):
        * platform/sql/SQLiteTransaction.h: Copied from platform/sql/SQLTransaction.h.
        * storage/Database.cpp:
        (WebCore::retrieveTextResultFromDatabase):
        (WebCore::setTextValueInDatabase):
        (WebCore::Database::performExecuteSql):
        (WebCore::Database::performGetTableNames):
        (WebCore::Database::executeSql):
        * storage/Database.h:
        * storage/DatabaseAuthorizer.h:
        * storage/DatabaseTracker.cpp:
        (WebCore::DatabaseTracker::fullPathForDatabase):
        (WebCore::DatabaseTracker::populateOrigins):
        (WebCore::DatabaseTracker::databaseNamesForOrigin):
        (WebCore::DatabaseTracker::addDatabase):
        * storage/DatabaseTracker.h:

2007-10-25  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Darin.

        http://bugs.webkit.org/show_bug.cgi?id=15650
        XML attribute nodes are not importable

        Tests: fast/dom/import-attribute-node.html
               fast/dom/import-document-fragment.html

        * dom/Document.cpp:
        (WebCore::Document::importNode): Implemented for Attribute and DocumentFragment nodes.

2007-10-25  Dan Bernstein  <mitz@apple.com>

        Reviewed by Dave Hyatt.

        - fix http://bugs.webkit.org/show_bug.cgi?id=15362
          <rdar://problem/5558715> Safari Crashes when opening a JS TreeGrid widget

        Test: fast/dynamic/insert-before-table-part-in-continuation.html

        * rendering/RenderFlow.cpp:
        (WebCore::RenderFlow::addChildWithContinuation): If beforeChild's
        parent is an anonymous table part, let the table figure out where to
        insert the new child.

2007-10-25  Alp Toker  <alp@atoker.com>

        Reviewed by Brady.

        http://bugs.webkit.org/show_bug.cgi?id=15686
        GtkLauncher aborts on launch due to uninitialized threading subsystem

        Re-enable database support in the GTK+ port, with a fix.

        * WebCore.pro:

2007-10-25  Jon Honeycutt  <jhoneycutt@apple.com>

        Reviewed by Steve.

        <rdar://5548217>: [NTS] Java 6 update 3 crashes Safari when loading a 
        java page

        Previous patch erroneously compared a path and a
        path-including-filename. This corrects that. It also caches the result
        of safariPluginsPath() and uses shell API funcs for determining filename
        and parent directory from a full path.

        * plugins/win/PluginDatabaseWin.cpp:
        (WebCore::safariPluginsPath): Cache return value. Use API functions to
        build the path
        (WebCore::PluginDatabaseWin::pluginForMIMEType): Compare again plugin's
        parent directory, not full path
        (WebCore::PluginDatabaseWin::pluginForExtension): Same
        * plugins/win/PluginPackageWin.cpp:
        (WebCore::PluginPackageWin::PluginPackageWin): Store parent directory
        * plugins/win/PluginPackageWin.h:
        (WebCore::PluginPackageWin::parentDirectory):
        * plugins/win/PluginStreamWin.cpp:
        (WebCore::PluginStreamWin::didReceiveData):

2007-10-25  Alp Toker  <alp@atoker.com>

        Unreviewed fix to make the GTK+ port run.

        http://bugs.webkit.org/show_bug.cgi?id=15686
        GtkLauncher aborts on launch due to uninitialized threading subsystem

        Disable database support until #15686 is fixed.

        * WebCore.pro:

2007-10-25  Simon Hausmann  <hausmann@kde.org>

        Reviewed by Lars.

        Fixed a crash in the Qt 4.4 based text iterators when they're called with a null string.

        * platform/qt/TextBreakIteratorQt.cpp:
        (WebCore::wordBreakIterator):
        (WebCore::characterBreakIterator):
        (WebCore::lineBreakIterator):
        (WebCore::sentenceBreakIterator):

2007-10-25  Holger Freyther  <zecke@selfish.org>

        Reviewed by Simon Hausmann <hausmann@kde.org>.

        * We need to set a != 0 status code for the fast/loader/xmlhttprequest-missing-file-exception.html
        * libxml2 has the semantic that when writing an empty string and finishing it will report an error. For QXmlStreamReader this is valid.
        * This is causing some regressions...
        

        * dom/XMLTokenizer.cpp:
        (WebCore::XMLTokenizer::XMLTokenizer):
        (WebCore::XMLTokenizer::write):
        (WebCore::XMLTokenizer::end):
        * dom/XMLTokenizer.h:

2007-10-25  Holger Freyther  <zecke@selfish.org>

        Reviewed by Simon Hausmann <hausmann@kde.org>.

        * fast/dom/onerror-img.html regressed due checking the JobStates because in case of error (e.g. not being able to connect) the job will no be started.
        * Use the error message from Qt. It might or might not be translated.

        * platform/network/qt/ResourceHandleQt.cpp:
        (WebCore::WebCoreSynchronousLoader::didFail):

2007-10-25  Holger Freyther  <zecke@selfish.org>

        Reviewed by Simon Hausmann <hausmann@kde.org>.

        * Implement our own queuing of network jobs to allow special handling of synchronous jobs. This makes us pass the fast/dom/xmlhttprequest-html-response-encoding.html test without a crash. Sync jobs will get a special treatment over the normals ones and in theory more than one sync job is supported.
        * This should be thread-safe besides QWebNetworkJob::{ref,deref}
        

        * platform/network/qt/ResourceHandleQt.cpp:
        (WebCore::ResourceHandle::loadResourceSynchronously):

2007-10-25  Alp Toker  <alp@atoker.com>

        Reviewed by Mark Rowe.

        Add support for list box theme colors and styled menu list buttons.

        Remove obsolete FIXMEs.

        * platform/gtk/RenderThemeGtk.cpp:
        (WebCore::RenderThemeGtk::RenderThemeGtk):
        (WebCore::RenderThemeGtk::paintCheckbox):
        (WebCore::RenderThemeGtk::paintRadio):
        (WebCore::RenderThemeGtk::paintButton):
        (WebCore::RenderThemeGtk::adjustMenuListStyle):
        (WebCore::RenderThemeGtk::paintMenuList):
        (WebCore::RenderThemeGtk::activeListBoxSelectionBackgroundColor):
        (WebCore::RenderThemeGtk::inactiveListBoxSelectionBackgroundColor):
        (WebCore::RenderThemeGtk::activeListBoxSelectionForegroundColor):
        (WebCore::RenderThemeGtk::inactiveListBoxSelectionForegroundColor):
        (WebCore::RenderThemeGtk::gtkTreeView):
        * platform/gtk/RenderThemeGtk.h:

2007-10-25  Eric Seidel  <eric@webkit.org>

        Reviewed by Geoff.

        * bindings/js/kjs_window.h: fix bogus comment, s/DOMNode/DOMObject/

2007-10-24  Eric Seidel  <eric@webkit.org>

        Reviewed by Maciej.
        
        Make Window subclass from JSGlobalObject (for a .5% win in Sunspider)
        http://bugs.webkit.org/show_bug.cgi?id=15681

        No test cases necessary, no functional changes.

        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/kjs_binding.cpp:
        (KJS::ScriptInterpreter::ScriptInterpreter):
        * bindings/js/kjs_binding.h:
        * bindings/js/kjs_proxy.cpp:
        (WebCore::KJSProxy::initScriptIfNeeded):
        * bindings/js/kjs_window.cpp:
        (KJS::Window::Window):
        * bindings/js/kjs_window.h:
        * bindings/objc/WebScriptObject.mm:
        (_didExecute):
        * bridge/mac/WebCoreScriptDebugger.mm:

2007-10-24  Adam Roben  <aroben@apple.com>

        Add font database initialization code to WebCore

        Reviewed by Ada.

        * WebCore.vcproj/WebCore.vcproj: Added FontDatabase.{cpp,h}.
        * platform/win/FontDatabase.cpp: Added.
        (WebCore::systemFontsDirectory):
        (WebCore::fontsPlistPath):
        (WebCore::systemHasFontsNewerThanFontsPlist):
        (WebCore::readFontPlist):
        (WebCore::populateFontDatabaseFromPlist):
        (WebCore::populateFontDatabaseFromFileSystem):
        (WebCore::writeFontDatabaseToPlist):
        (WebCore::populateFontDatabase): This is the only function callable
        from outside this file. It populates the font database once, either
        from the fonts plist, or from the filesystem (and then saves a new
        fonts plist).
        * platform/win/FontDatabase.h: Added.

2007-10-24  Justin Garcia  <justin.garcia@apple.com>

        Reviewed by Darin Adler.

        Correcting the fix for:
        <rdar://problem/5544856> 
        REGRESSION: After typing 2-byte text, undo only undoes one keystroke at a time
        
        Made removal of the previous composition part of the current Undo step in the 
        case where the new composition is the empty string, too.

        * editing/Editor.cpp:
        (WebCore::Editor::confirmComposition): Call the new TypingCommand::deleteSelection,
        which either has the currently open typing command delete the current selection, or
        opens a new typing command (of type DeleteSelection) if one is not already open.
        (WebCore::Editor::setComposition): Ditto.
        * editing/TypingCommand.cpp:
        (WebCore::TypingCommand::deleteSelection): Added.
        (WebCore::TypingCommand::doApply): Handle DeleteSelection.
        (WebCore::TypingCommand::deleteKeyPressed): Clarified which deleteSelection
        is called.
        (WebCore::TypingCommand::forwardDeleteKeyPressed): Ditto.
        (WebCore::TypingCommand::preservesTypingStyle): Handle DeleteSelection.
        * editing/TypingCommand.h:

2007-10-24  Sam Weinig  <sam@webkit.org>

        Build fix.

        * WebCore.vcproj/WebCore.vcproj:

2007-10-24  Alice Liu  <alice.liu@apple.com>

        Reviewed by Oliver.

        Fix <rdar://5410959>  editing/selection/drag-to-contenteditable-iframe.html fails on Windows
        
        * page/win/EventHandlerWin.cpp:
        (WebCore::EventHandler::passMouseMoveEventToSubframe):
        Some mouse move events are actually drags, which on mac return early from this function.
        Adding the same logic to its Windows equivalent.  

2007-10-24  Brady Eidson  <beidson@apple.com>

        Reviewed by Anders

        <rdar://5554130> DatabaseTracker.o has a global initializer

        Since DatabaseTracker is a singleton, it makes much more sense to keep the database path as a member variable.
        Now constructing the shared DatabaseTracker no longer implicitly opens it - It is only opened when the databases 
        path is set.
        
        * WebCore.vcproj/WebCore.vcproj: Copy WebCore/storage headers for WebKit build
        
        * storage/Database.cpp:
        (WebCore::Database::~Database): Remove bogus assertion
        
        * storage/DatabaseTracker.cpp:
        (WebCore::DatabaseTracker::DatabaseTracker): Does nothing now!  Move this code to openTrackerDatabase
        (WebCore::DatabaseTracker::setDatabasePath): Set the member variable, also closing/opening the database if needed
        (WebCore::DatabaseTracker::databasePath):
        (WebCore::DatabaseTracker::openTrackerDatabase): To open and validate the Databases db, moved from the c'tor
        (WebCore::DatabaseTracker::fullPathForDatabase): Return the member variable
        * storage/DatabaseTracker.h:

2007-10-24  David Hyatt  <hyatt@apple.com>

        Don't try to gap fill transformed selections.  Fix the invalidation of selection to use the clip to visible content
        code path so that it works with multi-column layouts and transforms.

        Reviewed by aroben

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::isSelectionRoot):
        (WebCore::RenderBlock::fillSelectionGaps):
        * rendering/RenderView.cpp:
        (WebCore::RenderView::setSelection):

2007-10-24  Eric Seidel  <eric@webkit.org>

        No review, I want to tickle the CIA bot to test changes,
        and took this as an opportunity to clean up some old change logs.

        * ChangeLog-2005-08-23: update email address
        * ChangeLog-2006-12-31: fix spelling mistakes

2007-10-24  Dan Bernstein  <mitz@apple.com>

        Reviewed by Oliver Hunt.

        - add "(anonymous)" to the renderName of anonymous table cells, rows and sections

        * rendering/RenderTableCell.h:
        (WebCore::RenderTableCell::renderName):
        * rendering/RenderTableRow.h:
        (WebCore::RenderTableRow::renderName):
        * rendering/RenderTableSection.h:
        (WebCore::RenderTableSection::renderName):

2007-10-24  Timothy Hatcher  <timothy@apple.com>

        Reviewed by Adam.

        Bug 15476: DOM tree fully expands some elements when arrowing up
        http://bugs.webkit.org/show_bug.cgi?id=15476

        Add a new expandTreeElementsWhenArrowing option to TreeOutline. This option
        is used only for the sidebar and search results.

        * page/inspector/inspector.js: Opt-in for the sidebar and search results.
        * page/inspector/treeoutline.js: Add expandTreeElementsWhenArrowing and pass
          this option to traverseNextTreeElement and traversePreviousTreeElement.

2007-10-24  Anders Carlsson  <andersca@apple.com>

        Reviewed by Geoff and Mitz.

        <rdar://problem/5493833>
        REGRESSION: ~5MB of image data leaked @ cuteoverload.com (often seen while browsing other sites, too)

        * bindings/js/kjs_binding.cpp:
        (KJS::ScriptInterpreter::markDOMNodesForDocument):
        If an image element that is currently loading an image is not in the document,
        it should still be marked.
        
        * bindings/js/kjs_html.cpp:
        (WebCore::ImageConstructorImp::construct):
        Force the document wrapper to be created.
        
        * html/HTMLImageElement.h:
        (WebCore::HTMLImageElement::haveFiredLoadEvent):
        New method which calls down to the image loader.
        
        * html/HTMLImageLoader.cpp:
        (WebCore::HTMLImageLoader::HTMLImageLoader):
        (WebCore::HTMLImageLoader::~HTMLImageLoader):
        (WebCore::HTMLImageLoader::setLoadingImage):
        (WebCore::HTMLImageLoader::dispatchLoadEvent):
        Remove code that's not needed anymore.
        
        * html/HTMLImageLoader.h:
        (WebCore::HTMLImageLoader::haveFiredLoadEvent):
        Make this public.

2007-10-23  Adam Roben  <aroben@apple.com>

        Move Windows safe file creation code into WebCore from WebPreferences

        Reviewed by Brady.

        * platform/FileSystem.h:
        * platform/win/FileSystemWin.cpp:
        (WebCore::safeCreateFile): Moved here from WebKit/win/WebPreferences.cpp.

2007-10-23  Adam Roben  <aroben@apple.com>

        Add methods to FileSystemWin to get some user profile directories

        These directories are used to hold things like preferences, caches,
        etc.

        Reviewed by Brady.

        * platform/FileSystem.h: Added new method declarations for Windows
        only.
        * platform/win/FileSystemWin.cpp:
        (WebCore::bundleName): Added.
        (WebCore::storageDirectory): Added.
        (WebCore::cachedStorageDirectory): Added.
        (WebCore::localUserSpecificStorageDirectory): Added. Returns the
        directory where WebKit should store any user-specific data that should
        stay local to the current machine (i.e., shouldn't be stored in a
        roaming profile).
        (WebCore::roamingUserSpecificStorageDirectory): Added. Returns the
        directory where WebKit should store any user-specific data that should
        move with the user from machine to machine (i.e., should be stored in
        a roaming profile).

2007-10-24  Alp Toker  <alp@atoker.com>

        Reviewed by Mark Rowe.

        http://bugs.webkit.org/show_bug.cgi?id=15659
        InlineTextBox does not setStrokeStyle() as needed

        GraphicsContextCairo workaround to support a GraphicsContextCG quirk:

        Save and restore the StrokeStyle manually.

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

2007-10-24  Julien Chaffraix  <julien.chaffraix@gmail.com>

        Reviewed by Darin.

        Patch for http://bugs.webkit.org/show_bug.cgi?id=15356
        Bug 15356: getResponseHeader and getAllResponseHeaders do not throw exceptions

        - getAllResponseHeaders and getResponseHeader throws INVALID_STATE_ERR exception as specified in the specification

        - Add the check to field-name production in getResponseHeader (call to isValidToken) and returns an empty string if the header is not valid (Opera and IE behaviour)

        - Updated XMLHttpRequest::responseMIMEType() to keep its behaviour

        Tests: http/tests/xmlhttprequest/xmlhttprequest-InvalidStateException-getAllRequestHeaders.html
               http/tests/xmlhttprequest/xmlhttprequest-InvalidStateException-getRequestHeader.html
               http/tests/xmlhttprequest/xmlhttprequest-invalidHeader-getRequestHeader.html

        * bindings/js/JSXMLHttpRequest.cpp:
        (KJS::JSXMLHttpRequestPrototypeFunction::callAsFunction):
        * xml/XMLHttpRequest.cpp:
        (WebCore::XMLHttpRequest::getAllResponseHeaders):
        (WebCore::XMLHttpRequest::getResponseHeader):
        (WebCore::XMLHttpRequest::responseMIMEType):
        * xml/XMLHttpRequest.h:

2007-10-24  Lars Knoll  <lars@trolltech.com>

        Reviewed by Simon.

        implement most of DragData.

        * platform/qt/DragDataQt.cpp:
        (WebCore::DragData::containsColor):
        (WebCore::DragData::containsFiles):
        (WebCore::DragData::asFilenames):
        (WebCore::DragData::containsPlainText):
        (WebCore::DragData::asPlainText):
        (WebCore::DragData::asColor):
        (WebCore::DragData::containsCompatibleContent):
        (WebCore::DragData::containsURL):

2007-10-24  Lars Knoll  <lars@trolltech.com>

        Reviewed by Simon.

        remove a stupid notImplemented() warning and implement PasteBoad::clear().

        * platform/qt/PasteboardQt.cpp:

2007-10-24  Lars Knoll  <lars@trolltech.com>

        Reviewed by Simon.

        implement Pasteboard::documentFragment(), and fix a mem leak.

        * platform/qt/PasteboardQt.cpp:
        (WebCore::Pasteboard::generalPasteboard):
        (WebCore::Pasteboard::documentFragment):

2007-10-24  Lars Knoll  <lars@trolltech.com>

        Reviewed by Simon.

        Simplify the PlatformKeyEvent constructor. No need to have an extra boolean for isKeyUp in there, as the QKeyEvent has the information.

        * platform/PlatformKeyboardEvent.h:
        * platform/qt/PlatformKeyboardEventQt.cpp:
        (WebCore::PlatformKeyboardEvent::PlatformKeyboardEvent):

2007-10-24  Lars Knoll  <lars@trolltech.com>

        Reviewed by Simon.

        use the new QTextBoundaryFinder class in Qt.

        * platform/qt/TextBoundaries.cpp:
        (WebCore::findNextWordFromIndex):
        (WebCore::findWordBoundary):
        * platform/qt/TextBreakIteratorQt.cpp:
        (WebCore::wordBreakIterator):
        (WebCore::characterBreakIterator):
        (WebCore::lineBreakIterator):
        (WebCore::sentenceBreakIterator):
        (WebCore::textBreakFirst):
        (WebCore::textBreakNext):
        (WebCore::textBreakPreceding):
        (WebCore::textBreakFollowing):
        (WebCore::textBreakCurrent):
        (WebCore::isTextBreak):

2007-10-24  Darin Adler  <darin@apple.com>

        Reviewed by Maciej.

        - http://bugs.webkit.org/show_bug.cgi?id=15657
          change static hash tables to use powers of two for speed

        * bindings/scripts/CodeGeneratorJS.pm: Updated to generate new format.

2007-10-24  Simon Hausmann  <hausmann@kde.org>

        Reviewed by Lars.

        Make the implementation of pathByAppendingComponent use QDir.

        * platform/qt/FileSystemQt.cpp:

2007-10-24  David Hyatt  <hyatt@apple.com>

        Make repainting work with transforms.

        Reviewed by John Sullivan

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

2007-10-23  Alp Toker  <alp@atoker.com>

        Reviewed by Maciej.

        http://bugs.webkit.org/show_bug.cgi?id=14412
        [GDK] Clipboard support

        Initial clipboard implementation for the GTK+ port.

        * platform/gtk/ClipboardGtk.cpp:
        (WebCore::Editor::newGeneralClipboard):
        * platform/gtk/PasteboardGtk.cpp:
        (WebCore::Pasteboard::generalPasteboard):
        (WebCore::Pasteboard::Pasteboard):
        (WebCore::Pasteboard::~Pasteboard):
        (WebCore::Pasteboard::writeSelection):
        (WebCore::Pasteboard::writeImage):
        (WebCore::Pasteboard::clear):
        (WebCore::Pasteboard::plainText):
        * platform/gtk/TemporaryLinkStubs.cpp:

2007-10-23  Timothy Hatcher  <timothy@apple.com>

        Reviewed by Adam.

        Fixes the Network panel so that it refreshes as needed.

        * page/inspector/ConsolePanel.js: Call the base class show() and hide() first.
        * page/inspector/NetworkPanel.js: Add refreshNeeded and refreshIfNeeded back. Ditto.

2007-10-23  Justin Garcia  <justin.garcia@apple.com>

        Reviewed by Oliver Hunt.

        <rdar://problem/5544856> 
        REGRESSION: After typing 2-byte text, undo only undoes one keystroke at a time
        
        No layout test for now because I'm having trouble getting Undo during a layout
        test to only undo the last Undo step, and I want to write a test that fails
        without the code change.

        * editing/Editor.cpp:
        (WebCore::Editor::confirmComposition): When we replace the previous composition,
        delete it with a sub-command of the command used to insert the new composition,
        instead of with a separate command.  No new code was added because insertText
        already deletes the current selection.
        (WebCore::Editor::setComposition): Ditto.

2007-10-23  Adam Roben  <aroben@apple.com>

        Fix the behavior of pathByAppendingComponent when path is empty

        We now use the Windows Shell API function PathAppendW instead of
        rolling our own broken implementation.

        Reviewed by Anders.

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

2007-10-23  Adele Peterson  <adele@apple.com>

        Reviewed by Darin.

        Fix for <rdar://problem/5543228> CrashTracer: [USER] 2 crashes in Safari at com.apple.WebCore: WebCore::HTMLInputElement::defaultEventHandler + 872

        Test: fast/forms/textfield-onchange-deletion.html

        * html/HTMLInputElement.cpp: (WebCore::HTMLInputElement::defaultEventHandler):
          Refetch the renderer since arbitrary JS code run during onchange can do anything, including destroying it.

2007-10-23  Timothy Hatcher  <timothy@apple.com>

        Reviewed by Sam Weinig.

        - Made seperate files for the various classes in ResourcePanel.js.
        - Broke up ResourcePanel.js and created seperate panel classes for different resource types.
        - Moved View code down to the Panel base-class.
        - Reduced code duplication in DatabasePanel.js by sub-classing from the new ResourcePanel.

        * page/inspector/DatabasePanel.js:
        * page/inspector/DocumentPanel.js: Added.
        * page/inspector/FontPanel.js: Added.
        * page/inspector/ImagePanel.js: Added.
        * page/inspector/Panel.js: Added.
        * page/inspector/PropertiesSection.js: Added.
        * page/inspector/Resource.js:
        * page/inspector/ResourcePanel.js:
        * page/inspector/SidebarPane.js: Added.
        * page/inspector/SourcePanel.js: Added.
        * page/inspector/inspector.css:
        * page/inspector/inspector.html:
        * page/inspector/inspector.js:

2007-10-23  Anders Carlsson  <andersca@apple.com>

        Correct the version #if check.
        
        * platform/sql/SQLDatabase.cpp:
        (WebCore::SQLDatabase::authorizerFunction):

2007-10-23  Jon Honeycutt  <jhoneycutt@apple.com>

        Reviewed by Anders.

        <rdar://5548217>: [NTS] Java 6 update 3 crashes Safari when loading a 
        java page

        It is possible to load Mozilla's Java plugin instead of our own, which
        can lead to a crash. The fix is to prefer plugins in our own Plugins
        directory when searching for a plugin.

        * plugins/win/PluginDatabaseWin.cpp:
        (WebCore::safariPluginsPath): Return the path to our own Plugins
        directory
        (WebCore::PluginDatabaseWin::defaultPluginPaths): Use new method
        safariPluginsPath()
        (WebCore::PluginDatabaseWin::pluginForMIMEType): If the plugin's path is
        our Plugins path, return this plugin. Otherwise, continue scanning the
        list of plugins
        (WebCore::PluginDatabaseWin::pluginForExtension): Same
        * plugins/win/PluginPackageWin.h:
        (WebCore::PluginPackageWin::path): Return this plugin's path

2007-10-23  Jasper Bryant-Greene  <m@ni.ac.nz>

        Reviewed by Darin.

        http://bugs.webkit.org/show_bug.cgi?id=15058
        Precedence fault in KeyEventGdk causes shift, control, alt etc to work incorrectly

        Corrected precendence fault which was causing Shift, Alt, Control and
        Meta to behave incorrectly on GTK.

        Coding style fix by Alp.

        * platform/gtk/KeyEventGtk.cpp:
        (WebCore::PlatformKeyboardEvent::PlatformKeyboardEvent):

2007-10-23  Sam Weinig  <sam@webkit.org>

        Reviewed by Tim Hatcher.

        Add resizing of the DOM view right sidebar.  This allows us to actually see the values now.

        * page/inspector/ResourcePanel.js:
        * page/inspector/inspector.css:
        * page/inspector/inspector.js:
        * page/inspector/utilities.js:

2007-10-23  David Hyatt  <hyatt@apple.com>

        Get basic hit testing right for transforms.

        Reviewed by ollliej

        * platform/graphics/AffineTransform.cpp:
        (WebCore::AffineTransform::mapPoint):
        * platform/graphics/AffineTransform.h:
        * rendering/InlineBox.cpp:
        (WebCore::InlineBox::nodeAtPoint):
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::nodeAtPoint):
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::paintLayer):
        (WebCore::RenderLayer::hitTest):
        (WebCore::RenderLayer::hitTestLayer):
        * rendering/RenderLayer.h:
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::hitTest):
        * rendering/RenderObject.h:

2007-10-23  Eric Seidel  <eric@webkit.org>

        Reviewed by Mark Rowe.

        Fix leaks seen on TOT from new font-face code.

        * ksvg2/svg/SVGFontFaceElement.cpp:
        (WebCore::SVGFontFaceElement::rebuildFontFace): use a stack allocated CSSProperty instead of mallocing

2007-10-23  Eric Seidel  <eric@webkit.org>

        Build fix only, no review.

        Sacrifice three virgin hours upon the altar of the heathen XCode gods
        and pray that our build troubles are finally over. :(

        * DerivedSources.make: add DOMSVGException.h
        * WebCore.xcodeproj/project.pbxproj: Remove DOMSVG*Interal.h files from "Copy Generated Headers" phase. Why?  Who knows.

2007-10-22  Steve Falkenburg  <sfalken@apple.com>

        Fix build.

        * plugins/win/PluginViewWin.cpp:

2007-10-22  Eric Seidel  <eric@webkit.org>

        Build fix only, no review.

        * WebCore.xcodeproj/project.pbxproj: re-add all DOMSVG headers to copy-files phase to make sure.

2007-10-22  Eric Seidel  <eric@webkit.org>

        Build fix only, no review.

        * WebCore.xcodeproj/project.pbxproj: make sure DOMSVGAnimateElement.h is copied into headers.

2007-10-22  Eric Seidel  <eric@webkit.org>

        Reviewed by Maciej.

        Fix build by properly exposing SVG font-face dom bindings.

        * DerivedSources.make:
        * WebCore.vcproj/WebCore.vcproj: add font-face files to build
        * WebCore.xcodeproj/project.pbxproj: add missing DOM bindings files
        * bindings/js/JSSVGElementWrapperFactory.cpp:
        * bindings/objc/DOM.mm:
        (WebCore::createElementClassMap):
        * bindings/objc/DOMSVG.h:
        * ksvg2/svg/SVGDefinitionSrcElement.idl: inherit from SVGElement

2007-10-22  Mark Rowe  <mrowe@apple.com>

        Gtk build fix.

        * WebCore.pro:

2007-10-22  Darin Adler  <darin@apple.com>

        - a first cut at fixing the Qt and GTK builds

        * WebCore.pro: Add new .idl and .cpp files.
        * DerivedSources.make: Re-sorted.

2007-10-22  Eric Seidel  <eric@webkit.org>

        Reviewed by hyatt.

        Implement <font-face> and friends for SVG.
        http://bugs.webkit.org/show_bug.cgi?id=10652

        * DerivedSources.make:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSSVGElementWrapperFactory.cpp:
        * dom/Document.cpp:
        (WebCore::Document::mappedElementSheet):
        (WebCore::Document::recalcStyleSelector):
        * dom/Document.h:
        * ksvg2/scripts/make_names.pl:
        * ksvg2/svg/SVGDefinitionSrcElement.cpp: Added.
        (WebCore::SVGDefinitionSrcElement::SVGDefinitionSrcElement):
        (WebCore::SVGDefinitionSrcElement::~SVGDefinitionSrcElement):
        (WebCore::SVGDefinitionSrcElement::childrenChanged):
        * ksvg2/svg/SVGDefinitionSrcElement.h: Added.
        * ksvg2/svg/SVGDefinitionSrcElement.idl: Added.
        * ksvg2/svg/SVGFontFaceElement.cpp: Added.
        (WebCore::SVGFontFaceElement::SVGFontFaceElement):
        (WebCore::SVGFontFaceElement::~SVGFontFaceElement):
        (WebCore::cssPropertyIdForName):
        (WebCore::mapAttributeToCSSProperty):
        (WebCore::cssPropertyIdForSVGAttributeName):
        (WebCore::SVGFontFaceElement::parseMappedAttribute):
        (WebCore::SVGFontFaceElement::rebuildFontFace):
        (WebCore::SVGFontFaceElement::childrenChanged):
        * ksvg2/svg/SVGFontFaceElement.h: Added.
        * ksvg2/svg/SVGFontFaceElement.idl: Added.
        * ksvg2/svg/SVGFontFaceFormatElement.cpp: Added.
        (WebCore::SVGFontFaceFormatElement::SVGFontFaceFormatElement):
        (WebCore::SVGFontFaceFormatElement::~SVGFontFaceFormatElement):
        (WebCore::SVGFontFaceFormatElement::childrenChanged):
        * ksvg2/svg/SVGFontFaceFormatElement.h: Added.
        * ksvg2/svg/SVGFontFaceFormatElement.idl: Added.
        * ksvg2/svg/SVGFontFaceNameElement.cpp: Added.
        (WebCore::SVGFontFaceNameElement::SVGFontFaceNameElement):
        (WebCore::SVGFontFaceNameElement::~SVGFontFaceNameElement):
        (WebCore::SVGFontFaceNameElement::srcValue):
        * ksvg2/svg/SVGFontFaceNameElement.h: Added.
        * ksvg2/svg/SVGFontFaceNameElement.idl: Added.
        * ksvg2/svg/SVGFontFaceSrcElement.cpp: Added.
        (WebCore::SVGFontFaceSrcElement::SVGFontFaceSrcElement):
        (WebCore::SVGFontFaceSrcElement::~SVGFontFaceSrcElement):
        (WebCore::SVGFontFaceSrcElement::srcValue):
        (WebCore::SVGFontFaceSrcElement::childrenChanged):
        * ksvg2/svg/SVGFontFaceSrcElement.h: Added.
        * ksvg2/svg/SVGFontFaceSrcElement.idl: Added.
        * ksvg2/svg/SVGFontFaceUriElement.cpp: Added.
        (WebCore::SVGFontFaceUriElement::SVGFontFaceUriElement):
        (WebCore::SVGFontFaceUriElement::~SVGFontFaceUriElement):
        (WebCore::SVGFontFaceUriElement::srcValue):
        (WebCore::SVGFontFaceUriElement::childrenChanged):
        * ksvg2/svg/SVGFontFaceUriElement.h: Added.
        * ksvg2/svg/SVGFontFaceUriElement.idl: Added.
        * ksvg2/svg/svgtags.in:

2007-10-22  Jon Honeycutt  <jhoneycutt@apple.com>

        Reviewed by Anders.

        <rdar://5548217>: [NTS] Java 6 update 3 crashes Safari when loading a 
        java page

        We purposefully do not destroy our Java VM when its reference count
        reaches 0, but we were unloading our JavaPlugin.dll when its reference
        count reached 0, which lost the reference to the VM. This led to our
        process trying to create a new VM the next time a page using Java was
        loaded, and the JNI spec states that a single process is not allowed to
        create more than one VM. The fix is to avoid unloading the Java plugin
        via our PluginQuirkDontUnloadPlugin. 

        * plugins/win/PluginViewWin.cpp:
        (WebCore::PluginViewWin::determineQuirks):

2007-10-22  David Hyatt  <hyatt@apple.com>

        Fix for bug 15624, make transforms work properly with opacity.

        Make sure a unitless 0 is allowed as an angle argument to rotation/skew.

        Reviewed by Mitz Pettel

        fast/transforms/transforms-with-opacity.html
        fast/transforms/skew-with-unitless-zero.html

        * css/CSSParser.cpp:
        (WebCore::CSSParser::validUnit):
        * rendering/RenderLayer.cpp:
        (WebCore::transparencyClipBox):
        (WebCore::RenderLayer::beginTransparencyLayers):
        (WebCore::RenderLayer::paintLayer):
        (WebCore::RenderLayer::calculateClipRects):
        * rendering/RenderLayer.h:
        (WebCore::RenderLayer::transform):

2007-10-22  Adam Roben  <aroben@apple.com>

        Windows build fix

        * WebCore.vcproj/WebCore.vcproj: Copy header files from platform/sql.
        * page/Page.cpp: Touched to force the header files to be copied.

2007-10-22  Nikolas Zimmermann  <zimmermann@kde.org>

        Reviewed by Simon.

        Move textPath related SVGChar data in it's own structure SVGCharOnPath.
        Store a pointer to that datastructure inside SVGChar, instead of 4 floats & one bool.

        Saves space for the common case. And allows me to add more data (another float) to support
        glyph-orientation-* on textPath later on...

        * rendering/SVGCharacterLayoutInfo.cpp:
        (WebCore::SVGChar::characterTransform):
        * rendering/SVGCharacterLayoutInfo.h:
        * rendering/SVGRootInlineBox.cpp:
        (WebCore::SVGRootInlineBoxPaintWalker::chunkPortionCallback):
        (WebCore::SVGRootInlineBox::buildLayoutInformationForTextBox):

2007-10-22  Alp Toker  <alp@atoker.com>

        Reviewed by Nikolas Zimmermann.

        Implement more GraphicsContextCairo stubs.

        Remove a hack "to work around no current point bug" that was breaking
        canvas tests.

        Fix warnings.

        * platform/graphics/cairo/CairoPath.h:
        (WebCore::CairoPath::CairoPath):
        * platform/graphics/cairo/GraphicsContextCairo.cpp:
        (WebCore::GraphicsContext::addInnerRoundedRectClip):
        (WebCore::GraphicsContext::strokeRect):
        * platform/graphics/cairo/PathCairo.cpp:
        (WebCore::Path::isEmpty):
        * platform/graphics/svg/cairo/SVGPaintServerGradientCairo.cpp:
        (WebCore::SVGPaintServerGradient::setup):
        * platform/graphics/svg/cairo/SVGPaintServerSolidCairo.cpp:
        (WebCore::SVGPaintServerSolid::setup):

2007-10-22  Simon Hausmann  <hausmann@kde.org>

        Reviewed by Nikolas.

        Fix compilation from a clean build with the database feature disabled.
        JSCustomVersionChangeCallback.cpp doesn't actually need the SQL header file, just ScriptInterpreter.

        * bindings/js/JSCustomVersionChangeCallback.cpp:
        * page/InspectorController.cpp:

2007-10-22  Andrew Wellington  <proton@wiretapped.net>

        Reviewed by Mark Rowe.

        Fix for local database support after r26879
        Ensure that ENABLE_DATABASE and ENABLE_ICONDATABASE are correctly set

        * Configurations/WebCore.xcconfig:
        * WebCore.pro:
        * WebCore.vcproj/build-generated-files.sh:

2007-10-22  Simon Hausmann  <hausmann@kde.org>

        Reviewed by Lars.

        Disable the Database feature for the qmake build for now.

        * WebCore.pro:

2007-10-22  Simon Hausmann  <hausmann@kde.org>

        Reviewed by Lars.

        Make disabling the database feature (ENABLE_DATABASE=0) work by
        placing various #ifdefs into the code and making the compilation of
        some files optional.

        * WebCore.pro:
        * dom/Document.cpp:
        (WebCore::Document::~Document):
        (WebCore::Document::defaultEventHandler):
        * dom/Document.h:
        * page/DOMWindow.cpp:
        * page/DOMWindow.h:
        * page/DOMWindow.idl:
        * page/InspectorController.cpp:
        (WebCore::InspectorController::windowScriptObjectAvailable):
        (WebCore::InspectorController::populateScriptResources):
        (WebCore::InspectorController::clearDatabaseScriptResources):
        (WebCore::InspectorController::didCommitLoad):
        * page/InspectorController.h:

2007-10-22  Alp Toker  <alp@atoker.com>

        Reviewed by Mark Rowe.

        http://bugs.webkit.org/show_bug.cgi?id=15611
        [GTK] Text selection behaviour different in Debug and Release builds

        http://bugs.webkit.org/show_bug.cgi?id=15578
        [GTK] Text editor caret does not blink

        Never allow control to reach the end of non-void functions.

        Return more sensible values, or in some cases, nulls.

        * page/gtk/EventHandlerGtk.cpp:
        (WebCore::isKeyboardOptionTab):
        (WebCore::EventHandler::tabsToAllControls):
        (WebCore::EventHandler::eventActivatedView):

2007-10-22  Holger Freyther  <zecke@selfish.org>

        Reviewed by Simon Hausmann <hausmann@kde.org>.

        Implement ResourceHandle::loadResourceSynchronously using ResourceHandle and a special ResourceHandleClient. This approach has the possible danger of reentrancy.

        * platform/network/qt/ResourceHandleQt.cpp:
        (WebCore::WebCoreSynchronousLoader::resourceResponse):
        (WebCore::WebCoreSynchronousLoader::resourceError):
        (WebCore::WebCoreSynchronousLoader::data):
        (WebCore::WebCoreSynchronousLoader::WebCoreSynchronousLoader):
        (WebCore::WebCoreSynchronousLoader::didReceiveResponse):
        (WebCore::WebCoreSynchronousLoader::didReceiveData):
        (WebCore::WebCoreSynchronousLoader::didFinishLoading):
        (WebCore::WebCoreSynchronousLoader::didFail):
        (WebCore::WebCoreSynchronousLoader::waitForCompletion):
        (WebCore::ResourceHandle::loadResourceSynchronously):

2007-10-22  Holger Hans Peter Freyther <zecke@selfish.org>

        Reviewed by Lars Knoll <lars@trolltech.com>.

        Style fix. It is allowed to attempt to delete 0.

        * platform/qt/ClipboardQt.cpp:

2007-10-22  Holger Hans Peter Freyther <zecke@selfish.org>

        Reviewed by Lars Knoll <lars@trolltech.com>.

        Make it actually localizable....

        * platform/qt/Localizations.cpp:
        (WebCore::submitButtonDefaultLabel):
        (WebCore::inputElementAltText):
        (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):

2007-10-22  Holger Hans Peter Freyther <zecke@selfish.org>

        Reviewed by Lars Knoll <lars@trolltech.com>.

        Adjust the code to obey the Coding Style.

        * platform/qt/Localizations.cpp:
        (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::AXWebAreaText):
        (WebCore::AXLinkText):
        (WebCore::AXListMarkerText):
        (WebCore::AXImageMapText):
        (WebCore::AXHeadingText):
        (WebCore::unknownFileSizeText):

2007-10-22 Holger Hans Peter Freyther <zecke@selfish.org>

        Reviewed by Lars Knoll <lars@trolltech.com>.

        Return a non empty string in more functions.

        * platform/qt/Localizations.cpp:
        (WebCore::contextMenuItemTagShowSpellingPanel):

2007-10-22  Holger Hans Peter Freyther <zecke@selfish.org>

        Reviewed by Lars Knoll <lars@trolltech.com>.

        Shrink the TemporaryLinkStubs and move the
        Frame::setNeedsReapplyStyles stub to FrameQt.cpp

        * page/qt/FrameQt.cpp:
        (WebCore::Frame::setNeedsReapplyStyles):
        * platform/qt/TemporaryLinkStubs.cpp:

2007-10-22  Holger Freyther  <zecke@selfish.org>

        Reviewed by Lars Knoll <lars@trolltech.com>.

        Implement the WebCore::fileSize function. The
        implementation assumes that QFileInfo will cache
        the result of the stat so that info.size() and
        info.exists() use the same stat result.

        * platform/qt/FileSystemQt.cpp:
        (WebCore::deleteFile):
        * platform/qt/TemporaryLinkStubs.cpp:

2007-10-21  Alp Toker  <alp@atoker.com>

        Reviewed by Mark Rowe.

        Use the portable GLib time function.

        Use event timestamps rather than the current time where available.

        Rename SharedTimerLinux.cpp since it isn't Linux-specific.

        * WebCore.pro:
        * platform/gtk/MouseEventGtk.cpp:
        (WebCore::PlatformMouseEvent::PlatformMouseEvent):
        * platform/gtk/SystemTimeGtk.cpp: Added.
        (WebCore::currentTime):
        * platform/gtk/SharedTimerGtk.cpp: Copied from platform/gtk/SharedTimerLinux.cpp.
        * platform/gtk/SharedTimerLinux.cpp: Removed.

2007-10-22  David Hyatt  <hyatt@apple.com>

        Fix for 15596, regression from my transform changes.  Preserve null checks on the clip rects calls for parent(),
        since the method is called on orphaned layers.  This is not very well understood.

        Reviewed by eric

        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::calculateClipRects):
        (WebCore::RenderLayer::calculateRects):

2007-10-21  Mark Rowe  <mrowe@apple.com>

        Reviewed by Alp.

        http://bugs.webkit.org/show_bug.cgi?id=15575
        Bug 15575: [GTK] Implement threading using GThread

        * WebCore.pro: Remove ThreadingPthreads.cpp from the Gtk build and link against libgthreads.
        * loader/icon/IconDatabase.cpp: Initialize threading before the mutex is created to be compatible with gthreads.
        (WebCore::iconDatabase):
        (WebCore::IconDatabase::open):
        * platform/Threading.h:
        * platform/gtk/ThreadingGtk.cpp: Threading implementation in terms of GThread, based heavily on the pthreads implementation.
        (WebCore::initializeThreading):
        (WebCore::threadMapMutex):
        (WebCore::threadMap):
        (WebCore::establishIdentifierForThread):
        (WebCore::threadForIdentifier):
        (WebCore::clearThreadForIdentifier):
        (WebCore::createThread):
        (WebCore::waitForThreadCompletion):
        (WebCore::detachThread):
        (WebCore::Mutex::Mutex):
        (WebCore::Mutex::~Mutex):
        (WebCore::Mutex::lock):
        (WebCore::Mutex::tryLock):
        (WebCore::Mutex::unlock):
        (WebCore::ThreadCondition::ThreadCondition):
        (WebCore::ThreadCondition::~ThreadCondition):
        (WebCore::ThreadCondition::wait):
        (WebCore::ThreadCondition::signal):
        (WebCore::ThreadCondition::broadcast):
        * storage/Database.cpp:
        (WebCore::Database::Database): Initialize threading when Database is used so that it will be initialized even
        if the icon database is compiled out

2007-10-21  Mark Rowe  <mrowe@apple.com>

        Build fix.

        * ksvg2/css/SVGCSSStyleSelector.cpp: Use fabsf when dealing with a float to prevent the
        implicit conversion warning.

2007-10-21  Alp Toker  <alp@atoker.com>

        Reviewed by Mark Rowe.

        Implement spelling and grammar mistake underlining with Pango/Cairo.

        This change does not add any actual support for spelling or grammar
        checking to any port.

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

2007-10-21  Alp Toker  <alp@atoker.com>

        Reviewed by Mark Rowe.

        Cairo canvas fixes:

        Fix a refcounting issue leading to leaks and crashes on canvas
        content.

        Delegate memory management of canvas images to Cairo.

        Mark unhandled conditions with notImplemented() instead of silently
        ignoring them.

        * html/CanvasRenderingContext2D.cpp:
        (WebCore::CanvasRenderingContext2D::drawImage):
        * html/CanvasStyle.cpp:
        (WebCore::CanvasStyle::applyStrokeColor):
        * html/CanvasStyle.h:
        * html/HTMLCanvasElement.cpp:
        (WebCore::HTMLCanvasElement::HTMLCanvasElement):
        (WebCore::HTMLCanvasElement::~HTMLCanvasElement):
        (WebCore::HTMLCanvasElement::reset):
        (WebCore::HTMLCanvasElement::paint):
        (WebCore::HTMLCanvasElement::createDrawingContext):
        (WebCore::HTMLCanvasElement::createPlatformImage):

2007-10-21  Nikolas Zimmermann  <zimmermann@kde.org>

        Reviewed by Eric.

        Handle glyph-orientation-vertical / glyph-orientation-horizontal SVG CSS properties.

        The SVG layouting code itself doesn't handle these properties yet,
        it's just about recognizing them in the SVG CSS engine.

        * ksvg2/css/SVGCSSComputedStyleDeclaration.cpp:
        (WebCore::CSSComputedStyleDeclaration::getSVGPropertyCSSValue):
        * ksvg2/css/SVGCSSParser.cpp:
        (WebCore::CSSParser::parseSVGValue):
        * ksvg2/css/SVGCSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::applySVGProperty):
        * ksvg2/css/SVGRenderStyle.h:
        (WebCore::SVGRenderStyle::InheritedFlags::operator==):
        (WebCore::SVGRenderStyle::InheritedFlags::operator!=):
        (WebCore::SVGRenderStyle::setBitDefaults):
        * ksvg2/css/SVGRenderStyleDefs.h:

2007-10-21  Christian Dywan  <christian@twotoasts.de>

        Reviewed by Alp.

        http://bugs.webkit.org/show_bug.cgi?id=15589
        Use glib's path separator on gtk

        * platform/gtk/FileSystemGtk.cpp:
        (WebCore::pathByAppendingComponent):

2007-10-21  Dan Bernstein  <mitz@apple.com>

        Reviewed by Dave Hyatt.

        - fix http://bugs.webkit.org/show_bug.cgi?id=15259
          <rdar://problem/5499902> REGRESSION: Text overflows when using word spacing and centering (affects myspace.com music videos page)

        Test: fast/text/word-space.html

        * rendering/RenderBlock.cpp:
        (WebCore::stripTrailingSpace): Added word-spacing to the width of the
        space being stripped out.
        * rendering/RenderText.cpp:
        (WebCore::RenderText::trimmedPrefWidths): Changed handling of
        leading space. Since Font::width includes leading space width but not
        leading word spacing, this method needs to either remove the width of a
        space character or add word spacing,
        depending on stripFrontSpaces. 
        (WebCore::RenderText::calcPrefWidths): Corrected the check for adding
        trailing word spacing so that it would work in the case where the last
        space is ignored.
        * rendering/bidi.cpp:
        (WebCore::RenderBlock::computeHorizontalPositionsForLine): Changed to
        actually add word spacing to the total width.

2007-10-20  David Hyatt  <hyatt@apple.com>

        Land support for the transform CSS property.  Basic painting now works properly. There are many open issues
        that will have to be covered by individual bugs.

        Reviewed by olliej

        * css/CSSParser.cpp:
        (WebCore::CSSParser::validUnit):
        (WebCore::CSSParser::parseTransform):
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::RenderLayer):
        (WebCore::RenderLayer::~RenderLayer):
        (WebCore::RenderLayer::updateLayerPositions):
        (WebCore::RenderLayer::updateTransform):
        (WebCore::transparencyClipBox):
        (WebCore::RenderLayer::beginTransparencyLayers):
        (WebCore::RenderLayer::paintLayer):
        (WebCore::RenderLayer::calculateClipRects):
        (WebCore::RenderLayer::calculateRects):
        (WebCore::RenderLayer::childrenClipRect):
        (WebCore::RenderLayer::selfClipRect):
        (WebCore::RenderLayer::intersectsDamageRect):
        (WebCore::RenderLayer::boundingBox):
        * rendering/RenderLayer.h:
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::containingBlock):
        (WebCore::RenderObject::container):
        * rendering/RenderStyle.cpp:
        (WebCore::RenderStyle::applyTransform):
        * rendering/RenderStyle.h:
        (WebCore::TransformOperation::isScaleOperation):
        (WebCore::TransformOperation::isRotateOperation):
        (WebCore::TransformOperation::isSkewOperation):
        (WebCore::TransformOperation::isTranslateOperation):
        (WebCore::TransformOperation::isMatrixOperation):
        (WebCore::ScaleTransformOperation::isScaleOperation):
        (WebCore::RotateTransformOperation::isRotateOperation):
        (WebCore::SkewTransformOperation::isSkewOperation):
        (WebCore::TranslateTransformOperation::isTranslateOperation):
        (WebCore::MatrixTransformOperation::isMatrixOperation):
        * rendering/RenderTableRow.h:
        (WebCore::RenderTableRow::requiresLayer):
        * rendering/RenderTreeAsText.cpp:
        (WebCore::writeLayers):

2007-10-20  Timothy Hatcher  <timothy@apple.com>

        Reviewed by Adam.

        Add basic @font-face to the Web Inspector.

        * page/InspectorController.cpp:
        (WebCore::InspectorResource::type): Check for CachedResource::FontResource.
        * page/inspector/Resource.js: Add support for Font types and font preview in the icon.
        * page/inspector/ResourcePanel.js: Show a font preview for font resources.
        * page/inspector/inspector.css: Style for the font preview and font icon.
        * page/inspector/inspector.js: Add font mime types.

2007-10-20  Sam Weinig  <sam@webkit.org>

        Reviewed by Mark Rowe.

        Fixes:
            - http://bugs.webkit.org/show_bug.cgi?id=14393
              Column on the left side of the Web Inspector should have a smaller minimum width for resizing
            - http://bugs.webkit.org/show_bug.cgi?id=14394
              Left pane of the Web Inspector "shakes" when resizing it to maximum width

        * page/inspector/inspector.js: Change the constraint logic to only enforce a 100px min-width
          and window.innerWidth - 100 max-width for the sidebar.  The change also makes the viewbuttons
          move with the sidebar.

2007-10-20  Dan Bernstein  <mitz@apple.com>

        Reviewed by Dave Hyatt.

        - fix http://bugs.webkit.org/show_bug.cgi?id=15208
          display:table causes the collapsed text to show at a different position when expanded

        Test: fast/table/insert-before-anonymous-ancestors.html

        * rendering/RenderTable.cpp:
        (WebCore::RenderTable::addChild): Rolled out r11579. I think whatever
        that change was supposed to accomplish has since been done in other
        places in the code.

2007-10-20  Mark Rowe  <mrowe@apple.com>

        Reviewed by Dave Hyatt.

        Fix http://bugs.webkit.org/show_bug.cgi?id=15584
        Bug 15584: REGRESSION(r26696): GtkLauncher segfaults on WebCore::WidthIterator::advance

        * platform/Font.cpp:
        (WebCore::Font::glyphDataForCharacter): If the fallback page exists but does not have a
        glyph for the character, fall back to the missing glyph data rather than returning an
        invalid GlyphData.

2007-10-20  Jasper Bryant-Greene  <m@ni.ac.nz>

        Reviewed by Maciej.

        Changed the hard-coded scroll delta in WheelEventGtk from 120 to 0.25,
        as suggested by George Wright in #15108 (which this patch will
        resolve).

        This gives a more sane scrolling behaviour, rather than the
        jumping to the end or start of the document as occurred previously.

        * platform/gtk/WheelEventGtk.cpp:
        (WebCore::PlatformWheelEvent::PlatformWheelEvent):

2007-10-20  Alp Toker  <alp@atoker.com>

        Reviewed by Eric.

        Support text boundary detection.
        Move TextBoundariesWin.cpp to platform/ since it's portable and useful.
        Split out and implement some TemporaryLinkStubs.

        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * platform/TextBoundariesICU.cpp: Copied from WebCore/platform/win/TextBoundariesWin.cpp.
        * platform/gtk/Language.cpp: Added.
        (WebCore::defaultLanguage):
        * platform/gtk/TemporaryLinkStubs.cpp:
        * platform/gtk/TextBreakIteratorInternalICUGtk.cpp: Added.
        (WebCore::currentTextBreakLocaleID):
        * platform/win/TextBoundariesWin.cpp: Removed.

2007-10-20  Mark Rowe  <mrowe@apple.com>

        Reviewed by Tim Hatcher.

        Workaround for http://bugs.webkit.org/show_bug.cgi?id=15574
        Bug 15574: Web Inspector doesn't work with the new Database feature

        The executeSql callback is executed in the security domain of the web page that owns the database,
        while the inspector's window object is in the callback functions scope chain.  This is leading to a
        security violation when the callback attempts to access "document".  We can work around this by
        ensuring that "document" can be found in the scope chain before the window object.

        * page/inspector/DatabasePanel.js:

2007-10-20  Darin Adler  <darin@apple.com>

        Reviewed by Maciej.

        - http://bugs.webkit.org/show_bug.cgi?id=15567
          speed up hashing const char* by removing call to strlen

        This includes one other fix as well. Both were from a day where I did some
        profiling to find hot spots when running the page load test.

        * platform/StringImpl.cpp:
        (WebCore::StringImpl::computeHash): Compute the hash without calling strlen.
        Also change the argument names to not confusingly use m_ prefixes.
        (WebCore::StringImpl::createStrippingNull): Added a faster case for strings that
        don't have null.

2007-10-20  Mark Rowe  <mrowe@apple.com>

        Reviewed by Alp.

        Gtk changes needed to enable HTML 5 client-side database storage.

        * WebCore.pro: Have Gtk use ThreadingPthreads.cpp.
        * platform/pthreads/ThreadingPthreads.cpp: Include errno so that EDEADLK and EBUSY are available.

2007-10-20  Mark Rowe  <mrowe@apple.com>

        Reviewed by Alp.

        Implement callOnMainThread for Gtk+ via a one-shot zero-delay timer that will be dispatched
        from the main event loop.

        * WebCore.pro:
        * platform/gtk/TemporaryLinkStubs.cpp:
        * platform/gtk/ThreadingGtk.cpp: Added.
        (WebCore::callFunctionOnMainThread):
        (WebCore::callOnMainThread):

2007-10-20  Nikolas Zimmermann  <zimmermann@kde.org>

        Reviewed by Eric.

        Fix non-functional display="inline" / display="none" for SVG text.

        Fixes: svg/W3C-SVG-1.1/animate-elem-39-t.svg (display="inline" support)
        Fixes: svg/batik/text/textProperties2.svg (display="inline/none" support)
        Fixes: svg/carto.net/tabgroup.svg (display="none" support, stray content before layouting)
        
        * css/svg.css: Remove "important" flag on text/foreignObject display: block property
        * rendering/RenderSVGBlock.cpp:
        (WebCore::RenderSVGBlock::setStyle):

2007-10-20  Mark Rowe  <mrowe@apple.com>

        Reviewed by Alp.

        Replace #ifdef'd code with the appropriate use of a forwarding header.

        * ForwardingHeaders/kjs/array_instance.h: Added.
        * bindings/js/JSDatabaseCustom.cpp:

2007-10-20  Nikolas Zimmermann  <zimmermann@kde.org>

        Reviewed by Oliver.

        Add support for 'kerning' property in SVG text layout code.
        Support all textLength/lengthAdjust modes on normal text & textPaths.

        Support letter & word spacing on textPath.
        Fix text selection when any spacing (letter/word/kerning) is involved.

        Fixes: http://bugs.webkit.org/show_bug.cgi?id=15571
        Fixes: svg/batik/text/textOnPathSpaces.svg (spacing)
               svg/batik/text/textLayout.svg (kerning support)
               svg/text/text-spacing-01-b.svg (text selection)

        * platform/Font.cpp:
        (WebCore::WidthIterator::advance):
        * platform/TextStyle.h:
        (WebCore::TextStyle::TextStyle):
        (WebCore::TextStyle::spacingDisabled):
        (WebCore::TextStyle::disableSpacing):
        * rendering/SVGCharacterLayoutInfo.cpp:
        (WebCore::SVGCharacterLayoutInfo::SVGCharacterLayoutInfo):
        (WebCore::SVGCharacterLayoutInfo::nextPathLayoutPointAndAngle):
        (WebCore::SVGCharacterLayoutInfo::setInPathLayout):
        (WebCore::SVGCharacterLayoutInfo::addLayoutInformation):
        (WebCore::SVGChar::characterTransform):
        * rendering/SVGCharacterLayoutInfo.h:
        (WebCore::SVGTextChunkLayoutInfo::SVGTextChunkLayoutInfo):
        * rendering/SVGRootInlineBox.cpp:
        (WebCore::closeTextChunk):
        (WebCore::calculateKerning):
        (WebCore::SVGRootInlineBox::placeBoxesHorizontally):
        (WebCore::svgTextStyleForInlineTextBox):
        (WebCore::calculateTextAnchorShiftForTextChunk):
        (WebCore::applyTextAnchorToTextChunk):
        (WebCore::calculateTextLengthCorrectionForTextChunk):
        (WebCore::applyTextLengthCorrectionToTextChunk):
        (WebCore::SVGRootInlineBox::computePerCharacterLayoutInformation):
        (WebCore::SVGRootInlineBox::buildLayoutInformation):
        (WebCore::SVGRootInlineBox::buildLayoutInformationForTextBox):
        (WebCore::SVGRootInlineBox::buildTextChunks):
        (WebCore::SVGRootInlineBox::layoutTextChunks):
        * rendering/SVGRootInlineBox.h:

2007-10-20  Rodney Dawes  <dobey@wayofthemonkey.com>

        Reviewd by Darin.

        http://bugs.webkit.org/show_bug.cgi?id=15563
        Fix conflict with X11 Window type in WebCore

        * WebCore/bindings/js/JSDocumentCustom.cpp:
        * WebCore/bindings/js/JSHTMLDocumentCustom.cpp:
        * WebCore/bindings/js/JSHTMLFrameSetElementCustom.cpp:
        * WebCore/bindings/js/kjs_dom.cpp:
        * WebCore/bindings/js/kjs_events.cpp:
        * WebCore/bindings/js/kjs_proxy.cpp:
        * WebCore/history/CachedPage.cpp:
        * WebCore/page/Chrome.cpp:
        * WebCore/page/Frame.cpp:

2007-10-20  Simon Hausmann  <hausmann@kde.org>

        Build fix, not reviewed.

        Fix the Qt build by adding the two missing FileSystem functions.

        * platform/qt/FileSystemQt.cpp:
        (WebCore::makeAllDirectories):
        (WebCore::pathByAppendingComponent):

2007-10-19  Alp Toker  <alp@atoker.com>

        Reviewed by Oliver.

        GTK+ build fix enabling the new local database storage feature.
        There is also a prospective Qt build fix.

        * WebCore.pro:
        * bindings/js/JSDatabaseCustom.cpp:
        * platform/gtk/FileSystemGtk.cpp:
        (WebCore::pathByAppendingComponent):
        (WebCore::makeAllDirectories):

2007-10-19  Andrew Wellington  <proton@wiretapped.net>

        Reviewed by Brady Eidson.

        Mac build fix.

        * WebCore.xcodeproj/project.pbxproj:

2007-10-19  Alp Toker  <alp@atoker.com>

        Reviewed by Oliver.

        Use platform colors for text selection.
        Update the cache when the GTK style is changed.

        * platform/gtk/RenderThemeGtk.cpp:
        (WebCore::RenderThemeGtk::platformActiveSelectionBackgroundColor):
        (WebCore::RenderThemeGtk::platformInactiveSelectionBackgroundColor):
        (WebCore::RenderThemeGtk::platformActiveSelectionForegroundColor):
        (WebCore::RenderThemeGtk::platformInactiveSelectionForegroundColor):
        (WebCore::RenderThemeGtk::gtkStyleSet):
        (WebCore::RenderThemeGtk::gtkEntry):
        * platform/gtk/RenderThemeGtk.h:

2007-10-19  Adele Peterson  <adele@apple.com>

        Reviewed by Beth.

        Fix for: <rdar://problem/5518461> REGRESSION (2.0.4-3): Popup arrows are missing in small popups at homedepot.com

        Test: fast/forms/menulist-no-overflow.html

        * rendering/RenderMenuList.cpp: (WebCore::RenderMenuList::setStyle): Don't allow overflow on menu lists.

2007-10-19  Anders Carlsson  <andersca@apple.com>

        Reviewed by Brady.

        Move some SQL-related classes to platform/sql.
        
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * loader/icon/SQLDatabase.cpp: Removed.
        * loader/icon/SQLDatabase.h: Removed.
        * loader/icon/SQLStatement.cpp: Removed.
        * loader/icon/SQLStatement.h: Removed.
        * loader/icon/SQLTransaction.cpp: Removed.
        * loader/icon/SQLTransaction.h: Removed.
        * platform/sql/SQLDatabase.cpp: Copied from loader/icon/SQLDatabase.cpp.
        * platform/sql/SQLDatabase.h: Copied from loader/icon/SQLDatabase.h.
        * platform/sql/SQLStatement.cpp: Copied from loader/icon/SQLStatement.cpp.
        * platform/sql/SQLStatement.h: Copied from loader/icon/SQLStatement.h.
        * platform/sql/SQLTransaction.cpp: Copied from loader/icon/SQLTransaction.cpp.
        * platform/sql/SQLTransaction.h: Copied from loader/icon/SQLTransaction.h.

2007-10-19  Anders Carlsson  <andersca@apple.com>

        Reviewed by Adam.

        Update to match the latest version of the spec. Now, executeSQL takes an array
        of SQL parameters instead of them being passed as arguments.
        
        * bindings/js/JSDatabaseCustom.cpp:
        (WebCore::JSDatabase::executeSql):
        * page/inspector/DatabasePanel.js:
        * storage/Database.idl:

2007-10-19  Brady Eidson  <beidson@apple.com>

        Reviewed by Tim

        Tiger's SQLite doesn't support CREATE TABLE IF NOT EXISTS :(

        * storage/Database.cpp:
        (WebCore::Database::performOpenAndVerify):
        * storage/DatabaseTracker.cpp:
        (WebCore::DatabaseTracker::DatabaseTracker):

2007-10-19  Anders Carlsson  <andersca@apple.com>

        Release build fix.
        
        * WebCore.vcproj/WebCore.vcproj:

2007-10-19  Brady Eidson  <beidson@apple.com>

        Remove stray printfs

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

2007-10-19  Anders Carlsson  <andersca@apple.com>

        Reviewed by Brady.

        Apparently the Win32 pthreads impl we use does not allow unlocking a mutex that has not
        already been locked, so lock the mutex first.
        
        * storage/DatabaseThread.cpp:
        (WebCore::DatabaseThread::databaseThread):

2007-10-19  Brady Eidson  <beidson@apple.com>

        Better build fix

        * loader/icon/SQLDatabase.cpp:
        (WebCore::SQLDatabase::authorizerFunction):  Definite works by 3.3.13

2007-10-19  Brady Eidson  <beidson@apple.com>

        Build fix

        * loader/icon/SQLDatabase.cpp:
        (WebCore::SQLDatabase::authorizerFunction): I don't know *when* these constants were
          added to SQLite, but I know they were by 3.4.0

2007-10-19  Brady Eidson  <beidson@apple.com>
        Reviewed by Anders

        Windows specific changes, as well as renaming Queue -> Deque

        * ForwardingHeaders/wtf/Deque.h: Added.
        * ForwardingHeaders/wtf/Queue.h: Removed.
        * platform/win/FileSystemWin.cpp:
        (WebCore::fileSize):
        (WebCore::fileExists):
        (WebCore::deleteFile):
        (WebCore::pathByAppendingComponent):
        (WebCore::fileSystemRepresentation):
        (WebCore::makeAllDirectories):
        (WebCore::homeDirectoryPath):
        * storage/Database.h:
        * storage/DatabaseThread.cpp:
        (WebCore::DatabaseThread::documentGoingAway):
        (WebCore::DatabaseThread::databaseGoingAway):
        (WebCore::DatabaseThread::dispatchNextTaskIdentifier):
        (WebCore::DatabaseThread::scheduleTask):
        (WebCore::DatabaseThread::scheduleImmediateTask):
        * storage/DatabaseThread.h:

2007-10-19  Brady Eidson <beidson@apple.com>

        Reviewed by Tim and Anders

        Preliminary support for HTML5 local database storage (http://www.whatwg.org/specs/web-apps/current-work/)

        The specification is still in flux but the fundamentals are pretty solid and we can start using and testing 
        this implementation even while filing bugs to track changes in the spec as it becomes more final

        There are some implementation details in this patch that seem unused or useless, but they remain in place 
        while the spec is in flux and might go one way or another.

        * platform/Logging.cpp: Add StorageAPI logging channel
        * platform/Logging.h:

        * storage/Database.cpp: Added.
        (WebCore::Database::databaseInfoTableName):
        (WebCore::databaseVersionKey):
        (WebCore::Database::openDatabase): C++ version of the window.openDatabase() javascript API
        (WebCore::Database::Database):
        (WebCore::Database::~Database):
        (WebCore::Database::openAndVerifyVersion):
        (WebCore::retrieveTextResultFromDatabase):
        (WebCore::Database::getVersionFromDatabase):
        (WebCore::setTextValueInDatabase):
        (WebCore::Database::setVersionInDatabase):
        (WebCore::Database::databaseThreadGoingAway): May be removed in the future
        (WebCore::Database::disableAuthorizer): For internal (WebInspector) use to get around the authorizer's restrictions
        (WebCore::Database::enableAuthorizer):
        (WebCore::Database::guidForOriginAndName): Candidate for refactoring and/or moving to the database tracker.  
          The GUID for each database identifier is currently for tracking the database version, but might be rescoped in the future
        (WebCore::Database::resetAuthorizer):
        (WebCore::Database::performPolicyChecks): Currently, the only post-executeSql policy check planned is the origin size usage 
        (WebCore::Database::scheduleDatabaseCallback):
        (WebCore::Database::performOpenAndVerify): 
        (WebCore::Database::performChangeVersion):
        (WebCore::Database::performExecuteSql):
        (WebCore::Database::performCloseTransaction):
        (WebCore::Database::performGetTableNames):
        (WebCore::Database::version): C++ version of the javascript API
        (WebCore::Database::changeVersion): Ditto
        (WebCore::Database::executeSql): Ditto
        (WebCore::Database::closeTransaction): Ditto
        (WebCore::Database::tableNames): For internal (WebInspector) use
        (WebCore::Database::deliverAllPendingCallbacks):
        (WebCore::Database::deliverPendingCallbacks):
        * storage/Database.h: Added.
        (WebCore::Database::databaseDebugName): For debug logging purposes
        * storage/Database.idl: Added.

        * storage/DatabaseAuthorizer.cpp: Added.
          The DatabaseAuthorizer is used to both prevent the script from doing "illegal" things in sql as well as
          tracking when effects certain sql statements might have (such as increasing the size of the database)
        (WebCore::DatabaseAuthorizer::DatabaseAuthorizer):
        (WebCore::DatabaseAuthorizer::reset):
        (WebCore::DatabaseAuthorizer::createTable):
        (WebCore::DatabaseAuthorizer::createTempTable):
        (WebCore::DatabaseAuthorizer::dropTable):
        (WebCore::DatabaseAuthorizer::dropTempTable):
        (WebCore::DatabaseAuthorizer::allowAlterTable):
        (WebCore::DatabaseAuthorizer::createIndex):
        (WebCore::DatabaseAuthorizer::createTempIndex):
        (WebCore::DatabaseAuthorizer::dropIndex):
        (WebCore::DatabaseAuthorizer::dropTempIndex):
        (WebCore::DatabaseAuthorizer::createTrigger):
        (WebCore::DatabaseAuthorizer::createTempTrigger):
        (WebCore::DatabaseAuthorizer::dropTrigger):
        (WebCore::DatabaseAuthorizer::dropTempTrigger):
        (WebCore::DatabaseAuthorizer::createVTable):
        (WebCore::DatabaseAuthorizer::dropVTable):
        (WebCore::DatabaseAuthorizer::allowDelete):
        (WebCore::DatabaseAuthorizer::allowInsert):
        (WebCore::DatabaseAuthorizer::allowUpdate):
        (WebCore::DatabaseAuthorizer::allowRead):
        (WebCore::DatabaseAuthorizer::allowAnalyze):
        (WebCore::DatabaseAuthorizer::allowPragma):
        (WebCore::DatabaseAuthorizer::allowAttach):
        (WebCore::DatabaseAuthorizer::allowDetach):
        (WebCore::DatabaseAuthorizer::allowFunction):
        (WebCore::DatabaseAuthorizer::disable):
        (WebCore::DatabaseAuthorizer::enable):
        (WebCore::DatabaseAuthorizer::denyBasedOnTableName): Don't allow access to the __WebKit meta info table as
          it should be invisible to scripts
        * storage/DatabaseAuthorizer.h: Added.
        (WebCore::DatabaseAuthorizer::lastActionWasInsert):
        (WebCore::DatabaseAuthorizer::lastActionIncreasedSize):

        * storage/DatabaseCallback.cpp: Added.
          Generic item to queue up for callbacks on the main thread for database activities that take place on 
          a secondary thread
        (WebCore::DatabaseChangeVersionCallback::DatabaseChangeVersionCallback):
        (WebCore::DatabaseChangeVersionCallback::performCallback):
        (WebCore::DatabaseExecuteSqlCallback::DatabaseExecuteSqlCallback):
        (WebCore::DatabaseExecuteSqlCallback::performCallback):
        * storage/DatabaseCallback.h: Added.
        (WebCore::DatabaseCallback::~DatabaseCallback):
        (WebCore::DatabaseChangeVersionCallback::~DatabaseChangeVersionCallback):
        (WebCore::DatabaseExecuteSqlCallback::~DatabaseExecuteSqlCallback):

        * storage/DatabaseTask.h: Added.
          Generic work-item to be queued up on the background database thread
        (WebCore::DatabaseTask::isComplete):
        (WebCore::DatabaseOpenTask::exceptionCode):
        (WebCore::DatabaseOpenTask::openSuccessful):
        (WebCore::DatabaseTableNamesTask::tableNames):
        * storage/DatabaseTask.cpp: Added.
        (WebCore::DatabaseTask::DatabaseTask):
        (WebCore::DatabaseTask::~DatabaseTask):
        (WebCore::DatabaseTask::performTask):
        (WebCore::DatabaseTask::lockForSynchronousScheduling): Used when the main thread needs this task accomplished 
          synchronously
        (WebCore::DatabaseTask::waitForSynchronousCompletion):

        (WebCore::DatabaseOpenTask::DatabaseOpenTask):
        (WebCore::DatabaseOpenTask::doPerformTask):

        (WebCore::DatabaseExecuteSqlTask::DatabaseExecuteSqlTask):
        (WebCore::DatabaseExecuteSqlTask::doPerformTask):

        (WebCore::DatabaseChangeVersionTask::DatabaseChangeVersionTask):
        (WebCore::DatabaseChangeVersionTask::doPerformTask):

        (WebCore::DatabaseTableNamesTask::DatabaseTableNamesTask):
        (WebCore::DatabaseTableNamesTask::doPerformTask):

        * storage/DatabaseThread.cpp: Added.
          The current design is that each Document will have its own DatabaseThread.  This makes scripts on each
          individual document more response at the cost of adding more threads and potentially creating concurrency
          issues when the same database is open twice from two different documents
        (WebCore::DatabaseThread::DatabaseThread):
        (WebCore::DatabaseThread::~DatabaseThread):
        (WebCore::DatabaseThread::start):
        (WebCore::DatabaseThread::documentGoingAway): Called to shut the thread down when the document is destroyed
        (WebCore::DatabaseThread::databaseGoingAway): Remove all pending tasks for this database
        (WebCore::DatabaseThread::databaseThreadStart):
        (WebCore::DatabaseThread::databaseThread):
        (WebCore::DatabaseThread::dispatchNextTaskIdentifier):
        (WebCore::DatabaseThread::scheduleTask):
        (WebCore::DatabaseThread::scheduleImmediateTask): Schedule a task that gets to "cut to the front of the line" when
          the main thread requires a task be performed synchronously
        (WebCore::DatabaseThread::wakeWorkThread):
        * storage/DatabaseThread.h: Added.

        * storage/DatabaseTracker.cpp: Added.
          The DatabaseTracker is the master management of all databases.  It will keep track of the filename for a given
          unique database, keep track of the total disk usage per-origin, and policys per database/origin
        (WebCore::DatabaseTracker::setDatabasePath):
        (WebCore::DatabaseTracker::databasePath):
        (WebCore::DatabaseTracker::tracker):
        (WebCore::DatabaseTracker::DatabaseTracker):
        (WebCore::DatabaseTracker::fullPathForDatabase):
        (WebCore::DatabaseTracker::populateOrigins):
        (WebCore::DatabaseTracker::origins):
        (WebCore::DatabaseTracker::databaseNamesForOrigin):
        (WebCore::DatabaseTracker::addDatabase):
        (WebCore::DatabaseTracker::deleteAllDatabases):
        (WebCore::DatabaseTracker::deleteAllDatabasesForOrigin):
        * storage/DatabaseTracker.h: Added.

        * storage/SQLCallback.h: Added. C++ version of the javascript executeSql() callback
        (WebCore::SQLCallback::~SQLCallback):
        * storage/SQLCallback.idl: Added.

        * storage/SQLResultSet.cpp: Added. C++ version of the javascript SQLResultSet object
        (WebCore::SQLResultSet::SQLResultSet):
        (WebCore::SQLResultSet::insertId):
        (WebCore::SQLResultSet::rowsAffected):
        (WebCore::SQLResultSet::errorCode):
        (WebCore::SQLResultSet::error):
        (WebCore::SQLResultSet::rows):
        (WebCore::SQLResultSet::setInsertId):
        (WebCore::SQLResultSet::setRowsAffected):
        (WebCore::SQLResultSet::setErrorCode):
        (WebCore::SQLResultSet::setErrorMessage):
        * storage/SQLResultSet.h: Added.
        * storage/SQLResultSet.idl: Added.

        * storage/SQLResultSetRowList.cpp: Added. C++ version of the javascript SQLResultSetRowList object
        (WebCore::SQLResultSetRowList::length):
        * storage/SQLResultSetRowList.h: Added.
        (WebCore::SQLResultSetRowList::columnNames):
        (WebCore::SQLResultSetRowList::values):
        (WebCore::SQLResultSetRowList::addColumn):
        (WebCore::SQLResultSetRowList::addResult):
        * storage/SQLResultSetRowList.idl: Added.

        * storage/VersionChangeCallback.h: Added. C++ version of the javascript changeVersion() callback
        (WebCore::VersionChangeCallback::~VersionChangeCallback):
        * storage/VersionChangeCallback.idl: Added.

2007-10-19  Brady Eidson <beidson@apple.com>

        Reviewed by Oliver + Same

        Forwarding header for the new wtf/Queue.h

        * ForwardingHeaders/wtf/Queue.h: Added.

2007-10-19  Anders Carlsson <beidson@apple.com>

        Reviewed by Sam Weinig

        Most of the Javascript binding support for the Storage API

        * bindings/js/JSCustomSQLCallback.cpp: Added.
        (WebCore::JSCustomSQLCallback::JSCustomSQLCallback):
        (WebCore::JSCustomSQLCallback::handleEvent):
        * bindings/js/JSCustomSQLCallback.h: Added.
                Add JSCustomSQLCallback which is an SQLCallback implementation that dispatches
                handleEvent to a JS function or a JS object with a handleEvent function.

        * bindings/js/JSCustomVersionChangeCallback.cpp: Added.
        (WebCore::JSCustomVersionChangeCallback::JSCustomVersionChangeCallback):
        (WebCore::JSCustomVersionChangeCallback::handleEvent):
        * bindings/js/JSCustomVersionChangeCallback.h: Added.
                Add JSCustomSQLCallback which is an SQLCallback implementation that dispatches
                handleEvent to a JS function or a JS object with a handleEvent function.

        * bindings/js/JSDatabaseCustom.cpp: Added.
        (WebCore::JSDatabase::executeSql):
                Custom implementation of executeSql that takes an array of parameters.
                
        (WebCore::JSDatabase::changeVersion):
                Custom implementation of changeVersion.
                
        * bindings/js/JSSQLResultSetRowListCustom.cpp: Added.
        (WebCore::JSSQLResultSetRowList::item):
                Custom method that returns a JS object that corresponds to a given row in the database.

        * bindings/scripts/CodeGeneratorJS.pm:

        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::openDatabase):
        * page/DOMWindow.h:
        * page/DOMWindow.idl:
                Add openDatabase implementation.

2007-10-19  Brady Eidson <beidson@apple.com>

        Reviewed by Oliver

        Added tons of utility to the FileSystem abstractions, including moving
        some stuff over from IconDatabase

        * platform/FileSystem.h:

        * platform/cf/FileSystemCF.cpp: Added.
        (WebCore::fileSystemRepresentation):

        * platform/mac/FileSystemMac.mm:

        * platform/posix/FileSystemPOSIX.cpp: Added.
        (WebCore::fileExists):
        (WebCore::deleteFile):
        (WebCore::fileSize):
        (WebCore::pathByAppendingComponent):
        (WebCore::makeAllDirectories):

2007-10-19  Timothy Hatcher  <timothy@apple.com>

        Reviewed by Adam Roben

        Preliminary Web Inspector support for the Storage API
        (This patch does not include the support artwork)

        * page/InspectorController.cpp:
        (WebCore::InspectorDatabaseResource::InspectorDatabaseResource):
        (WebCore::InspectorDatabaseResource::setScriptObject):
        (WebCore::databaseTableNames): Return the table names for a Database object.
        (WebCore::InspectorController::setWindowVisible):
        (WebCore::InspectorController::windowScriptObjectAvailable):
        (WebCore::InspectorController::populateScriptResources):
        (WebCore::InspectorController::addDatabaseScriptResource): Add the script object for the database.
        (WebCore::InspectorController::removeDatabaseScriptResource): Remove the script object for the database.
        (WebCore::InspectorController::clearDatabaseScriptResources): Remove all the database resources.
        (WebCore::InspectorController::didCommitLoad): Call clearDatabaseScriptResources().
        (WebCore::InspectorController::didOpenDatabase): Make a new InspectorDatabaseResource and add it to m_databaseResources.
        * page/InspectorController.h:
        * page/inspector/Database.js: Added.
        * page/inspector/DatabasePanel.js: Added.
        * page/inspector/ResourceCategory.js: Make resource categories assume less about the resource.
        * page/inspector/inspector.css: Add styles for the database panel.
        * page/inspector/inspector.html: Include DatabasePanel.js
        * page/inspector/inspector.js: Support for adding and removing Database resources.

2007-10-19  Brady Eidson <beidson@apple.com>

        Reviewed by Tim Hatcher

        Added support for Chrome prompts required by the Storage API

        * page/Chrome.cpp:
        (WebCore::Chrome::runDatabaseSizeLimitPrompt):
        * page/Chrome.h:
        * page/ChromeClient.h:
        * platform/graphics/svg/SVGImageEmptyClients.h:

2007-10-19  Brady Eidson <beidson@apple.com>

        Contributions and Review by Anders

        Various SQLite tweaks in preparation for the storage API

        * loader/icon/SQLDatabase.cpp:
        (WebCore::SQLDatabase::~SQLDatabase):
        (WebCore::SQLDatabase::authorizerFunction): Static callback from sqlite for authorizer functions
        (WebCore::SQLDatabase::setAuthorizer):
        (WebCore::SQLDatabase::lock):
        (WebCore::SQLDatabase::unlock):
        * loader/icon/SQLDatabase.h:

        * loader/icon/SQLStatement.cpp:
        (WebCore::SQLStatement::prepare): Switch to prepare16_v2
        (WebCore::SQLStatement::bindDouble): Added
        (WebCore::SQLStatement::bindValue): Bind a wrapped SQLValue object (described later)
        (WebCore::SQLStatement::bindParameterCount): Accessor to the sqlite3 API for validating statements
        * loader/icon/SQLStatement.h:
        (WebCore::SQLStatement::isPrepared):

        * platform/sql/SQLAuthorizer.cpp: Added.  Fully virtual interface to implement your own SQLite authorizer
        * platform/sql/SQLAuthorizer.h: Added.
        (WebCore::SQLAuthorizer::~SQLAuthorizer):
        (WebCore::SQLAuthorizer::createTable):
        (WebCore::SQLAuthorizer::createTempTable):
        (WebCore::SQLAuthorizer::dropTable):
        (WebCore::SQLAuthorizer::dropTempTable):
        (WebCore::SQLAuthorizer::allowAlterTable):
        (WebCore::SQLAuthorizer::createIndex):
        (WebCore::SQLAuthorizer::createTempIndex):
        (WebCore::SQLAuthorizer::dropIndex):
        (WebCore::SQLAuthorizer::dropTempIndex):
        (WebCore::SQLAuthorizer::createTrigger):
        (WebCore::SQLAuthorizer::createTempTrigger):
        (WebCore::SQLAuthorizer::dropTrigger):
        (WebCore::SQLAuthorizer::dropTempTrigger):
        (WebCore::SQLAuthorizer::createView):
        (WebCore::SQLAuthorizer::createTempView):
        (WebCore::SQLAuthorizer::dropView):
        (WebCore::SQLAuthorizer::dropTempView):
        (WebCore::SQLAuthorizer::createVTable):
        (WebCore::SQLAuthorizer::dropVTable):
        (WebCore::SQLAuthorizer::allowDelete):
        (WebCore::SQLAuthorizer::allowInsert):
        (WebCore::SQLAuthorizer::allowUpdate):
        (WebCore::SQLAuthorizer::allowTransaction):
        (WebCore::SQLAuthorizer::allowSelect):
        (WebCore::SQLAuthorizer::allowRead):
        (WebCore::SQLAuthorizer::allowAttach):
        (WebCore::SQLAuthorizer::allowDetach):
        (WebCore::SQLAuthorizer::allowReindex):
        (WebCore::SQLAuthorizer::allowAnalyze):
        (WebCore::SQLAuthorizer::allowFunction):

        * platform/sql/SQLValue.cpp: Added.  Contains a value for a SQLite database that can be one of a few types.  
          For now, just a String or a double
        (WebCore::SQLValue::SQLValue):
        (WebCore::SQLValue::string):
        (WebCore::SQLValue::number):
        * platform/sql/SQLValue.h: Added.
        (WebCore::SQLValue::):
        (WebCore::SQLValue::SQLValue):
        (WebCore::SQLValue::type):

2007-10-19  Brady Eidson <beidson@apple.com>

        Reviewed by Maciej

        Changed IconDatabase over to use new FileSystem apis

        * loader/icon/IconDatabase.cpp:
        (WebCore::IconDatabase::open):

2007-10-19  David Hyatt  <hyatt@apple.com>

        Fix for ebay parser crash.

        Reviewed by Beth

        fast/invalid/table-residual-style-crash.html added as a test

        * html/HTMLParser.cpp:
        (WebCore::HTMLParser::handleResidualStyleCloseTagAcrossBlocks):

2007-10-19  Sam Weinig  <sam@webkit.org>

        Fix Windows, Qt and GTK builds.

        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:

2007-10-19  Sam Weinig  <sam@webkit.org>

        Reviewed by Darin.

        Encapsulate the same origin check into the new SecurityOrigin class.

        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/kjs_window.cpp:
        (KJS::Window::isSafeScript):
        * dom/Document.cpp:
        (WebCore::Document::Document):
        (WebCore::Document::defaultEventHandler):
        * dom/Document.h:
        (WebCore::Document::securityOrigin):
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::begin):
        (WebCore::FrameLoader::setOpener):
        * loader/FrameLoader.h:
        * platform/SecurityOrigin.cpp: Added.
        (WebCore::SecurityOrigin::SecurityOrigin):
        (WebCore::SecurityOrigin::clear):
        (WebCore::SecurityOrigin::isEmpty):
        (WebCore::SecurityOrigin::setForFrame):
        (WebCore::SecurityOrigin::setDomainFromDOM):
        (WebCore::SecurityOrigin::allowsAccessFrom):
        (WebCore::SecurityOrigin::isSecureTransitionTo):
        * platform/SecurityOrigin.h: Added.

2007-10-19  Simon Hausmann  <hausmann@kde.org>

        Fix the Qt/Windows build: Added missing FontSelector.h include.

        * platform/qt/FontQt.cpp:

2007-10-19  Simon Hausmann  <hausmann@kde.org>

        Reviewed by Lars.

        Qt/Windows build fix: Threading.h uses int32_t but doesn't include stdint.h.

        * platform/Threading.h:

2007-10-19  Simon Hausmann  <hausmann@kde.org>

        Reviewed by Lars.

        Fix the Qt/Windows build, don't use cat but use the perl print trick
        instead.

        * WebCore.pro:

2007-10-18  Justin Garcia  <justin.garcia@apple.com>

        Reviewed by Kevin McCullough.

        <rdar://problem/5483526> 
        GoogleDocs: A hang occurs when applying list styling to a selection containing a table and line breaks

        * editing/TextIterator.cpp:
        (WebCore::TextIterator::exitNode): For selection preservation, we must emit a character
        between every VisiblePosition.  We weren't emitting a space after some tables, because
        we won't try to emit a space if shouldEmitNewlineAFterNode is true, even if no newline
        was emitted.

2007-10-18  Dan Bernstein  <mitz@apple.com>

        Reviewed by Adam Roben.

        - fix <rdar://problem/5313523>
        REGRESSION(Leopard): http/tests/incremental/slow-utf8-text.pl fails on Leopard

        * platform/network/mac/ResourceResponseMac.mm:
        (WebCore::ResourceResponse::doUpdateResourceResponse): Work around
        <rdar://problem/5321972> by testing for the case of a response
        with a MIME type of application/octet-stream and a Content-Type header
        starting with text/plain and setting the MIME type to text/plain in
        that case.

2007-10-18  Mark Rowe  <mrowe@apple.com>

        Fix the no-SVG build.

        * css/CSSPrimitiveValueMappings.h: Move the CSSPrimitiveValue implementations for
        LineCap, LineJoin and WindRule inside #if ENABLE(SVG).

2007-10-18  Darin Adler  <darin@apple.com>

        Reviewed by Anders.

        - some small tweaks to the threading implementation

        I had trouble building on Windows. Either the problem went away by itself
        or one of these changes fixed it.

        * platform/Threading.h: Eliminated the use of friend, and shared a single
        declaration for the initializeThreading function.

        * platform/pthreads/ThreadingPthreads.cpp: (WebCore::ThreadCondition::wait):
        Call impl() here.

        * platform/win/ThreadingWin.cpp: Got rid of two globals here with static
        constructors. Also added a typedef for the type of the function queue.
        (WebCore::functionQueueMutex): Added function.
        (WebCore::functionQueue): Ditto.
        (WebCore::callFunctionsOnMainThread): Use functions instead of using the
        globals directly.
        (WebCore::callOnMainThread): Ditto.

        * css/CSSParser.cpp: Had to touch this file to make things build.

2007-10-18  Adam Roben  <aroben@apple.com>

        Fix <rdar://5547462> Need to copy Inspector resources in Production builds

        I also added an excludes file for the xcopy command to avoid copying
        .svn folders.

        Reviewed by Geoff.

        * WebCore.vcproj/WebCore.make: Make sure we copy the Inspector
        resources.
        * WebCore.vcproj/WebCore.vcproj: Pass /exclude:xcopy.excludes to
        xcopy.
        * WebCore.vcproj/xcopy.excludes: Added.

2007-10-18  Darin Adler  <darin@apple.com>

        Reviewed by Sam.

        - fix http://bugs.webkit.org/show_bug.cgi?id=15541
          REGRESSION (r26616): prompt with one argument uses the literal "undefined" as default reply

        * page/DOMWindow.idl: Add ConvertUndefinedOrNullToNullString back for defaultValue.

2007-10-18  Nikolas Zimmermann  <zimmermann@kde.org>

        Build fix. Not reviewed.

        Hopefully fix win build by including wtf/MathExtras.h.

        * platform/graphics/svg/cg/SVGPaintServerGradientCg.cpp:

2007-10-18  Dan Bernstein  <mitz@apple.com>

        Reviewed by Nikolas Zimmermann.

        - fix http://bugs.webkit.org/show_bug.cgi?id=15367
          Assertion failure inspecting a document including soft hyphen code (0xad)

        Test: fast/text/word-break-soft-hyphen.html

        * rendering/RenderText.cpp:
        (WebCore::RenderText::calcPrefWidths): Changed to treat soft hyphens as 
        word boundaries. This fixes the bug and is consistent with the fact that
        run rounding does occur at soft hyphens.

2007-10-18  Nikolas Zimmermann  <zimmermann@kde.org>

        Reviewed by Anders.

        Fix last layout test failure seen on buildbot "trunk-mac-ppc-release".
        Problem: "svg/custom/mask-excessive-malloc.svg -> crashed"

        Clamp any ImageBuffer allocation within SVG to the RenderView's visibleSize
        to avoid excessive mallocs (in the testcase above 1000000x1000000)

        * ksvg2/svg/SVGMaskElement.cpp:
        (WebCore::SVGMaskElement::drawMaskerContent):
        * ksvg2/svg/SVGPatternElement.cpp:
        (WebCore::SVGPatternElement::buildPattern):
        * platform/graphics/svg/cg/SVGPaintServerGradientCg.cpp:
        (WebCore::SVGPaintServerGradient::teardown):
        (WebCore::SVGPaintServerGradient::setup):
        * platform/graphics/svg/cg/SVGResourceMaskerCg.mm:
        (WebCore::SVGResourceMasker::applyMask):
        * rendering/SVGRenderSupport.cpp:
        (WebCore::clampImageBufferSizeToViewport):
        * rendering/SVGRenderSupport.h:

2007-10-18  Alexey Proskuryakov  <ap@webkit.org>

        Windows build fix.

        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::applyProperty): Add braces around cases that have local variables now.

2007-10-18  Alexey Proskuryakov  <ap@webkit.org>

        Release build fix.

        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::applyProperty): 

2007-10-18  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Darin.

        Split most of CSSPrimitiveValue enum mapping out of CSSComputedStyleDeclaration::getPropertyCSSValue()
        and CSSStyleSelector::applyProperty() (and their SVG counterparts). This should make the code more readable.

        * WebCore.xcodeproj/project.pbxproj:
        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::getPositionOffsetValue):
        (WebCore::CSSComputedStyleDeclaration::getPropertyCSSValue):
        * css/CSSPrimitiveValue.cpp:
        (WebCore::CSSPrimitiveValue::CSSPrimitiveValue):
        (WebCore::CSSPrimitiveValue::init):
        * css/CSSPrimitiveValue.h:
        (WebCore::CSSPrimitiveValue::CSSPrimitiveValue):
        * css/CSSPrimitiveValueMappings.h: Added.
        (WebCore::CSSPrimitiveValue::CSSPrimitiveValue):
        (WebCore::CSSPrimitiveValue::operator EBorderStyle):
        (WebCore::CSSPrimitiveValue::operator CompositeOperator):
        (WebCore::CSSPrimitiveValue::operator EAppearance):
        (WebCore::CSSPrimitiveValue::operator EBackgroundBox):
        (WebCore::CSSPrimitiveValue::operator EBackgroundRepeat):
        (WebCore::CSSPrimitiveValue::operator EBoxAlignment):
        (WebCore::CSSPrimitiveValue::operator EBoxDirection):
        (WebCore::CSSPrimitiveValue::operator EBoxLines):
        (WebCore::CSSPrimitiveValue::operator EBoxOrient):
        (WebCore::CSSPrimitiveValue::operator ECaptionSide):
        (WebCore::CSSPrimitiveValue::operator EClear):
        (WebCore::CSSPrimitiveValue::operator ECursor):
        (WebCore::CSSPrimitiveValue::operator EDisplay):
        (WebCore::CSSPrimitiveValue::operator EEmptyCell):
        (WebCore::CSSPrimitiveValue::operator EFloat):
        (WebCore::CSSPrimitiveValue::operator EKHTMLLineBreak):
        (WebCore::CSSPrimitiveValue::operator EListStylePosition):
        (WebCore::CSSPrimitiveValue::operator EListStyleType):
        (WebCore::CSSPrimitiveValue::operator EMarginCollapse):
        (WebCore::CSSPrimitiveValue::operator EMarqueeBehavior):
        (WebCore::CSSPrimitiveValue::operator EMarqueeDirection):
        (WebCore::CSSPrimitiveValue::operator EMatchNearestMailBlockquoteColor):
        (WebCore::CSSPrimitiveValue::operator ENBSPMode):
        (WebCore::CSSPrimitiveValue::operator EOverflow):
        (WebCore::CSSPrimitiveValue::operator EPageBreak):
        (WebCore::CSSPrimitiveValue::operator EPosition):
        (WebCore::CSSPrimitiveValue::operator EResize):
        (WebCore::CSSPrimitiveValue::operator ETableLayout):
        (WebCore::CSSPrimitiveValue::operator ETextAlign):
        (WebCore::CSSPrimitiveValue::operator ETextSecurity):
        (WebCore::CSSPrimitiveValue::operator ETextTransform):
        (WebCore::CSSPrimitiveValue::operator EUnicodeBidi):
        (WebCore::CSSPrimitiveValue::operator EUserDrag):
        (WebCore::CSSPrimitiveValue::operator EUserModify):
        (WebCore::CSSPrimitiveValue::operator EUserSelect):
        (WebCore::CSSPrimitiveValue::operator EVisibility):
        (WebCore::CSSPrimitiveValue::operator EWhiteSpace):
        (WebCore::CSSPrimitiveValue::operator EWordBreak):
        (WebCore::CSSPrimitiveValue::operator EWordWrap):
        (WebCore::CSSPrimitiveValue::operator LineCap):
        (WebCore::CSSPrimitiveValue::operator LineJoin):
        (WebCore::CSSPrimitiveValue::operator TextDirection):
        (WebCore::CSSPrimitiveValue::operator WindRule):
        (WebCore::CSSPrimitiveValue::operator EAlignmentBaseline):
        (WebCore::CSSPrimitiveValue::operator EColorInterpolation):
        (WebCore::CSSPrimitiveValue::operator EColorRendering):
        (WebCore::CSSPrimitiveValue::operator EDominantBaseline):
        (WebCore::CSSPrimitiveValue::operator EImageRendering):
        (WebCore::CSSPrimitiveValue::operator EPointerEvents):
        (WebCore::CSSPrimitiveValue::operator EShapeRendering):
        (WebCore::CSSPrimitiveValue::operator ETextAnchor):
        (WebCore::CSSPrimitiveValue::operator ETextRendering):
        (WebCore::CSSPrimitiveValue::operator EWritingMode):
        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::checkSelector):
        (WebCore::CSSStyleSelector::checkOneSelector):
        (WebCore::CSSRuleSet::addRulesFromSheet):
        (WebCore::convertToLength):
        (WebCore::CSSStyleSelector::applyDeclarations):
        (WebCore::CSSStyleSelector::applyProperty):
        (WebCore::CSSStyleSelector::mapBackgroundAttachment):
        (WebCore::CSSStyleSelector::mapBackgroundClip):
        (WebCore::CSSStyleSelector::mapBackgroundComposite):
        (WebCore::CSSStyleSelector::mapBackgroundOrigin):
        (WebCore::CSSStyleSelector::mapBackgroundRepeat):
        (WebCore::CSSStyleSelector::mapBackgroundXPosition):
        (WebCore::CSSStyleSelector::mapBackgroundYPosition):
        * ksvg2/css/SVGCSSComputedStyleDeclaration.cpp:
        (WebCore::CSSComputedStyleDeclaration::getSVGPropertyCSSValue):
        * ksvg2/css/SVGCSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::applySVGProperty):

2007-10-18  Eric Seidel  <eric@webkit.org>

        Reviewed by Maciej.

        Fix crashers in SVGViewSpec::parseViewSpec
        http://bugs.webkit.org/show_bug.cgi?id=15504

        Test is blocked by bug 15503, landed as:
        * svg/dom/viewspec-parser.html-disabled

        * bindings/scripts/CodeGeneratorObjC.pm: support classes where all parents are interfaces
        * ksvg2/svg/SVGViewSpec.cpp:
        (WebCore::SVGViewSpec::parseViewSpec):
        * ksvg2/svg/SVGViewSpec.idl: Added.

2007-10-17  Rob Buis  <buis@kde.org>

        Reviewed by Darin, Adam, and Maciej.

        http://bugs.webkit.org/show_bug.cgi?id=12988
        First element (in document order) is not returned when other duplicate ID-ed elements were created first

        Reset the element id cache when an id is added and there is a duplicate for that id.

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

2007-10-17  Mark Rowe  <mrowe@apple.com>

        Mac build fix.

        * Configurations/WebCore.xcconfig:  Make it possible to include CoreGraphics header files.

2007-10-17  Adam Roben  <aroben@apple.com>

        Fix an ASSERT on launch on Windows

        Fix dictated to me by Brady.

        * loader/icon/IconDatabase.cpp:
        (WebCore::IconDatabase::syncThreadMainLoop): Make sure we hold
        m_syncLock before going into the loop.

2007-10-17  Adam Roben  <aroben@apple.com>

        Windows build fix

        * platform/graphics/AffineTransform.h: Don't #include
        ApplicationServices.h.
        * platform/graphics/cg/GraphicsContextCG.cpp: Add an #include that's
        needed now that we're not #including ApplicationServices.h.

2007-10-17  Mark Rowe  <mrowe@apple.com>

        Gtk build fix.  Move non-pthread stubs from Threading.h to ThreadingNone.cpp to prevent
        multiple-definition link errors.

        * WebCore.pro:
        * platform/Threading.h:
        * platform/ThreadingNone.cpp: Added.
        (WebCore::createThread):
        (WebCore::waitForThreadCompletion):
        (WebCore::detachThread):
        (WebCore::Mutex::Mutex):
        (WebCore::Mutex::~Mutex):
        (WebCore::Mutex::lock):
        (WebCore::Mutex::tryLock):
        (WebCore::Mutex::unlock):
        (WebCore::ThreadCondition::ThreadCondition):

2007-10-17  Anders Carlsson  <andersca@apple.com>

        Reviewed by Oliver.

        * WebCore.xcodeproj/project.pbxproj:
        * WebCore.vcproj/WebCore.vcproj:
        
        * config.h:
        #define USE_PTHREADS on Windows.
        
        * loader/icon/IconDatabase.cpp:
        (WebCore::IconDatabase::getOrCreateIconRecord):
        (WebCore::IconDatabase::getOrCreatePageURLRecord):
        Update for mutex changes.
        
        * platform/Threading.h:
        (WebCore::):
        (WebCore::ThreadSafeShared::ThreadSafeShared):
        (WebCore::ThreadSafeShared::ref):
        (WebCore::ThreadSafeShared::deref):
        (WebCore::ThreadSafeShared::hasOneRef):
        (WebCore::ThreadSafeShared::refCount):
        (WebCore::ThreadSafeShared::isThreadSafe):
        Add a new Shared base class that uses a mutex to manage its refcount.
        
        (WebCore::createThread):
        (WebCore::waitForThreadCompletion):
        (WebCore::detachThread):
        New functions for thread creation.
        
        (WebCore::Mutex::Mutex):
        (WebCore::Mutex::~Mutex):
        (WebCore::Mutex::lock):
        (WebCore::Mutex::tryLock):
        (WebCore::Mutex::unlock):
        Move the definitions to ThreadingPthreads.cpp
        
        (WebCore::ThreadCondition::ThreadCondition):
        (WebCore::ThreadCondition::~ThreadCondition):
        (WebCore::ThreadCondition::wait):
        (WebCore::ThreadCondition::signal):
        (WebCore::ThreadCondition::broadcast):
        Move the definitions to ThreadingPthreads.cpp
        
        * platform/pthreads: Added.
        * platform/pthreads/ThreadingPthreads.cpp: Added.
        Add pthread specific implementation of the thread creation functions, Mutex and ThreadCondition.

2007-10-17  David Hyatt  <hyatt@apple.com>

        Add support for creating a layer when a transform is in effect.  Add support to RenderStyle for
        handing back a computed AffineTransform.

        Reviewed by Mitz Pettel

        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::adjustRenderStyle):
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::setStyle):
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::RenderObject):
        (WebCore::RenderObject::requiresLayer):
        (WebCore::RenderObject::setStyle):
        * rendering/RenderObject.h:
        (WebCore::RenderObject::hasTransform):
        (WebCore::RenderObject::setHasTransform):
        * rendering/RenderStyle.cpp:
        (WebCore::RenderStyle::applyTransform):
        * rendering/RenderStyle.h:
        (WebCore::RenderStyle::hasTransform):
        * rendering/RenderTableCell.cpp:
        (WebCore::RenderTableCell::requiresLayer):
        * rendering/RenderTableRow.h:
        (WebCore::RenderTableRow::requiresLayer):

2007-10-17  David Hyatt  <hyatt@apple.com>

        Add support for mapping of the transform CSS property into RenderStyles.  Everything is now ready for the front
        end to use.

        Reviewed by Mitz Pettel

        * WebCore.xcodeproj/project.pbxproj:
        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::applyProperty):
        * css/CSSTransformValue.h:
        (WebCore::CSSTransformValue::type):
        (WebCore::CSSTransformValue::values):
        * platform/graphics/AffineTransform.cpp:
        (WebCore::AffineTransform::skew):
        * platform/graphics/AffineTransform.h:
        * rendering/RenderStyle.cpp:
        (WebCore::StyleTransformData::StyleTransformData):
        (WebCore::StyleTransformData::operator==):
        (WebCore::StyleTransformData::transformDataEquivalent):
        * rendering/RenderStyle.h:
        (WebCore::TransformOperation::~TransformOperation):
        (WebCore::TransformOperation::operator!=):
        (WebCore::TransformOperation::isScaleOperation):
        (WebCore::TransformOperation::isRotateOperation):
        (WebCore::TransformOperation::isSkewOperation):
        (WebCore::TransformOperation::isTranslateOperation):
        (WebCore::TransformOperation::isMatrixOperation):
        (WebCore::ScaleTransformOperation::ScaleTransformOperation):
        (WebCore::ScaleTransformOperation::isScaleOperation):
        (WebCore::ScaleTransformOperation::operator==):
        (WebCore::ScaleTransformOperation::apply):
        (WebCore::RotateTransformOperation::RotateTransformOperation):
        (WebCore::RotateTransformOperation::isRotateOperation):
        (WebCore::RotateTransformOperation::operator==):
        (WebCore::RotateTransformOperation::apply):
        (WebCore::SkewTransformOperation::SkewTransformOperation):
        (WebCore::SkewTransformOperation::isSkewOperation):
        (WebCore::SkewTransformOperation::operator==):
        (WebCore::SkewTransformOperation::apply):
        (WebCore::TranslateTransformOperation::TranslateTransformOperation):
        (WebCore::TranslateTransformOperation::isTranslateOperation):
        (WebCore::TranslateTransformOperation::operator==):
        (WebCore::TranslateTransformOperation::apply):
        (WebCore::MatrixTransformOperation::MatrixTransformOperation):
        (WebCore::MatrixTransformOperation::isMatrixOperation):
        (WebCore::MatrixTransformOperation::operator==):
        (WebCore::MatrixTransformOperation::apply):
        (WebCore::StyleTransformData::operator!=):
        (WebCore::RenderStyle::transform):
        (WebCore::RenderStyle::setTransform):
        (WebCore::RenderStyle::initialTransform):

2007-10-17  Adam Roben  <aroben@apple.com>

        * page/Frame.cpp: I had to touch this file when fixing the Windows
        build. Checking it in in case it helps others, too.

2007-10-17  Eric Seidel  <eric@webkit.org>

        Reviewed by Mark Rowe.
        
        Remove a couple more uses of svg_dynamic_cast.

        No functional changes, no tests.

        * ksvg2/svg/SVGPatternElement.cpp:
        (WebCore::SVGPatternElement::buildPattern):

2007-10-17  Mark Rowe  <mrowe@apple.com>

        Reviewed by Eric and Geoff.

        <rdar://problem/5453743> Repro ASSERT in CachedResource::setEncodedSize() loading image in background tab
        http://bugs.webkit.org/show_bug.cgi?id=15191

        * loader/DocLoader.cpp:
        (WebCore::DocLoader::setAutoLoadImages): Don't start a load if the CachedImage is already loading.

2007-10-17  Justin Garcia  <justin.garcia@apple.com>

        Reviewed by Harrison.
        
        <rdar://problem/5481523> 
        GoogleDocs: Safari hangs when indenting a particular table twice
        
        Fixed by fixing problems with the selection preservation done by IndentOutdentCommand.
        It is now more difficult to create selections that cause hangs.  Those are covered by:
        <rdar://problem/5543472>

        * editing/IndentOutdentCommand.cpp:
        (WebCore::indexForVisiblePosition): Compute indices from the first VisiblePosition
        in the document, instead of the first Position.
        Use rangeCompliantEquivalents when creating the Range that we pass to rangeLength.
        Tell TextIterator::rangeLength that we're doing selection preservation, so that it
        will emit characters between all VisiblePositions.
        (WebCore::IndentOutdentCommand::indentRegion): Fixed a bug where the range and location
        passed to rangeFromLocationAndLength were reversed.
        Tell rangeFromLocationAndLength that we're doing doing selection preservation, as
        above.
        * editing/TextIterator.cpp:
        (WebCore::CharacterIterator::CharacterIterator): 
        (WebCore::TextIterator::rangeLength): Rename emitSpacesForReplacedElements
        to forSelectionPreservation, to match the name of the boolean inside TextIterator and
        to match its meaning after r25522.
        (WebCore::TextIterator::rangeFromLocationAndLength): Ditto.

2007-10-16  Darin Adler  <darin@apple.com>

        Reviewed by Mitz.

        - fix http://bugs.webkit.org/show_bug.cgi?id=15536
          need to cache missing glyph so we're not slow on pages that show missing glyphs

        - <rdar://problem/5404359> UI thread stall (>60sec) in MLANG running stress test
          (related to font data caching)

        * platform/Font.cpp: (WebCore::Font::glyphDataForCharacter): Check for a null value
        for fontData rather than for glyph to detect non-cached entries in the glyph data.

        * platform/gtk/GlyphPageTreeNodeGtk.cpp: (WebCore::GlyphPage::fill):
        * platform/mac/GlyphPageTreeNodeMac.cpp: (WebCore::GlyphPage::fill):
        * platform/win/GlyphPageTreeNodeWin.cpp: (WebCore::GlyphPage::fill):
        Set fontData to 0 for missing glyph entries. Also fixed the Windows and GTK versions
        to return the proper value for haveGlyphs.

2007-10-16  Mark Rowe  <mrowe@apple.com>

        Gtk build fix.  Replace use of assert with ASSERT_NOT_REACHED.

        * platform/gtk/FontCacheGtk.cpp:
        (WebCore::FontCache::platformInit):

2007-10-16  Darin Adler  <darin@apple.com>

        Reviewed by Adam.

        - fix http://bugs.webkit.org/show_bug.cgi?id=15534
          WebScriptObject.h has some formatting and editorial mistakes

        * bindings/objc/WebScriptObject.h: Fix wording and formatting.

2007-10-16  Darin Adler  <darin@apple.com>

        - try to fix the Qt build

        * config.h: Don't use DisallowCType.h, since it's incompatible with some C++ headers
        that are used in some Qt-specific source files.

2007-10-16  Darin Adler  <darin@apple.com>

        Reviewed by Adele.

        - fix http://bugs.webkit.org/show_bug.cgi?id=15525
          transpose (control-T) should do the last two characters on a line if at end of line
        - remove unused CommandByName class
        - move transpose command implementation here from Mac OS X WebKit

        * editing/Editor.h:
        * editing/Editor.cpp:
        (WebCore::execTranspose): Added.
        (WebCore::Editor::transpose): Added. This has the transpose implementation from
        WebCoreFrameBridge and WebHTMLView, translated into WebCore-style C++ and with
        a special case for the end of a paragraph.

        * page/Frame.h: Removed unused command() function member.
        * page/FramePrivate.h: Removed unused m_command data member.
        * page/Frame.cpp: Ditto.

        * page/mac/WebCoreFrameBridge.h: Removed rangeOfCharactersAroundCaret method.
        * page/mac/WebCoreFrameBridge.mm: Ditto.

        * WebCore.pro: Removed CommandByName.h/cpp.
        * WebCore.vcproj/WebCore.vcproj: Ditto.
        * WebCore.xcodeproj/project.pbxproj: Ditto.

        * editing/CommandByName.cpp: Removed.
        * editing/CommandByName.h: Removed.

2007-10-16  Darin Adler  <darin@apple.com>

        Reviewed by Maciej and Geoff (and looked over by Eric).

        - http://bugs.webkit.org/show_bug.cgi?id=15519
          eliminate use of <ctype.h> for processing ASCII

        * ForwardingHeaders/wtf/ASCIICType.h: Added.
        * ForwardingHeaders/wtf/DisallowCType.h: Added.

        * WebCorePrefix.h: Get rid of inclusion of <ctype.h>.
        * config.h: Include DisallowCType.h.

        * css/CSSParser.cpp:
        (WebCore::ParseString::lower):
        * css/CSSPrimitiveValue.cpp:
        (WebCore::isCSSTokenizerIdentifier):
        * css/CSSStyleDeclaration.cpp:
        (WebCore::propertyID):
        * html/HTMLSelectElement.cpp:
        (WebCore::stripLeadingWhiteSpace):
        * html/HTMLTokenizer.cpp:
        (WebCore::tagMatch):
        * loader/FTPDirectoryParser.cpp:
        (WebCore::parseOneFTPLine):
        * loader/TextResourceDecoder.cpp:
        (WebCore::TextResourceDecoder::checkForHeadCharset):
        * platform/DeprecatedCString.cpp:
        (WebCore::DeprecatedCString::lower):
        (WebCore::DeprecatedCString::upper):
        (WebCore::DeprecatedCString::find):
        (WebCore::DeprecatedCString::contains):
        * platform/DeprecatedString.cpp:
        (WebCore::equalCaseInsensitive):
        (WebCore::isCharacterAllowedInBase):
        (WebCore::DeprecatedString::find):
        (WebCore::DeprecatedString::contains):
        (WebCore::toIntegralType):
        * platform/DeprecatedString.h:
        (WebCore::DeprecatedChar::isSpace):
        (WebCore::DeprecatedChar::lower):
        (WebCore::DeprecatedChar::upper):
        * platform/KURL.cpp:
        (WebCore::KURL::parse):
        * platform/StringImpl.cpp:
        (WebCore::isSpace):
        (WebCore::StringImpl::containsOnlyWhitespace):
        (WebCore::StringImpl::isLower):
        (WebCore::StringImpl::lower):
        (WebCore::StringImpl::find):
        (WebCore::StringImpl::reverseFind):
        (WebCore::equalIgnoringCase):
        * platform/TextEncodingRegistry.cpp:
        (WebCore::TextEncodingNameHash::equal):
        (WebCore::TextEncodingNameHash::hash):
        (WebCore::atomicCanonicalTextEncodingName):
        * platform/mac/KeyEventMac.mm:
        (WebCore::keyIdentifierForKeyEvent):
        * platform/win/KeyEventWin.cpp:
        (WebCore::keyIdentifierForWindowsKeyCode):
        * platform/win/PopupMenuWin.cpp:
        (WebCore::isASCIIPrintable):
        (WebCore::PopupWndProc):
        * plugins/win/PluginViewWin.cpp:
        (WebCore::capitalizeRFC822HeaderFieldName):
        * rendering/RenderText.cpp:
        (WebCore::RenderText::widthFromCache):
        Use ASCIICType.h functions instead of ctype.h ones.

2007-10-16  Mitz Pettel  <mitz@webkit.org>

        Reviewed by Dave Hyatt.

        - fix http://bugs.webkit.org/show_bug.cgi?id=15296
          REGRESSION (r19716-r19719): width not specified for <marquee> tag is causing the alignment issue.

        Test: fast/block/float/marquee-shrink-to-avoid-floats.html

        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::shrinkToAvoidFloats): Changed to return 'true' for <marquee>s with auto width.

2007-10-16  Beth Dakin  <bdakin@apple.com>

        Reviewed by Darin.

        Fix for <rdar://problem/5517118> REGRESSION: 9A570 - Safari renders 
        Amazon seller page way too small

        The font size at Amazon was way too small because the calls to 
        getComputedStyle and getPropertyValue did not cause the div to 
        attach because there was a pending stylesheet. The fix is to call 
        updateLayoutIgnorePendingStylesheets() instead of just 
        updateLayout().

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::CSSComputedStyleDeclaration::getPropertyCSSValue):

2007-10-16  David Hyatt  <hyatt@apple.com>

        Get transform-origin(x/y) mapped into the front end RenderStyle.  Adds a new StyleTransformData struct that
        holds transform-origin (and that will also eventually hold the parsed transform operations as well).

        Reviewed by Beth

        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::applyProperty):
        * rendering/RenderStyle.cpp:
        (WebCore::StyleTransformData::StyleTransformData):
        (WebCore::StyleTransformData::operator==):
        (WebCore::StyleRareNonInheritedData::StyleRareNonInheritedData):
        (WebCore::StyleRareNonInheritedData::operator==):
        (WebCore::RenderStyle::RenderStyle):
        (WebCore::RenderStyle::diff):
        * rendering/RenderStyle.h:
        (WebCore::StyleTransformData::operator!=):
        (WebCore::RenderStyle::transformOriginX):
        (WebCore::RenderStyle::transformOriginY):
        (WebCore::RenderStyle::setTransformOriginX):
        (WebCore::RenderStyle::setTransformOriginY):
        (WebCore::RenderStyle::initialTransformOriginX):
        (WebCore::RenderStyle::initialTransformOriginY):

2007-10-16  Adele Peterson  <adele@apple.com>

        Reviewed by Alice.

        Fix for <rdar://problem/5538793> REGRESSION: Failing layout test: fast/forms/select-change-listbox-to-popup.html (due to landing feature branch)

        * html/HTMLSelectElement.cpp: (WebCore::HTMLSelectElement::parseMappedAttribute):  When switching between types of select elements, call setRecalcListItems
          since recalcListItems updates the default selection in different ways for the different controls. 

2007-10-16  Alice Liu  <alice.liu@apple.com>

        rubber-stamped by Darin.

        flipping my previous fix around so that mac is special-cased instead of win.

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

2007-10-16  David Hyatt  <hyatt@apple.com>

        Clean up transform parsing.  Fix a crash, ditch the extra parse context class, and use RefPtr/PassRefPtr more
        to simplify the code.

        Reviewed by aroben

        * css/CSSParser.cpp:
        (WebCore::CSSParser::parseValue):
        (WebCore::CSSParser::parseTransform):
        * css/CSSParser.h:

2007-10-16  Alice Liu  <alice.liu@apple.com>

        Reviewed by Adele.

        fixed <rdar://5085596> Accesskeys don't work
        
        * dom/Document.cpp:
        (WebCore::Document::defaultEventHandler):
        accesskey modifier is platform-depedent.

2007-10-15  Mark Rowe  <mrowe@apple.com>

        Reviewed by John.

        <rdar://problem/5494040> Reproducible assertion failure in WebCore::IconDatabase::iconForPageURL

        A race condition between icon database import and Safari asking for an icon for the empty URL
        was resulting in a PageURLRecord being created for a URL that can never be retained.  By enforcing
        that PageURLRecord's cannot be created for the empty URL we can prevent the assertion from failing.

        * loader/icon/IconDatabase.cpp:
        (WebCore::IconDatabase::iconForPageURL):
        (WebCore::IconDatabase::getOrCreatePageURLRecord): Bail out early if the URL is empty.
        (WebCore::IconDatabase::performURLImport): Don't create the PageURLRecord if the URL is empty.

2007-10-15  Jon Honeycutt  <jhoneycutt@apple.com>

        Reviewed by Ollie.

        Use OwnPtr for m_deliveryData, and fix a bug where we were memmove()ing
        over m_deliveryData instead of its data buffer

        * plugins/win/PluginStreamWin.cpp:
        (WebCore::PluginStreamWin::~PluginStreamWin): Don't delete
        m_deliveryData
        (WebCore::PluginStreamWin::deliverData): Fix memmove() call
        (WebCore::PluginStreamWin::didReceiveData): Assign using OwnPtr::set()
        * plugins/win/PluginStreamWin.h: Use OwnPtr

2007-10-15  Steve Falkenburg  <sfalken@apple.com>

        Reviewed by Oliver.

        Add missing null check.

        * platform/network/cf/AuthenticationCF.cpp:
        (WebCore::core):

2007-10-15  Mark Rowe  <mrowe@apple.com>

        Fix the no-SVG build again.  Add new transform CSS properties to the switch statements.

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::CSSComputedStyleDeclaration::getPropertyCSSValue):
        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::applyProperty):

2007-10-15  Darin Adler  <darin@apple.com>

        Reviewed by Mitz.

        - http://bugs.webkit.org/show_bug.cgi?id=15518
          Remove the unused attemptFontSubstitution feature and do some
          cleanup of glyphDataForCharacter.

        * platform/Font.h:
        * platform/Font.cpp:
        (WebCore::WidthIterator::advance): Eliminated uneeded attemptFontSubstitution
        and cluster parameters to the glyphDataForCharacter function.
        (WebCore::Font::glyphDataForCharacter): Removed the cluster parameter and
        attemptFontSubstitution parameter. Removed the isUpper check before calling
        toUpper in the small caps code path. Split up the inner loop into separate
        copies for non-small-caps and small caps. Broke out the system fallback
        page handling so it's not inside the loop. Changed system fallback so it uses
        the character and breaks it up into UTF-16 as needed, instead of using a
        passed-in "character cluster".

        * platform/TextStyle.h:
        (WebCore::TextStyle::TextStyle): Removed attemptFontSubstitution.
        (WebCore::TextStyle::applyWordRounding): Ditto.

2007-10-15  Jon Honeycutt  <jhoneycutt@apple.com>

        Reviewed by Ollie.

        Remove an operator precedence warning on Windows

        * editing/markup.cpp:
        (WebCore::escapeContentText): Use (a) | (b)
        (WebCore::appendEscapedContent): Use (a) | (b)

2007-10-15  Kevin McCullough  <kmccullough@apple.com>

        Reviewed by Darin.

        - <rdar://problem/5238818> window.resizeTo doesn't restrict the resized window to the size of the screen
        - Now we take the doc into account when resizing.
        - Also I found an issue where we would resize to outside the window, because
          the resize would be smaller than the window size but the location of the
          window would make the resize go off-screen. Now we move the window back into the screen.

        * bindings/js/kjs_window.cpp:
        (KJS::adjustWindowRect):
        (KJS::WindowFunc::callAsFunction):

2007-10-15  Jon Honeycutt  <jhoneycutt@apple.com>

        Reviewed by Anders.

        <rdar://5510700> Repro crash loading embedded Windows Media Player
        content

        Anders noticed that the older Windows Media Player plugin (npdsplay.dll)
        will crash if it receives its resource requests out of order, whereas we
        were immediately fulfilling untargeted, non-JavaScript requests and
        scheduling targeted or JavaScript resource requests. Implement his
        suggested fix, which is to schedule PluginRequests for all resource
        requests 

        * plugins/win/PluginViewWin.cpp:
        (WebCore::getString):
        (WebCore::PluginViewWin::performRequest): If this non-JavaScript request
        has no target, create a stream for it
        (WebCore::PluginViewWin::load): Schedule PluginRequests for all resource
        requests

2007-10-15  Mark Rowe  <mrowe@apple.com>

        Gtk and Qt build fix.  Add new .cpp file to project.

        * WebCore.pro:

2007-10-15  John Sullivan  <sullivan@apple.com>

        * platform/mac/FontDataMac.mm:
        D'oh! Added missing #import to fix build

2007-10-15  John Sullivan  <sullivan@apple.com>

        Reviewed by Geoff

        * platform/mac/FontDataMac.mm:
        (WebCore::FontData::smallCapsFontData):
        replace NS_DURING/NS_HANDLER with WebCore-style BEGIN/END_BLOCK_OBJC_EXCEPTIONS

2007-10-15  David Hyatt  <hyatt@apple.com>

        The CSS WG has been discussing the concept of rotation.  In the latest draft specification, two properties
        have been introduced: rotation and rotation-point.  I believe these properties should be generalized to
        allow for arbitrary transformations (e.g., translation, skew, rotate, scale).

        This patch adds support for the back-end parsing of two new CSS properties: transform and transform-origin.
        They are directly analogous to the properties specified by the CSS WG, except that they are designed to allow
        for arbitrary affine transforms rather than just rotation.

        Reviewed by Beth Dakin

        * WebCore.xcodeproj/project.pbxproj:
        * WebCore.vcproj/WebCore.vcproj:
        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::CSSComputedStyleDeclaration::getPropertyCSSValue):
        * css/CSSParser.cpp:
        (WebCore::CSSParser::parseValue):
        (WebCore::TransformParseContext:::m_list):
        (WebCore::TransformParseContext::list):
        (WebCore::TransformParseContext::failed):
        (WebCore::TransformParseContext::addValue):
        (WebCore::TransformOperationInfo::TransformOperationInfo):
        (WebCore::TransformOperationInfo::type):
        (WebCore::TransformOperationInfo::argCount):
        (WebCore::TransformOperationInfo::unit):
        (WebCore::TransformOperationInfo::unknown):
        (WebCore::TransformOperationInfo::hasCorrectArgCount):
        (WebCore::CSSParser::parseTransform):
        (WebCore::CSSParser::parseTransformOrigin):
        * css/CSSParser.h:
        * css/CSSPropertyNames.in:
        * css/CSSTransformValue.cpp: Added.
        (WebCore::CSSTransformValue::CSSTransformValue):
        (WebCore::CSSTransformValue::~CSSTransformValue):
        (WebCore::CSSTransformValue::addValue):
        (WebCore::CSSTransformValue::cssText):
        * css/CSSTransformValue.h: Added.
        (WebCore::CSSTransformValue::):

2007-10-15  Mark Rowe  <mrowe@apple.com>

        Reviewed by Oliver.

        Fix the no-SVG build.

        * DerivedSources.make: Use the correct file as input to generate CSSPropertyNames.h.
        * rendering/RenderObject.cpp:
        (WebCore::objectIsRelayoutBoundary):

2007-10-15  Darin Adler  <darin@apple.com>

        Reviewed by Sam.

        - fix http://bugs.webkit.org/show_bug.cgi?id=15520
          alert(undefined) should say "undefined" in the alert

        Test: fast/dom/Window/alert-undefined.html

        * page/DOMWindow.idl: Remove ConvertUndefinedOrNullToNullString from alert, confirm, and prompt.
        It turns out that the default behavior is what the other browsers do (browsers tested: IE 7,
        Firefox 2).

2007-10-15  Adele Peterson  <adele@apple.com>

        Reviewed by Darin.

        Fix for http://bugs.webkit.org/show_bug.cgi?id=15252
        <rdar://problem/5498184> REGRESSION: <select multiple> doesn't scroll to top when old options are removed and new ones are added, leaving listbox empty-looking

        * rendering/RenderListBox.cpp: (WebCore::RenderListBox::calcHeight): If the scrollbar is disabled, make sure the scroll offset gets reset to 0.  In general,
          we don't want to unnecessarily adjust the scroll offset, but in this case, there won't be an obvious way for the user to adjust the scroller position once it's disabled.

2007-10-15  Jon Honeycutt  <jhoneycutt@apple.com>

        Reviewed by Maciej.

        Return a more appropriate error from NPN_RequestRange, which is
        currently unimplemented

        * plugins/win/npapi.cpp: return NPERR_STREAM_NOT_SEEKABLE 
        (NPN_RequestRead):

2007-10-15  Jon Honeycutt  <jhoneycutt@apple.com>

        Reviewed by Maciej.

        Add a missing function pointer to the m_browserFuncs structure

        * plugins/win/PluginPackageWin.cpp:
        (WebCore::PluginPackageWin::load):

2007-10-15  Simon Hausmann  <hausmann@kde.org>

        Reviewed by Lars.

        Fix the compilation of the Font code in the Qt port by adding the necessary stubs to support downloadable fonts through the @font-face rules.

        * WebCore.pro:
        * loader/CachedFont.cpp:
        * platform/qt/FontCacheQt.cpp: Removed.
        * platform/qt/FontCustomPlatformData.cpp: Removed.
        * platform/qt/FontCustomPlatformData.h: Removed.
        * platform/qt/FontDataQt.cpp: Removed.
        * platform/qt/FontPlatformData.h: Removed.
        * platform/qt/FontQt.cpp:
        * platform/qt/GlyphPageTreeNodeQt.cpp: Removed.

2007-10-15  Simon Hausmann  <hausmann@kde.org>

        Reviewed by Lars.

        Adapt to the latest API changes in the SVG API/Code.

        * platform/graphics/svg/qt/RenderPathQt.cpp:
        (WebCore::RenderPath::strokeContains):
        (WebCore::getPathStroke):
        * platform/graphics/svg/qt/SVGPaintServerQt.cpp:
        (WebCore::SVGPaintServer::setPenProperties):
        * platform/graphics/svg/qt/SVGResourceMaskerQt.cpp:

2007-10-14  Nikolas Zimmermann  <zimmermann@kde.org>

        Reviewed by Eric.

        Fix bad abstraction in ImageBuffer class.
        While the class itself is platform-aware and thus it's location in platform/graphics
        is fine, it contains the "renderSubtreeToImage" method which operates on RenderObject.

        As it's SVG specific I decided to move this method into SVGRenderSupport, to avoid
        implicit platform/ <-> rendering/ dependencies.

        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * ksvg2/svg/SVGMaskElement.cpp:
        (WebCore::SVGMaskElement::drawMaskerContent):
        * ksvg2/svg/SVGPatternElement.cpp:
        (WebCore::SVGPatternElement::buildPattern):
        * platform/graphics/ImageBuffer.cpp: Removed.
        * platform/graphics/ImageBuffer.h:
        (WebCore::ImageBuffer::size):
        * platform/graphics/svg/SVGImage.cpp:
        (WebCore::SVGImage::nativeImageForCurrentFrame):
        * rendering/SVGRenderSupport.cpp:
        (WebCore::renderSubtreeToImage):
        * rendering/SVGRenderSupport.h:

2007-10-14  Peter Kasting  <zerodpx@gmail.com>

        Reviewed by Maciej.

        http://bugs.webkit.org/show_bug.cgi?id=15210
        Draw the image outline even for broken images.

        * rendering/RenderImage.cpp:
        (WebCore::RenderImage::paint):

2007-10-14  Kevin Ollivier  <kevino@theolliviers.com>

        Reviewed by Adam.

        Add support for MSVC7, and fix cases where PLATFORM(WIN) should
        be PLATFORM(WIN_OS) for other ports building on Windows.

        * dom/XMLTokenizer.cpp:
        * page/FrameTree.cpp:
        * platform/StaticConstructors.h:
        * platform/String.cpp:

2007-10-14  Maxime Britto  <mbritto@pleyo.com>

        Reviewed by Mitz.

        Fix an error in the goBackOrForward() function : confusion between forwardListCount and backListCount.
        http://bugs.webkit.org/show_bug.cgi?id=15212

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

2007-10-14  Mitz Pettel  <mitz@webkit.org>

        Reviewed by Darin.

        - fix http://bugs.webkit.org/show_bug.cgi?id=15181
          text-transform: uppercase not working in input (submit, reset, button) elements
          <rdar://problem/5474647>

        Test: fast/forms/button-text-transform.html

        Text transformations require access to the original text. The button's inner
        text was an anonymous RenderText, meaning it did not have a node to retrieve
        the original text from. The patch fixes this by changing the inner text into a
        RenderTextFragment, which stores its own original text.

        * rendering/RenderButton.cpp:
        (WebCore::RenderButton::setText):
        * rendering/RenderButton.h:

2007-10-14  Eric Seidel  <eric@webkit.org>

        Reviewed by Maciej.

        REGRESSION: Javascript bug in getElementsByName
        http://bugs.webkit.org/show_bug.cgi?id=15274

        Test: fast/dom/getelementbyname-invalidation.html

        * dom/NameNodeList.h: remove empty rootNodeChildrenChanged override

2007-10-14  Mitz Pettel  <mitz@webkit.org>

        Reviewed by Maciej.

        - http://bugs.webkit.org/show_bug.cgi?id=15303
          Remove now-redundant code to restore dialog arguments after clear

        This patch reverts the kjs_window.* parts of r25576 because following
        r25783, window properties, including dialog arguments, are not cleared
        when the newly created modal dialog transitions to the document.

        * bindings/js/kjs_window.cpp:
        (KJS::WindowPrivate::WindowPrivate):
        (KJS::createWindow):
        (KJS::showModalDialog):
        (KJS::Window::clear):
        (KJS::WindowFunc::callAsFunction):
        (KJS::Window::setReturnValueSlot):
        * bindings/js/kjs_window.h:

2007-10-14  Mitz Pettel  <mitz@webkit.org>

        Reviewed by Dave Hyatt.

        - fix http://bugs.webkit.org/show_bug.cgi?id=15309
          <rdar://problem/5512020> Crash due to infinite recursion in RenderTable::addChild

        Test: fast/table/generated-caption.html

        * rendering/RenderTable.cpp:
        (WebCore::RenderTable::addChild): Changed to make sure that the child is
        not added into generated after content. Also made adding a child before
        a table caption work correctly instead of adding the child after the caption.

2007-10-14  Peter Kasting  <zerodpx@gmail.com>

        Reviewed by Maciej.

        http://bugs.webkit.org/show_bug.cgi?id=15141
        Feed GIF reader data from the point in the stream it expects.  Also,
        mirror the reader's failure state up to the wrapping decoder.

        * platform/image-decoders/gif/GIFImageReader.cpp:
        (GIFImageReader::read):

2007-10-14  Peter Kasting  <zerodpx@gmail.com>

        Reviewed by Maciej.

        http://bugs.webkit.org/show_bug.cgi?id=15142
        Return correct frame count in GIFImageDecoder::frameBufferAtIndex(),
        even if more data has arrived since the last decoding pass.

        * platform/image-decoders/gif/GIFImageDecoder.cpp:
        (WebCore::GIFImageDecoder::frameBufferAtIndex):

== Rolled over to ChangeLog-2007-10-14 ==
