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

        Merge r41190.

    2009-02-24  Sam Weinig  <sam@webkit.org>

        Reviewed by Geoffrey Garen.

        Related to <rdar://problem/6590295>
        Allow disabling javascript: urls.

        * WebCore.base.exp:
        * html/HTMLAnchorElement.cpp:
        (WebCore::HTMLAnchorElement::parseMappedAttribute):
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::executeIfJavaScriptURL):
        * page/Page.cpp:
        (WebCore::Page::Page):
        (WebCore::Page::setJavaScriptURLsAreAllowed):
        (WebCore::Page::javaScriptURLsAreAllowed):
        * page/Page.h:

2009-01-28  Ada Chan  <adachan@apple.com>

        Merge the rest of r33579.

        Reviewed by Steve Falkenburg.

        * platform/network/cf/ResourceHandleCFNet.cpp:
        (WebCore::makeFinalRequest):
        * platform/network/cf/ResourceRequestCFNet.cpp:
        (WebCore::ResourceRequest::doUpdatePlatformRequest):
        * platform/network/win/CookieJarWin.cpp:
        (WebCore::setCookies):
        (WebCore::cookies):
        (WebCore::cookiesEnabled):

2009-01-20  Mark Rowe  <mrowe@apple.com>

        Merge r33579.

    2008-05-19  Ada Chan  <adachan@apple.com>

        Added CookieStorageWin.h/cpp, introducing methods to get/set the current CFHTTPCookieStorageRef.
        When setting cookies-related attributes in CFURLRequest, make sure we get them from the
        current CFHTTPCookieStorageRef.  Also, set the cookie storage in CFURLRequest.

        Reviewed by Steve Falkenburg.

        * WebCore.vcproj/WebCore.vcproj:
        * platform/network/cf/ResourceHandleCFNet.cpp:
        (WebCore::makeFinalRequest):
        * platform/network/cf/ResourceRequestCFNet.cpp:
        (WebCore::ResourceRequest::doUpdatePlatformRequest):
        * platform/network/win/CookieJarCFNetWin.cpp:
        (WebCore::setCookies):
        (WebCore::cookies):
        (WebCore::cookiesEnabled):
        * platform/network/win/CookieStorageWin.cpp: Added.
        (WebCore::currentCookieStorage):
        (WebCore::setCurrentCookieStorage):
        * platform/network/win/CookieStorageWin.h: Added.

2009-01-19  Mark Rowe  <mrowe@apple.com>

        Merge r33993.

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

        Reviewed by Anders.

        Fix for <rdar://problem/5848161> REGRESSION (r31438?): Crash 
        beneath ResourceHandle::setDefersLoading while running fast/loader/
        simultaneous-reloads-assert.html (null CFURLConnection)

        * platform/network/cf/ResourceHandleCFNet.cpp:
        (WebCore::ResourceHandle::setDefersLoading): Added simple null-
        check.

2009-01-19  Mark Rowe  <mrowe@apple.com>

        Merge r39247.

    2008-12-11  Steve Falkenburg  <sfalken@apple.com>

        Delete the previous timer-queue timer in the main thread, just prior to scheduling a new timer.
        The code previously called DeleteTimerQueueTimer in the timer callback proc.
        
        The new technique simplifies the code, since we now create and delete timers on the
        same thread, and don't access the timer queue or timer handles in the callback.
        This allows us to remove some mutex use, and more importantly, it solves a race
        condition that was occuring between ChangeTimerQueueTimer and DeleteTimerQueueTimer.
        
        Since the timer callback isn't passed the timer handle, we were retrieving that handle
        via a global. If the timer callback code was entered, but then a new timer was immediately
        scheduled (prior to the callback acquiring the mutex and calling DeleteTimerQueueTimer),
        there was a small window where the timer could be re-scheduled via ChangeTimerQueueTimer
        and then immediately deleted once the already running callback acquired the mutex and
        then called DeleteTimerQueueTimer. This resulted in the newly scheduled timer never firing.
        
        Reviewed by Oliver Hunt.

        * platform/win/SharedTimerWin.cpp:
        (WebCore::queueTimerProc): Don't delete the timer in the callback.
        (WebCore::setSharedTimerFireTime): Always delete and create the timer instead of using ChangeTimerQueueTimer.
        (WebCore::stopSharedTimer): Call DeleteTimerQueueTimer directly.

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

        Merge r37628.

    2008-10-15  Jon Honeycutt  <jhoneycutt@apple.com>

        Remove unneeded check of whether a Page defers loading before running it
        in a modal dialog.

        No test possible.

        Reviewed by Tim Hatcher.

        * page/Chrome.cpp:

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

        Merge r37897.

    2008-10-27  Anders Carlsson  <andersca@apple.com>

        Reviewed by Kevin Decker.

        <rdar://problem/6322650> Crash in fast/loader/simultaneous-reloads-assert.html
        
        Make sure to null check the NSURLConnection object.
        
        * platform/network/mac/ResourceHandleMac.mm:
        (WebCore::ResourceHandle::start):
        (WebCore::ResourceHandle::setDefersLoading):

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

        Merge r37793.

    2008-10-22  Brady Eidson  <beidson@apple.com>

        Reviewed by Adam Roben

        <rdar://6261773> - autocomplete="off" doesn't work on Windows

        Visual Studio makes a poor decision regarding the combination of enums and bitfields, such that a 
        statement like "m_autocomplete = Off" followed by "return m_autocomplete == Off" would return "false" 
        instead of the much more correct "true."
        
        In the past we have worked around this by declaring the bitfield member as an unsigned instead 
        of the enum type.

        For more discussion, see http://trac.webkit.org/changeset/25329

        * html/HTMLInputElement.h:  Work around insane Visual Studio enum issue  *sigh*

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

        Merge r37704.

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

        Reviewed by Timothy Hatcher.

        - lower the default button repaint frequency

        * rendering/RenderButton.cpp:
        (WebCore::RenderButton::styleDidChange): Changed the timer interval from
        0.01 to 0.03.

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

        Merge r31577.

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

        Reviewed by Oliver Hunt.

        Ensure that debug symbols are generated for x86_64 and ppc64 builds.

        * Configurations/Base.xcconfig:

2008-10-13  Steve Falkenburg  <sfalken@apple.com>

        Roll out r36884.

        * platform/graphics/GraphicsContext.h:
        * platform/graphics/win/GraphicsContextCGWin.cpp:
        (WebCore::CGContextWithHDC):
        (WebCore::GraphicsContext::GraphicsContext):

2008-10-07  Mark Rowe  <mrowe@apple.com>

        Merge r35415.

    2008-07-28  Brady Eidson  <beidson@apple.com>

        Reviewed by Sam Weinig

        Test: security/autocomplete-cleared-on-back.html

        <rdar://problem/6093281> - autocomplete="off" should work when going back

        Taken care of in two ways:
        1 - Listening for the page cache notification to clear the form, in cases where the page
            is being restored from the page cache
        2 - Not saving such form elements when doing the normal "save state" to a history item,
            for cases with no page cache

        * html/HTMLFormElement.cpp:
        (WebCore::HTMLFormElement::~HTMLFormElement):
        (WebCore::HTMLFormElement::parseMappedAttribute):
        (WebCore::HTMLFormElement::didRestoreFromCache):
        (WebCore::HTMLFormElement::willMoveToNewOwnerDocument):
        (WebCore::HTMLFormElement::didMoveToNewOwnerDocument):
        * html/HTMLFormElement.h:

        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::~HTMLInputElement):
        (WebCore::HTMLInputElement::setInputType):
        (WebCore::HTMLInputElement::saveState):
        (WebCore::HTMLInputElement::parseMappedAttribute):
        (WebCore::HTMLInputElement::needsCacheCallback):
        (WebCore::HTMLInputElement::registerForCacheCallbackIfNeeded): Only register if the type or attribute
          indicate we should.
        (WebCore::HTMLInputElement::unregisterForCacheCallbackIfNeeded): Only unregister if both the type
          and attribute are clear of needing registration.
        (WebCore::HTMLInputElement::didRestoreFromCache):
        (WebCore::HTMLInputElement::willMoveToNewOwnerDocument):
        (WebCore::HTMLInputElement::didMoveToNewOwnerDocument):
        * html/HTMLInputElement.h:

2008-10-07  Mark Rowe  <mrowe@apple.com>

        Merge r35362.

    2008-07-25  Brady Eidson  <beidson@apple.com>

        Reviewed by Sam

        Test: security/set-form-autocomplete-attribute.html

        Part of the fix for <rdar://problem/6093281> - Improper handling of autocomplete

        The autocomplete attribute works on both <form> and <input> elements, but was not
        inherited properly when someone asked an <input> if it should autocomplete.

        I fixed this up based on the rules in the current WF2 spec so if the <input> element
        has its own autocomplete attribute set, it will follow that but otherwise it will
        inherit from its parent <form>

        * WebCore.base.exp:

        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::init):
        (WebCore::HTMLInputElement::autoComplete):
        (WebCore::HTMLInputElement::parseMappedAttribute):
        * html/HTMLInputElement.h:
        (WebCore::HTMLInputElement::):

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

        Merge r33567.

    2008-05-18  Darin Adler  <darin@apple.com>

        Reviewed by Sam.

        - fix <rdar://problem/5943569> crash due to stale ownerNode pointer

        Test: fast/dom/StyleSheet/ownerNode-lifetime.html

        * bindings/js/JSStyleSheetCustom.cpp:
        (WebCore::JSStyleSheet::mark): Added code to mark ownerNode. Includes a comment about how
        it would be even better to solve this in the DOM rather than just in the JavaScript binding.

        * css/StyleSheet.idl: Added CustomMarkFunction attribute.

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

        Merge r36108.

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

        Reviewed by Mitz

        <rdar://problem/6180236> - Safari times out connections after 1 or 2 minutes

        A 60-second default timeout was added in http://trac.webkit.org/changeset/17144 in an attempt 
        to model default NSURLRequest behavior in a cross-platform manner.  

        Sadly by always enforcing this 60 second timeout, WebCore was stomping over the wishes of any Webkit 
        client that wished to enforce a much larger default timeout using NSURLRequest API.

        Additionally, upon reviewing what all other browsers do, it seems apparent that "no limit" is desirable
        behavior on the web and this restores previous Safari/WebKit behavior.

        It would be easy to write a layout test for this, but to be effective it would have
        to run for at least 61 seconds, which seems insane until will can parallelize run-webkit-tests

        * manual-tests/timeout-test.html: Added.
        * manual-tests/timeout-test.php: Added.

        * platform/network/ResourceRequestBase.h:
        (WebCore::ResourceRequestBase::ResourceRequestBase):  Rename the constant to "unspecifiedTimeoutInterval"
          and make it UINT_MAX so platforms that do set it have an effective "no timeout."  (Windows, for example)
        * platform/network/mac/ResourceRequestMac.mm:
        (WebCore::ResourceRequest::doUpdatePlatformRequest):  If the timeout for this request is 
          "unspecifiedTimeoutInterval", then don't bother setting the timeout using NSURLRequest API, allowing
          WebKit applications to enforce their own default timeout.

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

        Merge r36811.

    2008-09-23  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Oliver Hunt, okayed by Darin Adler.

        <rdar://problem/5575547> REGRESSION: ATOK has no phrase boundary on Safari/Mail.app

        * rendering/InlineTextBox.cpp:
        (WebCore::InlineTextBox::paintCompositionUnderline): Add 2 pixel spacing between clauses.

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

        Merge r37008.

    2008-09-27  Anders Carlsson  <andersca@apple.com>

        Reviewed by Sam Weinig.

        https://bugs.webkit.org/show_bug.cgi?id=21178
        <rdar://problem/6248651>

        Check if the plug-in is allowed to load the resource. This matches Firefox.

        Test: http/tests/plugins/local-geturl-from-remote.html

        * plugins/PluginView.cpp:
        (WebCore::PluginView::load):

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

        Merge r35278.

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

        Reviewed by Sam Weinig.

        <rdar://problem/6091287> Revamp the handling of CFBundleShortVersionString to be fixed at the major component of the version number.

        * Configurations/Version.xcconfig:
        * Info.plist:

2008-09-21  Steve Falkenburg  <sfalken@apple.com>

        Merge r36748, r36750

    2008-09-21  Steve Falkenburg  <sfalken@apple.com>

        Removed unnecessary nested timer check.
        
        Rubber-stamped by Dan Bernstein.

        * platform/win/SharedTimerWin.cpp:
        (WebCore::TimerWindowWndProc):

    2008-09-21  Steve Falkenburg  <sfalken@apple.com>

        Improve timer resolution on WinXP.
        https://bugs.webkit.org/show_bug.cgi?id=20979
        
        Removed last-chance timer. It should not be necessary.
        Change timeEndPeriod timer to fire in 300ms instead of 20ms. Calling timeBeginPeriod/timeEndPeriod too often throws off accuracy.
        Remove Vista checks. We now run the same code on both XP and Vista.
        
        Call through to JSC::getCurrentUTCTimeWithMicroseconds from WebCore::currentTime.
        The code previously called GetSystemTimeAsFileTime, which is always low-resolution on XP, even within timeBeginPeriod(1).
        
        Reviewed by Maciej Stachowiak.

        * platform/win/SharedTimerWin.cpp:
        (WebCore::):
        (WebCore::TimerWindowWndProc):
        (WebCore::setSharedTimerFireTime):
        * platform/win/SystemTimeWin.cpp:
        (WebCore::currentTime):

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

        Merge r35182.

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

        WebCore part of adding WebKit[Set]ShouldUseFontSmoothing functions

        <rdar://6059127>

        Reviewed by John Sullivan.

        * platform/graphics/win/FontCGWin.cpp:
        (WebCore::Font::drawGlyphs): Pass the result of
        WebCoreShouldUseFontSmoothing() into wkSetFontSmoothingStyle.
        * platform/win/WebCoreTextRenderer.cpp:
        (WebCore::WebCoreSetShouldUseFontSmoothing):
        (WebCore::WebCoreShouldUseFontSmoothing):
        Added.
        * platform/win/WebCoreTextRenderer.h:

2008-09-14  Mark Rowe  <mrowe@apple.com>

        Merge r35950.

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

        Add support for support for -webkit-appearance: default-button on the Mac platform.

        <rdar://problem/6173530>

        Reviewed by Dave Hyatt.

        * WebCore.base.exp: Export new symbols.
        * platform/mac/WebCoreSystemInterface.h: Add wkAdvanceDefaultButtonPulseAnimation.
        * platform/mac/WebCoreSystemInterface.mm: Ditto.
        * rendering/RenderButton.cpp:
        (WebCore::RenderButton::RenderButton): Remove #if PLATFORM(WIN).
        (WebCore::RenderButton::setStyle): Ditto.
        * rendering/RenderButton.h: Ditto.
        * rendering/RenderThemeMac.mm:
        (WebCore::RenderThemeMac::adjustRepaintRect): Add a case for DefaultButtonAppearance.
        (WebCore::RenderThemeMac::setButtonCellState): Set the key equivalent to the return
        key if the button is default, otherwise reset the key equivalent.
        (WebCore::RenderThemeMac::paintButton): If the button is default call setDefaultButtonCell:
        on the window, then wkAdvanceDefaultButtonPulseAnimation before painting. Restore
        the window's previous default button cell when finished.

2008-09-14  Mark Rowe  <mrowe@apple.com>

        Merge r32881.

    2008-05-05  Steve Falkenburg  <sfalken@apple.com>

        Add support for default button appearance.
        Add WebCore setting for app chrome mode.
        
        Reviewed by Dave Hyatt.

        * css/CSSPrimitiveValueMappings.h:
        (WebCore::CSSPrimitiveValue::CSSPrimitiveValue):
        * css/CSSValueKeywords.in: Added default-button value keyword.
        * page/Settings.cpp:
        (WebCore::Settings::Settings):
        (WebCore::Settings::setApplicationChromeMode):
        * page/Settings.h:
        (WebCore::Settings::inApplicationChromeMode):
        * rendering/RenderButton.cpp:
        (WebCore::RenderButton::RenderButton):
        (WebCore::RenderButton::setStyle):
        (WebCore::RenderButton::timerFired):
        * rendering/RenderButton.h:
        * rendering/RenderStyle.h:
        (WebCore::):
        * rendering/RenderTheme.cpp:
        (WebCore::RenderTheme::adjustStyle):
        (WebCore::RenderTheme::paint):
        (WebCore::RenderTheme::paintBorderOnly):
        (WebCore::RenderTheme::paintDecorations):
        (WebCore::RenderTheme::isControlStyled):
        (WebCore::RenderTheme::isDefault):
        * rendering/RenderTheme.h:
        (WebCore::):
        * rendering/RenderThemeSafari.cpp:
        (WebCore::RenderThemeSafari::determineState):
        (WebCore::RenderThemeSafari::adjustRepaintRect):
        (WebCore::RenderThemeSafari::adjustButtonStyle):
        * rendering/RenderThemeWin.cpp:
        (WebCore::RenderThemeWin::supportsFocus):

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

        Reviewed by Sam.

        <rdar://problem/5832603> REGRESSION: Adding an image to the header image well causes Journal page to incorrectly draw
        
        * dom/Document.cpp:
        (WebCore::Document::childrenChanged):
        Make sure to chain up to ContainerNode::childrenChanged.

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 ==
