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

        Reviewed by Eric Seidel.

        - fix https://bugs.webkit.org/show_bug.cgi?id=20339
          REGRESSION (r35531-r35615): Acid3 crashes on Windows in CachedFont::getSVGFontById

        * dom/make_names.pl: Removed "using namespace WebCore::*Names"
        from *ElementFactory.cpp files.        

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

        Reviewed by Cameron Zwarich.

        Fix crash in Acid3 in Windows and Gtk ports, introduced in r35590.

        * bindings/js/ScriptControllerGtk.cpp: Fix the logic.
        * bindings/js/ScriptControllerWin.cpp: Ditto.
        * bindings/js/ScriptControllerQt.cpp: Switch to isPluginView for consistency with Gtk and Windows.

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

        Reviewed by Darin Adler.

        - fix <rdar://problem/6074587> REGRESSION (34722): Unable to view AT&T wireless bill - window title contains markup, window is empty

        Test: fast/tokenizer/ampersand-in-special-tag.html

        * html/HTMLTokenizer.cpp:
        (WebCore::HTMLTokenizer::parseSpecial): Changed to only advance
        lastDecodedEntityPosition if an entity was found and decoded.

2008-08-10  Jan Michael Alonzo  <jmalonzo@webkit.org>

        Reviewed (and updated) by Alp Toker.

        https://bugs.webkit.org/show_bug.cgi?id=16620
        [GTK] Autotools make dist and make check support

        Get make dist working.

        Note that not all possible configurations have been tested yet.

        * GNUmakefile.am:

2008-08-08  Beth Dakin  <bdakin@apple.com>

        Reviewed by Darin.

        This patch makes the findString and markAllMatchesForText functions 
        work with disconnected frames that are contained within 
        overflow:hidden blocks.

        * editing/Editor.cpp:
        (WebCore::Editor::rangeVisibility):
        (WebCore::Editor::firstVisibleRange):
        (WebCore::Editor::lastVisibleRange):
        * editing/Editor.h:
        (WebCore::Editor::):
        * page/Frame.cpp:
        (WebCore::Frame::findString):
        (WebCore::Frame::markAllMatchesForText):

2008-08-08  Maxime Britto  <britto@apple.com>

        Reviewed by Adele.

        Test: fast/events/scroll-to-anchor-in-overflow-hidden.html
        https://bugs.webkit.org/show_bug.cgi?id=20270
        Jump to an anchor wasn't working when the overflow:hidden CSS attribute was set on the page.

        * WebCore.base.exp:
        * dom/Element.cpp:
        (WebCore::Element::scrollIntoView):
        (WebCore::Element::scrollIntoViewIfNeeded):
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::gotoAnchor):
        * page/EventHandler.cpp:
        (WebCore::EventHandler::handleMousePressEvent):
        (WebCore::EventHandler::handleMouseDraggedEvent):
        * page/Frame.cpp:
        (WebCore::Frame::revealSelection):
        (WebCore::Frame::revealCaret):
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::scrollRectToVisible): Takes a new parameter "scrollToAnchor" since it's a special case of scroll. It passes this new bool to canBeProgrammaticallyScrolled. 
        (WebCore::RenderLayer::autoscroll):
        * rendering/RenderLayer.h:
        * rendering/RenderListBox.h:
        (WebCore::RenderListBox::canBeProgramaticallyScrolled):
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::canBeProgramaticallyScrolled): If the call is coming from a scrollToAnchor we don't need scrollBars to accept.
        * rendering/RenderObject.h:
        * rendering/RenderTextControl.h:
        (WebCore::RenderTextControl::canBeProgramaticallyScrolled):

2008-08-08  Maxime Britto  <britto@apple.com>

        Reviewed by Adele.

        <rdar://problem/6137022>
        <https://bugs.webkit.org/show_bug.cgi?id=20331>
        REGRESSION(r35177-r35203): Scrolling slowly over a scrollable field scrolls the page instead of the field (20331)

        * page/EventHandler.cpp:
        (WebCore::scrollAndAcceptEvent): fixed the wrong cast for the wheel delta which was truncated to 0 on slow wheel scrolls.

2008-08-08  Dean Jackson  <dino@apple.com>

        Execute CSS Animations using new AnimationController
        https://bugs.webkit.org/show_bug.cgi?id=20119

        I still need to file some follow-on bugs that EricS noticed.

        Reviewed by Dave Hyatt

        Some new tests:
        * manual-tests/animate-duration.html: Added.
        * manual-tests/animate-left.html: Added.
        * manual-tests/animate-none.html: Added.

        * css/CSSStyleSelector.cpp:
        * dom/Document.cpp:
            - don't redo style when page is place into cache
        * page/AnimationController.cpp:
        * page/AnimationController.h:
            - execute the animations
        * rendering/RenderObject.cpp:
        * rendering/style/RenderStyle.h:
            - make border radii const (for blending)

2008-08-08  Kevin McCullough  <kmccullough@apple.com>

        Reviewed by Tim.

        <rdar://problem/6136326> JSProfiler: Start/stop profiling button in the
        Web Inspector does not match the menu.

        * page/InspectorController.cpp:
        (WebCore::InspectorController::toggleRecordButton): Toggle the record
        button in the webInspector.
        (WebCore::InspectorController::startUserInitiatedProfiling):
        (WebCore::InspectorController::stopUserInitiatedProfiling):
        * page/InspectorController.h: 
        * page/inspector/ProfilesPanel.js: Move the UI part of the record button
        into its funtion so that it can be called from the Inspector controller.
        * page/inspector/inspector.js:

2008-08-08  Kevin McCullough  <kmccullough@apple.com>

        Reviewed by Tim.

        <rdar://problem/6131187> Profiles don't show up immediately when run
        with the UI.

        * page/InspectorController.cpp:
        (WebCore::startProfiling): Added so that the inspector's JS code could
        call through to the same function used by the Develop menu.  This way
        both can call didFinishAllExecution() which puts the profile in the
        Web Inspector.
        (WebCore::stopProfiling): Ditto
        (WebCore::InspectorController::windowScriptObjectAvailable):
        (WebCore::InspectorController::stopUserInitiatedProfiling): Now calls
        didFinishAllExecution() to put the profile in the Web Inspector.  This
        should be safe since the UIs shouldn't work if JS is still running.
        * page/inspector/ProfilesPanel.js: Use the new functions.

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

        Reviewed by Darin Adler.

        - fix <rdar://problem/5961260> GDI text: transparent fill color text does not render if it it has a stroke or shadow

        * platform/graphics/win/FontCGWin.cpp:
        (WebCore::Font::drawGlyphs):

2008-08-08  Adam Treat  <treat@kde.org>

        Reviewed by Simon.

        Return the canonical file path in Qt's listDirectory as WebCore::PluginDatabase
        uses this method to retrieve a list of possible plugins.  Many linux systems
        have nested symbolic links scattered throughout the plugin directories which
        resulted in the PluginDatabase loading the same plugin N times depending on
        the number of symbolic links.

        * platform/qt/FileSystemQt.cpp:
        (WebCore::listDirectory):

2008-08-07  Anthony Ricaud  <rik24d@gmail.com>

        Change highlight time from 300ms to 500ms and fade effect from 1s to 2s

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

        Reviewed by Timothy Hatcher.

        * page/inspector/SourceFrame.js:

2008-08-07  Anthony Ricaud  <rik24d@gmail.com>

        The search is only performed if the field contains more than 3
        letters or if Enter is pressed.

        Search is now performed through a keyup event.

        Added a WebInspector.lastQuery to remember the last query and not
        perform it again (eg. the user hits a modifier key).

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

        Reviewed by Timothy Hatcher.

        * page/inspector/inspector.html: Removed the onsearch and incremental
        attributes
        * page/inspector/inspector.js:

2008-08-07  Steve Falkenburg  <sfalken@apple.com>

        Compile derived sources through an all-in-one cpp file.
        Fixes Windows release build on non-x64 systems by reducing the size of WebCore.lib from 1.5GB to 1GB.
        
        Reviewed by Mark Rowe.

        * DerivedSources.cpp: Added.
        * WebCore.vcproj/WebCore.vcproj:

2008-08-07  Kevin McCullough  <kmccullough@apple.com>

        Reviewed by Adam.

        <rdar://problem/5712917> Confusing console error message clear
        behavior (16791)
        https://bugs.webkit.org/show_bug.cgi?id=16791
        <rdar://problem/5831899> The Web Inspector does not correctly clear the
        console messages

        * page/InspectorController.cpp: Clear the message so they don't show up
        in the inspector after it has cleared them.
        (WebCore::clearMessages):
        (WebCore::InspectorController::clearConsoleMessages):
        (WebCore::InspectorController::windowScriptObjectAvailable):
        * page/InspectorController.h:
        * page/inspector/Console.js: Tell the InspectorController to clear the
        messages it's holding onto.

2008-08-07  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Sam Weinig

        Rename Marquee to RenderMarquee and move to its own file.
        https://bugs.webkit.org/show_bug.cgi?id=20319

        * GNUmakefile.am:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * WebCoreSources.bkl:
        * html/HTMLMarqueeElement.cpp:
        * rendering/RenderBlock.cpp:
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::styleChanged):
        * rendering/RenderLayer.h:
        * rendering/RenderMarquee.cpp: Added.
        (WebCore::RenderMarquee::RenderMarquee):
        (WebCore::RenderMarquee::marqueeSpeed):
        (WebCore::RenderMarquee::direction):
        (WebCore::RenderMarquee::isHorizontal):
        (WebCore::RenderMarquee::computePosition):
        (WebCore::RenderMarquee::start):
        (WebCore::RenderMarquee::suspend):
        (WebCore::RenderMarquee::stop):
        (WebCore::RenderMarquee::updateMarqueePosition):
        (WebCore::RenderMarquee::updateMarqueeStyle):
        (WebCore::RenderMarquee::timerFired):
        * rendering/RenderMarquee.h: Added.
        (WebCore::RenderMarquee::speed):
        (WebCore::RenderMarquee::reverseDirection):
        (WebCore::RenderMarquee::setEnd):

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

        Reviewed by Dave Hyatt.

        - fix <rdar://problem/6118816> Initial empty page or bookmarks view window has white strip where vertical scrollbar would be (which vanishes on resize)

        * page/Frame.cpp:
        (WebCore::Frame::setZoomFactor): If the view has never had a layout with
        the old zoom factor, then there is no need to explicitly call layout()
        here.

2008-08-07  Kevin McCullough  <kmccullough@apple.com>

        Reviewed by Geoff.

        <rdar://problem/6115981> Start the profiler in Heavy view

        * page/inspector/ProfileView.js:

2008-08-07  Alp Toker  <alp@nuanti.com>

        Reviewed by Eric Seidel.

        https://bugs.webkit.org/show_bug.cgi?id=20313
        Add null check in String::fromUTF8()

        Make String::fromUTF8() consistent with other constructors by
        returning a null String when the input is null instead of crashing.

        * platform/text/String.cpp:
        (WebCore::String::fromUTF8):

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

        wx build fix after Frame -> ScriptController moves.

        * platform/wx/TemporaryLinkStubs.cpp:

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

        Reviewed by Tim.

        - Make XHR console message clearer.

        * xml/XMLHttpRequest.cpp:
        (WebCore::XMLHttpRequest::didFinishLoading):

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

        Reviewed by Tim.

        - Created a new function to create DOM links from text without
        converting back and forth from HTML and messing with escaping special
        characters.

        * page/inspector/Console.js:
        * page/inspector/inspector.js:
        * page/inspector/utilities.js:

2008-08-06  Eric Seidel  <eric@webkit.org>

        Reviewed by hyatt.

        Fix a large animation leak found on the buildbot
        (m_animations and m_transitions were never deleted)
        Drag RenderStyle (kicking and screaming) into the 21st century
        of memory management with a little application of OwnPtr.

        * rendering/style/RenderStyle.cpp:
        (WebCore::FillLayer::cullEmptyLayers):
        (WebCore::RenderStyle::diff):
        (WebCore::RenderStyle::contentDataEquivalent):
        (WebCore::RenderStyle::setContent):
        (WebCore::BindingURI::BindingURI):
        (WebCore::RenderStyle::setBoxShadow):
        (WebCore::ShadowData::ShadowData):
        (WebCore::RenderStyle::counterDirectives):
        (WebCore::RenderStyle::accessCounterDirectives):
        (WebCore::RenderStyle::adjustAnimations):
        (WebCore::RenderStyle::adjustTransitions):
        (WebCore::RenderStyle::accessAnimations):
        (WebCore::RenderStyle::accessTransitions):
        * rendering/style/RenderStyle.h:
        (WebCore::RenderStyle::clearAnimations):
        (WebCore::RenderStyle::clearTransitions):

2008-08-06  Brady Eidson  <beidson@apple.com>

        Reviewed by MitzPettel

        <rdar://problem/6078543> - Many LocalStorageThreads may be started

        The original decision to key LocalStorage sets to PageGroups was a poor one.

        It seems a much better solution is to key them to the actual path of on-disk storage,
        which also solves all of the avenues that could lead to a boundless number of threads.

        In this patch, I am not attempting to completely sever the attachment of LocalStorage
        to PageGroups as that would require a more substantial re-working of the lifetime
        between pages, groups, and local storage threads.

        * page/PageGroup.cpp:
        (WebCore::PageGroup::addPage):

        * storage/LocalStorage.cpp:
        (WebCore::localStorageMap):  Map paths to LocalStorage objects here.
        (WebCore::LocalStorage::localStorage): Return the shared LocalStorage object for this path,
          or create a new one if it doesn't yet exist.
        (WebCore::LocalStorage::LocalStorage):
        (WebCore::LocalStorage::~LocalStorage):  Add to remove the path->LocalStorage mapping
        * storage/LocalStorage.h:

2008-08-06  Beth Dakin  <bdakin@apple.com>

        Reviewed by Adele.

        Fix for <rdar://problem/6130724>

        Disconnected frames should not be allowed to resize the window.

        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::resizeBy):
        (WebCore::DOMWindow::resizeTo):

2008-08-05  David D. Kilzer  <ddkilzer@apple.com>

        Bug 20038: REGRESSION (r35151): Can't post comments on flickr.com

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

        Reviewed by Eric Seidel.

        Test: fast/forms/submit-to-url-fragment.html

        The problem was that isFormSubmission was not being set to true in
        FrameLoader::loadWithDocumentLoader() when we were actually
        submitting a form, causing the page to scroll instead of the form to
        be submitted.

        The isFormSubmission variable wasn't set to true because a FormState
        object was not being created in
        FrameLoader::loadFrameRequestWithFormAndValues().

        The FormState object was not being created because
        HTMLFormElement::submit(Event*, bool activateSubmitButton) would
        only set FrameLoader::m_formAboutToBeSubmitted to the current form
        if there was a "text field" element in the form (type = text,
        password, search or isindex).

        Thus when FrameLoader::submitForm(const FrameLoadRequest&, Event*)
        called FrameLoader::loadFrameRequestWithFormAndValues(), a null
        HTMLFormElement pointer would be sent and cause the above failures.

        * html/HTMLFormElement.cpp:
        (WebCore::HTMLFormElement::submit): Call new
        FrameLoader::setFormAboutToBeSubmitted() method outside the for
        loop so we always set FrameLoader::m_formAboutToBeSubmitted exactly
        once for any form submission.  The FrameLoader::recordFormValue()
        method is only called with the name/value pair of each text field.

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::setFormAboutToBeSubmitted): Added method that
        only sets m_formAboutToBeSubmitted.
        (WebCore::FrameLoader::recordFormValue): Removed
        PassRefPtr<HTMLFormElement> argument since this method only sets
        name/value pairs on m_formValuesAboutToBeSubmitted now.
        (WebCore::FrameLoader::loadFrameRequestWithFormAndValues): Create a
        FormState object as long as submitForm is not null so that other
        FrameLoader methods know when a form is being submitted.
        * loader/FrameLoader.h:

2008-08-06  David D. Kilzer  <ddkilzer@apple.com>

        BUILD FIX: Add HTMLPlugInImageElement.cpp to all other build systems

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

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

        - Windows build fix

        * WebCore.vcproj/WebCore.vcproj: Added PlugInImageElement.*

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

        Reviewed by Tim and Darin.

        <rdar://problem/6126160> URLs in the console should be clickable.
        - Implemented and now use linkifyString() to parse console messages for
        URLs.

        * page/inspector/Console.js:
        * page/inspector/inspector.js:
        * page/inspector/utilities.js:

2008-07-02  David Kilzer  <ddkilzer@apple.com>

        Images using QT plugin do not display correctly

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

        Reviewed by Darin.

        Tests: fast/images/embed-image.html
               fast/images/object-image.html

        Use RenderImage instead of RenderPartObject for a renderer when
        the <embed> tag references an image.  Extract common code from
        HTMLEmbedElement and HTMLObjectElement into HTMLPlugInImageElement.

        * WebCore.xcodeproj/project.pbxproj: Added new source files.

        * html/HTMLEmbedElement.cpp: Cleaned up #include statements.
        (WebCore::HTMLEmbedElement::HTMLEmbedElement): Extend
        HTMLPlugInImageElement which extends HTMLPlugInElement.
        (WebCore::HTMLEmbedElement::parseMappedAttribute): Split codeAttr
        and srcAttr cases.  Create or clear HTMLImageLoader as needed for
        srcAttr.
        (WebCore::HTMLEmbedElement::rendererIsNeeded): Use
        HTMLPlugInElement::rendererIsNeeded() for images.
        (WebCore::HTMLEmbedElement::createRenderer): Create a
        RenderImage instead of a RenderPartObject for images.
        (WebCore::HTMLEmbedElement::attach): Create HTMLImageLoader,
        load image and populate RenderImage for images.
        (WebCore::HTMLEmbedElement::updateWidget): Don't call
        RenderPartObject::updateWidget() for images.
        (WebCore::HTMLEmbedElement::imageSourceAttributeName): Added.
        * html/HTMLEmbedElement.h: Removed unneeded namespace and class
        declarations.  Extend HTMLPlugInImageElement which extends
        HTMLPlugInElement.
        (WebCore::HTMLEmbedElement::imageSourceAttributeName): Added.
        (WebCore::HTMLEmbedElement::serviceType): Moved to
        HTMLPlugInImageElement.
        (WebCore::HTMLEmbedElement::url): Ditto.

        * html/HTMLObjectElement.cpp: Cleaned up #include statements.
        (WebCore::HTMLObjectElement::attach): Removed local variable.
        (WebCore::HTMLObjectElement::isImageType): Moved to
        HTMLPlugInImageElement.
        * html/HTMLObjectElement.h: Extend HTMLPlugInImageElement which
        extends HTMLPlugInElement.
        (WebCore::HTMLObjectElement::isImageType): Moved to
        HTMLPlugInImageElement.
        (WebCore::HTMLObjectElement::serviceType): Ditto.
        (WebCore::HTMLObjectElement::url): Ditto.

        * html/HTMLPlugInImageElement.cpp: Added.
        (WebCore::HTMLPlugInImageElement::HTMLPlugInImageElement): Added.
        (WebCore::HTMLPlugInImageElement::~HTMLPlugInImageElement): Added.
        (WebCore::HTMLPlugInImageElement::isImageType): Moved from
        HTMLObjectElement.
        * html/HTMLPlugInImageElement.h: Added.
        (WebCore::HTMLPlugInImageElement::isImageType): Added from 
        HTMLObjectElement.
        (WebCore::HTMLPlugInImageElement::serviceType): Ditto.
        (WebCore::HTMLPlugInImageElement::url): Ditto.

        * rendering/HitTestResult.cpp:
        (WebCore::HitTestResult::absoluteImageURL): Return urlString
        for embed elements with images.

2008-08-06  Marco Barisione  <marco.barisione@collabora.co.uk>

        Reviewed by Eric Seidel.

        http://bugs.webkit.org/show_bug.cgi?id=20295
        RegularExpression::match should not crash when a null string is passed

        RegularExpression::match used to pass null subject strings to
        jsRegExpExecute causing an ASSERT failure and then a crash.
        There is no need to fix also RegularExpression:search and
        RegularExpression::searchRev as they just call
        RegularExpression::match.

        * platform/text/RegularExpression.cpp:
        (WebCore::RegularExpression::match): Return -1 if the string is null.

2008-08-06  Jan Michael Alonzo  <jmalonzo@webkit.org>

        Gtk build fix only

        * bindings/js/ScriptControllerGtk.cpp:
        * plugins/gtk/PluginViewGtk.cpp:
        (WebCore::PluginView::getValue):
        (WebCore::PluginView::~PluginView):

2008-08-06  Ariya Hidayat  <ariya.hidayat@trolltech.com>

        Fix the Qt build due to recent ScriptController refactoring.

        * plugins/qt/PluginViewQt.cpp:
        (WebCore::PluginView::getValue):
        (WebCore::PluginView::~PluginView):

2008-08-06  Eric Seidel  <eric@webkit.org>

        Reviewed by Cameron Zwarich.

        Fix warnings and errors seen on Qt bot.
        Including one correctness fix for ThreadingQt.
        According to the Qt 4.4 docs, we were always passing
        seconds to "wait()" when we should have been passing
        milliseconds.
        
        Lots of float <-> int conversion warnings.

        * css/CSSCursorImageValue.cpp:
        (WebCore::CSSCursorImageValue::updateIfSVGCursorIsUsed):
        * dom/Element.cpp:
        (WebCore::adjustForLocalZoom):
        (WebCore::adjustForAbsoluteZoom):
        (WebCore::Element::setScrollLeft):
        (WebCore::Element::setScrollTop):
        * dom/EventTargetNode.cpp:
        (WebCore::EventTargetNode::dispatchMouseEvent):
        * loader/CachedImage.cpp:
        (WebCore::CachedImage::imageRect):
        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::innerHeight):
        (WebCore::DOMWindow::innerWidth):
        (WebCore::DOMWindow::scrollX):
        (WebCore::DOMWindow::scrollY):
        (WebCore::DOMWindow::scrollTo):
        * page/EventHandler.cpp:
        (WebCore::scrollAndAcceptEvent):
        * plugins/npapi.cpp:
        * plugins/qt/PluginViewQt.cpp:
        (WebCore::PluginView::getValue):
        (WebCore::PluginView::~PluginView):
        * rendering/RenderReplaced.cpp:
        (WebCore::RenderReplaced::intrinsicSizeChanged):

2008-08-06  Eric Seidel  <eric@webkit.org>

        Build fix only, no review.

        Attempt to fix the Windows and Qt builds.

        * bindings/js/ScriptControllerWin.cpp: add runtime.h include
        * bindings/js/ScriptControllerQt.cpp: add QWidget include
        * page/win/FrameWin.cpp: remove bogus using namespace
        * plugins/PluginView.cpp:
        (WebCore::PluginView::bindingInstance): use script()
        * plugins/win/PluginViewWin.cpp:
        (WebCore::PluginView::getValue): use script()
        (WebCore::PluginView::~PluginView): use script()

  2008-08-06  Eric Seidel  <eric@webkit.org>

        Build fix only, no review.

        Attempt to fix the Linux and --no-svg builds.

        * bindings/js/ScriptController.h: wrap RetainPtr include in PLATFORM(MAC)
        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::CSSComputedStyleDeclaration::getPropertyCSSValue): add missing CSSProperties to switch

2008-08-06  Eric Seidel  <eric@webkit.org>

        Reviewed by Cameron Zwarich.

        Move more methods from Frame into ScriptController
        https://bugs.webkit.org/show_bug.cgi?id=20294
        
        Finally finish more of the work which Darin started long ago
        Move a few more Frame methods into ScriptController.
        I also took this opportunity to clean up some of the plugin
        code as well, and moved some of that into ScriptController.

        I removed Frame::clearScriptController() and ScriptController::clear() is now clearWindowShell()

        No functional changes, thus no test cases.

        * GNUmakefile.am:
        * WebCore.NPAPI.exp:
        * WebCore.base.exp:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/ScriptController.cpp:
        (WebCore::ScriptController::ScriptController):
        (WebCore::ScriptController::~ScriptController):
        (WebCore::ScriptController::bindingRootObject):
        (WebCore::ScriptController::createRootObject):
        (WebCore::ScriptController::windowScriptNPObject):
        (WebCore::ScriptController::createScriptObjectForPluginElement): New method.
        (WebCore::ScriptController::clearPlatformScriptObjects):
        (WebCore::ScriptController::disconnectPlatformScriptObjects):
        (WebCore::ScriptController::cleanupScriptObjectsForPlugin):
        (WebCore::ScriptController::clearScriptObjects):
        * bindings/js/ScriptController.h:
        (WebCore::ScriptController::sourceURL):
        (WebCore::ScriptController::clearFormerWindow):
        * bindings/js/ScriptControllerGtk.cpp: Copied from WebCore/page/gtk/FrameGtk.cpp.
        (WebCore::Frame::createScriptInstanceForWidget):
        * bindings/js/ScriptControllerMac.mm: Added.
        (WebCore::ScriptController::createScriptInstanceForWidget):
        (WebCore::ScriptController::windowScriptObject):
        (WebCore::ScriptController::clearPlatformScriptObjects):
        (WebCore::ScriptController::disconnectPlatformScriptObjects):
        (WebCore::updateRenderingForBindings):
        (WebCore::ScriptController::initJavaJSBindings):
        * bindings/js/ScriptControllerQt.cpp: Copied from WebCore/page/gtk/FrameGtk.cpp.
        (WebCore::ScriptController::createScriptInstanceForWidget):
        * bindings/js/ScriptControllerWin.cpp: Copied from WebCore/svg/graphics/cg/SVGResourceMaskerCg.cpp.
        (WebCore::ScriptController::createScriptInstanceForWidget):
        * bindings/objc/DOM.mm:
        (-[DOMNode KJS::Bindings::]):
        * bindings/objc/DOMInternal.mm:
        (-[WebScriptObject _initializeScriptDOMNodeImp]):
        * bridge/jni/jni_jsobject.mm:
        (createRootObject):
        * html/HTMLAppletElement.cpp:
        (WebCore::HTMLAppletElement::renderWidgetForJSBindings):
        * html/HTMLAppletElement.h:
        * html/HTMLEmbedElement.cpp:
        (WebCore::findWidgetRenderer):
        (WebCore::HTMLEmbedElement::renderWidgetForJSBindings):
        * html/HTMLEmbedElement.h:
        * html/HTMLObjectElement.cpp:
        (WebCore::HTMLObjectElement::~HTMLObjectElement):
        (WebCore::HTMLObjectElement::renderWidgetForJSBindings):
        (WebCore::HTMLObjectElement::detach):
        * html/HTMLObjectElement.h:
        * html/HTMLPlugInElement.cpp:
        (WebCore::HTMLPlugInElement::~HTMLPlugInElement):
        (WebCore::HTMLPlugInElement::detach):
        (WebCore::HTMLPlugInElement::getInstance):
        (WebCore::HTMLPlugInElement::parseMappedAttribute):
        (WebCore::HTMLPlugInElement::getNPObject):
        * html/HTMLPlugInElement.h:
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::clear):
        * page/Frame.cpp:
        (WebCore::Frame::Frame):
        (WebCore::Frame::~Frame):
        (WebCore::Frame::pageDestroyed):
        (WebCore::FramePrivate::FramePrivate):
        * page/Frame.h:
        * page/FramePrivate.h:
        * page/gtk/FrameGtk.cpp:
        * page/mac/FrameMac.mm:
        * page/qt/FrameQt.cpp:
        * page/win/FrameWin.cpp:
        (WebCore::computePageRectsForFrame):

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

        Fix last timer fix.
        Add null check, clear timer using InterlockedExchange.
        
        Reviewed by Alice Liu.

        * platform/win/SharedTimerWin.cpp:
        (WebCore::clearTimer):
        (WebCore::queueTimerProc):
        (WebCore::stopSharedTimer):

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

        Fix timer leak, flag.
        
        Timers need to be deleted explicitly, even if they fire.
        Also added WT_EXECUTEONLYONCE flag, since this is not a repeating timer.
        
        Reviewed by Ada Chan.

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

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

        Reviewed by Darin.

        <rdar://problem/6037398>
        ER: Deallocate WebKit objects on the main thread, even if released on secondary thread
        
        Add calls to WebCoreObjCScheduleDeallocateOnMainThread in dealloc methods of objects we expose.
        
        * bindings/objc/DOMRGBColor.mm:
        (-[DOMRGBColor dealloc]):
        * bindings/objc/WebScriptObject.mm:
        (-[WebScriptObject dealloc]):
        * platform/mac/SharedBufferMac.mm:
        (-[WebCoreSharedBufferData dealloc]):

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

        Reviewed by Darin.

        Move the main thread deallocator here from WebKit.
        
        * WebCore.base.exp:
        * WebCore.xcodeproj/project.pbxproj:
        * platform/mac/WebCoreObjCExtras.c:
        (method_getImplementation):
        (deallocCallback):
        (WebCoreObjCScheduleDeallocateOnMainThread):
        * platform/mac/WebCoreObjCExtras.h:

2008-08-05  Dean Jackson  <dino@apple.com>

        Parse CSS Animations, including the new
        -webkit-animation properties and the @-webkit-keyframes rule.
        Adds some new interfaces for the style rules.
        
        https://bugs.webkit.org/show_bug.cgi?id=20088

        Reviewed by David Hyatt.

        * GNUmakefile.am:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * WebCoreSources.bkl:
            build config for new files
        * css/tokenizer.flex:
        * css/CSSGrammar.y:
        * css/CSSParser.cpp:
        * css/CSSParser.h:
            new @-webkit-keyframes parsing
        * css/CSSPropertyNames.in:
            -webkit-animation properties
        * css/CSSRule.h:
        * css/CSSStyleSelector.cpp:
        * css/CSSStyleSelector.h:
        * css/CSSValueKeywords.in:
        * css/StyleBase.h:
        * css/WebKitCSSKeyframeRule.cpp: Added.
        * css/WebKitCSSKeyframeRule.h: Added.
        * css/WebKitCSSKeyframesRule.cpp: Added.
        * css/WebKitCSSKeyframesRule.h: Added.

2008-08-05  Kevin McCullough  <kmccullough@apple.com>

        Reviewed by Tim.

        - LayoutTests fix.  Log only to the Inspector because other listeners may not want
        XHR notifications, including DRT and the numerous tests that don't expect them.

        * xml/XMLHttpRequest.cpp:
        (WebCore::XMLHttpRequest::didFinishLoading):

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

        Makes DOM attribute editing start on double-click to match the styles
        pane. Links in attributes are now triggered with a single click again.

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

        Reviewed by Adam Roben.

        * English.lproj/localizedStrings.js: Removed some strings.
        * page/inspector/ElementsPanel.js:
        (WebInspector.DOMNodeTreeElement.prototype.onattach): Call
        _preventFollowingLinksOnDoubleClick.
        (WebInspector.DOMNodeTreeElement.prototype._preventFollowingLinksOnDoubleClick):
        Renamed from _makeURLsActivateOnModifiedClick. Simply sets the
        preventFollowOnDoubleClick property on all links.
        (WebInspector.DOMNodeTreeElement.prototype.onselect): Removed
        _selectedByCurrentMouseDown.
        (WebInspector.DOMNodeTreeElement.prototype.onmousedown): Moved
        editing code to ondblclick.
        (WebInspector.DOMNodeTreeElement.prototype.ondblclick): Calls
        _startEditing. Removed URL check.
        (WebInspector.DOMNodeTreeElement.prototype._updateTitle): Calls
        _preventFollowingLinksOnDoubleClick.
        * page/inspector/inspector.css:
        (.editing): Removed the text-decoration property.
        (.editing, .editing *): Added the text-decoration property here
        so it removes underlines on child elements.
        * page/inspector/inspector.js:
        (WebInspector.documentClick): Removed the followOnAltClick code.
        Added support for preventFollowOnDoubleClick, which sets a timeout
        on the first click where future clicks will cancel it (double click).
        If the timeout isn't canceled, the link is followed.

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

        Reviewed by Sam Weinig.

        <rdar://problem/6112219> Video in standalone media document flashes when navigating away

        When navigating out from a page, MediaPlayer was set invisible and then immediately 
        made visible again causing flicker in some cases.
        
        The document is not yet marked being in page cache when willSaveToCache() is called.

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::willSaveToCache):
        * rendering/RenderVideo.cpp:
        (WebCore::RenderVideo::updatePlayer):

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

        - fix typo

        * page/mac/FrameMac.mm:

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

        - try to fix the 64-bit build

        * page/mac/FrameMac.mm:

2008-08-05  Alp Toker  <alp@nuanti.com>

        Remove leftover mark pragma from r35568 to fix compiler warning spew.

        * rendering/style/RenderStyle.h:

2008-08-05  Kevin McCullough  <kmccullough@apple.com>

        - Added a test that checks for several edge cases (see description in
        test.

        * manual-tests/inspector/profiler-test-start-but-dont-stop-profiling.html: Added.

2008-08-05  Dean Jackson  <dino@apple.com>

        Reviewed by Dave Hyatt

        Add support for CSS Animation properties to RenderStyle
        https://bugs.webkit.org/show_bug.cgi?id=20068

        (also fix some minor whitespace issues and remove debugging code)

        * css/CSSComputedStyleDeclaration.cpp:
        * css/CSSStyleSelector.cpp:
        * page/AnimationController.cpp:
        * rendering/style/RenderStyle.cpp:
        * rendering/style/RenderStyle.h:

2008-08-05  Kevin McCullough  <kmccullough@apple.com>

        - Updated a manual test to be an accurate description of what it is
        actually testing.

        * manual-tests/inspector/profiler-test-stop-profiling-after-setTimeout.html:

2008-08-05  Kevin McCullough  <kmccullough@apple.com>

        Reviewed by Tim.

        <rdar://problem/5732836> XMLHttpRequest: Inspector should show network
        activity/XHR in Console (17233)

        * xml/XMLHttpRequest.cpp:
        (WebCore::XMLHttpRequest::didFinishLoading):

2008-08-05  Dean Jackson  <dino@apple.com>

        Fix the ChangeLog that was corrupted by r34545.

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

        Makes the selection surround just the name or value that was
        double clicked when editing CSS properties. This regressed when
        the Inspector started using focus/blur events, since a focus on
        a content editable region changes the selection.

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

        Reviewed by Adam Roben.

        * page/inspector/StylesSidebarPane.js:
        (WebInspector.StylePropertyTreeElement.prototype.startEditing):
        Change the selection after calling WebInspector.startEditing,
        since WebInspector.startEditing will set an initial selection
        due to a focus event.

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

        Changes the editing behavior in the Inspector to commit changes
        when focus is lost, instead of reverting the changes.

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

        Reviewed by Adam Roben.

        * page/inspector/inspector.js:
        (WebInspector.startEditing): Call editingCommitted in blurEventListener
        instead of editingCancelled.

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

        Adds the ability to increment/decrement numbers in editable style
        properties with the arrow and page keys.

        Reviewed by Adam Roben.

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

        * page/inspector/StylesSidebarPane.js:
        (WebInspector.StylePropertyTreeElement.prototype.updateAll):
        Updates all properties in the current section, or all sections
        depending in the argument passed.
        (WebInspector.StylePropertyTreeElement.prototype.toggleEnabled):
        Call updateAll instead of having duplicate code.
        (WebInspector.StylePropertyTreeElement.prototype.startEditing):
        Assign the list element's handleKeyEvent to editingKeyDown.
        (WebInspector.StylePropertyTreeElement.prototype.editingKeyDown):
        Handles the Up and Down arrows keys. Finds the word based on the
        selection and extracts the number, prefix and suffix. Increments
        or decrements the number based on the key and modifiers. Replaces
        the original word with the new value and selects it. Also applies
        the style so the page reflects the changes live.
        (WebInspector.StylePropertyTreeElement.prototype.editingEnded):
        Delete the handleKeyEvent and originalCSSText properties.
        (WebInspector.StylePropertyTreeElement.prototype.editingCancelled):
        If originalCSSText exists, set the cssText to that value and call
        updateAll. Otherwise just call updateTitle like before.
        (WebInspector.StylePropertyTreeElement.prototype.editingCommitted):
        Factored out the style applying code to applyStyleText.
        (WebInspector.StylePropertyTreeElement.prototype.applyStyleText):
        Factored out from editingCommitted. Takes an argument that specifies
        if the interface should be updated when the style is applied.
        * page/inspector/inspector.js:
        (WebInspector.startEditing): Call the original key handler, if one
        existed before interrupting key events.
        * page/inspector/utilities.js:
        (getStyleTextWithShorthands): Helper to return CSS text that preserves
        shorthand values, since the cssText property only outputs longhands.

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

        Factors out the TextPrompt.scanBackwards function into a generic
        helper function on the Node prototype, named rangeOfWord.

        Reviewed by Adam Roben.

        * page/inspector/Console.js:
        (WebInspector.Console.prototype.completions): Use rangeOfWord.
        * page/inspector/TextPrompt.js:
        (WebInspector.TextPrompt.prototype.complete): Ditto.
        (WebInspector.TextPrompt.prototype.scanBackwards): Removed.
        * page/inspector/utilities.js:
        (Node.prototype.rangeOfWord): Added. Copied from TextPrompt.scanBackwards,
        and added a direction argument allowing scanning forward, backward or
        both directions from the offset.

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

        Fixes a bug where the property toggle button would not be hidden
        during editing.

        Reviewed by Adam Roben.

        * page/inspector/inspector.css:
        (li.editing .swatch, li.editing .enabled-button):
        Make the display !important, since a more specific rule for 
        .enabledbutton overrides display.

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

        Reviewed by Geoffrey Garen.

        - remove redundant #imports from FrameMac.mm

        * page/mac/FrameMac.mm:

2008-08-04  Bernhard Kruepl  <kruepl@dbai.tuwien.ac.at>

        Reviewed by Dave Hyatt.

        Fix for https://bugs.webkit.org/show_bug.cgi?id=19094
        Corrected offsetTop for table cells by subtracting borderTopExtra

        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::offsetTop):

2008-08-04  Dean Jackson  <dino@apple.com>

        Reviewed by Dave Hyatt.

        Improve AnimationController
        https://bugs.webkit.org/show_bug.cgi?id=19938

        - Transition class is now called Animation
        - new state-based AnimationController that can support CSS Animations
        - add support for -webkit-transition-delay
        - remove -webkit-transition-repeat-count (since it never existed officially)
        - updates the -webkit-transition shorthand to reflect removing repeat count
        - updates the Transition class so that properties can be shared with animations
        - adds a "now" keyword for -webkit-transition-delay
        - adds a new change type for style (changed by animation)
        - adds new event names (although they are not dispatched yet)
        - makes text stroke and text fill colors returned by RenderStyle const

        Tests:
        - manual-tests/transition-left.html
        - manual-tests/transition-delay.html
        - manual-tests/transition-timing-functions.html

        * css/CSSComputedStyleDeclaration.cpp:
        * css/CSSParser.cpp:
        * css/CSSParser.h:
        * css/CSSPropertyNames.in:
        * css/CSSStyleSelector.cpp:
        * css/CSSStyleSelector.h:
        * css/CSSTimingFunctionValue.h:
        * css/CSSValue.h:
        * css/CSSValueKeywords.in:
        * css/WebKitCSSTransformValue.cpp:
        * dom/Document.cpp:
        * dom/Document.h:
        * dom/Element.cpp:
        * dom/EventNames.h:
        * dom/Node.cpp:
        * dom/Node.h:
        * history/CachedPage.cpp:
        * page/AnimationController.cpp:
        * page/AnimationController.h:
        * page/Frame.cpp:
        * rendering/RenderObject.cpp:
        * rendering/RenderWidget.cpp:
        * rendering/style/RenderStyle.cpp:
        * rendering/style/RenderStyle.h:

2008-08-04  Mike Belshe  <mike@belshe.com>

        Reviewed by Antti.
        
        Currently we create two copies of script in the HTMLTokenizer.
        One copy gets passed into the javascript engine, the other gets
        stored in the DOM.  Modify the HTMLParser so that it does not
        chunk the string into it's normal 64K chunks for script code,
        and modify the HTMLTokenizer to pass that same string into the
        JS engine.  On some sites (e.g. GMail), which have hundreds of
        KB of inline JS, this saves more than a MB of RAM to run the page.
        (Strings use 16bit strings, so 600KB of JS code == 1.2MB of memory)

        * html\HTMLParser.cpp
        * html\HTMLTokenizer.cpp

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

        Reviewed by Mark Rowe.

        Remove extra braces left in from JSLock removal.

        * xml/XMLHttpRequest.cpp:
        (WebCore::XMLHttpRequest::dropProtection):

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

        Reviewed by Dan Bernstein.

        Implement the Access-control for Cross Site requests
        preflight cache.

        Tests: http/tests/xmlhttprequest/access-control-basic-allow-preflight-cache-invalidation-by-header.html
               http/tests/xmlhttprequest/access-control-basic-allow-preflight-cache-invalidation-by-method.html
               http/tests/xmlhttprequest/access-control-basic-allow-preflight-cache-timeout.html
               http/tests/xmlhttprequest/access-control-basic-allow-preflight-cache.html

        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * platform/KURL.h:
        (WTF::):
        * platform/KURLHash.h: Added.
        (WebCore::KURLHash::hash):
        (WebCore::KURLHash::equal):
        (WTF::):
        * xml/XMLHttpRequest.cpp:
        (WebCore::PreflightResultCacheItem::PreflightResultCacheItem):
        (WebCore::preflightResultCache):
        (WebCore::appendPreflightResultCacheEntry):
        (WebCore::canSkipPrelight):
        (WebCore::XMLHttpRequest::makeCrossSiteAccessRequestWithPreflight):
        (WebCore::parseAccessControlAllowList):
        (WebCore::parseAccessControlMaxAge):
        (WebCore::XMLHttpRequest::didReceiveResponsePreflight):

2008-08-04  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Roben.

        Fix warning seen in MSVC converting ints to floats.

        * rendering/Length.h:
        (WebCore::Length::calcFloatValue):

2008-08-04  Eric Seidel  <eric@webkit.org>

        Reviewed by hyatt.

        Clean up Gradient constructors, make sure all members are initialized.

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

2008-08-02  Maxime Britto  <britto@apple.com>

        Reviewed by Eric Seidel.

        <rdar://problem/6118969>
        https://bugs.webkit.org/show_bug.cgi?id=19971 
        Modifiy the cursor interactively when on panning mode (middle click auto scroll)
        When the panning is in progress the cursor is an arrow representing the direction of the current scroll

        * page/EventHandler.cpp:
        (WebCore::EventHandler::autoscrollTimerFired): Before each scroll we actualize the cursor to match the current direction
        (WebCore::EventHandler::setPanScrollCursor): determines the direction of the upcoming scroll.
        (WebCore::EventHandler::handleMouseMoveEvent):
        * page/EventHandler.h: 
        * platform/Cursor.h: Add propotypes for the new cursor functions
        * platform/gtk/CursorGtk.cpp: to avoid build break
        (WebCore::middlePanningCursor):
        (WebCore::eastPanningCursor):
        (WebCore::northPanningCursor):
        (WebCore::northEastPanningCursor):
        (WebCore::northWestPanningCursor):
        (WebCore::southPanningCursor):
        (WebCore::southEastPanningCursor):
        (WebCore::southWestPanningCursor):
        (WebCore::westPanningCursor):
        * platform/mac/CursorMac.mm: to avoid build break
        (WebCore::middlePanningCursor):
        (WebCore::eastPanningCursor):
        (WebCore::northPanningCursor):
        (WebCore::northEastPanningCursor):
        (WebCore::northWestPanningCursor):
        (WebCore::southPanningCursor):
        (WebCore::southEastPanningCursor):
        (WebCore::southWestPanningCursor):
        (WebCore::westPanningCursor):
        * platform/qt/CursorQt.cpp: to avoid build break
        (WebCore::middlePanningCursor):
        (WebCore::eastPanningCursor):
        (WebCore::northPanningCursor):
        (WebCore::northEastPanningCursor):
        (WebCore::northWestPanningCursor):
        (WebCore::southPanningCursor):
        (WebCore::southEastPanningCursor):
        (WebCore::southWestPanningCursor):
        (WebCore::westPanningCursor):
        * platform/win/CursorWin.cpp: Add specific icons for the panning as windows resizing icons are both sides arrows
        (WebCore::middlePanningCursor):
        (WebCore::eastPanningCursor):
        (WebCore::northPanningCursor):
        (WebCore::northEastPanningCursor):
        (WebCore::northWestPanningCursor):
        (WebCore::southPanningCursor):
        (WebCore::southEastPanningCursor):
        (WebCore::southWestPanningCursor):
        (WebCore::westPanningCursor):
        * platform/wx/CursorWx.cpp: to avoid build break
        (WebCore::middlePanningCursor):
        (WebCore::eastPanningCursor):
        (WebCore::northPanningCursor):
        (WebCore::northEastPanningCursor):
        (WebCore::northWestPanningCursor):
        (WebCore::southPanningCursor):
        (WebCore::southEastPanningCursor):
        (WebCore::southWestPanningCursor):
        (WebCore::westPanningCursor):

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

        Move to using constants in accordance with discussions about wx renderer commit.

        * platform/wx/RenderThemeWx.cpp:
        (WebCore::RenderThemeWx::minimumMenuListSize):
        (WebCore::RenderThemeWx::popupInternalPaddingLeft):
        (WebCore::RenderThemeWx::popupInternalPaddingRight):
        (WebCore::RenderThemeWx::popupInternalPaddingTop):
        (WebCore::RenderThemeWx::popupInternalPaddingBottom):

2008-08-02  Wouter Bolsterlee  <wbolster@svn.gnome.org>

        Reviewed by Eric Seidel.

        * plugins/gtk/gtk2xtbin.h:

        https://bugs.webkit.org/show_bug.cgi?id=20034
        Fix malformed Vim modeline.

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

        Reviewed by Dave Hyatt.

        - tweak a comment

        * platform/graphics/cg/ImageCG.cpp:
        (WebCore::BitmapImage::draw):

2008-08-01  Jan Michael Alonzo  <jmalonzo@webkit.org>

        * ChangeLog: Fix date of previous commit (r35520)

2008-08-01  Marco Barisione  <marco.barisione@collabora.co.uk>

        Reviewed by Eric Seidel.

        https://bugs.webkit.org/show_bug.cgi?id=19603
        [SOUP] segfault when closing a file using gio

        Call client->didFinishLoading() only after releasing all the gio
        resources.

        * platform/network/soup/ResourceHandleSoup.cpp:
        (WebCore::closeCallback):
        (WebCore::readCallback):

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

        Reviewed by Jon.

        <rdar://problem/6120206>
        Crash when plug-in queries for NPPVpluginWantsAllNetworkStreams.
        
        Pass in a pointer to a void* to make sure that plug-ins don't overwrite the stack.
        
        * plugins/PluginStream.cpp:
        (WebCore::PluginStream::wantsAllStreams):

2008-08-01  Robin Dunn  <robin@alldunn.com>

        Reviewed by Eric Seidel.

        Native rendering implementations for form elements in the wx port.
        
        https://bugs.webkit.org/show_bug.cgi?id=19069

        * platform/wx/RenderThemeWx.cpp:
        (WebCore::RenderThemeWx::adjustRepaintRect):
        (WebCore::RenderThemeWx::paintButton):
        (WebCore::RenderThemeWx::paintTextField):
        (WebCore::RenderThemeWx::minimumMenuListSize):
        (WebCore::RenderThemeWx::adjustMenuListStyle):
        (WebCore::RenderThemeWx::paintMenuList):
        (WebCore::RenderThemeWx::adjustMenuListButtonStyle):
        (WebCore::RenderThemeWx::paintMenuListButton):
        (WebCore::RenderThemeWx::popupInternalPaddingLeft):
        (WebCore::RenderThemeWx::popupInternalPaddingRight):
        (WebCore::RenderThemeWx::popupInternalPaddingTop):
        (WebCore::RenderThemeWx::popupInternalPaddingBottom):

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

        Improvements to selection drawing.

        Clip out floating and positioned objects when drawing selection so
        that there is no "double painting" of selection when the selection spans both the space behind the positioned/floating
        object and the positioned/floating object itself.  Improves most Web pages.

        Do not paint left/right selection gaps if the object's edge is already outside the boundary (at a negative
        position).  Significantly improves the look of selections on digg.com, since it uses giant negative text-indent.

        Reviewed by Dan

        Covered by existing selection pixel tests.

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::isSelectionRoot):
        (WebCore::RenderBlock::paintSelection):
        (WebCore::clipOutPositionedObjects):
        (WebCore::RenderBlock::fillSelectionGaps):
        (WebCore::RenderBlock::fillLeftSelectionGap):
        (WebCore::RenderBlock::fillRightSelectionGap):

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

        Adds the ability to disable individual properties of a CSS rule.
        When hovering over a rule, checkboxes show up to the right of all
        properties and toggling a checkbox disables/enables the property.
        Behind the scenes the property is removed from the rule when disabled,
        but still remains in the list and in the computed style. When disabled
        the property has a line through it, and is faded in computed style.

        <rdar://problem/5712828> Support disabling individual CSS properties
        https://bugs.webkit.org/show_bug.cgi?id=14377

        Reviewed by Adam Roben.

        * page/inspector/StylesSidebarPane.js:
        (WebInspector.StylesSidebarPane.prototype.update): Include the
        inline style when it also has disabled properties. Call
        deleteDisabledProperty for any property that is in the style,
        since it might have been added back by the page. Remember all
        disabled properties so they show up in computed style.
        (deleteDisabledProperty): Helper function to delete all the
        right properties that track disabled properties.
        (WebInspector.StylePropertiesSection): Add the computed-style
        class when  the section is Computed Style.
        (WebInspector.StylePropertiesSection.prototype.onpopulate):
        Include disabled properties.
        (WebInspector.StylePropertyTreeElement): Added a disabled argument.
        (WebInspector.StylePropertyTreeElement.prototype.get/set disabled):
        Sets the _disabled property and calls updateState.
        (WebInspector.StylePropertyTreeElement.prototype.get priority):
        Return the priority of enabled or disabled properties.
        (WebInspector.StylePropertyTreeElement.prototype.get value):
        Return the value of enabled or disabled properties.
        (WebInspector.StylePropertyTreeElement.prototype.updateTitle): Use the
        priority and value getter. Append the checkbox for root elements of
        an editable section.
        (WebInspector.StylePropertyTreeElement.prototype.toggleEnabled):
        Add or remove properties from the rule and remember removed ones
        by adding three objects to the style: __disabledProperties,
        __disabledPropertyValues and __disabledPropertyPriorities.
        The __disabledProperties object will include all longhand
        properties of a shorthand for use by Computed Style.
        (WebInspector.StylePropertyTreeElement.prototype.updateState):
        Use the value getter. Update the disabled state.
        * page/inspector/inspector.css:
        * page/inspector/utilities.js:
        (Object.hasProperties): Added. Helper to test if an object
        has any properties.

2008-07-31  Anders Carlsson  <andersca@apple.com>

        Reviewed by Darin.

        <rdar://problem/5949410>
        Add the ability to transfer a given application cache to a new database.
        
        * WebCore.base.exp:
        Export ApplicationCacheStorage::storeCopyOfCache.
        
        * loader/appcache/ApplicationCache.cpp:
        (WebCore::ApplicationCache::~ApplicationCache):
        Don't call cacheDestroyed for our special "copy" groups.
        
        * loader/appcache/ApplicationCacheGroup.cpp:
        (WebCore::ApplicationCacheGroup::ApplicationCacheGroup):
        (WebCore::ApplicationCacheGroup::~ApplicationCacheGroup):
        Add a "copy" flag to the ApplicationCacheGroup constructor. A "copied" group is special
        and can only be stored to disk.
        
        * loader/appcache/ApplicationCacheGroup.h:
        (WebCore::ApplicationCacheGroup::isCopy):
        New getter.
        
        * loader/appcache/ApplicationCacheStorage.cpp:
        (WebCore::ApplicationCacheStorage::store):
        Make sure to set the storageID when storing an application resource.
        
        (WebCore::ApplicationCacheStorage::storeNewestCache):
        Change this to return true/false depending on whether storing the cache succeeded or not.
        
        (WebCore::ApplicationCacheStorage::storeCopyOfCache):
        New method which stores a given cache in a new storage (database file).
        
        * loader/appcache/ApplicationCacheStorage.h:
        Add new methods.

2008-07-31  John Sullivan  <sullivan@apple.com>

        WebCore part of <rdar://problem/6116650> Text-only zoom setting should be stored in WebKit prefs

        Reviewed by Hyatt

        * WebCore.base.exp:
        export symbol for WebCoreSettings::setZoomsTextOnly()
        
        * page/Frame.cpp:
        (WebCore::Frame::isZoomFactorTextOnly):
        use value from Settings instead of data member
        (WebCore::Frame::shouldApplyTextZoom):
        call isZoomFactorTextOnly() to get value instead of accessing now-removed data member
        (WebCore::Frame::shouldApplyPageZoom):
        ditto
        (WebCore::Frame::setZoomFactor):
        set value into Settings rather than into data member
        (WebCore::FramePrivate::FramePrivate):
        don't set initial value of now-removed data member; this is managed by Settings now
        
        * page/FramePrivate.h:
        removed m_zoomFactorIsTextOnly
        
        * page/Settings.cpp:
        (WebCore::Settings::setZoomsTextOnly):
        new function, sets values and reapplies styles in all frames
        
        * page/Settings.h:
        (WebCore::Settings::zoomsTextOnly):
        new function, returns value of new data member

2008-07-31  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Dave Hyatt

        Null-check parent clip rects, because they may not have been
        set up yet.
        https://bugs.webkit.org/show_bug.cgi?id=20243

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

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

        Reviewed by Dave Hyatt.

        - fix <rdar://problem/6058958> REGRESSION (r34210): Seams are visible in border-image

        * platform/graphics/cg/ImageCG.cpp:
        (WebCore::BitmapImage::draw): To work around a Core Graphics
        interpolation issue, reverted to using a temporary subimage for drawing
        a portion of the image with scaling and high-quality interpolation in
        effect.

2008-07-31  chris fleizach  <cfleizach@apple.com>

        Reviewed by Alice Liu

        <rdar://problem/3563671> VO doesn't highlight characters when interacting when static text in web areas

        Need to expose the AXBoundsForRange parameter which allows an AX client to get the visible bounds
        for individual characters on a webpage.

        Test: accessibility/bounds-for-range.html

        * ChangeLog:
        * page/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::visiblePositionForIndex):
        * page/mac/AccessibilityObjectWrapper.mm:
        (-[AccessibilityObjectWrapper accessibilityParameterizedAttributeNames]):
        (-[AccessibilityObjectWrapper accessibilityAttributeValue:forParameter:]):

2008-07-31  Kevin Ollivier <kevino@theolliviers.com>

        Second attempt at Windows/wx build fix. Instead of avoiding inclusion of windows.h,
        use defines, etc. to avoid conflicts in each affected file.

        * config.h:
        * platform/image-decoders/jpeg/JPEGImageDecoder.cpp:
        * platform/wx/PopupMenuWx.cpp:

2008-07-31  Erik Bunce  <elbunce@thehive.com>

        Reviewed by Simon.

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

        Include the Writing Direction sub-menu in the context menu of all
        platforms but GTK. This fixes a regression introduced by revision
        34426.

        * platform/ContextMenu.cpp:
        (WebCore::ContextMenu::populate):

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

        Reviewed by Adam and Hyatt

        Fix for <rdar://problem/6099748>

        Adds a "don't enforce CSS mime type in strict mode" quirk for iWeb 2

        * WebCore.base.exp:

        * html/HTMLLinkElement.cpp:
        (WebCore::HTMLLinkElement::setCSSStyleSheet):

        * loader/CachedCSSStyleSheet.cpp:
        (WebCore::CachedCSSStyleSheet::canUseSheet):
        * loader/CachedCSSStyleSheet.h:
        (WebCore::CachedCSSStyleSheet::sheetText): 
        * page/Settings.cpp:

        (WebCore::Settings::Settings):
        (WebCore::Settings::setEnforceCSSMIMETypeInStrictMode):
        * page/Settings.h:
        (WebCore::Settings::enforceCSSMIMETypeInStrictMode):

2008-07-31  Erik Bunce  <elbunce@thehive.com>

        Reviewed by Simon.

        Added the ability to get SQLite headers and source from the location 
        specified via the SQLITE3SRCDIR environtment variable.

        * WebCore.pro:

2008-07-31  Alexey Proskuryakov  <ap@webkit.org>

        Rubber-stamped by Maciej.

        Eliminate JSLock (it was already disabled, removing the stub implementaion and all
        call sites now).

        * ForwardingHeaders/kjs/JSLock.h: Removed.
        * WebCore.vcproj/WebCore.vcproj:
        * bindings/js/GCController.cpp:
        (WebCore::collect):
        (WebCore::GCController::gcTimerFired):
        (WebCore::GCController::garbageCollectNow):
        * 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/JSDOMWindowBase.cpp:
        (WebCore::DOMWindowTimer::~DOMWindowTimer):
        (WebCore::JSDOMWindowBase::clear):
        (WebCore::JSDOMWindowBase::timerFired):
        * bindings/js/JSEventCustom.cpp:
        (WebCore::toJS):
        * bindings/js/JSEventListener.cpp:
        (WebCore::JSAbstractEventListener::handleEvent):
        (WebCore::JSLazyEventListener::parseCode):
        * bindings/js/JSNSResolver.cpp:
        (WebCore::JSNSResolver::lookupNamespaceURI):
        * bindings/js/JSNodeFilterCondition.cpp:
        (WebCore::JSNodeFilterCondition::acceptNode):
        * bindings/js/ScheduledAction.cpp:
        (WebCore::ScheduledAction::execute):
        * bindings/js/ScriptController.cpp:
        (WebCore::ScriptController::evaluate):
        (WebCore::ScriptController::clear):
        (WebCore::ScriptController::createHTMLEventHandler):
        (WebCore::ScriptController::createSVGEventHandler):
        (WebCore::ScriptController::initScript):
        (WebCore::ScriptController::updateDocument):
        * bindings/objc/WebScriptObject.mm:
        (_didExecute):
        (-[WebScriptObject callWebScriptMethod:withArguments:]):
        (-[WebScriptObject evaluateWebScript:]):
        (-[WebScriptObject setValue:forKey:]):
        (-[WebScriptObject valueForKey:]):
        (-[WebScriptObject removeWebScriptKey:]):
        (-[WebScriptObject stringRepresentation]):
        (-[WebScriptObject webScriptValueAtIndex:]):
        (-[WebScriptObject setWebScriptValueAtIndex:value:]):
        (+[WebScriptObject _convertValueToObjcValue:originRootObject:rootObject:]):
        * bridge/NP_jsobject.cpp:
        (_NPN_InvokeDefault):
        (_NPN_Invoke):
        (_NPN_Evaluate):
        (_NPN_GetProperty):
        (_NPN_SetProperty):
        (_NPN_RemoveProperty):
        (_NPN_HasProperty):
        (_NPN_HasMethod):
        (_NPN_Enumerate):
        * bridge/c/c_class.cpp:
        (KJS::Bindings::CClass::~CClass):
        (KJS::Bindings::CClass::methodsNamed):
        (KJS::Bindings::CClass::fieldNamed):
        * bridge/c/c_instance.cpp:
        (KJS::Bindings::CInstance::invokeMethod):
        (KJS::Bindings::CInstance::invokeDefaultMethod):
        (KJS::Bindings::CInstance::getPropertyNames):
        * bridge/c/c_runtime.cpp:
        (KJS::Bindings::CField::valueFromInstance):
        (KJS::Bindings::CField::setValueToInstance):
        * bridge/c/c_utility.cpp:
        (KJS::Bindings::convertValueToNPVariant):
        (KJS::Bindings::convertNPVariantToValue):
        * bridge/jni/jni_class.cpp:
        (JavaClass::JavaClass):
        (JavaClass::~JavaClass):
        * bridge/jni/jni_instance.cpp:
        (JavaInstance::stringValue):
        * bridge/jni/jni_jsobject.mm:
        (JavaJSObject::call):
        (JavaJSObject::eval):
        (JavaJSObject::getMember):
        (JavaJSObject::setMember):
        (JavaJSObject::removeMember):
        (JavaJSObject::getSlot):
        (JavaJSObject::setSlot):
        (JavaJSObject::toString):
        (JavaJSObject::convertValueToJObject):
        (JavaJSObject::convertJObjectToValue):
        * bridge/jni/jni_objc.mm:
        (KJS::Bindings::dispatchJNICall):
        * bridge/jni/jni_runtime.cpp:
        (appendClassName):
        (JavaMethod::signature):
        * bridge/jni/jni_runtime.h:
        (KJS::Bindings::JavaString::JavaString):
        (KJS::Bindings::JavaString::_commonInit):
        (KJS::Bindings::JavaString::~JavaString):
        (KJS::Bindings::JavaString::UTF8String):
        * bridge/jni/jni_utility.cpp:
        (KJS::Bindings::convertValueToJValue):
        * bridge/npruntime.cpp:
        (_NPN_GetStringIdentifier):
        * bridge/objc/objc_instance.mm:
        (ObjcInstance::moveGlobalExceptionToExecState):
        (ObjcInstance::invokeMethod):
        (ObjcInstance::invokeDefaultMethod):
        (ObjcInstance::setValueOfUndefinedField):
        (ObjcInstance::getValueOfUndefinedField):
        * bridge/objc/objc_runtime.mm:
        (ObjcField::valueFromInstance):
        (ObjcField::setValueToInstance):
        * bridge/objc/objc_utility.mm:
        (KJS::Bindings::convertValueToObjcValue):
        (KJS::Bindings::convertNSStringToString):
        (KJS::Bindings::convertObjcValueToValue):
        * bridge/qt/qt_instance.cpp:
        (KJS::Bindings::QtRuntimeObjectImp::removeFromCache):
        (KJS::Bindings::QtInstance::~QtInstance):
        (KJS::Bindings::QtInstance::getQtInstance):
        (KJS::Bindings::QtInstance::getRuntimeObject):
        * bridge/qt/qt_runtime.cpp:
        (KJS::Bindings::convertValueToQVariant):
        (KJS::Bindings::convertQVariantToValue):
        (KJS::Bindings::QtRuntimeMetaMethod::call):
        (KJS::Bindings::QtRuntimeConnectionMethod::call):
        (KJS::Bindings::QtConnectionObject::QtConnectionObject):
        (KJS::Bindings::QtConnectionObject::execute):
        * bridge/runtime.cpp:
        (KJS::Bindings::Instance::createRuntimeObject):
        * bridge/testbindings.cpp:
        (main):
        * bridge/testbindings.mm:
        (main):
        * bridge/testqtbindings.cpp:
        (main):
        * dom/Document.cpp:
        (WebCore::Document::~Document):
        * dom/Node.cpp:
        (WebCore::Node::setDocument):
        * history/CachedPage.cpp:
        (WebCore::CachedPage::CachedPage):
        (WebCore::CachedPage::restore):
        (WebCore::CachedPage::clear):
        * html/HTMLPlugInElement.cpp:
        (WebCore::HTMLPlugInElement::createNPObject):
        * loader/FrameLoader.cpp:
        (WebCore::getString):
        * page/Frame.cpp:
        (WebCore::Frame::bindingRootObject):
        (WebCore::Frame::windowScriptNPObject):
        (WebCore::Frame::clearScriptObjects):
        * page/InspectorController.cpp:
        (WebCore::jsStringRef):
        (WebCore::ConsoleMessage::ConsoleMessage):
        (WebCore::XMLHttpRequestResource::XMLHttpRequestResource):
        (WebCore::XMLHttpRequestResource::~XMLHttpRequestResource):
        (WebCore::getResourceDocumentNode):
        (WebCore::search):
        (WebCore::inspectedWindow):
        (WebCore::wrapCallback):
        (WebCore::currentCallFrame):
        (WebCore::profiles):
        (WebCore::InspectorController::focusNode):
        (WebCore::InspectorController::inspectedWindowScriptObjectCleared):
        (WebCore::InspectorController::addDatabaseScriptResource):
        (WebCore::InspectorController::addScriptProfile):
        * page/JavaScriptCallFrame.cpp:
        (WebCore::JavaScriptCallFrame::evaluate):
        * page/JavaScriptProfileNode.cpp:
        (WebCore::getTotalTime):
        (WebCore::getSelfTime):
        (WebCore::getTotalPercent):
        (WebCore::getSelfPercent):
        (WebCore::getNumberOfCalls):
        (WebCore::getChildren):
        (WebCore::getVisible):
        * page/Page.cpp:
        * page/mac/FrameMac.mm:
        (WebCore::Frame::windowScriptObject):
        * page/qt/FrameQt.cpp:
        * plugins/PluginView.cpp:
        (WebCore::PluginView::start):
        (WebCore::getString):
        (WebCore::PluginView::performRequest):
        (WebCore::PluginView::bindingInstance):
        * plugins/gtk/PluginViewGtk.cpp:
        (WebCore::PluginView::paint):
        (WebCore::PluginView::handleKeyboardEvent):
        (WebCore::PluginView::handleMouseEvent):
        (WebCore::PluginView::setNPWindowRect):
        (WebCore::PluginView::stop):
        (WebCore::PluginView::init):
        * plugins/qt/PluginViewQt.cpp:
        (WebCore::PluginView::setNPWindowRect):
        (WebCore::PluginView::stop):
        (WebCore::PluginView::init):
        * plugins/win/PluginViewWin.cpp:
        (WebCore::PluginView::dispatchNPEvent):
        (WebCore::PluginView::handleKeyboardEvent):
        (WebCore::PluginView::handleMouseEvent):
        (WebCore::PluginView::setNPWindowRect):
        (WebCore::PluginView::stop):
        * xml/XMLHttpRequest.cpp:
        (WebCore::XMLHttpRequest::clearResponse):
        (WebCore::XMLHttpRequest::didFinishLoading):
        (WebCore::XMLHttpRequest::didReceiveData):

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

        Fix various minor bugs with style editing in the Inspector.

        - Restores the scroll position to 0,0 when finished editing a
        string that was longer than the editing input area.

        - Adjusts the margin of the list item to ensure the text does
        not shift when entering and exiting editing mode.

        - Reliably remembers if a shorthand has children when the
        children haven't been populated yet.

        - Reliably remembers if a shorthand was expanded, and expands
        if needed after editing finishes.

        - Hides color swatches when editing.

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

        Reviewed by Adam Roben.

        * page/inspector/StylesSidebarPane.js:
        (WebInspector.StylePropertyTreeElement.prototype.startEditing):
        Store the expanded state and children state in wasExpanded and
        reallyHasChildren properties.
        (WebInspector.StylePropertyTreeElement.prototype.editingEnded):
        Removed the wasExpanded argument and use the reallyHasChildren and
        wasExpanded properties to restore state. Deletes the state properties.
        (WebInspector.StylePropertyTreeElement.prototype.editingCancelled):
        Removed the wasExpanded argument.
        (WebInspector.StylePropertyTreeElement.prototype.editingCommitted):
        Removed the wasExpanded argument.
        * page/inspector/inspector.css: Tweak the margin and hides the color
        swatches. ALso removes a rule that was not needed.
        * page/inspector/inspector.js:
        (WebInspector.startEditing): Restore the scrollLeft and scrollTop
        to zero when editing finishes.

2008-07-30  Alice Liu  <alice.liu@apple.com>

        Implement userIdleTime() for Windows, and place a band-aid over other
        platform implementations of userIdleTime().  This will fix the issue
        of indefinitely postposing releasing pages from the PageCache
        on non-Mac platforms, causing us to hang onto just about everything 
        else about a web page.
        
        Reviewed by Sam Weinig.

        * platform/gtk/TemporaryLinkStubs.cpp:
        * platform/wx/TemporaryLinkStubs.cpp:
        * platform/qt/TemporaryLinkStubs.cpp:
        (WebCore::userIdleTime): set to FLT_MAX

        * platform/win/SystemTimeWin.cpp:
        (WebCore::userIdleTime): implemented

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

        Reviewed by Anders Carlsson.

        Fixes <rdar://problem/6041390>

        Adds the ability to have a frame that is "disconnected" from the 
        main frame from the perspective of top and parent in 
        Javascript.

        * WebCore.base.exp:
        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::parent):
        (WebCore::DOMWindow::top):
        * page/Frame.cpp:
        (WebCore::Frame::isDisconnectedFrame):
        (WebCore::Frame::setIsDisconnectedFrame):
        (WebCore::FramePrivate::FramePrivate):
        * page/Frame.h:
        * page/FramePrivate.h:
        * page/FrameTree.cpp:
        (WebCore::FrameTree::parent):
        (WebCore::FrameTree::top):
        * page/FrameTree.h:

2008-07-25  Eric Seidel  <eric@webkit.org>

        Reviewed by Justin.

        Crash Safari when dragging images into Google presentations
        https://bugs.webkit.org/show_bug.cgi?id=20161

        Test: manual-tests/remove-on-drop-crash.html

        * editing/ReplaceSelectionCommand.cpp:
        (WebCore::ReplaceSelectionCommand::doApply):
        * manual-tests/remove-on-drop-crash.html: Added.

2008-07-30  Christian Dywan  <christian@twotoasts.de>

        Reviewed by Mark.

        Build fix for Cairo < 1.6

        * platform/graphics/cairo/PathCairo.cpp:
        (WebCore::Path::boundingRect): use cairo_stroke_extends for < 1.6

2008-07-29  Kevin McCullough  <kmccullough@apple.com>

        Reviewed by Geoff.

        <rdar://problem/6110314> Crash in profiler dereferencing null frame or
        page (20214)
        - Null check.

        * page/Console.cpp:
        (WebCore::Console::finishedProfiling):

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

        https://bugs.webkit.org/show_bug.cgi?id=18070
        
        Full page zoom needs to work properly with JS mouse events.  Make sure to adjust the coordinates of the
        JS mouse event to account for zoom.

        Reviewed by olliej

        * dom/EventTargetNode.cpp:
        (WebCore::EventTargetNode::dispatchMouseEvent):

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

        Reviewed by Darin Adler.

        Update Cross-site XMLHttpRequests using Access control to
        the latest spec. (Editor's Draft 8 July 2008)

        - This leaves us at about the same place as we previously were
          still needing preflight caching and better redirect support.

        * GNUmakefile.am:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * WebCoreSources.bkl:
        * xml/AccessControlList.cpp: Removed.
        * xml/AccessControlList.h: Removed.
        * xml/AccessItem.cpp: Removed.
        * xml/AccessItem.h: Removed.
        * xml/AccessItemRule.cpp: Removed.
        * xml/AccessItemRule.h: Removed.
        * xml/XMLHttpRequest.cpp:
        (WebCore::isOnAccessControlSimpleRequestHeaderWhitelist):
        (WebCore::XMLHttpRequest::XMLHttpRequest):
        (WebCore::XMLHttpRequest::isSimpleCrossSiteAccessRequest):
        (WebCore::XMLHttpRequest::makeCrossSiteAccessRequest):
        (WebCore::XMLHttpRequest::makeSimpleCrossSiteAccessRequest):
        (WebCore::XMLHttpRequest::makeCrossSiteAccessRequestWithPreflight):
        (WebCore::XMLHttpRequest::handleAsynchronousPreflightResult):
        (WebCore::XMLHttpRequest::abort):
        (WebCore::XMLHttpRequest::clearRequest):
        (WebCore::XMLHttpRequest::didFinishLoading):
        (WebCore::XMLHttpRequest::didFinishLoadingPreflight):
        (WebCore::XMLHttpRequest::accessControlCheck):
        (WebCore::XMLHttpRequest::didReceiveResponse):
        (WebCore::parseAccessControlAllowList):
        (WebCore::XMLHttpRequest::didReceiveResponsePreflight):
        * xml/XMLHttpRequest.h:

2008-07-29  Kevin Calhoun  <kcalhoun@apple.com>

        Reviewed by Adele.

        Fix for <rdar://problem/6060647> Adopt QTMovieOpenForPlaybackAttribute flag

        * platform/graphics/mac/MediaPlayerPrivateQTKit.mm: (WebCore::MediaPlayerPrivate::createQTMovie):

2008-07-29  Kevin Calhoun  <kcalhoun@apple.com>

        Reviewed by Adele.

        Fix for <rdar://problem/6031021> Make standalone video render more like the quicktime plugin to improve performance

        For standalone video, use QTMovieView to draw.

        * platform/graphics/mac/MediaPlayerPrivateQTKit.mm:
        (WebCore::MediaPlayerPrivate::createQTMovieView): Moved nil checks to setUpVideoRendering.
         Associate the QTMovieView with the WebCoreMovieObserver.
         If we're in a media document, allow QTMovieView to render in its default mode; otherwise tell it to draw synchronously. 
        (WebCore::MediaPlayerPrivate::detachQTMovieView): Set the WebCoreMovieObserver's view to nil.
        (WebCore::MediaPlayerPrivate::createQTVideoRenderer): Nil check is now in setUpVideoRendering, which is the only caller of this.
        (WebCore::MediaPlayerPrivate::setUpVideoRendering): Added nil checks.  Call createQTMovieView for media documents.
        (WebCore::MediaPlayerPrivate::tearDownVideoRendering): Call detachQTMovieView if a QTMovieView exists.
        (WebCore::MediaPlayerPrivate::setRect): Call setFrame on the QTMovieView if necessary.
        (-[WebCoreMovieObserver menuForEventDelegate:]): Added. Returns the frame view's menu.
        (-[WebCoreMovieObserver setView:]): Added.

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

        Reviewed by Dan Bernstein.

        Fix for <rdar://problem/6073372> Move built-in controls below <video> element for standalone media documents

        * css/CSSSelector.cpp: (WebCore::CSSSelector::extractPseudoType): Added -webkit-full-page-media pseudo class.
        * css/CSSSelector.h: (WebCore::CSSSelector::): Added PseudoFullPageMedia.
        * css/CSSStyleSelector.cpp: (WebCore::CSSStyleSelector::SelectorChecker::checkOneSelector): Added case to
        apply PseudoFullPageMedia for elements in a full page media document.

        * css/html4.css: Added rule to shift control panel down for video in standalone media documents.

        * rendering/RenderMedia.cpp:
        (WebCore::RenderMedia::lowestPosition): Added implementation that takes the controls into account.
        This makes sure that scrollbars on the page will account for controls not directly contained in the RenderMedia.
        (WebCore::RenderMedia::rightmostPosition): ditto.
        (WebCore::RenderMedia::leftmostPosition): ditto.
        * rendering/RenderMedia.h:

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

        Reviewed by Anders Carlsson.

        <rdar://problem/6084585> Investigate upload progress events.

        - Add progress notifications for data being sent via a ResourceHandle.
        - Add XMLHttpRequestUpload support.

        Upload notifications only work on the Mac right now as the CFNetwork API
        on windows does not expose enough information.

        Tests: http/tests/xmlhttprequest/upload-onload-event.html
               http/tests/xmlhttprequest/upload-onloadstart-event.html
               http/tests/xmlhttprequest/upload-onprogress-event.html
               http/tests/xmlhttprequest/upload-progress-events.html

        * DerivedSources.make:
        * GNUmakefile.am:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * WebCoreSources.bkl:
        * bindings/js/JSEventTargetBase.cpp:
        (WebCore::toJS):
        * bindings/js/JSXMLHttpRequestCustom.cpp:
        (WebCore::JSXMLHttpRequest::mark):
        * bindings/js/JSXMLHttpRequestUploadCustom.cpp: Added.
        (WebCore::JSXMLHttpRequestUpload::mark):
        (WebCore::JSXMLHttpRequestUpload::onabort):
        (WebCore::JSXMLHttpRequestUpload::setOnabort):
        (WebCore::JSXMLHttpRequestUpload::onerror):
        (WebCore::JSXMLHttpRequestUpload::setOnerror):
        (WebCore::JSXMLHttpRequestUpload::onload):
        (WebCore::JSXMLHttpRequestUpload::setOnload):
        (WebCore::JSXMLHttpRequestUpload::onloadstart):
        (WebCore::JSXMLHttpRequestUpload::setOnloadstart):
        (WebCore::JSXMLHttpRequestUpload::onprogress):
        (WebCore::JSXMLHttpRequestUpload::setOnprogress):
        (WebCore::JSXMLHttpRequestUpload::addEventListener):
        (WebCore::JSXMLHttpRequestUpload::removeEventListener):
        (WebCore::JSXMLHttpRequestUpload::dispatchEvent):
        * dom/EventTarget.cpp:
        (WebCore::EventTarget::toXMLHttpRequestUpload):
        * dom/EventTarget.h:
        * loader/ResourceLoader.cpp:
        (WebCore::ResourceLoader::didSendData):
        * loader/ResourceLoader.h:
        * loader/SubresourceLoader.cpp:
        (WebCore::SubresourceLoader::didSendData):
        * loader/SubresourceLoader.h:
        * loader/SubresourceLoaderClient.h:
        (WebCore::SubresourceLoaderClient::didSendData):
        * page/DOMWindow.idl:
        * platform/network/FormData.cpp:
        (WebCore::FormData::FormData):
        * platform/network/FormData.h:
        (WebCore::FormData::alwaysStream):
        (WebCore::FormData::setAlwaysStream):
        * platform/network/ResourceHandleClient.h:
        (WebCore::ResourceHandleClient::didSendData):
        * platform/network/mac/FormDataStreamMac.h:
        * platform/network/mac/FormDataStreamMac.mm:
        (WebCore::getStreamFormDataMap):
        (WebCore::getStreamResourceHandleMap):
        (WebCore::associateStreamWithResourceHandle):
        (WebCore::disassociateStreamWithResourceHandle):
        (WebCore::DidSendDataCallbackData::DidSendDataCallbackData):
        (WebCore::performDidSendDataCallback):
        (WebCore::formCreate):
        (WebCore::formFinalize):
        (WebCore::formRead):
        (WebCore::setHTTPBody):
        (WebCore::httpBodyFromStream):
        * platform/network/mac/ResourceHandleMac.mm:
        (WebCore::ResourceHandle::start):
        (WebCore::ResourceHandle::cancel):
        (-[WebCoreResourceHandleAsDelegate connection:willSendRequest:redirectResponse:]):
        (-[WebCoreResourceHandleAsDelegate connectionDidFinishLoading:]):
        (-[WebCoreResourceHandleAsDelegate connection:didFailWithError:]):
        * xml/XMLHttpRequest.cpp:
        (WebCore::XMLHttpRequest::XMLHttpRequest):
        (WebCore::XMLHttpRequest::~XMLHttpRequest):
        (WebCore::XMLHttpRequest::upload):
        (WebCore::XMLHttpRequest::open):
        (WebCore::XMLHttpRequest::send):
        (WebCore::XMLHttpRequest::createRequest):
        (WebCore::XMLHttpRequest::abort):
        (WebCore::XMLHttpRequest::networkError):
        (WebCore::XMLHttpRequest::abortError):
        (WebCore::XMLHttpRequest::didSendData):
        * xml/XMLHttpRequest.h:
        (WebCore::XMLHttpRequest::optionalUpload):
        * xml/XMLHttpRequest.idl:
        * xml/XMLHttpRequestUpload.cpp: Added.
        (WebCore::XMLHttpRequestUpload::XMLHttpRequestUpload):
        (WebCore::XMLHttpRequestUpload::addEventListener):
        (WebCore::XMLHttpRequestUpload::removeEventListener):
        (WebCore::XMLHttpRequestUpload::dispatchEvent):
        (WebCore::XMLHttpRequestUpload::dispatchXMLHttpRequestProgressEvent):
        (WebCore::XMLHttpRequestUpload::dispatchAbortEvent):
        (WebCore::XMLHttpRequestUpload::dispatchErrorEvent):
        (WebCore::XMLHttpRequestUpload::dispatchLoadEvent):
        (WebCore::XMLHttpRequestUpload::dispatchLoadStartEvent):
        (WebCore::XMLHttpRequestUpload::dispatchProgressEvent):
        * xml/XMLHttpRequestUpload.h: Added.
        (WebCore::XMLHttpRequestUpload::create):
        (WebCore::XMLHttpRequestUpload::toXMLHttpRequestUpload):
        (WebCore::XMLHttpRequestUpload::associatedXMLHttpRequest):
        (WebCore::XMLHttpRequestUpload::disconnectXMLHttpRequest):
        (WebCore::XMLHttpRequestUpload::setOnAbortListener):
        (WebCore::XMLHttpRequestUpload::onAbortListener):
        (WebCore::XMLHttpRequestUpload::setOnErrorListener):
        (WebCore::XMLHttpRequestUpload::onErrorListener):
        (WebCore::XMLHttpRequestUpload::setOnLoadListener):
        (WebCore::XMLHttpRequestUpload::onLoadListener):
        (WebCore::XMLHttpRequestUpload::setOnLoadStartListener):
        (WebCore::XMLHttpRequestUpload::onLoadStartListener):
        (WebCore::XMLHttpRequestUpload::setOnProgressListener):
        (WebCore::XMLHttpRequestUpload::onProgressListener):
        (WebCore::XMLHttpRequestUpload::eventListeners):
        (WebCore::XMLHttpRequestUpload::refEventTarget):
        (WebCore::XMLHttpRequestUpload::derefEventTarget):
        * xml/XMLHttpRequestUpload.idl: Added.

2008-07-29  Maxime Britto  <britto@apple.com>

        Reviewed by Darin.

        <rdar://problem/6095023> "When pan-scrolling, mouse click on hyperlink stop the pan-Scroll but follow the link after that."
        With this patch we now stop the pan scroll and swallow the event to prevent any following action.

        * page/EventHandler.cpp:
        (WebCore::EventHandler::handleMousePressEvent): If we were in pan scrolling mode we no longer just stop the pan scroll and continue with the function, we now stop and return true to attest that we swallowed the event.

2008-07-29  Maxime Britto  <britto@apple.com>

        Reviewed by adele.

        Test: fast/events/autoscroll-in-textfield.html

        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::canBeProgramaticallyScrolled): reverted a bad change introduced in r35244
        nb:the test case introduced in r35244 is still working.

2008-07-29  Maxime Britto  <britto@apple.com>

        Reviewed by adele.
        This test verifies that the autoscroll works within textfields.

        * fast/events/autoscroll-in-textfield-expected.txt: Added.
        * fast/events/autoscroll-in-textfield.html: Added.

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

        Reviewed by Sammy Weinig.

        Fix for <rdar://problem/6103024>
        When a QT movie is loaded directly in the browser, I can't pause it by single-clicking on the video

        Test: media/video-click-dlbclick-standalone.html

        * loader/MediaDocument.cpp: (WebCore::MediaDocument::defaultEventHandler): For standalone media documents,
        match the default Quicktime plugin behavior to allow clicking and double-clicking to pause and play the media.
        * loader/MediaDocument.h: Added defaultEventHandler.

        * html/HTMLMediaElement.cpp: (WebCore::HTMLMediaElement::defaultEventHandler): Return early if the event has been handled.
        * rendering/MediaControlElements.cpp:
        (WebCore::MediaControlMuteButtonElement::defaultEventHandler): Correct what was probably a typo.  Instead of "event->defaultHandled()",
         it is supposed to be "event->setDefaultHandled()".
        (WebCore::MediaControlPlayButtonElement::defaultEventHandler): ditto.
        (WebCore::MediaControlSeekButtonElement::defaultEventHandler): ditto.
        (WebCore::MediaControlFullscreenButtonElement::defaultEventHandler): ditto.

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

        Reviewed by Dave Hyatt.

        - fix <rdar://problem/6059648> Some content not visible when the window is short at courtneyalbright.com

        Test: fast/overflow/float-in-relpositioned.html

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::lowestPosition): Add this block's relative offset
        to floats' and positioned objects' lowest position.
        (WebCore::RenderBlock::rightmostPosition): Ditto.
        (WebCore::RenderBlock::leftmostPosition): Ditto.
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::lowestPosition): Removed redundant test.
        (WebCore::RenderBox::rightmostPosition): Ditto.
        (WebCore::RenderBox::leftmostPosition): Ditto.

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

        Reviewed by Dave Hyatt.

        - fix <rdar://problem/6048566> Repaint original element's position, not its offset position

        Test: fast/repaint/layout-state-relative.html

        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::absolutePosition): Changed the LayoutState-enabled
        code path to account for the object's relative offset.
        (WebCore::RenderBox::computeAbsoluteRepaintRect): Ditto.

2008-07-29  Keishi Hattori  <casey.hattori@gmail.com>

        Fixed Bug 19158: Inspector should support console.group/console.groupEnd

        <https://bugs.webkit.org/show_bug.cgi?id=19158>

        Reviewed by Tim Hatcher and Adam Roben.

        * bindings/js/JSConsoleCustom.cpp:
        (WebCore::JSConsole::group): Added.
        * page/Console.cpp:
        (WebCore::Console::group): Added.
        (WebCore::Console::groupEnd): Added.
        * page/Console.h:
        (WebCore::):
        * page/Console.idl: Added group/groupEnd.
        * page/InspectorController.cpp:
        (WebCore::ConsoleMessage::ConsoleMessage):
        (WebCore::InspectorController::InspectorController): Added m_groupLevel.
        (WebCore::InspectorController::addMessageToConsole): Added groupLevel argument.
        (WebCore::InspectorController::startGroup): Increments m_groupLevel by one and calls js function if needed.
        (WebCore::InspectorController::endGroup): Decrements m_groupLevel by one and calls js function if needed.
        (WebCore::InspectorController::addScriptConsoleMessage): Added groupLevel argument.
        (WebCore::InspectorController::didCommitLoad): Resets m_groupLevel.
        * page/InspectorController.h:
        * page/inspector/Console.js:
        (WebInspector.Console): Added groupLevel and currentGroup topGroup.
        (WebInspector.Console.addMessage): Calls addMessage method in the currentGroup.
        (WebInspector.Console.startGroup): Added.
        (WebInspector.Console.endGroup): Added.
        (WebInspector.Console.clearMessages): Resets groupLevel and currentGroup.
        (WebInspector.ConsoleMessage): Added groupLevel property.
        (WebInspector.ConsoleMessage.MessageLevel.GroupTitle): Added.
        (WebInspector.ConsoleGroup): Added.
        (WebInspector.ConsoleGroup.addMessage): Adds console message to group.
        (WebInspector.ConsoleGroup._titleClicked): Adds "collapsed" style class.
        * page/inspector/inspector.css:
        * page/inspector/inspector.js:
        (WebInspector.startGroupInConsole): Calls console.startGroup
        (WebInspector.endGroupInConsole): Calls console.endGroup

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

        Add names for WebCore's threads

        Reviewed by Anders Carlsson.

        * loader/icon/IconDatabase.cpp:
        (WebCore::IconDatabase::open):
        * storage/DatabaseThread.cpp:
        (WebCore::DatabaseThread::start):
        * storage/LocalStorageThread.cpp:
        (WebCore::LocalStorageThread::start):
        Pass in names to createThread.

        * platform/network/cf/ResourceHandleCFNet.cpp:
        (WebCore::runLoaderThread):
        (WebCore::ResourceHandle::loaderRunLoop):
        Changed to use WTF::createThread.

2008-07-28  Anders Carlsson  <andersca@apple.com>

        Reviewed by Kevin Decker.

        Based on a patch from Dimcho Balev.
        
        Windows part of 
    
        https://bugs.webkit.org/show_bug.cgi?id=18676
        <rdar://problem/6106578>
        Plug-In API Proposal: Enable plugins to receive response body when an HTTP error occurs

        * plugins/PluginStream.cpp:
        (WebCore::PluginStream::wantsAllStreams):
        * plugins/PluginStream.h:

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-07-28  David Hyatt  <hyatt@apple.com>

        Add support for CSS variable declaration blocks.

        Reviewed by Sam

        Added tests in fast/css/variables.

        * css/CSSGrammar.y:
        * css/CSSMutableStyleDeclaration.h:
        (WebCore::CSSMutableStyleDeclaration::isMutableStyleDeclaration):
        * css/CSSParser.cpp:
        (WebCore::CSSParser::addVariableDeclarationBlock):
        * css/CSSParser.h:
        * css/CSSProperty.cpp:
        (WebCore::CSSProperty::cssText):
        * css/CSSPropertyNames.in:
        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::addMatchedDeclaration):
        (WebCore::CSSStyleSelector::resolveVariablesForDeclaration):
        * css/CSSStyleSelector.h:
        * css/CSSValueList.h:
        (WebCore::CSSValueList::isValueList):
        * css/CSSVariablesDeclaration.cpp:
        (WebCore::CSSVariablesDeclaration::CSSVariablesDeclaration):
        (WebCore::CSSVariablesDeclaration::getVariableValue):
        (WebCore::CSSVariablesDeclaration::removeVariable):
        (WebCore::CSSVariablesDeclaration::addParsedVariable):
        (WebCore::CSSVariablesDeclaration::getParsedSimpleVariable):
        (WebCore::CSSVariablesDeclaration::getParsedComplexVariable):
        * css/CSSVariablesDeclaration.h:
        (WebCore::CSSVariablesDeclaration::create):
        * css/StyleBase.cpp:
        (WebCore::StyleBase::cssText):
        * css/StyleBase.h:
        (WebCore::StyleBase::isValueList):
        (WebCore::StyleBase::isMutableStyleDeclaration):

2008-07-28  Anders Carlsson  <andersca@apple.com>

        Reviewed by Sam.

        <rdar://problem/6098335>
        https://bugs.webkit.org/show_bug.cgi?id=20150
        
        Handle willSendRequest correctly.

        * loader/SubresourceLoader.cpp:
        (WebCore::SubresourceLoader::willSendRequest):
        Make sure to keep the previous URL around so we know when to call willSendRequest.
        
        * xml/XMLHttpRequest.cpp:
        (WebCore::XMLHttpRequest::processSyncLoadResults):
        Abort if we don't have access to the response URL.
        
        (WebCore::XMLHttpRequest::willSendRequest):
        Dispatch a network error if we can't access the new URL.

2008-07-28  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Sam Weinig.

        Renamed "ConstructTypeNative" => "ConstructTypeHost".
        
2008-07-28  Anders Carlsson  <andersca@apple.com>

        Reviewed by Kevin Decker.

        Based on a patch by Dimcho Balev.

        https://bugs.webkit.org/show_bug.cgi?id=18676
        <rdar://problem/6106578>
        Plug-In API Proposal: Enable plugins to receive response body when an HTTP error occurs
        
        * bridge/npapi.h:
        Add new enum values.
        
        * loader/NetscapePlugInStreamLoader.cpp:
        (WebCore::NetscapePlugInStreamLoader::didReceiveResponse):
        When the plug-in indicates that it wants all streams to be delivered, don't cancel the stream
        if an error occurs.
        
        * loader/NetscapePlugInStreamLoader.h:
        (WebCore::NetscapePlugInStreamLoaderClient::wantsAllStreams):
        Add new client method.

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

        Reviewed by Oliver Hunt.

        Fix for https://bugs.webkit.org/show_bug.cgi?id=20176
        querySelectorAll id optimization no longer working

        Turn the querySelector/querySelectorAll id optimization back on
        for only strict and almost strict mode.  In quirks mode, the optimiztion
        won't work as the id match is not case sensitive.

        Tests: fast/dom/SelectorAPI/caseID-almost-strict.html
               fast/dom/SelectorAPI/caseID-strict.html
               fast/dom/SelectorAPI/caseID.html

        * dom/Node.cpp:
        (WebCore::Node::querySelector):
        (WebCore::Node::querySelectorAll):
        * dom/SelectorNodeList.cpp:
        (WebCore::createSelectorNodeList):
        * dom/SelectorNodeList.h:

2008-07-27  Anatoli Papirovski  <apapirovski@mac.com>

        Reviewed by Dave Hyatt.

        Fix for https://bugs.webkit.org/show_bug.cgi?id=14346
        Modified the css parser:
        - not to fail when closing braces are not found for 
          a declaration at the end of the file
        - not to accept "!important fail" as valid
        - to keep accepting @import when it comes after invalid @ rules
        - not to drop the whole @media block when there's an error before the 
          closing brace
        + some other minor css parsing revisions.

        CSSGrammar.y tweaked by David Kilzer to fix Tiger builds.

        * css/CSSGrammar.y:

2008-07-27  Jan Michael Alonzo  <jmalonzo@webkit.org>

        Reviewed by Eric Seidel.

        Use --outputDir instead of --output when invoking make_names.pl
        There's no option named "output" in make_names.pl

        * GNUmakefile.am:
        * WebCore.pro:
        * DerivedSources.make: Remove --output. Not necessary here.
        * bindings/scripts/generate-bindings.pl: Rename --outputdir to
          --outputDir for consistency with make_names.pl

2008-07-26  Dirk Schulze  <vbs85@gmx.de>

        Reviewed by Eric Seidel.

        http://bugs.webkit.org/show_bug.cgi?id=18694
        [CAIRO] Problem with rotation in a given matrix in SVG

        Changed values given to AffineTransform.

        * platform/graphics/cairo/AffineTransformCairo.cpp:
        (WebCore::AffineTransform::AffineTransform):
        (WebCore::AffineTransform::setMatrix):

2008-07-26  Jan Michael Alonzo  <jmalonzo@webkit.org>

        Reviewed by Mark Rowe.

        Call curl_global_cleanup() to release resources acquired by curl_global_init()

        * platform/network/curl/ResourceHandleManager.cpp:
        (WebCore::ResourceHandleManager::~ResourceHandleManager):

2008-07-26  Marc Ordinas i Llopis  <marc.ordinasillopis@collabora.co.uk>

        Reviewed by Simon Hausmann.

        Bug 18938: [GTK] Plugins not resized
        https://bugs.webkit.org/show_bug.cgi?id=18938

        * plugins/PluginView.cpp:
        (WebCore::PluginView::setFrameGeometry): When viewing a full-page
        plugin in unix, geometry changes have to be passed to the plugin.

2008-07-26  Keishi Hattori  <casey.hattori@gmail.com>

        Reviewed by Adam Roben.

        Add console.time/timeEnd.
        https://bugs.webkit.org/show_bug.cgi?id=19159

        * manual-tests/inspector/console-time.html: Added. Test cases for console.time/timeEnd.
        * page/Console.cpp:
        (WebCore::Console::time): Added.
        (WebCore::Console::timeEnd): Added.
        * page/Console.h:
        * page/Console.idl: Added console.time/timeEnd.
        * page/InspectorController.cpp:
        (WebCore::InspectorController::startTiming): Added.
        (WebCore::InspectorController::stopTiming): Added.
        * page/InspectorController.h:

2008-07-26  Dirk Schulze  <vbs85@gmx.de>

        Reviewed by Nikolas Zimmermann.

        Fixes rendering issues with gradients in SVG/Cairo.

        * platform/graphics/cairo/PathCairo.cpp:
        (WebCore::Path::boundingRect):
        * svg/graphics/cairo/SVGPaintServerGradientCairo.cpp:
        (WebCore::applyStrokeStyleToContext):
        (WebCore::SVGPaintServerGradient::setup):

2008-07-26  Dirk Schulze  <vbs85@gmx.de>

        Reviewed by Nikolas Zimmermann.

        Added pattern-support for SVG in Cairo.

        * svg/graphics/cairo/SVGPaintServerPatternCairo.cpp:
        (WebCore::applyStrokeStyleToContext):
        (WebCore::SVGPaintServerPattern::setup):

2008-07-26  Keishi Hattori  <casey.hattori@gmail.com>

        Reviewed by Adam Roben.

        Fixed bug 18540: console.log('multiple', 'strings') quotes all strings after the first
        <https://bugs.webkit.org/show_bug.cgi?id=18540>

        * page/inspector/Console.js:
        (WebInspector.ConsoleMessage.prototype._format): String arguments are appended without formatting.

2008-07-26  Anthony Ricaud  <rik24d@gmail.com>

        Reviewed by Tim Hatcher.

        <https://bugs.webkit.org/show_bug.cgi?id=20055> Line highlighting should last longer

        Restore the fade out effect after highlighting.

        * page/inspector/SourceFrame.js: Add a class for fade-out effects and sets it at the end of highlighting time.

2008-07-26  Michelangelo De Simone  <michelangelo@me.com>

        Reviewed by Adele Petersen.

        Added the simple willValidate attribute to form controls according to
        WebForms 2 spec.

        URL: http://www.w3.org/TR/web-forms-2/#willvalidate

        Tests: fast/forms/willvalidate-000.html
               fast/forms/willvalidate-001.html
               fast/forms/willvalidate-002.html
               fast/forms/willvalidate-003.html
               fast/forms/willvalidate-004.html
               fast/forms/willvalidate-005.html
               fast/forms/willvalidate-006.html
               fast/forms/willvalidate-007.html
               fast/forms/willvalidate-008.html
               fast/forms/willvalidate-009.html

        * html/HTMLButtonElement.h: Added willValidate(), always false.
        * html/HTMLButtonElement.idl: willValidate attribute exposed.
        * html/HTMLFieldSetElement.h: Added willValidate(), always false.
        * html/HTMLFieldSetElement.idl: willValidate attribute exposed.
        * html/HTMLFormControlElement.cpp: (WebCore::HTMLFormControlElement::willValidate):
        Added base willValidate() implementation.
        * html/HTMLFormControlElement.h: Added willValidate().
        * html/HTMLInputElement.cpp: (WebCore::HTMLInputElement::willValidate):
        Added willValidate(), checks for input type.
        * html/HTMLInputElement.h: Added willValidate()
        * html/HTMLInputElement.idl: willValidate attribute exposed.
        * html/HTMLSelectElement.idl: willValidate attribute exposed.
        * html/HTMLTextAreaElement.idl: willValidate attribute exposed.

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

        Build fix.

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::load): Use 0 rather than nil as this is a C++ file.

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

        Build fix.

        * loader/FrameLoader.h: Use 0 rather than nil as this is a C++ header.

2008-07-26  Daniel Jalkut  <jalkut@red-sweater.com>

        Reviewed by Geoff Garen.

        Revised the FrameLoader class to clean up a variety of load methods, and hopefully
        move things closer to integrating into a smaller set of load methods. To this
        end, I renamed many of the overloaded load() methods to have more meaningful and 
        easier to search names.  I added comments to the header file to provide clues as 
        to how many of the load methods are being used, and how they fit into the loading 
        process. I suspect that the renamed methods and comments indicating their present 
        usage will facilitate easier cleanup by myself and others as inspiration strikes.

        Updated clients of FrameLoader where necessary to adapt to the new method names and signatures.

        Combined the 3 canLoad() methods into a single canLoad which expresses the 
        intended logic of the 3 with a single method interface.

        Removed unnecessary "treatAsLocal" attribute of CachedResource. It was only called from
        one place in FrameLoader.cpp, and it derived at initialization time by calling back to FrameLoader.

        Removed unused userGesture parameter to one variant of the urlSelected method, and 
        moved one of the urlSelected methods so that it lives nearer to its overloaded 
        sibling.

        * WebCore.base.exp:
        * loader/Cache.cpp:
        (WebCore::Cache::requestResource):
        * loader/CachedResource.cpp:
        (WebCore::CachedResource::CachedResource):
        * loader/CachedResource.h:
        (WebCore::CachedResource::errorOccurred):
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::createWindow):
        (WebCore::FrameLoader::urlSelected):
        (WebCore::FrameLoader::loadURLIntoChildFrame):
        (WebCore::FrameLoader::loadPlugin):
        (WebCore::FrameLoader::loadFrameRequestWithFormState):
        (WebCore::FrameLoader::loadFrameRequestWithFormAndValues):
        (WebCore::FrameLoader::loadURL):
        (WebCore::FrameLoader::loadWithNavigationAction):
        (WebCore::FrameLoader::load):
        (WebCore::FrameLoader::loadWithDocumentLoader):
        (WebCore::FrameLoader::canLoad):
        (WebCore::FrameLoader::reloadAllowingStaleData):
        (WebCore::FrameLoader::reload):
        (WebCore::FrameLoader::continueLoadAfterWillSubmitForm):
        (WebCore::FrameLoader::submitForm):
        (WebCore::FrameLoader::loadPostRequest):
        (WebCore::FrameLoader::continueLoadAfterNewWindowPolicy):
        (WebCore::FrameLoader::loadItem):
        * loader/FrameLoader.h:
        * loader/SubresourceLoader.cpp:
        (WebCore::SubresourceLoader::create):
        * page/ContextMenuController.cpp:
        (WebCore::ContextMenuController::contextMenuItemSelected):

2008-07-26  Sam Weinig  <sam@webkit.org>

        Reviewed by Dan Bernstein.

        Fix https://bugs.webkit.org/show_bug.cgi?id=20122
        <rdar://problem/6089522>
        REGRESSION (r35075-r35110): Cannot enlarge images at Apple Store product page

        Use strict parsing when in AlmostStrict mode.

        Tests: fast/dom/SelectorAPI/dumpNodeList-almost-strict.html
               fast/dom/SelectorAPI/id-fastpath-almost-strict.html
               fast/dom/SelectorAPI/id-fastpath-strict.html

        * dom/Node.cpp:
        (WebCore::Node::querySelector):
        (WebCore::Node::querySelectorAll):

2008-07-25  Ariya Hidayat  <ariya.hidayat@trolltech.com>

        Reviewed by Simon.

        Switch off QPainter's anti aliasing when painting the widgets using QStyle
        because otherwise the widgets will look blurry and not crisp.

        * platform/qt/RenderThemeQt.cpp:
        (WebCore::StylePainter::StylePainter):
        (WebCore::StylePainter::~StylePainter):
        * platform/qt/RenderThemeQt.h:

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

        Reviewed by Anders Carlsson.

        - fix crash due to re-entering purgeInactiveFontData() now that it is
          called by releaseFontData()

        Not testable in DumpRenderTree

        * platform/graphics/FontCache.cpp:
        (WebCore::FontCache::purgeInactiveFontData): Added a reentry guard.

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-07-25  Wouter Bolsterlee  <uws+webkit@xs4all.nl>

        Reviewed by Holger Freyther.

        https://bugs.webkit.org/show_bug.cgi?id=20078
        [GTK] Use G_* macros instead of deprecated GTK_* macros in gtk2xtbin.h

        * plugins/gtk/gtk2xtbin.h:

2008-07-25  Anders Carlsson  <andersca@apple.com>

        Reviewed by Sam.

        Add workaround for a Leopard bug which causes webarchive/test-xml-stylesheet.xml to fail.

        * platform/network/mac/WebCoreURLResponse.mm:
        (-[NSURLResponse _webcore_MIMEType]):

2008-07-25  chris fleizach  <cfleizach@apple.com>

        Reviewed by Beth Dakin

        <rdar://problem/6084806> AX: REGRESSION: returned line number from TextArea is incorrect

        Tests: accessibility/textarea-insertion-point-line-number.html
               accessibility/textarea-line-for-index.html

        * page/AccessibilityObject.cpp:
        (WebCore::AccessibilityObject::lineForPosition):
        * page/AccessibilityObject.h:
        * page/mac/AccessibilityObjectWrapper.mm:
        (-[AccessibilityObjectWrapper accessibilityAttributeValue:]):
        (-[AccessibilityObjectWrapper accessibilityAttributeValue:forParameter:]):

2008-07-25  Jacob Refstrup  <jacob.refstrup@hp.com>

        Reviewed by mitz.

        - fix https://bugs.webkit.org/show_bug.cgi?id=17906
        <rdar://problem/5805741> white-space: pre-wrap or -webkit-line-break: after-white-space text can overlap float at end of line
        
        Test: fast/block/float/editable-text-overlapping-float.html

        * rendering/RenderBlock.h:
        * rendering/bidi.cpp:
        (WebCore::RenderBlock::skipTrailingWhitespace):
        - renamed to reflect usage and removed call to position floats; 
          they only get added
        (WebCore::RenderBlock::skipLeadingWhitespace):
        - renamed to reflect usage
        (WebCore::RenderBlock::findNextLineBreak):
        - use skipTrailingWhitespace at end of line (as before but with new
          name)

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

        Reviewed by Sam Weinig.

        - Finish fixing https://bugs.webkit.org/show_bug.cgi?id=17097
          <rdar://problem/5715471> CGFontRefs (and HFONTs on Windows) leak because FontCache grows without bound

        * platform/graphics/FontCache.cpp:
        (WebCore::FontDataCacheKeyTraits): Changed needsDestruction to true because FontPlatformData
        instances hold references to the platform resources and release them in the destructor.
        (WebCore::cTargetInactiveFontData): Added, replacing cInactiveFontDataPurgeRatio with the
        number of inactive FontData instances to leave in the cache when automatically purging.
        (WebCore::FontCache::getCachedFontData): Moved the code that checks if there are too many
        inactive FontData instances and if so calls purgeInactiveFontData() from here...
        (WebCore::FontCache::releaseFontData): ... to here.
        (WebCore::FontCache::purgeInactiveFontData): Added code to also purge the platform font data
        cache. All FontPlatformData instances that do not have entries in the font data cache are
        removed, thus releasing the platform resources (such as HFONTs and NSFonts).

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

        Add support for an alternate syntax for CSS variables.  Testers on www-style will be able to try out
        both versions of the syntax in WebKit to help us make a decision regarding which one to go with.

        Reviewed by Dan

        Added fast/css/variables/alternate-syntax/ (duplicated all existing CSS variables tests)

        * css/CSSGrammar.y:
        * css/CSSParser.cpp:
        (WebCore::CSSParser::createVariablesRule):
        (WebCore::CSSParser::checkForVariables):
        * css/CSSParser.h:
        * css/CSSParserValues.cpp:
        (WebCore::CSSParserValue::isVariable):
        (WebCore::CSSParserValueList::addValue):
        (WebCore::CSSParserValueList::deleteValueAt):
        (WebCore::CSSParserValue::createCSSValue):
        * css/CSSParserValues.h:
        * css/CSSPrimitiveValue.cpp:
        (WebCore::CSSPrimitiveValue::cleanup):
        (WebCore::CSSPrimitiveValue::getStringValue):
        (WebCore::CSSPrimitiveValue::cssText):
        (WebCore::CSSPrimitiveValue::parserValue):
        * css/CSSPrimitiveValue.h:
        (WebCore::CSSPrimitiveValue::):
        (WebCore::CSSPrimitiveValue::isVariable):
        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::addMatchedDeclaration):
        * css/CSSVariablesRule.cpp:
        (WebCore::CSSVariablesRule::CSSVariablesRule):
        (WebCore::CSSVariablesRule::cssText):
        * css/CSSVariablesRule.h:
        (WebCore::CSSVariablesRule::create):
        * css/maketokenizer:
        * css/tokenizer.flex:

2008-07-25  Maxime Britto  <britto@apple.com>

        Reviewed by Anders Carlsson.

        <rdar://6102387> "REGRESSION: horizontal scroll with the mouse wheel is inverted on some subframes"

        * page/EventHandler.cpp:
        (WebCore::EventHandler::handleWheelEvent): Inverted the scroll direction relative to the delta value (positive scrolls left,negative scrolls right)

2008-07-25  Adele Peterson  <adele@apple.com>

        Another build fix.

        * platform/win/PlatformScrollBarSafari.cpp:
        (WebCore::PlatformScrollbar::paint):

2008-07-25  Adele Peterson  <adele@apple.com>

        More build fixes.

        * platform/win/PlatformScrollBarSafari.cpp:
        (WebCore::PlatformScrollbar::paint):

2008-07-25  Adele Peterson  <adele@apple.com>

        Build fix.

        * platform/win/PlatformScrollBarSafari.cpp:

2008-07-24  Tor Arne Vestbø  <tavestbo@trolltech.com>

        Reviewed by Simon

        Provide access to the underlying QKeyEvent in PlatformKeyboardEvent.

        * platform/PlatformKeyboardEvent.h: add accessor and member.
        * platform/qt/PlatformKeyboardEventQt.cpp: copy pointer in ctor.
        (WebCore::PlatformKeyboardEvent::PlatformKeyboardEvent):

2008-07-25  Simon Hausmann  <hausmann@webkit.org>

        Fix linking of QtWebKit against the statically built JavaScriptCore
        library, under Windows/Mac we may need _d/_debug suffixes.

        * WebCore.pro:

2008-07-25  Simon Hausmann  <hausmann@webkit.org>

        Rubber-stamped by Lars.

        Fix the Qt build by adapting to the latest ArgList API changes and
        replacing the inclusion of npapi.h in MainThreadScheduler with a forward
        declaration of NPP to avoid an include conflict. npapi.h on X11 includes
        X headers, which include wonderful defines such as "#define Status" that
        cause conflicts.

        * bridge/qt/qt_runtime.cpp:
        (KJS::Bindings::findMethodIndex):
        (KJS::Bindings::QtRuntimeConnectionMethod::call):
        * plugins/PluginMainThreadScheduler.h:

2008-07-25  Simon Hausmann  <hausmann@webkit.org>

        Discussed with and rubber-stamped by Lars.

        Fix the build system for the Qt port.

        Recent JavaScriptCore changes require the addition of JavaScriptCore/API to the
        include search path. With a build process that combines JavaScriptCore and
        WebCore in one build process/Makefile the existance of
        JavaScriptCore/API/Node.h and WebCore/dom/Node.h causes include conflicts.

        This commit solves this by introducing a separate build of JavaScriptCore into
        a static library.

        As a result of the split-up a race-condition due to broken dependencies of
        regular source files to header files of generated sources showed up very
        frequently when doing parallel builds (which the buildbot does). This commit at
        the same time tries to address the dependency problem by making the
        addExtraCompiler() function also generate a pseudo extra compiler that
        represents the header file output, so that qmake is aware of the creation of
        the header file for dependency calculation.

        At the same time I removed a lot of cruft from the pro files to ease maintenance.

        * WebCore.pro:

2008-07-24  kevino  <kevino@theolliviers.com>

        wx build fix on Win for plugins coode.

        * plugins/PluginDatabase.cpp:
        * plugins/PluginView.cpp:
        (WebCore::PluginView::PluginView):
        * plugins/PluginView.h:

2008-07-24  Sam Weinig  <sam@webkit.org>

        Reviewed by Anders Carlsson.

        Make isElementNode() non-virtual for a speedup on many benchmarks
        including 20% on http://ejohn.org/apps/fragment/.

        - Replace Node::m_attrWasSpecifiedOrElementHasRareData with bits in 
          Element and Attr where space was available.  Use the new free bit
          to represent if an node is an element or not.

        * dom/Attr.cpp:
        (WebCore::Attr::Attr):
        * dom/Attr.h:
        (WebCore::Attr::specified):
        (WebCore::Attr::setSpecified):
        * dom/ContainerNode.cpp:
        (WebCore::ContainerNode::ContainerNode):
        * dom/ContainerNode.h:
        * dom/Element.cpp:
        (WebCore::Element::Element):
        * dom/Element.h:
        (WebCore::Element::hasRareData):
        (WebCore::Element::setHasRareData):
        * dom/EventTargetNode.cpp:
        (WebCore::EventTargetNode::EventTargetNode):
        * dom/EventTargetNode.h:
        * dom/Node.cpp:
        (WebCore::Node::Node):
        * dom/Node.h:
        (WebCore::Node::isElementNode):

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

        Reviewed by Dave Hyatt.

        - fix <rdar://problem/6082111> REGRESSION (r31876): Root element with percent height does not resize when resizing the window vertically

        Not testable in DumpRenderTree

        * rendering/RenderView.cpp:
        (WebCore::RenderView::layout): Ensured that all children with percentage
        heights get laid out again if the height changes.

2008-07-24  kevino  <kevino@theolliviers.com>

        Windows build fix for wx. wx doesn't implement pan scrolling yet. 

        * page/EventHandler.cpp:
        (WebCore::EventHandler::handleAutoscroll):
        (WebCore::EventHandler::autoscrollTimerFired):
        (WebCore::EventHandler::stopAutoscrollTimer):
        (WebCore::EventHandler::handleMousePressEvent):

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

        Fix for bug 18673, crash when using full page zoom on generated content.  Don't call
        intrinsicSizeChanged when we are first setting our style.

        Reviewed by olliej

        * ChangeLog:
        * rendering/RenderReplaced.cpp:
        (WebCore::RenderReplaced::setStyle):

2008-07-24  Julien Chaffraix  <jchaffraix@webkit.org>

        Reviewed by Eric.

        Bug 20053: .in files should use a custom format instead of XML

        - Remove our XML parser perl module (XML::Tiny)

        - Add a custom perl parser

        - Move XML files to the new format

        * bindings/scripts/InFilesParser.pm: Added.
        * bindings/scripts/XMLTiny.pm: Removed.
        * dom/make_names.pl: Switched to our new
        parser.

        * html/HTMLAttributeNames.in: Switched to
        our custom format.
        * html/HTMLTagNames.in: Ditto.
        * svg/svgattrs.in: Ditto.
        * svg/svgtags.in: Ditto.
        * svg/xlinkattrs.in: Ditto.
        * xml/xmlattrs.in: Ditto.

2008-07-23  Julien Chaffraix  <jchaffraix@webkit.org>

        Reviewed by Eric.

        Bug 19588: CRASH doing open() on destroyed window
        https://bugs.webkit.org/show_bug.cgi?id=19588

        Add frame's page null check as it could have been
        detached from the page.

        Test: fast/frames/crash-removed-iframe.html

        * bindings/js/JSDOMWindowBase.cpp:
        (WebCore::windowProtoFuncOpen):
        * page/FrameTree.cpp:
        (WebCore::FrameTree::find):

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

        Reviewed by Alexey Proskuryakov.

        - fix a leak when using hex color values in CSS variables

        - fix CSSOM access to hex color values in variables declarations

        Test: fast/css/variables/color-hex-test.html

        Added a new unit/type, CSS_PARSER_HEXCOLOR, which serves as the unit for
        CSSParserValues coming from colors in hex notation. CSSParserValues can
        no longer have CSS_RGBCOLOR as their unit. CSS_PARSER_HEXCOLOR is also
        used as the type for CSSValues in CSS variables declarations where the
        parser value was a hex color. However the type of all other color
        CSSValues remains CSS_RGBCOLOR.

        * css/CSSGrammar.y: Changed to use the new CSS_PARSER_HEXCOLOR value
        for color values in hex notation.
        * css/CSSParser.cpp:
        (WebCore::CSSParser::parseColorFromValue): Updated for the new unit.
        * css/CSSParserValues.cpp:
        (WebCore::CSSParserValue::createCSSValue): Ditto.
        * css/CSSPrimitiveValue.cpp:
        (WebCore::CSSPrimitiveValue::cleanup): Fixed the leak by deref()ing the
        string containing the color.
        (WebCore::CSSPrimitiveValue::cssText): Added support for
        CSS_PARSER_HEXCOLOR for when serializing variable values.
        (WebCore::CSSPrimitiveValue::parserValue): Updated for the new unit.
        * css/CSSPrimitiveValue.h:
        (WebCore::CSSPrimitiveValue::): Added a new unti, CSS_PARSER_HEXCOLOR.

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

        Reviewed by Dan Bernstein.

        Fix for <rdar://problem/5997215> display: table-row-group 
        for :before content causes a crash
 
        The actual bug fix here is to ddd the generated content container 
        as a child before adding any of the generated content to the 
        container. There are two correctness fixes as well that deal with 
        style changes and correctly.

        This patch also makes Node::diff() a static function.

        * dom/Node.cpp:
        (WebCore::Node::diff):
        * dom/Node.h:
        (WebCore::Node::):
        (WebCore::Node::recalcStyle):
        * rendering/RenderContainer.cpp:
        (WebCore::findBeforeAfterParent):
        (WebCore::RenderContainer::updateBeforeAfterContentForContainer):
        * svg/SVGUseElement.cpp:
        (WebCore::SVGUseElement::recalcStyle):

2008-07-23  Timothy Hatcher  <timothy@apple.com>

        Updates the elements DOM tree when nodes are added or removed from
        the inspected document.

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

        Reviewed by Adam Roben.

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::dispatchWindowObjectAvailable): Added a call to
        InspectorController::inspectedWindowScriptObjectCleared.
        * page/InspectorController.cpp:
        (WebCore::InspectorController::inspectedWindowScriptObjectCleared):
        Calls the WebInspector.inspectedWindowCleared script function.
        * page/InspectorController.h:
        * page/inspector/ElementsPanel.js:
        (WebInspector.ElementsPanel): Create the event listener callback wrappers.
        (WebInspector.ElementsPanel.prototype.show): Call _updateModifiedNodes if
        there are any recently modified nodes.
        (WebInspector.ElementsPanel.prototype.reset): Remove previous mutation event listeners.
        Adds a check for InspectorController.isWindowVisible to prevent adding
        event listeners when the window isn't visible.
        (WebInspector.ElementsPanel.prototype.inspectedWindowCleared): 
        (WebInspector.ElementsPanel.prototype._addMutationEventListeners): Add DOMNodeInserted,
        DOMNodeRemoved and DOMContentLoaded event listeners to the passed in window or window's document.
        (WebInspector.ElementsPanel.prototype._removeMutationEventListeners): Removes the event listeners
        added in _addMutationEventListeners.
        (WebInspector.ElementsPanel.prototype.updateMutationEventListeners): Call _addMutationEventListeners
        again to reinstate the listners if the document changed or window cleared them.
        (WebInspector.ElementsPanel.prototype.registerMutationEventListeners): Append the window to
        _mutationMonitoredWindows and call _addMutationEventListeners.
        (WebInspector.ElementsPanel.prototype.unregisterMutationEventListeners): Remove the window from
        _mutationMonitoredWindows and call _removeMutationEventListeners.
        (WebInspector.ElementsPanel.prototype.unregisterAllMutationEventListeners): Call
        _removeMutationEventListeners for all windows in _mutationMonitoredWindows and
        clear _mutationMonitoredWindows.
        (WebInspector.ElementsPanel.prototype._contentLoaded): Append the node and parent
        to the recentlyModifiedNodes array. Call _updateModifiedNodesSoon if visible.
        (WebInspector.ElementsPanel.prototype._nodeInserted): Ditto.
        (WebInspector.ElementsPanel.prototype._nodeRemoved): Ditto.
        (WebInspector.ElementsPanel.prototype._updateModifiedNodesSoon): Call
        _updateModifiedNodes on a zero timeout.
        (WebInspector.ElementsPanel.prototype._updateModifiedNodes): Iterate over
        the recentlyModifiedNodes array and call updateChildren on all the parent
        elements that had changes. Only calls updateChildren once per parent element.
        (WebInspector.ElementsPanel.prototype._isAncestorIncludingParentFrames): Return
        false if the nodes are the same. Return true if the nodes are the same while
        looking at ancestor frame elements. THis use to return false, which was incorrect.
        (WebInspector.DOMNodeTreeElement.prototype.onpopulate): Call updateChildren.
        (WebInspector.DOMNodeTreeElement.prototype.updateChildren): Copied from
        onpopulate and changed to rebuild the children elements by adding new children,
        moving existing children and removed old children.
        (WebInspector.DOMNodeTreeElement.prototype.onexpand): If the node has a contentDocument
        call registerMutationEventListeners to track any mutations.
        * page/inspector/inspector.js:
        (WebInspector.inspectedWindowCleared): Call ElementsPanel.inspectedWindowCleared.
        * page/inspector/treeoutline.js:
        (TreeElement.prototype.get hasChildren): Return _hasChildren.
        (TreeElement.prototype.set hasChildren): Set _hasChildren and update the className.
        (TreeElement.prototype.hasAncestor): Return true if the element has the passed in ancestor.
        (TreeElement.prototype.expand): Fix an exception that can happen if expand is
        called before _attach.
        * WebCore/manual-tests/inspector/dom-mutation.html: Added.
        * WebCore/manual-tests/inspector/resources/mutate-frame-2.html: Added.
        * WebCore/manual-tests/inspector/resources/mutate-frame.html: Added.

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

        Fix an exception that occurred when double clicking the closing tag
        of an element in the DOM tree.

        Reviewed by Anders Carlsson.

        * page/inspector/ElementsPanel.js:
        (WebInspector.ElementsPanel.prototype._ondblclick): Null check
        element.ondblclick.

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

        Fix a regression where elements in subframes would not be revealed
        or selected when inspected from the context menu. This was caused by
        JavaScript equality is not being true for JSInspectedObjectWrappers
        of the same node wrapped with different global ExecStates. This change
        adds a helper function that uses isSameNode to compare wrapped nodes.

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

        Reviewed by Adam Roben.

        * page/inspector/ElementsPanel.js:
        (WebInspector.ElementsPanel.prototype.set rootDOMNode): Use objectsAreSame
        to compare nodes.
        (WebInspector.ElementsPanel.prototype.set focusedDOMNode): Ditto.
        (WebInspector.ElementsPanel.prototype.set hoveredDOMNode): Ditto. 
        (WebInspector.ElementsPanel.prototype._updateModifiedNodes): Ditto.
        (WebInspector.ElementsPanel.prototype.revealNode): Ditto.
        (WebInspector.ElementsPanel.prototype.updateBreadcrumb): Ditto.
        (WebInspector.DOMNodeTreeElement.prototype.updateChildren): Ditto.
        * page/inspector/treeoutline.js:
        (TreeOutline.prototype.findTreeElement): Add an equal argument
        to accept a functions to compare two representedObjects. Defaults
        to strict equal if not supplied. All current clients pass objectsAreSame.
        * page/inspector/utilities.js:
        (Node.prototype.enclosingNodeOrSelfWithNodeNameInArray): Use objectsAreSame
        to compare nodes.
        (Node.prototype.enclosingNodeOrSelfWithClass): Ditto.
        (Element.prototype.query): Use the ownerDocument of the node, not document.
        (objectsAreSame): Added. Compares strict equal first, then uses isSameNode if
        it exists on both objects.
        (isAncestorNode): Use objectsAreSame to compare nodes.
        (firstCommonNodeAncestor): Ditto.
        (traverseNextNode): Ditto.

2008-07-21  Timothy Hatcher  <timothy@apple.com>

        Added InspectorController.isWindowVisible to the JavaScript class
        for use in an upcoming change. This will allow the Inspector to not
        perform selective actions while the window is hidden.

        Reviewed by Adam Roben.

        * page/InspectorController.cpp:
        (WebCore::isWindowVisible): Call InspectorController::windowVisible.
        (WebCore::InspectorController::windowScriptObjectAvailable): Add
        the isWindowVisible function to the JavaScript class.

2008-07-21  Timothy Hatcher  <timothy@apple.com>

        Added TreeOutline.removeChildAtIndex and TreeElement.removeChildAtIndex
        for efficiency of callers that know the index of the child. This
        will be used in an upcoming change.

        Reviewed by Adam Roben.

        * page/inspector/treeoutline.js:
        (TreeOutline._removeChildAtIndex): Renamed from _removeChild
        and modified to take an index.
        (TreeOutline._removeChild): Call _removeChildAtIndex with the
        child index found using indexOf.
        (TreeOutline.prototype.removeChildAtIndex): Added. Calls
        TreeOutline._removeChildAtIndex.
        (TreeElement.prototype.removeChildAtIndex): Ditto.

2008-07-21  Timothy Hatcher  <timothy@apple.com>

        Fixes a regression where TreeOutline.findTreeElement would
        return the parent TreeElement of the representedObject instead
        of the TreeElement for the representedObject. Regressed with the
        fix for bug 19164.

        Reviewed by Adam Roben.

        * page/inspector/treeoutline.js:
        (TreeOutline.prototype.findTreeElement): When performing a slow search,
        do a final search for representedObject instead of returning item, which
        is the parent of representedObject.

2008-07-23  Adele Peterson  <adele@apple.com>

        Reviewed by Adam.

        WebCore part of fix for <rdar://problem/5698672>  Add drawing callback for a WebKit app to draw its own scrollbars

        * WebCore.base.exp: Added symbols.
        * page/Chrome.cpp:
        (WebCore::ChromeClient::paintCustomScrollbar): Added. Calls up to WebKit, which will call a new delegate method.
        (WebCore::ChromeClient::paintCustomScrollCorner): ditto.
        * page/ChromeClient.h:
        * page/Settings.cpp:
        (WebCore::Settings::Settings): Added the ability to store whether or not the application has decided to draw its own scrollbars.
        (WebCore::Settings::setShouldPaintCustomScrollbars):
        * page/Settings.h: (WebCore::Settings::shouldPaintCustomScrollbars):
        * platform/ScrollBar.h: Moved ScrollbarControlSize enum to ScrollTypes.h
        * platform/ScrollTypes.h: (WebCore::): Moved some existing types, and added new ones to be used in WebCore in WebKit.
        * platform/win/PlatformScrollBar.h: Moved ScrollbarPart enum to ScrollTypes.h
        * platform/win/PlatformScrollBarSafari.cpp:
        (WebCore::ScrollbarPartToScrollBarPiece): Added helper function.
        (WebCore::ScrollBarPieceMaskToScrollbarControlPartMask): ditto.
        (WebCore::ScrollbarControlStateFromThemeState): ditto.
        (WebCore::PlatformScrollbar::paint): Consolidated painting so the logic for the individual pieces is all in one place.
         Added new code to paint the custom scrollbars if necessary.
        * platform/win/ScrollViewWin.cpp: (WebCore::ScrollView::paint): Added code to paint the custom scroll corner if necessary.

2008-07-23  Sam Weinig  <sam@webkit.org>

        Reviewed by Anders Carlsson.

        Cleanup and pack the member variables in Node.

        * bindings/js/JSNodeCustom.cpp:
        (WebCore::JSNode::mark):
        * dom/Attr.cpp:
        (WebCore::Attr::Attr):
        * dom/Attr.h:
        (WebCore::Attr::specified):
        (WebCore::Attr::setSpecified):
        * dom/ContainerNode.cpp:
        (WebCore::ContainerNode::setFocus):
        * dom/Document.cpp:
        (WebCore::Document::adoptNode):
        * dom/Element.cpp:
        (WebCore::Element::~Element):
        (WebCore::Element::rareData):
        (WebCore::Element::createRareData):
        * dom/Element.h:
        (WebCore::Element::hasRareData):
        (WebCore::Element::setHasRareData):
        * dom/Node.h:
        (WebCore::Node::setIsLink):
        (WebCore::Node::inSubtreeMark):
        (WebCore::Node::setInSubtreeMark):
        (WebCore::Node::attrWasSpecifiedOrElementHasRareData):
        (WebCore::Node::setAttrWasSpecifiedOrElementHasRareData):
        * html/HTMLAnchorElement.cpp:
        (WebCore::HTMLAnchorElement::supportsFocus):
        (WebCore::HTMLAnchorElement::isFocusable):
        (WebCore::HTMLAnchorElement::defaultEventHandler):
        (WebCore::HTMLAnchorElement::parseMappedAttribute):
        (WebCore::HTMLAnchorElement::isLiveLink):
        * html/HTMLImageElement.cpp:
        (WebCore::HTMLImageElement::parseMappedAttribute):
        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::setInputType):
        * html/HTMLTableElement.cpp:
        (WebCore::HTMLTableElement::attach):
        * svg/SVGAElement.cpp:
        (WebCore::SVGAElement::svgAttributeChanged):
        (WebCore::SVGAElement::defaultEventHandler):

2008-07-23  Kevin Calhoun  <kcalhoun@apple.com>

        Reviewed by Adele.

        Follow-up fix for <rdar://problem/6031039> don't disable track-types when media is in a standalone document

        Associate MovieControllers with Movies to support all of the media types QuickTime is able to play in standalone media documents.

        * platform/graphics/win/QTMovieWin.cpp:
        (QTMovieWinPrivate::QTMovieWinPrivate):
        (QTMovieWinPrivate::~QTMovieWinPrivate):
        (QTMovieWinPrivate::task):
        (QTMovieWinPrivate::createMovieController):
        (QTMovieWinPrivate::createGWorld):
        (QTMovieWinPrivate::setSize):
        (QTMovieWinPrivate::deleteGWorld):
        (QTMovieWin::play):
        (QTMovieWin::pause):
        (QTMovieWin::setRate):
        (QTMovieWin::setCurrentTime):
        (QTMovieWin::load):

2008-07-23  Kevin Calhoun  <kcalhoun@apple.com>

        Reviewed by Adele.

        Added a debug mode for viewing frames per second for videos.  This is controlled by two 
        independent compiler flags DRAW_FRAME_RATE in MediaPlayerPrivateQTKit.h and MediaPlayerPrivateQuickTimeWin.h.
        Unless either flags is turned on there is no change to the code for video frame drawing.

        * platform/graphics/mac/MediaPlayerPrivateQTKit.h:
        * platform/graphics/mac/MediaPlayerPrivateQTKit.mm:
        (WebCore::MediaPlayerPrivate::MediaPlayerPrivate):
        (WebCore::MediaPlayerPrivate::play):
        (WebCore::MediaPlayerPrivate::pause):
        (WebCore::MediaPlayerPrivate::didEnd):
        (WebCore::MediaPlayerPrivate::repaint):
        (WebCore::MediaPlayerPrivate::paint):
        * platform/graphics/win/MediaPlayerPrivateQuickTimeWin.cpp:
        (WebCore::MediaPlayerPrivate::MediaPlayerPrivate):
        (WebCore::MediaPlayerPrivate::play):
        (WebCore::MediaPlayerPrivate::pause):
        (WebCore::MediaPlayerPrivate::didEnd):
        (WebCore::MediaPlayerPrivate::paint):
        (WebCore::MediaPlayerPrivate::movieNewImageAvailable):
        * platform/graphics/win/MediaPlayerPrivateQuickTimeWin.h:

2008-07-23  Adele Peterson  <adele@apple.com>

        Reviewed by Sam.

        Fix for <rdar://problem/6080634> use lower quality CG interpolation in MediaPlayerPrivateQTKit to improve performance

        * platform/graphics/GraphicsContext.cpp: (WebCore::GraphicsContext::drawImage):
        Call setImageInterpolationQuality(InterpolationNone) instead of setUseLowQualityImageInterpolation(true).
        * platform/graphics/GraphicsContext.h:
        (WebCore::): Added InterpolationQuality enum.
        (WebCore::GraphicsContext::setImageInterpolationQuality): Renamed from setUseLowQualityImageInterpolation.
        The implementation was always setting the quality to "none", and now we want to distinguish between "none" and "low".
        (WebCore::GraphicsContext::imageInterpolationQuality): Renamed from useLowQualityImageInterpolation.
        * platform/graphics/cg/GraphicsContextCG.cpp:
        (WebCore::GraphicsContext::setImageInterpolationQuality): Added.
        (WebCore::GraphicsContext::imageInterpolationQuality): Added.
        * platform/graphics/mac/MediaPlayerPrivateQTKit.mm: (WebCore::MediaPlayerPrivate::paint):
        Calls setImageInterpolationQuality(InterpolationLow) which will improve the painting performance without degrading quality too much.

2008-07-23  Sam Weinig  <sam@webkit.org>

        Reviewed by Anders Carlsson.

        Remove extraneous allocations by using equalIgnoringCase rather than
        String::lower.

        * dom/StyledElement.cpp:
        (WebCore::StyledElement::addCSSColor):
        * html/HTMLCollection.cpp:
        (WebCore::HTMLCollection::checkForNameMatch):
        * html/HTMLFormCollection.cpp:
        (WebCore::HTMLFormCollection::getNamedFormItem):
        * html/HTMLLinkElement.cpp:
        (WebCore::HTMLLinkElement::tokenizeRelAttribute):
        * html/HTMLObjectElement.cpp:
        (WebCore::HTMLObjectElement::containsJavaApplet):
        * html/PreloadScanner.cpp:
        (WebCore::PreloadScanner::emitCSSRule):
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::createJavaAppletWidget):
        * page/DOMSelection.cpp:
        (WebCore::DOMSelection::modify):
        * rendering/RenderPartObject.cpp:
        (WebCore::RenderPartObject::updateWidget):

2008-07-23  Maxime Britto  <britto@apple.com>

        Reviewed by Adam Roben.

        <rdar://6092952> "REGRESSION: Crash beneath EventHandler::stopAutoscrollTimer() when closing Gmail"
        Add a check for the m_page member value before asking for page()->mainFrame()

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

2008-07-23  Kevin Calhoun  <kcalhoun@apple.com>

       Reviewed by Adele.

       Fix for <rdar://problem/5710065> QT movies should be inactive when opened

       Implemented deferral of set-up of video rendering on Mac until the ready state is Loaded and 
       until after movie tracks of unsupported types have been disabled, to make sure they never draw.

        * platform/graphics/mac/MediaPlayerPrivateQTKit.mm:
        (WebCore::MediaPlayerPrivate::load):
        (WebCore::MediaPlayerPrivate::updateStates):
        (WebCore::MediaPlayerPrivate::setVisible):

2008-07-22  Maxime Britto  <britto@apple.com>

        Reviewed by John Sullivan.

        <rdar://problem/6083116>
        When pan-scrolling, Back then Forward causes pan-scrolling to start again

        * page/Frame.cpp:
        (WebCore::Frame::clearTimers): Ask to stop the autoscroll timer when we clear the timers from the frame
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::scrollToAnchor): When the link is an anchor we Frame::clearTimers() isn't called since we're only scrolling the page so we need to ask to stop the autoscroll timer here too.

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

        Reviewed by Oliver Hunt and Sam Weinig.

        Next step toward putting doubles in registers: Prepare the Register class
        and its clients for registers that don't contain JSValue*s.
        
2008-07-22  Sam Weinig  <sam@webkit.org>

        Reviewed by Mark Rowe.

        <rdar://problem/5788451> toDataURL not implemented for Windows (need mapping of MIME type to UTI)
        Add additional support for JPEG and GIF for toDataURL encoding canvases.

        * platform/MIMETypeRegistry.cpp:
        (WebCore::initializeSupportedImageMIMETypesForEncoding):
        * platform/graphics/cg/ImageBufferCG.cpp:
        (WebCore::utiFromMIMEType):

2008-07-22  Chris Fleizach  <cfleizach@apple.com>

        Reviewed by Dave Hyatt.

        <rdar://problem/6004877> internal anchors on this page are not showing up in the AXLinkedUIElements
        Test: accessibility/internal-link-anchors2.html

        * page/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::internalLinkElement):

2008-07-22  Anders Carlsson  <andersca@apple.com>

        Reviewed by Adam.

        Allocate the empty StringImpl from the heap.
        
        * platform/text/StringImpl.cpp:
        (WebCore::StringImpl::empty):

2008-07-21  Kevin McCullough  <kmccullough@apple.com>

        Reviewed by Tim.

        <rdar://problem/5951532> JSProfiler: Implement heavy (or bottom-up)
        view (19228)
        - Implement UI for Heavy (Bottom Up) view.

        * English.lproj/localizedStrings.js:
        * page/JavaScriptProfile.cpp: Expose the ability to get a heavy/tree
        profile from a profile to the Web Inspector's JavaScript.
        (WebCore::getHeavyProfileCallback):
        (WebCore::getTreeProfileCallback):
        (WebCore::ProfileClass):
        * page/inspector/ProfileView.js: Implement the dropdown for changing
        profile views.
        * page/inspector/inspector.css:

2008-07-22  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Adam Roben.

        <rdar://problem/5955602> WebKit should support charset name x-windows-949

        Test: fast/encoding/char-decoding.html

        * platform/text/TextCodecICU.cpp:
        (WebCore::TextCodecICU::registerExtendedEncodingNames): Added support for this name for
        Firefox compatibility.

2008-07-22  Gavin Barraclough  <barraclough@apple.com>

        Reviewed by Alexey Proskuryakov.

        New test to check that arrays fail gracefully (throw an out of memory exception)
        when the vector grows to large.

        * manual-tests/array-out-of-memory.html: Added.

2008-07-21  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Dan Bernstein.

        https://bugs.webkit.org/show_bug.cgi?id=20117
        setBaseAndExtent fails to reverse the current selection

        Test: editing/selection/setBaseAndExtent-revert-selection.html

        * editing/Selection.h: (WebCore::operator==): Compare direction, too.

2008-07-21  Julien Chaffraix  <jchaffraix@webkit.org>

        Reviewed by Sam Weinig.

        Bug 19919: Add selectors' string parsing in CSSParser
        https://bugs.webkit.org/show_bug.cgi?id=19919

        No functional change.

        * css/CSSGrammar.y: Added entry for parsing only a selector.
        * css/CSSParser.cpp:
        (WebCore::CSSParser::CSSParser):
        (WebCore::CSSParser::parseSelector):
        * css/CSSParser.h: Added m_floatingSelector to hold the
        Selector parsed in parseSelector.

        * css/tokenizer.flex: Added "@-webkit-selector" token.
        * dom/Node.cpp:
        (WebCore::Node::querySelector):
        (WebCore::Node::querySelectorAll): Switched to parseSelector
        method.

2008-07-21  Kevin Calhoun  <kcalhoun@apple.com>

        Reviewed by Adele.

        Fix for <rdar://problem/6081160> REGRESSION: Hang loading many pages if QuickTime isn't installed

        * platform/graphics/win/QTMovieWin.cpp:
        (initializeSupportedTypes): Do a Quicktime version minimum version check.
        (QTMovieWin::initializeQuickTime): Store the Quicktime version globally so in can be used in initializeSupportedTypes as well.

2008-07-21  Kevin Calhoun  <kcalhoun@apple.com>

        Reviewed by Adele.

        Fix for <rdar://problem/5713336> <video> and <audio> elements that use a autoplay attribute fail to start playing when returning back to page

        * html/HTMLMediaElement.cpp: (WebCore::HTMLMediaElement::willSaveToCache): Reset the ready state to DATA_UNAVAILABLE when saving to the cache
        so that everything starts back up normally when the page is retrieved from the cache.

2008-07-21  Sam Weinig  <sam@webkit.org>

        Reviewed by Mark Rowe.

        Remove unused interface declaration.

        * platform/network/mac/ResourceHandleMac.mm:

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-07-21  Kevin Calhoun  <kcalhoun@apple.com>

        Reviewed by Adele.

        Fix for <rdar://problem/6031039> don't disable track-types when media is in a standalone document

        * platform/graphics/MediaPlayer.cpp: (WebCore::MediaPlayer::inMediaDocument): Added.
        * platform/graphics/MediaPlayer.h:
        * platform/graphics/mac/MediaPlayerPrivateQTKit.mm: (WebCore::MediaPlayerPrivate::updateStates):
        * platform/graphics/win/MediaPlayerPrivateQuickTimeWin.cpp: (WebCore::MediaPlayerPrivate::updateStates):

2008-07-21  Anders Carlsson  <andersca@apple.com>

        Reviewed by Jon.

        Don't allow requests to be made when the document loader is stopping all loaders.

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

2008-07-20  Maxime Britto  <britto@apple.com>

        Reviewed by John Sullivan.

        [PFR] <rdar://problem/6080639> New middle click scrolling speed seems much slower than in FF
        Accelerate and enhance the smoothness of the pan scrollling.

        * page/EventHandler.cpp: Changed the TimerInterval from 0.1 to 0.05. The scrolling is way more fluid like this.
        * rendering/RenderLayer.cpp: 
        (WebCore::RenderLayer::panScrollFromPoint): Differentiate the speed within a 200 pixel side square, around the original click location to the speed for farther distances. This way we allow easyier handle when we are close to the center and very fast scrolling when we go far from the original point.

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

        Change the cached clip rects to not assume they should be infinite when the root layer has been
        shifted as the result of a transformation.

        Reviewed by Maciej

        Added fast/transforms/overflow-with-transform.html

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

2008-07-21  Rob Buis  <buis@kde.org>

        Reviewed by Mitz.

        https://bugs.webkit.org/show_bug.cgi?id=19966
        CSS variables crash when using hex notation for colors

        Support hex colors as values for the css variables.

        Test: fast/css/variables/color-hex-test.html

        * css/CSSParserValues.cpp:
        (WebCore::CSSParserValue::createCSSValue):
        * css/CSSPrimitiveValue.cpp:
        (WebCore::CSSPrimitiveValue::parserValue):
        * css/CSSVariablesRule.cpp:

2008-07-21  Simon Hausmann  <hausmann@webkit.org>

        Reviewed by Holger.

        Fix drawing of windowless plugins on Windows with the Qt port by
        avoiding the reset of the translation of the HDC to 0, 0.

        * plugins/win/PluginViewWin.cpp:
        (WebCore::PluginView::paint):

2008-07-21  Simon Hausmann  <hausmann@webkit.org>

        Reviewed by Holger.

        Fix rendering of transparent windowless netscape plugins by passing
        the right conversion parameter to QPixmap::fromWinHBITMAP when
        converting from HBITMAP to QPixmap.

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

2008-07-21  Simon Hausmann  <hausmann@webkit.org>

        Reviewed by Holger.

        In the implementation of getValue for NPNVnetscapeWindow treat
        windowHandleForPlatformWidget on the return value of
        containingWindow() to receive the correct HWND for the Qt port.

        * plugins/win/PluginViewWin.cpp:
        (WebCore::PluginView::getValue):

2008-07-21  Simon Hausmann  <hausmann@webkit.org>

        Reviewed by Holger.

        Fix windowHandleForPlatformWidget to return 0 as HWND if we don't have
        a QWidget. This can happen on page/view destruction for example.

        * plugins/win/PluginViewWin.cpp:
        (windowHandleForPlatformWidget):

2008-07-20  Steve Falkenburg  <sfalken@apple.com>

        Touch file to force rebuild for vsprops change.

        * WebCorePrefix.h:

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

        Remove extra space Oliver Hunt left in.

        * page/Console.cpp:
        (WebCore::Console::reportException):
        (WebCore::Console::reportCurrentException):

2008-07-20  Oliver Hunt  <oliver@apple.com>

        Reviewed by Dan Bernstein.

        Bug 19757: Crash when an ondragstart handler hides the element
        <https://bugs.webkit.org/show_bug.cgi?id=19757>

        The solution to this is problem is just to null check the renderer
        immediately before launching the system drag, and terminate the
        drag if the renderer is gone.

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

2008-07-20  Nikolas Zimmermann  <zimmermann@kde.org>

        Reviewed by Oliver.

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

        Remove manual SVG property <-> XML attribute synchronization in SVGPolyElement.
        Added svg/custom/poly-points-attribute-changes.svg (testcase from Rob)

        * svg/SVGPointList.cpp:
        (WebCore::SVGPointList::valueAsString):
        * svg/SVGPointList.h:
        (WebCore::SVGPointList::create):
        * svg/SVGPolyElement.cpp:
        (WebCore::SVGPolyElement::SVGPolyElement):
        (WebCore::SVGPolyElement::svgAttributeChanged):
        (WebCore::SVGPolyElement::updateAnimatedSVGAttribute):
        * svg/SVGPolyElement.h:

2008-07-20  Nikolas Zimmermann  <zimmermann@kde.org>

        Reviewed by Oliver.

        Cleanup JSSVGPODTypeWrapper code.

        Rename: JSSVGPODTypeWrapperCreatorReadOnly -> JSSVGStaticPODTypeWrapper
                JSSVGPODTypeWrapperReadWrite       -> JSSVGDynamicPODTypeWrapper
                JSSVGPODTypeWrapperCache           -> JSSVGDynamicPODTypeWrapperCacheCache

        No functional changes.

        * bindings/js/JSSVGMatrixCustom.cpp:
        (WebCore::JSSVGMatrix::multiply):
        (WebCore::JSSVGMatrix::inverse):
        (WebCore::JSSVGMatrix::translate):
        (WebCore::JSSVGMatrix::scale):
        (WebCore::JSSVGMatrix::scaleNonUniform):
        (WebCore::JSSVGMatrix::rotate):
        (WebCore::JSSVGMatrix::rotateFromVector):
        (WebCore::JSSVGMatrix::flipX):
        (WebCore::JSSVGMatrix::flipY):
        (WebCore::JSSVGMatrix::skewX):
        (WebCore::JSSVGMatrix::skewY):
        * bindings/js/JSSVGPODTypeWrapper.h:
        (WebCore::JSSVGDynamicPODTypeWrapper::create):
        (WebCore::JSSVGDynamicPODTypeWrapper::operator PODType):
        (WebCore::JSSVGDynamicPODTypeWrapper::JSSVGDynamicPODTypeWrapper):
        (WebCore::JSSVGStaticPODTypeWrapper::create):
        (WebCore::JSSVGStaticPODTypeWrapper::operator PODType):
        (WebCore::JSSVGStaticPODTypeWrapper::JSSVGStaticPODTypeWrapper):
        (WebCore::JSSVGPODTypeWrapperCreatorForList::create):
        (WebCore::JSSVGPODTypeWrapperCreatorForList::operator PODType):
        (WebCore::JSSVGPODTypeWrapperCreatorForList::JSSVGPODTypeWrapperCreatorForList):
        (WebCore::PODTypeWrapperCacheInfo::PODTypeWrapperCacheInfo):
        (WebCore::PODTypeWrapperCacheInfo::operator==):
        (WebCore::PODTypeWrapperCacheInfoHash::hash):
        (WebCore::PODTypeWrapperCacheInfoHash::equal):
        (WebCore::PODTypeWrapperCacheInfoTraits::emptyValue):
        (WebCore::PODTypeWrapperCacheInfoTraits::constructDeletedValue):
        (WebCore::PODTypeWrapperCacheInfoTraits::isDeletedValue):
        (WebCore::JSSVGDynamicPODTypeWrapperCache::dynamicWrapperHashMap):
        (WebCore::JSSVGDynamicPODTypeWrapperCache::lookupOrCreateWrapper):
        (WebCore::JSSVGDynamicPODTypeWrapperCache::forgetWrapper):
        * bindings/js/JSSVGPointListCustom.cpp:
        (WebCore::finishGetter):
        (WebCore::finishSetter):
        (WebCore::finishSetterReadOnlyResult):
        (WebCore::JSSVGPointList::initialize):
        (WebCore::JSSVGPointList::insertItemBefore):
        (WebCore::JSSVGPointList::replaceItem):
        (WebCore::JSSVGPointList::appendItem):
        * bindings/js/JSSVGTransformListCustom.cpp:
        (WebCore::finishGetter):
        (WebCore::finishSetter):
        (WebCore::finishSetterReadOnlyResult):
        (WebCore::JSSVGTransformList::initialize):
        (WebCore::JSSVGTransformList::getItem):
        (WebCore::JSSVGTransformList::insertItemBefore):
        (WebCore::JSSVGTransformList::replaceItem):
        (WebCore::JSSVGTransformList::removeItem):
        (WebCore::JSSVGTransformList::appendItem):
        * bindings/scripts/CodeGeneratorJS.pm:

2008-07-19  Oliver Hunt  <oliver@apple.com>

        Reviewed by Mark Rowe.

        Bug 15979: Console logs in a database callback lose line number information
        <https://bugs.webkit.org/show_bug.cgi?id=15979>

        The problem was that there were multiple versions of the logic to
        log an exception to the console, many of which were incorrect.  We
        resolve this by making one single shared reportException method,
        which handles the exceptions correctly.

        This improves fidelity of callback errors, and ensures that
        exceptions thrown in timer callbacks correctly report line numbers,
        etc.

        Test: fast/js/exceptions-thrown-in-callbacks.html

        * 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/JSEventListener.cpp:
        (WebCore::JSAbstractEventListener::handleEvent):
        * bindings/js/ScheduledAction.cpp:
        (WebCore::ScheduledAction::execute):
        * bindings/js/ScriptController.cpp:
        (WebCore::ScriptController::evaluate):
        * bindings/objc/WebScriptObject.mm:
        (WebCore::addExceptionToConsole):
        * page/Console.cpp:
        (WebCore::Console::reportException):
        * page/Console.h:

2008-07-20  Nikolas Zimmermann  <zimmermann@kde.org>

        Rubber stamped by Oliver.

        Another attempt to fix the win build.

        * svg/SVGAnimatedProperty.h:

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

        Reviewed by David Kilzer.

        Fix high CPU usage on testmyiphone.com.

        - Made the logic for determining when to stop looking for meta charset more strainghtforward.
        Previously, this happened if a tag that's disallowed in HEAD was seen past the first 512
        bytes. Now, the algorithm bails out at the boundary if we are lo longer in HEAD (i.e, an
        offending tag was seen at any point before).

        - The above change made one of our regression tests fail, because it had its <meta>
        declaration past the 512 byte boundary. Fixed it by raising the boundary to 1024 bytes.

        - Made the algorithm bail out quickly if a comment that's not in HEAD crosses the boundary.

        - Moved a check for XML content type out of the loop.

        * loader/TextResourceDecoder.cpp:
        (WebCore::TextResourceDecoder::checkForHeadCharset): 

2008-07-20  Oliver Hunt  <oliver@apple.com>

        Reviewed by NOBODY (build fix).

        Attempt to fix windows build

        * svg/SVGAnimatedProperty.h:

2008-07-19  Nikolas Zimmermann  <zimmermann@kde.org>

        Reviewed by Oliver & parts by Eric.

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

        Rewrite animated property concept without heavy macro usage, replace by a templatified solution.
        Fewer virtual function calls, no more usage of the tear-off's within internal code (synchronization needed it before.)

        * dom/Element.cpp:
        (WebCore::Element::attributes):
        (WebCore::Element::getAttribute):
        (WebCore::Element::hasAttributes):
        * dom/Element.h:
        (WebCore::Element::updateAnimatedSVGAttribute): Take const String&, not StringImpl*.
        * svg/SVGAElement.cpp:
        (WebCore::SVGAElement::SVGAElement):
        * svg/SVGAElement.h:
        * svg/SVGAltGlyphElement.h:
        * svg/SVGAnimatedProperty.h: Added.
        * svg/SVGAnimatedTemplate.h:
        (WebCore::lookupOrCreateWrapper):
        * svg/SVGAnimationElement.h:
        * svg/SVGCircleElement.cpp:
        (WebCore::SVGCircleElement::SVGCircleElement):
        * svg/SVGCircleElement.h:
        * svg/SVGClipPathElement.cpp:
        (WebCore::SVGClipPathElement::SVGClipPathElement):
        * svg/SVGClipPathElement.h:
        * svg/SVGComponentTransferFunctionElement.cpp:
        (WebCore::SVGComponentTransferFunctionElement::SVGComponentTransferFunctionElement):
        * svg/SVGComponentTransferFunctionElement.h:
        * svg/SVGCursorElement.cpp:
        (WebCore::SVGCursorElement::SVGCursorElement):
        * svg/SVGCursorElement.h:
        * svg/SVGDefsElement.h:
        (WebCore::SVGDefsElement::contextElement):
        * svg/SVGElement.cpp:
        (WebCore::SVGElement::updateAnimatedSVGAttribute):
        * svg/SVGElement.h:
        (WebCore::SVGElement::supplementalTransform):
        (WebCore::SVGElement::invokeSVGPropertySynchronizer):
        (WebCore::SVGElement::invokeAllSVGPropertySynchronizers):
        (WebCore::SVGElement::addSVGPropertySynchronizer):
        * svg/SVGEllipseElement.cpp:
        (WebCore::SVGEllipseElement::SVGEllipseElement):
        * svg/SVGEllipseElement.h:
        * svg/SVGExternalResourcesRequired.cpp:
        (WebCore::SVGExternalResourcesRequired::SVGExternalResourcesRequired):
        * svg/SVGExternalResourcesRequired.h:
        * svg/SVGFEBlendElement.cpp:
        (WebCore::SVGFEBlendElement::SVGFEBlendElement):
        * svg/SVGFEBlendElement.h:
        * svg/SVGFEColorMatrixElement.cpp:
        (WebCore::SVGFEColorMatrixElement::SVGFEColorMatrixElement):
        * svg/SVGFEColorMatrixElement.h:
        * svg/SVGFEComponentTransferElement.cpp:
        (WebCore::SVGFEComponentTransferElement::SVGFEComponentTransferElement):
        * svg/SVGFEComponentTransferElement.h:
        * svg/SVGFECompositeElement.cpp:
        (WebCore::SVGFECompositeElement::SVGFECompositeElement):
        * svg/SVGFECompositeElement.h:
        * svg/SVGFEDiffuseLightingElement.cpp:
        (WebCore::SVGFEDiffuseLightingElement::SVGFEDiffuseLightingElement):
        * svg/SVGFEDiffuseLightingElement.h:
        * svg/SVGFEDisplacementMapElement.cpp:
        (WebCore::SVGFEDisplacementMapElement::SVGFEDisplacementMapElement):
        * svg/SVGFEDisplacementMapElement.h:
        * svg/SVGFEFloodElement.h:
        * svg/SVGFEGaussianBlurElement.cpp:
        (WebCore::SVGFEGaussianBlurElement::SVGFEGaussianBlurElement):
        * svg/SVGFEGaussianBlurElement.h:
        * svg/SVGFEImageElement.cpp:
        (WebCore::SVGFEImageElement::SVGFEImageElement):
        * svg/SVGFEImageElement.h:
        * svg/SVGFELightElement.cpp:
        (WebCore::SVGFELightElement::SVGFELightElement):
        * svg/SVGFELightElement.h:
        (WebCore::SVGFELightElement::contextElement):
        * svg/SVGFEMergeElement.h:
        * svg/SVGFEMergeNodeElement.cpp:
        (WebCore::SVGFEMergeNodeElement::SVGFEMergeNodeElement):
        * svg/SVGFEMergeNodeElement.h:
        * svg/SVGFEOffsetElement.cpp:
        (WebCore::SVGFEOffsetElement::SVGFEOffsetElement):
        * svg/SVGFEOffsetElement.h:
        * svg/SVGFESpecularLightingElement.cpp:
        (WebCore::SVGFESpecularLightingElement::SVGFESpecularLightingElement):
        * svg/SVGFESpecularLightingElement.h:
        * svg/SVGFETileElement.cpp:
        (WebCore::SVGFETileElement::SVGFETileElement):
        * svg/SVGFETileElement.h:
        * svg/SVGFETurbulenceElement.cpp:
        (WebCore::SVGFETurbulenceElement::SVGFETurbulenceElement):
        * svg/SVGFETurbulenceElement.h:
        * svg/SVGFilterElement.cpp:
        (WebCore::SVGFilterElement::SVGFilterElement):
        * svg/SVGFilterElement.h:
        * svg/SVGFilterPrimitiveStandardAttributes.cpp:
        (WebCore::SVGFilterPrimitiveStandardAttributes::SVGFilterPrimitiveStandardAttributes):
        * svg/SVGFilterPrimitiveStandardAttributes.h:
        * svg/SVGFitToViewBox.cpp:
        (WebCore::SVGFitToViewBox::SVGFitToViewBox):
        * svg/SVGFitToViewBox.h:
        * svg/SVGFontElement.h:
        (WebCore::SVGFontElement::rendererIsNeeded):
        (WebCore::SVGFontElement::contextElement):
        * svg/SVGForeignObjectElement.cpp:
        (WebCore::SVGForeignObjectElement::SVGForeignObjectElement):
        * svg/SVGForeignObjectElement.h:
        * svg/SVGGElement.h:
        * svg/SVGGradientElement.cpp:
        (WebCore::SVGGradientElement::SVGGradientElement):
        * svg/SVGGradientElement.h:
        (WebCore::SVGGradientElement::contextElement):
        * svg/SVGImageElement.cpp:
        (WebCore::SVGImageElement::SVGImageElement):
        * svg/SVGImageElement.h:
        * svg/SVGLineElement.cpp:
        (WebCore::SVGLineElement::SVGLineElement):
        * svg/SVGLineElement.h:
        * svg/SVGLinearGradientElement.cpp:
        (WebCore::SVGLinearGradientElement::SVGLinearGradientElement):
        * svg/SVGLinearGradientElement.h:
        * svg/SVGMarkerElement.cpp:
        (WebCore::SVGMarkerElement::SVGMarkerElement):
        (WebCore::SVGMarkerElement::canvasResource):
        * svg/SVGMarkerElement.h:
        * svg/SVGMaskElement.cpp:
        (WebCore::SVGMaskElement::SVGMaskElement):
        * svg/SVGMaskElement.h:
        * svg/SVGPathElement.cpp:
        (WebCore::SVGPathElement::SVGPathElement):
        (WebCore::SVGPathElement::parseMappedAttribute):
        * svg/SVGPathElement.h:
        * svg/SVGPatternElement.cpp:
        (WebCore::SVGPatternElement::SVGPatternElement):
        * svg/SVGPatternElement.h:
        (WebCore::SVGPatternElement::contextElement):
        * svg/SVGPolyElement.h:
        * svg/SVGPreserveAspectRatio.cpp:
        * svg/SVGRadialGradientElement.cpp:
        (WebCore::SVGRadialGradientElement::SVGRadialGradientElement):
        * svg/SVGRadialGradientElement.h:
        * svg/SVGRectElement.cpp:
        (WebCore::SVGRectElement::SVGRectElement):
        * svg/SVGRectElement.h:
        * svg/SVGSVGElement.cpp:
        (WebCore::SVGSVGElement::SVGSVGElement):
        * svg/SVGSVGElement.h:
        * svg/SVGScriptElement.cpp:
        * svg/SVGScriptElement.h:
        * svg/SVGStopElement.cpp:
        (WebCore::SVGStopElement::SVGStopElement):
        * svg/SVGStopElement.h:
        * svg/SVGStyledElement.cpp:
        (WebCore::SVGStyledElement::SVGStyledElement):
        * svg/SVGStyledElement.h:
        * svg/SVGStyledTransformableElement.cpp:
        (WebCore::SVGStyledTransformableElement::SVGStyledTransformableElement):
        * svg/SVGStyledTransformableElement.h:
        * svg/SVGSwitchElement.h:
        * svg/SVGSymbolElement.h:
        (WebCore::SVGSymbolElement::contextElement):
        * svg/SVGTRefElement.h:
        * svg/SVGTSpanElement.h:
        * svg/SVGTextContentElement.cpp:
        (WebCore::SVGTextContentElement::SVGTextContentElement):
        * svg/SVGTextContentElement.h:
        (WebCore::SVGTextContentElement::contextElement):
        * svg/SVGTextElement.cpp:
        (WebCore::SVGTextElement::SVGTextElement):
        * svg/SVGTextElement.h:
        * svg/SVGTextPathElement.cpp:
        (WebCore::SVGTextPathElement::SVGTextPathElement):
        * svg/SVGTextPathElement.h:
        * svg/SVGTextPositioningElement.cpp:
        (WebCore::SVGTextPositioningElement::SVGTextPositioningElement):
        * svg/SVGTextPositioningElement.h:
        * svg/SVGTransformable.h:
        * svg/SVGURIReference.cpp:
        (WebCore::SVGURIReference::SVGURIReference):
        * svg/SVGURIReference.h:
        * svg/SVGUseElement.cpp:
        (WebCore::SVGUseElement::SVGUseElement):
        * svg/SVGUseElement.h:
        * svg/SVGViewElement.h:
        * svg/SVGViewSpec.h:

2008-07-18  Maxime Britto  <britto@apple.com>

        Reviewed by Adele.
        
        Fixed <rdar://problem/6049803>
        Prevent the autoscroll to trigger in WebClips when starting or hovering on an editable field.

        Test: fast/events/autoscroll-with-non-scrollable-parent.html

        * ChangeLog:
        * page/EventHandler.cpp: Edited
        (WebCore::EventHandler::handleMousePressEvent): changed the name of the funtion called to canBeProgramaticallyScrolled()
        (WebCore::EventHandler::handleMouseDraggedEvent): prevent the autoscroll to keep looking for a renderer when it's already triggered
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::scrollRectToVisible): verifies that the top layer can be programmatically scrolled before asking him to make the rect visible
        * rendering/RenderListBox.h:
        (WebCore::RenderListBox::canBeProgramaticallyScrolled):
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::canBeProgramaticallyScrolled): Edited : For the 3rd case we want document's renderer to have scrollbar as it's the top layer   
        (WebCore::RenderObject::hasScrollableView): Verifies that the Object has a view with scrollBars
        * rendering/RenderObject.h: Renamed shouldAutosroll() for canBeProgramaticallyScrolled()
        * rendering/RenderTextControl.h:
        (WebCore::RenderTextControl::canBeProgramaticallyScrolled):

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

        Reviewed by Anders Carlsson.

        <rdar://problem/6087283> Add support for uploading files via XMLHttpRequest

        - Overload XMLHttpRequests send() method to accept File tokens.

        * bindings/js/JSXMLHttpRequestCustom.cpp:
        (WebCore::JSXMLHttpRequest::send): 
        * xml/XMLHttpRequest.cpp:
        (WebCore::XMLHttpRequest::send):
        * xml/XMLHttpRequest.h:

2008-07-18  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Cameron Zwarich.
        
        Three renames:
        
        "CallTypeNative" => "CallTypeHost"
        "code" => "byteCode"
        "generatedCode" => "generatedByteCode"

2008-07-18  Adele Peterson  <adele@apple.com>

        Reviewed by Dan Bernstein.

        I recently made a change to avoid fading media controls in and out if a video element actually only contains audio,
        which broke the code that did the same thing for audio elements that contain video (but don't actually display that video).
        This change will now check both the media element and the player to decide whether or not to make the controls persistent.

        * rendering/RenderMedia.cpp: (WebCore::RenderMedia::updateControlVisibility):

2008-07-18  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by mitz

        Remove braces around single-line conditional.
        
        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::computedTransform):

2008-07-18  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Dave Hyatt

        getComputedStyle() for -webkit-transform should return 
        'none' for elements with no renderer, or those with no
        transform.

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

        Testcase: LayoutTests/fast/css/computed-style-without-renderer
                  LayoutTests/fast/css/computed-style-expected.txt

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::computedTransform):

2008-07-18  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Dave Hyatt

        Fix assertion about creating Length values with percentage types
        when blending transforms.
        https://bugs.webkit.org/show_bug.cgi?id=20086

        * rendering/style/RenderStyle.cpp:
        (WebCore::TranslateTransformOperation::blend):

2008-07-17  Jacob Refstrup  <jacob.refstrup@hp.com>

        Reviewed by rwlbuis@gmail.com

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

        - Added "@"{ident} rule (below other @-rules) to use flex for longest match
          (if an earlier rule - e.g. @media - also matches then flex chooses that one
           however, if a longer match - e.g. @mediaall matches flex will choose that)
        - Updated grammar to defined ATKEYWORD token and to use that instead of '@'
          in the error recovery grammar. 

        Test: css2.1/atrule_longest_match.html

        * ChangeLog:
        * css/CSSGrammar.y:
        * css/tokenizer.flex:

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

        Make sure the check to see if a frame/iframe is being rendered inside a transparency layer is
        recursive (and checks for transparency layers all the way up the ancestor document chain back to
        the top-level frame).

        Reviewed by Dan

        * rendering/RenderView.cpp:
        (WebCore::RenderView::paintBoxDecorations):

2008-07-16  Jon Honeycutt  <jhoneycutt@apple.com>

        REGRESSION: Can't create windowless plug-in with Flash 9
        https://bugs.webkit.org/show_bug.cgi?id=20070

        Reviewed by Mark Rowe.

        * plugins/win/PluginPackageWin.cpp:
        (WebCore::PluginPackage::determineQuirks): Reverse argument order;
        PlatformModuleVersion constructor takes leastSig, mostSig.

2008-07-16  Eric Seidel  <eric@webkit.org>

        Reviewed by mitz.

        Attempt to make initializeATSUStyle human-readable by
        splitting it out into better-named static inline functions.

        No functional changes, thus no tests.

        * platform/graphics/mac/FontMac.mm:
        (WebCore::fontHasMirroringInfo):
        (WebCore::disableLigatures):
        (WebCore::initializeATSUStyle):

2008-07-16  Eric Seidel  <eric@webkit.org>

        No review, build fix only.

        Attempt to fix Mac build

        * WebCore.xcodeproj/project.pbxproj: Make TextRun.h a private header.

2008-07-16  Eric Seidel  <eric@webkit.org>

        Reviewed by mitz.

        Make ATSULayoutParameters a real C++ class
        (Give it a destructor to clean up after itself)
        (Also use OwnArrayPtr instead of manual member cleanup)

        * platform/graphics/mac/FontMac.mm:
        (WebCore::ATSULayoutParameters::ATSULayoutParameters):
        (WebCore::ATSULayoutParameters::~ATSULayoutParameters):
        (WebCore::overrideLayoutOperation):
        (WebCore::ATSULayoutParameters::initialize):
        (WebCore::Font::selectionRectForComplexText):
        (WebCore::Font::drawComplexText):
        (WebCore::Font::floatWidthForComplexText):
        (WebCore::Font::offsetForPositionForComplexText):

2008-07-16  Eric Seidel  <eric@webkit.org>

        Reviewed by mitz.

        Make ownership of copied UChar buffer clearer
        (and more leak-proof) by using a OwnArrayPtr.

        No functional changes, thus no tests.

        * platform/graphics/mac/FontMac.mm:
        (WebCore::copyRunForDirectionalOverrideIfNecessary):
        (WebCore::Font::selectionRectForComplexText):
        (WebCore::Font::drawComplexText):
        (WebCore::Font::offsetForPositionForComplexText):

2008-07-16  Eric Seidel  <eric@webkit.org>

        Reviewed by Sam.

        Split out TextRun into its own header file.
        Re-order members to place all bools together
        (to allow compilers to better pack the struct)

        No functional changes, thus no tests.

        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * platform/graphics/Font.h: Moved TextRun into its own file.
        * platform/graphics/TextRun.h: Split out from Font.h

2008-07-16  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Dave Hyatt

        AnimationController needs to adjust z-index in the blended
        style in case opacity or transform were changed by blending.

        https://bugs.webkit.org/show_bug.cgi?id=20047
        
        Test: transitions/opacity-transition-zindex.html

        * page/AnimationController.cpp:
        (WebCore::AnimationController::updateImplicitAnimations):

2008-07-16  Nikolas Zimmermann  <zimmermann@kde.org>

        Reviewed by Sam.

        Fixes: https://bugs.webkit.org/show_bug.cgi?id=20052 
        Prepare SVGAnimatedProperty introduction.

        Export the tag & attribute names as string literals for SVGNames/XLinkNames and one property in HTMLNames. SVGAnimatedProperty
        contains two string literal template parameters, and we're using these exported string literals from {SVG,HTML,XLink}Names as input paramters.
        See https://bugs.webkit.org/show_bug.cgi?id=20051 for details.

        * dom/make_names.pl: Handle new params "exportString" / "exportStrings".
        * html/HTMLAttributeNames.in: Expose just the single "class" attribute, as string.
        * svg/svgattrs.in: Export all SVG attributes as strings.
        * svg/svgtags.in: Export all SVG tags as strings.
        * svg/xlinkattrs.in: Expose all XLink attributes as strings.

2008-07-16  Nikolas Zimmermann  <zimmermann@kde.org>

        Reviewed by Eric.

        Fixes: https://bugs.webkit.org/show_bug.cgi?id=10745 (SVGLength object needs some weight loss)
        Don't store a context pointer in SVGLength, saving memory. Let the caller of the value() & convertToSpecifiedUnits() pass it.

        Remove some uneeded contextElement() functions, by moving into approriate shared base classes.

        * GNUmakefile.am:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSSVGLengthCustom.cpp: Added.
        (WebCore::JSSVGLength::value):
        (WebCore::JSSVGLength::convertToSpecifiedUnits):
        * bindings/scripts/CodeGeneratorObjC.pm:
        * css/CSSCursorImageValue.cpp:
        (WebCore::CSSCursorImageValue::updateIfSVGCursorIsUsed):
        * rendering/RenderForeignObject.cpp:
        (WebCore::RenderForeignObject::translationForAttributes):
        * rendering/RenderSVGImage.cpp:
        (WebCore::RenderSVGImage::layout):
        * rendering/RenderSVGRoot.cpp:
        (WebCore::RenderSVGRoot::calcViewport):
        * rendering/RenderSVGText.cpp:
        (WebCore::RenderSVGText::layout):
        * rendering/RenderSVGViewportContainer.cpp:
        (WebCore::RenderSVGViewportContainer::calcViewport):
        * rendering/SVGCharacterLayoutInfo.cpp:
        (WebCore::SVGCharacterLayoutInfo::addLayoutInformation):
        (WebCore::SVGCharacterLayoutInfo::addStackContent):
        * rendering/SVGCharacterLayoutInfo.h:
        * rendering/SVGRootInlineBox.cpp:
        (WebCore::SVGRootInlineBox::buildTextChunks):
        * svg/SVGAnimateElement.h:
        * svg/SVGAnimateMotionElement.h:
        * svg/SVGAnimateTransformElement.h:
        * svg/SVGAnimationElement.h:
        (WebCore::SVGAnimationElement::contextElement):
        * svg/SVGCircleElement.cpp:
        (WebCore::SVGCircleElement::SVGCircleElement):
        (WebCore::SVGCircleElement::parseMappedAttribute):
        (WebCore::SVGCircleElement::toPathData):
        * svg/SVGCursorElement.cpp:
        (WebCore::SVGCursorElement::SVGCursorElement):
        (WebCore::SVGCursorElement::parseMappedAttribute):
        * svg/SVGEllipseElement.cpp:
        (WebCore::SVGEllipseElement::SVGEllipseElement):
        (WebCore::SVGEllipseElement::parseMappedAttribute):
        (WebCore::SVGEllipseElement::toPathData):
        * svg/SVGFilterElement.cpp:
        (WebCore::SVGFilterElement::SVGFilterElement):
        (WebCore::SVGFilterElement::parseMappedAttribute):
        (WebCore::SVGFilterElement::canvasResource):
        * svg/SVGFilterPrimitiveStandardAttributes.cpp:
        (WebCore::SVGFilterPrimitiveStandardAttributes::SVGFilterPrimitiveStandardAttributes):
        (WebCore::SVGFilterPrimitiveStandardAttributes::parseMappedAttribute):
        (WebCore::SVGFilterPrimitiveStandardAttributes::setStandardAttributes):
        * svg/SVGForeignObjectElement.cpp:
        (WebCore::SVGForeignObjectElement::SVGForeignObjectElement):
        (WebCore::SVGForeignObjectElement::parseMappedAttribute):
        * svg/SVGImageElement.cpp:
        (WebCore::SVGImageElement::SVGImageElement):
        (WebCore::SVGImageElement::parseMappedAttribute):
        * svg/SVGLength.cpp:
        (WebCore::SVGLength::SVGLength):
        (WebCore::SVGLength::value):
        (WebCore::SVGLength::convertToSpecifiedUnits):
        (WebCore::SVGLength::PercentageOfViewport):
        * svg/SVGLength.h:
        * svg/SVGLength.idl:
        * svg/SVGLengthList.cpp:
        (WebCore::SVGLengthList::parse):
        * svg/SVGLengthList.h:
        * svg/SVGLineElement.cpp:
        (WebCore::SVGLineElement::SVGLineElement):
        (WebCore::SVGLineElement::parseMappedAttribute):
        (WebCore::SVGLineElement::toPathData):
        * svg/SVGLinearGradientElement.cpp:
        (WebCore::SVGLinearGradientElement::SVGLinearGradientElement):
        (WebCore::SVGLinearGradientElement::parseMappedAttribute):
        * svg/SVGMarkerElement.cpp:
        (WebCore::SVGMarkerElement::SVGMarkerElement):
        (WebCore::SVGMarkerElement::parseMappedAttribute):
        (WebCore::SVGMarkerElement::canvasResource):
        * svg/SVGMaskElement.cpp:
        (WebCore::SVGMaskElement::SVGMaskElement):
        (WebCore::SVGMaskElement::parseMappedAttribute):
        (WebCore::SVGMaskElement::drawMaskerContent):
        * svg/SVGPatternElement.cpp:
        (WebCore::SVGPatternElement::SVGPatternElement):
        (WebCore::SVGPatternElement::parseMappedAttribute):
        (WebCore::SVGPatternElement::buildPattern):
        * svg/SVGRadialGradientElement.cpp:
        (WebCore::SVGRadialGradientElement::SVGRadialGradientElement):
        (WebCore::SVGRadialGradientElement::parseMappedAttribute):
        * svg/SVGRectElement.cpp:
        (WebCore::SVGRectElement::SVGRectElement):
        (WebCore::SVGRectElement::parseMappedAttribute):
        (WebCore::SVGRectElement::toPathData):
        * svg/SVGSVGElement.cpp:
        (WebCore::SVGSVGElement::SVGSVGElement):
        (WebCore::SVGSVGElement::viewport):
        (WebCore::SVGSVGElement::parseMappedAttribute):
        (WebCore::SVGSVGElement::getCTM):
        (WebCore::SVGSVGElement::getScreenCTM):
        * svg/SVGTextContentElement.cpp:
        (WebCore::SVGTextContentElement::SVGTextContentElement):
        (WebCore::SVGTextContentElement::parseMappedAttribute):
        * svg/SVGTextPathElement.cpp:
        (WebCore::SVGTextPathElement::SVGTextPathElement):
        (WebCore::SVGTextPathElement::parseMappedAttribute):
        * svg/SVGTextPositioningElement.cpp:
        (WebCore::SVGTextPositioningElement::parseMappedAttribute):
        * svg/SVGUseElement.cpp:
        (WebCore::SVGUseElement::SVGUseElement):
        (WebCore::SVGUseElement::parseMappedAttribute):
        (WebCore::SVGUseElement::buildPendingResource):
        (WebCore::SVGUseElement::buildInstanceTree):
        (WebCore::SVGUseElement::handleDeepUseReferencing):
        (WebCore::SVGUseElement::alterShadowTreeForSVGTag):
        (WebCore::SVGUseElement::expandUseElementsInShadowTree):
        (WebCore::SVGUseElement::expandSymbolElementsInShadowTree):
        * svg/SVGUseElement.h:
        * svg/SynchronizableTypeWrapper.h:
        * svg/graphics/SVGImage.cpp:
        (WebCore::SVGImage::size):

2008-07-16  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Oliver Hunt.

        Support for JavaScriptCore's first step toward putting doubles in
        registers: Treat ArgList iterators as Register*'s, not JSValue*'s.

        * bindings/js/ScheduledAction.cpp:
        (WebCore::ScheduledAction::ScheduledAction):

2008-07-15  Maxime Britto  <britto@apple.com>

        Reviewed by Eric.

        https://bugs.webkit.org/show_bug.cgi?id=17589
        <rdar://problem/5770893>
        Retrieve the wheel sensitivity setting from windows system settings for the horizontal and the vertical scrolling.
        Allows the page scrolling with the wheel (if activated in windows settings) on both horizontal and vertical ways
        For the other platforms, nothing is changed but if someone want to activate this feature 
        he/she has to retrieve the settings and fill out the m_lineScrollSensitivity and/or m_charScrollSensitivity in his/her PlatformWheelEvent constructor.

        * ChangeLog:
        * page/EventHandler.cpp:
        (WebCore::scrollAndAcceptEvent): static inline function to avoid copy/paste in the member functions
        (WebCore::EventHandler::handleWheelEvent): Call to the above mentionned static inline function with the right parameters 
        * platform/PlatformWheelEvent.h:
        (WebCore::PlatformWheelEvent::deltaX): Now returns the delta multiplied by the user settings for the number of lines to scroll
        (WebCore::PlatformWheelEvent::deltaY): Now returns the delta multiplied by the user settings for the number of chars to scroll
        (WebCore::PlatformWheelEvent::isPageXScrollModeEnabled):
        (WebCore::PlatformWheelEvent::isPageYScrollModeEnabled):
        * platform/gtk/WheelEventGtk.cpp: Add the values to avoid build break but the factors are initialized to 1 not to change the previous behavior
        (WebCore::PlatformWheelEvent::PlatformWheelEvent):
        * platform/mac/WheelEventMac.mm: Add the values to avoid build break but the factors are initialized to 1 not to change the previous behavior
        (WebCore::PlatformWheelEvent::PlatformWheelEvent):
        * platform/qt/WheelEventQt.cpp: Add the values to avoid build break but the factors are initialized to 1 not to change the previous behavior
        (WebCore::PlatformWheelEvent::PlatformWheelEvent):
        * platform/win/ScrollViewWin.cpp: Added the page scroll (horiz/vertical) and reduced the number of pixels to scroll per line to keep the standard behavior with the factor
        (WebCore::adjustDeltaForPageScrollMode): static inline function to avoid copy/paste in the member functions
        (WebCore::ScrollView::updateScrollbars):
        (WebCore::ScrollView::wheelEvent):
        * platform/win/WheelEventWin.cpp: Retrieves the new values by using the win32 API.
        (WebCore::PlatformWheelEvent::PlatformWheelEvent):
        * platform/wx/MouseWheelEventWx.cpp: Add the values to avoid build break but the factors are initialized to 1 not to change the previous behavior
        (WebCore::PlatformWheelEvent::PlatformWheelEvent):

2008-07-15  Kevin Ollivier  <kevino@theolliviers.com>

        wx build fix - adding AccessibilityImageMapLink.cpp to the wx build.

        * WebCoreSources.bkl:

2008-07-15  Kevin McCullough  <kmccullough@apple.com>

        Reviewed by Dan.

        <rdar://problem/5620273> REGRESSION: Apparent caching between form
        submits twice (on Maconomy) (18401)

        Frames did not set the createdByParser flag even when they were.

        * html/HTMLElementFactory.cpp:
        (WebCore::frameConstructor):
        (WebCore::iframeConstructor):

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

        Reviewed by Dave Hyatt.

        - fix https://bugs.webkit.org/show_bug.cgi?id=19525
          <rdar://problem/5961768> -webkit-box-reflect in hyperlink causes webkit to crash

        Test: fast/reflections/inline-crash.html

        * rendering/RenderInline.cpp:
        (WebCore::RenderInline::setStyle): Added setHasReflection(false).
        Inline flows never have reflections.

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

        Allow <style> and <link> pretty much anywhere.  They will still be moved to the <head> if
        no <body> exists yet though.

        Reviewed by Sam

        Added fast/css/style-parsed-outside-of-head.html

        * html/HTMLElement.cpp:
        (WebCore::inlineTagList):

2008-07-15  Kevin McCullough  <kmccullough@apple.com>

        Reviewed by Geoff.

        Rename pageGroupIdentifier to profileGroup to keep mention of a
        pageGroup out of JavaScriptCore.

        * bindings/js/JSQuarantinedObjectWrapper.cpp:
        (WebCore::JSQuarantinedObjectWrapper::allowsUnwrappedAccessFrom):
        * bindings/js/ScriptController.cpp:
        (WebCore::ScriptController::clear):
        (WebCore::ScriptController::initScript):
        * history/CachedPage.cpp:
        (WebCore::CachedPage::restore):

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-07-15  Adam Roben  <aroben@apple.com>

        Windows build fix

        * WebCore.vcproj/WebCore.vcproj: Add AccessibilityImageMapLink.{cpp,h}
        to the project.

2008-07-15  Holger Hans Peter Freyther  <zecke@selfish.org>

        Build fix for the Gtk+ and Qt platform.

        * GNUmakefile.am: Add AccessibilityImageMapLink.cpp to the build
        * WebCore.pro: Add AccessibilityImageMapLink.cpp to the build

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

        - Tiger build fix

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

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

        Reviewed by John Sullivan.

        - WebCore part of fixing <rdar://problem/6071850> Subviews not drawn correctly when using -cacheDisplayInRect:toBitmapImageRep:

        * platform/mac/WidgetMac.mm:
        (WebCore::Widget::paint): Changed to account for the case of drawing
        into a bitmap context that is not a window's backing store. In that
        case, -displayRectIgnoringOpacity:inContext: is used to redirect the
        drawing to the correct context, after setting up the right transform
        on it. For subframes, additional code ensures that the scroll view will
        not paint the background behind a transparent frame.

2008-07-14  chris fleizach  <cfleizach@apple.com>

        Reviewed by Beth Dakin

        <rdar://problem/6038106> AXChildren returned for this web area is null
        Accessibility of image maps needed to be updated

        Tests: accessibility/image-map1.html
               accessibility/image-map2.html

        * WebCore.xcodeproj/project.pbxproj:
        * page/AXObjectCache.cpp:
        (WebCore::AXObjectCache::get):
        * page/AccessibilityImageMapLink.cpp: Added.
        (WebCore::AccessibilityImageMapLink::AccessibilityImageMapLink):
        (WebCore::AccessibilityImageMapLink::~AccessibilityImageMapLink):
        (WebCore::AccessibilityImageMapLink::create):
        (WebCore::AccessibilityImageMapLink::parentObject):
        (WebCore::AccessibilityImageMapLink::anchorElement):
        (WebCore::AccessibilityImageMapLink::accessibilityDescription):
        (WebCore::AccessibilityImageMapLink::title):
        (WebCore::AccessibilityImageMapLink::elementRect):
        (WebCore::AccessibilityImageMapLink::size):
        * page/AccessibilityImageMapLink.h: Added.
        (WebCore::AccessibilityImageMapLink::setHTMLAreaElement):
        (WebCore::AccessibilityImageMapLink::setHTMLMapElement):
        (WebCore::AccessibilityImageMapLink::roleValue):
        (WebCore::AccessibilityImageMapLink::accessibilityIsIgnored):
        (WebCore::AccessibilityImageMapLink::isLink):
        * page/AccessibilityListBoxOption.h:
        * page/AccessibilityObject.cpp:
        (WebCore::AccessibilityObject::selectedChildren):
        (WebCore::AccessibilityObject::visibleChildren):
        * page/AccessibilityObject.h:
        (WebCore::):
        * page/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::parentObject):
        (WebCore::AccessibilityRenderObject::isAnchor):
        (WebCore::AccessibilityRenderObject::anchorElement):
        (WebCore::AccessibilityRenderObject::helpText):
        (WebCore::AccessibilityRenderObject::intValue):
        (WebCore::AccessibilityRenderObject::stringValue):
        (WebCore::AccessibilityRenderObject::title):
        (WebCore::AccessibilityRenderObject::accessibilityDescription):
        (WebCore::AccessibilityRenderObject::elementRect):
        (WebCore::AccessibilityRenderObject::accessibilityIsIgnored):
        (WebCore::AccessibilityRenderObject::roleValue):
        (WebCore::AccessibilityRenderObject::canSetFocusAttribute):
        (WebCore::AccessibilityRenderObject::addChildren):
        * page/AccessibilityRenderObject.h:
        * page/mac/AccessibilityObjectWrapper.mm:
        (convertToNSArray):
        (RoleEntry::):

2008-07-14  Sam Weinig  <sam@webkit.org>

        Rubber-stamped by David Hyatt.

        Remove unused ExceptionCode parameter from compareDocumentPosition.

        * dom/Document.cpp:
        (WebCore::Document::addStyleSheetCandidateNode):
        * dom/Node.cpp:
        (WebCore::Node::compareDocumentPosition):
        * dom/Node.h:
        * dom/Node.idl:

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

        Fix for bugzilla bug 5476, link and style elements should be allowed outside the <head>.

        Reviewed by Sam

        Added fast/css/style-outside-head.html
        Added fast/css/link-outside-head.html

        * dom/Document.cpp:
        (WebCore::Document::addStyleSheetCandidateNode):
        (WebCore::Document::removeStyleSheetCandidateNode):
        (WebCore::Document::recalcStyleSelector):
        * dom/Document.h:
        * dom/Node.cpp:
        (WebCore::Node::compareDocumentPosition):
        * dom/ProcessingInstruction.cpp:
        (WebCore::ProcessingInstruction::checkStyleSheet):
        (WebCore::ProcessingInstruction::insertedIntoDocument):
        (WebCore::ProcessingInstruction::removedFromDocument):
        (WebCore::ProcessingInstruction::finishParsingChildren):
        * dom/ProcessingInstruction.h:
        (WebCore::ProcessingInstruction::setCreatedByParser):
        * dom/StyleElement.cpp:
        (WebCore::StyleElement::removedFromDocument):
        * dom/XMLTokenizer.cpp:
        (WebCore::XMLTokenizer::startElementNs):
        (WebCore::XMLTokenizer::processingInstruction):
        (WebCore::):
        * html/HTMLElementFactory.cpp:
        (WebCore::linkConstructor):
        * html/HTMLLinkElement.cpp:
        (WebCore::HTMLLinkElement::HTMLLinkElement):
        (WebCore::HTMLLinkElement::insertedIntoDocument):
        (WebCore::HTMLLinkElement::removedFromDocument):
        (WebCore::HTMLLinkElement::finishParsingChildren):
        * html/HTMLLinkElement.h:
        (WebCore::HTMLLinkElement::setCreatedByParser):
        * html/HTMLStyleElement.cpp:
        (WebCore::HTMLStyleElement::insertedIntoDocument):
        (WebCore::HTMLStyleElement::removedFromDocument):
        * svg/SVGStyleElement.cpp:
        (WebCore::SVGStyleElement::insertedIntoDocument):
        (WebCore::SVGStyleElement::removedFromDocument):

2008-07-14  Sam Weinig  <sam@webkit.org>

        Reviewed by Mark Rowe.

        Sort interface extended attributes to appease *the* Mark Rowe.

        * page/DOMWindow.idl:

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

        Reviewed by Geoff.

        <rdar://problem/6073974>
        https://bugs.webkit.org/show_bug.cgi?id=18106
        The "onscroll" event bubbles, which is inconsistent with Firefox and IE

        Don't bubble the scroll event.
        
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::scrollToOffset):
        * rendering/RenderListBox.cpp:
        (WebCore::RenderListBox::valueChanged):

2008-07-14  Adele Peterson  <adele@apple.com>

        Reviewed by Geoff.

        Fix for <rdar://problem/5784890> REGRESSION (Safari 3): Can't edit SpeedStream 4100 DSL modem settings

        The web server on this particular piece of hardware doesn't handle "text/xml" in the 
        Accept header if the headers are sent in a certain order.  Safari 2 used to send "*/*" in 
        the Accept header.  Firefox 2 sent "text/xml" but in an acceptable order for the web 
        server.  And Firefox 3 doesn't send "text/xml" at all in the Accept header since it 
        is being deprecated in favor of "application/xml".  We decided that the best solution is 
        to match Firefox 3 and stop sending "text/xml" in the Accept header.

        No test.  There appears to be no way to get the raw headers in the original order in perl/php.

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

2008-07-14  Sam Weinig  <sam@webkit.org>

        Reviewed by Adele Peterson.

        Fix for <rdar://problem/5769819>

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

        * bindings/js/JSDOMWindowCustom.cpp:
        (WebCore::JSDOMWindow::getPropertyAttributes): Perform security check.
        (WebCore::JSDOMWindow::defineGetter): Ditto.
        (WebCore::JSDOMWindow::defineSetter): Ditto.
        (WebCore::JSDOMWindow::lookupGetter): Ditto.
        (WebCore::JSDOMWindow::lookupSetter): Ditto.
        * bindings/scripts/CodeGeneratorJS.pm: Add support for custom versions
        of all the core JSObject functionality.
        * page/DOMWindow.idl: Override remaining core JSObject functionality,
        to inject security checks.

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

        Windows build fixes

        * WebCore.vcproj/WebCore.vcproj: Add include/pthreads to the include
        path.
        * bindings/scripts/CodeGeneratorCOM.pm: Touched this to force COM
        bindings to regenerate.
        * loader/FTPDirectoryDocument.cpp:
        * loader/FTPDirectoryParser.cpp:
        Fixed some duplicate macro definitions now that we're including
        pthread.h again.

2008-07-14  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Kevin McCullough.

        Make JSGlobalData refcounted in preparation to adding a way to create contexts that share
        global data.

        * bindings/js/JSDOMWindowBase.cpp:
        (WebCore::JSDOMWindowBase::commonJSGlobalData): Create JSGlobalData with create() method.

2008-07-14  Simon Hausmann  <hausmann@webkit.org>

        Reviewed by Holger.

        Make listDirectory() in the Qt port work with empty namefilters.
        Don't include . and .. to avoid scanning the parent directory.

        * platform/qt/FileSystemQt.cpp:
        (WebCore::listDirectory):

2008-07-14  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Geoff Garen.

        Eliminate per-thread JavaScript global data instance support and make arbitrary
        global data/global object combinations possible.

        * bindings/js/JSDOMWindowBase.h:
        * bindings/js/JSDOMWindowBase.cpp: (WebCore::JSDOMWindowBase::commonJSGlobalData): Added.
        WebCore uses its own instance of JSGlobalData, as JSC no longer provides a per-thread one.

        * bindings/js/JSDOMWindowShell.cpp:
        (WebCore::JSDOMWindowShell::JSDOMWindowShell):
        (WebCore::JSDOMWindowShell::operator new):
        * bindings/js/ScriptController.cpp:
        (WebCore::ScriptController::clear):
        * bindings/scripts/CodeGeneratorJS.pm:
        Pass commonJSGlobalData() as an allocator.

        * bridge/c/c_utility.cpp:
        (KJS::Bindings::identifierFromNPIdentifier):
        * bridge/jni/jni_class.cpp:
        (JavaClass::JavaClass):
        * history/CachedPage.cpp:
        (WebCore::CachedPage::restore):
        * storage/Database.cpp:
        (WebCore::Database::Database):
        * bindings/js/GCController.cpp:
        (WebCore::collect):
        (WebCore::GCController::gcTimerFired):
        (WebCore::GCController::garbageCollectNow):
        Use JSDOMWindow::commonJSGlobalData().

        * ForwardingHeaders/wtf/ThreadSpecific.h: Added (collector.h now includes this header, so
        it need to be accesible outside of JSC).

        * WebCore.base.exp: Export JSDOMWindowBase::commonJSGlobalData().

2008-07-14  Ariya Hidayat  <ariya.hidayat@trolltech.com>

        Reviewed by Simon.

        MinGW build fixes

        * plugins/win/PluginDatabaseWin.cpp:
        * plugins/win/PluginViewWin.cpp:
        (WebCore::PluginView::handleKeyboardEvent):
        (WebCore::PluginView::handleMouseEvent):
        * svg/SynchronizableTypeWrapper.h:
        (WebCore::::SynchronizableTypeWrapper):

2008-07-13  Sam Weinig  <sam@webkit.org>

        Reviewed by Oliver Hunt and Dan Bernstein.

        Fix for <rdar://problem/5888127>
        https://bugs.webkit.org/show_bug.cgi?id=18699

        - Match Firefox in restricting the size of custom cursor to images to
          128x128 px.
        - Restrict custom cursor hotspots to values within the bounds of the
          cursor image.

        * manual-tests/cursor-max-size.html: Added.
        * page/EventHandler.cpp:
        (WebCore::EventHandler::selectCursor):

2008-07-13  Kevin Ollivier  <kevino@theolliviers.com>

        wx build fix.

        * platform/graphics/wx/AffineTransformWx.cpp:
        (WebCore::AffineTransform::a):
        (WebCore::AffineTransform::b):
        (WebCore::AffineTransform::c):
        (WebCore::AffineTransform::d):
        (WebCore::AffineTransform::e):
        (WebCore::AffineTransform::f):

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

        Reviewed by Oliver Hunt.

        - fix https://bugs.webkit.org/show_bug.cgi?id=18088
          <rdar://problem/6036232> white-space:nowrap; float:left; causing the misalignment issue

        Test: fast/block/basic/min-pref-width-nowrap-floats.html

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::calcInlinePrefWidths): Fixed a case where a
        float's width was added to the minimum preferred widths instead of just
        acting as a lower bound on the minimum preferred width (since the float
        can always be pushed down to be the only thing on the line).

2008-07-12  David D. Kilzer  <ddkilzer@webkit.org>

        Bug 13067: Manually adding #hash to URL reloads entire page instead of jumping to #hash location in cached page

        <https://bugs.webkit.org/show_bug.cgi?id=13067>

        Reviewed by Darin.

        Test: WebCore/manual-tests/hash-ref.html

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::load(const KURL& newURL, const String& referrer,
             FrameLoadType newLoadType, const String& frameName, Event* event,
             PassRefPtr<FormState> formState)): Extracted logic into
        shouldScrollToAnchor() for determining when to scroll to an anchor.

        (WebCore::FrameLoader::load(DocumentLoader* loader, FrameLoadType type,
             PassRefPtr<FormState> formState)): Added check for
        shouldScrollToAnchor() to catch cases when the user manually added a
        hash ref to the URL in the address bar.  This is the bug fix.

        (WebCore::FrameLoader::shouldReload): Simplified early return logic.
        We only need to check if the destinationURL has a hash ref, not the
        currentURL, per the comment in the method.

        (WebCore::FrameLoader::shouldScrollToAnchor): Added.  Logic extracted
        from the FrameLoader::load(const KURL& newURL, ...) method.  Fixed order
        of arguments to shouldReload() since they were backwards, although the
        previous logic in the method made this irrelevant.

        (WebCore::FrameLoader::loadItem): Removed call to shouldReload().  Since
        we're navigating to a HistoryItem, it doesn't make sense to ask whether
        we need to reload the page or not.  Additionally, the logic at the end
        of shouldReload() is also checked in urlsMatchItem(), so there's no need
        to call the method.  This fixed the fast/css/target-fragment-match.html
        test from continuously reloading after the other changes.

        * loader/FrameLoader.h:
        (WebCore::FrameLoader::shouldScrollToAnchor): Added.

        * manual-tests/hash-ref.html: Added.
        * manual-tests/resources/hash-ref-test.html: Added.

2008-07-11  Stephanie Lewis  <slewis@apple.com>

        Reviewed by Darin Adler.

        No Functionality Changed.  Change all the leak counting code to use the new WTF leak counter class.

        * bindings/js/JSCustomSQLTransactionCallback.cpp:
        (WebCore::JSCustomSQLTransactionCallback::JSCustomSQLTransactionCallback):
        (WebCore::JSCustomSQLTransactionCallback::~JSCustomSQLTransactionCallback):
        * bindings/js/JSEventListener.cpp:
        (WebCore::JSEventListener::JSEventListener):
        (WebCore::JSEventListener::~JSEventListener):
        * dom/Node.cpp:
        (WebCore::Node::Node):
        (WebCore::Node::~Node):
        * dom/Range.cpp:
        (WebCore::Range::Range):
        (WebCore::Range::~Range):
        * history/CachedPage.cpp:
        (WebCore::CachedPage::CachedPage):
        (WebCore::CachedPage::~CachedPage):
        * loader/SubresourceLoader.cpp:
        (WebCore::SubresourceLoader::SubresourceLoader):
        (WebCore::SubresourceLoader::~SubresourceLoader):
        * page/Frame.cpp:
        (WebCore::Frame::Frame):
        (WebCore::Frame::~Frame):
        * page/Page.cpp:
        (WebCore::Page::Page):
        (WebCore::Page::~Page):
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::RenderObject):
        (WebCore::RenderObject::~RenderObject):
        * rendering/bidi.cpp:
        (WebCore::throw):
        (WebCore::BidiRun::operator delete):

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

        Reviewed by Mark Rowe.

        Update getSubStringLength and selectSubString methods exception throwing conditions
        based on SVG working group errata.

        Test: svg/custom/selectSubString.html

        * svg/SVGTextContentElement.cpp:
        (WebCore::SVGTextContentElement::getSubStringLength):
        (WebCore::SVGTextContentElement::selectSubString):

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

        Reviewed by Mark Rowe.

        We can only use the Id fast path for querySelector and querySelectorAll
        if the selector is purely an Id selector.

        Test: fast/dom/SelectorAPI/id-fastpath.html

        * dom/Node.cpp:
        (WebCore::Node::querySelector):
        * dom/SelectorNodeList.cpp:
        (WebCore::createSelectorNodeList):

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

        Implement the DOM level 3 compareDocumentPosition method on Node.

        Reviewed by Darin

        * dom/Node.cpp:
        (WebCore::Node::compareDocumentPosition):
        * dom/Node.h:
        * dom/Node.idl:

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

        Rubberstamped by Sam

        Removed unneeded export

        * WebCore.base.exp:

2008-07-11  Kevin McCullough  <kmccullough@apple.com>

        Reviewed by Geoff.

        <rdar://problem/6067178> REGRESSION: Start profile button in profiler
        now profiles inspector rather than actual page (19833)
        - The JSQuarantinedObjectWrapper should use the wrapped exec state
        so that calls to it execute in its quarantined world.

        * bindings/js/JSQuarantinedObjectWrapper.cpp:
        (WebCore::JSQuarantinedObjectWrapper::construct):
        (WebCore::JSQuarantinedObjectWrapper::call):

2008-07-11  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Dave Hyatt

        StyleRareNonInheritedData needs to initialize and compare
        m_maskBoxImage.
        <https://bugs.webkit.org/show_bug.cgi?id=20005>

        * rendering/style/RenderStyle.cpp:
        (WebCore::StyleRareNonInheritedData::StyleRareNonInheritedData):
        (WebCore::StyleRareNonInheritedData::operator==):

2008-07-11  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Dave Hyatt

        Bug 18885: RenderLayer::enclosingPositionedAncestor() should
        look for transforms, since transforms create containing
        blocks.
        <https://bugs.webkit.org/show_bug.cgi?id=18885>

        Test: fast/transforms/transform-positioned-ancestor.html

        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::stackingContext):
        (WebCore::RenderLayer::enclosingPositionedAncestor):
        (WebCore::RenderLayer::enclosingTransformedAncestor):

2008-07-11  Jacob Refstrup  <jacob.refstrup@hp.com>

        Reviewed by Darin Adler

        http://bugs.webkit.org/show_bug.cgi?id=19978
        GTK port always ends up with # at the end of resource URLs (and hence can't load files)

        - Optimized KURL::removeRef() and used it rather than setRef("")
          which after r35040 does the wrong thing.

        * platform/KURL.cpp:
        (WebCore::KURL::removeRef):
        * platform/network/curl/ResourceHandleManager.cpp:
        (WebCore::ResourceHandleManager::initializeHandle):

2008-07-11  Simon Hausmann  <hausmann@webkit.org>

        Fix the Qt/Windows build, include windows.h for HWND directly
        instead of implicit inclusion through Timer.h.

        * plugins/win/PluginMessageThrottlerWin.h:

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

        Reviewed by Darin Adler.

        - fix popularity tracking for cached resources, which regressed in r23923

        * loader/Cache.cpp:
        (WebCore::Cache::requestResource): Changed to increase the access count
        whenever this function returns a CachedResource and the cache is
        enabled, instead of only when creating a new CachedResources. The
        incorrect behavior resulted in all resources in the cache having an
        access count of exactly 1 at all times.
        (WebCore::Cache::requestUserCSSStyleSheet): Ditto.

2008-07-11  Ariya Hidayat  <ariya.hidayat@trolltech.com>

        Reviewed by Simon.

        Enable Netscape plugins for the Qt/Windows build.

        This required various smaller fixes across a wider set of
        files described below.

        * WebCore.pro: Add various windows specific files to the build.
        * page/Page.h: Extend the #ifdeffery for windows types to include the
        Qt/Windows build.
        * platform/graphics/GraphicsContext.h: Added inTransparencyLayer() for
        the Qt port, as PluginViewWin.cpp uses it.
        * platform/graphics/qt/GraphicsContextQt.cpp:
        (WebCore::GraphicsContext::inTransparencyLayer): Implemented function.
        * platform/qt/TemporaryLinkStubs.cpp: Mask out some stubs as they
        are now implemented through *Win.cpp files.
        * plugins/PluginDatabase.cpp: Change PLATFORM(WIN) to WIN_OS.
        * plugins/PluginView.cpp: Change PLATFORM(WIN) to WIN_OS.
        (WebCore::PluginView::setFrameGeometry): Ditto.
        (WebCore::PluginView::PluginView): Ditto.
        * plugins/PluginView.h: Introduce the PlatformPluginWidget typedef,
        which expands to HWND directly for the Qt/Windows build and
        PlatformWidget for the remaining platforms. That is because
        PlatformWidget is QWidget* for the Qt build but for the plugin
        window we need a native window, aka HWND.
        * plugins/win/PluginPackageWin.cpp: Fix compilation, include shlwapi.h
        after config.h.
        * plugins/win/PluginViewWin.cpp:
        (windowHandleForPlatformWidget): Added a little helper function to
        determine the HWND from a PlatformWidget.
        (WebCore::registerPluginView): For the Qt port we need to set the
        global application instance handle here in the library, as the
        browser doesn't do it.
        (WebCore::PluginView::handleMouseEvent): Mask out
        ignoreNextSetCursor/lastSetCursor for the Qt port, it's not used.
        (WebCore::PluginView::invalidateRect): Convert from IntRect to RECT
        manually just here to avoid compiling in IntRectWin.cpp.
        (WebCore::PluginView::invalidateRegion): Ditto.
        (WebCore::PluginView::forceRedraw): Call windowHandleForPlatformWidget
        on containingWindow() to get the correct HWND for the Qt port.
        (WebCore::PluginView::init): Determine the parent HWND for m_window
        using windowHandleForPlatformWidget.

2008-07-11  Simon Hausmann  <hausmann@webkit.org>

        Rubber-stamped by Holger.

        Enable Database and Icondatabase functionality for the Qt/Windows
        build when building inside Qt, as we can use the builtin copy of
        sqlite then.

        * WebCore.pro:

2008-07-11  Ariya Hidayat  <ariya.hidayat@trolltech.com>

        Reviewed by Adam Roben.

        Fix compile with MinGW since it does not like friend static function.

        * plugins/PluginView.h:
        * plugins/win/PluginViewWin.cpp:

2008-07-11  Ariya Hidayat  <ariya.hidayat@trolltech.com>

        Reviewed by Simon.

        Fix Qt/Win32 build.

        * platform/graphics/qt/GraphicsContextQt.cpp:

2008-07-10  Sam Weinig  <sam@webkit.org>

        Reviewed by Oliver Hunt.

        Add support for NSResolver to resolve namespaces for querySelector 
        and querySelectorAll.

        - Namespace resolution is done after parsing by iterating over all the
          parts of the CSSSelector.

        Tests: fast/dom/SelectorAPI/NSResolver-basic.xhtml
               fast/dom/SelectorAPI/NSResolver-exceptions.xhtml

        * GNUmakefile.am: Updated with new files.
        * WebCore.pro: Ditto.
        * WebCore.vcproj/WebCore.vcproj: Ditto.
        * WebCore.xcodeproj/project.pbxproj: Ditto.
        * WebCoreSources.bkl: Ditto.

        * bindings/js/JSDOMBinding.cpp:
        (WebCore::execStateFromNode):
        * bindings/js/JSDOMBinding.h:
        Move execStateFromNode here from NodeFilter.

        * bindings/js/JSDocumentCustom.cpp:
        (WebCore::JSDocument::querySelector): Don't throw a NOT_SUPPORTED_ERR for NSResolver
        and instead create one if the argument is not undefined or null.
        (WebCore::JSDocument::querySelectorAll): Ditto.
        * bindings/js/JSDocumentFragmentCustom.cpp:
        (WebCore::JSDocumentFragment::querySelector): Ditto.
        (WebCore::JSDocumentFragment::querySelectorAll): Ditto.
        * bindings/js/JSElementCustom.cpp:
        (WebCore::JSElement::querySelector): Ditto.
        (WebCore::JSElement::querySelectorAll): Ditto.

        * bindings/js/JSNSResolver.cpp: Added.
        (WebCore::JSNSResolver::JSNSResolver):
        (WebCore::JSNSResolver::mark):
        (WebCore::JSNSResolver::lookupNamespaceURI): Try and get the function
        from the passed in argument, either the value itself, or the result of
        getting the lookupNamespaceURI property, and call it.
        (WebCore::toNSResolver):
        * bindings/js/JSNSResolver.h: Added.
        (WebCore::JSNSResolver::create):

        * dom/Document.idl: Update with NSResolver parameter.
        * dom/DocumentFragment.idl: Ditto.
        * dom/Element.idl: Ditto.

        * dom/NSResolver.h: Added.
        (WebCore::NSResolver::~NSResolver):
        (WebCore::NSResolver::mark):
        Abstract base class.

        * dom/NSResolver.idl: Added.

        * dom/Node.cpp:
        (WebCore::forEachTagSelector):
        (WebCore::forEachSelector):
        Functions to iterate over all parts of the selector.

        (WebCore::SelectorNeedsNamespaceResolutionFunctor::operator()):
        Functor to be passed to forEachSelector to determine if a selector
        needs namespace resolution, for the case when no NSResolver is passed
        and we need to determine whether to throw a NAMESPACE_ERR.

        (WebCore::ResolveNamespaceFunctor::ResolveNamespaceFunctor):
        (WebCore::ResolveNamespaceFunctor::operator()):
        Functor to resolve namespaces for the selector.

        (WebCore::selectorNeedsNamespaceResolution):
        (WebCore::resolveNamespacesForSelector):
        (WebCore::Node::querySelector): Resolve namepspaces, including the defaultNamespace
        if a NSResolver is passed in.
        (WebCore::Node::querySelectorAll): Ditto.
        * dom/Node.h:

        * dom/NodeFilter.cpp:
        * dom/NodeFilter.h:
        * dom/NodeIterator.h:
        (WebCore::NodeIterator::nextNode):
        (WebCore::NodeIterator::previousNode):
        * dom/TreeWalker.h:
        (WebCore::TreeWalker::parentNode):
        (WebCore::TreeWalker::firstChild):
        (WebCore::TreeWalker::lastChild):
        (WebCore::TreeWalker::previousSibling):
        (WebCore::TreeWalker::nextSibling):
        (WebCore::TreeWalker::previousNode):
        (WebCore::TreeWalker::nextNode):
        Use the version of execStateFromNode in JSDOMBinding.

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

        Reviewed by Sam Weinig.

        Define WEBKIT_VERSION_MIN_REQUIRED=WEBKIT_VERSION_LATEST when building WebKit to ensure that no symbols end up with the weak_import attribute.

        * Configurations/WebCore.xcconfig:

2008-07-10  Dean Jackson  <dino@apple.com>

        Reviewed by hyatt.

        Calculate computed style for -webkit-transform property
        https://bugs.webkit.org/show_bug.cgi?id=19864

        Test: css3/transform-computed-style-001.html

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::computedTransform):
        (WebCore::CSSComputedStyleDeclaration::getPropertyCSSValue):
            handles -webkit-transform property now
        * manual-tests/computed-transform-value.html: Added.

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

        Reviewed by Adam Roben.

        - fix a parse error in inspector.js

        * page/inspector/inspector.js: Added missing brace.

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

        Build fix

        * WebCore.vcproj/QTMovieWin.vcproj: Add
        OSXCompatibilityHeaders[/GNUCompatibility] to the include path.

2008-07-10  Chris Fleizach  <cfleizach@apple.com>

        Reviewed by Dan Bernstein

        <rdar://problem/6067408> AX: internal anchors broken

        * page/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::internalLinkElement):
        * platform/KURL.cpp:
        (WebCore::KURL::removeRef):
        * platform/KURL.h:

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

        Build fix.

        * bridge/npapi.h: Remove extra comma.

2008-07-10  Sam Weinig  <sam@webkit.org>

        Reviewed by Mark Rowe.

        Remove no-op debug method.

        * css/CSSSelector.cpp:
        * css/CSSSelector.h:

2008-07-10  Sam Weinig  <sam@webkit.org>

        Reviewed by Dave Hyatt and Darin Adler.

        Add support for calling querySelector and querySelectorAll on DocumentFragments

        - Fixes bug where nodes not in the document tree would not match based on ID due
          to over optimization.

        Test: fast/dom/SelectorAPI/detached-element.html

        * GNUmakefile.am:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * WebCoreSources.bkl:
        * bindings/js/JSDocumentFragmentCustom.cpp: Added.
        (WebCore::JSDocumentFragment::querySelector): Add custom code matching JSElement
        and JSDocument that checks for a 2nd arguments and throws an exception indicating
        we do not currently support the optional NSResolver part of the Selectors API spec.
        (WebCore::JSDocumentFragment::querySelectorAll): Ditto.
        * dom/DocumentFragment.idl: Add querySelector and querySelectorAll declarations.

        * dom/Node.cpp:
        (WebCore::Node::querySelector): Make the CSS parser parse the selector
        according to the strictness of the document so that mixed case ID selectors
        match in quirks mode.  Also, don't use the fast ID path if the root is not
        in the DOM tree, as it won't work.
        (WebCore::Node::querySelectorAll): Ditto.
        * dom/SelectorNodeList.cpp:
        (WebCore::createSelectorNodeList): Don't use the fast ID path if the root is not
        in the DOM tree, as it won't work.

2008-07-10  Anthony Ricaud  <rik24d@gmail.com>

        Bug 19389: querySelectorAll exception while searching invalid CSS selector
        <https://bugs.webkit.org/show_bug.cgi?id=19389>

        Reviewed by Tim Hatcher.

        * page/inspector/inspector.js: Added a try/catch block.

2008-07-10  Brent Fulgham  <bfulgham@gmail.com>

        Correct a build regression due to an uninitialized variable.

        <https://bugs.webkit.org/show_bug.cgi?id=19976>

        Reviewed by Darin.

        * platform/graphics/cairo/FontCairo.cpp:
        (WebCore::Font::drawGlyphs):

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

        Fix Bug 19580: REGRESSION (r34432): PGO-only crash in
        HTMLCollection::resetCollectionInfo (codegen issue?)

        <https://bugs.webkit.org/show_bug.cgi?id=19580>
        <rdar://6029794>

        Reviewed by Cameron Zwarich.

        * WebCore.vcproj/WebCore.vcproj: Disable LTCG for HTMLFormElement.cpp,
        which was causing some bad codegen in HTMLFormElement::elements.
        * html/HTMLFormElement.cpp: Touched this file to force it to rebuild.

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

        Reviewed by Jon.

        <rdar://problem/6067135>
        WebKit should respond true to a query for NPNVSupportsWindowless.
        
        Handle NPNVSupportsWindowless and return true.
        
        * bridge/npapi.h:
        * plugins/win/PluginViewWin.cpp:
        (WebCore::PluginView::getValue):

2008-07-10  Kevin McCullough  <kmccullough@apple.com>

        Reviewed by Darin.

        -Minor cleanup. Renamed callTree() to head() and no longer use m_head
        directly but instead keep it private and access via a method().

        * page/JavaScriptProfile.cpp:
        (WebCore::getHeadCallback):

2008-07-10  Simon Fraser  <simon.fraser@apple.com>

        When a mask image changes, ensure that elements
        that use that mask image are repainted correctly.
        
        <https://bugs.webkit.org/show_bug.cgi?id=19954>
        
        Reviewed by Dave Hyatt

        * manual-tests/canvas-mask-redraw.html
          Manual testcase
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::imageChanged):
        (WebCore::RenderBox::repaintLayerRectsForImage):
        * rendering/RenderBox.h:
        Loop through background layers and mask layers, and
        if this image is used in a layer, compute a repaint
        rect and repaint.
        * rendering/RenderImage.cpp:
        (WebCore::RenderImage::imageChanged):
        If this image has a mask, call the base class method.
        * rendering/RenderObject.cpp:
        Remove a bogus 'return'.

2008-07-10  Simon Fraser  <simon.fraser@apple.com>

        Transforms create a containing block, so
        RenderLayer::shouldBeOverflowOnly() needs to look for transforms.
        <https://bugs.webkit.org/show_bug.cgi?id=18886>
        
        Reviewed by Dave Hyatt

        Test: fast/transforms/transform-overflow.html

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

2008-07-09  Alex Mathews  <possessedpenguinbob@gmail.com>

        Reviewed by Oliver Hunt.

        bug 19835: WebKit needs cross-platform filter system
        <https://bugs.webkit.org/show_bug.cgi?id=19835>

        More class refactoring in preparation for cross-platform filter 
        implementation.

        * WebCore.xcodeproj/project.pbxproj:
        * rendering/SVGRenderTreeAsText.h:
        (WebCore::operator<<):
        * svg/FilterEffect.cpp:
        (WebCore::FilterEffect::externalRepresentation):
        * svg/FilterEffect.h:
        * svg/SVGFEBlendElement.cpp:
        (WebCore::SVGFEBlendElement::build):
        * svg/SVGFEBlendElement.h:
        * svg/SVGFEColorMatrixElement.cpp:
        (WebCore::SVGFEColorMatrixElement::build):
        * svg/SVGFEColorMatrixElement.h:
        * svg/SVGFEComponentTransferElement.cpp:
        (WebCore::SVGFEComponentTransferElement::build):
        * svg/SVGFEComponentTransferElement.h:
        * svg/SVGFECompositeElement.cpp:
        (WebCore::SVGFECompositeElement::build):
        * svg/SVGFECompositeElement.h:
        * svg/SVGFEDiffuseLightingElement.cpp:
        (WebCore::SVGFEDiffuseLightingElement::filterEffect):
        (WebCore::SVGFEDiffuseLightingElement::build):
        (WebCore::SVGFEDiffuseLightingElement::findLights):
        * svg/SVGFEDiffuseLightingElement.h:
        * svg/SVGFEDisplacementMapElement.cpp:
        (WebCore::SVGFEDisplacementMapElement::SVGFEDisplacementMapElement):
        (WebCore::SVGFEDisplacementMapElement::stringToChannel):
        (WebCore::SVGFEDisplacementMapElement::filterEffect):
        (WebCore::SVGFEDisplacementMapElement::build):
        * svg/SVGFEDisplacementMapElement.h:
        * svg/SVGFEFloodElement.cpp:
        (WebCore::SVGFEFloodElement::filterEffect):
        (WebCore::SVGFEFloodElement::build):
        * svg/SVGFEFloodElement.h:
        (WebCore::SVGFEFloodElement::contextElement):
        * svg/SVGFEGaussianBlurElement.cpp:
        (WebCore::SVGFEGaussianBlurElement::filterEffect):
        (WebCore::SVGFEGaussianBlurElement::build):
        * svg/SVGFEGaussianBlurElement.h:
        * svg/SVGFEImageElement.cpp:
        (WebCore::SVGFEImageElement::filterEffect):
        (WebCore::SVGFEImageElement::build):
        * svg/SVGFEImageElement.h:
        * svg/SVGFEMergeElement.cpp:
        (WebCore::SVGFEMergeElement::filterEffect):
        (WebCore::SVGFEMergeElement::build):
        * svg/SVGFEMergeElement.h:
        (WebCore::SVGFEMergeElement::contextElement):
        * svg/SVGFEOffsetElement.cpp:
        (WebCore::SVGFEOffsetElement::filterEffect):
        (WebCore::SVGFEOffsetElement::build):
        * svg/SVGFEOffsetElement.h:
        * svg/SVGFESpecularLightingElement.cpp:
        (WebCore::SVGFESpecularLightingElement::filterEffect):
        (WebCore::SVGFESpecularLightingElement::findLights):
        (WebCore::SVGFESpecularLightingElement::build):
        * svg/SVGFESpecularLightingElement.h:
        * svg/SVGFETileElement.cpp:
        (WebCore::SVGFETileElement::filterEffect):
        (WebCore::SVGFETileElement::build):
        * svg/SVGFETileElement.h:
        * svg/SVGFETurbulenceElement.cpp:
        (WebCore::SVGFETurbulenceElement::SVGFETurbulenceElement):
        (WebCore::SVGFETurbulenceElement::parseMappedAttribute):
        (WebCore::SVGFETurbulenceElement::filterEffect):
        (WebCore::SVGFETurbulenceElement::build):
        * svg/SVGFETurbulenceElement.h:
        * svg/SVGFilterPrimitiveStandardAttributes.h:
        * svg/graphics/filters/SVGFEConvolveMatrix.cpp:
        (WebCore::FEConvolveMatrix::FEConvolveMatrix):
        (WebCore::FEConvolveMatrix::create):
        (WebCore::FEConvolveMatrix::kernelSize):
        (WebCore::FEConvolveMatrix::setKernelSize):
        (WebCore::FEConvolveMatrix::kernel):
        (WebCore::FEConvolveMatrix::setKernel):
        (WebCore::FEConvolveMatrix::divisor):
        (WebCore::FEConvolveMatrix::setDivisor):
        (WebCore::FEConvolveMatrix::bias):
        (WebCore::FEConvolveMatrix::setBias):
        (WebCore::FEConvolveMatrix::targetOffset):
        (WebCore::FEConvolveMatrix::setTargetOffset):
        (WebCore::FEConvolveMatrix::edgeMode):
        (WebCore::FEConvolveMatrix::setEdgeMode):
        (WebCore::FEConvolveMatrix::kernelUnitLength):
        (WebCore::FEConvolveMatrix::setKernelUnitLength):
        (WebCore::FEConvolveMatrix::preserveAlpha):
        (WebCore::FEConvolveMatrix::setPreserveAlpha):
        (WebCore::FEConvolveMatrix::apply):
        (WebCore::FEConvolveMatrix::dump):
        (WebCore::operator<<):
        (WebCore::FEConvolveMatrix::externalRepresentation):
        * svg/graphics/filters/SVGFEConvolveMatrix.h:
        (WebCore::):
        * svg/graphics/filters/SVGFEDiffuseLighting.cpp:
        (WebCore::FEDiffuseLighting::FEDiffuseLighting):
        (WebCore::FEDiffuseLighting::create):
        (WebCore::FEDiffuseLighting::~FEDiffuseLighting):
        (WebCore::FEDiffuseLighting::lightingColor):
        (WebCore::FEDiffuseLighting::setLightingColor):
        (WebCore::FEDiffuseLighting::surfaceScale):
        (WebCore::FEDiffuseLighting::setSurfaceScale):
        (WebCore::FEDiffuseLighting::diffuseConstant):
        (WebCore::FEDiffuseLighting::setDiffuseConstant):
        (WebCore::FEDiffuseLighting::kernelUnitLengthX):
        (WebCore::FEDiffuseLighting::setKernelUnitLengthX):
        (WebCore::FEDiffuseLighting::kernelUnitLengthY):
        (WebCore::FEDiffuseLighting::setKernelUnitLengthY):
        (WebCore::FEDiffuseLighting::lightSource):
        (WebCore::FEDiffuseLighting::setLightSource):
        (WebCore::FEDiffuseLighting::apply):
        (WebCore::FEDiffuseLighting::dump):
        (WebCore::FEDiffuseLighting::externalRepresentation):
        * svg/graphics/filters/SVGFEDiffuseLighting.h:
        * svg/graphics/filters/SVGFEDisplacementMap.cpp:
        (WebCore::FEDisplacementMap::FEDisplacementMap):
        (WebCore::FEDisplacementMap::create):
        (WebCore::FEDisplacementMap::xChannelSelector):
        (WebCore::FEDisplacementMap::setXChannelSelector):
        (WebCore::FEDisplacementMap::yChannelSelector):
        (WebCore::FEDisplacementMap::setYChannelSelector):
        (WebCore::FEDisplacementMap::scale):
        (WebCore::FEDisplacementMap::setScale):
        (WebCore::FEDisplacementMap::apply):
        (WebCore::FEDisplacementMap::dump):
        (WebCore::operator<<):
        (WebCore::FEDisplacementMap::externalRepresentation):
        * svg/graphics/filters/SVGFEDisplacementMap.h:
        (WebCore::):
        * svg/graphics/filters/SVGFEFlood.cpp:
        (WebCore::FEFlood::FEFlood):
        (WebCore::FEFlood::create):
        (WebCore::FEFlood::floodColor):
        (WebCore::FEFlood::setFloodColor):
        (WebCore::FEFlood::floodOpacity):
        (WebCore::FEFlood::setFloodOpacity):
        (WebCore::FEFlood::apply):
        (WebCore::FEFlood::dump):
        (WebCore::FEFlood::externalRepresentation):
        * svg/graphics/filters/SVGFEFlood.h:
        * svg/graphics/filters/SVGFEGaussianBlur.cpp:
        (WebCore::FEGaussianBlur::FEGaussianBlur):
        (WebCore::FEGaussianBlur::create):
        (WebCore::FEGaussianBlur::stdDeviationX):
        (WebCore::FEGaussianBlur::setStdDeviationX):
        (WebCore::FEGaussianBlur::stdDeviationY):
        (WebCore::FEGaussianBlur::setStdDeviationY):
        (WebCore::FEGaussianBlur::apply):
        (WebCore::FEGaussianBlur::dump):
        (WebCore::FEGaussianBlur::externalRepresentation):
        * svg/graphics/filters/SVGFEGaussianBlur.h:
        * svg/graphics/filters/SVGFEImage.cpp:
        (WebCore::FEImage::FEImage):
        (WebCore::FEImage::create):
        (WebCore::FEImage::~FEImage):
        (WebCore::FEImage::cachedImage):
        (WebCore::FEImage::apply):
        (WebCore::FEImage::dump):
        (WebCore::FEImage::externalRepresentation):
        * svg/graphics/filters/SVGFEImage.h:
        * svg/graphics/filters/SVGFEMerge.cpp:
        (WebCore::FEMerge::FEMerge):
        (WebCore::FEMerge::create):
        (WebCore::FEMerge::mergeInputs):
        (WebCore::FEMerge::setMergeInputs):
        (WebCore::FEMerge::apply):
        (WebCore::FEMerge::dump):
        (WebCore::FEMerge::externalRepresentation):
        * svg/graphics/filters/SVGFEMerge.h:
        * svg/graphics/filters/SVGFEMorphology.cpp:
        (WebCore::FEMorphology::FEMorphology):
        (WebCore::FEMorphology::create):
        (WebCore::FEMorphology::morphologyOperator):
        (WebCore::FEMorphology::setMorphologyOperator):
        (WebCore::FEMorphology::radiusX):
        (WebCore::FEMorphology::setRadiusX):
        (WebCore::FEMorphology::radiusY):
        (WebCore::FEMorphology::setRadiusY):
        (WebCore::FEMorphology::apply):
        (WebCore::FEMorphology::dump):
        (WebCore::operator<<):
        (WebCore::FEMorphology::externalRepresentation):
        * svg/graphics/filters/SVGFEMorphology.h:
        (WebCore::):
        * svg/graphics/filters/SVGFEOffset.cpp:
        (WebCore::FEOffset::FEOffset):
        (WebCore::FEOffset::create):
        (WebCore::FEOffset::dx):
        (WebCore::FEOffset::setDx):
        (WebCore::FEOffset::dy):
        (WebCore::FEOffset::setDy):
        (WebCore::FEOffset::apply):
        (WebCore::FEOffset::dump):
        (WebCore::FEOffset::externalRepresentation):
        * svg/graphics/filters/SVGFEOffset.h:
        * svg/graphics/filters/SVGFESpecularLighting.cpp:
        (WebCore::FESpecularLighting::FESpecularLighting):
        (WebCore::FESpecularLighting::create):
        (WebCore::FESpecularLighting::~FESpecularLighting):
        (WebCore::FESpecularLighting::lightingColor):
        (WebCore::FESpecularLighting::setLightingColor):
        (WebCore::FESpecularLighting::surfaceScale):
        (WebCore::FESpecularLighting::setSurfaceScale):
        (WebCore::FESpecularLighting::specularConstant):
        (WebCore::FESpecularLighting::setSpecularConstant):
        (WebCore::FESpecularLighting::specularExponent):
        (WebCore::FESpecularLighting::setSpecularExponent):
        (WebCore::FESpecularLighting::kernelUnitLengthX):
        (WebCore::FESpecularLighting::setKernelUnitLengthX):
        (WebCore::FESpecularLighting::kernelUnitLengthY):
        (WebCore::FESpecularLighting::setKernelUnitLengthY):
        (WebCore::FESpecularLighting::lightSource):
        (WebCore::FESpecularLighting::setLightSource):
        (WebCore::FESpecularLighting::apply):
        (WebCore::FESpecularLighting::dump):
        (WebCore::FESpecularLighting::externalRepresentation):
        * svg/graphics/filters/SVGFESpecularLighting.h:
        * svg/graphics/filters/SVGFETile.cpp:
        (WebCore::FETile::FETile):
        (WebCore::FETile::create):
        (WebCore::FETile::apply):
        (WebCore::FETile::dump):
        (WebCore::FETile::externalRepresentation):
        * svg/graphics/filters/SVGFETile.h:
        * svg/graphics/filters/SVGFETurbulence.cpp:
        (WebCore::FETurbulence::FETurbulence):
        (WebCore::FETurbulence::create):
        (WebCore::FETurbulence::type):
        (WebCore::FETurbulence::setType):
        (WebCore::FETurbulence::baseFrequencyY):
        (WebCore::FETurbulence::setBaseFrequencyY):
        (WebCore::FETurbulence::baseFrequencyX):
        (WebCore::FETurbulence::setBaseFrequencyX):
        (WebCore::FETurbulence::seed):
        (WebCore::FETurbulence::setSeed):
        (WebCore::FETurbulence::numOctaves):
        (WebCore::FETurbulence::setNumOctaves):
        (WebCore::FETurbulence::stitchTiles):
        (WebCore::FETurbulence::setStitchTiles):
        (WebCore::FETurbulence::apply):
        (WebCore::FETurbulence::dump):
        (WebCore::operator<<):
        (WebCore::FETurbulence::externalRepresentation):
        * svg/graphics/filters/SVGFETurbulence.h:
        (WebCore::):
        * 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:
        (WebCore::getVectorForChannel):
        * 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:

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

        Reviewed by Geoff Garen.

        Don't warn about deprecated functions in production builds.

        * Configurations/Base.xcconfig:
        * Configurations/DebugRelease.xcconfig:

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

        Reviewed by Darin

        <rdar://problem/5823684> - Crash manipulating frame tree of a new frame before the new frame
        has been installed in a frame tree.

        The root of this problem was that calling init() on a new frame could end up calling arbitrary
        javascript that might end up removing the frame from the tree.  This opened up a small can of worms
        such as the frame not having yet been installed in its frame tree, and other assumed behavior while
        destroying the frame.

        Test: fast/loader/frame-creation-removal.html

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::endIfNotLoadingMainResource):  If the frame doesn't have a page, don't close up
          the document and parser because they don't exist, and this frame is on its way out.
        (WebCore::FrameLoader::finishedParsing):  We can't rely on the refCount check to discover "am I being deleted?"
          because we no longer store refCounts of 0.  The new check is "do I have a FrameView?" while will always be
          false if the Frame is being destroyed.

2008-07-09  Dean Jackson  <dino@apple.com>

        Changed to use the correct license in header comment (via Darin)

        * css/WebKitCSSTransformValue.idl:

2008-07-09  Dean Jackson  <dino@apple.com>

        Add DOM interface for WebKitCSSTransformValue.
        https://bugs.webkit.org/show_bug.cgi?id=19863

        Reviewed by Hyatt.

        * bindings/objc/DOMInternal.h:
        * css/WebKitCSSTransformValue.idl: Added.

        * bindings/scripts/CodeGeneratorObjC.pm:
            make sure new class inherits from CSSValue not Node

        * DerivedSources.make:
        * GNUmakefile.am:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * WebCoreSources.bkl:
            Adding new generated files

2008-07-09  Maxime Britto  <britto@apple.com>

        Reviewed by Adele.

        http://bugs.webkit.org/show_bug.cgi?id=14227
        Add the middle click panning feature to the windows release.
        Details on almost each method below.
        Manual test is included in the patch.

        * ChangeLog:
        * WebCore.vcproj/WebCore.vcproj:
        * manual-tests/panScroll.html: Added.
        * manual-tests/resources/big-page.html: Added.
        * page/EventHandler.cpp: Added the panScroll start/stop handlers and adapted the autoscroll for both to share some functions.
        (WebCore::EventHandler::EventHandler): Initialize the new class members for the panScroll
        (WebCore::EventHandler::handleMouseDraggedEvent): Prevent the autoscroll to trigger if the panScroll is in progress
        (WebCore::EventHandler::handleMouseReleaseEvent): Prevent the autoscroll to stop the panScroll on mouse release
        (WebCore::EventHandler::handleAutoscroll): Added the specific calls for the panScroll (save mouse position, draw the panScroll icon) to the shared code
        (WebCore::EventHandler::autoscrollTimerFired): Specify the calls to perform for each function (autoscroll and panScroll)
        (WebCore::EventHandler::stopAutoscrollTimer): Specify the calls to perform for each function (autoscroll and panScroll)
        (WebCore::EventHandler::handleMousePressEvent): Trigger for the panScroll. Test is the button is the middle button and try to find a renderer where the panScroll is possible. If it finds one, it calls the handleAutoscroll method.
        * page/EventHandler.h:
        (WebCore::EventHandler::panScrollInProgress): Getter used by the sub frames's EventHandler to notice the main frame EventHandler
        (WebCore::EventHandler::setPanScrollInProgress): Setter used by the sub frames's EventHandler to notice the main frame EventHandler
        * platform/ScrollView.h: Added a method used by the RenderObject to test if the view can be scrolled. Added the print/remove panScroll icon methods between the windows platform flags
        * platform/gtk/ScrollViewGtk.cpp:
        (WebCore::ScrollView::isScrollable): Not implemented : returns true
        * platform/mac/ScrollViewMac.mm: Implemented because it was useful for the autoscroll feature.
        (WebCore::ScrollView::isScrollable):
        * platform/qt/ScrollViewQt.cpp:
        (WebCore::ScrollView::isScrollable): Not implemented : returns true
        * platform/win/ScrollViewWin.cpp:
        (WebCore::ScrollView::ScrollViewPrivate::ScrollViewPrivate): Added a boolean and an IntPoint to draw the icon.
        (WebCore::ScrollView::ScrollViewPrivate::scrollBackingStore): If the icon must be drawn, define the rect to invalidate to erase the previous icon and to display the new one.
        (WebCore::ScrollView::updateContents): I split this method to be able to invalidate a rect with window coordinates instead of contents coordinates. This function now converts the contents coord in window coord and calls the new updateWindowRect() method  
        (WebCore::ScrollView::updateWindowRect): New method which performs the work that was doing the end of the old updateContents : invalidate a rect with window coordinates
        (WebCore::ScrollView::isScrollable): checks is the view has scrollbars
        (WebCore::ScrollView::printPanScrollIcon): sets the boolean and the IntPoint for the icon. Invalidate his rect and ask for repaint.
        (WebCore::ScrollView::removePanScrollIcon): sets the boolean to false. Invalidate his rect and ask for repaint.
        (WebCore::ScrollView::paint): Modified to draw the icon if needed.
        * platform/wx/ScrollViewWx.cpp:
        (WebCore::ScrollView::isScrollable): Not implemented : returns true
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::panScrollFromPoint): Receives the Middle click location and retrieves the currentMouse position from the EventHandler. With these informations it computes the direction to scroll to and the speed then calls for the final scroll.
        * rendering/RenderLayer.h:
        * rendering/RenderListBox.cpp: Adapt the panScroll to the ListBox object to scroll by lines instead of pixels
        (WebCore::RenderListBox::panScroll):
        (WebCore::RenderListBox::scrollToward):
        (WebCore::RenderListBox::autoscroll):
        * rendering/RenderListBox.h:
        (WebCore::RenderListBox::shouldPanScroll):
        * rendering/RenderObject.cpp: 
        (WebCore::RenderObject::shouldAutoscroll): Improved the verification to avoid triggering the autoscroll/panScroll when the root object can't scroll
        (WebCore::RenderObject::panScroll): Calls the RenderLayer's panScrollFromPoint() method
        * rendering/RenderObject.h:
        (WebCore::RenderObject::stopPanScroll): 

2008-07-09  Dean Jackson  <dino@apple.com>

        Rename CSSTransformValue to WebKitCSSTransformValue as it is non-standard for
        the moment. Also, WebKitCSSTransformValue is a CSSValueList (comma sep)
        https://bugs.webkit.org/show_bug.cgi?id=19861

        Reviewed by Hyatt

        * css/CSSParser.cpp:
        * css/CSSStyleSelector.cpp:
        * css/CSSTransformValue.cpp: Removed.
        * css/CSSTransformValue.h: Removed.
        * css/CSSValueList.h:
        * css/WebKitCSSTransformValue.cpp: Added.
        * css/WebKitCSSTransformValue.h: Added.

        * GNUmakefile.am:
        * WebCore.order:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * WebCoreSources.bkl:
            updated for new file names
        

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

        Switch transitions back to a "destination" model as far as choosing which transitions should apply on a style
        change.  Preserve the behavior of allowing stale transitions (in the absence of property changes) to run to
        completion.

        Reviewed by Dean

        * manual-tests/transitions.html:
        * manual-tests/transitions2.html:
        * page/AnimationController.cpp:
        (WebCore::ImplicitAnimation::reset):
        (WebCore::CompositeImplicitAnimation::animate):
        (WebCore::AnimationControllerPrivate::get):
        (WebCore::AnimationController::updateImplicitAnimations):

2008-07-09  Michelangelo De Simone  <m.des@mac.com>

        Reviewed by Adele.

        Added the virtual function Node::isTextControl() in order to simplify text field and textarea checks.

        * css/CSSStyleSelector.cpp: (WebCore::CSSStyleSelector::SelectorChecker::checkOneSelector):
        Clean up in PseudoReadOnly and PseudoReadWrite cases removing unnecessary checks and casts in favor of the sole isTextControl() check.
        * dom/Node.h: Added base isTextControl().
        * html/HTMLInputElement.h: Added isTextControl() which wraps HTMLInputElement::isTextField().
        * html/HTMLTextAreaElement.h: Added isTextControl().

2008-07-09  Rob Buis  <buis@kde.org>

        Reviewed by Eric.

        https://bugs.webkit.org/show_bug.cgi?id=15431
        SVGRenderStyle should store pre-modified resource URIs

        Store pre-modified resource URIs to decrease string
        operations during layout/rendering.

        * css/SVGCSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::applySVGProperty):
        * rendering/RenderPath.cpp:
        (WebCore::RenderPath::absoluteClippedOverflowRect):
        (WebCore::RenderPath::drawMarkersIfNeeded):
        * rendering/RenderSVGContainer.cpp:
        (WebCore::RenderSVGContainer::selfWillPaint):
        (WebCore::RenderSVGContainer::absoluteClippedOverflowRect):
        * rendering/RenderSVGImage.cpp:
        (WebCore::RenderSVGImage::calculateAbsoluteBounds):
        * rendering/RenderSVGRoot.cpp:
        (WebCore::RenderSVGRoot::paint):
        (WebCore::RenderSVGRoot::absoluteClippedOverflowRect):
        * rendering/RenderSVGText.cpp:
        (WebCore::RenderSVGText::absoluteClippedOverflowRect):
        * rendering/SVGRenderSupport.cpp:
        (WebCore::prepareToRenderSVGContent):

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

        Reviewed by Mitz.

        Remove an unused instance variable.

        * loader/DocumentLoader.h:

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

        Reviewed by Anders Carlsson.

        - remove unused #includes

        * dom/XMLTokenizer.cpp:
        * html/PreloadScanner.cpp:
        * loader/CachedCSSStyleSheet.cpp:
        * loader/CachedScript.cpp:
        * loader/CachedXBLDocument.cpp:
        * loader/CachedXSLStyleSheet.cpp:
        * page/mac/FrameMac.mm:
        * xml/XSLTProcessor.cpp:

2008-07-08  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Oliver Hunt.
        
        Only artificially mark JS DOM wrappers if they have custom properties.
        
        21X speedup on http://nerget.com/jstests/dom-mandelbrot.html.
        
        No, that is not a typo.

        * bindings/js/JSDOMBinding.cpp:
        (WebCore::ScriptInterpreter::markDOMNodesForDocument):

2008-07-08  Kevin Watters  <kevinwatters@gmail.com>

        Reviewed by Kevin Ollivier.

        Fix to previous patch for handling mouse up events.
        
        https://bugs.webkit.org/show_bug.cgi?id=18464

        * platform/wx/MouseEventWx.cpp:
        (WebCore::PlatformMouseEvent::PlatformMouseEvent):

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

        Reviewed by Brady Eidson.

        - initialize the Archives log channel's state

        * platform/mac/LoggingMac.mm:
        (WebCore::InitializeLoggingChannelsIfNecessary):

2008-07-08  Kevin McCullough  <kmccullough@apple.com>

        Added manual test for the new heavy view.

        * manual-tests/inspector/profiler-test-heavy-view.html: Added.

2008-07-08  Darin Adler  <darin@apple.com>

        Reviewed by Mitz.

        - fix <rdar://problem/6043731> REGRESSION (3-4): RedEnvelope.com
          looks wrong due to OpenCube QuickMenu appVersion check

        * page/Navigator.cpp:
        (WebCore::shouldHideFourDot): Add dqm_loader.js as another filename.

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

        Reviewed by John Sullivan.

        - WebCore part of <rdar://problem/6008409> Need a way to disable updates in offscreen views

        Added a setting, updatesWhenOffscreen(), which controls whether an
        offscreen web view gets marked as needing update when its contents
        change (the existing behavior) or not (a new behavior), in which case it
        will be marked as needing update just before it goes on screen. The
        existing behavior (updating while offscreen) remains the default.

        * WebCore.base.exp: Added Settings::setUpdatesWhenOffscreen().
        * page/FrameView.cpp:
        (WebCore::FrameView::shouldUpdateWhenOffscreen): Added. Returns the
        value from settings.
        * page/FrameView.h:
        * page/Settings.cpp:
        (WebCore::Settings::setUpdatesWhenOffscreen): Added.
        * page/Settings.h:
        (WebCore::Settings::updatesWhenOffscreen): Added.
        * platform/ScrollView.h:
        * platform/mac/ScrollViewMac.mm:
        (WebCore::ScrollView::updateContents): Added code to return early and
        not call -setNeedsDisplayInRect: if the view is not in a visible window
        and the setting is not to update when offscreen.

2008-07-08  Simon Hausmann  <hausmann@webkit.org>

        Fix the build with enabled SVG filters.

        * svg/SVGFESpecularLightingElement.cpp: The last argument to
        ANIMATED_PROPERTY_DEFINITIONS has to be full class name, including
        the attr suffix.

2008-07-07  Sam Weinig  <sam@webkit.org>

        Reviewed by Anders Carlsson.

        Remove extraneous null check.

        * dom/Node.cpp:
        (WebCore::Node::querySelector):
        (WebCore::Node::querySelectorAll):

2008-07-07  Sam Weinig  <sam@webkit.org>

        Reviewed by Anders Carlsson.

        Fix for https://bugs.webkit.org/show_bug.cgi?id=19928
        Use of CSS3 Namespaces syntax in Selectors API should throw an exception

        - Throw an NAMESPACE_ERR exception if a non-null or "*" namespace is
          used in a selector passed to querySelector or querySelectorAll.

        Test: fast/dom/SelectorAPI/not-supported-namespace-in-selector.html

        * dom/Node.cpp:
        (WebCore::selectorNeedsNamespaceResolution):
        (WebCore::Node::querySelector):
        (WebCore::Node::querySelectorAll):

2008-07-07  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Darin.

        Fix for https://bugs.webkit.org/show_bug.cgi?id=19933
        nodeIterator with filter fails on documents not in a frame

        Tests: traversal/node-iterator-009.html
               traversal/tree-walker-006.html

        * bindings/js/JSNodeFilterCondition.cpp:
        * bindings/js/JSNodeFilterCondition.h:
        * bindings/js/JSNodeFilterCustom.cpp:
        * bindings/js/JSNodeIteratorCustom.cpp:
        * bindings/js/JSTreeWalkerCustom.cpp:
        * bindings/objc/DOM.mm:
        * dom/NodeFilter.cpp:
        * dom/NodeFilter.h:
        * dom/NodeFilterCondition.cpp:
        * dom/NodeFilterCondition.h:
        * dom/NodeIterator.cpp:
        * dom/NodeIterator.h:
        * dom/Traversal.cpp:
        * dom/Traversal.h:
        * dom/TreeWalker.cpp:
        * dom/TreeWalker.h:

2008-07-07  Adele Peterson  <adele@apple.com>

        Reviewed by Dan Bernstein.

        Fix for https://bugs.webkit.org/show_bug.cgi?id=19924
        <rdar://problem/6057160> Disabled file input element updates its displayed file info when a file is dropped from the Finder.

        * page/DragController.cpp: (WebCore::DragController::concludeDrag):
        Check that the file control is enabled before taking dropped files.

2008-07-07  Adele Peterson  <adele@apple.com>

        Reviewed by Beth.

        Fix for <rdar://problem/5860507> <AUDIO> playback noticeably more quiet than QuickTime

        Change default volume setting to 1.0.

        * html/HTMLMediaElement.cpp: (WebCore::HTMLMediaElement::HTMLMediaElement):
        * platform/graphics/MediaPlayer.cpp: (WebCore::MediaPlayer::MediaPlayer):

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

        Reviewed by Mark Rowe.

        - fix <rdar://problem/6020441> REGRESSION: Layers on NWA.com render ugly

        The old version of the OpenCube QuickMenu library used on this site still has code
        that detects Netscape 4 by checking appVersion to see if it has the substring "4."
        in it. We decided to special-case the filename of the script and tweak the appVersion
        for files with that name.

        * bindings/js/ScriptController.cpp:
        (WebCore::ScriptController::ScriptController): Replace m_processingInlineCode with
        m_sourceURL. Use false instead of 0 to initialize a boolean.
        (WebCore::ScriptController::evaluate): Call argument sourceURL, not filename.
        Store current sourceURL in m_sourceURL. This fixes a mistake in the code that
        maintained the value of m_processingInlineCode, since the old code set it to
        false rather than restoring it. Renamed a local variable named sourceURL to
        exceptionSourceURL for clarity.
        (WebCore::ScriptController::processingUserGesture): Code that formerly used
        m_processingInlineCode to detect that it was evaluating code with no URL now
        uses m_sourceURL to do the same check.

        * bindings/js/ScriptController.h: Renamed filename argument to sourceURL; it has always
        been a URL, not a file path. Added a public sourceURL function and m_sourceURL and
        removed m_processingInlineCode.

        * page/Navigator.cpp:
        (WebCore::shouldHideFourDot): Added. Returns true if the currently running script has
        a source URL ending in "/dqm_script.js" and if the settings say we should do
        site-specific quirks (really JavaScript-library-specific in this case).
        (WebCore::Navigator::appVersion): Replace "4." with "4_" if shouldHideFourDot is true.

2008-07-07  Cameron Zwarich  <cwzwarich@uwaterloo.ca>

        Reviewed by Geoff.

        Bug 19907: REGRESSION(r34824-r34941): Reproducible crash trying to log in to MediaTemple.net Account Center
        <https://bugs.webkit.org/show_bug.cgi?id=19907>

        Clear exceptions set on ExecStates before returning from NPAPI
        callbacks, in order to avoid causing problems for the next script that
        executes.

        While fixing this bug, the question was raised of whether we are
        correctly propagating exception information back to the caller:

        Bug 19936: Correctly propagate exception information from NPAPI callbacks
        <https://bugs.webkit.org/show_bug.cgi?id=19936>

        * bridge/NP_jsobject.cpp:
        (_NPN_InvokeDefault):
        (_NPN_Invoke):
        (_NPN_Evaluate):
        (_NPN_GetProperty):
        (_NPN_SetProperty):
        (_NPN_RemoveProperty):
        (_NPN_HasProperty):
        (_NPN_HasMethod):
        (_NPN_Enumerate):

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

        Reviewed by Darin Adler.

        - fix <rdar://problem/6057650> REGRESSION (r35025): Crash beneath FontCache::invalidate() when activating Safari with no windows open

        * css/CSSFontFaceSource.cpp:
        (WebCore::CSSFontFaceSource::getFontData): Added a null check because
        docLoader() can return 0 now.
        * css/CSSFontSelector.cpp:
        (WebCore::CSSFontSelector::docLoader): Added a null check of m_document.
        (WebCore::CSSFontSelector::addFontFaceRule): Ditto.
        (WebCore::CSSFontSelector::fontLoaded): Ditto.
        (WebCore::CSSFontSelector::fontCacheInvalidated): Ditto.
        (WebCore::fontDataForGenericFamily): Added a null check of document.
        * css/CSSFontSelector.h:
        (WebCore::CSSFontSelector::clearDocument): Added.
        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::~CSSStyleSelector): Added a call to
        CSSFontSelector::clearDocument(). When the style selector is destroyed,
        there is no guarantee that the document will continue to exist.

2008-07-07  Julien Chaffraix  <jchaffraix@webkit.org>

        Not reviewed.

        No svg build fix.

        * DerivedSources.make: Add JSSVGElementWrapperFactory.cpp target.
        * svg/animation/SMILTimeContainer.cpp: Add ENABLE(SVG) guard.

2008-07-07  Michelangelo De Simone  <m.des@mac.com>

        Reviewed by Adele.

        Support for CSS3 :read-only and :read-write pseudoclasses for readonly text controls.

        URL: http://www.w3.org/TR/web-forms-2/#relation

        Tests: fast/css/readonly-pseudoclass-opera-001.html
               fast/css/readonly-pseudoclass-opera-002.html
               fast/css/readonly-pseudoclass-opera-003.html
               fast/css/readonly-pseudoclass-opera-004.html
               fast/css/readonly-pseudoclass-opera-005.html

        * css/CSSSelector.cpp: (WebCore::CSSSelector::extractPseudoType):
        Added "read-only" and "read-write" values for PseudoType extraction.
        * css/CSSSelector.h: (WebCore::CSSSelector::):
        Added PseudoReadOnly and PseudoReadWrite entries in PseudoType enum.
        * css/CSSStyleSelector.cpp: (WebCore::CSSStyleSelector::SelectorChecker::checkOneSelector):
        Checks to determine whether to match :read-only and :read-write pseudoclasses on
        text controls.

2008-07-07  Sam Weinig  <sam@webkit.org>

        Reviewed by Geoffrey Garen.

        Fix for https://bugs.webkit.org/show_bug.cgi?id=19928
        querySelectorAll should throw an exception if a NSResolver is passed in.

        - Throw an NOT_SUPPORTED_ERR if a non-null or undefined parameter is passed
          as the second argument to querySelector or querySelectorAll.

        Test: fast/dom/SelectorAPI/not-supported-NSResolver.html

        * bindings/js/JSDocumentCustom.cpp:
        (WebCore::JSDocument::querySelector):
        (WebCore::JSDocument::querySelectorAll):
        * bindings/js/JSElementCustom.cpp:
        (WebCore::JSElement::querySelector):
        (WebCore::JSElement::querySelectorAll):
        * dom/Document.idl:
        * dom/Element.idl:

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

        Reviewed by Mitz and Geoff

        Test: fast/loader/empty-ref-versus-no-ref.html

        Fix for https://bugs.webkit.org/show_bug.cgi?id=18951 and <rdar://problem/5921760>
        "all DOM operations stop working when location.hash set to '#'"

        The underlying problem is that KURL didn't really know the difference between "empty ref"
        and "no ref at all" when changing the ref.  So changing to the empty ref in JS ended up 
        affecting removal of the ref, which ended up causing an infinite load load, also killing
        javascript.

        * platform/KURL.cpp:
        (WebCore::KURL::setRef):  Changed "isEmpty()" to "isNull()", since NULL has the special 
          meaning of "no ref at all" while empty means "empty ref"

2008-07-07  Kevin McCullough  <kmccullough@apple.com>

        Reviewed by Darin.

        Because profiler.h no longer #includes profile.h we need to explicitly
        include it in console.cpp.

        * page/Console.cpp:

2008-07-07  Nikolas Zimmermann  <zimmermann@kde.org>

        Not reviewed. Build fix.

        Fix --svg-filters build (affects Qt build, mac/win don't have it on by default)

        * svg/SVGFEColorMatrixElement.cpp:
        * svg/SVGFEDiffuseLightingElement.cpp:
        * svg/SVGFEImageElement.cpp:
        * svg/SVGFELightElement.cpp:
        * svg/SVGFESpecularLightingElement.cpp:

2008-07-07  Nikolas Zimmermann  <zimmermann@kde.org>

        Reviewed by Antti.

        Fixes: http://bugs.webkit.org/show_bug.cgi?id=17779 (SVG 1.1 Errata demands "SVG JavaScript Liveness" support)

        Revised version of the patch, not using pointer-to-member function callbacks anymore - after discussion with Adam Roben.
        Remove unneccessary parameters of all macros.

        SVG Errata states: "All SVG DOM objects that directly correspond to an
        attribute, e.g. the SVGAnimatedLength 'ry' in an SVGRectElement, are live. This
        means that any changes made to the attribute are immediately reflected in the
        corresponding SVG DOM object." (see linked URL on bug report)

        Until now only XML -> SVG DOM changes took affect, aka. changing the 'rx' attribute of a <rect>
        element resuted in changes when accessing 'rx' through SVG DOM (rx.baseVal.value).

        Add a new synchronization layer to handle SVG DOM -> XML changes.

        Added test: svg/custom/svg-xml-dom-sync.html
        Fixed test: svg/hixie/dynamic/005-broken.xml (renamed to 005.xml)

        * dom/Element.cpp:
        (WebCore::Element::Element): Initialize the two new bits.
        (WebCore::Element::attributes): Add hooks to call into SVG attribute synchronization code, wrapped in ENABLE(SVG) blocks.
        (WebCore::Element::getAttribute): Ditto.
        (WebCore::Element::hasAttributes): Ditto.
        * dom/Element.h: Add two bits: m_areSVGAttributesValid/m_synchronizingSVGAttributes, to track synchronization status.
        (WebCore::Element::updateAnimatedSVGAttribute): New virtual function, handling the synronication, similar to updateStyleAttribute.
        * dom/NamedAttrMap.h: Make addAttribute/removeAttribute protected, from use within the ANIMATED_* macros.
        * svg/SVGAElement.cpp:
        * svg/SVGAElement.h:
        * svg/SVGAnimatedTemplate.h:
        (WebCore::lookupOrCreateWrapper): Take new AnimatedPropertySynchronizer callback as parameter, and associate it with the wrappers.
        * svg/SVGCircleElement.cpp:
        (WebCore::SVGCircleElement::SVGCircleElement):
        * svg/SVGCircleElement.h:
        * svg/SVGClipPathElement.cpp:
        * svg/SVGClipPathElement.h:
        * svg/SVGComponentTransferFunctionElement.cpp:
        * svg/SVGComponentTransferFunctionElement.h:
        * svg/SVGCursorElement.cpp:
        (WebCore::SVGCursorElement::SVGCursorElement):
        * svg/SVGCursorElement.h:
        * svg/SVGElement.cpp:
        (WebCore::SVGElement::updateAnimatedSVGAttribute): Override virtual function from Element, to handle SVG<->XML DOM synchronization.
        (WebCore::SVGElement::setSynchronizedSVGAttributes):
        * svg/SVGElement.h:
        (WebCore::SVGElement::invokeSVGPropertySynchronizer):
        (WebCore::SVGElement::invokeAllSVGPropertySynchronizers):
        (WebCore::SVGElement::addSVGPropertySynchronizer):
        * svg/SVGEllipseElement.cpp:
        * svg/SVGEllipseElement.h:
        * svg/SVGExternalResourcesRequired.cpp:
        * svg/SVGExternalResourcesRequired.h:
        * svg/SVGFEBlendElement.cpp:
        * svg/SVGFEBlendElement.h:
        * svg/SVGFEColorMatrixElement.cpp:
        * svg/SVGFEColorMatrixElement.h:
        * svg/SVGFEComponentTransferElement.cpp:
        * svg/SVGFEComponentTransferElement.h:
        * svg/SVGFECompositeElement.cpp:
        * svg/SVGFECompositeElement.h:
        * svg/SVGFEDiffuseLightingElement.cpp:
        * svg/SVGFEDiffuseLightingElement.h:
        * svg/SVGFEDisplacementMapElement.cpp:
        * svg/SVGFEDisplacementMapElement.h:
        * svg/SVGFEGaussianBlurElement.cpp:
        * svg/SVGFEGaussianBlurElement.h:
        * svg/SVGFEImageElement.cpp:
        * svg/SVGFEImageElement.h:
        * svg/SVGFELightElement.cpp:
        * svg/SVGFELightElement.h:
        * svg/SVGFEMergeNodeElement.cpp:
        * svg/SVGFEMergeNodeElement.h:
        * svg/SVGFEOffsetElement.cpp:
        * svg/SVGFEOffsetElement.h:
        * svg/SVGFESpecularLightingElement.cpp:
        * svg/SVGFESpecularLightingElement.h:
        * svg/SVGFETileElement.cpp:
        * svg/SVGFETileElement.h:
        * svg/SVGFETurbulenceElement.cpp:
        * svg/SVGFETurbulenceElement.h:
        * svg/SVGFilterElement.cpp:
        * svg/SVGFilterElement.h:
        * svg/SVGFilterPrimitiveStandardAttributes.cpp:
        * svg/SVGFilterPrimitiveStandardAttributes.h:
        * svg/SVGFitToViewBox.cpp:
        * svg/SVGFitToViewBox.h:
        * svg/SVGForeignObjectElement.cpp:
        * svg/SVGForeignObjectElement.h:
        * svg/SVGGradientElement.cpp:
        * svg/SVGGradientElement.h:
        * svg/SVGImageElement.cpp:
        * svg/SVGImageElement.h:
        * svg/SVGLineElement.cpp:
        * svg/SVGLineElement.h:
        * svg/SVGLinearGradientElement.cpp:
        * svg/SVGLinearGradientElement.h:
        * svg/SVGMarkerElement.cpp:
        * svg/SVGMarkerElement.h:
        * svg/SVGMaskElement.cpp:
        * svg/SVGMaskElement.h:
        * svg/SVGPathElement.cpp:
        * svg/SVGPathElement.h:
        * svg/SVGPatternElement.cpp:
        * svg/SVGPatternElement.h:
        * svg/SVGRadialGradientElement.cpp:
        * svg/SVGRadialGradientElement.h:
        * svg/SVGRectElement.cpp:
        * svg/SVGRectElement.h:
        * svg/SVGSVGElement.cpp:
        * svg/SVGSVGElement.h:
        * svg/SVGScriptElement.h:
        * svg/SVGStopElement.cpp:
        * svg/SVGStopElement.h:
        * svg/SVGStyledElement.cpp:
        * svg/SVGStyledElement.h:
        * svg/SVGStyledTransformableElement.cpp:
        * svg/SVGStyledTransformableElement.h:
        * svg/SVGSymbolElement.h:
        * svg/SVGTextContentElement.cpp:
        * svg/SVGTextContentElement.h:
        * svg/SVGTextElement.cpp:
        * svg/SVGTextElement.h:
        * svg/SVGTextPathElement.cpp:
        * svg/SVGTextPathElement.h:
        * svg/SVGTextPositioningElement.cpp:
        * svg/SVGTextPositioningElement.h:
        * svg/SVGURIReference.cpp:
        * svg/SVGURIReference.h:
        * svg/SVGUseElement.cpp:
        * svg/SVGUseElement.h:
        * svg/SVGViewElement.h:
        * svg/SynchronizableTypeWrapper.h: Added.

2008-07-07  Nikolas Zimmermann  <zimmermann@kde.org>

        Reviewed by Oliver.

        Working on: http://bugs.webkit.org/show_bug.cgi?id=17779 (SVG 1.1 Errata demands "SVG JavaScript Liveness" support)

        Splitting up large patch in small chunk: Land valueAsString() implementation on it's own.

        Added valueAsString() conversion for all SVG primitive types, needed by the SVG<->XML synchronization layer.
        Unify "null value for a SVG animated type" concept, which was implemented in SVGDocumentExtensions before,
        in SVGAnimatedTemplate.

        * svg/SVGAnimatedTemplate.h:
        (WebCore::SVGAnimatedTemplate::associatedAttributeName):
        (WebCore::lookupOrCreateWrapper):
        (WebCore::SVGAnimatedTypeValue::null):
        (WebCore::SVGAnimatedTypeValue::toString):
        (WebCore::):
        * svg/SVGDocumentExtensions.h:
        (WebCore::SVGDocumentExtensions::baseValue):
        * svg/SVGLengthList.cpp:
        (WebCore::SVGLengthList::valueAsString):
        * svg/SVGLengthList.h:
        * svg/SVGNumberList.cpp:
        (WebCore::SVGNumberList::valueAsString):
        * svg/SVGNumberList.h:
        * svg/SVGPreserveAspectRatio.cpp:
        (WebCore::SVGPreserveAspectRatio::valueAsString):
        * svg/SVGPreserveAspectRatio.h:
        * svg/SVGTransformList.cpp:
        (SVGTransformList::valueAsString):
        * svg/SVGTransformList.h:

2008-07-06  Sam Weinig  <sam@webkit.org>

        Reviewed by Dan Bernstein.

        Rename "Access-Contol-Origin" to "Origin" to match the latest
        Access Control for Cross-Site Request draft. (Editor's Draft 25 May 2008)

        * xml/XMLHttpRequest.cpp:
        (WebCore::XMLHttpRequest::makeSimpleCrossSiteAccessRequest):
        (WebCore::XMLHttpRequest::makeCrossSiteAccessRequestWithPreflight):
        (WebCore::XMLHttpRequest::handleAsynchronousPreflightResult):

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

        - try to fix the Windows build

        * WebCore.vcproj/WebCore.vcproj:

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

        - add missing brace

        * platform/graphics/qt/FontCacheQt.cpp:

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

        - try to fix the Qt build

        * platform/graphics/qt/FontCacheQt.cpp:
        (WebCore::FontCache::addClient):
        (WebCore::FontCache::removeClient):

2008-07-06  Sam Weinig  <sam@webkit.org>

        Reviewed by Cameron Zwarich.

        Add #include for kjs/protect.h.

        * xml/XMLHttpRequest.cpp:
        (WebCore::XMLHttpRequest::loadRequestAsynchronously):

2008-07-06  David Kilzer  <ddkilzer@apple.com>

        Save a few more bits in RenderStyle

        Reviewed by Darin.

        No test cases added since there is no change in behavior.

        This changes WebCore::StyleMarqueeData from using 6 bits to 5 bits,
        WebCore::RenderStyle::inherited_flags from using 36 bits to 35 bits,
        and WebCore::RenderStyle::noninherited_flags from using 49 bits to
        47 bits.

        * rendering/style/RenderStyle.h:
        (WebCore::StyleMarqueeData::behavior): Reduce from 3 bits to 2 bits
        since EMarqueeBehavior has 4 items.
        (WebCore::RenderStyle::inherited_flags._text_align): Reduce from
        4 bits to 3 bits since ETextAlign has 8 items.
        (WebCore::RenderStyle::noninherited_flags._overflowX): Reduce from
        4 bits to 3 bits since EOverflow has 6 items.
        (WebCore::RenderStyle::noninherited_flags._overflowY): Ditto.

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

        Reviewed by Darin Adler.

        - fix <rdar://problem/5735163> WebCore caching makes text look wrong after font changes; need to respond appropriately instead

        * css/CSSFontSelector.cpp:
        (WebCore::CSSFontSelector::CSSFontSelector): Added a call to
        FontCache::addClient().
        (WebCore::CSSFontSelector::~CSSFontSelector): Added a call to
        FontCache::removeClient().
        (WebCore::CSSFontSelector::fontCacheInvalidated): Added. Called by the
        font cache when it is invalidated, and ensures that the document is
        updated.

        * css/CSSFontSelector.h:

        * platform/graphics/Font.cpp:
        (WebCore::Font::operator==): Added code to compare the font fallback
        lists' font cache generations.

        * platform/graphics/FontCache.cpp:
        (WebCore::FontCache::addClient): Added.
        (WebCore::FontCache::removeClient): Added.
        (WebCore::FontCache::generation): Added.
        (WebCore::FontCache::invalidate): Added. Deletes the platform data
        cache, increments the generation counter, and notifies all clients.

        * platform/graphics/FontCache.h:

        * platform/graphics/FontFallbackList.cpp:
        (WebCore::FontFallbackList::FontFallbackList): Added initialization of
        m_generation.
        (WebCore::FontFallbackList::invalidate): Added code to reset
        m_generation.
        (WebCore::FontFallbackList::fontDataAt): Added an assertion.
        (WebCore::FontFallbackList::fontDataForCharacters): Ditto.
        (WebCore::FontFallbackList::setPlatformFont): Ditto.

        * platform/graphics/FontFallbackList.h:
        (WebCore::FontFallbackList::generation): Added. Returns the font cache
        generation used to populate the list.

        * platform/graphics/FontSelector.h:
        (WebCore::FontSelector::fontCacheInvalidated): Added.

        * platform/graphics/mac/FontCacheMac.mm:
        (WebCore::fontCacheATSNotificationCallback): Added. Calls
        FontCache::invalidate().
        (WebCore::FontCache::platformInit): Added code to register for ATS
        notifications.

        * svg/SVGFontFaceElement.cpp: Removed unneeded #inlcudes.

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

        Rubber-stamped by Cameron Zwarich.

        Rename list.h/cpp to ArgList.h/cpp.

        * ForwardingHeaders/kjs/ArgList.h: Copied from WebCore/ForwardingHeaders/kjs/list.h.
        * ForwardingHeaders/kjs/list.h: Removed.
        * WebCore.vcproj/WebCore.vcproj:
        * bridge/qt/qt_instance.cpp:
        * page/Console.cpp:

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

        Rubber-stamped by Cameron Zwarich.

        Split Arguments, IndexToNameMap, PrototypeFunction, GlobalEvalFunction and 
        the functions on the global object out of JSFunction.h/cpp.

        * ForwardingHeaders/kjs/PrototypeFunction.h: Added.
        * bindings/js/JSDOMBinding.cpp:

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

        Rubber-stamped by Sam Weinig.

        - rename BidiIterator and BidiState

        Renamed BidiIterator to InlineIterator and BidiState
        to InlineBidiResolver. Renamed variables of type InlineBidiResolver{*,&}
        to "resolver".

        * rendering/RenderBlock.h:
        * rendering/RootInlineBox.h:
        * rendering/bidi.cpp:
        (WebCore::InlineIterator::InlineIterator):
        (WebCore::operator==):
        (WebCore::operator!=):
        (WebCore::bidiNext):
        (WebCore::bidiFirst):
        (WebCore::InlineIterator::increment):
        (WebCore::InlineBidiResolver::increment):
        (WebCore::InlineIterator::atEnd):
        (WebCore::InlineIterator::current):
        (WebCore::InlineIterator::direction):
        (WebCore::chopMidpointsAt):
        (WebCore::checkMidpoints):
        (WebCore::addMidpoint):
        (WebCore::appendRunsForObject):
        (WebCore::InlineBidiResolver::appendRun):
        (WebCore::RenderBlock::bidiReorderLine):
        (WebCore::buildCompactRuns):
        (WebCore::RenderBlock::layoutInlineChildren):
        (WebCore::RenderBlock::determineStartPosition):
        (WebCore::RenderBlock::determineEndPosition):
        (WebCore::RenderBlock::matchedEndLine):
        (WebCore::skipNonBreakingSpace):
        (WebCore::requiresLineBox):
        (WebCore::RenderBlock::generatesLineBoxesForInlineChild):
        (WebCore::RenderBlock::skipWhitespace):
        (WebCore::shouldSkipWhitespaceAfterStartObject):
        (WebCore::RenderBlock::findNextLineBreak):

2008-07-05  Jan Michael Alonzo  <jmalonzo@webkit.org>

        Rubber-stamped by Oliver Hunt

        Coding style fix

        * html/CanvasRenderingContext2D.cpp: Indentation fix

2008-07-04  Oliver Hunt  <oliver@apple.com>

        Fix windows build

        * WebCore.vcproj/WebCore.vcproj:

2008-07-04  Sam Weinig  <sam@webkit.org>

        Fix Qt build.

        * bridge/qt/qt_instance.cpp:

2008-07-04  Sam Weinig  <sam@webkit.org>

        Rubber-stamped by Dan Bernstein.

        Split Error and GetterSetter out of JSObject.h.

        * ForwardingHeaders/kjs/Error.h: Added.
        * bindings/js/JSCanvasRenderingContext2DCustom.cpp:
        * bindings/js/JSClipboardCustom.cpp:
        * bindings/js/JSDOMWindowBase.cpp:
        * bindings/js/JSEventTargetBase.cpp:
        * bindings/js/JSHTMLDocumentCustom.cpp:
        * bindings/js/JSXMLHttpRequestCustom.cpp:
        * bindings/scripts/CodeGeneratorJS.pm:
        * bridge/NP_jsobject.cpp:
        * bridge/jni/jni_instance.cpp:
        * bridge/jni/jni_runtime.cpp:
        * bridge/objc/objc_instance.mm:
        * bridge/objc/objc_runtime.mm:
        * bridge/objc/objc_utility.h:
        * bridge/runtime_array.cpp:
        * bridge/runtime_method.cpp:
        * bridge/runtime_object.cpp:

2008-07-04  David D. Kilzer  <ddkilzer@webkit.org>

        Bug 15290: REGRESSION (r14184-r14216): Duplicate DOCTYPE definitions when saving files as webarchives

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

        Reviewed by Dan Bernstein.

        Tests: webarchive/archive-empty-frame-dom.html
               webarchive/doctype.html

        * editing/markup.cpp:
        (WebCore::createFullMarkup): If the Node is a Document or a
        DocumentType, don't prepend the <!DOCTYPE> tag since that will
        cause it to be duplicated.
        * loader/archive/cf/LegacyWebArchive.cpp:
        (WebCore::LegacyWebArchive::create): Ditto.

2008-07-04  Jan Michael Alonzo  <jmalonzo@webkit.org>

        Gtk build fix

        * GNUmakefile.am:

2008-07-04  Cameron Zwarich  <cwzwarich@uwaterloo.ca>

        Reviewed by Eric Seidel.

        Bring our implementation of the Netscape plugin API closer to current
        code style guidelines.

        * bridge/NP_jsobject.cpp:
        (getListFromVariantArgs):
        (jsAllocate):
        (jsDeallocate):
        (_NPN_CreateScriptObject):
        (_NPN_CreateNoScriptObject):
        (_NPN_InvokeDefault):
        (_NPN_Invoke):
        (_NPN_Evaluate):
        (_NPN_GetProperty):
        (_NPN_SetProperty):
        (_NPN_RemoveProperty):
        (_NPN_HasProperty):
        (_NPN_HasMethod):
        (_NPN_Enumerate):
        * bridge/npruntime_impl.h:

2008-07-04  Simon Hausmann  <hausmann@webkit.org>

        Fix the Qt/Windows build.

        * WebCore.pro: Moved PluginMainThreadScheduler.cpp to the main
        sources, so that it is always compiled.
        * platform/qt/CursorQt.cpp: #undef CopyCursor, as it's defined by some
        Windows header.
        * platform/qt/KeyboardCodes.h: Don't re-define some of the keycodes
        that are defined by Windows already.
        * platform/qt/TemporaryLinkStubs.cpp: Removed the PluginDatabase stubs
        that are now platform-independent in plugin/PluginDatabase.cpp.

2008-07-04  Simon Hausmann  <hausmann@webkit.org>

        Fix the Mac build for real, don't define listDirectory() twice.

        * platform/mac/FileSystemMac.mm:

2008-07-04  Simon Hausmann  <hausmann@webkit.org>

        Prospective Mac build fix.

        * platform/mac/FileSystemMac.mm: Include NotImplemented.h.
        * platform/posix/FileSystemPOSIX.cpp: Ditto.

2008-07-04  Tor Arne Vestbø  <tavestbo@trolltech.com>

        Reviewed by Simon.

        Move duplicated code from each PluginDatabaseXX-implementation
        to PluginDabase.cpp -- ifdefed based on the XP_PLATFORM we are
        compiling plugins for.

        This make the code cleaner and we can share common patterns.
        The only implementation left which is specific is the Win
        implementation (also used by QtWebKit/Win), but we might
        want to move that too.

        * GNUmakefile.am: Removed PluginDatabaseGtk.cpp from the build.
        * WebCore.pro: Removed PluginDatabaseQt.cpp from the build.
        * plugins/PluginDatabase.cpp:
        (WebCore::PluginDatabase::defaultPluginDirectories):
        (WebCore::PluginDatabase::isPreferredPluginDirectory):
        (WebCore::PluginDatabase::getPluginPathsInDirectories):
        * plugins/gtk/PluginDatabaseGtk.cpp: Removed.
        * plugins/qt/PluginDatabaseQt.cpp: Removed.
        * plugins/wx/PluginDatabaseWx.cpp: Removed.
        * webcore-wx.bkl: Removed PluginDatabaseWx.cpp from the build.

2008-07-04  Simon Hausmann  <hausmann@webkit.org>

        Fix the Wx build.

        * WebCoreSources.bkl: Add plugins/PluginMainThreadScheduler.cpp to the
        build.
        * page/FocusController.cpp:
        (WebCore::FocusController::setActive): Extend MAC #ifdef to WX as
        layoutIfNeededRecursive does not exist for the Wx port.

2008-07-04  Simon Hausmann  <hausmann@webkit.org>

        Fix the Gtk build, adapt to renamed files.

        * GNUmakefile.am:

2008-07-04  Simon Hausmann  <hausmann@webkit.org>

        Fix the Qt build, adapt to renamed files.

        * WebCore.pro:

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

        Reviewed by Eric Seidel.

        Move filter implementations to platform directory.

        * WebCore.vcproj/WebCore.vcproj
        * WebCore.xcodeproj/project.pbxproj:
        * svg/SVGComponentTransferFunctionElement.h:
        * svg/SVGFEBlendElement.h:
        * svg/SVGFEColorMatrixElement.h:
        * svg/SVGFEComponentTransferElement.h:
        * svg/SVGFECompositeElement.h:
        * platform/graphics/filters/FEBlend.cpp: Renamed from WebCore/svg/graphics/filters/SVGFEBlend.cpp.
        * platform/graphics/filters/FEBlend.h: Renamed from WebCore/svg/graphics/filters/SVGFEBlend.h.
        * platform/graphics/filters/FEColorMatrix.cpp: Renamed from WebCore/svg/graphics/filters/SVGFEColorMatrix.cpp.
        * platform/graphics/filters/FEColorMatrix.h: Renamed from WebCore/svg/graphics/filters/SVGFEColorMatrix.h.
        * platform/graphics/filters/FEComponentTransfer.cpp: Renamed from WebCore/svg/graphics/filters/SVGFEComponentTransfer.cpp.
        * platform/graphics/filters/FEComponentTransfer.h: Renamed from WebCore/svg/graphics/filters/SVGFEComponentTransfer.h.
        * platform/graphics/filters/FEComposite.cpp: Renamed from WebCore/svg/graphics/filters/SVGFEComposite.cpp.
        * platform/graphics/filters/FEComposite.h: Renamed from WebCore/svg/graphics/filters/SVGFEComposite.h.

2008-07-03  Alex Mathews  <possessedpenguinbob@gmail.com>

        Reviewed by Oliver Hunt.

        Bug 19835: WebKit needs cross-platform filter system
        <https://bugs.webkit.org/show_bug.cgi?id=19835>

        More class refactoring in preparation for cross-platform filter
        implementation.

        * WebCore.xcodeproj/project.pbxproj:
        * svg/FilterEffect.h:
        * svg/SVGComponentTransferFunctionElement.cpp:
        (WebCore::SVGComponentTransferFunctionElement::SVGComponentTransferFunctionElement):
        (WebCore::SVGComponentTransferFunctionElement::parseMappedAttribute):
        (WebCore::SVGComponentTransferFunctionElement::transferFunction):
        * svg/SVGComponentTransferFunctionElement.h:
        * svg/SVGFEColorMatrixElement.cpp:
        (WebCore::SVGFEColorMatrixElement::SVGFEColorMatrixElement):
        (WebCore::SVGFEColorMatrixElement::parseMappedAttribute):
        (WebCore::SVGFEColorMatrixElement::filterEffect):
        (WebCore::SVGFEColorMatrixElement::build):
        * svg/SVGFEColorMatrixElement.h:
        * svg/SVGFEComponentTransferElement.cpp:
        (WebCore::SVGFEComponentTransferElement::filterEffect):
        (WebCore::SVGFEComponentTransferElement::build):
        * svg/SVGFEComponentTransferElement.h:
        * svg/SVGFECompositeElement.cpp:
        (WebCore::SVGFECompositeElement::SVGFECompositeElement):
        (WebCore::SVGFECompositeElement::parseMappedAttribute):
        (WebCore::SVGFECompositeElement::filterEffect):
        (WebCore::SVGFECompositeElement::build):
        * svg/SVGFECompositeElement.h:
        * svg/graphics/filters/SVGFEBlend.cpp:
        * svg/graphics/filters/SVGFEBlend.h:
        * svg/graphics/filters/SVGFEColorMatrix.cpp:
        (WebCore::FEColorMatrix::FEColorMatrix):
        (WebCore::FEColorMatrix::create):
        (WebCore::FEColorMatrix::type):
        (WebCore::FEColorMatrix::setType):
        (WebCore::FEColorMatrix::values):
        (WebCore::FEColorMatrix::setValues):
        (WebCore::FEColorMatrix::apply):
        (WebCore::FEColorMatrix::dump):
        * svg/graphics/filters/SVGFEColorMatrix.h:
        (WebCore::):
        * svg/graphics/filters/SVGFEComponentTransfer.cpp:
        (WebCore::FEComponentTransfer::FEComponentTransfer):
        (WebCore::FEComponentTransfer::create):
        (WebCore::FEComponentTransfer::redFunction):
        (WebCore::FEComponentTransfer::setRedFunction):
        (WebCore::FEComponentTransfer::greenFunction):
        (WebCore::FEComponentTransfer::setGreenFunction):
        (WebCore::FEComponentTransfer::blueFunction):
        (WebCore::FEComponentTransfer::setBlueFunction):
        (WebCore::FEComponentTransfer::alphaFunction):
        (WebCore::FEComponentTransfer::setAlphaFunction):
        (WebCore::FEComponentTransfer::apply):
        (WebCore::FEComponentTransfer::dump):
        * svg/graphics/filters/SVGFEComponentTransfer.h:
        (WebCore::):
        (WebCore::ComponentTransferFunction::ComponentTransferFunction):
        * svg/graphics/filters/SVGFEComposite.cpp:
        (WebCore::FEComposite::FEComposite):
        (WebCore::FEComposite::create):
        (WebCore::FEComposite::operation):
        (WebCore::FEComposite::setOperation):
        (WebCore::FEComposite::k1):
        (WebCore::FEComposite::setK1):
        (WebCore::FEComposite::k2):
        (WebCore::FEComposite::setK2):
        (WebCore::FEComposite::k3):
        (WebCore::FEComposite::setK3):
        (WebCore::FEComposite::k4):
        (WebCore::FEComposite::setK4):
        (WebCore::FEComposite::apply):
        (WebCore::FEComposite::dump):
        * svg/graphics/filters/SVGFEComposite.h:
        (WebCore::):
        * svg/graphics/filters/cg/SVGFEColorMatrixCg.mm: Removed.
        * svg/graphics/filters/cg/SVGFEComponentTransferCg.mm: Removed.
        * svg/graphics/filters/cg/SVGFECompositeCg.mm: Removed.

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

        Reviewed by John Sullivan.

        - fix <rdar://problem/6020930> Bidi Problem When Resizing Window

        Test: fast/text/international/bidi-AN-after-empty-run.html

        * platform/text/BidiResolver.h:
        (WebCore::::appendRun): Changed to reset the current direction and
        "end of run" direction even in the empty run case.
        * rendering/bidi.cpp:
        (WebCore::BidiState::appendRun): Ditto.

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

        <rdar://5983747> Safari crashes trying to load the SilverLight plugin

        If a plug-in returned an error code from NPP_NewStream, we would call
        NPP_DestroyStream while cleaning up the request. We now only call
        NPP_DestroyStream if NPP_NewStream was successful, matching Firefox.

        Reviewed by Anders.

        * plugins/PluginStream.cpp:
        (WebCore::PluginStream::startStream): If NPP_NewStream returns an error,
        don't set m_streamState to StreamStarted, and return after calling
        cancelAndDestroyStream.
        (WebCore::PluginStream::destroyStream): Don't call NPP_DestroyStream if
        the stream didn't start successfully.

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

        Revise Dan's fix for an assert on Windows, since layoutIfNeededRecursive doesn't exist on the
        Mac.  Revert updateControlTints and add the layout call outside of it in the already-existing
        !PLATFORM(MAC) ifdef in FocusController's setActive method.

        Reviewed by ggaren, weinig

        * page/FocusController.cpp:
        (WebCore::FocusController::setActive):
        * page/FrameView.cpp:
        (WebCore::FrameView::updateControlTints):

2008-07-03  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Darin.

        https://bugs.webkit.org/show_bug.cgi?id=19884
        Locating a store at www.366.ru doesn't work

        Test: fast/forms/submit-with-base.html

        * html/HTMLFormElement.cpp: (WebCore::HTMLFormElement::submit): Treat empty action the same
        as missing one - ignore base URL.

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

        Reviewed by John Sullivan.

        - fix <rdar://problem/6048904> Assert in WebCore::Frame::paint in Windows

        * page/FrameView.cpp:
        (WebCore::FrameView::updateControlTints): Changed to update layout
        recursively and not just for the top-level frame.

2008-07-03  Cameron Zwarich  <cwzwarich@uwaterloo.ca>

        Reviewed by Geoff.

        Bug 19853: REGRESSION (r34838): Crash when visiting http://www.thewebsiteisdown.com/salesguy.html
        https://bugs.webkit.org/show_bug.cgi?id=19853

        Remove the body of _NPN_SetException(), because it was simply calling
        throwError(), which sets an exception on an ExecState but does not
        actually handle it. The presence of an exception on the global ExecState
        causes assertions that there is no exception set on that ExecState to
        fail, as well as causing Machine::execute() to mistakingly return 0 in
        some cases, as it assumes the presence of an exception implies that it
        has run out of memory.

        * bridge/NP_jsobject.cpp:
        (_NPN_SetException):

2008-07-03  Maciej Katafiasz  <mathrick@gmail.com>

        Gtk build fix with SVG filters enabled

        * GNUmakefile.am: Include missing SVG filter sources

2008-07-03  Simon Hausmann  <hausmann@webkit.org>

        Fix the Qt build, added FilterEffect to the build.

        * WebCore.pro:

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

        Reviewed by Mitz Pettel and John Sullivan

        Fix for <rdar://problem/5549871> - Crash when calling [WebView stopLoading:] or [WebFrame stopLoading] 
        inside of the frame load delegate method -webView:didStartProvisionalLoadForFrame:.

        Test: fast/loader/stop-provisional-loads.html

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::continueLoadAfterWillSubmitForm): Since the provisionalDocumentLoader may have been cleared
          by the prepareForLoadStart() call, null check it again.

2008-07-01  Alex Mathews  <possessedpenguinbob@gmail.com>

        Reviewed by Oliver Hunt.

        Renaming of class SVGFEBlend to FEBlend as well as removing
        a little bit of antiquated code. This includes the removal of
        SVGFEBlendCg.mm; the feBlend element will now no longer
        render. 

        * WebCore.xcodeproj/project.pbxproj:
        * svg/FilterBuilder.h:
        (WebCore::FilterBuilder::add):
        (WebCore::FilterBuilder::getEffectById):
        * svg/SVGFEBlendElement.cpp:
        (WebCore::SVGFEBlendElement::SVGFEBlendElement):
        (WebCore::SVGFEBlendElement::parseMappedAttribute):
        (WebCore::SVGFEBlendElement::filterEffect):
        (WebCore::SVGFEBlendElement::build):
        * svg/SVGFEBlendElement.h:
        * svg/SVGFilterPrimitiveStandardAttributes.h:
        * svg/graphics/filters/SVGFEBlend.cpp:
        (WebCore::FEBlend::FEBlend):
        (WebCore::FEBlend::create):
        (WebCore::FEBlend::in2):
        (WebCore::FEBlend::setIn2):
        (WebCore::FEBlend::blendMode):
        (WebCore::FEBlend::setBlendMode):
        (WebCore::FEBlend::apply):
        (WebCore::FEBlend::dump):
        * svg/graphics/filters/SVGFEBlend.h:
        (WebCore::):
        * svg/graphics/filters/cg/SVGFEBlendCg.mm: Removed.

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

        Reviewed by Darin.

        Fix for <rdar://problem/6015523> Implement ARIA ranges/sliders
        and
        <rdar://problem/5934355> Need to implement ARIA role="spinbutton"

        * page/AccessibilityObject.h:
        (WebCore::AccessibilityObject::isSlider):
        * page/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::isSlider):
        (WebCore::AccessibilityRenderObject::valueForRange):
        (WebCore::AccessibilityRenderObject::maxValueForRange):
        (WebCore::AccessibilityRenderObject::minValueForRange):
        (WebCore::AccessibilityRenderObject::accessibilityIsIgnored): We 
        were addressing the generic has-an-ARIA-role case too early here.
        (WebCore::AccessibilityRenderObject::focusedUIElement): This is a 
        bug I ran into while testing role='spinbutton', spinbutton is a 
        role that can have an active descendant. But we were always trying 
        to forward focus to the active descendant, even if one was not 
        specified. 
        (WebCore::AccessibilityRenderObject::shouldFocusActiveDescendant): 
        'spinbutton' maps to ProgressIndicatorRole.
        (WebCore::RoleEntry::):
        (WebCore::AccessibilityRenderObject::canSetValueAttribute):
        * page/AccessibilityRenderObject.h:
        * page/mac/AccessibilityObjectWrapper.mm:
        (-[AccessibilityObjectWrapper accessibilityAttributeNames]):
        (-[AccessibilityObjectWrapper accessibilityAttributeValue:]):

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

        Reviewed by Adam Roben.

        - Windows build fix

        Renamed the ERROR token in the XPath grammar to XPATH_ERROR, because
        the ERROR macro is defined in <wingdi.h>.

        * xml/XPathGrammar.y:
        * xml/XPathParser.cpp:
        (WebCore::XPath::Parser::lexString):
        (WebCore::XPath::Parser::nextTokenInternal):

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

        Inspired and reviewed by Mark Rowe.

        Change non-API includes from JavaScriptCore/ to kjs/ and wtf/ to match prevalent style.

        * bindings/objc/ExceptionHandlers.h:
        * bindings/objc/WebScriptObject.mm:
        * dom/Document.cpp:
        * dom/Node.cpp:
        * page/Frame.cpp:
        * page/InspectorController.cpp:
        * page/JavaScriptProfileNode.cpp:
        * page/mac/FrameMac.mm:
        * platform/mac/ThreadCheck.mm:
        * xml/XMLHttpRequest.cpp:

2008-07-02  Simon Hausmann  <hausmann@webkit.org>

        Fix the Gtk build.

        * plugins/gtk/PluginViewGtk.cpp: Adapt to JSLock API changes.
        (WebCore::PluginView::paint):
        (WebCore::PluginView::handleKeyboardEvent):
        (WebCore::PluginView::handleMouseEvent):
        (WebCore::PluginView::setNPWindowRect):
        (WebCore::PluginView::stop):
        (WebCore::PluginView::init):

2008-07-02  Simon Hausmann  <hausmann@webkit.org>

        Build fixes.

        * WebCore.pro: Added plugins/PluginMainThreadScheduler.cpp to the
        build.
        * bridge/qt/qt_instance.cpp: Adjust to JSLock API change.
        * bridge/qt/qt_runtime.cpp: Ditto.
        (KJS::Bindings::convertValueToQVariant):
        (KJS::Bindings::convertQVariantToValue):
        (KJS::Bindings::QtRuntimeMetaMethod::call):
        (KJS::Bindings::QtRuntimeConnectionMethod::call):
        (KJS::Bindings::QtConnectionObject::execute):
        * page/JavaScriptProfileNode.cpp: Inlude kjs/JSValue.h instead of
        JavaScriptCore/JSValue.h.
        * plugins/qt/PluginViewQt.cpp: Adjust to JSLock API changes.
        (WebCore::PluginView::setNPWindowRect): Ditto.
        (WebCore::PluginView::stop): Ditto.
        (WebCore::PluginView::init): Ditto.

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

        Build fix.

        * plugins/PluginView.cpp:
        (WebCore::PluginView::start):
        (WebCore::getString):
        (WebCore::PluginView::performRequest):
        (WebCore::PluginView::bindingInstance):
        * plugins/win/PluginViewWin.cpp:
        (WebCore::PluginView::dispatchNPEvent):
        (WebCore::PluginView::setNPWindowRect):
        (WebCore::PluginView::stop):
        Pass false to JSLock and JSLock::DropAllLocks constructors.

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

        Reviewed by Geoff Garen.

        <rdar://problem/5974306> CanvasRenderingContext2D becomes invalid when source canvas element is collected

        In order to fix this we now make the rendering context and the canvas element
        share the same reference count, ensuring that references to the rendering
        context will force the canvas element to remain live as well.

        Test: fast/canvas/canvas-longlived-context.html

        * html/CanvasRenderingContext2D.cpp:
        (WebCore::CanvasRenderingContext2D::clearPathForDashboardBackwardCompatibilityMode):
        (WebCore::CanvasRenderingContext2D::createImageData):
        (WebCore::CanvasRenderingContext2D::getImageData):
        (WebCore::CanvasRenderingContext2D::putImageData):
        * html/CanvasRenderingContext2D.h:
        (WebCore::CanvasRenderingContext2D::create):
        * html/HTMLCanvasElement.cpp:
        (WebCore::HTMLCanvasElement::getContext):
        * html/HTMLCanvasElement.h:

2008-07-01  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Darin.

        Disable JSLock for per-thread contexts.

        * bridge/runtime_root.cpp:
        (KJS::Bindings::RootObject::invalidate):
        (KJS::Bindings::RootObject::gcProtect):
        (KJS::Bindings::RootObject::gcUnprotect):
        Don't lock while calling gcProtect/gcUnprotect, which now has its own implicit lock.

        * storage/Database.cpp: (WebCore::Database::Database): Call Heap::setGCProtectNeedsLocking
        to indicate that protected value list can be concurrently accessed from multiple threads now.

        * xml/XMLHttpRequest.cpp:
        (WebCore::XMLHttpRequest::loadRequestSynchronously): There is no need to drop the locks here,
        as fake locks cannot deadlock, and there is no danger that someone will try to take a real
        JSLock on the main thread while we are waiting for response.
        (WebCore::XMLHttpRequest::loadRequestAsynchronously): There is no need to explicitly lock
        around gcProtect/gcUnprotect now.
        (WebCore::XMLHttpRequest::dropProtection): Access heap directly, rather than via
        JSGlobalData::threadInstance().

        * bindings/js/GCController.cpp:
        (WebCore::collect):
        (WebCore::GCController::gcTimerFired):
        (WebCore::GCController::garbageCollectNow):
        (WebCore::GCController::garbageCollectOnAlternateThreadForDebugging):
        * 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/JSDOMWindowBase.cpp:
        (WebCore::DOMWindowTimer::~DOMWindowTimer):
        (WebCore::JSDOMWindowBase::clear):
        (WebCore::JSDOMWindowBase::timerFired):
        * bindings/js/JSEventCustom.cpp:
        (WebCore::toJS):
        * bindings/js/JSEventListener.cpp:
        (WebCore::JSAbstractEventListener::handleEvent):
        (WebCore::JSLazyEventListener::parseCode):
        * bindings/js/JSNodeFilterCondition.cpp:
        (WebCore::JSNodeFilterCondition::acceptNode):
        * bindings/js/ScheduledAction.cpp:
        (WebCore::ScheduledAction::execute):
        * bindings/js/ScriptController.cpp:
        (WebCore::ScriptController::evaluate):
        (WebCore::ScriptController::clear):
        (WebCore::ScriptController::createHTMLEventHandler):
        (WebCore::ScriptController::createSVGEventHandler):
        (WebCore::ScriptController::initScript):
        (WebCore::ScriptController::updateDocument):
        * bindings/objc/WebScriptObject.mm:
        (-[WebScriptObject callWebScriptMethod:withArguments:]):
        (-[WebScriptObject evaluateWebScript:]):
        (-[WebScriptObject setValue:forKey:]):
        (-[WebScriptObject valueForKey:]):
        (-[WebScriptObject removeWebScriptKey:]):
        (-[WebScriptObject stringRepresentation]):
        (-[WebScriptObject webScriptValueAtIndex:]):
        (-[WebScriptObject setWebScriptValueAtIndex:value:]):
        (+[WebScriptObject _convertValueToObjcValue:originRootObject:rootObject:]):
        * bridge/NP_jsobject.cpp:
        (_NPN_InvokeDefault):
        (_NPN_Invoke):
        (_NPN_Evaluate):
        (_NPN_GetProperty):
        (_NPN_SetProperty):
        (_NPN_RemoveProperty):
        (_NPN_HasProperty):
        (_NPN_HasMethod):
        (_NPN_SetException):
        (_NPN_Enumerate):
        * bridge/c/c_class.cpp:
        (KJS::Bindings::CClass::~CClass):
        (KJS::Bindings::CClass::methodsNamed):
        (KJS::Bindings::CClass::fieldNamed):
        * bridge/c/c_instance.cpp:
        (KJS::Bindings::CInstance::invokeMethod):
        (KJS::Bindings::CInstance::invokeDefaultMethod):
        (KJS::Bindings::CInstance::getPropertyNames):
        * bridge/c/c_runtime.cpp:
        (KJS::Bindings::CField::valueFromInstance):
        (KJS::Bindings::CField::setValueToInstance):
        * bridge/c/c_utility.cpp:
        (KJS::Bindings::convertValueToNPVariant):
        (KJS::Bindings::convertNPVariantToValue):
        * bridge/jni/jni_class.cpp:
        (JavaClass::JavaClass):
        (JavaClass::~JavaClass):
        * bridge/jni/jni_instance.cpp:
        (JavaInstance::stringValue):
        * bridge/jni/jni_jsobject.mm:
        (JavaJSObject::call):
        (JavaJSObject::eval):
        (JavaJSObject::getMember):
        (JavaJSObject::setMember):
        (JavaJSObject::removeMember):
        (JavaJSObject::getSlot):
        (JavaJSObject::setSlot):
        (JavaJSObject::toString):
        (JavaJSObject::convertValueToJObject):
        (JavaJSObject::convertJObjectToValue):
        * bridge/jni/jni_objc.mm:
        (KJS::Bindings::dispatchJNICall):
        * bridge/jni/jni_runtime.cpp:
        (JavaMethod::signature):
        * bridge/jni/jni_runtime.h:
        (KJS::Bindings::JavaString::JavaString):
        (KJS::Bindings::JavaString::_commonInit):
        (KJS::Bindings::JavaString::~JavaString):
        (KJS::Bindings::JavaString::UTF8String):
        * bridge/jni/jni_utility.cpp:
        (KJS::Bindings::convertArrayInstanceToJavaArray):
        (KJS::Bindings::convertValueToJValue):
        * bridge/npruntime.cpp:
        (_NPN_GetStringIdentifier):
        * bridge/objc/objc_instance.mm:
        (ObjcInstance::moveGlobalExceptionToExecState):
        (ObjcInstance::invokeMethod):
        (ObjcInstance::invokeDefaultMethod):
        (ObjcInstance::setValueOfUndefinedField):
        (ObjcInstance::getValueOfUndefinedField):
        * bridge/objc/objc_runtime.mm:
        (ObjcField::valueFromInstance):
        (ObjcField::setValueToInstance):
        * bridge/objc/objc_utility.mm:
        (KJS::Bindings::convertValueToObjcValue):
        (KJS::Bindings::convertNSStringToString):
        (KJS::Bindings::convertObjcValueToValue):
        * bridge/runtime.cpp:
        (KJS::Bindings::Instance::createRuntimeObject):
        * dom/Document.cpp:
        (WebCore::Document::~Document):
        * dom/Node.cpp:
        (WebCore::Node::setDocument):
        * history/CachedPage.cpp:
        (WebCore::CachedPage::CachedPage):
        (WebCore::CachedPage::restore):
        (WebCore::CachedPage::clear):
        * html/HTMLPlugInElement.cpp:
        (WebCore::HTMLPlugInElement::createNPObject):
        * loader/FrameLoader.cpp:
        (WebCore::getString):
        * page/Frame.cpp:
        (WebCore::Frame::bindingRootObject):
        (WebCore::Frame::windowScriptNPObject):
        (WebCore::Frame::clearScriptObjects):
        * page/InspectorController.cpp:
        (WebCore::jsStringRef):
        (WebCore::ConsoleMessage::ConsoleMessage):
        (WebCore::XMLHttpRequestResource::XMLHttpRequestResource):
        (WebCore::XMLHttpRequestResource::~XMLHttpRequestResource):
        (WebCore::getResourceDocumentNode):
        (WebCore::search):
        (WebCore::inspectedWindow):
        (WebCore::wrapCallback):
        (WebCore::currentCallFrame):
        (WebCore::profiles):
        (WebCore::InspectorController::focusNode):
        (WebCore::InspectorController::addDatabaseScriptResource):
        (WebCore::InspectorController::addScriptProfile):
        * page/JavaScriptCallFrame.cpp:
        (WebCore::JavaScriptCallFrame::evaluate):
        * page/JavaScriptProfileNode.cpp:
        (WebCore::getTotalTime):
        (WebCore::getSelfTime):
        (WebCore::getTotalPercent):
        (WebCore::getSelfPercent):
        (WebCore::getNumberOfCalls):
        (WebCore::getChildren):
        (WebCore::getVisible):
        * page/mac/FrameMac.mm:
        (WebCore::Frame::windowScriptObject):
        Pass a parameter (always false) to JSLock and JSLock::DropAllLocks to indicate that WebCore
        doesn't need locking. In the future, it may be possible to remove some of these if we
        establish that this won't make JSC assertions fail (and that we don't want to add such
        assertions either).
        Added includes that are now needed.

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

        Reviewed by Oliver Hunt.

        - fix a CSSParserValueList leak seen on the build bot

        * css/CSSParser.cpp:
        (WebCore::BorderImageParseContext::commitBorderImage):

2008-07-01  Alex Mathews  <possessedpenguinbob@gmail.com>

        Reviewed by Oliver Hunt.

        Prep for more Filter class name changes. Added the first few files for
        the new Filter architecture to come.

        * WebCore.xcodeproj/project.pbxproj:
        * svg/Filter.cpp: Added.
        (WebCore::Filter::Filter):
        (WebCore::Filter::create):
        * svg/Filter.h: Added.
        * svg/FilterBuilder.h: Added.
        (WebCore::FilterBuilder::add):
        (WebCore::FilterBuilder::getEffectById):
        (WebCore::FilterBuilder::filter):
        * svg/FilterEffect.cpp: Added.
        (WebCore::FilterEffect::FilterEffect):
        (WebCore::FilterEffect::~FilterEffect):
        * svg/FilterEffect.h: Added.

2008-07-01  Christian Dywan  <christian@twotoasts.de>

        Gtk+ build fix.

        * GNUmakefile.am: add WebCore/plugins/PluginMainThreadScheduler.cpp

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

        Reviewed by Darin.

        Add PluginMainThreadScheduler.{cpp|h} to build.
        
        * WebCore.base.exp:
        * WebCore.xcodeproj/project.pbxproj:
        * plugins/PluginMainThreadScheduler.cpp:

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

        Reviewed by Darin Adler.

        - move the method to set the base writing direction from Frame to Editor

        * WebCore.base.exp: Updated.
        * editing/Editor.cpp:
        (WebCore::Editor::setBaseWritingDirection): Changed the parameter to a
        WritingDirection enum value and added the special behavior when the
        focused node is a text field or a text area.
        * editing/Editor.h:
        * page/ContextMenuController.cpp:
        (WebCore::ContextMenuController::contextMenuItemSelected): Changed back
        to call the Editor method.
        * page/Frame.cpp: Removed setSelectionBaseWritingDirection().
        * page/Frame.h:

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

        Reviewed by Oliver.

        - slight tweak of the setHash fix

        * bindings/js/JSLocationCustom.cpp:
        (WebCore::JSLocation::setHash): Use oldRef instead of recomputing url.ref().

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

        Reviewed by Anders Carlsson.

        - Mac release build fix

        * page/Console.cpp:

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

        Reviewed by Anders Carlsson.

        - fix <rdar://problem/6045896> REGRESSION: Leak in WebCore::StringImpl::create

        * css/CSSPrimitiveValue.cpp:
        (WebCore::CSSPrimitiveValue::cleanup):

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

        Reviewed by Jon.

        Don't add the Mozilla user agent quirk for Flash 10.
        
        * plugins/win/PluginPackageWin.cpp:
        (WebCore::PluginPackage::isPluginBlacklisted):
        (WebCore::PluginPackage::determineQuirks):

2008-07-01  David Kilzer  <ddkilzer@apple.com>

        Move data: URL parsing code in HTMLObjectElement to KURL

        Reviewed by Ada and Darin.

        No test cases added since there is no change in behavior.

        * html/HTMLObjectElement.cpp:
        (WebCore::HTMLObjectElement::isImageType): Extracted data: URL
        parsing code into WebCore::mimeTypeFromDataURL() in KURL.cpp.
        * platform/KURL.cpp:
        (WebCore::mimeTypeFromDataURL): Added.
        * platform/KURL.h:
        (WebCore::mimeTypeFromDataURL): Added.

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

        Reviewed by Dave Hyatt.

        - fix <rdar://problem/6045890> REGRESSION: Leak in WebCore::CSSParser::createFloatingValueList()

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

2008-07-01  Cameron Zwarich  <cwzwarich@uwaterloo.ca>

        Reviewed by Brady Eidson.

        Bug 19822: REGRESSION (r30243): setting location.hash to "#" causes a reload
        <https://bugs.webkit.org/show_bug.cgi?id=19822>

        Change JSLocation::setHash() to not schedule navigation in the case
        where the old fragment is the null String and the new fragment is an
        empty String.

        * bindings/js/JSLocationCustom.cpp:
        (WebCore::JSLocation::setHash):

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

        Reviewed by Adam.

        Add PluginMainThreadScheduler, a singleton which is responsible for scheduling plug-in 
        callbacks on the main thread. Use this to implement NPN_PluginThreadAsyncCall on Windows.
        
        * WebCore.vcproj/WebCore.vcproj:
        Add PluginMainThreadScheduler.{cpp|h}
        
        * plugins/PluginMainThreadScheduler.cpp: Added.
        * plugins/PluginMainThreadScheduler.h: Added.

        * plugins/PluginView.cpp:
        (WebCore::PluginView::start):
        Register with the thread scheduler.
        
        * plugins/npapi.cpp:
        (NPN_PluginThreadAsyncCall):
        Call the thread scheduler.
        
        * plugins/win/PluginPackageWin.cpp:
        (WebCore::PluginPackage::load):
        Initialize the NPN_PluginThreadAsyncCall callback.
        
        * plugins/win/PluginViewWin.cpp:
        (WebCore::PluginView::stop):
        Unregister with the scheduler. This makes sure that we won't try to deliver callbacks
        after the plug-in has been destroyed.

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

        Roll out r34913, as it broke the Windows build due to bad casting

        r34913 introduced code that assigned pointers-to-member from a derived
        class into a base class pointer-to-member type (e.g., assigned a void
        (SVGUseElement::*)() into a void (SVGElement::*)()). This is bad
        because it could allow us to call SVGUseElement member functions on a
        different SVGElement-derived class. MSVC rightly flagged this as an
        error.

        Rubberstamped by Anders Carlsson.

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

        - fix build

        * bindings/scripts/CodeGeneratorJS.pm: Fix warnings that indicate this was
        not working propertly.

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

        Reviewed by Darin Adler.

        - fix <rdar://problem/6045893> REGRESSION: Leak in WebCore::HTMLCanvasElement::createPlatformImage() const

        * html/CanvasRenderingContext2D.cpp:
        (WebCore::CanvasRenderingContext2D::createPattern):

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

        Reviewed by Darin Adler.

        Split JSCell and JSNumberCell class declarations out of JSValue.h

        * ForwardingHeaders/kjs/JSNumberCell.h: Added.
        * bindings/scripts/CodeGeneratorJS.pm:
        * bridge/c/c_instance.cpp:

2008-07-01  chris fleizach  <cfleizach@apple.com>

        Reviewed by Beth Dakin

        <rdar://problem/6041580> REGRESSION: AX: AXSize of radio buttons is 0,0

        Test: accessibility/radio-button-checkbox-size.html

        * page/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::checkboxOrRadioRect):

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

        Reviewed by Antti Koivisto.

        - fix SVG pointer-events layout test failures

        * css/SVGCSSParser.cpp:
        (WebCore::CSSParser::parseSVGValue):

2008-07-01  Nikolas Zimmermann  <zimmermann@kde.org>

        Reviewed by Antti.

        Fixes: https://bugs.webkit.org/show_bug.cgi?id=19841
        Fix two small problems in the gradient & pattern code.

        Added 12 new layout tests: svg/dynamic-updates/SVGLinearGradientElement*.html

        * svg/SVGLinearGradientElement.cpp:
        (WebCore::SVGLinearGradientElement::collectGradientProperties): Compare against already computed bounding box information, instead of querying attributes.
        * svg/SVGPatternElement.cpp:
        (WebCore::SVGPatternElement::collectPatternProperties): Ditto.
        * svg/SVGRadialGradientElement.cpp:
        (WebCore::SVGRadialGradientElement::collectGradientProperties): Ditto.
        (WebCore::SVGRadialGradientElement::svgAttributeChanged): 'fxAttr' updating wasn't handled. Copy'n'paste error.

2008-07-01  Simon Hausmann  <hausmann@webkit.org>

        Fix the build, include SVGTransformList.h instead of
        SVGTransformlist.h

        * svg/SVGGradientElement.h:

2008-07-01  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Antti.

        <rdar://problem/6033080> REGRESSION: Some CH characters display as garbage on webpage for
        the first time.

        Test: fast/encoding/preload-encoding.html

        * html/PreloadScanner.cpp:
        (WebCore::PreloadScanner::tokenize): Reset charset when entering a tag, not just when
        starting a load.

2008-07-01  Nikolas Zimmermann  <zimmermann@kde.org>

        Reviewed by Antti & Eric.

        Fixes: http://bugs.webkit.org/show_bug.cgi?id=17779 (SVG 1.1 Errata demands "SVG JavaScript Liveness" support)

        SVG Errata states: "All SVG DOM objects that directly correspond to an
        attribute, e.g. the SVGAnimatedLength 'ry' in an SVGRectElement, are live. This
        means that any changes made to the attribute are immediately reflected in the
        corresponding SVG DOM object." (see linked URL on bug report)

        Until now only XML -> SVG DOM changes took affect, aka. changing the 'rx' attribute of a <rect>
        element resuted in changes when accessing 'rx' through SVG DOM (rx.baseVal.value).

        Add a new synchronization layer to handle SVG DOM -> XML changes.

        Global macro change #1: ANIMATED_PROPERTY_FORWARD_DECLARATIONS contains the class name where it's defined as first parameter.
        Global macro change #2: Add ANIMATED_PROPERTY_START_DECLARATIONS to all direct base-classes.
        Global macro change #3: Rename ANIMATED_PROPERTY_DEFINITIONS to ANIMATED_PROPERTY_DEFINITIONS_REFCOUNTED for refcounted types (ie. SVGTransformList*).

        Added test: svg/custom/svg-xml-dom-sync.html
        Fixed test: svg/hixie/dynamic/005-broken.xml (renamed to 005.xml)

        * dom/Element.cpp:
        (WebCore::Element::Element): Initialize the two new bits.
        (WebCore::Element::attributes): Add hooks to call into SVG attribute synchronization code, wrapped in ENABLE(SVG) blocks.
        (WebCore::Element::getAttribute): Ditto.
        (WebCore::Element::hasAttributes): Ditto.
        * dom/Element.h: Add two bits: m_synchronizedSVGAttributes/m_synchronizingSVGAttribute, to track synchronization status.
        (WebCore::Element::updateAnimatedSVGAttribute): New virtual function, handling the synronication, similar to updateStyleAttribute.
        * dom/NamedAttrMap.h: Make addAttribute/removeAttribute protected, from use within the ANIMATED_* macros.
        * svg/SVGAElement.h: Apply global macro change for ANIMATED_PROPERTY_FORWARD_DECLARATIONS.
        (WebCore::SVGAElement::contextElement): Return non-const value.
        * svg/SVGAltGlyphElement.h:
        (WebCore::SVGAltGlyphElement::contextElement): Ditto.
        * svg/SVGAnimateElement.h:
        (WebCore::SVGAnimateElement::contextElement): Ditto.
        * svg/SVGAnimateMotionElement.h:
        (WebCore::SVGAnimateMotionElement::contextElement): Ditto.
        * svg/SVGAnimateTransformElement.h:
        (WebCore::SVGAnimateTransformElement::contextElement): Ditto.
        * svg/SVGAnimatedTemplate.h: Add toString() conversion to all SVGAnimated* classes
        (WebCore::SVGAnimatedTemplate::toString):
        (WebCore::SVGAnimatedTemplate::associatedAttributeName):
        (WebCore::lookupOrCreateWrapper):
        (WebCore::SVGAnimatedAngle::SVGAnimatedAngle): 
        (WebCore::SVGAnimatedAngle::toString):
        (WebCore::SVGAnimatedBoolean::SVGAnimatedBoolean):
        (WebCore::SVGAnimatedBoolean::toString):
        (WebCore::SVGAnimatedEnumeration::SVGAnimatedEnumeration):
        (WebCore::SVGAnimatedEnumeration::toString):
        (WebCore::SVGAnimatedInteger::SVGAnimatedInteger):
        (WebCore::SVGAnimatedInteger::toString):
        (WebCore::SVGAnimatedLength::SVGAnimatedLength):
        (WebCore::SVGAnimatedLength::toString):
        (WebCore::SVGAnimatedLengthList::SVGAnimatedLengthList):
        (WebCore::SVGAnimatedLengthList::toString):
        (WebCore::SVGAnimatedNumber::SVGAnimatedNumber):
        (WebCore::SVGAnimatedNumber::toString):
        (WebCore::SVGAnimatedNumberList::SVGAnimatedNumberList):
        (WebCore::SVGAnimatedNumberList::toString):
        (WebCore::SVGAnimatedPreserveAspectRatio::SVGAnimatedPreserveAspectRatio):
        (WebCore::SVGAnimatedPreserveAspectRatio::toString):
        (WebCore::SVGAnimatedRect::SVGAnimatedRect):
        (WebCore::SVGAnimatedRect::toString):
        (WebCore::SVGAnimatedString::SVGAnimatedString):
        (WebCore::SVGAnimatedString::toString):
        (WebCore::SVGAnimatedTransformList::SVGAnimatedTransformList):
        (WebCore::SVGAnimatedTransformList::toString):
        (WebCore::SVGAnimatedType::SVGAnimatedType):
        * svg/SVGAnimationElement.h: Apply global macro change for ANIMATED_PROPERTY_FORWARD_DECLARATIONS.
        * svg/SVGCircleElement.h: Apply global macro change for ANIMATED_PROPERTY_FORWARD_DECLARATIONS.
        (WebCore::SVGCircleElement::contextElement): Return non-const value.
        * svg/SVGClipPathElement.h: Apply global macro change for ANIMATED_PROPERTY_FORWARD_DECLARATIONS.
        (WebCore::SVGClipPathElement::contextElement): Return non-const value.
        * svg/SVGComponentTransferFunctionElement.cpp: Apply ANIMATED_PROPERTY_DEFINITIONS_REFCOUNTED change.
        * svg/SVGComponentTransferFunctionElement.h: Add ANIMATED_PROPERTY_START_DECLARATIONS, as this class is a base class.
        * svg/SVGCursorElement.cpp: Wrap SVGLength objects in SVGLength() statements.
        (WebCore::SVGCursorElement::SVGCursorElement):
        * svg/SVGCursorElement.h: Apply global macro change for ANIMATED_PROPERTY_FORWARD_DECLARATIONS. Add ANIMATED_PROPERTY_START_DECLARATIONS.
        (WebCore::SVGCursorElement::contextElement): Return non-const value.
        * svg/SVGDefsElement.h: Apply global macro change for ANIMATED_PROPERTY_FORWARD_DECLARATIONS.
        (WebCore::SVGDefsElement::contextElement): Return non-const value.
        * svg/SVGElement.cpp:
        (WebCore::SVGElement::updateAnimatedSVGAttribute): Override virtual function from Element, to handle SVG<->XML DOM synchronization.
        (WebCore::SVGElement::setSynchronizedSVGAttributes):
        * svg/SVGElement.h: Add helper class "StoredTypeWithDirtyFlag".
        (StoredTypeWithDirtyFlag::StoredTypeWithDirtyFlag): Tracks a type and a flag indicating that SVG<->XML DOM synchronization has to be done.
        (StoredTypeWithDirtyFlag::operator=):
        (StoredTypeWithDirtyFlag::operator==):
        (StoredTypeWithDirtyFlag::operator!=):
        (StoredTypeWithDirtyFlag::operator StoredType):
        (WebCore::SVGElement::invokeSVGPropertySynchronizer): New set of functions taking care of invoking the update handlers.
        (WebCore::SVGElement::invokeAllSVGPropertySynchronizers): Ditto.
        (WebCore::SVGElement::addSVGPropertySynchronizer): Ditto.
        * svg/SVGEllipseElement.cpp: Wrap SVGLength objects in SVGLength() statements.
        (WebCore::SVGEllipseElement::SVGEllipseElement):
        * svg/SVGEllipseElement.h: Apply global macro change for ANIMATED_PROPERTY_FORWARD_DECLARATIONS.
        (WebCore::SVGEllipseElement::contextElement): Return non-const value.
        * svg/SVGExternalResourcesRequired.h: Change contextElement() to return a non-const value.
        * svg/SVGFEBlendElement.h:
        (WebCore::SVGFEBlendElement::contextElement): Return non-const value.
        * svg/SVGFEColorMatrixElement.cpp: Apply ANIMATED_PROPERTY_DEFINITIONS_REFCOUNTED change.
        * svg/SVGFEColorMatrixElement.h:
        (WebCore::SVGFEColorMatrixElement::contextElement): Return non-const value.
        * svg/SVGFEComponentTransferElement.h:
        (WebCore::SVGFEComponentTransferElement::contextElement): Return non-const value.
        * svg/SVGFECompositeElement.h:
        (WebCore::SVGFECompositeElement::contextElement): Return non-const value.
        * svg/SVGFEDiffuseLightingElement.h:
        (WebCore::SVGFEDiffuseLightingElement::contextElement): Return non-const value.
        * svg/SVGFEDisplacementMapElement.h:
        (WebCore::SVGFEDisplacementMapElement::contextElement): Return non-const value.
        * svg/SVGFEFloodElement.h:
        (WebCore::SVGFEFloodElement::contextElement): Return non-const value.
        * svg/SVGFEGaussianBlurElement.h:
        (WebCore::SVGFEGaussianBlurElement::contextElement): Return non-const value.
        * svg/SVGFEImageElement.cpp: Apply ANIMATED_PROPERTY_DEFINITIONS_REFCOUNTED change.
        * svg/SVGFEImageElement.h: Apply global macro change for ANIMATED_PROPERTY_FORWARD_DECLARATIONS.
        (WebCore::SVGFEImageElement::contextElement): Return non-const value.
        * svg/SVGFELightElement.h: Add ANIMATED_PROPERTY_START_DECLARATIONS, as this is a base class.
        * svg/SVGFEMergeElement.h:
        (WebCore::SVGFEMergeElement::contextElement): Return non-const value.
        * svg/SVGFEMergeNodeElement.h: Add ANIMATED_PROPERTY_START_DECLARATIONS, as this is a base class.
        (WebCore::SVGFEMergeNodeElement::contextElement): Return non-const value.
        * svg/SVGFEOffsetElement.h:
        (WebCore::SVGFEOffsetElement::contextElement): Return non-const value.
        * svg/SVGFESpecularLightingElement.h:
        (WebCore::SVGFESpecularLightingElement::contextElement): Return non-const value.
        * svg/SVGFETileElement.h:
        (WebCore::SVGFETileElement::contextElement): Return non-const value.
        * svg/SVGFETurbulenceElement.h:
        (WebCore::SVGFETurbulenceElement::contextElement): Return non-const value.
        * svg/SVGFilterElement.cpp: Wrap SVGLength objects in SVGLength() statements.
        (WebCore::SVGFilterElement::SVGFilterElement):
        * svg/SVGFilterElement.h: Apply global macro change for ANIMATED_PROPERTY_FORWARD_DECLARATIONS.
        (WebCore::SVGFilterElement::contextElement): Return non-const value.
        * svg/SVGFilterPrimitiveStandardAttributes.cpp: Wrap SVGLength objects in SVGLength() statements.
        (WebCore::SVGFilterPrimitiveStandardAttributes::SVGFilterPrimitiveStandardAttributes):
        * svg/SVGFilterPrimitiveStandardAttributes.h: Apply global macro change for ANIMATED_PROPERTY_FORWARD_DECLARATIONS.
        (WebCore::SVGFilterPrimitiveStandardAttributes::contextElement): Return non-const value.
        * svg/SVGFitToViewBox.cpp: Apply ANIMATED_PROPERTY_DEFINITIONS_REFCOUNTED change.
        * svg/SVGFitToViewBox.h: Change contextElement() to return a non-const value.
        * svg/SVGFontElement.h:
        (WebCore::SVGFontElement::contextElement): Return non-const value.
        * svg/SVGForeignObjectElement.cpp: Wrap SVGLength objects in SVGLength() statements.
        (WebCore::SVGForeignObjectElement::SVGForeignObjectElement):
        * svg/SVGForeignObjectElement.h: Apply global macro change for ANIMATED_PROPERTY_FORWARD_DECLARATIONS.
        (WebCore::SVGForeignObjectElement::contextElement): Return non-const value.
        * svg/SVGGElement.h: Apply global macro change for ANIMATED_PROPERTY_FORWARD_DECLARATIONS.
        (WebCore::SVGGElement::contextElement): Return non-const value.
        * svg/SVGGradientElement.cpp: Apply ANIMATED_PROPERTY_DEFINITIONS_REFCOUNTED change.
        * svg/SVGGradientElement.h: Apply global macro change for ANIMATED_PROPERTY_FORWARD_DECLARATIONS.
        * svg/SVGImageElement.cpp: Apply ANIMATED_PROPERTY_DEFINITIONS_REFCOUNTED change. Wrap SVGLength objects in SVGLength() statements.
        (WebCore::SVGImageElement::SVGImageElement):
        * svg/SVGImageElement.h: Apply global macro change for ANIMATED_PROPERTY_FORWARD_DECLARATIONS.
        (WebCore::SVGImageElement::contextElement): Return non-const value.
        * svg/SVGLengthList.cpp:
        (WebCore::SVGLengthList::valueAsString): Add new function converting SVG values to strings.
        * svg/SVGLengthList.h:
        * svg/SVGLineElement.cpp: Wrap SVGLength objects in SVGLength() statements.
        (WebCore::SVGLineElement::SVGLineElement):
        * svg/SVGLineElement.h: Apply global macro change for ANIMATED_PROPERTY_FORWARD_DECLARATIONS.
        (WebCore::SVGLineElement::contextElement): Return non-const value.
        * svg/SVGLinearGradientElement.cpp:
        (WebCore::SVGLinearGradientElement::SVGLinearGradientElement): Wrap SVGLength objects in SVGLength() statements.
        (WebCore::SVGLinearGradientElement::collectGradientProperties):
        * svg/SVGLinearGradientElement.h:
        (WebCore::SVGLinearGradientElement::contextElement): Return non-const value.
        * svg/SVGMPathElement.h:
        (WebCore::SVGMPathElement::contextElement): Return non-const value.
        * svg/SVGMarkerElement.cpp: Apply ANIMATED_PROPERTY_DEFINITIONS_REFCOUNTED change. Wrap SVGLength objects in SVGLength() statements.
        (WebCore::SVGMarkerElement::SVGMarkerElement):
        * svg/SVGMarkerElement.h: Apply global macro change for ANIMATED_PROPERTY_FORWARD_DECLARATIONS.
        (WebCore::SVGMarkerElement::contextElement): Return non-const value.
        * svg/SVGMaskElement.cpp: Wrap SVGLength objects in SVGLength() statements.
        (WebCore::SVGMaskElement::SVGMaskElement):
        * svg/SVGMaskElement.h: Apply global macro change for ANIMATED_PROPERTY_FORWARD_DECLARATIONS.
        (WebCore::SVGMaskElement::contextElement): Return non-const value.
        * svg/SVGNumberList.cpp:
        (WebCore::SVGNumberList::valueAsString): Add new function converting SVG values to strings.
        * svg/SVGNumberList.h:
        * svg/SVGPathElement.h: Apply global macro change for ANIMATED_PROPERTY_FORWARD_DECLARATIONS.
        (WebCore::SVGPathElement::contextElement): Return non-const value.
        * svg/SVGPatternElement.cpp: Apply ANIMATED_PROPERTY_DEFINITIONS_REFCOUNTED change. Wrap SVGLength objects in SVGLength() statements.
        (WebCore::SVGPatternElement::SVGPatternElement):
        (WebCore::SVGPatternElement::collectPatternProperties):
        * svg/SVGPatternElement.h: Apply global macro change for ANIMATED_PROPERTY_FORWARD_DECLARATIONS.
        (WebCore::SVGPatternElement::contextElement): Return non-const value.
        * svg/SVGPolyElement.h: Apply global macro change for ANIMATED_PROPERTY_FORWARD_DECLARATIONS.
        (WebCore::SVGPolyElement::contextElement): Return non-const value.
        * svg/SVGPreserveAspectRatio.cpp:
        (WebCore::SVGPreserveAspectRatio::valueAsString): Add new function converting SVG values to strings.
        * svg/SVGPreserveAspectRatio.h:
        * svg/SVGRadialGradientElement.cpp: Wrap SVGLength objects in SVGLength() statements.
        (WebCore::SVGRadialGradientElement::SVGRadialGradientElement):
        (WebCore::SVGRadialGradientElement::svgAttributeChanged):
        (WebCore::SVGRadialGradientElement::collectGradientProperties):
        * svg/SVGRadialGradientElement.h:
        (WebCore::SVGRadialGradientElement::contextElement): Return non-const value.
        * svg/SVGRectElement.cpp: Wrap SVGLength objects in SVGLength() statements.
        (WebCore::SVGRectElement::SVGRectElement):
        * svg/SVGRectElement.h: Apply global macro change for ANIMATED_PROPERTY_FORWARD_DECLARATIONS.
        (WebCore::SVGRectElement::contextElement): Return non-const value.
        * svg/SVGSVGElement.cpp: Wrap SVGLength objects in SVGLength() statements.
        (WebCore::SVGSVGElement::SVGSVGElement):
        (WebCore::SVGSVGElement::currentView): Pass non-const SVGSVGElement* object to SVGViewSpec.
        * svg/SVGSVGElement.h: Apply global macro change for ANIMATED_PROPERTY_FORWARD_DECLARATIONS.
        (WebCore::SVGSVGElement::contextElement): Return non-const value.
        * svg/SVGScriptElement.h: Apply global macro change for ANIMATED_PROPERTY_FORWARD_DECLARATIONS.
        (WebCore::SVGScriptElement::contextElement): Return non-const value.
        * svg/SVGStyledElement.h: Add ANIMATED_PROPERTY_START_DECLARATIONS, as this is a base class.
        * svg/SVGStyledTransformableElement.cpp: Apply ANIMATED_PROPERTY_DEFINITIONS_REFCOUNTED change.
        * svg/SVGStyledTransformableElement.h:
        * svg/SVGSwitchElement.h: Apply global macro change for ANIMATED_PROPERTY_FORWARD_DECLARATIONS.
        (WebCore::SVGSwitchElement::contextElement): Return non-const value.
        * svg/SVGSymbolElement.h: Apply global macro change for ANIMATED_PROPERTY_FORWARD_DECLARATIONS.
        (WebCore::SVGSymbolElement::contextElement): Return non-const value.
        * svg/SVGTRefElement.h: Apply global macro change for ANIMATED_PROPERTY_FORWARD_DECLARATIONS.
        (WebCore::SVGTRefElement::contextElement): Return non-const value.
        * svg/SVGTSpanElement.h:
        (WebCore::SVGTSpanElement::contextElement): Return non-const value.
        * svg/SVGTextContentElement.cpp: Wrap SVGLength objects in SVGLength() statements.
        (WebCore::SVGTextContentElement::SVGTextContentElement):
        * svg/SVGTextContentElement.h: Apply global macro change for ANIMATED_PROPERTY_FORWARD_DECLARATIONS.
        * svg/SVGTextElement.cpp: Apply ANIMATED_PROPERTY_DEFINITIONS_REFCOUNTED change.
        * svg/SVGTextElement.h:
        (WebCore::SVGTextElement::contextElement): Return non-const value.
        * svg/SVGTextPathElement.cpp: Wrap SVGLength objects in SVGLength() statements.
        (WebCore::SVGTextPathElement::SVGTextPathElement):
        * svg/SVGTextPathElement.h: Apply global macro change for ANIMATED_PROPERTY_FORWARD_DECLARATIONS.
        (WebCore::SVGTextPathElement::contextElement): Return non-const value.
        * svg/SVGTextPositioningElement.cpp: Apply ANIMATED_PROPERTY_DEFINITIONS_REFCOUNTED change.
        * svg/SVGTextPositioningElement.h:
        * svg/SVGTransformList.cpp:
        (SVGTransformList::valueAsString): Add new function converting SVG values to strings.
        * svg/SVGTransformList.h:
        * svg/SVGURIReference.h: Change contextElement() to return a non-const value.
        * svg/SVGUseElement.cpp: Wrap SVGLength objects in SVGLength() statements.
        (WebCore::SVGUseElement::SVGUseElement):
        * svg/SVGUseElement.h: Apply global macro change for ANIMATED_PROPERTY_FORWARD_DECLARATIONS.
        (WebCore::SVGUseElement::contextElement): Return non-const value.
        * svg/SVGViewElement.h: Apply global macro change for ANIMATED_PROPERTY_FORWARD_DECLARATIONS.
        (WebCore::SVGViewElement::contextElement): Return non-const value.
        * svg/SVGViewSpec.cpp:
        (WebCore::SVGViewSpec::SVGViewSpec): Pass non-const context element in constructor.
        (WebCore::SVGViewSpec::contextElement): Return non-const value.
        * svg/SVGViewSpec.h:

2008-07-01  Alex Mathews  <possessedpenguinbob@gmail.com>

        Reviewed by Nikolas Zimmermann.

        Class name changes for SVG Light Effect files. The class names that changed :

        SVGLightSource -> LightSource
        SVGDistantLightSource -> DistantLightSource
        SVGPointLightSource -> PointLightSource
        SVGSpotLightSource -> SpotLightSource

        Every other file that is changed is just propagating the class name changes to
        dependent files.

        * svg/SVGFEDiffuseLightingElement.cpp:
        (WebCore::SVGFEDiffuseLightingElement::updateLights):
        * svg/SVGFEDistantLightElement.cpp:
        (WebCore::SVGFEDistantLightElement::lightSource):
        * svg/SVGFEDistantLightElement.h:
        * svg/SVGFELightElement.h:
        * svg/SVGFEPointLightElement.cpp:
        (WebCore::SVGFEPointLightElement::lightSource):
        * svg/SVGFEPointLightElement.h:
        * svg/SVGFESpecularLightingElement.cpp:
        (WebCore::SVGFESpecularLightingElement::updateLights):
        * svg/SVGFESpotLightElement.cpp:
        (WebCore::SVGFESpotLightElement::lightSource):
        * svg/SVGFESpotLightElement.h:
        * svg/graphics/filters/SVGDistantLightSource.h:
        (WebCore::DistantLightSource::DistantLightSource):
        (WebCore::DistantLightSource::azimuth):
        (WebCore::DistantLightSource::elevation):
        * svg/graphics/filters/SVGFEDiffuseLighting.cpp:
        (WebCore::SVGFEDiffuseLighting::lightSource):
        (WebCore::SVGFEDiffuseLighting::setLightSource):
        * svg/graphics/filters/SVGFEDiffuseLighting.h:
        * svg/graphics/filters/SVGFESpecularLighting.cpp:
        (WebCore::SVGFESpecularLighting::lightSource):
        (WebCore::SVGFESpecularLighting::setLightSource):
        * svg/graphics/filters/SVGFESpecularLighting.h:
        * svg/graphics/filters/SVGLightSource.cpp:
        (WebCore::PointLightSource::externalRepresentation):
        (WebCore::SpotLightSource::externalRepresentation):
        (WebCore::DistantLightSource::externalRepresentation):
        * svg/graphics/filters/SVGLightSource.h:
        (WebCore::):
        (WebCore::LightSource::LightSource):
        (WebCore::LightSource::~LightSource):
        (WebCore::LightSource::type):
        * svg/graphics/filters/SVGPointLightSource.h:
        (WebCore::PointLightSource::PointLightSource):
        (WebCore::PointLightSource::position):
        * svg/graphics/filters/SVGSpotLightSource.h:
        (WebCore::SpotLightSource::SpotLightSource):
        (WebCore::SpotLightSource::position):
        (WebCore::SpotLightSource::direction):
        (WebCore::SpotLightSource::specularExponent):
        (WebCore::SpotLightSource::limitingConeAngle):
        * svg/graphics/filters/cg/SVGFEDiffuseLightingCg.mm:
        (WebCore::SVGFEDiffuseLighting::getCIFilter):
        * svg/graphics/filters/cg/SVGFEHelpersCg.h:
        * svg/graphics/filters/cg/SVGFEHelpersCg.mm:
        (WebCore::getLightVectors):
        * svg/graphics/filters/cg/SVGFESpecularLightingCg.mm:
        (WebCore::SVGFESpecularLighting::getCIFilter):

2008-07-01  Alp Toker  <alp@nuanti.com>

        Rubber-stamped by Holger.

        autotools cleanup: move some GTK+-specific sources from libwebcore to
        libwebcoregtk.

        * GNUmakefile.am:

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

        Reviewed by Oliver Hunt.

        - fix the non-SVG build

        * css/CSSValueKeywords.in: Added 'all'.
        * css/SVGCSSValueKeywords.in: Removed 'all'.

2008-07-01  Simon Hausmann  <hausmann@webkit.org>

        Build fix, include DateInstance.h.

        * bridge/qt/qt_runtime.cpp:

2008-06-30  Adele Peterson  <adele@apple.com>

        Reviewed by Oliver.

        Fix for <rdar://problem/5882050> clicking in hidden close box area of empty searchfield causes mousedown to stop firing

        Test: fast/forms/search-hidden-cancel-button.html

        * html/HTMLTextFieldInnerElement.cpp: (WebCore::HTMLSearchFieldCancelButtonElement::defaultEventHandler):
          Don't start capturing mouse events if the cancel button isn't visible.  This was causing the button to start but never stop capturing mouse events.

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

        Rubber-stamped by Darin Adler.

        Split InternalFunction into its own header file.

        * ForwardingHeaders/kjs/InternalFunction.h: Added.
        * bridge/runtime_method.h:

2008-06-30  Adele Peterson  <adele@apple.com>

        Reviewed by Anders.

        Fix for <rdar://problem/5301322> REGRESSION: Select All selects the whole page when used in readonly textareas

        Test: editing/selection/select-all-textarea.html

        * dom/Node.cpp:
        (WebCore::Node::shadowAncestorNode): Break out code to find the root of the shadow tree into a new helper function.
        (WebCore::Node::shadowTreeRootNode): Added helper function.
        * dom/Node.h:
        * dom/Range.cpp: (WebCore::Range::shadowTreeRootNode): Added helper function.
        * dom/Range.h:
        * editing/Selection.cpp: (WebCore::Selection::shadowTreeRootNode): ditto.
        * editing/Selection.h:
        * editing/SelectionController.h: (WebCore::SelectionController::shadowTreeRootNode): ditto.
        * editing/SelectionController.cpp: (WebCore::SelectionController::selectAll):
        If the selection is in a shadow tree, only select the contents of that shadow tree, not the whole document.
        * page/Frame.cpp:
        (WebCore::Frame::findString): Use the new shadowTreeRootNode helper functions.
        (WebCore::Frame::markAllMatchesForText): ditto.

2008-06-30  chris fleizach  <cfleizach@apple.com>

        Reviewed by Beth Dakin

        <rdar://problem/4180780> Add attribute to get all the radio buttons in a set

        * page/AccessibilityObject.cpp:
        (WebCore::AccessibilityObject::linkedUIElements):
        * page/AccessibilityObject.h:
        * page/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::internalLinkElement):
        (WebCore::AccessibilityRenderObject::addRadioButtonGroupMembers):
        (WebCore::AccessibilityRenderObject::linkedUIElements):
        * page/AccessibilityRenderObject.h:
        * page/mac/AccessibilityObjectWrapper.mm:
        (-[AccessibilityObjectWrapper accessibilityAttributeValue:]):

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

        Reviewed by Adele Peterson.

        - WebCore part of <rdar://problem/3881497> Writing direction context menu item has no effect on text typed in Safari

        * WebCore.base.exp: Removed Editor::setBaseWritingDirection() and added
        Frame::setSelectionBaseWritingDirection().
        * page/ContextMenuController.cpp:
        (WebCore::ContextMenuController::contextMenuItemSelected): Changed to
        call Frame::setSelectionBaseWritingDirection().
        * page/Frame.cpp:
        (WebCore::Frame::setSelectionBaseWritingDirection): Added. If the
        focused node is a text field or text area, changes its 'dir' attribute.
        This is what IE does when the user changes the writing direction in a
        text control. Otherwise, calls down to Editor::setBaseWritingDirection().
        * page/Frame.h:

2008-06-30  David Kilzer  <ddkilzer@apple.com>

        Improve HTMLObjectElement data encapsulation

        Reviewed by Dave Hyatt.

        HTMLObjectElement has some public member variables that should be
        private with accessor methods.

        No test cases added since there is no change in behavior.

        * html/HTMLObjectElement.cpp:
        (WebCore::HTMLObjectElement::HTMLObjectElement): Reorder
        initialization of member variables to match defined order in header.
        * html/HTMLObjectElement.h:
        (WebCore::HTMLObjectElement::classId): Added.
        (WebCore::HTMLObjectElement::url): Added.
        (WebCore::HTMLObjectElement::serviceType): Added.
        * rendering/RenderPartObject.cpp:
        (WebCore::RenderPartObject::updateWidget): Use new accessor methods
        in HTMLObjectElement now that its member variables are private.

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

        Reviewed by Anders Carlsson.

        - remove unused member variable

        * page/Page.h: Removed Page::m_focusedNode.

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

        Reviewed by Adam.

        <rdar://problem/6014209>
        Crash when loading manifest from application cache fails
        
        There is no need to set any handles to 0 after calling cacheUpdateFailed(), since
        that is done inside the function. Furthermore, after calling cacheUpdateFailed() the cache
        group could be deleted causing us to access freed memory and then crashing.
        
        * loader/appcache/ApplicationCacheGroup.cpp:
        (WebCore::ApplicationCacheGroup::didReceiveResponse):
        (WebCore::ApplicationCacheGroup::didFail):
        (WebCore::ApplicationCacheGroup::didFailToLoadManifest):

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

        Fix <rdar://5954749> Assertion failure due to HashTable's use of
        operator&

        Reviewed by Ada Chan.

        * bindings/js/JSSVGPODTypeWrapper.h:
        * dom/Document.h:
        * dom/StyledElement.cpp:
        * platform/graphics/FontCache.cpp:
        * platform/graphics/IntSizeHash.h:
        (WTF::):
        * platform/text/StringHash.h:
        * platform/win/COMPtr.h:
        * svg/SVGAnimatedTemplate.h:
        Updated all custom HashTraits for HashTable changes.

2008-06-30  Simon Hausmann  <hausmann@webkit.org>

        Fix the Qt build.

        Added missing includes and changed getItem array calls to use get()
        instead.

        * bridge/qt/qt_runtime.cpp:
        (KJS::Bindings::convertValueToQVariant):

2008-06-29  David Smith  <catfish.man@gmail.com>

        Rubberstamped by Sam Weinig.

        Change a redundant node->isElement() check to an ASSERT for a 1.3% speedup on getElementsByTagName.

        * dom/TagNodeList.cpp:
        (WebCore::TagNodeList::nodeMatches):

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

        Reviewed by Darin Adler.

        - fix SVG layout test regressions

        * css/CSSFontSelector.cpp:
        (WebCore::CSSFontSelector::addFontFaceRule): Made this function work
        again with primitive values, because the @font-face rules SVG fonts
        create still use a single primitive value rather than a value list.

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

        Reviewed by Sam Weinig.

        - fix <rdar://problem/5734440> Specifying a font-weight for @font-face not working

        Tests: fast/css/font-face-descriptor-multiple-values-parsing.html
               fast/css/font-face-descriptor-multiple-values.html

        * css/CSSFontSelector.cpp:
        (WebCore::CSSFontSelector::addFontFaceRule): Changed to work with value
        lists for the descriptor properties.

        * css/CSSParser.cpp:
        (WebCore::CSSParser::CSSParser): Initialize m_hasFontFaceOnlyValues.
        (WebCore::CSSParser::parseValue): Added a call to
        deleteFontFaceOnlyValues() if necessary.
        (WebCore::CSSParser::parseDeclaration): Ditto.
        (WebCore::CSSParser::clearProperties): Added code to reset
        m_hasFontFaceOnlyValues to false.
        (WebCore::CSSParser::parseFontStyle): Added. If there is a single
        valid identifier other than 'all', creates a CSSPrimitiveValue and
        assigns it to the property. If 'all' is the only value, or if there are
        multiple valid identifiers that are not 'all', creates a CSSValueList
        and assigns it to the property, and sets m_hasFontFaceOnlyValues to
        true.
        (WebCore::CSSParser::parseFontVariant): Ditto.
        (WebCore::CSSParser::parseFontWeight): Ditto.
        (WebCore::CSSParser::createStyleRule): Added a call to
        deleteFontFaceOnlyValues().
        (WebCore::CSSParser::createFontFaceRule): Added code to change
        font descriptor properties that had only one value, and therefore were
        assigned a CSSPrimitiveValue, into CSSValueLists containing that value.
        (WebCore::CSSParser::deleteFontFaceOnlyValues): Added. Retroactively
        invalidates font descriptor properties that had values that are only
        allowed in @font-face. Those are identified by having CSSValueLists
        rather than CSSPrimitiveValues as their values.
        * css/CSSParser.h: Added m_hasFontFaceOnlyValues, a flag that says that
        font descriptor property values that are only valid in @font-face were
        encountered. This is used when the style declaration is created (and we
        finally know if it is @font-face or not) to delete invalid properties
        if needed.

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

        Reviewed by Sam and Cameron.

        - fix https://bugs.webkit.org/show_bug.cgi?id=19805
          Array.concat turns missing array elements into "undefined"

        * bridge/jni/jni_utility.cpp:
        (KJS::Bindings::convertArrayInstanceToJavaArray):
        Use get instead of getItem, since we always want to consider values from the
        prototypes when looking at JavaScript arrays.

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

        Reviewed by Darin Adler.

        - allow document markers to touch or overlap if they are not of the same type

        Cannot be tested in DumpRenderTree

        * dom/Document.cpp:
        (WebCore::Document::addMarker):
        * rendering/InlineTextBox.cpp:
        (WebCore::InlineTextBox::paintDocumentMarkers):

2008-06-28  Sam Weinig  <sam@webkit.org>

        Rubber-stamped by Darin Adler.

        Update includes after remaming string_object.h to StringObject.h and
        splitting out StringObjectThatMasqueradesAsUndefined, StringConstructor
        and StringPrototype.

        * ForwardingHeaders/kjs/StringObject.h: Copied from WebCore/ForwardingHeaders/kjs/string_object.h.
        * ForwardingHeaders/kjs/StringObjectThatMasqueradesAsUndefined.h: Added.
        * ForwardingHeaders/kjs/StringPrototype.h: Added.
        * ForwardingHeaders/kjs/string_object.h: Removed.
        * bindings/js/JSCSSStyleDeclarationCustom.cpp:

2008-06-28  Sam Weinig  <sam@webkit.org>

        Rubber-stamped by Oliver Hunt.

        Update includes after remaming object_object.h to ObjectPrototype.h and
        splitting FunctionConstructor out of FunctionPrototype.h

        * ForwardingHeaders/kjs/FunctionConstructor.h: Added.
        * ForwardingHeaders/kjs/ObjectPrototype.h: Copied from WebCore/ForwardingHeaders/kjs/object_object.h.
        * ForwardingHeaders/kjs/object_object.h: Removed.
        * bindings/js/JSEventListener.cpp:
        * bindings/scripts/CodeGeneratorJS.pm:
        * bridge/qt/qt_instance.cpp:

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

        Reviewed by Darin Adler.

        - fix <rdar://problem/5994621> REGRESSION (r31090-r31114): Weather widget shows missing image icons briefly when (re)loaded

        * html/HTMLImageLoader.cpp:
        (WebCore::HTMLImageLoader::updateFromElement): Changed to not load an
        image if the 'src' attribute is the empty string and the document's base
        URI is a file: URL.

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

        Reviewed by Dan Bernstein.

        <rdar://problem/6025499> Make Cross-site XHR match the final specification

        Update the implemented subset of Access-Control for XMLHttpRequest to the 
        latest version. (Editor's Draft 25 May 2008)

        - Now differentiates between simple and non-simple cross-site requests, the later
          requiring a preflight.
        - Now sends request headers cross-site, limited by a blacklist.
        - Now allows access to cross-site response headers, limited by a whitelist.
        - Now sends request entity body for non-get cross-site requests after preflight.

        Tests: http/tests/xmlhttprequest/access-control-basic-blacklist-request-headers.html
               http/tests/xmlhttprequest/access-control-basic-get-fail-non-simple.html
               http/tests/xmlhttprequest/access-control-basic-whitelist-response-headers.html

        * xml/XMLHttpRequest.cpp:
        (WebCore::isOnAccessControllRequestHeaderBlackList):
        (WebCore::isOnAccessControlSimpleRequestHeaderWhitelist):
        (WebCore::isOnAccessControlResponseHeaderWhitelist):
        (WebCore::XMLHttpRequest::XMLHttpRequest):
        (WebCore::XMLHttpRequest::createRequest):
        (WebCore::XMLHttpRequest::makeSameOriginRequest):
        (WebCore::XMLHttpRequest::isSimpleCrossSiteAccessRequest):
        (WebCore::XMLHttpRequest::makeCrossSiteAccessRequest):
        (WebCore::XMLHttpRequest::makeSimpleCrossSiteAccessRequest):
        (WebCore::XMLHttpRequest::makeCrossSiteAccessRequestWithPreflight):
        (WebCore::XMLHttpRequest::handleAsynchronousPreflightResult):
        (WebCore::XMLHttpRequest::loadRequestAsynchronously):
        (WebCore::XMLHttpRequest::abort):
        (WebCore::XMLHttpRequest::clearRequest):
        (WebCore::XMLHttpRequest::setRequestHeader):
        (WebCore::XMLHttpRequest::setRequestHeaderInternal):
        (WebCore::XMLHttpRequest::getAllResponseHeaders):
        (WebCore::XMLHttpRequest::getResponseHeader):
        (WebCore::XMLHttpRequest::didFinishLoading):
        (WebCore::XMLHttpRequest::didFinishLoadingPreflight):
        (WebCore::XMLHttpRequest::didReceiveResponse):
        (WebCore::XMLHttpRequest::didReceiveResponsePreflight):
        (WebCore::XMLHttpRequest::didReceiveData):
        * xml/XMLHttpRequest.h:

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

        Rubber-stamped by Mark Rowe.

        Clean up sorting in WebCore.xcodeproj.

        * WebCore.xcodeproj/project.pbxproj:

2008-06-27  Jan Michael Alonzo  <jmalonzo@webkit.org>

        Reviewed by Darin Adler.

        Remove unnecessary options to make_names.pl command line
        http://bugs.webkit.org/show_bug.cgi?id=19777

        * DerivedSources.make:
        * GNUmakefile.am:

2008-06-27  Adam Barth  <abarth@webkit.org>

        Reviewed by Darin Adler.

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

        Properly handle untermianted <!-- comments in <textarea>s.

        Tests: fast/parser/open-comment-in-script-tricky.html
               fast/parser/open-comment-in-style.html
               fast/parser/open-comment-in-textarea.html

        * html/HTMLTokenizer.cpp:
        (WebCore::HTMLTokenizer::finish):

2008-06-27  Adam Barth  <abarth@webkit.org>

        Reviewed by Darin Alder.

        Fix <https://bugs.webkit.org/show_bug.cgi?id=19784>:
          Text areas in Wikipedia edit pages are empty, following content is missing

        Don't treat entities as comment starters in parseSpecial.

        Tests: fast/parser/comment-in-iframe.html
               fast/parser/entity-comment-in-iframe.html
               fast/parser/entity-comment-in-script-tricky.html
               fast/parser/entity-comment-in-style.html
               fast/parser/entity-comment-in-textarea.html
               fast/parser/entity-comment-in-title.html

        * html/HTMLTokenizer.cpp:
        (WebCore::HTMLTokenizer::parseSpecial):

2008-06-27  Antti Koivisto  <antti@apple.com>

        Reviewed by Oliver.
        
        <rdar://problem/6030720> 
        REGRESSION: Discrete animation between incompatible paths does not work

        Fall back to discrete path animation if paths are not suitable for morphing.
        
        Test: svg/custom/animate-path-discrete.svg
        
        * svg/SVGAnimateElement.cpp:
        (WebCore::SVGAnimateElement::calculateAnimatedValue):

2008-06-26  David Smith  <catfish.man@gmail.com>

        Reviewed by Sam Weinig.
        
        https://bugs.webkit.org/show_bug.cgi?id=19002
        
        Optimize simple id selectors in querySelector/querySelectorAll. 
        ~4.4x speedup on the 4 subtests of http://webkit.org/perf/slickspeed/ that it applies to.

        * dom/Document.h:
        (WebCore::Document::containsMultipleElementsWithId): Added to allow optimizing the common case of no duplicates
        * dom/Node.cpp:
        (WebCore::Node::querySelector): Uses getElementById instead of DOM traversal where possible now
        * dom/SelectorNodeList.cpp:
        (WebCore::createSelectorNodeList): Uses getElementById instead of DOM traversal where possible now

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

        Reviewed by Darin Adler.

        - fix <rdar://problem/3099526> Find command doesn't search form input controls (textareas and text fields)
          http://bugs.webkit.org/show_bug.cgi?id=7023

        Test: editing/selection/find-in-text-control.html

        * WebCore.base.exp: Updated the TextIterator constructor signature.

        * editing/TextIterator.cpp:
        (WebCore::TextIterator::TextIterator): Added an enterTextControls
        boolean parameter that determines whether the iterator should visit text
        inside text areas and text fields. Added code to initialize the
        m_inShadowContent member variable based on whether the range is in
        shadow content.
        (WebCore::TextIterator::advance): Added code to step out of shadow
        content.
        (WebCore::TextIterator::handleReplacedElement): Added code to enter
        text controls if desired.
        (WebCore::CharacterIterator::CharacterIterator): Added an
        enterTextControls boolean parameter that determines whether the iterator
        should visit text inside text areas and text fields. This is passed to
        the TextIterator constructor.
        (WebCore::findPlainText): Changed to use a CharacterIterator that
        visits text controls.

        * editing/TextIterator.h: Added member variables to track whether the
        current node is in a shadow tree and whether the iterator should visit
        text controls.

        * page/Frame.cpp:
        (WebCore::Frame::findString): Changed to find inside text controls.
        (WebCore::Frame::markAllMatchesForText): Ditto.

        * rendering/RenderTextControl.cpp:
        (WebCore::RenderTextControl::innerTextElement): Added.
        * rendering/RenderTextControl.h: Added innerTextElement(), a private
        accessor method that is accessible to TextIterator through class
        friendship.

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

        Reviewed by Geoff.

        * bridge/runtime.h: Added include of JSString.h since jsString will soon
        change to return a JSString*.

2008-06-26  Adele Peterson  <adele@apple.com>

        Fix suggested by Eric Carlson, added by me, reviewed by Adam.

        Fix for <rdar://problem/5733006> <video> and <audio> element should not prompt user for missing files

        * platform/graphics/mac/MediaPlayerPrivateQTKit.mm: (WebCore::MediaPlayerPrivate::createQTMovie):
        Set object with key QTMovieAskUnresolvedDataRefsAttribute to NO in the attributes dictionary passed to -[QTMovie initWithAttributes:]

2008-06-26  Sam Weinig  <sam@webkit.org>

        Reviewed by John Sullivan.

        <rdar://problem/6031969> Crash in SecurityOrigin code going Forward to a page in the back/forward cache

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::open): Make sure to update the SecurityOrigin and URL of the 
        DOMWindow when opening a CachedPage.

2008-06-26  Eric Seidel  <eric@webkit.org>

        Reviewed by Beth Dakin.

        CSS @import statements can cause DocLoader to use
        a dead Frame pointer.
        https://bugs.webkit.org/show_bug.cgi?id=19618
        
        The fix is to get rid of the Frame pointer on DocLoader.
        
        I also took this opportunity to clean up Document::detach
        a little to make it clear why we clear the m_frame pointer
        there, and to note that in the future we should stop
        using Node::detach to mean "tear down the whole rendering
        tree and detach from the frame".

        Test: I don't know how to make a good test for this, the test
        we have is network timing dependent and does not make a good
        layout test.

        * dom/Document.cpp:
        (WebCore::Document::Document):
        (WebCore::Document::detach):
        (WebCore::Document::clearFramePointer):
        * dom/Document.h:
        * loader/DocLoader.cpp:
        (WebCore::DocLoader::frame):
        * loader/DocLoader.h:

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

        Reviewed by Brady.

        Don't enumerate document.applets trying to determine if a page contains applets.
        Instead, set m_containsPlugIns to true when an applet has been created.
        
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::canCachePage):
        (WebCore::FrameLoader::createJavaAppletWidget):

2008-06-26  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Maciej.

        Make JSGlobalData per-thread.

        * bindings/js/JSDOMBinding.h:
        (WebCore::DOMObject::DOMObject):
        * bindings/js/JSDOMWindowBase.cpp:
        (WebCore::JSDOMWindowBase::JSDOMWindowBase):
        * bridge/runtime_object.cpp:
        (RuntimeObjectImp::RuntimeObjectImp):
        Removed collectOnMainThreadOnly() calls. WebCore objects live in their own heap now, so
        there is no danger for them to be collected on a wrong thread.

2008-06-26  Holger Hans Peter Freyther  <zecke@selfish.org>

        Reviewed by Simon.

        [svg] Disable plugins for SVG images
        The Qt platform allows to have a plugin factory per Page. Now SVG Images
        are using a Page and dummy/empty clients for Chrome. The only way to get
        the kit from the WebCore::Page is to go through the ChromeClient but this
        is not possible when the ChromeClient is an empty client. This leads to a
        crash in PluginDataQt.cpp. One way to avoid this would have been the
        addition of a rtti like field to ChromeClient to see if it is an empty
        client. The other possibility is to not enable plugins for images.

        The SVGImage relies on the fact that the document is a SVGDocument and
        that the rootElement is a SVGSVGElement. If plugins are used we could
        end up with a PluginDocument and crash badly. Do not try to use plugins
        if plugins are disabled for the WebCore::Page.

        * dom/DOMImplementation.cpp:
        (WebCore::DOMImplementation::createDocument):
        * svg/graphics/SVGImage.cpp:
        (WebCore::SVGImage::dataChanged):

2008-06-25  Holger Hans Peter Freyther  <zecke@selfish.org>

        Reviewed by Simon.

        CodingStyle fixes

        * platform/graphics/qt/SimpleFontDataQt.cpp:
        (WebCore::SimpleFontData::SimpleFontData):

2008-06-25  Holger Hans Peter Freyther  <zecke@selfish.org>

        Reviewed by Simon.

        [svg] Make QtWebKit build more of the SVG support
        Add the proper defines and files, update SVGResourceFilterQt.cpp
        to be enabled by the filter option and not by experimental svg support

        * WebCore.pro:
        * svg/graphics/qt/SVGResourceFilterQt.cpp:
        (WebCore::SVGResourceFilter::createPlatformData):
        (WebCore::SVGResourceFilter::prepareFilter):

2008-06-25  Sam Weinig  <sam@webkit.org>

        Reviewed by Brady Eidson.

        Move XMLHttpRequestState enum into XMLHttpRequest and rename to State.

        * xml/XMLHttpRequest.cpp:
        (WebCore::XMLHttpRequest::readyState):
        (WebCore::XMLHttpRequest::changeState):
        (WebCore::XMLHttpRequest::open):
        * xml/XMLHttpRequest.h:
        (WebCore::XMLHttpRequest::create):
        (WebCore::XMLHttpRequest::):

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

        Reviewed by John.

        <rdar://problem/5994480> Line break lost on some pastes
        
        Merging the the first paragraph of inserted content with the content that came
        before the selection that was pasted into would also move content after 
        the selection that was pasted into if:
        
        1) Only one paragraph was being pasted, and it was not wrapped in a block
        2) The selection that was pasted into ended at the end of a block
        3) The next paragraph didn't start at the start of a block.
        
        Insert a line break just after the inserted content to separate it from what 
        comes after and prevent that from happening.
        
        Doing this exposed a bug in deletion where it would insert an unnecessary placeholder
        when deleting a paragraph that started or ended with an input element.  This was
        because its m_startBlock and m_endBlock were still computed with the old deprecated
        enclosingBlockFlowOrTableElement().
        
        * editing/DeleteSelectionCommand.cpp:
        (WebCore::DeleteSelectionCommand::initializePositionData): Use the new method for
        getting an enclosing block.
        (WebCore::DeleteSelectionCommand::doApply): The new method for getting an enclosing
        block will return 0 if it reaches the root editable element before finding a block,
        so if we're deleting inside an inline editable root, m_start/endBlock will
        be 0.  Removed an early return for this case (we already have test coverage for it).
        * editing/ReplaceSelectionCommand.cpp:
        (WebCore::ReplaceSelectionCommand::doApply): Insert a line break just after the inserted 
        content to separate it from what comes after.
        * dom/Node.h: Removed enclosingBlockFlowOrTableElement().
        * dom/Node.cpp: Ditto.

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

        Reviewed by Dave Hyatt.

        Fix refcount leak in CSSVariablesRule.

        * css/CSSParser.cpp:
        (WebCore::CSSParser::createVariablesRule):
        * css/CSSVariablesRule.h:
        (WebCore::CSSVariablesRule::create):
        (WebCore::CSSVariablesRule::setDeclaration):

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

        Reviewed by Mitz.

        <rdar://problem/6007111> 
        https://bugs.webkit.org/show_bug.cgi?id=19516
        DOM modification causes Access Violation (NULL pointer?)
        
        Null check the document element.
        
        * html/HTMLParser.cpp:
        (WebCore::HTMLParser::handleError):

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

        Reviewed by Dave Hyatt.

        - fix <rdar://problem/5873639> REGRESSION (r31620): css2.1/t1506-c525-font-wt-00-b fails on Windows

        - fix https://bugs.webkit.org/show_bug.cgi?id=18863
          <rdar://problem/5908890> weight mappings with @font-face aren't consistent

        Tests: fast/css/font-face-locally-installed.html
               fast/css/font-face-multiple-faces.html

        * WebCore.vcproj/WebCore.vcproj: Added FontTraitsMask.h.

        * WebCore.xcodeproj/project.pbxproj: Ditto.

        * css/CSSFontFace.h:
        Made CSSFontFace store descriptors from the @font-face rule, as follows:
        (WebCore::CSSFontFace::create): Added a FontTraitsMask argument.
        (WebCore::CSSFontFace::traitsMask): Added this accessor.
        (WebCore::CSSFontFace::addRange): Added.
        (WebCore::CSSFontFace::ranges): Added.
        (WebCore::CSSFontFace::UnicodeRange::UnicodeRange):
        (WebCore::CSSFontFace::UnicodeRange::from):
        (WebCore::CSSFontFace::UnicodeRange::to):
        (WebCore::CSSFontFace::CSSFontFace): Added a FontTraitsMask and a vector
        of UnicodeRanges as member variables.

        * css/CSSFontFaceSource.cpp:
        Changed the hash key from the font size alone to the font size and
        the synthetic style bits, needed if the same source supplies different
        synthesized versions.
        (WebCore::CSSFontFaceSource::pruneTable):
        (WebCore::CSSFontFaceSource::getFontData):

        * css/CSSFontFaceSource.h:

        * css/CSSFontSelector.cpp:
        (WebCore::CSSFontSelector::~CSSFontSelector): Added code to delete
        the contents of the font face, locally-installed font face and segmented
        font tables.
        (WebCore::CSSFontSelector::addFontFaceRule): Changed this function to
        not create segmented font faces, but instead just collect font faces
        and annotate them with descriptors (traits and unicode ranges).
        (WebCore::compareFontFaces): Added. Used in getFontData() to sort the
        font faces by proximity to the desired traits.
        (WebCore::CSSFontSelector::getFontData): Changed to create the segmented
        font face here and cache it.

        * css/CSSFontSelector.h:

        * css/CSSSegmentedFontFace.cpp:
        Changed to keep a vector of font faces instead of font face ranges, as
        font faces now know their Unicode ranges.
        (WebCore::CSSSegmentedFontFace::~CSSSegmentedFontFace):
        (WebCore::CSSSegmentedFontFace::isLoaded):
        (WebCore::CSSSegmentedFontFace::isValid):
        (WebCore::CSSSegmentedFontFace::appendFontFace):
        (WebCore::CSSSegmentedFontFace::getFontData): Removed the synthetic
        traits parameters, and instead changed to set them on each FontData
        separately based on the difference between the desired traits and
        the font face's traits.

        * css/CSSSegmentedFontFace.h:

        * platform/graphics/FontCache.h:
        Removed fontExists() and added getTraitsInFamily().

        * platform/graphics/FontDescription.cpp:
        (WebCore::FontDescription::traitsMask): Added.

        * platform/graphics/FontDescription.h:

        * platform/graphics/FontTraitsMask.h: Added.

        * platform/graphics/GlyphPageTreeNode.cpp:
        (WebCore::GlyphPageTreeNode::initializePage): Changed to fill in with
        glyphs from all fonts in the segmented font, using each font in turn to
        fill in characters not covered by earlier fonts.

        * platform/graphics/gtk/FontCacheGtk.cpp:
        (WebCore::FontCache::getTraitsInFamily): Added a stub.

        * platform/graphics/mac/FontCacheMac.mm:
        (WebCore::FontCache::getTraitsInFamily): Added.

        * platform/graphics/qt/FontCacheQt.cpp:
        (WebCore::FontCache::getTraitsInFamily): Added a stub.

        * platform/graphics/win/FontCacheWin.cpp:
        (WebCore::TraitsInFamilyProcData::TraitsInFamilyProcData): Added.
        (WebCore::traitsInFamilyEnumProc): Added.
        (WebCore::FontCache::getTraitsInFamily): Added.

        * platform/graphics/wx/FontCacheWx.cpp:
        (WebCore::FontCache::getTraitsInFamily): Added a stub.

        * platform/mac/WebFontCache.h:
        * platform/mac/WebFontCache.mm:
        (toTraitsMask): Added.
        (+[WebFontCache getTraits:inFamily:]): Added.

2008-06-24  Anonymous

        Reviewed by Darin Adler.  Committed by Adam Barth.

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

        Check for a null documentElement() to fix four crashes.

        * WebCore/dom/Document.cpp:
        * WebCore/dom/Node.cpp:

2008-06-24  Adam Barth  <abarth@webkit.org>

        Reviewed by Darin Adler.

        Fix <https://bugs.webkit.org/show_bug.cgi?id=19597>

        Correctly parse <!-- </textarea> --> inside a <textarea>, matching
        Internet Explorer, Firefox, Opera, and HTML 5.

        Tests: fast/parser/comment-in-script-tricky.html
               fast/parser/comment-in-style.html
               fast/parser/comment-in-textarea.html
               fast/parser/comment-in-title.html

        * html/HTMLTokenizer.cpp:
        (WebCore::HTMLTokenizer::parseSpecial):

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

        Reviewed by John.

        <rdar://problem/6026335> REGRESSION: Caret disappears after deleting a particular selection involving a ToDo
        
        * editing/CompositeEditCommand.cpp:
        (WebCore::CompositeEditCommand::moveParagraphs): If asked to preserveStyle, we
        apply styles from the moved paragraph to the destination with applyStyle, which
        does selection preservation when it needs to apply block styles.  Selection preservation 
        uses relatively untested code in TextIterator to count VisiblePositions which fails in 
        this particular test case because it doesn't handle changes in editability properly.  
        We can avoid this bug by not applying block styles from moved paragraphs.  This is 
        something that should be done anyway, since the moved paragraph should assume the 
        block styles of the destination.
        * editing/EditCommand.cpp:
        (WebCore::EditCommand::styleAtPosition): Added a FIXME about how it is misleading for
        this function to also include the typing style.
        * editing/TextIterator.h: Added a FIXME about how the code path used for selection preservation
        is buggy and should be phased out when we rewrite moveParagraphs.

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

        -Added a manual test for the profiler.

        * manual-tests/inspector/profiler-test-compare-multiple-profiles.html: Added.

2008-06-24  Sam Weinig  <sam@webkit.org>

        Reviewed by Anders Carlsson.

        Add support for loadstart, abort and error events for XMLHttpRequests.

        Tests: http/tests/xmlhttprequest/onabort-event.html
               http/tests/xmlhttprequest/onerror-event.html
               http/tests/xmlhttprequest/onloadstart-event.html

        * bindings/js/JSXMLHttpRequestCustom.cpp:
        (WebCore::JSXMLHttpRequest::mark):
        (WebCore::JSXMLHttpRequest::onreadystatechange):
        (WebCore::JSXMLHttpRequest::onabort):
        (WebCore::JSXMLHttpRequest::setOnabort):
        (WebCore::JSXMLHttpRequest::onerror):
        (WebCore::JSXMLHttpRequest::setOnerror):
        (WebCore::JSXMLHttpRequest::onload):
        (WebCore::JSXMLHttpRequest::onloadstart):
        (WebCore::JSXMLHttpRequest::setOnloadstart):
        (WebCore::JSXMLHttpRequest::onprogress):
        * dom/EventNames.h:
        * xml/XMLHttpRequest.cpp:
        (WebCore::XMLHttpRequest::callReadyStateChangeListener):
        (WebCore::XMLHttpRequest::createRequest):
        (WebCore::XMLHttpRequest::abort):
        (WebCore::XMLHttpRequest::networkError):
        (WebCore::XMLHttpRequest::abortError):
        (WebCore::XMLHttpRequest::didFail):
        (WebCore::XMLHttpRequest::updateAndDispatchOnProgress):
        (WebCore::XMLHttpRequest::dispatchReadyStateChangeEvent):
        (WebCore::XMLHttpRequest::dispatchXMLHttpRequestProgressEvent):
        (WebCore::XMLHttpRequest::dispatchAbortEvent):
        (WebCore::XMLHttpRequest::dispatchErrorEvent):
        (WebCore::XMLHttpRequest::dispatchLoadEvent):
        (WebCore::XMLHttpRequest::dispatchLoadStartEvent):
        (WebCore::XMLHttpRequest::dispatchProgressEvent):
        * xml/XMLHttpRequest.h:
        (WebCore::XMLHttpRequest::setOnAbortListener):
        (WebCore::XMLHttpRequest::onAbortListener):
        (WebCore::XMLHttpRequest::setOnErrorListener):
        (WebCore::XMLHttpRequest::onErrorListener):
        (WebCore::XMLHttpRequest::setOnLoadStartListener):
        (WebCore::XMLHttpRequest::onLoadStartListener):
        * xml/XMLHttpRequest.idl:

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

        Reviewed by Mitz.

        <rdar://problem/5957606>
        CrashTracer: [USER] 2 crashes in Safari at com.apple.WebCore: WebCore::DocumentLoader::cancelPendingSubstituteLoad + 23

        Remove the loader from the document loader after calling didFail, so that the loader will be deferred corectly
        in case the call do didFail starts a new run loop.
        
        * loader/NetscapePlugInStreamLoader.cpp:
        (WebCore::NetscapePlugInStreamLoader::didCancel):

2008-06-24  Alexey Proskuryakov  <ap@webkit.org>

        Release build fix.

        * bindings/js/JSCustomSQLStatementErrorCallback.cpp:
        (WebCore::JSCustomSQLStatementErrorCallback::handleEvent):
        * bindings/js/JSCustomSQLTransactionCallback.cpp:
        (WebCore::JSCustomSQLTransactionCallback::handleEvent):
        Initialize callbackCallType, as the compiler is not smart enough to figure out data flow.

2008-06-24  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Darin.

        https://bugs.webkit.org/show_bug.cgi?id=19723
        REGRESSION(r34648): Some SVG tests crash when running under --threaded

        * rendering/RenderSVGInlineText.cpp: (WebCore::RenderSVGInlineText::destroy): Do not attempt
        to paint during document destruction, because rendering structures are not kept in a
        consistent state then.

2008-06-24  Jonathon Jongsma  <jonathon.jongsma@collabora.co.uk>

        Reviewed by Darin.

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

        Return bool from GraphicsContext::getShadow() so the tests aren't duplicated so
        many times in Cairo and Qt ports.

        * platform/graphics/GraphicsContext.h:
        * platform/graphics/GraphicsContext.cpp:
        (WebCore::GraphicsContext::getShadow): return a boolean from getShadow()
        which indicates whether there is a visible shadow to draw or not.  Ports
        without a platform shadow implementation can use this flag to determine
        whether a shadow needs to be drawn manually
        * platform/graphics/cairo/FontCairo.cpp:
        (WebCore::Font::drawGlyphs):
        * platform/graphics/qt/FontQt.cpp:
        (WebCore::Font::drawText):
        * platform/graphics/qt/GraphicsContextQt.cpp:
        (WebCore::GraphicsContext::drawLine): use return from getShadow() to
        determine whether to draw the shadow

2008-06-24  Jonathon Jongsma  <jonathon.jongsma@collabora.co.uk>

        Reviewed by Simon.

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

        Clean up and remove unused platform shadow code.

        Minor edits by Simon, removed unused TextShadow struct.

        * platform/graphics/qt/GraphicsContextQt.cpp:
        (WebCore::GraphicsContext::setPlatformShadow):
        (WebCore::GraphicsContext::clearPlatformShadow): Qt doesn't support a
        platform shadow, so just make these functions empty.  The shadows are
        drawn manually in function like drawLine(), etc.

2008-06-24  Jonathon Jongsma  <jonathon.jongsma@collabora.co.uk>

        Reviewed by Simon.

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

        Implemented basic text-shadow support for the Qt port.

        * platform/graphics/qt/FontQt.cpp:
        (WebCore::Font::drawText): implement text-shadow support in the Qt port
        * platform/graphics/qt/GraphicsContextQt.cpp:
        (WebCore::GraphicsContext::drawLine): also draw shadows for text
        decorations such as unerlines

2008-06-24  Simon Hausmann  <hausmann@webkit.org>

        Fix the Qt build, adapt to various JSCore API changes.

        * bridge/qt/qt_instance.cpp:
        (KJS::Bindings::QtRuntimeObjectImp::construct):
        (KJS::Bindings::QtInstance::getRuntimeObject):
        (KJS::Bindings::QtInstance::invokeDefaultMethod):
        * bridge/qt/qt_runtime.cpp:
        (KJS::Bindings::convertQVariantToValue):
        (KJS::Bindings::QtRuntimeMetaMethod::getCallData):
        (KJS::Bindings::QtRuntimeConnectionMethod::call):
        (KJS::Bindings::QtRuntimeConnectionMethod::getCallData):
        (KJS::Bindings::QtConnectionObject::execute):
        * bridge/qt/qt_runtime.h:
        (KJS::Bindings::QtRuntimeConnectionMethod::d_func):

2008-06-24  Alexey Proskuryakov  <ap@webkit.org>

        Remove XMLHttpRequestProgressEvent.cpp from more project files.

        * GNUmakefile.am:
        * WebCore.pro:

2008-06-24  Ariya Hidayat  <ariya.hidayat@trolltech.com>

        Reviewed by Simon.

        For the Qt port, fix linking with MinGW.

        * WebCore.pro:

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

        Reviewed by Geoff.

        Update for JavaScript changes.

        - Use CallData and ConstructData instead of the obsolete implementsCall,
          callAsFunction, and construct functions.

        - Updated native function arguments, specifically to allow a JSValue
          rather than a JSObject for the this argument, and to call toThisObject
          as needed when treating it as an object.

        - Made some more class members private and protected, including virtual
          function overrides.

        - Eliminated the use of getCallData in the JavaScript bridging code as
          a way to check if an instance supports invokeDefaultMethod.

        - Eliminated unnecessary polymorphism in the NodeIterator and TreeWalker
          classes. They were using virtual functions simply to share an instance
          of the RefCounted template, which was not helpful.

        * bindings/js/JSAudioConstructor.cpp:
        (WebCore::constructAudio):
        (WebCore::JSAudioConstructor::getConstructData):
        * bindings/js/JSAudioConstructor.h:
        (WebCore::JSAudioConstructor::document):
        (WebCore::JSAudioConstructor::classInfo):
        * bindings/js/JSClipboardCustom.cpp:
        (WebCore::JSClipboard::types):
        * 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/JSDOMBinding.h:
        (WebCore::DOMObject::DOMObject):
        * bindings/js/JSDOMWindowBase.cpp:
        (WebCore::windowProtoFuncAToB):
        (WebCore::windowProtoFuncBToA):
        (WebCore::windowProtoFuncOpen):
        (WebCore::windowProtoFuncSetTimeout):
        (WebCore::windowProtoFuncClearTimeout):
        (WebCore::windowProtoFuncSetInterval):
        (WebCore::windowProtoFuncAddEventListener):
        (WebCore::windowProtoFuncRemoveEventListener):
        (WebCore::windowProtoFuncShowModalDialog):
        (WebCore::windowProtoFuncNotImplemented):
        (WebCore::toJSDOMWindow):
        * bindings/js/JSDOMWindowBase.h:
        * bindings/js/JSDOMWindowShell.h:
        (WebCore::JSDOMWindowShell::classInfo):
        * bindings/js/JSEventListener.cpp:
        (WebCore::JSAbstractEventListener::handleEvent):
        (WebCore::JSLazyEventListener::parseCode):
        * bindings/js/JSEventTargetBase.cpp:
        (WebCore::retrieveEventTargetAndCorrespondingNode):
        (WebCore::jsEventTargetAddEventListener):
        (WebCore::jsEventTargetRemoveEventListener):
        (WebCore::jsEventTargetDispatchEvent):
        * bindings/js/JSEventTargetBase.h:
        * bindings/js/JSHTMLAppletElementCustom.cpp:
        (WebCore::JSHTMLAppletElement::customGetOwnPropertySlot):
        (WebCore::JSHTMLAppletElement::customPut):
        (WebCore::JSHTMLAppletElement::getCallData):
        * bindings/js/JSHTMLCollectionCustom.cpp:
        (WebCore::callHTMLCollection):
        (WebCore::JSHTMLCollection::getCallData):
        * bindings/js/JSHTMLDocumentCustom.cpp:
        (WebCore::JSHTMLDocument::open):
        * bindings/js/JSHTMLEmbedElementCustom.cpp:
        (WebCore::JSHTMLEmbedElement::customGetOwnPropertySlot):
        (WebCore::JSHTMLEmbedElement::customPut):
        (WebCore::JSHTMLEmbedElement::getCallData):
        * bindings/js/JSHTMLInputElementBase.cpp:
        (WebCore::jsHTMLInputElementBaseFunctionSetSelectionRange):
        * bindings/js/JSHTMLInputElementBase.h:
        * bindings/js/JSHTMLObjectElementCustom.cpp:
        (WebCore::JSHTMLObjectElement::customGetOwnPropertySlot):
        (WebCore::JSHTMLObjectElement::customPut):
        (WebCore::JSHTMLObjectElement::getCallData):
        * bindings/js/JSHTMLOptionElementConstructor.cpp:
        (WebCore::constructHTMLOptionElement):
        (WebCore::JSHTMLOptionElementConstructor::getConstructData):
        * bindings/js/JSHTMLOptionElementConstructor.h:
        (WebCore::JSHTMLOptionElementConstructor::document):
        (WebCore::JSHTMLOptionElementConstructor::classInfo):
        * bindings/js/JSImageConstructor.cpp:
        (WebCore::constructImage):
        (WebCore::JSImageConstructor::getConstructData):
        * bindings/js/JSImageConstructor.h:
        (WebCore::JSImageConstructor::document):
        (WebCore::JSImageConstructor::classInfo):
        * bindings/js/JSInspectedObjectWrapper.h:
        (WebCore::JSInspectedObjectWrapper::classInfo):
        * bindings/js/JSInspectorCallbackWrapper.cpp:
        (WebCore::JSInspectorCallbackWrapper::prepareIncomingValue):
        * bindings/js/JSJavaScriptCallFrameCustom.cpp:
        (WebCore::JSJavaScriptCallFrame::scopeChain):
        * bindings/js/JSNodeFilterCondition.cpp:
        (WebCore::JSNodeFilterCondition::JSNodeFilterCondition):
        (WebCore::JSNodeFilterCondition::mark):
        (WebCore::JSNodeFilterCondition::acceptNode):
        * bindings/js/JSNodeFilterCondition.h:
        (WebCore::JSNodeFilterCondition::create):
        * bindings/js/JSNodeFilterCustom.cpp:
        (WebCore::toNodeFilter):
        * bindings/js/JSNodeListCustom.cpp:
        (WebCore::callNodeList):
        (WebCore::JSNodeList::getCallData):
        (WebCore::JSNodeList::canGetItemsForName):
        (WebCore::JSNodeList::nameGetter):
        * bindings/js/JSPluginElementFunctions.cpp:
        (WebCore::runtimeObjectGetter):
        (WebCore::runtimeObjectPropertyGetter):
        (WebCore::runtimeObjectCustomGetOwnPropertySlot):
        (WebCore::runtimeObjectCustomPut):
        (WebCore::runtimeObjectGetCallData):
        (WebCore::pluginInstance):
        (WebCore::getRuntimeObject):
        (WebCore::callPlugin):
        * bindings/js/JSPluginElementFunctions.h:
        * bindings/js/JSQuarantinedObjectWrapper.cpp:
        (WebCore::JSQuarantinedObjectWrapper::put):
        (WebCore::JSQuarantinedObjectWrapper::construct):
        (WebCore::JSQuarantinedObjectWrapper::getConstructData):
        (WebCore::JSQuarantinedObjectWrapper::hasInstance):
        (WebCore::JSQuarantinedObjectWrapper::call):
        (WebCore::JSQuarantinedObjectWrapper::getCallData):
        * bindings/js/JSQuarantinedObjectWrapper.h:
        (WebCore::JSQuarantinedObjectWrapper::className):
        * bindings/js/JSRGBColor.cpp:
        * bindings/js/JSXMLHttpRequestConstructor.cpp:
        (WebCore::constructXMLHttpRequest):
        (WebCore::JSXMLHttpRequestConstructor::getConstructData):
        * bindings/js/JSXMLHttpRequestConstructor.h:
        (WebCore::JSXMLHttpRequestConstructor::document):
        (WebCore::JSXMLHttpRequestConstructor::classInfo):
        * bindings/js/JSXSLTProcessorConstructor.cpp:
        (WebCore::constructXSLTProcessor):
        (WebCore::JSXSLTProcessorConstructor::getConstructData):
        * bindings/js/JSXSLTProcessorConstructor.h:
        (WebCore::JSXSLTProcessorConstructor::classInfo):
        * bindings/js/ScheduledAction.cpp:
        (WebCore::ScheduledAction::ScheduledAction):
        (WebCore::ScheduledAction::execute):
        * bindings/js/ScheduledAction.h:
        * bindings/objc/WebScriptObject.mm:
        (-[WebScriptObject callWebScriptMethod:withArguments:]):
        * bindings/scripts/CodeGeneratorJS.pm:
        * bridge/NP_jsobject.cpp:
        (_NPN_InvokeDefault):
        (_NPN_Invoke):
        * bridge/c/c_instance.cpp:
        (KJS::Bindings::CInstance::supportsInvokeDefaultMethod):
        * bridge/c/c_instance.h:
        * bridge/jni/jni_jsobject.mm:
        (JavaJSObject::call):
        * bridge/objc/objc_instance.h:
        * bridge/objc/objc_instance.mm:
        (ObjcInstance::supportsInvokeDefaultMethod):
        * bridge/objc/objc_runtime.h:
        (KJS::Bindings::ObjcFallbackObjectImp::propertyName):
        (KJS::Bindings::ObjcFallbackObjectImp::classInfo):
        * bridge/objc/objc_runtime.mm:
        (Bindings::webScriptObjectClass):
        (Bindings::webUndefinedClass):
        (ObjcFallbackObjectImp::ObjcFallbackObjectImp):
        (callObjCFallbackObject):
        (ObjcFallbackObjectImp::getCallData):
        * bridge/qt/qt_instance.h:
        * bridge/runtime.cpp:
        (KJS::Bindings::Instance::createRuntimeObject):
        (KJS::Bindings::Instance::getInstance):
        * bridge/runtime.h:
        (KJS::Bindings::Field::~Field):
        (KJS::Bindings::Method::~Method):
        (KJS::Bindings::Class::~Class):
        (KJS::Bindings::Instance::supportsInvokeDefaultMethod):
        * bridge/runtime_method.cpp:
        (KJS::callRuntimeMethod):
        (KJS::RuntimeMethod::getCallData):
        * bridge/runtime_method.h:
        (KJS::RuntimeMethod::methods):
        * bridge/runtime_object.cpp:
        (RuntimeObjectImp::defaultValue):
        (callRuntimeObject):
        (RuntimeObjectImp::getCallData):
        * bridge/runtime_object.h:
        (KJS::RuntimeObjectImp::getInternalInstance):
        (KJS::RuntimeObjectImp::classInfo):
        * dom/NodeIterator.h:
        * dom/Traversal.cpp:
        * dom/Traversal.h:
        * dom/TreeWalker.h:

2008-06-23  Adam Barth  <abarth@webkit.org>

        Reviewed by Darin Adler.

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

        Move isAllowedToLoadLocalResources into SecurityOrigin.

        * dom/Document.cpp:
        (WebCore::Document::Document):
        (WebCore::Document::setURL):
        (WebCore::Document::initSecurityContext):
        * dom/Document.h:
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::canLoad):
        * platform/SecurityOrigin.cpp:
        (WebCore::SecurityOrigin::SecurityOrigin):
        (WebCore::SecurityOrigin::isLocal):
        * platform/SecurityOrigin.h:
        (WebCore::SecurityOrigin::protocol):
        (WebCore::SecurityOrigin::host):
        (WebCore::SecurityOrigin::domain):
        (WebCore::SecurityOrigin::port):
        (WebCore::SecurityOrigin::canLoadLocalResources):
        (WebCore::SecurityOrigin::grantLoadLocalResources):
        * xml/XMLHttpRequest.cpp:
        (WebCore::XMLHttpRequest::setRequestHeader):

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

        Fix the Windows build.

        * WebCore.vcproj/WebCore.vcproj: Add generated files related to CSS variables to the Windows project file.

2008-06-23  Steve Falkenburg  <sfalken@apple.com>

        Fix a math error in my last change.
        
        Reviewed by Ada Chan.

        * platform/win/FileSystemWin.cpp:
        (WebCore::openTemporaryFile):

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

        -Build fix.

        * WebCore.vcproj/WebCore.vcproj:

2008-06-23  chris fleizach  <cfleizach@apple.com>

        Reviewed by Darin Adler.

        <rdar://problem/6024267> VO unable to read massive emails because AccessibilityObject::lengthForVisiblePositionRange makes the string

        * page/AccessibilityObject.cpp:
        (WebCore::replacedNodeNeedsCharacter):
        (WebCore::AccessibilityObject::stringForVisiblePositionRange):
        (WebCore::AccessibilityObject::lengthForVisiblePositionRange):

2008-06-23  Steve Falkenburg  <sfalken@apple.com>

        Added our own mechanism for generating temporary file names.
        
        Reviewed by Ada Chan, Darin Adler.

        * platform/win/FileSystemWin.cpp:
        (WebCore::openTemporaryFile):

2008-06-23  Sam Weinig  <sam@webkit.org>

        Remove XMLHttpRequestProgressEvent.cpp from project files.

        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * WebCoreSources.bkl:

2008-06-23  Sam Weinig  <sam@webkit.org>

        Reviewed by Dave Hyatt.

        Remove empty file.

        * xml/XMLHttpRequestProgressEvent.cpp: Removed.

2008-06-23  Sam Weinig  <sam@webkit.org>

        Rubber-stamped by Tim Hatcher.

        Rename XMLHttpRequest::sameOriginRequest to XMLHttpRequest::makeSameOriginRequest
        and XMLHttpRequest::crossSiteAccessRequest to XMLHttpRequest::makeCrossSiteAccessRequest.

        * xml/XMLHttpRequest.cpp:
        (WebCore::XMLHttpRequest::createRequest):
        (WebCore::XMLHttpRequest::makeSameOriginRequest):
        (WebCore::XMLHttpRequest::makeCrossSiteAccessRequest):
        * xml/XMLHttpRequest.h:

2008-06-23  Sam Weinig  <sam@webkit.org>

        Reviewed by Alexey Proskuryakov.

        Some XMLHttpRequest re-organization to aid further enhancements coming soon.

        * bindings/js/JSXMLHttpRequestCustom.cpp:
        (WebCore::JSXMLHttpRequest::send): Explicitly call overloaded versions of send,
        instead of always calling though send(DOMString).
        * dom/Document.idl: Adds native converter.

        * xml/XMLHttpRequest.cpp:
        (WebCore::XMLHttpRequest::open):
        (WebCore::XMLHttpRequest::initSend):
        (WebCore::XMLHttpRequest::send):
        (WebCore::XMLHttpRequest::createRequest):
        (WebCore::XMLHttpRequest::sameOriginRequest):
        (WebCore::XMLHttpRequest::crossSiteAccessRequest):
        (WebCore::XMLHttpRequest::abort):
        (WebCore::XMLHttpRequest::clearResponse):
        (WebCore::XMLHttpRequest::clearRequest):
        (WebCore::XMLHttpRequest::genericError):
        (WebCore::XMLHttpRequest::dispatchProgressEvent):
        * xml/XMLHttpRequest.h:
        (WebCore::XMLHttpRequest::setOnReadyStateChangeListener): Inline.
        (WebCore::XMLHttpRequest::onReadyStateChangeListener): Ditto.
        (WebCore::XMLHttpRequest::setOnLoadListener): Ditto.
        (WebCore::XMLHttpRequest::onLoadListener): Ditto.
        (WebCore::XMLHttpRequest::setOnProgressListener): Ditto.
        (WebCore::XMLHttpRequest::onProgressListener): Ditto.
        Makes the request entity body a member variable so that the send method
        can be more easily broken up.

2008-06-23  Timothy Hatcher  <timothy@apple.com>

        Make profiles of the same name in the Inspector group in the
        sidebar under a collapsable item that contains all the runs.

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

        Reviewed by Darin Adler.

        * English.lproj/localizedStrings.js: New strings.
        * page/inspector/Images/profileGroupIcon.png: Added.
        * page/inspector/Images/profileSmallIcon.png: Added.
        * page/inspector/ProfilesPanel.js:
        (WebInspector.ProfilesPanel.prototype.reset): Clear _profileGroups.
        Remove the "some-expandable" class from the sidebarTree.
        (WebInspector.ProfilesPanel.prototype.addProfile): Append new profiles
        that have the same name as a previous profile into a group. When a
        group has 2 profiles a ProfileGroupSidebarTreeElement is made and the
        ProfileSidebarTreeElements are appended to the group's element. 
        (WebInspector.ProfileSidebarTreeElement.prototype.get mainTitle):
        Return _mainTitle is it is set.
        (WebInspector.ProfileSidebarTreeElement.prototype.set mainTitle):
        Set _mainTitle which is an override title.
        (WebInspector.ProfileGroupSidebarTreeElement): Inherit SidebarTreeElement.
        (WebInspector.ProfileGroupSidebarTreeElement.prototype.onselect):
        Show the last profile in the group when selected.
        * page/inspector/SidebarTreeElement.js:
        (WebInspector.SidebarTreeElement.prototype.get small): Return _small.
        (WebInspector.SidebarTreeElement.prototype.set small): Set _small and
        update the style to match.
        (WebInspector.SidebarTreeElement.prototype.onattach): Set the small
        class if the small property is true.
        * page/inspector/inspector.css: New styles for profiles groups
        and for the small profiles.

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

        Reviewed by Geoff.

        Make changedDocuments a HashSet.

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

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

        Reviewed by Mark Rowe.

        Restore a collectOnMainThreadOnly call that was accidentally removed in r34659. It will not
        be needed when heaps are actually per-thread, but this isn't the case yet, and collecting
        on a different thread causes crashes.

        * bindings/js/JSDOMBinding.h:
        (WebCore::DOMObject::DOMObject):

2008-06-22  Jonathon Jongsma  <jonathon.jongsma@collabora.co.uk>

        Reviewed by Darin Adler.

        Fix https://bugs.webkit.org/show_bug.cgi?id=19465
        Bug 19465: Cursor sometimes gets 'stuck' in textareas when trying to navigate with arrow keys

        Test: editing/input/textarea-arrow-navigation.html

        * rendering/RenderText.cpp:
        (WebCore::RenderText::positionForCoordinates): In the case when the next position is to the right
        of the last text box but the text offset is 0, set the affinity to DOWNSTREAM instead of UPSTREAM so
        that the cursor doesn't remain on the previous line.

2008-06-22  Robert Blaut  <webkit@blaut.biz>

        Reviewed by Darin Adler.

        Fix for https://bugs.webkit.org/show_bug.cgi?id=17421
        Bug 17421: Lack of end tag for SELECT element causes the rest of page to not be rendered

        Test: fast/parser/input-textarea-inside-select-element.html

        * html/HTMLParser.cpp:
        (WebCore::HTMLParser::handleError):

2008-06-22  David Krause  <david.krause@gmail.com>

        Reviewed by Darin Adler.

        Fix https://bugs.webkit.org/show_bug.cgi?id=19426
        Bug 19426: LOW_BANDWIDTH_DISPLAY build broken

        Change ref to addClient and deref to removeClient in code wrapped
        by USE(LOW_BANDWIDTH_DISPLAY) to match changes in r31834.

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::addLowBandwidthDisplayRequest):
        (WebCore::FrameLoader::removeAllLowBandwidthDisplayRequests):
        (WebCore::FrameLoader::notifyFinished):

2008-06-22  Robert Blaut  <webkit@blaut.biz>

        Reviewed by Darin Adler.

        Fix https://bugs.webkit.org/show_bug.cgi?id=19520
        Bug 19520: WebKit incorrectly accepts hidden as the value of outline-style

        Test: fast/css/outline-hidden-illegal-value.html

        * css/CSSParser.cpp:
        (WebCore::CSSParser::parseValue):
        * rendering/RenderFlow.cpp:
        (WebCore::RenderFlow::paintOutline):
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::paintOutline):
        * rendering/style/RenderStyle.h:
        (WebCore::RenderStyle::outlineWidth):
        (WebCore::RenderStyle::outlineOffset):

2008-06-22  Jonathon Jongsma  <jonathon.jongsma@collabora.co.uk>

        Reviewed by Dan Bernstein.

        Fix https://bugs.webkit.org/show_bug.cgi?id=19675
        Bug 19675: [GTK] negative text-shadows are not rendered

        * platform/graphics/cairo/FontCairo.cpp:
        (WebCore::Font::drawGlyphs): The IntSize::isEmpty() call checks that the
        sizes are > 0, while we need to check for != 0.

2008-06-22  kuchhal  <kuchhal@yahoo.com>

        Reviewed by Darin Adler.

        Fix https://bugs.webkit.org/show_bug.cgi?id=19696
        Bug 19696: Memory leak in WebCore/editing/DeleteButtonController.cpp

        * editing/DeleteButtonController.cpp:
        (WebCore::DeleteButtonController::createDeletionUI): Delete the Image instance
        if the platform resource could not be loaded.

2008-06-22  kuchhal  <kuchhal@yahoo.com>

        Reviewed by Darin Adler.

        Fix https://bugs.webkit.org/show_bug.cgi?id=19697
        Bug 19697: Redundant releaseRef causing memory leak

        * platform/win/ClipboardUtilitiesWin.cpp:
        (WebCore::fragmentFromCF_HTML):

2008-06-21  Sam Weinig  <sam@webkit.org>

        Fix Windows build.

        * bindings/scripts/CodeGeneratorCOM.pm:
        * html/HTMLInputElement.idl:

2008-06-21  Timothy Hatcher  <timothy@apple.com>

        Fix a typo "new" in the keywords list for hte JavaScript
        syntax highlighter. And adds "get" and "set" to the keyword list.

        Reviewed by Sam Weinig.

        * page/inspector/SourceFrame.js:
        (WebInspector.SourceFrame.prototype._syntaxHighlightJavascriptLine):
        Fixes the "new" typo and adds "get" and "set".

2008-06-21  David Kilzer  <ddkilzer@apple.com>

        Bug 7931: Escaped elements within a textarea block can cause the textarea box to be closed prematurely

        <https://bugs.webkit.org/show_bug.cgi?id=7931>

        Reviewed by Darin.

        Tests: fast/parser/entity-end-iframe-tag.html
               fast/parser/entity-end-script-tag.html
               fast/parser/entity-end-style-tag.html
               fast/parser/entity-end-textarea-tag.html
               fast/parser/entity-end-title-tag.html
               fast/parser/entity-end-xmp-tag.html

        Previously the parser accepted end tags for textarea, title and
        iframe elements that contained entity-escaped characters such as
        '&lt;'.  The fix is to save the position of the last entity-escaped
        character converted and to use that to make sure the end tag does
        not contain an escaped character.

        Note that this was not an issue for script, style and xmp elements
        since they already ignored entity-escaped characters.

        * html/HTMLTokenizer.cpp:
        (WebCore::HTMLTokenizer::parseSpecial): When looking for a closing
        tag, ignore any text with entity-escaped characters by making sure
        lastDecodedEntityPosition is less than the first character of the
        end tag.

2008-06-21  Sam Weinig  <sam@webkit.org>

        Reviewed by Dan Bernstein.

        Fix for https://bugs.webkit.org/show_bug.cgi?id=19647
        REGRESSION: Problem with extjs (insertAdjacentHTML)

        Test: fast/dynamic/insertAdjacentHTML-allowed-parents.html

        * html/HTMLElement.cpp:
        (WebCore::HTMLElement::insertAdjacentHTML): Don't use innerHTML logic for creating
        the DocumentFragment from the html string.

2008-06-21  Adam Barth  <abarth@webkit.org>

        Reviewed by Sam Weinig.

        Log error messages to the console when we deny a request for a URL.
        These error messages do not appear in LayoutTests, but they do
        appear in the WebInspector.

        * dom/XMLTokenizer.cpp:
        (WebCore::shouldAllowExternalLoad):
        * loader/DocLoader.cpp:
        (WebCore::DocLoader::requestResource):
        (WebCore::DocLoader::printAccessDeniedMessage):
        * loader/DocLoader.h:
        * xml/XSLTProcessor.cpp:
        (WebCore::docLoaderFunc):

2008-06-21  Adam Barth  <abarth@webkit.org>

        Reviewed by Sam Weinig.

        Fix <https://bugs.webkit.org/show_bug.cgi?id=19649>:
          XSL style sheets allowed across origins

        Block cross-orgin loads of XSL style sheets, matching Internet
        Explorer, Firefox, and Opera.  Also, we now block loading of XBL
        across origins, matching Firefox.  The XBL behavior does not appear
        testable because XBL seems to not be enabled.

        Test: http/tests/security/cross-origin-xsl-BLOCKED.html

        * loader/DocLoader.cpp:
        (WebCore::DocLoader::requestResource):

2008-06-21  Brett Wilson  <brettw@chromium.org>

        Reviewed by Dave Hyatt.

        - fix https://bugs.webkit.org/show_bug.cgi?id=19542
          <rdar://problem/6007976> Crash in Font::glyphDataForCharacter when getting small caps data

        Adds a NULL check for getting the small caps page of glyph data. The
        page() function can explicitly return null in some cases, and every
        other usage in this function does the check.

        * platform/graphics/Font.cpp:
        (WebCore::Font::glyphDataForCharacter):

2008-06-21  Alex Taylor  <darwin@milliamp.org>

        Reviewed by Dan Bernstein.

        Fixes <https://bugs.webkit.org/show_bug.cgi?id=12425>

        Adds support for border-radius on legend elements.
        Fieldsets with a legend and rounded borders now have a clipping region set
        around the legend.
        
        Test: fast/borders/fieldsetBorderRadius.html

        * rendering/RenderFieldset.cpp:
        (WebCore::RenderFieldset::paintBoxDecorations):
        (WebCore::RenderFieldset::paintBorderMinusLegend): Removed a FIXME.

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

        wx build fix. Adding CSSVariable* API sources to the Bakefiles.

        * WebCoreSources.bkl:

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

        Fix Windows build.

        * bindings/scripts/CodeGeneratorCOM.pm:

2008-06-20  Jan Michael Alonzo  <jmalonzo@webkit.org>

        Gtk build fix: Add files missing in the previous fix (r34705)

        * GNUmakefile.am:

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

        Reviewed by Sam Weinig.

        - fix leak of mask images

        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::arenaDelete): Added a call to removeClient() on
        the mask box image.

2008-06-20  Jan Michael Alonzo  <jmalonzo@webkit.org>

        Gtk build fix for r34702, r34700 and r34693
        Qt build fix for r34700 and r34693

        * GNUmakefile.am:
        * WebCore.pro:
        * platform/gtk/RenderThemeGtk.cpp:
        * platform/gtk/RenderThemeGtk.h:
        * platform/qt/RenderThemeQt.cpp:
        * platform/qt/RenderThemeQt.h:

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

        Reviewed by Adele Peterson.

        Add 'files' property to the HTMLInputElement, which returns a FileList object 
        (when type=file, null otherwise) containing a list of all the files selected.
        It currently always contains only 0 or 1 files as multifile input is not supported 
        yet.  The list contains File objects which contains the name and size of the file. 
        The inspiration for these interfaces is from:
            - http://developer.mozilla.org/en/docs/nsIDOMFileList
            - http://developer.mozilla.org/en/docs/nsIDOMFile

        Also fixes <rdar://problem/6022802>

        * DerivedSources.make:
        * GNUmakefile.am:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * WebCoreSources.bkl:
        * bindings/objc/DOMInternal.h:
        * bindings/scripts/CodeGenerator.pm:
        * bindings/scripts/IDLStructure.pm:
        * html/File.cpp: Added.
        (WebCore::File::File):
        (WebCore::File::fileSize):
        * html/File.h: Added.
        (WebCore::File::create):
        (WebCore::File::fileName):
        (WebCore::File::path):
        * html/File.idl: Added.
        * html/FileList.cpp: Added.
        (WebCore::FileList::FileList):
        (WebCore::FileList::item):
        * html/FileList.h: Added.
        (WebCore::FileList::create):
        (WebCore::FileList::length):
        (WebCore::FileList::isEmpty):
        (WebCore::FileList::clear):
        (WebCore::FileList::append):
        * html/FileList.idl: Added.
        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::setInputType):
        (WebCore::HTMLInputElement::appendFormData):
        (WebCore::HTMLInputElement::value):
        (WebCore::HTMLInputElement::setValue):
        (WebCore::HTMLInputElement::setValueFromRenderer):
        (WebCore::HTMLInputElement::files):
        * html/HTMLInputElement.h:
        * html/HTMLInputElement.idl:
        * page/DOMWindow.idl:

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

        Make sure CSS variables work inside the inline style attribute.

        Reviewed by Beth

        Added fast/css/variables/inline-style-test.html

        * css/CSSMutableStyleDeclaration.cpp:
        (WebCore::CSSMutableStyleDeclaration::removeProperty):
        (WebCore::CSSMutableStyleDeclaration::addParsedProperties):

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

        Add support for the CSSVariablesRule and CSSVariablesDeclaration DOM APIs.  These allow querying of
        variables names and values, as well as iteration, setting and removal.

        Reviewed by Sam

        Added multiple new tests to fast/css/variables/

        * DerivedSources.make:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSCSSRuleCustom.cpp:
        (WebCore::toJS):
        * bindings/objc/DOMInternal.h:
        * bindings/scripts/CodeGeneratorJS.pm:
        * css/CSSPrimitiveValue.cpp:
        (WebCore::CSSPrimitiveValue::parserValue):
        * css/CSSVariablesDeclaration.cpp:
        (WebCore::CSSVariablesDeclaration::removeVariable):
        (WebCore::CSSVariablesDeclaration::setVariable):
        (WebCore::CSSVariablesDeclaration::setCssText):
        (WebCore::CSSVariablesDeclaration::setChanged):
        * css/CSSVariablesDeclaration.h:
        * css/CSSVariablesDeclaration.idl: Added.
        * css/CSSVariablesRule.h:
        * css/CSSVariablesRule.idl: Added.

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

        Rubber stamped by Adele. 

        * manual-tests/inspector/profiler-test-stop-profiling-after-setTimeout.html: Added.

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

        Reviewed by Tim.

        <rdar://problem/5958770> JSProfiler: Time incorrectly given to (idle)
        if profiling is started and finished within the same function. (19230)
        - Now we profile one more stack frame up from the last frame to allocate
        the time spent in it, if it exists.

        * page/Console.cpp:
        * manual-tests/inspector/profiler-test-start-and-stop-profiling-in-the-same-function.html: Added.
        (WebCore::Console::profile): When stating the profiler give a client for
        the callback of when the profile actually finishes.
        (WebCore::Console::profileEnd): No longer needs to handle the return of
        the profile object since it will be retruned in the client's callback.
        (WebCore::Console::finishedProfiling): Implemenet the ProfileClient
        callback method.
        * page/Console.h: Inherit from the ProfileClient.
        * page/InspectorController.cpp:
        (WebCore::InspectorController::startUserInitiatedProfiling): Use the
        client callback.
        (WebCore::InspectorController::stopUserInitiatedProfiling): Does not
        need to handle the profile being returned as it is now handled by the
        client callback.
        (WebCore::InspectorController::finishedProfiling): Implement the
        ProfileClient callback method.
        * page/InspectorController.h: Inherit from the ProfileClient.

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

        Makes the JavaScript syntax highlighter process lines in chunks
        so the user interface isn't blocked for large script files.

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

        Reviewed by Adam Roben.

        * page/inspector/SourceFrame.js:
        (WebInspector.SourceFrame.prototype._addMessageToSource): Use the cells
        property on the row instead of getElementsByTagName.
        (WebInspector.SourceFrame.prototype.syntaxHighlightJavascript): Use the
        cells property on the row instead of getElementsByTagName. Added
        a nested processChunk function that highlights 10 lines at a time
        This processChunk function is called at an interval of 25ms. The
        code is still highlighted quickly, and the user can't tell it wasn't
        highlighted all at once.

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

        Fixes a bug where the source view in the Resources panel had a
        couple of extra pixels at the bottom when fully scrolled.

        Reviewed by Adam Roben.

        * page/inspector/SourceFrame.js:
        (WebInspector.SourceFrame.prototype.set autoSizesToFitContentHeight):
        Call removeStyleClass instead of addStyleClass for "webkit-height-sized-to-fit"
        when sizing to fit is being disabled.
        * page/inspector/inspector.css:
        (.resource-view.headers-visible .source-view-frame): Added the
        vertical-align: top property to prevent line alignment from adding extra
        pixels on the bottom.

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

        Changed all lineHeight, baselinePosition and verticalPositionHint
        calls to return int instead of short. The short was overflowing
        when a value greater than 32,767 was encountered.

        Fixes: iframes with a height of 32,768px or greater do not layout correctly
        https://bugs.webkit.org/show_bug.cgi?id=19679

        Reviewed by Dave Hyatt.

        Test: fast/css/line-height-overflow.html

        * rendering/RenderBR.cpp:
        (WebCore::RenderBR::baselinePosition):
        * rendering/RenderBR.h:
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::lineHeight):
        * rendering/RenderBlock.h:
        * rendering/RenderFlow.cpp:
        * rendering/RenderFlow.h:
        * rendering/RenderListBox.cpp:
        * rendering/RenderListBox.h:
        * rendering/RenderListMarker.cpp:
        (WebCore::RenderListMarker::lineHeight):
        * rendering/RenderListMarker.h:
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::verticalPositionHint):
        * rendering/RenderObject.h:
        (WebCore::):
        * rendering/RenderPath.cpp:
        (WebCore::RenderPath::lineHeight):
        * rendering/RenderPath.h:
        * rendering/RenderReplaced.cpp:
        (WebCore::RenderReplaced::lineHeight):
        * rendering/RenderReplaced.h:
        * rendering/RenderSVGContainer.cpp:
        (WebCore::RenderSVGContainer::lineHeight):
        * rendering/RenderSVGContainer.h:
        * rendering/RenderSVGHiddenContainer.cpp:
        (WebCore::RenderSVGHiddenContainer::lineHeight):
        * rendering/RenderSVGHiddenContainer.h:
        * rendering/RenderSVGRoot.cpp:
        (WebCore::RenderSVGRoot::lineHeight):
        * rendering/RenderSVGRoot.h:
        * rendering/RenderSlider.cpp:
        * rendering/RenderSlider.h:
        * rendering/RenderTableCell.cpp:
        * rendering/RenderTableCell.h:
        * rendering/RenderTableCol.h:
        * rendering/RenderTableRow.h:
        * rendering/RenderTableSection.h:
        * rendering/RenderText.cpp:
        * rendering/RenderText.h:
        * rendering/RenderTextControl.cpp:
        * rendering/RenderTextControl.h:
        * rendering/RenderTheme.cpp:
        * rendering/RenderTheme.h:
        * rendering/RenderThemeMac.h:
        * rendering/RenderThemeMac.mm:
        * rendering/RenderThemeSafari.cpp:
        * rendering/RenderThemeSafari.h:

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

        Reviewed by Darin Adler.

        - fix https://bugs.webkit.org/show_bug.cgi?id=19519
          <rdar://problem/6007345> DOM modification causes stack exhaustion (BUTTON OBJECT COLGROUP)

        Test: fast/table/prepend-in-anonymous-table.html

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::addChildToFlow): Added code to handle the case
        of inserting before a child that has been wrapped by an anonymous table,
        in which case if the new child is the type that needs to be in a table,
        it is inserted into the table, and otherwise it is inserted before the
        table.
        * rendering/RenderTable.cpp:
        (WebCore::RenderTable::addChild): Added table-column-group alongside
        table-caption as content that can exist inside an anonymous table
        without being wrapped in a table section.

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

        Allow CSS variables to support arbitrary expressions as values instead of just a single term.

        Reviewed by Sam

        Removed fast/css/variables/single-term-test.html and replaced with multiple-term-test.html

        * css/CSSGrammar.y:
        * css/CSSParser.cpp:
        (WebCore::CSSParser::addVariable):
        * css/CSSParser.h:
        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::addMatchedDeclaration):
        * css/CSSVariablesDeclaration.cpp:
        (WebCore::CSSVariablesDeclaration::CSSVariablesDeclaration):
        (WebCore::CSSVariablesDeclaration::getVariableValue):
        (WebCore::CSSVariablesDeclaration::addParsedVariable):
        (WebCore::CSSVariablesDeclaration::getParsedVariable):
        * css/CSSVariablesDeclaration.h:
        (WebCore::CSSVariablesDeclaration::create):

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

        Reviewed by John Sullivan.

        - fix a bug where anonymous tables were inserted in the wrong place

        Tests: tables/mozilla/bugs/bug2479-2.html
               tables/mozilla/bugs/bug278266.html
               tables/mozilla/bugs/bug8411.xml

        * rendering/RenderContainer.cpp:
        (WebCore::RenderContainer::addChild): Changed to create an anonymous
        table and insert it before beforeChild unless the insertion point is
        right after an existing anonymous table, in which case the existing
        table is used.

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

        Reviewed by Oliver.

        <https://bugs.webkit.org/show_bug.cgi?id=16049>
        execCommand('backColor') fails on collapsed selections

        * editing/EditorCommand.cpp:
        (WebCore::CommandEntry::): Enable BackColor for caret selections, and
        disable ForeColor in plaintext-only regions.

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

        Reviewed by John.

        <https://bugs.webkit.org/show_bug.cgi?id=19653>
        Typing style lost when creating list from, indenting or outdenting an empty paragraph
        
        There were two problems.  First, moveParagraphs didn't preserve the style of empty paragraphs.
        Second, indent, outdent and list creation returned false from preservesTypingStyle.
        The second problem couldn't be fixed by just adding preservesTypingStyle() { return true; }
        to those commands, though, because of other bugs.
        
        Cleaned up the implementation of typing style enough to remove FIXMEs for:
        
        <rdar://problem/3769899> Implementation of typing style needs improvement 
        
        which has actually been closed for some time now anyway.
        
        * dom/Document.cpp: Removed an unused header.
        * editing/CompositeEditCommand.cpp:
        (WebCore::CompositeEditCommand::moveParagraphs): Preserve the style of an empty paragraph, too.
        * editing/DeleteSelectionCommand.cpp:
        (WebCore::DeleteSelectionCommand::saveTypingStyleState): Removed FIXME.
        (WebCore::DeleteSelectionCommand::calculateTypingStyleAfterDelete): 
        Removed FIXME.  
        If there is a typing style to apply after a delete, apply it to any line break that acts as a paragraph
        placeholder, not only one that was inserted by deletion.  This fixes a bug where deleting
        <div><b>Bold</b><br></div>, changing the selection and then coming back and typing wouldn't 
        produce bold text.  
        Don't set the EditCommand's typingStyle, it has been removed (more on that later).
        (WebCore::DeleteSelectionCommand::doApply): We don't need to pass calculateTypingStyleAfterDelete
        the inserted placeholder because it will find it.
        (WebCore::DeleteSelectionCommand::preservesTypingStyle): Normally deletion doesn't preserve the 
        typing style that was present before it.  For example, type a character, Bold, then delete the 
        character and start typing.  The Bold typing style shouldn't stick around.  We got this right before 
        purely by chance. Deletion should preserve a typing style that *it* sets, however.
        * editing/DeleteSelectionCommand.h: No longer need to pass calculateTypingStyleAfterDelete
        the inserted placeholder.
        * editing/EditCommand.cpp:
        (WebCore::EditCommand::apply): 
        Clearing or not clearing a removed anchor should not be determined by whether or not a command 
        preservesTypingStyle().  For example, the deletion that removed an anchor (and stored it), may 
        not preserve the typing style, but that doesn't mean that it should then go and clear the removed 
        anchor.  All high level commands, and all commands that a TypingCommand spawns, except for
        text insertions, which should restore a removed anchor, should clear it.
        There is no longer a typing style on EditCommand, removed code that cleared it.  Code that clears the 
        *actual* typing style is now in Editor::appliedEditing, just like before.
        There is no longer a typing style on EditCommand, removed code to set one.
        (WebCore::EditCommand::styleAtPosition): Removed FIXME.
        * editing/EditCommand.h: 
        Removed code assosiated with m_typingStyle.
        Made preservesTypingStyle() public, so that we can call it from Editor::appliedEditing().
        * editing/Editor.cpp:
        (WebCore::Editor::appliedEditing):
        Removed code to preserve the removedAnchor during the call to setSelection, because we no longer
        request to clear the typing style with that call.  Also removed the FIXME about this.
        Before, a command would set the Frame's typing style by setting its own typingStyle, and then 
        letting code here, in appliedEditing pick that up and set it on the Frame.  Now, the command 
        itself sets the Frame's typing style.  Deletion is the only command that does this right now.
        * editing/IndentOutdentCommand.h:
        (WebCore::IndentOutdentCommand::preservesTypingStyle): Added, returns true.
        * editing/InsertLineBreakCommand.cpp:
        (WebCore::InsertLineBreakCommand::doApply): Removed FIXME.
        * editing/InsertListCommand.h:
        (WebCore::InsertListCommand::preservesTypingStyle): Added.
        * editing/InsertParagraphSeparatorCommand.cpp:
        (WebCore::InsertParagraphSeparatorCommand::applyStyleAfterInsertion): Removed FIXME.
        * editing/InsertTextCommand.cpp:
        (WebCore::InsertTextCommand::input): Removed FIXME.
        * editing/ReplaceSelectionCommand.cpp:
        (WebCore::ReplaceSelectionCommand::doApply): Removed FIXME and also added one about clearing
        the typing style here.  It seems like it's something that could wait until after the command
        has been performed, since there is no code between this point and the end of the operation
        that queries or uses the typing style.

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

        Reviewed by Alexey Proskuryakov.

        - fix crash in CSSStyleDeclaration::copyPropertiesInSet()

        Covered by many editing tests

        * css/CSSStyleDeclaration.cpp:
        (WebCore::CSSStyleDeclaration::copyPropertiesInSet): Re-ordered to avoid
        null pointer deref.

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

        Fix out of bounds bug in CSSVariablesDeclaration's item() method.

        Reviewed by Sam, Darin

        * css/CSSVariablesDeclaration.cpp:
        (WebCore::CSSVariablesDeclaration::item):
        * css/CSSVariablesDeclaration.h:

2008-06-19  John Sullivan  <sullivan@apple.com>

        Reviewed by Darin
        
        Tweak to previous checkin

        * page/FrameView.cpp:
        (WebCore::FrameView::performPostLayoutTasks):
        clear m_firstLayoutCallbackPending before performing callback, to avoid recursion

2008-06-19  John Sullivan  <sullivan@apple.com>

        Reviewed by Darin
        
        - fixed <rdar://problem/6021353> Assertion failure (!root->needsLayout()) after certain steps
        
        The didFirstLayout callback was called in a place where trouble would ensue if the client
        did any work that would cause the layout to be dirtied. Fixed by delaying the callback
        until performPostLayoutTasks.

        * page/FrameView.cpp:
        new m_firstLayoutCallbackPending instance member variable in FrameViewPrivate
        (WebCore::FrameViewPrivate::reset):
        set m_firstLayoutCallbackPending to false
        (WebCore::FrameView::layout):
        set m_firstLayoutCallbackPending instead of a local variable; don't do didFirstLayout callback here
        (WebCore::FrameView::performPostLayoutTasks):
        if m_firstLayoutCallbackPending is set, do didFirstLayout callback here, then clear m_firstLayoutCallbackPending

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

        Implement some cleanup of CSS variables based off Darin's review comments.

        Reviewed by darin

        * css/CSSParser.cpp:
        (WebCore::CSSParser::parseVariable):
        (WebCore::CSSParser::checkForVariables):
        (WebCore::CSSParser::addUnresolvedProperty):
        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::addMatchedDeclaration):
        * css/CSSVariableDependentValue.h:
        * css/CSSVariablesRule.cpp:
        (WebCore::CSSVariablesRule::CSSVariablesRule):

2008-06-19  John Sullivan  <sullivan@apple.com>

        Rubber-stamped by Dan
        
        Prepended all FrameViewPrivate instance member variables with "m_" (in preparation
        for adding a new one in a future patch)

        * page/FrameView.cpp:
        (WebCore::FrameViewPrivate::FrameViewPrivate):
        (WebCore::FrameViewPrivate::reset):
        (WebCore::FrameView::~FrameView):
        (WebCore::FrameView::resetScrollbars):
        (WebCore::FrameView::didFirstLayout):
        (WebCore::FrameView::initScrollbars):
        (WebCore::FrameView::layoutCount):
        (WebCore::FrameView::needsFullRepaint):
        (WebCore::FrameView::layoutRoot):
        (WebCore::FrameView::layout):
        (WebCore::FrameView::scrollTo):
        (WebCore::FrameView::useSlowRepaints):
        (WebCore::FrameView::setUseSlowRepaints):
        (WebCore::FrameView::removeSlowRepaintObject):
        (WebCore::FrameView::setScrollbarsMode):
        (WebCore::FrameView::setVScrollbarMode):
        (WebCore::FrameView::setHScrollbarMode):
        (WebCore::FrameView::scheduleRelayout):
        (WebCore::FrameView::scheduleRelayoutOfSubtree):
        (WebCore::FrameView::layoutPending):
        (WebCore::FrameView::needsLayout):
        (WebCore::FrameView::unscheduleRelayout):
        (WebCore::FrameView::isTransparent):
        (WebCore::FrameView::setTransparent):
        (WebCore::FrameView::baseBackgroundColor):
        (WebCore::FrameView::setBaseBackgroundColor):
        (WebCore::FrameView::performPostLayoutTasks):
        (WebCore::FrameView::updateOverflowStatus):

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

        Add initial support for CSS variables.  Non-dynamic cases should (hopefully) all work.  Things will get
        confused if you use the CSS OM to remove variables/inject variables, etc.  In addition no DOM APIs are
        exposed yet for the new variable interfaces.

        Reviewed by Beth

        Added many tests to fast/css/variables/

        * WebCore.xcodeproj/project.pbxproj:
        * css/CSSFunctionValue.cpp: Added.
        (WebCore::CSSFunctionValue::CSSFunctionValue):
        (WebCore::CSSFunctionValue::~CSSFunctionValue):
        (WebCore::CSSFunctionValue::cssText):
        (WebCore::CSSFunctionValue::parserValue):
        * css/CSSFunctionValue.h: Added.
        (WebCore::CSSFunctionValue::create):
        * css/CSSGrammar.y:
        * css/CSSMutableStyleDeclaration.cpp:
        (WebCore::CSSMutableStyleDeclaration::CSSMutableStyleDeclaration):
        (WebCore::CSSMutableStyleDeclaration::copy):
        * css/CSSMutableStyleDeclaration.h:
        (WebCore::CSSMutableStyleDeclaration::create):
        (WebCore::CSSMutableStyleDeclaration::hasVariableDependentValue):
        * css/CSSParser.cpp:
        (WebCore::equal):
        (WebCore::equalIgnoringCase):
        (WebCore::CSSParser::~CSSParser):
        (WebCore::CSSParserString::lower):
        (WebCore::CSSParser::document):
        (WebCore::CSSParser::validUnit):
        (WebCore::unitFromString):
        (WebCore::CSSParser::checkForOrphanedUnits):
        (WebCore::CSSParser::parseValue):
        (WebCore::CSSParser::parseFillShorthand):
        (WebCore::CSSParser::parseTransitionShorthand):
        (WebCore::CSSParser::parseContent):
        (WebCore::CSSParser::parseFillImage):
        (WebCore::CSSParser::parseFillPosition):
        (WebCore::CSSParser::parseFillSize):
        (WebCore::CSSParser::parseFillProperty):
        (WebCore::CSSParser::parseTransitionDuration):
        (WebCore::CSSParser::parseTransitionRepeatCount):
        (WebCore::CSSParser::parseTimingFunctionValue):
        (WebCore::CSSParser::parseTransitionTimingFunction):
        (WebCore::CSSParser::parseTransitionProperty):
        (WebCore::skipCommaInDashboardRegion):
        (WebCore::CSSParser::parseDashboardRegions):
        (WebCore::CSSParser::parseCounterContent):
        (WebCore::CSSParser::parseShape):
        (WebCore::CSSParser::parseFont):
        (WebCore::CSSParser::parseFontFamily):
        (WebCore::CSSParser::parseFontFaceSrc):
        (WebCore::CSSParser::parseFontFaceUnicodeRange):
        (WebCore::CSSParser::parseColorParameters):
        (WebCore::CSSParser::parseHSLParameters):
        (WebCore::CSSParser::parseColor):
        (WebCore::CSSParser::parseColorFromValue):
        (WebCore::ShadowParseContext::commitLength):
        (WebCore::CSSParser::parseShadow):
        (WebCore::CSSParser::parseReflect):
        (WebCore::BorderImageParseContext::commitNumber):
        (WebCore::BorderImageParseContext::commitWidth):
        (WebCore::BorderImageParseContext::commitBorderImage):
        (WebCore::CSSParser::parseBorderImage):
        (WebCore::CSSParser::parseCounter):
        (WebCore::parseGradientPoint):
        (WebCore::parseGradientColorStop):
        (WebCore::CSSParser::parseGradient):
        (WebCore::CSSParser::parseCanvas):
        (WebCore::TransformOperationInfo::TransformOperationInfo):
        (WebCore::CSSParser::parseTransform):
        (WebCore::CSSParser::lex):
        (WebCore::CSSParser::text):
        (WebCore::CSSParser::createFloatingValueList):
        (WebCore::CSSParser::sinkFloatingValueList):
        (WebCore::CSSParser::createFloatingFunction):
        (WebCore::CSSParser::sinkFloatingFunction):
        (WebCore::CSSParser::sinkFloatingValue):
        (WebCore::CSSParser::createFloatingMediaQueryExp):
        (WebCore::CSSParser::createCharsetRule):
        (WebCore::CSSParser::createImportRule):
        (WebCore::CSSParser::createVariablesRule):
        (WebCore::CSSParser::addVariable):
        (WebCore::CSSParser::clearVariables):
        (WebCore::CSSParser::parseVariable):
        (WebCore::CSSParser::parsePropertyWithResolvedVariables):
        (WebCore::CSSParser::checkForVariables):
        (WebCore::CSSParser::addUnresolvedProperty):
        (WebCore::cssPropertyID):
        (WebCore::cssValueKeywordID):
        * css/CSSParser.h:
        * css/CSSParserValues.cpp: Added.
        (WebCore::CSSParserValueList::~CSSParserValueList):
        (WebCore::CSSParserValueList::addValue):
        (WebCore::CSSParserValueList::deleteValueAt):
        (WebCore::CSSParserValue::createCSSValue):
        * css/CSSParserValues.h: Added.
        (WebCore::CSSParserString::operator String):
        (WebCore::CSSParserString::operator AtomicString):
        (WebCore::CSSParserValue::):
        (WebCore::CSSParserValueList::CSSParserValueList):
        (WebCore::CSSParserValueList::size):
        (WebCore::CSSParserValueList::current):
        (WebCore::CSSParserValueList::next):
        (WebCore::CSSParserValueList::valueAt):
        (WebCore::CSSParserValueList::clear):
        (WebCore::CSSParserValueList::containsVariables):
        (WebCore::CSSParserFunction::~CSSParserFunction):
        * css/CSSPrimitiveValue.cpp:
        (WebCore::CSSPrimitiveValue::getStringValue):
        (WebCore::CSSPrimitiveValue::cssText):
        (WebCore::CSSPrimitiveValue::parserValue):
        * css/CSSPrimitiveValue.h:
        (WebCore::CSSPrimitiveValue::):
        (WebCore::CSSPrimitiveValue::setPrimitiveType):
        * css/CSSRule.h:
        (WebCore::CSSRule::):
        * css/CSSRule.idl:
        * css/CSSStyleDeclaration.cpp:
        (WebCore::CSSStyleDeclaration::copyPropertiesInSet):
        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::addMatchedDeclaration):
        (WebCore::CSSStyleSelector::addVariables):
        (WebCore::CSSStyleSelector::resolveVariableDependentValue):
        (WebCore::CSSRuleSet::addRulesFromSheet):
        (WebCore::CSSStyleSelector::applyDeclarations):
        * css/CSSStyleSelector.h:
        * css/CSSValue.h:
        (WebCore::CSSValue::isVariableDependentValue):
        (WebCore::CSSValue::parserValue):
        * css/CSSValueList.cpp:
        (WebCore::CSSValueList::CSSValueList):
        (WebCore::CSSValueList::createParserValueList):
        * css/CSSValueList.h:
        (WebCore::CSSValueList::createFromParserValueList):
        * css/CSSVariableDependentValue.cpp: Added.
        (WebCore::CSSVariableDependentValue::CSSVariableDependentValue):
        (WebCore::CSSVariableDependentValue::~CSSVariableDependentValue):
        (WebCore::CSSVariableDependentValue::cssText):
        * css/CSSVariableDependentValue.h: Added.
        (WebCore::CSSVariableDependentValue::create):
        (WebCore::CSSVariableDependentValue::isVariableDependentValue):
        (WebCore::CSSVariableDependentValue::valueList):
        * css/CSSVariablesDeclaration.cpp: Added.
        (WebCore::CSSVariablesDeclaration::CSSVariablesDeclaration):
        (WebCore::CSSVariablesDeclaration::~CSSVariablesDeclaration):
        (WebCore::CSSVariablesDeclaration::getVariableValue):
        (WebCore::CSSVariablesDeclaration::removeVariable):
        (WebCore::CSSVariablesDeclaration::setVariable):
        (WebCore::CSSVariablesDeclaration::addParsedVariable):
        (WebCore::CSSVariablesDeclaration::getParsedVariable):
        (WebCore::CSSVariablesDeclaration::length):
        (WebCore::CSSVariablesDeclaration::item):
        (WebCore::CSSVariablesDeclaration::parentRule):
        (WebCore::CSSVariablesDeclaration::cssText):
        * css/CSSVariablesDeclaration.h: Added.
        (WebCore::CSSVariablesDeclaration::create):
        * css/CSSVariablesRule.cpp: Added.
        (WebCore::CSSVariablesRule::CSSVariablesRule):
        (WebCore::CSSVariablesRule::~CSSVariablesRule):
        (WebCore::CSSVariablesRule::cssText):
        * css/CSSVariablesRule.h: Added.
        (WebCore::CSSVariablesRule::media):
        (WebCore::CSSVariablesRule::variables):
        (WebCore::CSSVariablesRule::type):
        (WebCore::CSSVariablesRule::isVariablesRule):
        (WebCore::CSSVariablesRule::setDeclaration):
        * css/MediaQueryExp.cpp:
        (WebCore::MediaQueryExp::MediaQueryExp):
        * css/MediaQueryExp.h:
        * css/SVGCSSParser.cpp:
        (WebCore::CSSParser::parseSVGValue):
        (WebCore::CSSParser::parseSVGStrokeDasharray):
        * css/StyleBase.h:
        (WebCore::StyleBase::isVariablesRule):
        * css/tokenizer.flex:

2008-06-19  Julien Chaffraix  <jchaffraix@webkit.org>

        Reviewed by Darin.

        Bug 19529 : Empty clients need to be refactored
        https://bugs.webkit.org/show_bug.cgi?id=19529

        - SVGImageEmptyClients' refactoring in order to be able to use them for other
        elements.

        - Trimmed empty spaces that were pointed out by git.

        * WebCore.xcodeproj/project.pbxproj:
        * loader/EmptyClients.h: Copied from WebCore/svg/graphics/SVGImageEmptyClients.h.

        (WebCore::EmptyChromeClient::~EmptyChromeClient):
        (WebCore::EmptyFrameLoaderClient::~EmptyFrameLoaderClient):
        (WebCore::EmptyEditorClient::~EmptyEditorClient):
        (WebCore::EmptyEditorClient::smartInsertDeleteEnabled):
        (WebCore::EmptyContextMenuClient::~EmptyContextMenuClient):
        (WebCore::EmptyDragClient::~EmptyDragClient):
        (WebCore::EmptyDragClient::createDragImageForLink):
        (WebCore::EmptyInspectorClient::~EmptyInspectorClient):
        Renamed SVGImageEmpty*Client classes to Empty*Client.

        * svg/graphics/SVGImage.cpp:
        (WebCore::SVGImage::dataChanged):
        * svg/graphics/SVGImageEmptyClients.h: Removed.

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

        Reviewed by Darin Adler.

        - fix <rdar://problem/6008098> REGRESSION: Crash at FontFallbackList::fontDataAt()

        Test: fast/css/font-face-multiple-families.html

        Made changes to reflect the fact that the relationship between
        CSSFontFace and CSSSegmentedFontFace is in fact many-to-many.

        * css/CSSFontFace.cpp:
        (WebCore::CSSFontFace::addedToSegmentedFontFace): Added.
        (WebCore::CSSFontFace::removedFromSegmentedFontFace): Added.
        (WebCore::CSSFontFace::fontLoaded): Changed to notify all segmented font
        faces that include this font face.
        (WebCore::CSSFontFace::getFontData): Updated to get the font selector
        from one of the segmented font faces.
        * css/CSSFontFace.h:
        (WebCore::CSSFontFace::CSSFontFace):
        * css/CSSFontSelector.cpp:
        (WebCore::CSSFontSelector::addFontFaceRule): Fixed the direct cause of
        the crash, namely releasing the font face when adding it to the first
        family that uses it, making it impossible to add it to the second and
        onwards families.
        * css/CSSSegmentedFontFace.cpp:
        (WebCore::CSSSegmentedFontFace::~CSSSegmentedFontFace): Added code to
        call CSSFontFace::removedFromSegmentedFontFace().
        (WebCore::CSSSegmentedFontFace::overlayRange): Added code to call
        CSSFontFace::{addedTo, removedFrom}SegmentedFontFace().

2008-06-19  Alexey Proskuryakov  <ap@webkit.org>

        Qt build fix.

        * bridge/qt/qt_runtime.h: Include completion.h.

2008-06-17  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Darin.

        Prepare JavaScript heap for being per-thread.

        * ForwardingHeaders/kjs/JSGlobalData.h: Added.
        * bindings/js/GCController.cpp:
        (WebCore::collect):
        (WebCore::GCController::gcTimerFired):
        (WebCore::GCController::garbageCollectNow):
        * bindings/js/JSAudioConstructor.cpp:
        (WebCore::JSAudioConstructor::JSAudioConstructor):
        * bindings/js/JSCSSRuleCustom.cpp:
        (WebCore::toJS):
        * bindings/js/JSCSSStyleDeclarationCustom.cpp:
        (WebCore::JSCSSStyleDeclaration::nameGetter):
        * bindings/js/JSCSSValueCustom.cpp:
        (WebCore::toJS):
        * bindings/js/JSCanvasPixelArrayCustom.cpp:
        (WebCore::JSCanvasPixelArray::indexGetter):
        (WebCore::toJS):
        * bindings/js/JSCanvasRenderingContext2DCustom.cpp:
        (WebCore::toJS):
        * bindings/js/JSClipboardCustom.cpp:
        (WebCore::JSClipboard::types):
        (WebCore::JSClipboard::getData):
        * bindings/js/JSCustomXPathNSResolver.cpp:
        (WebCore::JSCustomXPathNSResolver::lookupNamespaceURI):
        * bindings/js/JSDOMApplicationCacheCustom.cpp:
        (WebCore::JSDOMApplicationCache::addEventListener):
        (WebCore::JSDOMApplicationCache::removeEventListener):
        (WebCore::JSDOMApplicationCache::setOnchecking):
        (WebCore::JSDOMApplicationCache::setOnerror):
        (WebCore::JSDOMApplicationCache::setOnnoupdate):
        (WebCore::JSDOMApplicationCache::setOndownloading):
        (WebCore::JSDOMApplicationCache::setOnprogress):
        (WebCore::JSDOMApplicationCache::setOnupdateready):
        (WebCore::JSDOMApplicationCache::setOncached):
        * bindings/js/JSDOMBinding.cpp:
        (WebCore::jsStringOrNull):
        (WebCore::jsOwnedStringOrNull):
        (WebCore::jsStringOrUndefined):
        (WebCore::jsStringOrFalse):
        (WebCore::nonCachingStaticFunctionGetter):
        (WebCore::objectToStringFunctionGetter):
        * bindings/js/JSDOMBinding.h:
        (WebCore::DOMObject::DOMObject):
        (WebCore::cacheDOMObject):
        (WebCore::cacheSVGDOMObject):
        * bindings/js/JSDOMWindowBase.cpp:
        (WebCore::JSDOMWindowBase::JSDOMWindowBase):
        (WebCore::JSDOMWindowBase::getValueProperty):
        (WebCore::JSDOMWindowBase::setListener):
        (WebCore::JSDOMWindowBase::findOrCreateJSEventListener):
        (WebCore::JSDOMWindowBase::findJSUnprotectedEventListener):
        (WebCore::JSDOMWindowBase::findOrCreateJSUnprotectedEventListener):
        (WebCore::windowProtoFuncAToB):
        (WebCore::windowProtoFuncBToA):
        (WebCore::windowProtoFuncSetTimeout):
        (WebCore::windowProtoFuncSetInterval):
        (WebCore::windowProtoFuncAddEventListener):
        * bindings/js/JSDOMWindowBase.h:
        * bindings/js/JSDOMWindowShell.cpp:
        (WebCore::JSDOMWindowShell::operator new):
        * bindings/js/JSDOMWindowShell.h:
        * bindings/js/JSDocumentCustom.cpp:
        (WebCore::toJS):
        * bindings/js/JSElementCustom.cpp:
        (WebCore::toJSNewlyCreated):
        * bindings/js/JSEventCustom.cpp:
        (WebCore::toJS):
        * bindings/js/JSEventListener.cpp:
        (WebCore::JSLazyEventListener::eventParameterName):
        (WebCore::JSLazyEventListener::parseCode):
        * bindings/js/JSEventTargetBase.cpp:
        (WebCore::jsEventTargetAddEventListener):
        * bindings/js/JSEventTargetBase.h:
        (WebCore::JSEventTargetPrototype::self):
        * bindings/js/JSEventTargetNode.cpp:
        (WebCore::JSEventTargetNode::setListener):
        * bindings/js/JSHTMLCollectionCustom.cpp:
        (WebCore::getNamedItems):
        (WebCore::toJS):
        * bindings/js/JSHTMLFormElementCustom.cpp:
        (WebCore::JSHTMLFormElement::nameGetter):
        * bindings/js/JSHTMLInputElementBase.cpp:
        (WebCore::JSHTMLInputElementBase::getValueProperty):
        * bindings/js/JSHTMLOptionElementConstructor.cpp:
        (WebCore::JSHTMLOptionElementConstructor::JSHTMLOptionElementConstructor):
        * bindings/js/JSHTMLOptionsCollectionCustom.cpp:
        (WebCore::JSHTMLOptionsCollection::length):
        * bindings/js/JSInspectedObjectWrapper.cpp:
        (WebCore::JSInspectedObjectWrapper::wrap):
        * bindings/js/JSInspectorCallbackWrapper.cpp:
        (WebCore::JSInspectorCallbackWrapper::wrap):
        * bindings/js/JSLocationCustom.cpp:
        (WebCore::JSLocation::toString):
        * bindings/js/JSNamedNodesCollection.cpp:
        (WebCore::JSNamedNodesCollection::lengthGetter):
        * bindings/js/JSNavigatorCustom.cpp:
        (WebCore::JSNavigator::appVersion):
        * bindings/js/JSNodeCustom.cpp:
        (WebCore::createWrapper):
        * bindings/js/JSNodeFilterCustom.cpp:
        (WebCore::JSNodeFilter::acceptNode):
        * bindings/js/JSPluginElementFunctions.cpp:
        (WebCore::getRuntimeObject):
        * bindings/js/JSRGBColor.cpp:
        (WebCore::getJSRGBColor):
        * bindings/js/JSSQLResultSetRowListCustom.cpp:
        (WebCore::JSSQLResultSetRowList::item):
        * bindings/js/JSSVGLazyEventListener.cpp:
        (WebCore::JSSVGLazyEventListener::eventParameterName):
        * bindings/js/JSStorageCustom.cpp:
        (WebCore::JSStorage::nameGetter):
        * bindings/js/JSStyleSheetCustom.cpp:
        (WebCore::toJS):
        * bindings/js/JSTextCustom.cpp:
        (WebCore::toJSNewlyCreated):
        * bindings/js/JSXMLHttpRequestConstructor.cpp:
        (WebCore::JSXMLHttpRequestConstructor::construct):
        * bindings/js/JSXMLHttpRequestCustom.cpp:
        (WebCore::JSXMLHttpRequest::setOnreadystatechange):
        (WebCore::JSXMLHttpRequest::setOnload):
        (WebCore::JSXMLHttpRequest::setOnprogress):
        (WebCore::JSXMLHttpRequest::getResponseHeader):
        (WebCore::JSXMLHttpRequest::addEventListener):
        (WebCore::JSXMLHttpRequest::removeEventListener):
        * bindings/js/JSXSLTProcessorConstructor.cpp:
        (WebCore::JSXSLTProcessorConstructor::construct):
        * bindings/js/JSXSLTProcessorCustom.cpp:
        (WebCore::JSXSLTProcessor::getParameter):
        * bindings/scripts/CodeGeneratorJS.pm:
        * bridge/c/c_instance.cpp:
        (KJS::Bindings::CInstance::defaultValue):
        (KJS::Bindings::CInstance::stringValue):
        (KJS::Bindings::CInstance::numberValue):
        (KJS::Bindings::CInstance::valueOf):
        * bridge/c/c_instance.h:
        * bridge/c/c_utility.cpp:
        (KJS::Bindings::convertNPVariantToValue):
        * bridge/jni/jni_instance.cpp:
        (JavaInstance::stringValue):
        (JavaInstance::numberValue):
        (JavaInstance::invokeMethod):
        (JavaInstance::defaultValue):
        (JavaInstance::valueOf):
        * bridge/jni/jni_instance.h:
        * bridge/jni/jni_jsobject.h:
        * bridge/jni/jni_jsobject.mm:
        (JavaJSObject::call):
        (JavaJSObject::setMember):
        (JavaJSObject::setSlot):
        (JavaJSObject::convertJObjectToValue):
        (JavaJSObject::getListFromJArray):
        * bridge/jni/jni_objc.mm:
        (KJS::Bindings::dispatchJNICall):
        * bridge/jni/jni_runtime.cpp:
        (JavaArray::convertJObjectToArray):
        (JavaField::dispatchValueFromInstance):
        (JavaField::valueFromInstance):
        (JavaField::dispatchSetValueToInstance):
        (JavaArray::valueAt):
        * bridge/jni/jni_utility.h:
        * bridge/objc/objc_class.mm:
        (KJS::Bindings::ObjcClass::fallbackObject):
        * bridge/objc/objc_instance.h:
        * bridge/objc/objc_instance.mm:
        (ObjcInstance::defaultValue):
        (ObjcInstance::stringValue):
        (ObjcInstance::numberValue):
        (ObjcInstance::valueOf):
        * bridge/objc/objc_utility.h:
        * bridge/objc/objc_utility.mm:
        (KJS::Bindings::convertNSStringToString):
        (KJS::Bindings::convertObjcValueToValue):
        * bridge/runtime.cpp:
        (KJS::Bindings::Instance::createRuntimeObject):
        * bridge/runtime.h:
        (KJS::Bindings::Instance::valueOf):
        * bridge/runtime_array.cpp:
        (RuntimeArray::lengthGetter):
        * bridge/runtime_method.cpp:
        (RuntimeMethod::lengthGetter):
        * bridge/runtime_object.cpp:
        (RuntimeObjectImp::RuntimeObjectImp):
        (RuntimeObjectImp::methodGetter):
        (RuntimeObjectImp::defaultValue):
        * dom/make_names.pl:
        * xml/XMLHttpRequest.cpp:
        (WebCore::XMLHttpRequest::dropProtection):
        * bridge/qt/qt_class.cpp:
        (KJS::Bindings::QtClass::fallbackObject):
        * bridge/qt/qt_instance.cpp:
        (KJS::Bindings::QtRuntimeObjectImp::construct):
        (KJS::Bindings::QtInstance::getRuntimeObject):
        (KJS::Bindings::QtInstance::invokeDefaultMethod):
        (KJS::Bindings::QtInstance::defaultValue):
        (KJS::Bindings::QtInstance::stringValue):
        (KJS::Bindings::QtInstance::numberValue):
        (KJS::Bindings::QtInstance::valueOf):
        * bridge/qt/qt_instance.h:
        * bridge/qt/qt_runtime.cpp:
        (KJS::Bindings::convertValueToQVariant):
        (KJS::Bindings::convertQVariantToValue):
        (KJS::Bindings::QtRuntimeMetaMethod::lengthGetter):
        (KJS::Bindings::QtRuntimeMetaMethod::connectGetter):
        (KJS::Bindings::QtRuntimeMetaMethod::disconnectGetter):
        (KJS::Bindings::QtRuntimeConnectionMethod::lengthGetter):
        (KJS::Bindings::QtConnectionObject::execute):
        Pass ExecState* where now required.

2008-06-19  Timothy Hatcher  <timothy@apple.com>

        Update the JavaScript syntax highlight colors to match Xcode.
        This matches the other Xcode colors we are using for HTML.

        Reviewed by Dan Bernstein.

        * page/inspector/SourceFrame.js:

2008-06-19  Keishi Hattori  <casey.hattori@gmail.com>

        Added JavaScript syntax highlighting to the Web Inspector.

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

        Reviewed by Tim Hatcher and Adam Roben.

        * page/inspector/ScriptView.js: Added a call to syntaxHighlightJavascript.
        * page/inspector/SourceFrame.js:
        (WebInspector.SourceFrame.prototype._syntaxHighlightJavascriptLine): Added.
        Modifies a line content element.
        (WebInspector.SourceFrame.prototype.syntaxHighlightJavascript): Added.
        Syntax highlights the entire script.
        * page/inspector/SourceView.js: Added a call to syntaxHighlightJavascript.

2008-06-19  Alex Mathews  <possessedpenguinbob@gmail.com>

        Reviewed by Oliver.

        Starting to clean up the SVG Filter code. Mostly adding 'create' wrapper
        functions and changing raw pointer fields to RefPtrs.

        * Configurations/WebCore.xcconfig:
        * WebCore.xcodeproj/project.pbxproj:
        * svg/SVGFEBlendElement.cpp:
        (WebCore::SVGFEBlendElement::~SVGFEBlendElement):
        (WebCore::SVGFEBlendElement::filterEffect):
        * svg/SVGFEBlendElement.h:
        * svg/SVGFEColorMatrixElement.cpp:
        (WebCore::SVGFEColorMatrixElement::~SVGFEColorMatrixElement):
        (WebCore::SVGFEColorMatrixElement::filterEffect):
        * svg/SVGFEColorMatrixElement.h:
        * svg/SVGFEComponentTransferElement.cpp:
        (WebCore::SVGFEComponentTransferElement::~SVGFEComponentTransferElement):
        (WebCore::SVGFEComponentTransferElement::filterEffect):
        * svg/SVGFEComponentTransferElement.h:
        * svg/SVGFECompositeElement.cpp:
        (WebCore::SVGFECompositeElement::~SVGFECompositeElement):
        (WebCore::SVGFECompositeElement::filterEffect):
        * svg/SVGFECompositeElement.h:
        * svg/SVGFEDiffuseLightingElement.cpp:
        (WebCore::SVGFEDiffuseLightingElement::~SVGFEDiffuseLightingElement):
        (WebCore::SVGFEDiffuseLightingElement::filterEffect):
        * svg/SVGFEDiffuseLightingElement.h:
        * svg/SVGFEDisplacementMapElement.cpp:
        (WebCore::SVGFEDisplacementMapElement::~SVGFEDisplacementMapElement):
        (WebCore::SVGFEDisplacementMapElement::filterEffect):
        * svg/SVGFEDisplacementMapElement.h:
        * svg/SVGFEFloodElement.cpp:
        (WebCore::SVGFEFloodElement::~SVGFEFloodElement):
        (WebCore::SVGFEFloodElement::filterEffect):
        * svg/SVGFEFloodElement.h:
        * svg/SVGFEGaussianBlurElement.cpp:
        (WebCore::SVGFEGaussianBlurElement::~SVGFEGaussianBlurElement):
        (WebCore::SVGFEGaussianBlurElement::filterEffect):
        * svg/SVGFEGaussianBlurElement.h:
        * svg/SVGFEImageElement.cpp:
        (WebCore::SVGFEImageElement::~SVGFEImageElement):
        (WebCore::SVGFEImageElement::filterEffect):
        * svg/SVGFEImageElement.h:
        * svg/SVGFEMergeElement.cpp:
        (WebCore::SVGFEMergeElement::~SVGFEMergeElement):
        (WebCore::SVGFEMergeElement::filterEffect):
        * svg/SVGFEMergeElement.h:
        * svg/SVGFEOffsetElement.cpp:
        (WebCore::SVGFEOffsetElement::~SVGFEOffsetElement):
        (WebCore::SVGFEOffsetElement::filterEffect):
        * svg/SVGFEOffsetElement.h:
        * svg/SVGFESpecularLightingElement.cpp:
        (WebCore::SVGFESpecularLightingElement::~SVGFESpecularLightingElement):
        (WebCore::SVGFESpecularLightingElement::filterEffect):
        * svg/SVGFESpecularLightingElement.h:
        * svg/SVGFETileElement.cpp:
        (WebCore::SVGFETileElement::~SVGFETileElement):
        (WebCore::SVGFETileElement::filterEffect):
        * svg/SVGFETileElement.h:
        * svg/SVGFETurbulenceElement.cpp:
        (WebCore::SVGFETurbulenceElement::~SVGFETurbulenceElement):
        (WebCore::SVGFETurbulenceElement::filterEffect):
        * svg/SVGFETurbulenceElement.h:
        * svg/graphics/SVGResourceFilter.cpp:
        (WebCore::SVGResourceFilter::addFilterEffect):
        * svg/graphics/SVGResourceFilter.h:
        * svg/graphics/filters/SVGFEBlend.cpp:
        (WebCore::SVGFEBlend::create):
        * svg/graphics/filters/SVGFEBlend.h:
        * svg/graphics/filters/SVGFEColorMatrix.cpp:
        (WebCore::SVGFEColorMatrix::create):
        * svg/graphics/filters/SVGFEColorMatrix.h:
        * svg/graphics/filters/SVGFEComponentTransfer.cpp:
        (WebCore::SVGFEComponentTransfer::create):
        * svg/graphics/filters/SVGFEComponentTransfer.h:
        * svg/graphics/filters/SVGFEComposite.cpp:
        (WebCore::SVGFEComposite::create):
        * svg/graphics/filters/SVGFEComposite.h:
        * svg/graphics/filters/SVGFEConvolveMatrix.cpp:
        (WebCore::SVGFEConvolveMatrix::create):
        * svg/graphics/filters/SVGFEConvolveMatrix.h:
        * svg/graphics/filters/SVGFEDiffuseLighting.cpp:
        (WebCore::SVGFEDiffuseLighting::create):
        (WebCore::SVGFEDiffuseLighting::~SVGFEDiffuseLighting):
        (WebCore::SVGFEDiffuseLighting::lightSource):
        (WebCore::SVGFEDiffuseLighting::setLightSource):
        * svg/graphics/filters/SVGFEDiffuseLighting.h:
        * svg/graphics/filters/SVGFEDisplacementMap.cpp:
        (WebCore::SVGFEDisplacementMap::create):
        * svg/graphics/filters/SVGFEDisplacementMap.h:
        * svg/graphics/filters/SVGFEFlood.cpp:
        (WebCore::SVGFEFlood::create):
        * svg/graphics/filters/SVGFEFlood.h:
        * svg/graphics/filters/SVGFEGaussianBlur.cpp:
        (WebCore::SVGFEGaussianBlur::create):
        * svg/graphics/filters/SVGFEGaussianBlur.h:
        * svg/graphics/filters/SVGFEImage.cpp:
        (WebCore::SVGFEImage::create):
        * svg/graphics/filters/SVGFEImage.h:
        * svg/graphics/filters/SVGFEMerge.cpp:
        (WebCore::SVGFEMerge::SVGFEMerge):
        (WebCore::SVGFEMerge::create):
        * svg/graphics/filters/SVGFEMerge.h:
        * svg/graphics/filters/SVGFEOffset.cpp:
        (WebCore::SVGFEOffset::create):
        * svg/graphics/filters/SVGFEOffset.h:
        * svg/graphics/filters/SVGFESpecularLighting.cpp:
        (WebCore::SVGFESpecularLighting::create):
        (WebCore::SVGFESpecularLighting::~SVGFESpecularLighting):
        (WebCore::SVGFESpecularLighting::lightSource):
        (WebCore::SVGFESpecularLighting::setLightSource):
        * svg/graphics/filters/SVGFESpecularLighting.h:
        * svg/graphics/filters/SVGFETile.cpp: Added.
        (WebCore::SVGFETile::SVGFETile):
        (WebCore::SVGFETile::create):
        * svg/graphics/filters/SVGFETile.h:
        * svg/graphics/filters/SVGFETurbulence.cpp:
        (WebCore::SVGFETurbulence::create):
        * svg/graphics/filters/SVGFETurbulence.h:
        * svg/graphics/filters/SVGFilterEffect.h:
        * svg/graphics/filters/SVGLightSource.h:

2008-06-18  Adele Peterson  <adele@apple.com>

        Reviewed by Dan Bernstein.

        Fix assertion in fast/dom/ImageDocument-image-deletion.html caused by new media document creation.

        * dom/DOMImplementation.cpp: (WebCore::DOMImplementation::createDocument):
          Create the media document after we're done processing pdfs and images.

192008-06-17  Dan Bernstein  <mitz@apple.com>

        Reviewed by Darin Adler.

        - fix https://bugs.webkit.org/show_bug.cgi?id=19598
          Crash in WebCore::RenderBlock::determineStartPosition

        Test: fast/dynamic/floating-to-positioned-2.html

        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::setStyle): Changed to also remove relatively
        positioned floats from object lists when they become positioned, because
        then they cease to be floating.

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

        Reviewed by Mark Rowe.

        - fix storage leak

        * css/CSSMutableStyleDeclaration.cpp:
        (WebCore::CSSMutableStyleDeclaration::copy): Added an adoptRef that
        I missed when changing these objects to start with a refcount of 1.

2008-06-18  Timothy Hatcher  <timothy@apple.com>

        Add a script build phase to remove the WebKit.qrc file from
        WebCore's resources. This file is used for the Qt port, but we
        copy the whole inspector folder for connivence and get this file.

        Reviewed by Adam Roben.

        * WebCore.xcodeproj/project.pbxproj: New script phase.

2008-06-18  Timothy Hatcher  <timothy@apple.com>

        Combine the Web Inspector's JavaScript resources into one large
        script file to speed up loading of the Inspector. This is only
        done for Release and Production builds.

        Reviewed by Adam Roben.

        * WebCore.xcodeproj/project.pbxproj: Added a Streamline Inspector Source
        script build phase that calls combine-javascript-resources and
        moves files around in the build directory.
        * combine-javascript-resources: Added.

2008-06-18  Rob Buis  <buis@kde.org>

        Reviewed by Darin.

        https://bugs.webkit.org/show_bug.cgi?id=18786
        Once rendered, SVG text elements removed from DOM continue to be displayed

        Repaint the text visual rect before removing it.

        * rendering/RenderSVGInlineText.cpp:
        (WebCore::RenderSVGInlineText::destroy):
        * rendering/RenderSVGInlineText.h:

2008-06-18  Christian Dywan  <christian@twotoasts.de>

        Gtk build fix, brought up by Dirk Schulze.

        * page/gtk/AccessibilityObjectWrapperAtk.cpp:

2008-06-17  Beth Dakin  <bdakin@apple.com>

        Reviewed by Tim.

        This patch removes all instances of the phrase "TextMarker" from 
        function names in the C++ accessibility code. TextMarkers only 
        exists in the Objective-C code.

        * page/AccessibilityObject.cpp:
        (WebCore::AccessibilityObject::visiblePositionRangeForLine):
        (WebCore::AccessibilityObject::visiblePositionRangeForUnorderedPositions):
        (WebCore::AccessibilityObject::positionOfLeftWord):
        (WebCore::AccessibilityObject::positionOfRightWord):
        (WebCore::AccessibilityObject::leftLineVisiblePositionRange):
        (WebCore::AccessibilityObject::rightLineVisiblePositionRange):
        (WebCore::AccessibilityObject::sentenceForPosition):
        (WebCore::AccessibilityObject::paragraphForPosition):
        (WebCore::AccessibilityObject::styleRangeForPosition):
        (WebCore::AccessibilityObject::visiblePositionRangeForRange):
        (WebCore::AccessibilityObject::stringForVisiblePositionRange):
        (WebCore::AccessibilityObject::boundsForVisiblePositionRange):
        (WebCore::AccessibilityObject::lengthForVisiblePositionRange):
        (WebCore::AccessibilityObject::setSelectedVisiblePositionRange):
        (WebCore::AccessibilityObject::visiblePositionForPoint):
        (WebCore::AccessibilityObject::nextVisiblePosition):
        (WebCore::AccessibilityObject::previousVisiblePosition):
        (WebCore::AccessibilityObject::nextWordEnd):
        (WebCore::AccessibilityObject::previousWordStart):
        (WebCore::AccessibilityObject::nextLineEndPosition):
        (WebCore::AccessibilityObject::previousLineStartPosition):
        (WebCore::AccessibilityObject::nextSentenceEndPosition):
        (WebCore::AccessibilityObject::previousSentenceStartPosition):
        (WebCore::AccessibilityObject::nextParagraphEndPosition):
        (WebCore::AccessibilityObject::previousParagraphStartPosition):
        (WebCore::AccessibilityObject::visiblePositionForIndex):
        (WebCore::AccessibilityObject::accessibilityObjectForPosition):
        (WebCore::AccessibilityObject::lineForPosition):
        (WebCore::AccessibilityObject::plainTextRangeForVisiblePositionRange):
        (WebCore::AccessibilityObject::index):
        (WebCore::AccessibilityObject::doAXRangeForPosition):
        (WebCore::AccessibilityObject::doAXStyleRangeForIndex):
        (WebCore::AccessibilityObject::doAXLineForIndex):
        * page/AccessibilityObject.h:
        * page/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::visiblePositionRangeForLine):
        (WebCore::AccessibilityRenderObject::boundsForVisiblePositionRange):
        (WebCore::AccessibilityRenderObject::setSelectedVisiblePositionRange):
        (WebCore::AccessibilityRenderObject::visiblePositionForPoint):
        (WebCore::AccessibilityRenderObject::visiblePositionForIndex):
        (WebCore::AccessibilityRenderObject::index):
        (WebCore::AccessibilityRenderObject::doAXBoundsForRange):
        * page/AccessibilityRenderObject.h:
        * page/mac/AccessibilityObjectWrapper.mm:
        (-[AccessibilityObjectWrapper accessibilityAttributeValue:]):
        (-[AccessibilityObjectWrapper accessibilitySetValue:forAttribute:]):
        (-[AccessibilityObjectWrapper doAXAttributedStringForRange:]):
        (-[AccessibilityObjectWrapper accessibilityAttributeValue:forParameter:]):

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

        Reviewed by Darin Adler.

        <rdar://problem/5775802> WebCore should not force use of GCC 4.0.

        * WebCore.xcodeproj/project.pbxproj:

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

        Reviewed by Sam.

        - eliminate the last RefCounted client that needs the "start at 0" behavior, NodeFilter

        - move handling of non-Attr arguments from the code generation script to the DOM
          itself (as with every other type of argument)

        * bindings/js/JSNodeFilterCustom.cpp:
        (WebCore::toNodeFilter): Changed return type to PassRefPtr. Use create instead of new.

        * bindings/objc/DOM.mm:
        (-[DOMDocument createNodeIterator:whatToShow:filter:expandEntityReferences:]):
        Use create instead of new.
        (-[DOMDocument createTreeWalker:whatToShow:filter:expandEntityReferences:]):
        Ditto.

        * bindings/scripts/CodeGeneratorJS.pm: Use PassRefPtr and RefPtr for toNodeFilter and
        the local variable for NodeFilter arguments. Remove the TypeCanFailConversion mechanism:
        It's no longer needed for Attr, was not having any effect for VoidCallback, and was
        returning false for all other types.

        * dom/Element.cpp:
        (WebCore::Element::setAttributeNode): Added code to return TYPE_MISMATCH_ERR when
        the attr is 0 -- this matches what the autogenerated bindings did before.
        (WebCore::Element::setAttributeNodeNS): Ditto.
        (WebCore::Element::removeAttributeNode): Ditto.

        * dom/NodeFilter.h: Added create, made constructor private, and got rid of code to
        initialize the refcount to 0.

        * html/CanvasPattern.h: Made CachedResourceClient base class private in a
        more-explicit way.

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

        Fix <rdar://6016755> Assertion failure when WebView is child of
        message-only window

        Reviewed by Ada Chan.

        No test possible.

        * platform/win/WindowMessageBroadcaster.cpp:
        (WebCore::WindowMessageBroadcaster::addListener): Only subclass the
        window when we're adding our first listener. Removed an assertion that
        an old WNDPROC was returned -- this will be 0 in the case of a
        message-only window. Added an assertion to help catch cases where we
        try to subclass the window twice.
        (WebCore::WindowMessageBroadcaster::unsubclassWindow): Removed an
        assertion that is not correct in the message-only window case.

2008-06-17  Adele Peterson  <adele@apple.com>

        Attempt to fix builds by wrapping new code in #if ENABLE(VIDEO)

        * loader/MediaDocument.cpp:
        * loader/MediaDocument.h:

2008-06-17  Adele Peterson  <adele@apple.com>

        Attempt to fix builds by wrapping new code in #if ENABLE(VIDEO)

        * dom/DOMImplementation.cpp: (WebCore::DOMImplementation::createDocument):

2008-06-17  Adele Peterson  <adele@apple.com>

        Reviewed by Brady.

        Fix for <rdar://problem/5605768> Render full-page video/audio with <video>/<audio> instead of QuickTime plug-in

        * WebCore.xcodeproj/project.pbxproj: Added MediaDocument class.
        * GNUmakefile.am: ditto.
        * WebCore.pro: ditto.
        * WebCore.vcproj/WebCore.vcproj: ditto.
        * WebCoreSources.bkl: ditto.

        * dom/DOMImplementation.cpp: (WebCore::DOMImplementation::createDocument):
          Check to see if the type can be played by our MediaPlayer, if so create a MediaDocument
        * dom/Document.h: (WebCore::Document::isMediaDocument): Added.

        * loader/MediaDocument.cpp: Added.
        (WebCore::MediaTokenizer::MediaTokenizer):
        (WebCore::MediaTokenizer::wantsRawData):
        (WebCore::MediaTokenizer::write):
        (WebCore::MediaTokenizer::createDocumentStructure):
        (WebCore::MediaTokenizer::writeRawData):
        (WebCore::MediaTokenizer::stopParsing):
        (WebCore::MediaTokenizer::finish):
        (WebCore::MediaTokenizer::isWaitingForScripts):
        (WebCore::MediaDocument::MediaDocument):
        (WebCore::MediaDocument::createTokenizer):
        * loader/MediaDocument.h: Added.
        (WebCore::MediaDocument::create):
        (WebCore::MediaDocument::isMediaDocument):

        * page/InspectorController.cpp: (WebCore::getResourceDocumentNode):
          Added MediaDocument case so it is handled the same as a PluginDocument or ImageDocument.
        * platform/graphics/MediaPlayer.cpp: (WebCore::MediaPlayer::supportsType): Added.
        * platform/graphics/MediaPlayer.h:
        * rendering/RenderMedia.cpp: (WebCore::RenderMedia::updateControlVisibility):
          Instead of checking the html element to decide if the media is audio, check the player.
          This means that if a video element actually only contains audio, then we will still avoid fading the controls in and out.

2008-06-17  Timothy Hatcher  <timothy@apple.com>

        Adds the file name and line number for call frames next to
        the function name in the Call Stack pane.

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

        Reviewed by Adam Roben.

        * English.lproj/localizedStrings.js: Updated strings.
        * page/inspector/CallStackSidebarPane.js:
        (WebInspector.CallStackSidebarPane.prototype.update): Create a subtitle
        based on the URL and line number.

2008-06-17  Timothy Hatcher  <timothy@apple.com>

        Use accurate call frame title's based on the call frame type.

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

        Reviewed by Geoff Garen.

        * English.lproj/localizedStrings.js: Updated strings.
        * bindings/js/JSJavaScriptCallFrameCustom.cpp:
        (WebCore::JSJavaScriptCallFrame::evaluate): Removed the isValid()
        check since the evaluate() functiondoes the check already.
        (WebCore::JSJavaScriptCallFrame::thisObject): Removed the isValid()
        check, since thisObject() does the check and returns null if invalid.
        (WebCore::JSJavaScriptCallFrame::type): Return a string
        based on the enum value of the type.
        (WebCore::JSJavaScriptCallFrame::scopeChain): Removed the isValid()
        check, since scopeChain() does the check and returns null if invalid.
        So just null check scopeChain().
        * page/JavaScriptCallFrame.cpp:
        (WebCore::JavaScriptCallFrame::type): Return the DebuggerCallFrame::Type.
        Return DebuggerCallFrame::UnknownType if the call frame is invalid.
        * page/JavaScriptCallFrame.h:
        * page/JavaScriptCallFrame.idl: Add the type property.
        * page/inspector/CallStackSidebarPane.js:
        (WebInspector.CallStackSidebarPane.prototype.update): Check the type
        of the call frame to create the correct title.
        * page/inspector/ScriptsPanel.js:
        (WebInspector.ScriptsPanel.prototype._addScriptToFilesMenu): Use the
        "(program)" title for the file menu to match the call frames.

2008-06-17  Timothy Hatcher  <timothy@apple.com>

        Remember the expanded state of objects in the Scope Variables pane when stepping.
        https://bugs.webkit.org/show_bug.cgi?id=19584

        Reviewed by Adam Roben.

        * page/inspector/ObjectPropertiesSection.js:
        (WebInspector.ObjectPropertiesSection): Add an optional argument
        that is the treeElementConstructor to use when making TreeElements.
        (WebInspector.ObjectPropertiesSection.prototype.onpopulate): Use
        the treeElementConstructor to create TreeElements.
        (WebInspector.ObjectPropertyTreeElement.prototype.onpopulate): Use
        the treeElementConstructor to create TreeElements.
        * page/inspector/ScopeChainSidebarPane.js:
        (WebInspector.ScopeChainSidebarPane.prototype.update): Create an
        _expandedProperties object on the callframe if one doesn't exist yet.
        Pass WebInspector.ScopeVariableTreeElement to the ObjectPropertiesSection
        as the TreeElement constructor we want to use.
        (WebInspector.ScopeVariableTreeElement): Added.
        (WebInspector.ScopeVariableTreeElement.prototype.onattach): Expand if the
        propertyIdentifier is in the pane's _expandedProperties.
        (WebInspector.ScopeVariableTreeElement.prototype.onexpand): Add the
        propertyIdentifier to the pane's _expandedProperties.
        (WebInspector.ScopeVariableTreeElement.prototype.oncollapse): Remove the
        propertyIdentifier from the pane's _expandedProperties.
        (WebInspector.ScopeVariableTreeElement.prototype.get propertyIdentifier):
        Return an identifier that has the section title, subtile and propertyPath concatenated.
        (WebInspector.ScopeVariableTreeElement.prototype.get propertyPath): Return a string
        that has the propertyNames up to the root ancestor concatenated with a period.

2008-06-17  Timothy Hatcher  <timothy@apple.com>

        Focus the mainPanelsElement in a timeout so it happens after the
        initial focus, so it doesn't get reset to the first toolbar button.
        This initial focus happens on Mac when the window is made key and
        the WebHTMLView becomes the first responder.

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

        Reviewed by Adele Peterson.

        * page/inspector/inspector.js:
        (WebInspector.loaded): Focus the mainPanelsElement in a timeout.

2008-06-17  Timothy Hatcher  <timothy@apple.com>

        Use tabIndex in the Web Inspector for focusable areas.
        https://bugs.webkit.org/show_bug.cgi?id=19583

        Reviewed by Adam Roben.

        * page/inspector/Console.js:
        (WebInspector.Console): No longer make the messagesElement
        focusable since the engine handles the case for us. The promptElement
        now handles the key events.
        (WebInspector.Console.prototype.show): Set the current focus element
        to the prompt element.
        (WebInspector.Console.prototype.hide): Set the current focus element
        to WebInspector.previousFocusElement.
        (WebInspector.Console.prototype._messagesFocused): Removed.
        * page/inspector/DataGrid.js:
        (WebInspector.DataGrid): Remove the focusable class.
        * page/inspector/DatabaseQueryView.js:
        (WebInspector.DatabaseQueryView): Remove the focusable class. Set
        tabIndex to 0. The promptElement now handles the key events.
        (WebInspector.DatabaseQueryView.prototype._focused): Removed.
        * page/inspector/inspector.css: Updated selectors to use :focus
        instead of .focused and .blurred.
        * page/inspector/inspector.html: Removed focusable, focused and blurred
        classes and added tabindex attributes.
        * page/inspector/inspector.js:
        (WebInspector.get previousFocusElement): Added. Returns _previousFocusElement.
        (WebInspector.set currentFocusElement): Simplified. Stores the previous element
        in _previousFocusElement for clients that need it. Calls focus on the passed
        in element or blur on the previous element.
        (WebInspector.loaded): Removed the event listener for mousedown. Renamed
        changeFocus to focusChanged.
        (WebInspector.focusChanged): Renamed from changeFocus. Just sets the
        currentFocusElement to the event target.
        (WebInspector.startEditing): Changed to use tabIndex and blur events.
        Add a more robust check for restoring focus to the previous element
        when editing finishes that catches focused descendants.

2008-06-17  Timothy Hatcher  <timothy@apple.com>

        Removed redundant if statements and early returns from
        AccessibilityRenderObject::ariaRoleAttribute.

        Reviewed by Sam Wenig.

        * page/AccessibilityRenderObject.cpp:
        (AccessibilityRenderObject::ariaRoleAttribute): Removed redundant if
        statements and early returns.

2008-06-17  Timothy Hatcher  <timothy@apple.com>

        Removed duplicate implementations of setTabIndex. They all matched
        the HTMLElement::setTabIndex implementation.

        Reviewed by Sam Wenig.

        * html/HTMLAnchorElement.cpp: Removed setTabIndex.
        * html/HTMLAreaElement.cpp: Ditto.
        * html/HTMLFormControlElement.cpp: Ditto.
        * html/HTMLFormControlElement.h: Ditto.
        * html/HTMLObjectElement.cpp: Ditto.
        * html/HTMLObjectElement.h: Ditto.

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

        Reviewed by Sam.

        - more of https://bugs.webkit.org/show_bug.cgi?id=17257
          start ref counts at 1 instead of 0 for speed

        Change StyleBase and all classes derived from it.

        * bindings/js/JSRGBColor.cpp:
        (WebCore::JSRGBColor::getValueProperty):
        * bindings/objc/DOMRGBColor.mm:
        (-[DOMRGBColor red]):
        (-[DOMRGBColor green]):
        (-[DOMRGBColor blue]):
        (-[DOMRGBColor alpha]):
        * css/CSSBorderImageValue.cpp:
        (WebCore::CSSBorderImageValue::cssText):
        * css/CSSBorderImageValue.h:
        (WebCore::CSSBorderImageValue::create):
        * css/CSSCanvasValue.h:
        (WebCore::CSSCanvasValue::create):
        (WebCore::CSSCanvasValue::setName):
        (WebCore::CSSCanvasValue::CSSCanvasValue):
        * css/CSSCharsetRule.cpp:
        (WebCore::CSSCharsetRule::CSSCharsetRule):
        * css/CSSCharsetRule.h:
        (WebCore::CSSCharsetRule::create):
        (WebCore::CSSCharsetRule::encoding):
        (WebCore::CSSCharsetRule::isCharsetRule):
        (WebCore::CSSCharsetRule::type):
        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::valueForShadow):
        (WebCore::valueForNinePieceImage):
        (WebCore::valueForReflection):
        (WebCore::getPositionOffsetValue):
        (WebCore::currentColorOrValidColor):
        (WebCore::getBorderRadiusCornerValue):
        (WebCore::CSSComputedStyleDeclaration::getPropertyCSSValue):
        * css/CSSComputedStyleDeclaration.h:
        (WebCore::computedStyle):
        * css/CSSCursorImageValue.h:
        (WebCore::CSSCursorImageValue::create):
        * css/CSSFontFaceRule.cpp:
        (WebCore::CSSFontFaceRule::CSSFontFaceRule):
        * css/CSSFontFaceRule.h:
        (WebCore::CSSFontFaceRule::create):
        (WebCore::CSSFontFaceRule::isFontFaceRule):
        (WebCore::CSSFontFaceRule::type):
        * css/CSSFontFaceSrcValue.h:
        (WebCore::CSSFontFaceSrcValue::create):
        (WebCore::CSSFontFaceSrcValue::createLocal):
        (WebCore::CSSFontFaceSrcValue::~CSSFontFaceSrcValue):
        (WebCore::CSSFontFaceSrcValue::CSSFontFaceSrcValue):
        * css/CSSGradientValue.h:
        (WebCore::CSSGradientColorStop::CSSGradientColorStop):
        (WebCore::CSSGradientValue::create):
        (WebCore::CSSGradientValue::CSSGradientValue):
        * css/CSSImageGeneratorValue.h:
        (WebCore::CSSImageGeneratorValue::isImageGeneratorValue):
        * css/CSSImageValue.h:
        (WebCore::CSSImageValue::create):
        * css/CSSImportRule.cpp:
        (WebCore::CSSImportRule::CSSImportRule):
        (WebCore::CSSImportRule::setCSSStyleSheet):
        * css/CSSImportRule.h:
        (WebCore::CSSImportRule::create):
        (WebCore::CSSImportRule::isImportRule):
        (WebCore::CSSImportRule::type):
        * css/CSSInheritedValue.h:
        (WebCore::CSSInheritedValue::create):
        (WebCore::CSSInheritedValue::CSSInheritedValue):
        * css/CSSInitialValue.h:
        (WebCore::CSSInitialValue::createExplicit):
        (WebCore::CSSInitialValue::createImplicit):
        (WebCore::CSSInitialValue::CSSInitialValue):
        * css/CSSMediaRule.cpp:
        (WebCore::CSSMediaRule::CSSMediaRule):
        * css/CSSMediaRule.h:
        (WebCore::CSSMediaRule::create):
        (WebCore::CSSMediaRule::isMediaRule):
        (WebCore::CSSMediaRule::type):
        * css/CSSMutableStyleDeclaration.cpp:
        (WebCore::CSSMutableStyleDeclaration::setProperty):
        (WebCore::CSSMutableStyleDeclaration::setStringProperty):
        * css/CSSMutableStyleDeclaration.h:
        (WebCore::CSSMutableStyleDeclaration::create):
        * css/CSSPageRule.cpp:
        (WebCore::CSSPageRule::CSSPageRule):
        * css/CSSPageRule.h:
        (WebCore::CSSPageRule::create):
        * css/CSSParser.cpp:
        (WebCore::CSSParser::parseColor):
        (WebCore::CSSParser::parseValue):
        (WebCore::CSSParser::addFillValue):
        (WebCore::CSSParser::parseFillShorthand):
        (WebCore::CSSParser::addTransitionValue):
        (WebCore::CSSParser::parseTransitionShorthand):
        (WebCore::CSSParser::parseShorthand):
        (WebCore::CSSParser::parseContent):
        (WebCore::CSSParser::parseBackgroundColor):
        (WebCore::CSSParser::parseFillPositionXY):
        (WebCore::CSSParser::parseFillPosition):
        (WebCore::CSSParser::parseFillSize):
        (WebCore::CSSParser::parseFillProperty):
        (WebCore::CSSParser::parseTransitionDuration):
        (WebCore::CSSParser::parseTransitionRepeatCount):
        (WebCore::CSSParser::parseTransitionTimingFunction):
        (WebCore::CSSParser::parseTransitionProperty):
        (WebCore::CSSParser::parseDashboardRegions):
        (WebCore::CSSParser::parseCounterContent):
        (WebCore::CSSParser::parseShape):
        (WebCore::CSSParser::parseFont):
        (WebCore::CSSParser::parseFontFamily):
        (WebCore::CSSParser::parseFontFaceSrc):
        (WebCore::CSSParser::parseFontFaceUnicodeRange):
        (WebCore::ShadowParseContext::commitValue):
        (WebCore::ShadowParseContext::commitLength):
        (WebCore::CSSParser::parseShadow):
        (WebCore::CSSParser::parseReflect):
        (WebCore::BorderImageParseContext::commitNumber):
        (WebCore::BorderImageParseContext::commitBorderImage):
        (WebCore::CSSParser::parseBorderImage):
        (WebCore::CSSParser::parseCounter):
        (WebCore::parseGradientPoint):
        (WebCore::parseGradientColorStop):
        (WebCore::CSSParser::parseGradient):
        (WebCore::CSSParser::parseCanvas):
        (WebCore::CSSParser::parseTransform):
        (WebCore::CSSParser::createMediaList):
        (WebCore::CSSParser::createCharsetRule):
        (WebCore::CSSParser::createImportRule):
        (WebCore::CSSParser::createMediaRule):
        (WebCore::CSSParser::createStyleRule):
        (WebCore::CSSParser::createFontFaceRule):
        * css/CSSPrimitiveValue.h:
        (WebCore::CSSPrimitiveValue::):
        (WebCore::CSSPrimitiveValue::createIdentifier):
        (WebCore::CSSPrimitiveValue::createColor):
        (WebCore::CSSPrimitiveValue::create):
        (WebCore::CSSPrimitiveValue::CSSPrimitiveValue):
        (WebCore::CSSPrimitiveValue::isPrimitiveValue):
        * css/CSSQuirkPrimitiveValue.h:
        (WebCore::CSSQuirkPrimitiveValue::create):
        * css/CSSReflectValue.h:
        (WebCore::CSSReflectValue::create):
        * css/CSSRule.cpp:
        (WebCore::CSSRule::parentRule):
        (WebCore::CSSRule::setCssText):
        * css/CSSRule.h:
        (WebCore::CSSRule::CSSRule):
        (WebCore::CSSRule::isRule):
        * css/CSSStyleDeclaration.cpp:
        (WebCore::CSSStyleDeclaration::copyPropertiesInSet):
        * css/CSSStyleDeclaration.h:
        * css/CSSStyleRule.cpp:
        (WebCore::CSSStyleRule::CSSStyleRule):
        * css/CSSStyleRule.h:
        (WebCore::CSSStyleRule::create):
        (WebCore::CSSStyleRule::isStyleRule):
        (WebCore::CSSStyleRule::type):
        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::CSSStyleSelector):
        (WebCore::parseUASheet):
        (WebCore::CSSRuleSet::addRulesFromSheet):
        (WebCore::CSSStyleSelector::applyProperty):
        * css/CSSStyleSheet.cpp:
        (WebCore::CSSStyleSheet::checkLoaded):
        * css/CSSStyleSheet.h:
        (WebCore::CSSStyleSheet::create):
        (WebCore::CSSStyleSheet::isCSSStyleSheet):
        (WebCore::CSSStyleSheet::type):
        * css/CSSTimingFunctionValue.h:
        (WebCore::CSSTimingFunctionValue::create):
        (WebCore::CSSTimingFunctionValue::CSSTimingFunctionValue):
        (WebCore::CSSTimingFunctionValue::isTransitionTimingFunctionValue):
        * css/CSSTransformValue.cpp:
        (WebCore::CSSTransformValue::CSSTransformValue):
        (WebCore::CSSTransformValue::~CSSTransformValue):
        (WebCore::CSSTransformValue::addValue):
        (WebCore::CSSTransformValue::cssText):
        * css/CSSTransformValue.h:
        (WebCore::CSSTransformValue::create):
        * css/CSSUnicodeRangeValue.h:
        (WebCore::CSSUnicodeRangeValue::create):
        (WebCore::CSSUnicodeRangeValue::CSSUnicodeRangeValue):
        * css/CSSUnknownRule.h:
        * css/CSSValue.h:
        (WebCore::CSSValue::isImageGeneratorValue):
        (WebCore::CSSValue::isImageValue):
        (WebCore::CSSValue::isPrimitiveValue):
        (WebCore::CSSValue::isValueList):
        (WebCore::CSSValue::isSVGColor):
        (WebCore::CSSValue::isSVGPaint):
        (WebCore::CSSValue::CSSValue):
        * css/CSSValueList.h:
        (WebCore::CSSValueList::createCommaSeparated):
        (WebCore::CSSValueList::createSpaceSeparated):
        (WebCore::CSSValueList::isValueList):
        * css/FontFamilyValue.h:
        (WebCore::FontFamilyValue::create):
        * css/FontValue.h:
        (WebCore::FontValue::create):
        (WebCore::FontValue::FontValue):
        (WebCore::FontValue::isFontValue):
        * css/MediaList.cpp:
        (WebCore::MediaList::MediaList):
        (WebCore::MediaList::deleteMedium):
        (WebCore::MediaList::setMediaText):
        * css/MediaList.h:
        (WebCore::MediaList::create):
        (WebCore::MediaList::createAllowingDescriptionSyntax):
        (WebCore::MediaList::length):
        (WebCore::MediaList::mediaQueries):
        * css/MediaQueryEvaluator.cpp:
        (WebCore::MediaQueryEvaluator::eval):
        * css/MediaQueryExp.cpp:
        (WebCore::MediaQueryExp::MediaQueryExp):
        * css/SVGCSSComputedStyleDeclaration.cpp:
        (WebCore::glyphOrientationToCSSPrimitiveValue):
        (WebCore::CSSComputedStyleDeclaration::getSVGPropertyCSSValue):
        * css/SVGCSSParser.cpp:
        (WebCore::CSSParser::parseSVGValue):
        (WebCore::CSSParser::parseSVGStrokeDasharray):
        (WebCore::CSSParser::parseSVGPaint):
        (WebCore::CSSParser::parseSVGColor):
        * css/ShadowValue.h:
        (WebCore::ShadowValue::create):
        * css/StyleBase.h:
        (WebCore::StyleBase::isCSSStyleSheet):
        (WebCore::StyleBase::isFontFaceRule):
        (WebCore::StyleBase::isRule):
        (WebCore::StyleBase::isStyleRule):
        (WebCore::StyleBase::isStyleSheet):
        (WebCore::StyleBase::isXSLStyleSheet):
        (WebCore::StyleBase::StyleBase):
        * css/StyleList.cpp:
        * css/StyleList.h:
        (WebCore::StyleList::StyleList):
        * css/StyleSheet.h:
        (WebCore::StyleSheet::styleSheetChanged):
        (WebCore::StyleSheet::isStyleSheet):
        * dom/CSSMappedAttributeDeclaration.h:
        (WebCore::CSSMappedAttributeDeclaration::create):
        (WebCore::CSSMappedAttributeDeclaration::CSSMappedAttributeDeclaration):
        * dom/DOMImplementation.cpp:
        (WebCore::DOMImplementation::createCSSStyleSheet):
        * dom/Document.cpp:
        (WebCore::Document::createCSSStyleDeclaration):
        (WebCore::Document::setCSSStyleSheet):
        (WebCore::Document::elementSheet):
        (WebCore::Document::mappedElementSheet):
        (WebCore::Document::recalcStyleSelector):
        * dom/Node.cpp:
        (WebCore::Node::querySelector):
        (WebCore::Node::querySelectorAll):
        * dom/Position.cpp:
        (WebCore::Position::computedStyle):
        * dom/ProcessingInstruction.cpp:
        (WebCore::ProcessingInstruction::checkStyleSheet):
        (WebCore::ProcessingInstruction::setCSSStyleSheet):
        (WebCore::ProcessingInstruction::setXSLStyleSheet):
        * dom/ProcessingInstruction.h:
        * dom/StyleElement.cpp:
        (WebCore::StyleElement::createSheet):
        * dom/StyledElement.cpp:
        (WebCore::StyledElement::createInlineStyleDecl):
        (WebCore::StyledElement::createMappedDecl):
        * editing/ApplyStyleCommand.cpp:
        (WebCore::ApplyStyleCommand::ApplyStyleCommand):
        (WebCore::hasTextDecorationProperty):
        (WebCore::ApplyStyleCommand::extractAndNegateTextDecorationStyle):
        * editing/CompositeEditCommand.cpp:
        (WebCore::CompositeEditCommand::breakOutOfEmptyListItem):
        * editing/DeleteSelectionCommand.cpp:
        (WebCore::DeleteSelectionCommand::calculateTypingStyleAfterDelete):
        * editing/Editor.cpp:
        (WebCore::Editor::selectionHasStyle):
        (WebCore::Editor::setBaseWritingDirection):
        * editing/EditorCommand.cpp:
        (WebCore::executeApplyStyle):
        (WebCore::executeToggleStyle):
        (WebCore::executeApplyParagraphStyle):
        (WebCore::stateStyle):
        * editing/InsertParagraphSeparatorCommand.cpp:
        (WebCore::InsertParagraphSeparatorCommand::applyStyleAfterInsertion):
        * editing/RemoveFormatCommand.cpp:
        (WebCore::RemoveFormatCommand::doApply):
        * editing/ReplaceSelectionCommand.cpp:
        (WebCore::ReplacementFragment::insertFragmentForTestRendering):
        * editing/markup.cpp:
        (WebCore::styleFromMatchedRulesForElement):
        (WebCore::appendStartMarkup):
        * html/HTMLBodyElement.cpp:
        (WebCore::HTMLBodyElement::createLinkDecl):
        * html/HTMLLinkElement.cpp:
        (WebCore::HTMLLinkElement::process):
        (WebCore::HTMLLinkElement::setCSSStyleSheet):
        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::pickMedia):
        * html/HTMLTableElement.cpp:
        (WebCore::HTMLTableElement::additionalAttributeStyleDecls):
        (WebCore::HTMLTableElement::addSharedCellBordersDecl):
        (WebCore::HTMLTableElement::addSharedCellPaddingDecl):
        (WebCore::HTMLTableElement::addSharedGroupDecls):
        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::getComputedStyle):
        * page/Frame.cpp:
        (WebCore::Frame::computeAndSetTypingStyle):
        (WebCore::Frame::selectionComputedStyle):
        * page/Frame.h:
        * rendering/style/RenderStyle.cpp:
        (WebCore::StyleCachedImage::cssValue):
        * rendering/style/RenderStyle.h:
        * svg/SVGColor.h:
        (WebCore::SVGColor::create):
        (WebCore::SVGColor::isSVGColor):
        * svg/SVGFontFaceElement.cpp:
        (WebCore::SVGFontFaceElement::SVGFontFaceElement):
        (WebCore::SVGFontFaceElement::rebuildFontFace):
        * svg/SVGFontFaceNameElement.cpp:
        (WebCore::SVGFontFaceNameElement::srcValue):
        * svg/SVGFontFaceSrcElement.cpp:
        (WebCore::SVGFontFaceSrcElement::srcValue):
        * svg/SVGFontFaceUriElement.cpp:
        (WebCore::SVGFontFaceUriElement::srcValue):
        * svg/SVGPaint.cpp:
        (WebCore::SVGPaint::SVGPaint):
        * svg/SVGPaint.h:
        (WebCore::SVGPaint::create):
        (WebCore::SVGPaint::isSVGPaint):
        * svg/animation/SMILTimeContainer.cpp:
        (WebCore::SMILTimeContainer::baseValueFor):
        * xml/XSLImportRule.cpp:
        (WebCore::XSLImportRule::XSLImportRule):
        (WebCore::XSLImportRule::setXSLStyleSheet):
        * xml/XSLImportRule.h:
        (WebCore::XSLImportRule::create):
        (WebCore::XSLImportRule::href):
        (WebCore::XSLImportRule::isImportRule):
        * xml/XSLStyleSheet.cpp:
        (WebCore::XSLStyleSheet::checkLoaded):
        (WebCore::XSLStyleSheet::loadChildSheet):
        * xml/XSLStyleSheet.h:
        (WebCore::XSLStyleSheet::create):
        (WebCore::XSLStyleSheet::createEmbedded):
        * xml/XSLTProcessor.cpp:
        (WebCore::xsltStylesheetPointer):

2008-06-17  Michelangelo De Simone  <m.des@mac.com>

        Reviewed by Adele.
        
        Fix for https://bugs.webkit.org/show_bug.cgi?id=18887
        Added support for autofocus controls.

        When authors specify the "autofocus" attribute on form controls these 
        acquire focus automatically as the document is rendered.

        Tests: fast/forms/autofocus-attribute.html
               fast/forms/autofocus-opera-001.html
               fast/forms/autofocus-opera-002.html
               fast/forms/autofocus-opera-003.html
               fast/forms/autofocus-opera-004.html
               fast/forms/autofocus-opera-005.html
               fast/forms/autofocus-opera-006.html
               fast/forms/autofocus-opera-007.html
               fast/forms/autofocus-opera-008.html

        * dom/Document.cpp: (WebCore::Document::Document): Initialize the flag to ignore autofocus.
        * dom/Document.h:
        * html/HTMLAttributeNames.in:
        * html/HTMLButtonElement.idl:
        * html/HTMLFormControlElement.cpp:
        (WebCore::HTMLFormControlElement::attach): Sets focus onto the appropriate "autofocus" control
        (WebCore::HTMLFormControlElement::autofocus): Autofocus attribute getter
        (WebCore::HTMLFormControlElement::setAutofocus): Autofocus attribute setter
        * html/HTMLFormControlElement.h:
        * html/HTMLInputElement.idl:
        * html/HTMLSelectElement.idl:
        * html/HTMLTextAreaElement.idl:
        * rendering/RenderTextControl.cpp: (WebCore::RenderTextControl::setUserEdited):
          Sets the "ignore autofocus" flag on document if the user edited the control.
        * rendering/RenderTextControl.h:

2008-06-17  Alp Toker  <alp@nuanti.com>

        Reviewed by Dave Hyatt and Mark Rowe.

        https://bugs.webkit.org/show_bug.cgi?id=19190
        [CAIRO] Canvas rendered as black

        Make sure the frame alpha transparency flag is set to true unless
        we're certain the image data is solid and can be blitted, since the
        Cairo backend implements a fast-path for blittable BitmapImages.

        Thanks to Dirk Schulze for helping to track down this problem.

        * platform/graphics/BitmapImage.cpp:
        (WebCore::BitmapImage::frameHasAlphaAtIndex):
        * platform/graphics/cairo/ImageCairo.cpp:
        (WebCore::BitmapImage::BitmapImage):
        * platform/graphics/cg/ImageCG.cpp:
        (WebCore::BitmapImage::BitmapImage):

2008-06-17  Ariya Hidayat  <ariya.hidayat@trolltech.com>

        Reviewed by Simon.

        Fix the Qt port by adding ExecState when necessary.

        * bridge/qt/qt_instance.cpp:
        (KJS::Bindings::QtInstance::getPropertyNames):
        (KJS::Bindings::QtInstance::invokeDefaultMethod):
        * bridge/qt/qt_runtime.cpp:
        (KJS::Bindings::convertValueToQVariant):
        (KJS::Bindings::convertQVariantToValue):
        (KJS::Bindings::QtRuntimeConnectionMethod::callAsFunction):
        (KJS::Bindings::QtConnectionObject::execute):

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

        Fix for slow performance on CSS selector tests at:

        http://jpsykes.com/153/more-css-performance-testing-pt-2

        Fix <style> element processing so that we don't reparse the entire stylesheet as chunks come in from
        the network (since this is O(n^2)).   Wait for the parser to deliver all of the data before we
        process the sheet for the first time.

        Reviewed by olliej

        * html/HTMLStyleElement.cpp:
        (WebCore::HTMLStyleElement::finishParsingChildren):
        (WebCore::HTMLStyleElement::childrenChanged):

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

        Reviewed by Justin Garcia.

        - fix <rdar://problem/5973313> REGRESSION (r32508): Down arrow doesn't change caret with non-user entered newlines in textareas

        Test: editing/selection/after-line-break.html

        * dom/Position.cpp:
        (WebCore::Position::getInlineBoxAndOffset): Changed to not include the
        position after a line break in its line box, because that position is
        actually on the next line.

2008-06-16  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Geoff Garen.

        Make Identifier construction use an explicitly passed IdentifierTable.

        * platform/text/AtomicString.cpp:
        * platform/text/AtomicString.h:
        * platform/text/PlatformString.h:
        * platform/text/String.cpp:
        Removed "operator KJS::Identifier".

        * 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/JSDOMWindowBase.cpp:
        (WebCore::JSDOMWindowBase::JSDOMWindowBase):
        (WebCore::JSDOMWindowBase::updateDocument):
        (WebCore::createWindow):
        (WebCore::showModalDialog):
        (WebCore::JSDOMWindowBase::getOwnPropertySlot):
        (WebCore::JSDOMWindowBase::put):
        (WebCore::JSDOMWindowBase::clear):
        * bindings/js/JSDOMWindowCustom.cpp:
        (WebCore::JSDOMWindow::setLocation):
        * bindings/js/JSDOMWindowCustom.h:
        (WebCore::JSDOMWindow::customGetOwnPropertySlot):
        * bindings/js/JSEventListener.cpp:
        (WebCore::JSAbstractEventListener::handleEvent):
        (WebCore::JSLazyEventListener::parseCode):
        * bindings/js/JSEventTargetBase.h:
        (WebCore::JSEventTargetPrototype::self):
        * bindings/js/JSHTMLCollectionCustom.cpp:
        (WebCore::JSHTMLCollection::callAsFunction):
        (WebCore::JSHTMLCollection::item):
        (WebCore::JSHTMLCollection::namedItem):
        * bindings/js/JSHTMLDocumentCustom.cpp:
        (WebCore::JSHTMLDocument::all):
        (WebCore::JSHTMLDocument::setAll):
        (WebCore::JSHTMLDocument::open):
        * bindings/js/JSHTMLInputElementBase.cpp:
        (WebCore::JSHTMLInputElementBase::getOwnPropertySlot):
        * bindings/js/JSHistoryCustom.cpp:
        (WebCore::JSHistory::customGetOwnPropertySlot):
        * bindings/js/JSLocationCustom.cpp:
        (WebCore::JSLocation::customGetOwnPropertySlot):
        (WebCore::JSLocation::customPut):
        * bindings/js/JSNavigatorCustom.cpp:
        (WebCore::needsYouTubeQuirk):
        * bindings/js/JSSQLResultSetRowListCustom.cpp:
        (WebCore::JSSQLResultSetRowList::item):
        * bindings/js/JSStorageCustom.cpp:
        (WebCore::JSStorage::customGetPropertyNames):
        * bindings/js/ScheduledAction.cpp:
        (WebCore::ScheduledAction::execute):
        * bindings/js/ScriptController.cpp:
        (WebCore::ScriptController::evaluate):
        * bindings/objc/WebScriptObject.mm:
        (WebCore::addExceptionToConsole):
        (-[WebScriptObject callWebScriptMethod:withArguments:]):
        (-[WebScriptObject setValue:forKey:]):
        (-[WebScriptObject valueForKey:]):
        (-[WebScriptObject removeWebScriptKey:]):
        (+[WebScriptObject _convertValueToObjcValue:originRootObject:rootObject:]):
        * bindings/scripts/CodeGeneratorJS.pm:
        * bridge/NP_jsobject.cpp:
        (_NPN_Enumerate):
        * bridge/c/c_instance.cpp:
        (KJS::Bindings::CInstance::getPropertyNames):
        * bridge/c/c_utility.cpp:
        (KJS::Bindings::identifierFromNPIdentifier):
        * bridge/jni/jni_class.cpp:
        (JavaClass::JavaClass):
        * bridge/jni/jni_jsobject.mm:
        (JavaJSObject::call):
        (JavaJSObject::getMember):
        (JavaJSObject::setMember):
        (JavaJSObject::removeMember):
        * bridge/runtime_method.cpp:
        (RuntimeMethod::callAsFunction):
        Adapted to JavaScriptCore changes by explicitly constructing Identifiers, and always passing
        an ExecState or JSGlobalData pointer. Since WebCore is not a legacy client, this can use
        JSGlobalData::threadInstance(), as performance permits.

2008-06-16  Jonathon Jongsma  <jonathon.jongsma@collabora.co.uk>

        Reviewed by Dan Bernstein.

        - fix https://bugs.webkit.org/show_bug.cgi?id=19592
          Mismatched GraphicsContext::save()/restore() pairs in shadow painting code

        * rendering/InlineFlowBox.cpp:
        (WebCore::InlineFlowBox::paintTextDecorations): remove an extra context->save()
        from the shadow painting code.

2008-06-16  Adriaan de Groot  <groot@kde.org>

        Reviewed by Simon.

        Fix compilation on Sun Studio 12

        make_pair is a function template with two template arguments. This is to force
        it to have the correct type according to the pair<> structure.

        * editing/TextIterator.cpp:
        (WebCore::plainTextToMallocAllocatedBuffer):
        * page/Chrome.cpp:
        (WebCore::PageGroupLoadDeferrer::PageGroupLoadDeferrer):

2008-06-10  Tor Arne Vestbø  <tavestbo@trolltech.com>

        Reviewed by Simon

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

        Fill the background of scrollbars to the window color before
        letting the QStyle paint its primitive elements.

        * platform/qt/PlatformScrollBarQt.cpp:
        (WebCore::PlatformScrollbar::paint):

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

        Rubber stamped by Sam.

        - renamed kjs_html.h/cpp to JSPluginElementFunctions.h/cpp
        - renamed kjs_events.h/cpp to JSEventListener.h/cpp

        * GNUmakefile.am:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * WebCoreSources.bkl:
        * bindings/js/JSCanvasRenderingContext2DCustom.cpp:
        * bindings/js/JSDOMApplicationCacheCustom.cpp:
        * bindings/js/JSDOMWindowBase.cpp:
        * bindings/js/JSEventCustom.cpp:
        * bindings/js/JSEventListener.cpp: Copied from WebCore/bindings/js/kjs_events.cpp.
        * bindings/js/JSEventListener.h: Copied from WebCore/bindings/js/kjs_events.h.
        * bindings/js/JSEventTargetBase.h:
        * bindings/js/JSHTMLAppletElementCustom.cpp:
        * bindings/js/JSHTMLCollectionCustom.cpp:
        * bindings/js/JSHTMLDocumentCustom.cpp:
        * bindings/js/JSHTMLEmbedElementCustom.cpp:
        * bindings/js/JSHTMLInputElementBase.h:
        * bindings/js/JSHTMLObjectElementCustom.cpp:
        * bindings/js/JSHTMLSelectElementCustom.cpp:
        * bindings/js/JSPluginElementFunctions.cpp: Copied from WebCore/bindings/js/kjs_html.cpp.
        * bindings/js/JSPluginElementFunctions.h: Copied from WebCore/bindings/js/kjs_html.h.
        * bindings/js/JSSVGLazyEventListener.h:
        * bindings/js/JSXMLHttpRequestCustom.cpp:
        * bindings/js/ScriptController.cpp:
        * bindings/js/kjs_events.cpp: Removed.
        * bindings/js/kjs_events.h: Removed.
        * bindings/js/kjs_html.cpp: Removed.
        * bindings/js/kjs_html.h: Removed.

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

        - give Frame object functions shorter names: scriptProxy() -> script(),
          selectionController() -> selection(), animationController() -> animation()

        * WebCore.base.exp:
        * 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/JSDOMWindowBase.cpp:
        (WebCore::JSDOMWindowBase::~JSDOMWindowBase):
        (WebCore::allowPopUp):
        (WebCore::createWindow):
        (WebCore::windowProtoFuncOpen):
        (WebCore::toJS):
        (WebCore::toJSDOMWindow):
        * bindings/js/JSDOMWindowCustom.cpp:
        (WebCore::JSDOMWindow::setLocation):
        * bindings/js/JSDOMWindowShell.cpp:
        (WebCore::toJS):
        (WebCore::toJSDOMWindowShell):
        * bindings/js/JSDocumentCustom.cpp:
        (WebCore::JSDocument::setLocation):
        * bindings/js/JSLocationCustom.cpp:
        (WebCore::navigateIfAllowed):
        (WebCore::JSLocation::reload):
        * bindings/js/JSNodeFilterCondition.cpp:
        (WebCore::JSNodeFilterCondition::acceptNode):
        * 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/objc/DOMInternal.mm:
        (-[WebScriptObject _initializeScriptDOMNodeImp]):
        * bridge/jni/jni_jsobject.mm:
        (createRootObject):
        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::SelectorChecker::checkOneSelector):
        * dom/Document.cpp:
        (WebCore::Document::nodeWillBeRemoved):
        (WebCore::Document::createHTMLEventListener):
        * dom/Element.cpp:
        (WebCore::Element::updateFocusAppearance):
        * dom/EventTarget.cpp:
        (WebCore::EventTarget::dispatchGenericEvent):
        * dom/XMLTokenizer.cpp:
        (WebCore::XMLTokenizer::startElementNs):
        * editing/DeleteButtonController.cpp:
        (WebCore::DeleteButtonController::respondToChangedSelection):
        (WebCore::DeleteButtonController::enable):
        (WebCore::DeleteButtonController::deleteTarget):
        * editing/EditCommand.cpp:
        (WebCore::EditCommand::EditCommand):
        * editing/Editor.cpp:
        (WebCore::Editor::selectionForCommand):
        (WebCore::Editor::canEdit):
        (WebCore::Editor::canEditRichly):
        (WebCore::Editor::canDHTMLCut):
        (WebCore::Editor::canDHTMLCopy):
        (WebCore::Editor::canCopy):
        (WebCore::Editor::canDelete):
        (WebCore::Editor::deleteWithDirection):
        (WebCore::Editor::deleteSelectionWithSmartDelete):
        (WebCore::Editor::replaceSelectionWithFragment):
        (WebCore::Editor::selectedRange):
        (WebCore::Editor::tryDHTMLCopy):
        (WebCore::Editor::tryDHTMLCut):
        (WebCore::Editor::fontForSelection):
        (WebCore::Editor::selectionUnorderedListState):
        (WebCore::Editor::selectionOrderedListState):
        (WebCore::Editor::increaseSelectionListLevel):
        (WebCore::Editor::increaseSelectionListLevelOrdered):
        (WebCore::Editor::increaseSelectionListLevelUnordered):
        (WebCore::Editor::decreaseSelectionListLevel):
        (WebCore::Editor::dispatchCPPEvent):
        (WebCore::Editor::applyStyle):
        (WebCore::Editor::applyParagraphStyle):
        (WebCore::Editor::applyStyleToSelection):
        (WebCore::Editor::applyParagraphStyleToSelection):
        (WebCore::Editor::selectionHasStyle):
        (WebCore::Editor::appliedEditing):
        (WebCore::Editor::unappliedEditing):
        (WebCore::Editor::reappliedEditing):
        (WebCore::Editor::insertLineBreak):
        (WebCore::Editor::insertParagraphSeparator):
        (WebCore::Editor::paste):
        (WebCore::Editor::selectComposition):
        (WebCore::Editor::confirmComposition):
        (WebCore::Editor::setComposition):
        (WebCore::Editor::advanceToNextMisspelling):
        (WebCore::Editor::isSelectionUngrammatical):
        (WebCore::Editor::guessesForUngrammaticalSelection):
        (WebCore::Editor::getCompositionSelection):
        (WebCore::Editor::transpose):
        * editing/EditorCommand.cpp:
        (WebCore::expandSelectionToGranularity):
        (WebCore::executeDeleteToMark):
        (WebCore::executeMoveBackward):
        (WebCore::executeMoveBackwardAndModifySelection):
        (WebCore::executeMoveDown):
        (WebCore::executeMoveDownAndModifySelection):
        (WebCore::executeMoveForward):
        (WebCore::executeMoveForwardAndModifySelection):
        (WebCore::executeMoveLeft):
        (WebCore::executeMoveLeftAndModifySelection):
        (WebCore::executeMovePageDown):
        (WebCore::executeMovePageDownAndModifySelection):
        (WebCore::executeMovePageUp):
        (WebCore::executeMovePageUpAndModifySelection):
        (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::executeMoveWordBackward):
        (WebCore::executeMoveWordBackwardAndModifySelection):
        (WebCore::executeMoveWordForward):
        (WebCore::executeMoveWordForwardAndModifySelection):
        (WebCore::executeMoveWordLeft):
        (WebCore::executeMoveWordLeftAndModifySelection):
        (WebCore::executeMoveWordRight):
        (WebCore::executeMoveWordRightAndModifySelection):
        (WebCore::executeSelectAll):
        (WebCore::executeSelectToMark):
        (WebCore::executeSetMark):
        (WebCore::executeSwapWithMark):
        (WebCore::executeUnselect):
        (WebCore::enabledAnySelection):
        (WebCore::enabledAnySelectionAndMark):
        (WebCore::enabledInRichlyEditableText):
        (WebCore::enabledRangeInEditableText):
        (WebCore::enabledRangeInRichlyEditableText):
        * editing/ModifySelectionListLevel.cpp:
        (WebCore::IncreaseSelectionListLevelCommand::canIncreaseSelectionListLevel):
        (WebCore::DecreaseSelectionListLevelCommand::canDecreaseSelectionListLevel):
        * editing/RemoveFormatCommand.cpp:
        (WebCore::RemoveFormatCommand::doApply):
        * editing/SelectionController.cpp:
        (WebCore::SelectionController::setSelection):
        (WebCore::SelectionController::selectFrameElementInParentIfFullySelected):
        * editing/TypingCommand.cpp:
        (WebCore::TypingCommand::deleteSelection):
        (WebCore::TypingCommand::insertText):
        (WebCore::TypingCommand::deleteKeyPressed):
        (WebCore::TypingCommand::forwardDeleteKeyPressed):
        * history/CachedPage.cpp:
        (WebCore::CachedPage::CachedPage):
        (WebCore::CachedPage::restore):
        * html/HTMLAnchorElement.cpp:
        (WebCore::HTMLAnchorElement::defaultEventHandler):
        (WebCore::HTMLAnchorElement::setActive):
        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::defaultEventHandler):
        * 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::clear):
        (WebCore::FrameLoader::userGestureHint):
        (WebCore::FrameLoader::open):
        (WebCore::FrameLoader::dispatchWindowObjectAvailable):
        (WebCore::FrameLoader::switchOutLowBandwidthDisplayIfReady):
        * loader/archive/cf/LegacyWebArchive.cpp:
        (WebCore::LegacyWebArchive::createFromSelection):
        * page/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::selection):
        (WebCore::AccessibilityRenderObject::setSelectedTextRange):
        (WebCore::AccessibilityRenderObject::isFocused):
        (WebCore::AccessibilityRenderObject::doAXTextMarkerRangeForLine):
        (WebCore::AccessibilityRenderObject::doSetAXSelectedTextMarkerRange):
        (WebCore::AccessibilityRenderObject::doAXRangeForLine):
        (WebCore::AccessibilityRenderObject::handleActiveDescendantChanged):
        * page/ContextMenuController.cpp:
        (WebCore::ContextMenuController::contextMenuItemSelected):
        * 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::toString):
        * page/DragController.cpp:
        (WebCore::DragController::dragIsMove):
        (WebCore::DragController::tryDocumentDrag):
        (WebCore::setSelectionToDragCaret):
        (WebCore::DragController::concludeDrag):
        (WebCore::prepareClipboardForImageDrag):
        (WebCore::DragController::startDrag):
        * page/EventHandler.cpp:
        (WebCore::EventHandler::selectClosestWordFromMouseEvent):
        (WebCore::EventHandler::selectClosestWordOrLinkFromMouseEvent):
        (WebCore::EventHandler::handleMousePressEventDoubleClick):
        (WebCore::EventHandler::handleMousePressEventTripleClick):
        (WebCore::EventHandler::handleMousePressEventSingleClick):
        (WebCore::EventHandler::handleMousePressEvent):
        (WebCore::EventHandler::updateSelectionForMouseDrag):
        (WebCore::EventHandler::handleMouseReleaseEvent):
        (WebCore::nodeIsNotBeingEdited):
        (WebCore::EventHandler::selectCursor):
        (WebCore::EventHandler::dispatchMouseEvent):
        (WebCore::EventHandler::sendContextMenuEvent):
        (WebCore::EventHandler::handleKeyboardSelectionMovement):
        (WebCore::EventHandler::handleDrag):
        * page/FocusController.cpp:
        (WebCore::FocusController::setFocusedFrame):
        (WebCore::clearSelectionIfNeeded):
        (WebCore::FocusController::setActive):
        * page/Frame.cpp:
        (WebCore::Frame::~Frame):
        (WebCore::Frame::script):
        (WebCore::Frame::setDocument):
        (WebCore::Frame::selectedText):
        (WebCore::Frame::selection):
        (WebCore::Frame::animation):
        (WebCore::Frame::notifyRendererOfSelectionChange):
        (WebCore::Frame::invalidateSelection):
        (WebCore::Frame::clearCaretRectIfNeeded):
        (WebCore::Frame::setFocusedNodeIfNeeded):
        (WebCore::Frame::selectionLayoutChanged):
        (WebCore::Frame::caretBlinkTimerFired):
        (WebCore::Frame::paintCaret):
        (WebCore::Frame::shouldChangeSelection):
        (WebCore::Frame::updateSecureKeyboardEntryIfActive):
        (WebCore::Frame::computeAndSetTypingStyle):
        (WebCore::Frame::selectionComputedStyle):
        (WebCore::Frame::bindingRootObject):
        (WebCore::Frame::windowScriptNPObject):
        (WebCore::Frame::clearScriptController):
        (WebCore::Frame::selectionTextRects):
        (WebCore::Frame::currentForm):
        (WebCore::Frame::revealSelection):
        (WebCore::Frame::revealCaret):
        (WebCore::Frame::clearTimers):
        (WebCore::Frame::styleForSelectionStart):
        (WebCore::Frame::setSelectionFromNone):
        (WebCore::Frame::findString):
        (WebCore::Frame::pageDestroyed):
        (WebCore::Frame::respondToChangedSelection):
        (WebCore::FramePrivate::FramePrivate):
        * page/Frame.h:
        * page/FramePrivate.h:
        * page/InspectorController.cpp:
        (WebCore::canPassNodeToJavaScript):
        (WebCore::InspectorController::windowScriptObjectAvailable):
        * page/JavaScriptDebugServer.cpp:
        (WebCore::JavaScriptDebugServer::setJavaScriptPaused):
        * page/Page.cpp:
        (WebCore::Page::findString):
        (WebCore::Page::selection):
        (WebCore::Page::setDebugger):
        * page/mac/FrameMac.mm:
        (WebCore::Frame::baseWritingDirectionForSelectionStart):
        (WebCore::Frame::dragImageForSelection):
        (WebCore::Frame::createScriptInstanceForWidget):
        (WebCore::Frame::windowScriptObject):
        * page/win/FrameWin.cpp:
        (WebCore::Frame::dragImageForSelection):
        * platform/ContextMenu.cpp:
        (WebCore::selectionContainsPossibleWord):
        (WebCore::ContextMenu::populate):
        (WebCore::ContextMenu::checkOrEnableIfNeeded):
        * plugins/PluginView.cpp:
        (WebCore::PluginView::performRequest):
        (WebCore::PluginView::bindingInstance):
        * rendering/HitTestResult.cpp:
        (WebCore::HitTestResult::isSelected):
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::paintCaret):
        * rendering/RenderListBox.cpp:
        (WebCore::RenderListBox::paintItemForeground):
        (WebCore::RenderListBox::paintItemBackground):
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::selectionBackgroundColor):
        (WebCore::RenderObject::selectionForegroundColor):
        (WebCore::RenderObject::setAnimatableStyle):
        (WebCore::RenderObject::destroy):
        (WebCore::RenderObject::animation):
        * rendering/RenderObject.h:
        * rendering/RenderTextControl.cpp:
        (WebCore::RenderTextControl::selectionStart):
        (WebCore::RenderTextControl::selectionEnd):
        (WebCore::RenderTextControl::setSelectionRange):
        (WebCore::RenderTextControl::selectionChanged):
        (WebCore::RenderTextControl::capsLockStateMayHaveChanged):
        * rendering/RenderTheme.cpp:
        (WebCore::RenderTheme::isFocused):
        * rendering/RenderTreeAsText.cpp:
        (WebCore::writeSelection):
        * rendering/RenderWidget.cpp:
        (WebCore::RenderWidget::destroy):
        * svg/SVGDocumentExtensions.cpp:
        (WebCore::SVGDocumentExtensions::createSVGEventListener):
        * svg/SVGSVGElement.cpp:
        (WebCore::SVGSVGElement::deselectAll):
        * svg/SVGTextContentElement.cpp:
        (WebCore::SVGTextContentElement::selectSubString):

2008-06-15  Sam Weinig  <sam@webkit.org>

        Reviewed by Darin Adler.

        Remove outdated comment.

        * bindings/js/ScriptController.h:

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

        - try to fix Qt build

        * dom/XMLTokenizer.cpp: Use create instead of new.

        - rename KJS::List to KJS::ArgList

        * bindings/js/JSAudioConstructor.cpp:
        (WebCore::JSAudioConstructor::construct):
        * bindings/js/JSAudioConstructor.h:
        * bindings/js/JSCanvasRenderingContext2DCustom.cpp:
        (WebCore::JSCanvasRenderingContext2D::setFillColor):
        (WebCore::JSCanvasRenderingContext2D::setStrokeColor):
        (WebCore::JSCanvasRenderingContext2D::strokeRect):
        (WebCore::JSCanvasRenderingContext2D::drawImage):
        (WebCore::JSCanvasRenderingContext2D::drawImageFromRect):
        (WebCore::JSCanvasRenderingContext2D::setShadow):
        (WebCore::JSCanvasRenderingContext2D::createPattern):
        (WebCore::JSCanvasRenderingContext2D::putImageData):
        * bindings/js/JSClipboardCustom.cpp:
        (WebCore::JSClipboard::types):
        (WebCore::JSClipboard::clearData):
        (WebCore::JSClipboard::getData):
        (WebCore::JSClipboard::setData):
        (WebCore::JSClipboard::setDragImage):
        * bindings/js/JSConsoleCustom.cpp:
        (WebCore::JSConsole::debug):
        (WebCore::JSConsole::error):
        (WebCore::JSConsole::info):
        (WebCore::JSConsole::log):
        (WebCore::JSConsole::warn):
        (WebCore::JSConsole::assertCondition):
        (WebCore::JSConsole::profile):
        (WebCore::JSConsole::profileEnd):
        * 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/JSDOMApplicationCacheCustom.cpp:
        (WebCore::JSDOMApplicationCache::add):
        (WebCore::JSDOMApplicationCache::remove):
        (WebCore::JSDOMApplicationCache::addEventListener):
        (WebCore::JSDOMApplicationCache::removeEventListener):
        (WebCore::JSDOMApplicationCache::dispatchEvent):
        * bindings/js/JSDOMWindowBase.cpp:
        (WebCore::windowProtoFuncAToB):
        (WebCore::windowProtoFuncBToA):
        (WebCore::windowProtoFuncOpen):
        (WebCore::windowProtoFuncSetTimeout):
        (WebCore::windowProtoFuncClearTimeout):
        (WebCore::windowProtoFuncSetInterval):
        (WebCore::windowProtoFuncAddEventListener):
        (WebCore::windowProtoFuncRemoveEventListener):
        (WebCore::windowProtoFuncShowModalDialog):
        (WebCore::windowProtoFuncNotImplemented):
        (WebCore::JSDOMWindowBase::installTimeout):
        * bindings/js/JSDOMWindowBase.h:
        * bindings/js/JSDOMWindowCustom.cpp:
        (WebCore::JSDOMWindow::postMessage):
        * bindings/js/JSDatabaseCustom.cpp:
        (WebCore::JSDatabase::changeVersion):
        (WebCore::JSDatabase::transaction):
        * bindings/js/JSElementCustom.cpp:
        (WebCore::JSElement::setAttribute):
        (WebCore::JSElement::setAttributeNode):
        (WebCore::JSElement::setAttributeNS):
        (WebCore::JSElement::setAttributeNodeNS):
        * bindings/js/JSEventTargetBase.cpp:
        (WebCore::jsEventTargetAddEventListener):
        (WebCore::jsEventTargetRemoveEventListener):
        (WebCore::jsEventTargetDispatchEvent):
        * bindings/js/JSEventTargetBase.h:
        * bindings/js/JSHTMLAppletElementCustom.cpp:
        (WebCore::JSHTMLAppletElement::callAsFunction):
        * bindings/js/JSHTMLCollectionCustom.cpp:
        (WebCore::JSHTMLCollection::callAsFunction):
        (WebCore::JSHTMLCollection::item):
        (WebCore::JSHTMLCollection::namedItem):
        * bindings/js/JSHTMLDocumentCustom.cpp:
        (WebCore::JSHTMLDocument::open):
        (WebCore::writeHelper):
        (WebCore::JSHTMLDocument::write):
        (WebCore::JSHTMLDocument::writeln):
        * bindings/js/JSHTMLEmbedElementCustom.cpp:
        (WebCore::JSHTMLEmbedElement::callAsFunction):
        * bindings/js/JSHTMLInputElementBase.cpp:
        (WebCore::jsHTMLInputElementBaseFunctionSetSelectionRange):
        * bindings/js/JSHTMLInputElementBase.h:
        * bindings/js/JSHTMLObjectElementCustom.cpp:
        (WebCore::JSHTMLObjectElement::callAsFunction):
        * bindings/js/JSHTMLOptionElementConstructor.cpp:
        (WebCore::JSHTMLOptionElementConstructor::construct):
        * bindings/js/JSHTMLOptionElementConstructor.h:
        * bindings/js/JSHTMLOptionsCollectionCustom.cpp:
        (WebCore::JSHTMLOptionsCollection::add):
        (WebCore::JSHTMLOptionsCollection::remove):
        * bindings/js/JSHTMLSelectElementCustom.cpp:
        (WebCore::JSHTMLSelectElement::remove):
        * bindings/js/JSImageConstructor.cpp:
        (WebCore::JSImageConstructor::construct):
        * bindings/js/JSImageConstructor.h:
        * bindings/js/JSJavaScriptCallFrameCustom.cpp:
        (WebCore::JSJavaScriptCallFrame::evaluate):
        (WebCore::JSJavaScriptCallFrame::scopeChain):
        * bindings/js/JSLocationCustom.cpp:
        (WebCore::JSLocation::replace):
        (WebCore::JSLocation::reload):
        (WebCore::JSLocation::assign):
        (WebCore::JSLocation::toString):
        * bindings/js/JSNodeCustom.cpp:
        (WebCore::JSNode::insertBefore):
        (WebCore::JSNode::replaceChild):
        (WebCore::JSNode::removeChild):
        (WebCore::JSNode::appendChild):
        * bindings/js/JSNodeFilterCondition.cpp:
        (WebCore::JSNodeFilterCondition::acceptNode):
        * bindings/js/JSNodeFilterCustom.cpp:
        (WebCore::JSNodeFilter::acceptNode):
        * bindings/js/JSNodeIteratorCustom.cpp:
        (WebCore::JSNodeIterator::nextNode):
        (WebCore::JSNodeIterator::previousNode):
        * bindings/js/JSNodeListCustom.cpp:
        (WebCore::JSNodeList::callAsFunction):
        * bindings/js/JSQuarantinedObjectWrapper.cpp:
        (WebCore::JSQuarantinedObjectWrapper::construct):
        (WebCore::JSQuarantinedObjectWrapper::callAsFunction):
        * bindings/js/JSQuarantinedObjectWrapper.h:
        * bindings/js/JSSQLResultSetRowListCustom.cpp:
        (WebCore::JSSQLResultSetRowList::item):
        * bindings/js/JSSQLTransactionCustom.cpp:
        (WebCore::JSSQLTransaction::executeSql):
        * bindings/js/JSSVGMatrixCustom.cpp:
        (WebCore::JSSVGMatrix::multiply):
        (WebCore::JSSVGMatrix::inverse):
        (WebCore::JSSVGMatrix::translate):
        (WebCore::JSSVGMatrix::scale):
        (WebCore::JSSVGMatrix::scaleNonUniform):
        (WebCore::JSSVGMatrix::rotate):
        (WebCore::JSSVGMatrix::rotateFromVector):
        (WebCore::JSSVGMatrix::flipX):
        (WebCore::JSSVGMatrix::flipY):
        (WebCore::JSSVGMatrix::skewX):
        (WebCore::JSSVGMatrix::skewY):
        * bindings/js/JSSVGPathSegListCustom.cpp:
        (WebCore::JSSVGPathSegList::clear):
        (WebCore::JSSVGPathSegList::initialize):
        (WebCore::JSSVGPathSegList::getItem):
        (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/js/JSTreeWalkerCustom.cpp:
        (WebCore::JSTreeWalker::parentNode):
        (WebCore::JSTreeWalker::firstChild):
        (WebCore::JSTreeWalker::lastChild):
        (WebCore::JSTreeWalker::nextSibling):
        (WebCore::JSTreeWalker::previousSibling):
        (WebCore::JSTreeWalker::previousNode):
        (WebCore::JSTreeWalker::nextNode):
        * bindings/js/JSXMLHttpRequestConstructor.cpp:
        (WebCore::JSXMLHttpRequestConstructor::construct):
        * bindings/js/JSXMLHttpRequestConstructor.h:
        * bindings/js/JSXMLHttpRequestCustom.cpp:
        (WebCore::JSXMLHttpRequest::open):
        (WebCore::JSXMLHttpRequest::setRequestHeader):
        (WebCore::JSXMLHttpRequest::send):
        (WebCore::JSXMLHttpRequest::getResponseHeader):
        (WebCore::JSXMLHttpRequest::overrideMimeType):
        (WebCore::JSXMLHttpRequest::addEventListener):
        (WebCore::JSXMLHttpRequest::removeEventListener):
        (WebCore::JSXMLHttpRequest::dispatchEvent):
        * bindings/js/JSXSLTProcessorConstructor.cpp:
        (WebCore::JSXSLTProcessorConstructor::construct):
        * bindings/js/JSXSLTProcessorConstructor.h:
        * bindings/js/JSXSLTProcessorCustom.cpp:
        (WebCore::JSXSLTProcessor::importStylesheet):
        (WebCore::JSXSLTProcessor::transformToFragment):
        (WebCore::JSXSLTProcessor::transformToDocument):
        (WebCore::JSXSLTProcessor::setParameter):
        (WebCore::JSXSLTProcessor::getParameter):
        (WebCore::JSXSLTProcessor::removeParameter):
        * bindings/js/ScheduledAction.cpp:
        (WebCore::ScheduledAction::ScheduledAction):
        (WebCore::ScheduledAction::execute):
        * bindings/js/ScheduledAction.h:
        * bindings/js/kjs_events.cpp:
        (WebCore::JSAbstractEventListener::handleEvent):
        (WebCore::JSLazyEventListener::parseCode):
        * bindings/js/kjs_html.cpp:
        (WebCore::runtimeObjectCallAsFunction):
        * bindings/js/kjs_html.h:
        * bindings/objc/WebScriptObject.mm:
        (getListFromNSArray):
        (-[WebScriptObject callWebScriptMethod:withArguments:]):
        * bindings/scripts/CodeGeneratorJS.pm:
        * bridge/NP_jsobject.cpp:
        (getListFromVariantArgs):
        (_NPN_InvokeDefault):
        (_NPN_Invoke):
        * bridge/c/c_instance.cpp:
        (KJS::Bindings::CInstance::invokeMethod):
        (KJS::Bindings::CInstance::invokeDefaultMethod):
        * bridge/c/c_instance.h:
        * bridge/jni/jni_instance.cpp:
        (JavaInstance::invokeMethod):
        * bridge/jni/jni_instance.h:
        * bridge/jni/jni_jsobject.h:
        * bridge/jni/jni_jsobject.mm:
        (JavaJSObject::call):
        (JavaJSObject::getListFromJArray):
        * bridge/objc/objc_instance.h:
        * bridge/objc/objc_instance.mm:
        (ObjcInstance::invokeMethod):
        (ObjcInstance::invokeDefaultMethod):
        * bridge/objc/objc_runtime.h:
        * bridge/objc/objc_runtime.mm:
        (ObjcFallbackObjectImp::callAsFunction):
        * bridge/qt/qt_instance.cpp:
        (KJS::Bindings::QtRuntimeObjectImp::construct):
        (KJS::Bindings::QtInstance::invokeMethod):
        (KJS::Bindings::QtInstance::invokeDefaultMethod):
        * bridge/qt/qt_instance.h:
        * bridge/qt/qt_runtime.cpp:
        (KJS::Bindings::convertQVariantToValue):
        (KJS::Bindings::findMethodIndex):
        (KJS::Bindings::QtRuntimeMetaMethod::callAsFunction):
        (KJS::Bindings::QtRuntimeConnectionMethod::callAsFunction):
        (KJS::Bindings::QtConnectionObject::execute):
        * bridge/qt/qt_runtime.h:
        * bridge/runtime.h:
        (KJS::Bindings::Instance::invokeDefaultMethod):
        * bridge/runtime_method.cpp:
        (RuntimeMethod::callAsFunction):
        * bridge/runtime_method.h:
        * bridge/runtime_object.cpp:
        (RuntimeObjectImp::callAsFunction):
        * bridge/runtime_object.h:
        * page/Console.cpp:
        (WebCore::printToStandardOut):
        (WebCore::Console::debug):
        (WebCore::Console::error):
        (WebCore::Console::info):
        (WebCore::Console::log):
        (WebCore::Console::assertCondition):
        (WebCore::Console::profile):
        (WebCore::Console::profileEnd):
        (WebCore::Console::warn):
        * page/Console.h:
        * page/InspectorController.cpp:
        (WebCore::ConsoleMessage::ConsoleMessage):
        (WebCore::InspectorController::addMessageToConsole):
        * page/InspectorController.h:

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

        * platform/graphics/gtk/VideoSinkGStreamer.h: Undo a bogus rename done by the script.

2008-06-15  Adam Barth  <abarth@webkit.org>

        Reviewed by Sam Weinig.

        Fix our implementation of Document.documentURI (DOM Core Level 3).

        Tests: fast/dom/documenturi-affects-relative-paths.html
               fast/dom/documenturi-assigned-junk-implies-baseuri-null.html
               fast/dom/documenturi-assigned-junk-implies-relative-urls-do-not-resolve.html
               fast/dom/documenturi-can-hold-arbitrary-string.html
               fast/dom/documenturi-loses-to-base-tag.html
               fast/dom/documenturi-not-affected-by-base-tag.html

        * dom/Document.cpp:
        (WebCore::Document::setDocumentURI):
        (WebCore::Document::setURL):
        (WebCore::Document::updateBaseURL):
        * dom/Document.h:
        * page/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::url):

2008-06-15  Adam Barth  <abarth@webkit.org>

        Reviewed by Sam Weinig.

        Refactor our handling of Document::m_baseURL in preparation for
        correcting our implementation of Document.documentURI.

        * dom/Document.cpp:
        (WebCore::Document::documentURI):
        (WebCore::Document::open):
        (WebCore::Document::setURL):
        (WebCore::Document::setBaseElementURL):
        (WebCore::Document::updateBaseURL):
        (WebCore::Document::elementSheet):
        (WebCore::Document::mappedElementSheet):
        (WebCore::Document::completeURL):
        * dom/Document.h:
        (WebCore::Document::url):
        (WebCore::Document::baseURL):
        * html/HTMLBaseElement.cpp:
        (WebCore::HTMLBaseElement::removedFromDocument):
        (WebCore::HTMLBaseElement::process):
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::begin):
        (WebCore::FrameLoader::switchOutLowBandwidthDisplayIfReady):
        * xml/XSLTProcessor.cpp:
        (WebCore::XSLTProcessor::createDocumentFromSource):

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

        - new names for more JavaScriptCore files

        * ForwardingHeaders/kjs/ArrayPrototype.h: Copied from WebCore/ForwardingHeaders/kjs/array_object.h.
        * ForwardingHeaders/kjs/BooleanObject.h: Copied from WebCore/ForwardingHeaders/kjs/bool_object.h.
        * ForwardingHeaders/kjs/FunctionPrototype.h: Copied from WebCore/ForwardingHeaders/kjs/function_object.h.
        * ForwardingHeaders/kjs/JSArray.h: Copied from WebCore/ForwardingHeaders/kjs/array_instance.h.
        * ForwardingHeaders/kjs/PropertyMap.h: Copied from WebCore/ForwardingHeaders/kjs/property_map.h.
        * ForwardingHeaders/kjs/array_instance.h: Removed.
        * ForwardingHeaders/kjs/array_object.h: Removed.
        * ForwardingHeaders/kjs/bool_object.h: Removed.
        * ForwardingHeaders/kjs/function_object.h: Removed.
        * ForwardingHeaders/kjs/property_map.h: Removed.
        * WebCore.vcproj/WebCore.vcproj:
        * bindings/js/JSClipboardCustom.cpp:
        * bindings/js/JSDatabaseCustom.cpp:
        * bindings/js/JSJavaScriptCallFrameCustom.cpp:
        * bindings/js/kjs_events.cpp:
        * bridge/jni/jni_utility.cpp:
        * bridge/qt/qt_runtime.cpp:
        * bridge/runtime_array.cpp:

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

        - new names for a few key JavaScriptCore files

        * ForwardingHeaders/kjs/JSFunction.h: Copied from WebCore/ForwardingHeaders/kjs/function.h.
        * ForwardingHeaders/kjs/JSObject.h: Copied from WebCore/ForwardingHeaders/kjs/object.h.
        * ForwardingHeaders/kjs/JSString.h: Copied from WebCore/ForwardingHeaders/kjs/internal.h.
        * ForwardingHeaders/kjs/JSValue.h: Copied from WebCore/ForwardingHeaders/kjs/value.h.
        * ForwardingHeaders/kjs/function.h: Removed.
        * ForwardingHeaders/kjs/internal.h: Removed.
        * ForwardingHeaders/kjs/object.h: Removed.
        * ForwardingHeaders/kjs/value.h: Removed.
        * WebCore.vcproj/WebCore.vcproj:
        * bindings/js/JSCustomSQLStatementCallback.h:
        * bindings/js/JSCustomSQLStatementErrorCallback.h:
        * bindings/js/JSCustomSQLTransactionErrorCallback.h:
        * bindings/js/JSCustomVoidCallback.h:
        * bindings/js/JSDOMBinding.h:
        * bindings/js/JSDOMWindowCustom.cpp:
        * bindings/js/JSDOMWindowShell.cpp:
        * bindings/js/JSQuarantinedObjectWrapper.h:
        * bridge/objc/objc_runtime.h:
        * bridge/objc/objc_utility.h:
        * bridge/qt/qt_runtime.cpp:
        * bridge/runtime.h:
        * bridge/runtime_array.h:
        * bridge/runtime_method.h:
        * bridge/runtime_object.h:
        * bridge/testbindings.cpp:
        * bridge/testbindings.mm:
        * bridge/testqtbindings.cpp:
        * loader/FrameLoader.cpp:
        * page/JavaScriptCallFrame.cpp:
        * page/JavaScriptProfile.cpp:
        * page/JavaScriptProfileNode.cpp:
        * platform/graphics/gtk/VideoSinkGStreamer.h:
        * plugins/PluginView.cpp:
        * plugins/gtk/PluginViewGtk.cpp:
        * plugins/qt/PluginViewQt.cpp:
        * plugins/win/PluginViewWin.cpp:

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

        Rubber stamped by Sam.

        - cut down on confusing uses of "Object" and "Imp" in
          JavaScriptCore class names

        * bindings/js/JSCSSStyleDeclarationCustom.cpp:
        (WebCore::JSCSSStyleDeclaration::nameGetter):
        * bridge/qt/qt_runtime.cpp:
        (KJS::Bindings::valueRealType):
        (KJS::Bindings::convertValueToQVariant):
        (KJS::Bindings::convertQVariantToValue):
        (KJS::Bindings::QtRuntimeMethod::QtRuntimeMethod):
        * bridge/qt/qt_runtime.h:
        * bridge/runtime_method.cpp:
        (RuntimeMethod::RuntimeMethod):
        (RuntimeMethod::getOwnPropertySlot):
        * bridge/runtime_method.h:

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

        Reviewed by Darin Adler.

        - fix <rdar://problem/5825683> Three slash URLs are modified by WebKit

        Test: fast/loader/url-parse-1.html

        URIs in which the scheme is followed by "://" are ambiguous, because
        "//" can be either the beginning of a net_path or the beginning of an
        abs_path whose first path segment is empty. In the case of ":///", the
        net_path interpretation is invalid, because the authority (the part
        between the second and third slashes) cannot be empty. However, for
        historical reasons, this is allowed in http:, https: and file: URLs,
        in which an empty authority means the local host.

        * platform/KURL.cpp:
        (WebCore::KURL::parse): Changed to interpret URLs in which the scheme
        is followed by ":///" as abs_path-only URLs, unless the scheme is http,
        https or file.

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

        Rubber stamped by Sam.

        - use JS prefix and simpler names for basic JavaScriptCore types,
          to complement JSValue and JSObject

        * bindings/js/JSNavigatorCustom.cpp:
        (WebCore::needsYouTubeQuirk):
        * bindings/js/kjs_events.cpp:
        (WebCore::JSLazyEventListener::parseCode):
        * bridge/jni/jni_utility.cpp:
        (KJS::Bindings::convertArrayInstanceToJavaArray):
        (KJS::Bindings::convertValueToJValue):
        * bridge/qt/qt_runtime.cpp:
        (KJS::Bindings::valueRealType):
        (KJS::Bindings::convertValueToQVariant):
        (KJS::Bindings::QtConnectionObject::execute):
        * bridge/runtime_array.cpp:

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

        Reviewed by Mitz.

        - fix https://bugs.webkit.org/show_bug.cgi?id=19556
          REGRESSION (r34544): Crash while visiting bigglook.com

        This fix eliminates the crash, but the logic remaining seems a little strange.
        We create an IconRecord and then immediately destroy it. Worth taking another
        look at this later.

        * loader/icon/IconDatabase.cpp:
        (WebCore::IconDatabase::setIconDataForIconURL): Added code to remove the icon
        just as in the other cases where we might be holding the single reference to it.
        (WebCore::IconDatabase::setIconURLForPageURL): Fixed comment typo.
        (WebCore::IconDatabase::writeToDatabase): Removed unused local variable.

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

        Reviewed and tweaked by Sam Weinig.

        Fix for <rdar://problem/5908591>
        https://bugs.webkit.org/show_bug.cgi?id=18743

        Makes DOMImplementation per-document.

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

        * bindings/objc/DOMImplementationFront.cpp:
        (WebCore::DOMImplementationFront::getInterface):
        * bindings/objc/DOMImplementationFront.h:
        * dom/DOMImplementation.cpp:
        (WebCore::DOMImplementation::hasFeature):
        (WebCore::DOMImplementation::createDocumentType):
        (WebCore::DOMImplementation::getInterface):
        (WebCore::DOMImplementation::createDocument):
        (WebCore::DOMImplementation::createHTMLDocument):
        * dom/DOMImplementation.h:
        (WebCore::DOMImplementation::create):
        * dom/Document.cpp:
        (WebCore::Document::Document):
        (WebCore::Document::implementation):
        * dom/Document.h:
        (WebCore::Document::create):
        (WebCore::Document::createXHTML):
        * dom/DocumentType.cpp:
        * dom/DocumentType.h:
        (WebCore::DocumentType::create):
        (WebCore::DocumentType::entities):
        (WebCore::DocumentType::notations):
        (WebCore::DocumentType::name):
        (WebCore::DocumentType::publicId):
        (WebCore::DocumentType::systemId):
        (WebCore::DocumentType::internalSubset):
        * dom/Node.cpp:
        (WebCore::Node::isSupported):
        * dom/XMLTokenizer.cpp:
        (WebCore::XMLTokenizer::internalSubset):
        * html/HTMLDocument.cpp:
        (WebCore::HTMLDocument::HTMLDocument):
        * html/HTMLDocument.h:
        (WebCore::HTMLDocument::create):
        (WebCore::HTMLDocument::isHTMLDocument):
        * html/HTMLParser.cpp:
        (WebCore::HTMLParser::parseDoctypeToken):
        * html/HTMLViewSourceDocument.cpp:
        (WebCore::HTMLViewSourceDocument::HTMLViewSourceDocument):
        (WebCore::HTMLViewSourceDocument::createTokenizer):
        * html/HTMLViewSourceDocument.h:
        (WebCore::HTMLViewSourceDocument::create):
        * loader/CachedFont.cpp:
        (WebCore::CachedFont::ensureSVGFontData):
        * loader/FTPDirectoryDocument.cpp:
        (WebCore::FTPDirectoryDocument::FTPDirectoryDocument):
        * loader/FTPDirectoryDocument.h:
        (WebCore::FTPDirectoryDocument::create):
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::begin):
        * loader/ImageDocument.cpp:
        (WebCore::ImageDocument::ImageDocument):
        * loader/ImageDocument.h:
        (WebCore::ImageDocument::create):
        (WebCore::ImageDocument::isImageDocument):
        * loader/PluginDocument.cpp:
        (WebCore::PluginDocument::PluginDocument):
        * loader/PluginDocument.h:
        (WebCore::PluginDocument::create):
        (WebCore::PluginDocument::isPluginDocument):
        * loader/TextDocument.cpp:
        (WebCore::TextTokenizer::checkBuffer):
        (WebCore::TextDocument::TextDocument):
        (WebCore::createTextTokenizer):
        * loader/TextDocument.h:
        (WebCore::TextDocument::create):
        * svg/SVGDocument.cpp:
        (WebCore::SVGDocument::SVGDocument):
        * svg/SVGDocument.h:
        (WebCore::SVGDocument::create):
        * svg/SVGElement.cpp:
        (WebCore::SVGElement::isSupported):
        * svg/SVGTests.cpp:
        (WebCore::SVGTests::isValid):
        * xml/DOMParser.cpp:
        (WebCore::DOMParser::parseFromString):

2008-06-15  Cameron Zwarich  <cwzwarich@uwaterloo.ca>

        Reviewed by Maciej.

        Mac build fix.

        * WebCore.base.exp:
        * WebCore.order:

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

        Rubber stamped by Sam.

        - new names for kjs_binding.h and kjs_proxy.h

        * GNUmakefile.am:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * WebCoreSources.bkl:
        * bindings/js/JSAudioConstructor.h:
        * bindings/js/JSCustomSQLStatementCallback.cpp:
        * bindings/js/JSCustomSQLStatementErrorCallback.cpp:
        * bindings/js/JSCustomSQLTransactionCallback.cpp:
        * bindings/js/JSCustomSQLTransactionErrorCallback.cpp:
        * bindings/js/JSCustomVoidCallback.cpp:
        * bindings/js/JSCustomXPathNSResolver.cpp:
        * bindings/js/JSDOMBinding.cpp: Copied from WebCore/bindings/js/kjs_binding.cpp.
        * bindings/js/JSDOMBinding.h: Copied from WebCore/bindings/js/kjs_binding.h.
        * bindings/js/JSDOMWindowBase.cpp:
        * bindings/js/JSDOMWindowBase.h:
        * bindings/js/JSDOMWindowCustom.cpp:
        * bindings/js/JSDOMWindowShell.cpp:
        * bindings/js/JSDOMWindowShell.h:
        * bindings/js/JSDocumentCustom.cpp:
        * bindings/js/JSHTMLCollectionCustom.cpp:
        * bindings/js/JSHTMLFrameElementCustom.cpp:
        * bindings/js/JSHTMLFrameSetElementCustom.cpp:
        * bindings/js/JSHTMLIFrameElementCustom.cpp:
        * bindings/js/JSHTMLInputElementBase.h:
        * bindings/js/JSHTMLOptionElementConstructor.h:
        * bindings/js/JSImageConstructor.h:
        * bindings/js/JSLocationCustom.cpp:
        * bindings/js/JSNamedNodeMapCustom.cpp:
        * bindings/js/JSNamedNodesCollection.h:
        * bindings/js/JSNodeFilterCondition.cpp:
        * bindings/js/JSNodeFilterCustom.cpp:
        * bindings/js/JSRGBColor.h:
        * bindings/js/JSSVGPathSegCustom.cpp:
        * bindings/js/JSXMLHttpRequestConstructor.h:
        * bindings/js/JSXSLTProcessorConstructor.h:
        * bindings/js/JSXSLTProcessorCustom.cpp:
        * bindings/js/ScheduledAction.cpp:
        (WebCore::ScheduledAction::execute):
        * bindings/js/ScriptController.cpp: Copied from WebCore/bindings/js/kjs_proxy.cpp.
        * bindings/js/ScriptController.h: Copied from WebCore/bindings/js/kjs_proxy.h.
        * bindings/js/kjs_binding.cpp: Removed.
        * bindings/js/kjs_binding.h: Removed.
        * bindings/js/kjs_events.cpp:
        (WebCore::JSAbstractEventListener::handleEvent):
        * bindings/js/kjs_html.cpp:
        * bindings/js/kjs_html.h:
        * bindings/js/kjs_proxy.cpp: Removed.
        * bindings/js/kjs_proxy.h: Removed.
        * bindings/objc/DOMInternal.mm:
        * bindings/scripts/CodeGeneratorJS.pm:
        * bridge/jni/jni_jsobject.mm:
        * dom/Document.cpp:
        * dom/EventTarget.cpp:
        * dom/Node.cpp:
        * dom/XMLTokenizer.cpp:
        (WebCore::XMLTokenizer::startElementNs):
        * history/CachedPage.cpp:
        (WebCore::CachedPage::CachedPage):
        (WebCore::CachedPage::restore):
        * html/HTMLPlugInElement.cpp:
        * html/HTMLScriptElement.cpp:
        * html/HTMLTokenizer.cpp:
        (WebCore::HTMLTokenizer::processToken):
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::executeScript):
        * page/Frame.cpp:
        (WebCore::Frame::scriptProxy):
        * page/Frame.h:
        * page/FramePrivate.h:
        * page/InspectorController.cpp:
        * page/JavaScriptDebugServer.cpp:
        * page/JavaScriptProfileNode.cpp:
        * page/Page.cpp:
        * page/gtk/FrameGtk.cpp:
        * page/mac/FrameMac.mm:
        * page/qt/FrameQt.cpp:
        * page/win/FrameWin.cpp:
        * plugins/PluginView.cpp:
        (WebCore::getString):
        * plugins/gtk/PluginViewGtk.cpp:
        * plugins/qt/PluginViewQt.cpp:
        * plugins/win/PluginViewWin.cpp:
        * svg/SVGDocumentExtensions.cpp:
        * xml/XMLHttpRequest.cpp:

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

        Rubber stamped by Sam.

        - renamed HTMLGenericFormElement to HTMLFormControlElement

        * GNUmakefile.am:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * WebCoreSources.bkl:
        * html/HTMLButtonElement.cpp:
        (WebCore::HTMLButtonElement::HTMLButtonElement):
        (WebCore::HTMLButtonElement::parseMappedAttribute):
        (WebCore::HTMLButtonElement::defaultEventHandler):
        * html/HTMLButtonElement.h:
        * html/HTMLFieldSetElement.cpp:
        (WebCore::HTMLFieldSetElement::HTMLFieldSetElement):
        * html/HTMLFieldSetElement.h:
        * html/HTMLFormCollection.cpp:
        (WebCore::HTMLFormCollection::item):
        (WebCore::HTMLFormCollection::getNamedFormItem):
        (WebCore::HTMLFormCollection::updateNameCache):
        * html/HTMLFormControlElement.cpp: Copied from WebCore/html/HTMLGenericFormElement.cpp.
        * html/HTMLFormControlElement.h: Copied from WebCore/html/HTMLGenericFormElement.h.
        * html/HTMLFormElement.cpp:
        (WebCore::HTMLFormElement::formData):
        (WebCore::HTMLFormElement::submit):
        (WebCore::HTMLFormElement::formElementIndex):
        (WebCore::HTMLFormElement::registerFormElement):
        (WebCore::HTMLFormElement::removeFormElement):
        (WebCore::HTMLFormElement::elementForAlias):
        (WebCore::HTMLFormElement::addElementAlias):
        (WebCore::HTMLFormElement::getNamedElements):
        (WebCore::HTMLFormElement::CheckedRadioButtons::addButton):
        (WebCore::HTMLFormElement::CheckedRadioButtons::removeButton):
        * html/HTMLFormElement.h:
        * html/HTMLGenericFormElement.cpp: Removed.
        * html/HTMLGenericFormElement.h: Removed.
        * html/HTMLInputElement.h:
        * html/HTMLIsIndexElement.cpp:
        (WebCore::HTMLIsIndexElement::parseMappedAttribute):
        * html/HTMLKeygenElement.cpp:
        (WebCore::HTMLKeygenElement::parseMappedAttribute):
        * html/HTMLLegendElement.cpp:
        (WebCore::HTMLLegendElement::HTMLLegendElement):
        * html/HTMLLegendElement.h:
        * html/HTMLOptGroupElement.cpp:
        (WebCore::HTMLOptGroupElement::HTMLOptGroupElement):
        (WebCore::HTMLOptGroupElement::insertBefore):
        (WebCore::HTMLOptGroupElement::replaceChild):
        (WebCore::HTMLOptGroupElement::removeChild):
        (WebCore::HTMLOptGroupElement::appendChild):
        (WebCore::HTMLOptGroupElement::removeChildren):
        (WebCore::HTMLOptGroupElement::childrenChanged):
        (WebCore::HTMLOptGroupElement::parseMappedAttribute):
        (WebCore::HTMLOptGroupElement::attach):
        (WebCore::HTMLOptGroupElement::detach):
        * html/HTMLOptGroupElement.h:
        * html/HTMLOptionElement.cpp:
        (WebCore::HTMLOptionElement::HTMLOptionElement):
        (WebCore::HTMLOptionElement::attach):
        (WebCore::HTMLOptionElement::detach):
        (WebCore::HTMLOptionElement::parseMappedAttribute):
        (WebCore::HTMLOptionElement::childrenChanged):
        (WebCore::HTMLOptionElement::disabled):
        (WebCore::HTMLOptionElement::insertedIntoDocument):
        * html/HTMLOptionElement.h:
        * html/HTMLSelectElement.h:
        * html/HTMLTextAreaElement.h:
        * page/Frame.cpp:
        (WebCore::scanForForm):
        (WebCore::Frame::currentForm):
        * page/mac/FrameMac.mm:
        * rendering/RenderFieldset.cpp:
        (WebCore::RenderFieldset::RenderFieldset):
        * rendering/RenderFieldset.h:
        * rendering/RenderLegend.cpp:
        (WebCore::RenderLegend::RenderLegend):
        * rendering/RenderLegend.h:
        * rendering/RenderTextControl.cpp:
        (WebCore::RenderTextControl::createInnerTextStyle):
        (WebCore::RenderTextControl::updateFromElement):
        (WebCore::RenderTextControl::subtreeHasChanged):
        (WebCore::RenderTextControl::selectionChanged):

2008-06-14  Sam Weinig  <sam@webkit.org>

        Windows build fix.

        * bindings/scripts/CodeGeneratorCOM.pm:

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

        - more build fixing

        * platform/gtk/DragDataGtk.cpp: Added missing header.
        * platform/wx/DragDataWx.cpp: Ditto.

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

        Reviewed by Sam.

        - fix https://bugs.webkit.org/show_bug.cgi?id=19544
          DashboardRegion pieces are leaking

        My recent change introduced a leak of objects owned by each DashboardRegion,
        because I made ~Rect non-virtual. By using a separate RefCounted class for
        each of Rect and DashboardRegion, the leak is gone. It's not clear if the
        DashboardRegion class should really exist -- it doesn't have a DOM binding,
        so it could conceivably be removed some day.

        * css/DashboardRegion.h: Derive from RectBase instead of from Rect.
        * css/Rect.h: Added RectBase. Changed Rect to derive from RectBase.

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

        Reviewed by Sam.

        - https://bugs.webkit.org/show_bug.cgi?id=19545
          use PassRefPtr, not RefPtr, for return values

        * css/CSSParser.cpp:
        (WebCore::CSSParser::parseGradient): Call release() when assigning result to avoid
        a little bit of refcount churn.

        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::styleRulesForElement): Changed return value to PassRefPtr.
        (WebCore::CSSStyleSelector::pseudoStyleRulesForElement): Ditto.
        * css/CSSStyleSelector.h: Ditto.

        * svg/SVGElementInstanceList.cpp:
        (WebCore::SVGElementInstanceList::length): Tweaked formatting.
        (WebCore::SVGElementInstanceList::item): Changed return value to raw pointer.
        * svg/SVGElementInstanceList.h: Ditto.

        * xml/XSLTProcessor.cpp:
        (WebCore::XSLTProcessor::createDocumentFromSource): Changed return value to PassRefPtr.
        (WebCore::XSLTProcessor::transformToDocument): Ditto.
        (WebCore::XSLTProcessor::transformToFragment): Ditto.
        * xml/XSLTProcessor.h: Ditto.

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

        - try to fix the gtk build

        * platform/gtk/DragDataGtk.cpp:
        (WebCore::DragData::createClipboard): Changed return type to PassRefPtr.

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

        - another try at fixing the wx build

        * platform/wx/DragDataWx.cpp:
        (WebCore::DragData::createClipboard): Changed return type to PassRefPtr.

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

        - try to fix Windows build

        * svg/graphics/SVGImageEmptyClients.h: Added missing include.

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

        - fix wx build

        * platform/wx/TemporaryLinkStubs.cpp: Removed unneeded Icon constructor.

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

        Reviewed by Sam.

        - more work on https://bugs.webkit.org/show_bug.cgi?id=17257
          start ref counts at 1 instead of 0 for speed

        * WebCore.base.exp: Added some new exports needed for functions that are now
        non-virtual.

        * WebCore.xcodeproj/project.pbxproj: Moved the "icon" group to the correct
        location in the project. Before it was inside "appcache"!

        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::applyProperty):
        * dom/Clipboard.cpp:
        (WebCore::Clipboard::Clipboard):
        * editing/mac/EditorMac.mm:
        (WebCore::Editor::newGeneralClipboard):
        * editing/qt/EditorQt.cpp:
        (WebCore::Editor::newGeneralClipboard):
        * editing/wx/EditorWx.cpp:
        (WebCore::Editor::newGeneralClipboard):
        * loader/DocumentLoader.cpp:
        (WebCore::DocumentLoader::DocumentLoader):
        * loader/DocumentLoader.h:
        (WebCore::DocumentLoader::create):
        * loader/icon/IconDatabase.cpp:
        (WebCore::IconDatabase::defaultIcon):
        (WebCore::IconDatabase::setIconDataForIconURL):
        (WebCore::IconDatabase::setIconURLForPageURL):
        (WebCore::IconDatabase::getOrCreateIconRecord):
        (WebCore::IconDatabase::performURLImport):
        * loader/icon/IconDatabase.h:
        * loader/icon/IconRecord.cpp:
        (WebCore::IconRecord::IconRecord):
        * loader/icon/IconRecord.h:
        (WebCore::IconRecord::create):
        * page/EventHandler.h:
        * page/Frame.cpp:
        (WebCore::Frame::Frame):
        * page/Frame.h:
        (WebCore::Frame::create):
        * page/gtk/EventHandlerGtk.cpp:
        (WebCore::EventHandler::createDraggingClipboard):
        * page/mac/EventHandlerMac.mm:
        (WebCore::EventHandler::createDraggingClipboard):
        * page/qt/EventHandlerQt.cpp:
        (WebCore::EventHandler::createDraggingClipboard):
        * page/win/EventHandlerWin.cpp:
        (WebCore::EventHandler::createDraggingClipboard):
        * page/wx/EventHandlerWx.cpp:
        (WebCore::EventHandler::createDraggingClipboard):
        * platform/Cursor.h:
        (WebCore::SharedCursor::create):
        (WebCore::SharedCursor::~SharedCursor):
        (WebCore::SharedCursor::SharedCursor):
        * platform/DragData.h:
        * platform/PopupMenu.h:
        (WebCore::PopupMenu::create):
        (WebCore::PopupMenu::isActive):
        * platform/ScrollBar.cpp:
        (WebCore::Scrollbar::Scrollbar):
        * platform/SearchPopupMenu.h:
        (WebCore::SearchPopupMenu::create):
        * platform/graphics/FontFamily.cpp:
        (WebCore::FontFamily::FontFamily):
        (WebCore::operator==):
        * platform/graphics/FontFamily.h:
        (WebCore::FontFamily::FontFamily):
        (WebCore::SharedFontFamily::create):
        (WebCore::SharedFontFamily::SharedFontFamily):
        (WebCore::operator!=):
        (WebCore::FontFamily::next):
        (WebCore::FontFamily::appendFamily):
        (WebCore::FontFamily::releaseNext):
        * platform/graphics/Icon.h:
        * platform/graphics/gtk/IconGtk.cpp:
        (WebCore::Icon::Icon):
        (WebCore::Icon::~Icon):
        (WebCore::Icon::newIconForFile):
        * platform/graphics/mac/IconMac.mm:
        (WebCore::Icon::Icon):
        (WebCore::Icon::newIconForFile):
        * platform/graphics/qt/IconQt.cpp:
        (WebCore::Icon::Icon):
        (WebCore::Icon::newIconForFile):
        * platform/graphics/win/IconWin.cpp:
        (WebCore::Icon::Icon):
        (WebCore::Icon::~Icon):
        (WebCore::Icon::newIconForFile):
        * platform/gtk/ClipboardGtk.cpp:
        (WebCore::Editor::newGeneralClipboard):
        * platform/gtk/ClipboardGtk.h:
        (WebCore::ClipboardGtk::create):
        * platform/gtk/PlatformScrollBar.h:
        (WebCore::PlatformScrollbar::create):
        * platform/gtk/PopupMenuGtk.cpp:
        (WebCore::PopupMenu::PopupMenu):
        * platform/gtk/ScrollViewGtk.cpp:
        (WebCore::ScrollViewScrollbar::create):
        (WebCore::ScrollView::ScrollViewPrivate::setHasHorizontalScrollbar):
        (WebCore::ScrollView::ScrollViewPrivate::setHasVerticalScrollbar):
        * platform/mac/ClipboardMac.h:
        (WebCore::ClipboardMac::create):
        * platform/mac/DragDataMac.mm:
        (WebCore::DragData::createClipboard):
        (WebCore::DragData::containsCompatibleContent):
        * platform/mac/PlatformScrollBar.h:
        (WebCore::PlatformScrollbar::create):
        (WebCore::PlatformScrollbar::horizontalScrollbarHeight):
        (WebCore::PlatformScrollbar::verticalScrollbarWidth):
        * platform/mac/PopupMenuMac.mm:
        (WebCore::PopupMenu::PopupMenu):
        * platform/qt/ClipboardQt.h:
        (WebCore::ClipboardQt::create):
        * platform/qt/DragDataQt.cpp:
        (WebCore::DragData::createClipboard):
        * platform/qt/PlatformScrollBar.h:
        (WebCore::PlatformScrollbar::create):
        * platform/qt/PopupMenuQt.cpp:
        (WebCore::PopupMenu::PopupMenu):
        * platform/qt/ScrollViewQt.cpp:
        (WebCore::ScrollView::ScrollViewPrivate::setHasHorizontalScrollbar):
        (WebCore::ScrollView::ScrollViewPrivate::setHasVerticalScrollbar):
        * platform/win/ClipboardWin.h:
        (WebCore::ClipboardWin::create):
        * platform/win/CursorWin.cpp:
        (WebCore::Cursor::Cursor):
        (WebCore::loadSharedCursor):
        * platform/win/DragDataWin.cpp:
        (WebCore::DragData::createClipboard):
        * platform/win/EditorWin.cpp:
        (WebCore::Editor::newGeneralClipboard):
        * platform/win/PlatformScrollBar.h:
        (WebCore::PlatformScrollbar::create):
        * platform/win/PopupMenuWin.cpp:
        (WebCore::PopupMenu::PopupMenu):
        (WebCore::PopupMenu::show):
        * platform/win/ScrollViewWin.cpp:
        (WebCore::ScrollView::ScrollViewPrivate::setHasHorizontalScrollbar):
        (WebCore::ScrollView::ScrollViewPrivate::setHasVerticalScrollbar):
        * platform/wx/ClipboardWx.h:
        (WebCore::ClipboardWx::create):
        * platform/wx/PlatformScrollBar.h:
        (WebCore::PlatformScrollbar::create):
        * platform/wx/PopupMenuWx.cpp:
        (WebCore::PopupMenu::PopupMenu):
        * platform/wx/TemporaryLinkStubs.cpp:
        (Icon::Icon):
        (Icon::newIconForFile):
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::createScrollbar):
        * rendering/RenderListBox.cpp:
        (WebCore::RenderListBox::updateFromElement):
        * svg/graphics/SVGImage.cpp:
        (WebCore::SVGImage::dataChanged):
        * svg/graphics/SVGImageEmptyClients.h:
        (WebCore::SVGEmptyFrameLoaderClient::createDocumentLoader):

2008-06-14  Sam Weinig  <sam@webkit.org>

        Reviewed by Dan Bernstein.

        Fix for <rdar://problem/5775192>
        insertAdjacentHTML and insertAdjacentText are not implemented although insertAdjacentElement is.

        - Implements insertAdjacentHTML and insertAdjacentText for HTMLElement.
        - Moves the insertAdjacentElement implementation from Element to HTMLElement.

        Tests: fast/dynamic/insertAdjacentHTML.html
               fast/dynamic/insertAdjacentText.html

        * dom/Element.cpp:
        * dom/Element.h:
        * dom/Element.idl:
        * html/HTMLElement.cpp:
        (WebCore::HTMLElement::insertAdjacent):
        (WebCore::HTMLElement::insertAdjacentElement):
        (WebCore::HTMLElement::insertAdjacentHTML):
        (WebCore::HTMLElement::insertAdjacentText):
        * html/HTMLElement.h:
        * html/HTMLElement.idl:

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

        Reviewed by Maciej.

        - fix https://bugs.webkit.org/show_bug.cgi?id=19538
          <rdar://problem/5957595> Reading transition property from the style JS gives the wrong value

        Test: fast/dom/CSSStyleDeclaration/transition-property-names.html

        * css/CSSPrimitiveValue.cpp:
        (WebCore::valueOrPropertyName): Added.
        (WebCore::CSSPrimitiveValue::getStringValue): Use valueOrPropertyName since the ident can either
        be a value or property ID.
        (WebCore::CSSPrimitiveValue::cssText): Ditto.

        * css/makeprop.pl: Assign property IDs starting at 1001 instead of 1 so they can be stored along
        with value IDs with no ambiguity.

2008-06-14  Adam Barth  <abarth@webkit.org>

        Reviewed by David Kilzer.

        Fix typo.

        * dom/XMLTokenizer.cpp:
        (WebCore::shouldAllowExternalLoad):

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

        - fix build

        * plugins/PluginStream.h: Move functions back into public section.

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

        Reviewed by Sam.

        - more work on https://bugs.webkit.org/show_bug.cgi?id=17257
          start ref counts at 1 instead of 0 for speed

        * WebCore.base.exp:
        * bindings/js/JSSVGMatrixCustom.cpp:
        (WebCore::JSSVGMatrix::multiply):
        (WebCore::JSSVGMatrix::inverse):
        (WebCore::JSSVGMatrix::translate):
        (WebCore::JSSVGMatrix::scale):
        (WebCore::JSSVGMatrix::scaleNonUniform):
        (WebCore::JSSVGMatrix::rotate):
        (WebCore::JSSVGMatrix::rotateFromVector):
        (WebCore::JSSVGMatrix::flipX):
        (WebCore::JSSVGMatrix::flipY):
        (WebCore::JSSVGMatrix::skewX):
        (WebCore::JSSVGMatrix::skewY):
        * bindings/js/JSSVGPODTypeWrapper.h:
        (WebCore::JSSVGPODTypeWrapperCreatorReadWrite::create):
        (WebCore::JSSVGPODTypeWrapperCreatorReadWrite::JSSVGPODTypeWrapperCreatorReadWrite):
        (WebCore::JSSVGPODTypeWrapperCreatorReadOnly::create):
        (WebCore::JSSVGPODTypeWrapperCreatorReadOnly::JSSVGPODTypeWrapperCreatorReadOnly):
        (WebCore::JSSVGPODTypeWrapperCreatorForList::create):
        (WebCore::JSSVGPODTypeWrapperCreatorForList::JSSVGPODTypeWrapperCreatorForList):
        (WebCore::JSSVGPODTypeWrapperCache::lookupOrCreateWrapper):
        (WebCore::JSSVGPODTypeWrapperCache::forgetWrapper):
        * bindings/js/JSSVGPointListCustom.cpp:
        (WebCore::finishGetter):
        (WebCore::finishSetter):
        (WebCore::finishSetterReadOnlyResult):
        (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::finishGetter):
        (WebCore::finishSetter):
        (WebCore::finishSetterReadOnlyResult):
        (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:
        * css/CSSFontSelector.cpp:
        (WebCore::CSSFontSelector::CSSFontSelector):
        (WebCore::CSSFontSelector::~CSSFontSelector):
        * css/CSSFontSelector.h:
        (WebCore::CSSFontSelector::create):
        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::CSSStyleSelector):
        (WebCore::CSSStyleSelector::applyProperty):
        * dom/Attribute.cpp:
        (WebCore::Attribute::clone):
        * dom/Attribute.h:
        (WebCore::Attribute::create):
        (WebCore::Attribute::Attribute):
        * dom/BeforeTextInsertedEvent.h:
        (WebCore::BeforeTextInsertedEvent::create):
        * dom/BeforeUnloadEvent.h:
        (WebCore::BeforeUnloadEvent::create):
        * dom/CharacterData.cpp:
        (WebCore::CharacterData::dispatchModifiedEvent):
        * dom/ClipboardEvent.cpp:
        (WebCore::ClipboardEvent::ClipboardEvent):
        * dom/ClipboardEvent.h:
        (WebCore::ClipboardEvent::create):
        * dom/ContainerNode.cpp:
        (WebCore::ContainerNode::removeChild):
        (WebCore::dispatchChildInsertionEvents):
        (WebCore::dispatchChildRemovalEvents):
        * dom/Document.cpp:
        (WebCore::Document::createTextNode):
        (WebCore::Document::createComment):
        (WebCore::Document::createCDATASection):
        (WebCore::Document::createProcessingInstruction):
        (WebCore::Document::createEntityReference):
        (WebCore::Document::createEditingTextNode):
        (WebCore::Document::createEvent):
        (WebCore::Document::createAttributeNS):
        (WebCore::Document::finishedParsing):
        * dom/Document.h:
        * dom/Element.cpp:
        (WebCore::Element::createAttribute):
        * dom/Element.h:
        * dom/Event.cpp:
        (WebCore::Event::Event):
        * dom/Event.h:
        (WebCore::Event::create):
        * dom/EventTargetNode.cpp:
        (WebCore::EventTargetNode::dispatchSubtreeModifiedEvent):
        (WebCore::EventTargetNode::dispatchWindowEvent):
        (WebCore::EventTargetNode::dispatchUIEvent):
        (WebCore::EventTargetNode::dispatchKeyEvent):
        (WebCore::EventTargetNode::dispatchMouseEvent):
        (WebCore::EventTargetNode::dispatchWheelEvent):
        (WebCore::EventTargetNode::dispatchHTMLEvent):
        (WebCore::EventTargetNode::dispatchProgressEvent):
        (WebCore::EventTargetNode::dispatchStorageEvent):
        * dom/KeyboardEvent.h:
        (WebCore::KeyboardEvent::create):
        * dom/MappedAttribute.cpp:
        (WebCore::MappedAttribute::clone):
        * dom/MappedAttribute.h:
        (WebCore::MappedAttribute::create):
        (WebCore::MappedAttribute::setDecl):
        (WebCore::MappedAttribute::MappedAttribute):
        * dom/MessageEvent.cpp:
        (WebCore::MessageEvent::MessageEvent):
        * dom/MessageEvent.h:
        (WebCore::MessageEvent::create):
        * dom/MouseEvent.cpp:
        (WebCore::MouseEvent::MouseEvent):
        (WebCore::MouseEvent::initMouseEvent):
        * dom/MouseEvent.h:
        (WebCore::MouseEvent::create):
        * dom/MouseRelatedEvent.cpp:
        (WebCore::MouseRelatedEvent::MouseRelatedEvent):
        * dom/MouseRelatedEvent.h:
        * dom/MutationEvent.cpp:
        (WebCore::MutationEvent::MutationEvent):
        (WebCore::MutationEvent::initMutationEvent):
        * dom/MutationEvent.h:
        (WebCore::MutationEvent::create):
        * dom/OverflowEvent.h:
        (WebCore::OverflowEvent::create):
        * dom/ProgressEvent.h:
        (WebCore::ProgressEvent::create):
        * dom/StyledElement.cpp:
        (WebCore::StyledElement::getMappedAttributeDecl):
        (WebCore::StyledElement::setMappedAttributeDecl):
        (WebCore::StyledElement::removeMappedAttributeDecl):
        (WebCore::StyledElement::createAttribute):
        * dom/StyledElement.h:
        * dom/TextEvent.cpp:
        (WebCore::TextEvent::TextEvent):
        (WebCore::TextEvent::initTextEvent):
        * dom/TextEvent.h:
        (WebCore::TextEvent::create):
        * dom/UIEvent.cpp:
        (WebCore::UIEvent::UIEvent):
        (WebCore::UIEvent::initUIEvent):
        * dom/UIEvent.h:
        (WebCore::UIEvent::create):
        * dom/UIEventWithKeyState.h:
        (WebCore::UIEventWithKeyState::ctrlKey):
        (WebCore::UIEventWithKeyState::shiftKey):
        (WebCore::UIEventWithKeyState::altKey):
        (WebCore::UIEventWithKeyState::metaKey):
        (WebCore::UIEventWithKeyState::UIEventWithKeyState):
        * dom/WheelEvent.cpp:
        (WebCore::WheelEvent::WheelEvent):
        (WebCore::WheelEvent::initWheelEvent):
        * dom/WheelEvent.h:
        (WebCore::WheelEvent::create):
        * editing/AppendNodeCommand.cpp:
        (WebCore::AppendNodeCommand::AppendNodeCommand):
        * editing/AppendNodeCommand.h:
        (WebCore::AppendNodeCommand::create):
        * editing/ApplyStyleCommand.cpp:
        (WebCore::ApplyStyleCommand::applyBlockStyle):
        * editing/ApplyStyleCommand.h:
        (WebCore::ApplyStyleCommand::create):
        * editing/BreakBlockquoteCommand.h:
        (WebCore::BreakBlockquoteCommand::create):
        * editing/CompositeEditCommand.cpp:
        (WebCore::CompositeEditCommand::applyStyle):
        (WebCore::CompositeEditCommand::applyStyledElement):
        (WebCore::CompositeEditCommand::removeStyledElement):
        (WebCore::CompositeEditCommand::insertParagraphSeparator):
        (WebCore::CompositeEditCommand::insertLineBreak):
        (WebCore::CompositeEditCommand::insertNodeBefore):
        (WebCore::CompositeEditCommand::appendNode):
        (WebCore::CompositeEditCommand::removeNode):
        (WebCore::CompositeEditCommand::removeNodePreservingChildren):
        (WebCore::CompositeEditCommand::splitTextNode):
        (WebCore::CompositeEditCommand::splitElement):
        (WebCore::CompositeEditCommand::mergeIdenticalElements):
        (WebCore::CompositeEditCommand::wrapContentsInDummySpan):
        (WebCore::CompositeEditCommand::splitTextNodeContainingElement):
        (WebCore::CompositeEditCommand::joinTextNodes):
        (WebCore::CompositeEditCommand::inputText):
        (WebCore::CompositeEditCommand::insertTextIntoNode):
        (WebCore::CompositeEditCommand::deleteTextFromNode):
        (WebCore::CompositeEditCommand::replaceTextInNode):
        (WebCore::CompositeEditCommand::deleteSelection):
        (WebCore::CompositeEditCommand::removeCSSProperty):
        (WebCore::CompositeEditCommand::removeNodeAttribute):
        (WebCore::CompositeEditCommand::setNodeAttribute):
        (WebCore::CompositeEditCommand::appendBlockPlaceholder):
        (WebCore::CompositeEditCommand::insertBlockPlaceholder):
        (WebCore::CompositeEditCommand::addBlockPlaceholderIfNeeded):
        (WebCore::CompositeEditCommand::moveParagraphContentsToNewBlockIfNecessary):
        (WebCore::CompositeEditCommand::moveParagraphs):
        (WebCore::CompositeEditCommand::splitTreeToNode):
        * editing/CompositeEditCommand.h:
        (WebCore::CompositeEditCommand::isFirstCommand):
        * editing/CreateLinkCommand.h:
        (WebCore::CreateLinkCommand::create):
        * editing/DeleteButtonController.cpp:
        (WebCore::DeleteButtonController::deleteTarget):
        * editing/DeleteFromTextNodeCommand.cpp:
        (WebCore::DeleteFromTextNodeCommand::DeleteFromTextNodeCommand):
        * editing/DeleteFromTextNodeCommand.h:
        (WebCore::DeleteFromTextNodeCommand::create):
        * editing/DeleteSelectionCommand.h:
        (WebCore::DeleteSelectionCommand::create):
        * editing/EditCommand.h:
        (WebCore::SimpleEditCommand::SimpleEditCommand):
        * editing/Editor.cpp:
        (WebCore::Editor::deleteSelectionWithSmartDelete):
        (WebCore::Editor::replaceSelectionWithFragment):
        (WebCore::Editor::removeFormattingAndStyle):
        (WebCore::Editor::clearLastEditCommand):
        (WebCore::Editor::dispatchCPPEvent):
        (WebCore::Editor::applyStyle):
        (WebCore::Editor::applyParagraphStyle):
        (WebCore::Editor::indent):
        (WebCore::Editor::outdent):
        (WebCore::dispatchEditableContentChangedEvents):
        * editing/Editor.h:
        * editing/EditorCommand.cpp:
        (WebCore::executeInsertFragment):
        (WebCore::executeCreateLink):
        (WebCore::executeFormatBlock):
        (WebCore::executeIndent):
        (WebCore::executeInsertOrderedList):
        (WebCore::executeInsertUnorderedList):
        (WebCore::executeOutdent):
        (WebCore::executeUnlink):
        * editing/FormatBlockCommand.h:
        (WebCore::FormatBlockCommand::create):
        * editing/IndentOutdentCommand.cpp:
        (WebCore::IndentOutdentCommand::indentRegion):
        (WebCore::IndentOutdentCommand::outdentParagraph):
        * editing/IndentOutdentCommand.h:
        (WebCore::IndentOutdentCommand::create):
        * editing/InsertIntoTextNodeCommand.cpp:
        (WebCore::InsertIntoTextNodeCommand::InsertIntoTextNodeCommand):
        * editing/InsertIntoTextNodeCommand.h:
        (WebCore::InsertIntoTextNodeCommand::create):
        * editing/InsertLineBreakCommand.h:
        (WebCore::InsertLineBreakCommand::create):
        * editing/InsertListCommand.cpp:
        (WebCore::InsertListCommand::doApply):
        * editing/InsertListCommand.h:
        (WebCore::InsertListCommand::create):
        * editing/InsertNodeBeforeCommand.cpp:
        (WebCore::InsertNodeBeforeCommand::InsertNodeBeforeCommand):
        * editing/InsertNodeBeforeCommand.h:
        (WebCore::InsertNodeBeforeCommand::create):
        * editing/InsertParagraphSeparatorCommand.cpp:
        (WebCore::InsertParagraphSeparatorCommand::doApply):
        * editing/InsertParagraphSeparatorCommand.h:
        (WebCore::InsertParagraphSeparatorCommand::create):
        * editing/InsertTextCommand.h:
        (WebCore::InsertTextCommand::create):
        * editing/JoinTextNodesCommand.cpp:
        (WebCore::JoinTextNodesCommand::JoinTextNodesCommand):
        * editing/JoinTextNodesCommand.h:
        (WebCore::JoinTextNodesCommand::create):
        * editing/MergeIdenticalElementsCommand.cpp:
        (WebCore::MergeIdenticalElementsCommand::MergeIdenticalElementsCommand):
        * editing/MergeIdenticalElementsCommand.h:
        (WebCore::MergeIdenticalElementsCommand::create):
        * editing/ModifySelectionListLevel.cpp:
        (WebCore::IncreaseSelectionListLevelCommand::increaseSelectionListLevelWithType):
        * editing/MoveSelectionCommand.cpp:
        (WebCore::MoveSelectionCommand::doApply):
        * editing/MoveSelectionCommand.h:
        (WebCore::MoveSelectionCommand::create):
        * editing/RemoveCSSPropertyCommand.cpp:
        (WebCore::RemoveCSSPropertyCommand::RemoveCSSPropertyCommand):
        * editing/RemoveCSSPropertyCommand.h:
        (WebCore::RemoveCSSPropertyCommand::create):
        * editing/RemoveFormatCommand.h:
        (WebCore::RemoveFormatCommand::create):
        * editing/RemoveNodeAttributeCommand.cpp:
        (WebCore::RemoveNodeAttributeCommand::RemoveNodeAttributeCommand):
        * editing/RemoveNodeAttributeCommand.h:
        (WebCore::RemoveNodeAttributeCommand::create):
        * editing/RemoveNodeCommand.cpp:
        (WebCore::RemoveNodeCommand::RemoveNodeCommand):
        * editing/RemoveNodeCommand.h:
        (WebCore::RemoveNodeCommand::create):
        * editing/RemoveNodePreservingChildrenCommand.cpp:
        (WebCore::RemoveNodePreservingChildrenCommand::RemoveNodePreservingChildrenCommand):
        (WebCore::RemoveNodePreservingChildrenCommand::doApply):
        * editing/RemoveNodePreservingChildrenCommand.h:
        (WebCore::RemoveNodePreservingChildrenCommand::create):
        * editing/ReplaceSelectionCommand.cpp:
        (WebCore::ReplacementFragment::hasInterchangeNewlineAtStart):
        (WebCore::ReplacementFragment::hasInterchangeNewlineAtEnd):
        (WebCore::ReplacementFragment::ReplacementFragment):
        * editing/ReplaceSelectionCommand.h:
        (WebCore::ReplaceSelectionCommand::create):
        * editing/SetNodeAttributeCommand.cpp:
        (WebCore::SetNodeAttributeCommand::SetNodeAttributeCommand):
        * editing/SetNodeAttributeCommand.h:
        (WebCore::SetNodeAttributeCommand::create):
        * editing/SplitElementCommand.cpp:
        (WebCore::SplitElementCommand::SplitElementCommand):
        * editing/SplitElementCommand.h:
        (WebCore::SplitElementCommand::create):
        * editing/SplitTextNodeCommand.cpp:
        (WebCore::SplitTextNodeCommand::SplitTextNodeCommand):
        * editing/SplitTextNodeCommand.h:
        (WebCore::SplitTextNodeCommand::create):
        * editing/SplitTextNodeContainingElementCommand.cpp:
        (WebCore::SplitTextNodeContainingElementCommand::SplitTextNodeContainingElementCommand):
        * editing/SplitTextNodeContainingElementCommand.h:
        (WebCore::SplitTextNodeContainingElementCommand::create):
        * editing/TypingCommand.cpp:
        (WebCore::TypingCommand::deleteSelection):
        (WebCore::TypingCommand::deleteKeyPressed):
        (WebCore::TypingCommand::forwardDeleteKeyPressed):
        (WebCore::TypingCommand::insertText):
        (WebCore::TypingCommand::insertLineBreak):
        (WebCore::TypingCommand::insertParagraphSeparatorInQuotedContent):
        (WebCore::TypingCommand::insertParagraphSeparator):
        (WebCore::TypingCommand::insertTextRunWithoutNewlines):
        * editing/TypingCommand.h:
        (WebCore::TypingCommand::create):
        (WebCore::TypingCommand::smartDelete):
        * editing/UnlinkCommand.h:
        (WebCore::UnlinkCommand::create):
        * editing/WrapContentsInDummySpanCommand.cpp:
        (WebCore::WrapContentsInDummySpanCommand::WrapContentsInDummySpanCommand):
        * editing/WrapContentsInDummySpanCommand.h:
        (WebCore::WrapContentsInDummySpanCommand::create):
        * html/HTMLTableElement.cpp:
        (WebCore::HTMLTableElement::additionalAttributeStyleDecls):
        (WebCore::HTMLTableElement::addSharedCellBordersDecl):
        (WebCore::HTMLTableElement::addSharedCellPaddingDecl):
        (WebCore::HTMLTableElement::addSharedGroupDecls):
        * html/HTMLTokenizer.cpp:
        (WebCore::Token::addAttribute):
        * html/HTMLViewSourceDocument.cpp:
        (WebCore::HTMLViewSourceDocument::createContainingTable):
        (WebCore::HTMLViewSourceDocument::addSpanWithClassName):
        (WebCore::HTMLViewSourceDocument::addLine):
        (WebCore::HTMLViewSourceDocument::addLink):
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::didOpenURL):
        * loader/appcache/DOMApplicationCache.cpp:
        (WebCore::DOMApplicationCache::callListener):
        * page/ContextMenuController.cpp:
        (WebCore::ContextMenuController::contextMenuItemSelected):
        * page/DOMWindow.cpp:
        (WebCore::PostMessageTimer::PostMessageTimer):
        (WebCore::PostMessageTimer::fired):
        (WebCore::DOMWindow::postMessage):
        * page/DragController.cpp:
        (WebCore::DragController::concludeDrag):
        * page/EventHandler.cpp:
        (WebCore::EventHandler::dispatchDragEvent):
        (WebCore::EventHandler::keyEvent):
        (WebCore::EventHandler::handleTextInputEvent):
        * page/Frame.cpp:
        (WebCore::Frame::computeAndSetTypingStyle):
        (WebCore::Frame::shouldClose):
        * page/FrameView.cpp:
        (WebCore::FrameView::updateOverflowStatus):
        * page/mac/EventHandlerMac.mm:
        (WebCore::EventHandler::currentKeyboardEvent):
        * page/mac/FrameMac.mm:
        * platform/DeprecatedValueListImpl.cpp:
        (WebCore::DeprecatedValueListImpl::Private::Private):
        (WebCore::DeprecatedValueListImpl::DeprecatedValueListImpl):
        (WebCore::DeprecatedValueListImpl::copyOnWrite):
        * platform/graphics/FontSelector.h:
        * platform/graphics/GlyphPageTreeNode.cpp:
        (WebCore::GlyphPageTreeNode::initializePage):
        * platform/graphics/GlyphPageTreeNode.h:
        (WebCore::GlyphPage::create):
        (WebCore::GlyphPage::GlyphPage):
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::scrollToOffset):
        (WebCore::RenderLayer::updateOverflowStatus):
        (WebCore::RenderLayer::updateReflectionStyle):
        * rendering/style/RenderStyle.h:
        (WebCore::TransformOperation::~TransformOperation):
        (WebCore::ScaleTransformOperation::create):
        (WebCore::ScaleTransformOperation::ScaleTransformOperation):
        (WebCore::RotateTransformOperation::create):
        (WebCore::RotateTransformOperation::RotateTransformOperation):
        (WebCore::SkewTransformOperation::create):
        (WebCore::SkewTransformOperation::operator==):
        (WebCore::SkewTransformOperation::SkewTransformOperation):
        (WebCore::TranslateTransformOperation::create):
        (WebCore::TranslateTransformOperation::operator==):
        (WebCore::TranslateTransformOperation::TranslateTransformOperation):
        (WebCore::MatrixTransformOperation::create):
        (WebCore::MatrixTransformOperation::MatrixTransformOperation):
        (WebCore::StyleReflection::create):
        (WebCore::StyleReflection::StyleReflection):
        * storage/StorageEvent.cpp:
        (WebCore::StorageEvent::StorageEvent):
        (WebCore::StorageEvent::initStorageEvent):
        * storage/StorageEvent.h:
        (WebCore::StorageEvent::create):
        (WebCore::StorageEvent::StorageEvent):
        * svg/SVGAngle.cpp:
        (WebCore::SVGAngle::SVGAngle):
        * svg/SVGAngle.h:
        (WebCore::SVGAngle::create):
        * svg/SVGAnimatedTemplate.h:
        (WebCore::SVGAnimatedTemplate::SVGAnimatedTemplate):
        (WebCore::lookupOrCreateWrapper):
        * svg/SVGElement.cpp:
        (WebCore::SVGElement::sendSVGLoadEventIfPossible):
        * svg/SVGElement.h:
        * svg/SVGMarkerElement.cpp:
        (WebCore::SVGMarkerElement::SVGMarkerElement):
        (WebCore::SVGMarkerElement::parseMappedAttribute):
        (WebCore::SVGMarkerElement::setOrientToAngle):
        * svg/SVGMarkerElement.h:
        * svg/SVGSVGElement.cpp:
        (WebCore::SVGSVGElement::createSVGAngle):
        * svg/SVGSVGElement.h:
        * svg/SVGZoomEvent.h:
        (WebCore::SVGZoomEvent::create):
        * svg/graphics/SVGImage.cpp:
        * xml/XMLHttpRequest.cpp:
        (WebCore::XMLHttpRequest::callReadyStateChangeListener):
        (WebCore::XMLHttpRequest::dispatchProgressEvent):
        * xml/XMLHttpRequestProgressEvent.cpp:
        * xml/XMLHttpRequestProgressEvent.h:
        (WebCore::XMLHttpRequestProgressEvent::create):
        (WebCore::XMLHttpRequestProgressEvent::position):
        (WebCore::XMLHttpRequestProgressEvent::totalSize):
        (WebCore::XMLHttpRequestProgressEvent::XMLHttpRequestProgressEvent):

2008-06-13  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

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

        Prevent external entities from loading across origins.

        Test: http/tests/security/xss-DENIED-xsl-external-entity.xml

        * dom/XMLTokenizer.cpp:
        (WebCore::shouldAllowExternalLoad):
        (WebCore::openFunc):

2008-06-13  Adam Barth  <abarth@webkit.org>

        Reviewed by Darin Adler.

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

        Allow loads of same-origin documents only.

        Test: http/tests/security/xss-DENIED-xsl-document.xml

        * xml/XSLTProcessor.cpp:
        (WebCore::docLoaderFunc):

2008-06-13  Adam Barth  <abarth@webkit.org>

        Reviewed by Darin Adler.

        Fixes <https://bugs.webkit.org/show_bug.cgi?id=15100>:
          XMLHttpRequest::urlMatchesDocumentDomain raises error if port
          information does not match exactly

        Refactor our security check for XMLHttpRequest into SecurityOrigin so
        we can reuse it in other places.  This leverages our default port
        technology in SecurityOrigin.

        I wasn't sure how to write a test for this because the LayoutTests run
        on non-default ports.

        * platform/SecurityOrigin.cpp:
        (WebCore::SecurityOrigin::canRequest):
        * platform/SecurityOrigin.h:
        * xml/XMLHttpRequest.cpp:
        (WebCore::XMLHttpRequest::send):
        (WebCore::XMLHttpRequest::willSendRequest):
        * xml/XMLHttpRequest.h:

2008-06-13  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        Removed unnecessary dependencies.

        * platform/SecurityOrigin.cpp:
        * platform/SecurityOrigin.h:

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

        Reviewed by John Sullivan.

        - added FormState argument to action policy functions

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::checkNewWindowPolicy):
        (WebCore::FrameLoader::checkNavigationPolicy):
        * loader/FrameLoaderClient.h:
        * svg/graphics/SVGImageEmptyClients.h:
        (WebCore::SVGEmptyFrameLoaderClient::dispatchDecidePolicyForNewWindowAction):
        (WebCore::SVGEmptyFrameLoaderClient::dispatchDecidePolicyForNavigationAction):

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

        Reviewed by Jess.

        <rdar://problem/5702248> Crash on Copy Image from the contextual menu on a broken image in Mail

        * platform/mac/PasteboardMac.mm:
        (WebCore::Pasteboard::writeImage): Check to see the image loaded successfully
        before trying to put data for it on the Pasteboard.  Mail shouldn't really
        include the Copy Image menu item, but if it does and the user selects it,
        we shouldn't crash.

2008-06-11  Marc Ordinas i Llopis  <marc.ordinasillopis@collabora.co.uk>
        With help from Siraj Razick  <siraj.razick@collabora.co.uk>

        Reviewed by Simon.

        https://bugs.webkit.org/show_bug.cgi?id=19367
        [Qt] Plugins are drawn over the scrollbars

        * plugins/qt/PluginViewQt.cpp:
        (WebCore::PluginView::updateWindow): Call setMask on the
        QX11EmbedContainer to set the plugin clipping.

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

        - try to fix no-SVG build

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::CSSComputedStyleDeclaration::getPropertyCSSValue): Added a case for
        CSSPropertyWebkitMask.

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

        - try to fix Windows build

        * dom/Element.idl: Turn off ElementTraversal functions when generating COM.
        Not sure why they're failing, but turning them off for now seems OK.

2008-06-12  Adam Barth  <abarth@webkit.org>

        Rubberstamped by Maciej.

        Roll 34504 back in.

        Test: http/tests/xmlhttprequest/access-control-basic-allow-access-control-origin-header-data-url.html

        * platform/SecurityOrigin.cpp:
        (WebCore::SecurityOrigin::toString):

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

        Reviewed by Dave Hyatt.

        - fix <rdar://problem/5876370> Safari 3.1.1 bad rendering of pages from http://www.legifrance.gouv.fr/

        Tests: fast/parser/p-in-scope-strict.html
               fast/parser/p-in-scope.html

        * html/HTMLParagraphElement.h:
        (WebCore::HTMLParagraphElement::endTagRequirement): Changed to require
        an end tag. The explicit closing of one P element by another is now
        done in error checking, and therefore takes scope into account, allowing
        for <p><button><p>, for example.

        * html/HTMLParser.cpp:
        (WebCore::HTMLParser::HTMLParser): Initialize m_hasPElementInScope.
        (WebCore::isScopingTag): Added. Returns whether the given tag represents
        a scoping element as defined in HTML 5 section 8.2.3.2.
        (WebCore::HTMLParser::formCreateErrorCheck): Added a call to
        pCloserCreateErrorCheck().
        (WebCore::HTMLParser::ddCreateErrorCheck): Ditto.
        (WebCore::HTMLParser::dtCreateErrorCheck): Ditto.
        (WebCore::HTMLParser::nestedPCloserCreateErrorCheck): Added for use with
        <li>, which both closes P elements in scope and any previous LI.
        (WebCore::HTMLParser::pCloserCreateErrorCheck): Added. If there is a P
        element in scope, acts as if a </p> tag was seen.
        (WebCore::HTMLParser::pCloserStrictCreateErrorCheck): Ditto, but only
        in strict mode. Used for <table>.
        (WebCore::HTMLParser::getNode): Added entries for tags that close a P
        element in scope.
        (WebCore::HTMLParser::handleResidualStyleCloseTagAcrossBlocks): Added
        code to reset m_hasPElementInScope.
        (WebCore::HTMLParser::pushBlock): Added code to update
        m_hasPElementInScope.
        (WebCore::HTMLParser::popOneBlockCommon): Ditto.
        (WebCore::HTMLParser::checkIfHasPElementInScope): Added. Updates
        m_hasPElementInScope.

        * html/HTMLParser.h:
        (WebCore::HTMLParser::hasPElementInScope): Added. Calls
        checkIfHasPElementInScope() if needed and returns whether there
        is a P element in scope.

2008-06-11  Adam Barth  <abarth@webkit.org>

        Reviewed by Sam Weinig.

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

        Update the security context of a document after calling document.open
        or document.write.  Basically, when a script open()s a document, the
        document gains the security context of the script.  Our implementation
        now matches Firefox 3 on all these tests.

        Tests: http/tests/security/aboutBlank/security-context-alias.html
               http/tests/security/aboutBlank/security-context-grandchildren-alias.html
               http/tests/security/aboutBlank/security-context-grandchildren.html
               http/tests/security/aboutBlank/security-context-window-open.html
               http/tests/security/aboutBlank/security-context-with-base-tag.html
               http/tests/security/aboutBlank/security-context-write.html
               http/tests/security/aboutBlank/security-context-writeln.html
               http/tests/security/aboutBlank/security-context.html
               http/tests/security/cookies/document-open.html

        * bindings/js/JSDOMWindowBase.cpp:
        (WebCore::createWindow):
        * bindings/js/JSHTMLDocumentCustom.cpp:
        (WebCore::JSHTMLDocument::open):
        (WebCore::JSHTMLDocument::write):
        (WebCore::JSHTMLDocument::writeln):
        * dom/Document.cpp:
        (WebCore::Document::open):
        (WebCore::Document::write):
        (WebCore::Document::writeln):
        * dom/Document.h:

2008-06-11  Adam Barth  <abarth@webkit.org>

        Reviewed by Sam Weinig.

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

        Compute the cookie context at the same time as the SecurityOrigin.

        Tests: http/tests/security/cookies/create-document.html
               http/tests/security/cookies/xmlhttprequest.html

        * dom/Document.cpp:
        (WebCore::Document::cookie):
        (WebCore::Document::initSecurityOrigin):
        * dom/Document.h:
        * platform/SecurityOrigin.cpp:
        * platform/SecurityOrigin.h:

2008-06-11  Adam Barth  <abarth@webkit.org>

        Reviewed and tweaked by Sam Weinig.

        Fix for https://bugs.webkit.org/show_bug.cgi?id=19242
        Data URLs should set an Access-Control-Origin of "null"

        Correctly generate "null" as the value of the Access-Control-Origin
        header for cross-site XMLHttpRequests for data URLs.

        Test: http/tests/xmlhttprequest/access-control-basic-allow-access-control-origin-header-data-url.html

        * platform/SecurityOrigin.cpp:
        (WebCore::SecurityOrigin::toString):
        * xml/XMLHttpRequest.cpp:
        (WebCore::XMLHttpRequest::accessControlOrigin):
        (WebCore::XMLHttpRequest::crossSiteAccessRequest):
        (WebCore::XMLHttpRequest::handleAsynchronousMethodCheckResult):
        * xml/XMLHttpRequest.h:

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

        Reviewed by Adam Roben.

        Add support for "*" wildcarding for Access-Control.

        Test: http/tests/xmlhttprequest/access-control-basic-allow-star.html

        * xml/AccessItem.cpp:
        (WebCore::AccessItem::AccessItem):
        (WebCore::AccessItem::parseAccessItem):
        (WebCore::AccessItem::matches):

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

        Reviewed by Eric.

        <https://bugs.webkit.org/show_bug.cgi?id=19455>
        Crash at RenderObject::childAt during JustifyCenter

        * editing/ApplyStyleCommand.cpp:
        (WebCore::ApplyStyleCommand::surroundNodeRangeWithElement): Added a FIXME.
        * editing/CompositeEditCommand.cpp:
        (WebCore::CompositeEditCommand::moveParagraphs): If we're removing a line
        break that consists of a single '\n' in a text node by itself, remove
        the whole text node instead of just emptying it out.
        * editing/Selection.cpp:
        (WebCore::Selection::validate): Added a FIXME about canonicalizing
        to positions that aren't candidates.
        * editing/SelectionController.cpp:
        (WebCore::SelectionController::nodeWillBeRemoved): When the base and/or
        extent are about to be removed but the start and end aren't, change the 
        base and extent to the start and end, but don't re-validate the selection, 
        since doing so could move the start and end into the node that is about 
        to be removed.

2008-06-11  Gregory Hughes  <ghughes@apple.com>

        Reviewed by David Harrison.

        <rdar://problem/5990049> AXTextMarker bytes getting messed up when getting AXTextMarkerRangeForUnorderedTextMarkersParameterizedAttribute

        * page/mac/AccessibilityObjectWrapper.mm:
        (textMarkerForVisiblePosition):

2008-06-11  Adriaan de Groot  <groot@kde.org>

        Reviewed by Simon.

        Fix compilation with Sun Studio 12

        It seems like the compiler instantiates a different template version. I.e.,
        instead of parseUASheet<char [nnnn]>, it's probably instantiating
        parseUASheet<char *>, which then passes 4 or 8 as the size value.

        * css/CSSStyleSelector.cpp:
        (WebCore::loadDefaultStyle):
        (WebCore::CSSStyleSelector::styleForElement):

2008-06-11  Benjamin Meyer  <bmeyer@trolltech.com>

        Reviewed by Simon.

        Fixed a crash when a slot connect to QWebPage::unsupportedContent would show a
        modal dialog with an event loop.

        We have a queued connection to various signals in the QNetworkReply, for which
        it can happen that after releasing the QNetworkReply and disconnecting from it
        a slot connected to one of the signals may still be called due to a posted
        MetaCall event due to the queued connections. This patch removes the posted
        events explicitly, fixes the coding style a bit and makes sure the same happens
        when abort() is called.

        * platform/network/qt/QNetworkReplyHandler.cpp:
        (WebCore::QNetworkReplyHandler::abort):
        (WebCore::QNetworkReplyHandler::release):
        * platform/network/qt/QNetworkReplyHandler.h:

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

        wx build fix. Reorder include dirs so that WebCore/html/HTMLElementFactory.h
        appears before WebCore/DerivedSources/HTMLElementFactory.h. (See note in commit
        for more details. This is probably not the right fix, but this will get us building
        until the right fix is in place.)

        * webcore-base.bkl:

2008-06-10  Eric Seidel  <eric@webkit.org>

        Reviewed by mjs.

        Fix disconnected event listener crasher
        m_disconnectedNodesWithEventListeners not updated when nodes adopted
        https://bugs.webkit.org/show_bug.cgi?id=19451

        I failed to find a way to make this crash DRT, I can crash Debug Safari consistently.

        * dom/EventTarget.cpp:
        (WebCore::EventTarget::willMoveToNewOwnerDocument):
        (WebCore::EventTarget::didMoveToNewOwnerDocument):
        * dom/EventTarget.h:
        * dom/EventTargetNode.cpp:
        (WebCore::EventTargetNode::willMoveToNewOwnerDocument):
        (WebCore::EventTargetNode::didMoveToNewOwnerDocument):
        * dom/EventTargetNode.h:

2008-06-10  Julien Chaffraix  <jchaffraix@webkit.org>

        Reviewed by Eric.

        Part of bug 19200: *.in files should embed more information
        https://bugs.webkit.org/show_bug.cgi?id=19200

        Move more parameters to the XML files.

        * dom/make_names.pl:
        * html/HTMLAttributeNames.in:
        * html/HTMLTagNames.in:
        * svg/svgattrs.in:
        * svg/svgtags.in:

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

        Reviewed by Justin Garcia.

        - fix https://bugs.webkit.org/show_bug.cgi?id=19443
          <rdar://problem/5994544> REGRESSION (r32531-r32652): Moving the insertion point past a newline inserted in a text area skips the next character

        Tests added to editing/selection/move-left-right.html

        * editing/VisiblePosition.cpp:
        (WebCore::VisiblePosition::leftVisuallyDistinctCandidate): When falling
        back from visual to logical movement, restart at the original position
        rather than an intermediate position.
        (WebCore::VisiblePosition::rightVisuallyDistinctCandidate): Ditto.

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

        Reviewed by Maciej.

        Windows build fix.

        * platform/graphics/win/QTMovieWin.cpp:
        (initializeSupportedTypes):

2008-06-07  Julien Chaffraix  <jchaffraix@webkit.org>

        Reviewed by Darin Adler.

        Part of bug 19200: *.in files should embed more information
        https://bugs.webkit.org/show_bug.cgi?id=19200

        - Added a parameters hash that will hold the parameters we used to give in the
        command line.

        - Added "tags" / "attrs" XML tag parsing to fill the parameters hash.

        - Moved namespace, namespaceURI, namespacePrefix and cppNamespace in the *.in
        files.

        * dom/make_names.pl:
        * html/HTMLAttributeNames.in:
        * html/HTMLTagNames.in:
        * svg/svgattrs.in:
        * svg/svgtags.in:
        * svg/xlinkattrs.in:
        * xml/xmlattrs.in:

2008-06-09  Tor Arne Vestbø  <tavestbo@trolltech.com>

        Reviewed by Simon

        Use the text color from QStyle when styling form elements.

        * platform/qt/RenderThemeQt.cpp:
        (WebCore::RenderThemeQt::adjustButtonStyle):
        (WebCore::RenderThemeQt::adjustTextFieldStyle):
        (WebCore::RenderThemeQt::adjustMenuListStyle):
        (WebCore::RenderThemeQt::adjustMenuListButtonStyle):

2008-06-09  Tor Arne Vestbø  <tavestbo@trolltech.com>

        Reviewed by Darin.

        Incorporated Darin's comments to bug 18965.

        * rendering/RenderTheme.cpp:

2008-06-08  Adam Barth  <abarth@webkit.org>

        Reviewed by Darin Adler.

        Inherit document.URL from parent's document.URL, not document.baseURI.

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

        Tests: http/tests/security/cookies/assign-document-url.html
               http/tests/security/cookies/base-about-blank.html
               http/tests/security/cookies/base-tag.html
               http/tests/security/cookies/basic.html

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

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

        Reviewed by Darin Adler.

        Fix font asserts in wx port. Our computeHash function should generate the same hash
        for two identical fonts which are different objects, which it wasn't doing before.
        
        https://bugs.webkit.org/show_bug.cgi?id=19310

        * platform/graphics/wx/FontPlatformData.h:
        (WebCore::FontPlatformData::computeHash):

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

        Reviewed by Darin Adler.

        - fix <rdar://problem/5961977> Crash in RenderBlock::layoutColumns()

        Test: fast/multicol/content-height-zero-crash.html

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::layoutColumns): Changed to not keep creating
        overflow columns that have zero height, because they do not help with
        fitting content in.

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

        Fix Bug 18837: Database panel fails to display tables if any value is
        NULL

        <https://bugs.webkit.org/show_bug.cgi?id=18837>

        Reviewed by Darin Adler.

        Test: manual-tests/inspector/display-sql-null.html

        * manual-tests/inspector/display-sql-null.html: Added.
        * page/inspector/DatabasesPanel.js:
        (WebInspector.DatabasesPanel.prototype.dataGridForResult): Convert all
        objects to strings before operating on them.

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

        Fix Bug 19438: Transaction errors are never displayed in database
        query view

        <https://bugs.webkit.org/show_bug.cgi?id=19438>

        Reviewed by Darin Adler.

        Test: manual-tests/inspector/display-sql-transaction-error.html

        * manual-tests/inspector/display-sql-transaction-error.html: Added.
        * page/inspector/DatabaseQueryView.js:
        (WebInspector.DatabaseQueryView.prototype._enterKeyPressed): Use
        _executeSqlError as the error callback for executeSql.
        (WebInspector.DatabaseQueryView.prototype._queryError): Changed to
        only take two parameters. This matches what we'll be passed if
        db.transaction fails.
        (WebInspector.DatabaseQueryView.prototype._executeSqlError): Added.
        Calls through to _queryError.

2008-06-08  Dirk Schulze  <vbs85@gmx.de>

        Reviewed by Eric Seidel.

        https://bugs.webkit.org/show_bug.cgi?id=18840
        [CAIRO] Clipping-support for SVG

        Support for clipping in SVG/Cairo and fixes transformation of paths.

        * platform/graphics/cairo/PathCairo.cpp:
        (WebCore::Path::transform):
        * svg/graphics/cairo/SVGResourceClipperCairo.cpp:
        (WebCore::SVGResourceClipper::applyClip):

2008-06-08  Dirk Schulze  <vbs85@gmx.de>

        Reviewed by Eric Seidel.

        https://bugs.webkit.org/show_bug.cgi?id=18663
        Add text-stroke support to Cairo.

        * platform/graphics/cairo/FontCairo.cpp:
        (WebCore::Font::drawGlyphs):

2008-06-08  Vincent Ricard  <magic@magicninja.org>

        Reviewed by Darin.

        https://bugs.webkit.org/show_bug.cgi?id=16489
        WebKit does not support ElementTraversal specification

        Tests: fast/dom/Element/element-traversal.html

        * dom/Element.cpp:
        (WebCore::Element::firstElementChild):
        (WebCore::Element::lastElementChild):
        (WebCore::Element::previousElementSibling):
        (WebCore::Element::nextElementSibling):
        (WebCore::Element::childElementCount):
        * dom/Element.h:
        * dom/Element.idl:

2008-06-08  Bradley Meck  <genisis329@gmail.com>

        Reviewed by Darin.

        - fix https://bugs.webkit.org/show_bug.cgi?id=17051
          safari should treat "url()" as a valid CSS value

        Test: fast/css/invalid-cursor-property-crash.html

        Changed check for empty url() to be a check for null since url() is valid
        CSS even if it is empty.

        * css/CSSParser.cpp:
        (WebCore::CSSParser::parseValue):
        (WebCore::CSSParser::parseFillImage):
        (WebCore::CSSParser::parseBorderImage):

2008-06-08  Vincent Ricard  <magic@magicninja.org>

        Reviewed by Darin.

        Bug 18041: DOMNodeRemoved events are sent twice

        Test: fast/dom/Node/DOMNodeRemovedEvent.html

        * dom/ContainerNode.cpp:
        (WebCore::ContainerNode::removeChild):

2008-06-08  Tony Chang  <idealisms@gmail.com>

        Reviewed by Eric Seidel.

        - fix https://bugs.webkit.org/show_bug.cgi?id=18167
          there should be no text-drag delay on any platform except for Mac

        Move the drag text delay value into the platform specific files.

        Test: editing/selection/drag-text-delay.html

        * page/EventHandler.cpp:
        * page/EventHandler.h:
        * page/gtk/EventHandlerGtk.cpp:
        * page/mac/EventHandlerMac.mm:
        * page/qt/EventHandlerQt.cpp:
        * page/win/EventHandlerWin.cpp:
        * page/wx/EventHandlerWx.cpp:

2008-06-08  Rob Buis  <buis@kde.org>

        Reviewed by Darin.

        - fix https://bugs.webkit.org/show_bug.cgi?id=18512
          getPresentationAttribute returns a shared object

        Test: svg/custom/getPresentationAttribute-modify.svg

        * svg/SVGStyledElement.cpp:
        (WebCore::SVGStyledElement::getPresentationAttribute): Unshare the mapped style
        declaration if it is shared before returning the presentation attribute.

2008-06-08  Alp Toker  <alp@nuanti.com>

        autotools/GTK+ build system cleanup. Don't include WebKit API in the
        WebCore build as it's no longer needed since r34426.

        * GNUmakefile.am:

2008-06-08  Jonathan Haas <myrdred@gmail.com>

        Reviewed by Eric Seidel.
        Tweaked by Darin while landing to make it compile.

        - fix http://bugs.webkit.org/show_bug.cgi?id=19128
          SVG fonts don't work with medial Arabic characters

        Haven't figured out a way to make an automated test for this.

        * svg/SVGGlyphElement.h: Made arabicForm unsigned so it fits into
        its 3-bit field. Did the same for orientation's 2-bit field.

        * svg/SVGFont.cpp: Did a bit of minor tweaking.
        (WebCore::isCompatibleArabicForm): Added a cast to avoid a warning
        since the type is now different.

2008-06-08  Eric Carlson  <eric.carlson@apple.com>

        Reviewed by Antti.

        - fix https://bugs.webkit.org/show_bug.cgi?id=19299
          <rdar://problem/5969392>

        Generate the media MIME type list dynamically.

        * platform/graphics/win/QTMovieWin.cpp:
        (initializeSupportedTypes):

2008-06-08  Christian Persch  <chpe@gnome.org>

        Reviewed by Darin.

        - https://bugs.webkit.org/show_bug.cgi?id=19309
          uninitialised variable in PluginView

        * plugins/PluginView.cpp:
        (WebCore::PluginView::PluginView): Initialise the NPP's pdata member to 0.

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

        Reviewed by Mitz.

        - https://bugs.webkit.org/show_bug.cgi?id=19435
          fix warning in PluginDebug.h

        * plugins/PluginDebug.h: Don't compile the errorStrings array if LOG_DISABLED is set.

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

        Reviewed by Dave Hyatt.

        - fix https://bugs.webkit.org/show_bug.cgi?id=19431
          <rdar://problem/5994060> REGRESSION (r32406): tabs retain hover color after mouse out

        Covered by fast/css/remove-shorthand.html

        * css/CSSMutableStyleDeclaration.cpp:
        (WebCore::initShorthandMap): Fixed a typo which mapped the background
        shorthand to the mask properties.

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

        Cairo build fix for r34432

        * html/CanvasPattern.cpp:
        (WebCore::CanvasPattern::CanvasPattern):

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

        Reviewed by Mitz.

        - work on https://bugs.webkit.org/show_bug.cgi?id=17257
          start ref counts at 1 instead of 0 for speed

        * bindings/js/JSCanvasRenderingContext2DCustom.cpp:
        (WebCore::toHTMLCanvasStyle):
        * bindings/js/JSDOMWindowBase.cpp:
        (WebCore::JSDOMWindowBase::findOrCreateJSEventListener):
        (WebCore::JSDOMWindowBase::findOrCreateJSUnprotectedEventListener):
        * bindings/js/JSNodeFilterCondition.h:
        (WebCore::JSNodeFilterCondition::create):
        * bindings/js/JSNodeFilterCustom.cpp:
        (WebCore::toNodeFilter):
        * bindings/js/JSSVGLazyEventListener.h:
        (WebCore::JSSVGLazyEventListener::create):
        * bindings/js/JSSVGMatrixCustom.cpp:
        (WebCore::JSSVGMatrix::multiply):
        (WebCore::JSSVGMatrix::inverse):
        (WebCore::JSSVGMatrix::translate):
        (WebCore::JSSVGMatrix::scale):
        (WebCore::JSSVGMatrix::scaleNonUniform):
        (WebCore::JSSVGMatrix::rotate):
        (WebCore::JSSVGMatrix::rotateFromVector):
        (WebCore::JSSVGMatrix::flipX):
        (WebCore::JSSVGMatrix::flipY):
        (WebCore::JSSVGMatrix::skewX):
        (WebCore::JSSVGMatrix::skewY):
        * bindings/js/JSSVGPODTypeWrapper.h:
        (WebCore::JSSVGPODTypeWrapperCreatorReadWrite::create):
        (WebCore::JSSVGPODTypeWrapperCreatorReadWrite::JSSVGPODTypeWrapperCreatorReadWrite):
        (WebCore::JSSVGPODTypeWrapperCreatorReadOnly::create):
        (WebCore::JSSVGPODTypeWrapperCreatorReadOnly::JSSVGPODTypeWrapperCreatorReadOnly):
        (WebCore::JSSVGPODTypeWrapperCreatorForList::create):
        (WebCore::JSSVGPODTypeWrapperCreatorForList::JSSVGPODTypeWrapperCreatorForList):
        (WebCore::JSSVGPODTypeWrapperCache::lookupOrCreateWrapper):
        (WebCore::JSSVGPODTypeWrapperCache::forgetWrapper):
        * bindings/js/JSSVGPointListCustom.cpp:
        (WebCore::commonExit):
        (WebCore::commonExitReadOnly):
        (WebCore::JSSVGPointList::initialize):
        (WebCore::JSSVGPointList::getItem):
        (WebCore::JSSVGPointList::insertItemBefore):
        (WebCore::JSSVGPointList::replaceItem):
        (WebCore::JSSVGPointList::removeItem):
        (WebCore::JSSVGPointList::appendItem):
        * bindings/js/JSSVGTransformListCustom.cpp:
        (WebCore::JSSVGTransformList::initialize):
        (WebCore::JSSVGTransformList::getItem):
        (WebCore::JSSVGTransformList::insertItemBefore):
        (WebCore::JSSVGTransformList::replaceItem):
        (WebCore::JSSVGTransformList::removeItem):
        (WebCore::JSSVGTransformList::appendItem):
        * bindings/js/kjs_binding.cpp:
        (WebCore::setDOMException):
        * bindings/js/kjs_events.h:
        (WebCore::JSUnprotectedEventListener::create):
        (WebCore::JSEventListener::create):
        (WebCore::JSLazyEventListener::create):
        * bindings/js/kjs_proxy.cpp:
        (WebCore::KJSProxy::createHTMLEventHandler):
        (WebCore::KJSProxy::createSVGEventHandler):
        * bindings/objc/DOM.mm:
        (WebCore::ObjCNodeFilterCondition::create):
        (WebCore::ObjCNodeFilterCondition::ObjCNodeFilterCondition):
        (WebCore::ObjCNodeFilterCondition::acceptNode):
        (-[DOMDocument createNodeIterator:whatToShow:filter:expandEntityReferences:]):
        (-[DOMDocument createTreeWalker:whatToShow:filter:expandEntityReferences:]):
        * bindings/scripts/CodeGeneratorJS.pm:
        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::valueForNinePieceImage):
        (WebCore::CSSComputedStyleDeclaration::getPropertyCSSValue):
        * css/CSSFontFace.h:
        (WebCore::CSSFontFace::create):
        (WebCore::CSSFontFace::CSSFontFace):
        * css/CSSFontSelector.cpp:
        (WebCore::CSSFontSelector::addFontFaceRule):
        * css/CSSParser.cpp:
        (WebCore::CSSParser::parseDashboardRegions):
        (WebCore::CSSParser::parseCounterContent):
        (WebCore::CSSParser::parseShape):
        (WebCore::BorderImageParseContext::commitBorderImage):
        * css/CSSSegmentedFontFace.cpp:
        (WebCore::CSSSegmentedFontFace::CSSSegmentedFontFace):
        * css/CSSSegmentedFontFace.h:
        (WebCore::CSSSegmentedFontFace::create):
        * css/Counter.h:
        (WebCore::Counter::create):
        (WebCore::Counter::Counter):
        * css/DashboardRegion.h:
        (WebCore::DashboardRegion::create):
        (WebCore::DashboardRegion::DashboardRegion):
        * css/Rect.h:
        (WebCore::Rect::create):
        (WebCore::Rect::Rect):
        * dom/ChildNodeList.h:
        (WebCore::ChildNodeList::create):
        * dom/ClassNodeList.h:
        (WebCore::ClassNodeList::create):
        * dom/Clipboard.h:
        * dom/DOMCoreException.h:
        (WebCore::DOMCoreException::create):
        * dom/DOMImplementation.cpp:
        (WebCore::DOMImplementation::instance):
        * dom/DOMImplementation.h:
        (WebCore::DOMImplementation::DOMImplementation):
        * dom/Document.cpp:
        (WebCore::Document::addWindowEventListener):
        (WebCore::Document::removeWindowEventListener):
        (WebCore::Document::setDecoder):
        (WebCore::Document::images):
        (WebCore::Document::applets):
        (WebCore::Document::embeds):
        (WebCore::Document::plugins):
        (WebCore::Document::objects):
        (WebCore::Document::scripts):
        (WebCore::Document::links):
        (WebCore::Document::forms):
        (WebCore::Document::anchors):
        (WebCore::Document::all):
        (WebCore::Document::windowNamedItems):
        (WebCore::Document::documentNamedItems):
        * dom/Document.h:
        * dom/DynamicNodeList.h:
        * dom/EventException.h:
        (WebCore::EventException::create):
        (WebCore::EventException::EventException):
        * dom/EventListener.h:
        * dom/EventTarget.cpp:
        (WebCore::EventTarget::addEventListener):
        (WebCore::EventTarget::removeEventListener):
        * dom/ExceptionBase.cpp:
        (WebCore::ExceptionBase::ExceptionBase):
        * dom/ExceptionBase.h:
        * dom/NameNodeList.h:
        (WebCore::NameNodeList::create):
        * dom/Node.cpp:
        (WebCore::Node::childNodes):
        (WebCore::Node::getElementsByTagNameNS):
        (WebCore::Node::getElementsByName):
        (WebCore::Node::getElementsByClassName):
        (WebCore::Node::querySelectorAll):
        * dom/NodeFilterCondition.h:
        * dom/NodeList.h:
        * dom/RangeException.h:
        (WebCore::RangeException::create):
        (WebCore::RangeException::RangeException):
        * dom/RegisteredEventListener.h:
        (WebCore::RegisteredEventListener::create):
        * dom/SelectorNodeList.cpp:
        (WebCore::createSelectorNodeList):
        * dom/SelectorNodeList.h:
        * dom/StaticNodeList.cpp:
        (WebCore::StaticNodeList::StaticNodeList):
        * dom/StaticNodeList.h:
        (WebCore::StaticNodeList::adopt):
        * dom/TagNodeList.h:
        (WebCore::TagNodeList::create):
        * history/HistoryItem.cpp:
        (WebCore::defaultNotifyHistoryItemChanged):
        (WebCore::HistoryItem::HistoryItem):
        (WebCore::HistoryItem::copy):
        * history/HistoryItem.h:
        (WebCore::HistoryItem::create):
        * html/CanvasGradient.h:
        * html/CanvasPattern.cpp:
        (WebCore::CanvasPattern::CanvasPattern):
        * html/CanvasPattern.h:
        (WebCore::CanvasPattern::create):
        * html/CanvasRenderingContext2D.cpp:
        (WebCore::CanvasRenderingContext2D::State::State):
        (WebCore::CanvasRenderingContext2D::setStrokeColor):
        (WebCore::CanvasRenderingContext2D::setFillColor):
        (WebCore::CanvasRenderingContext2D::createPattern):
        * html/CanvasStyle.cpp:
        (WebCore::CanvasStyle::CanvasStyle):
        * html/CanvasStyle.h:
        (WebCore::CanvasStyle::create):
        * html/HTMLCollection.cpp:
        (WebCore::HTMLCollection::HTMLCollection):
        (WebCore::HTMLCollection::create):
        * html/HTMLCollection.h:
        * html/HTMLElement.cpp:
        (WebCore::HTMLElement::children):
        * html/HTMLFormCollection.cpp:
        (WebCore::HTMLFormCollection::create):
        * html/HTMLFormCollection.h:
        * html/HTMLFormElement.cpp:
        (WebCore::HTMLFormElement::elements):
        * html/HTMLMapElement.cpp:
        (WebCore::HTMLMapElement::areas):
        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::load):
        (WebCore::HTMLMediaElement::mediaPlayerNetworkStateChanged):
        (WebCore::HTMLMediaElement::willSaveToCache):
        * html/HTMLNameCollection.h:
        (WebCore::HTMLNameCollection::create):
        * html/HTMLOptionsCollection.cpp:
        (WebCore::HTMLOptionsCollection::create):
        * html/HTMLOptionsCollection.h:
        * html/HTMLSelectElement.cpp:
        (WebCore::HTMLSelectElement::options):
        * html/HTMLTableElement.cpp:
        (WebCore::HTMLTableElement::rows):
        (WebCore::HTMLTableElement::tBodies):
        * html/HTMLTableRowElement.cpp:
        (WebCore::HTMLTableRowElement::cells):
        * html/HTMLTableRowsCollection.cpp:
        (WebCore::HTMLTableRowsCollection::HTMLTableRowsCollection):
        (WebCore::HTMLTableRowsCollection::create):
        * html/HTMLTableRowsCollection.h:
        * html/HTMLTableSectionElement.cpp:
        (WebCore::HTMLTableSectionElement::rows):
        * html/MediaError.h:
        (WebCore::MediaError::create):
        (WebCore::MediaError::MediaError):
        * loader/CachedCSSStyleSheet.cpp:
        (WebCore::CachedCSSStyleSheet::CachedCSSStyleSheet):
        * loader/CachedFont.cpp:
        (WebCore::CachedFont::ensureSVGFontData):
        * loader/CachedXSLStyleSheet.cpp:
        (WebCore::CachedXSLStyleSheet::CachedXSLStyleSheet):
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::write):
        (WebCore::FrameLoader::createHistoryItem):
        * loader/ImageDocument.cpp:
        (WebCore::ImageEventListener::create):
        (WebCore::ImageEventListener::ImageEventListener):
        (WebCore::ImageDocument::createDocumentStructure):
        * loader/TextResourceDecoder.h:
        (WebCore::TextResourceDecoder::create):
        * page/Page.cpp:
        (WebCore::Page::userStyleSheet):
        * svg/SVGException.h:
        (WebCore::SVGException::create):
        (WebCore::SVGException::SVGException):
        * svg/animation/SVGSMILElement.cpp:
        (WebCore::ConditionEventListener::create):
        (WebCore::ConditionEventListener::ConditionEventListener):
        (WebCore::SVGSMILElement::connectConditions):
        * xml/XMLHttpRequest.cpp:
        (WebCore::XMLHttpRequest::didReceiveData):
        * xml/XMLHttpRequestException.h:
        (WebCore::XMLHttpRequestException::create):
        (WebCore::XMLHttpRequestException::XMLHttpRequestException):
        * xml/XPathException.h:
        (WebCore::XPathException::create):
        (WebCore::XPathException::XPathException):
        * xml/XPathResult.cpp:
        (WebCore::InvalidatingEventListener::create):
        (WebCore::InvalidatingEventListener::InvalidatingEventListener):
        (WebCore::XPathResult::XPathResult):
        * xml/XSLTProcessor.cpp:
        (WebCore::XSLTProcessor::createDocumentFromSource):

2008-06-07  Christian Dywan  <christian@twotoasts.de>

        Reviewed by Alp Toker.

        https://bugs.webkit.org/show_bug.cgi?id=17324
        Remove PLATFORM ifdefs from ContextMenu.cpp

        * platform/ContextMenu.cpp:
        (WebCore::ContextMenu::populate):

2008-06-07  Eric Seidel  <eric@webkit.org>

        Reviewed by ap.

        Still more CSSParser cleanup
        - use c++ style member initializers in CSSParser()
        - change m_styleElement to m_styleSheet and make it a CSSStyleSheet
        - finally add my copyright to the files I've been cleaning

        * css/CSSGrammar.y:
        * css/CSSParser.cpp:
        (WebCore::CSSParser::CSSParser):
        (WebCore::CSSParser::setupParser):
        (WebCore::CSSParser::parseValue):
        (WebCore::CSSParser::parseColor):
        (WebCore::CSSParser::parseDeclaration):
        (WebCore::CSSParser::parseContent):
        (WebCore::CSSParser::parseFillImage):
        (WebCore::CSSParser::parseFontFaceSrc):
        (WebCore::CSSParser::parseBorderImage):
        (WebCore::CSSParser::createCharsetRule):
        (WebCore::CSSParser::createImportRule):
        (WebCore::CSSParser::createMediaRule):
        (WebCore::CSSParser::createStyleRule):
        * css/CSSParser.h:
        * css/SVGCSSParser.cpp:

2008-06-07  Eric Seidel  <eric@webkit.org>

        Reviewed by ap.

        More CSSParser cleanup
        - rename CSSParser::id to m_id
        - rename CSSParser::data to m_data
        - fix a few whitespace and argument name issues

        * css/CSSGrammar.y:
        * css/CSSParser.cpp:
        (WebCore::CSSParser::CSSParser):
        (WebCore::CSSParser::~CSSParser):
        (WebCore::CSSParser::setupParser):
        (WebCore::CSSParser::parseValue):
        * css/CSSParser.h:

2008-06-07  Eric Seidel  <eric@webkit.org>

        Reviewed by ap.

        Rename CSSParser::strict to m_strict

        * css/CSSGrammar.y:
        * css/CSSParser.cpp:
        (WebCore::CSSParser::CSSParser):
        (WebCore::CSSParser::parseColor):
        (WebCore::CSSParser::parseValue):
        (WebCore::CSSParser::parseBackgroundColor):
        (WebCore::CSSParser::parseFillPositionXY):
        (WebCore::CSSParser::parseFillSize):
        (WebCore::CSSParser::parseTransitionDuration):
        (WebCore::CSSParser::parseTransitionRepeatCount):
        (WebCore::CSSParser::parseTimingFunctionValue):
        (WebCore::CSSParser::parseDashboardRegions):
        (WebCore::CSSParser::parseShape):
        (WebCore::CSSParser::parseFont):
        (WebCore::CSSParser::parseColorFromValue):
        (WebCore::CSSParser::parseShadow):
        (WebCore::CSSParser::parseReflect):
        (WebCore::CSSParser::parseBorderImage):
        * css/CSSParser.h:

2008-06-07  Eric Seidel  <eric@webkit.org>

        Reviewed by ap.

        Rename CSSParser::defaultNamespace to m_defaultNamespace

        * css/CSSGrammar.y:
        * css/CSSParser.cpp:
        (WebCore::CSSParser::CSSParser):
        (WebCore::CSSParser::parseSheet):
        * css/CSSParser.h:
        * css/CSSStyleSheet.cpp:
        (WebCore::CSSStyleSheet::addNamespace):

2008-06-07  Eric Seidel  <eric@webkit.org>

        Reviewed by ap.

        Rename CSSParser::important to m_important

        * css/CSSGrammar.y:
        * css/CSSParser.cpp:
        (WebCore::CSSParser::CSSParser):
        (WebCore::CSSParser::parseValue):
        (WebCore::CSSParser::parseFontFaceSrc):
        (WebCore::CSSParser::parseFontFaceUnicodeRange):
        * css/CSSParser.h:

2008-06-07  Eric Seidel  <eric@webkit.org>

        Reviewed by ap.

        Rename CSSParser::rule to m_rule

        * css/CSSGrammar.y:
        * css/CSSParser.cpp:
        (WebCore::CSSParser::parseSheet):
        (WebCore::CSSParser::parseRule):
        (WebCore::CSSParser::parseValue):
        (WebCore::CSSParser::parseColor):
        (WebCore::CSSParser::parseDeclaration):
        * css/CSSParser.h:

2008-06-07  Eric Seidel  <eric@webkit.org>

        Reviewed by ap.

        Yet another cleanup patch for CSSParser
        Rename CSSParser::valueList to m_valueList

        * css/CSSGrammar.y:
        * css/CSSParser.cpp:
        (WebCore::CSSParser::CSSParser):
        (WebCore::CSSParser::~CSSParser):
        (WebCore::CSSParser::checkForOrphanedUnits):
        (WebCore::CSSParser::parseValue):
        (WebCore::CSSParser::parseFillShorthand):
        (WebCore::CSSParser::parseTransitionShorthand):
        (WebCore::CSSParser::parseShorthand):
        (WebCore::CSSParser::parse4Values):
        (WebCore::CSSParser::parseContent):
        (WebCore::CSSParser::parseFillImage):
        (WebCore::CSSParser::parseFillPositionXY):
        (WebCore::CSSParser::parseFillPosition):
        (WebCore::CSSParser::parseFillSize):
        (WebCore::CSSParser::parseFillProperty):
        (WebCore::CSSParser::parseTransitionProperty):
        (WebCore::CSSParser::parseDashboardRegions):
        (WebCore::CSSParser::parseShape):
        (WebCore::CSSParser::parseFont):
        (WebCore::CSSParser::parseFontFamily):
        (WebCore::CSSParser::parseFontFaceSrc):
        (WebCore::CSSParser::parseFontFaceUnicodeRange):
        (WebCore::CSSParser::parseColor):
        (WebCore::CSSParser::parseShadow):
        (WebCore::CSSParser::parseReflect):
        (WebCore::BorderImageParseContext::commitBorderImage):
        (WebCore::CSSParser::parseBorderImage):
        (WebCore::CSSParser::parseCounter):
        (WebCore::CSSParser::parseGradient):
        (WebCore::CSSParser::parseCanvas):
        (WebCore::CSSParser::parseTransform):
        (WebCore::CSSParser::parseTransformOrigin):
        * css/CSSParser.h:
        * css/SVGCSSParser.cpp:
        (WebCore::CSSParser::parseSVGValue):
        (WebCore::CSSParser::parseSVGStrokeDasharray):
        (WebCore::CSSParser::parseSVGPaint):
        (WebCore::CSSParser::parseSVGColor):

2008-06-07  Eric Seidel  <eric@webkit.org>

        Reviewed by ap.

        More cleanup to CSSParser, rename mediaQuery to m_mediaQuery
        Remove CSSParser::current and CSSParser::currentParser and use
        the magic of YYLEX_PARAM instead.

        * css/CSSParser.cpp:
        (WebCore::enterGeneratedParser):
        (WebCore::CSSParser::parseSheet):
        (WebCore::CSSParser::parseRule):
        (WebCore::CSSParser::parseValue):
        (WebCore::CSSParser::parseColor):
        (WebCore::CSSParser::parseDeclaration):
        (WebCore::CSSParser::parseMediaQuery):
        * css/CSSParser.h:

2008-06-07  Julien Chaffraix  <jchaffraix@webkit.org>

        Reviewed by Eric.

        Part of bug 19200: *.in files should embed more information
        https://bugs.webkit.org/show_bug.cgi?id=19200

        - Added XML attributes' parsing.

        - Moved (most) capitalization and audio hacks in the *.in files.

        * dom/make_names.pl:
        * html/HTMLTagNames.in:
        * svg/svgtags.in:

2008-06-07  Pierre-Luc Beaudoin  <pierre-luc.beaudoin@collabora.co.uk>

        With the help of Jonathon Jongsma.

        Reviewed by Dan Bernstein.

        Fix for https://bugs.webkit.org/show_bug.cgi?id=19279
        REGRESSION (r32660): Text not redrawn correctly when selection changes

        * rendering/InlineTextBox.cpp:
        (WebCore::InlineTextBox::paint):
        Add a condition for when ePos <= sPos 

2008-06-06  Julien Chaffraix  <jchaffraix@webkit.org>

        Reviewed by Eric.

        Part of bug 19200: *.in files should embed more information
        https://bugs.webkit.org/show_bug.cgi?id=19200

        - Switched *.in files to XML format.

        - Added (simple) parsing facilities in make_names.pl using the XML::Tiny Perl parser.

        - Updated the build systems to include bindings/scripts when executing make_names.pl
        (for XMLTiny dependency).

        - Cleaned-up make_names.pl a little.

        * DerivedSources.make:
        * GNUmakefile.am:
        * WebCore.pro:
        * bindings/scripts/XMLTiny.pm: Added.
        * dom/make_names.pl:
        * html/HTMLAttributeNames.in:
        * html/HTMLTagNames.in:
        * svg/svgattrs.in:
        * svg/svgtags.in:
        * svg/xlinkattrs.in:
        * xml/xmlattrs.in:

2008-06-06  Robert Blaut  <webkit@blaut.biz>

        Reviewed by Darin Adler.

        Fix for https://bugs.webkit.org/show_bug.cgi?id=19407 
        CSS3 Selector Test: *= ~= ^= $= should all accept the empty string, but match nothing

        Test: fast/css/begin-end-contain-selector-empty-value.html

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

2008-06-06  Eric Seidel  <eric@webkit.org>

        Reviewed by mitz.

        More cleanup of CSSParser.
        Rename CSSParser::numParsedProperties and maxNumParsedProperites to m_*

        * css/CSSGrammar.y:
        * css/CSSParser.cpp:
        (WebCore::CSSParser::CSSParser):
        (WebCore::CSSParser::parseValue):
        (WebCore::CSSParser::parseColor):
        (WebCore::CSSParser::parseDeclaration):
        (WebCore::CSSParser::addProperty):
        (WebCore::CSSParser::rollbackLastProperties):
        (WebCore::CSSParser::clearProperties):
        (WebCore::CSSParser::parse4Values):
        (WebCore::CSSParser::createStyleRule):
        (WebCore::CSSParser::createFontFaceRule):
        * css/CSSParser.h:
        * css/SVGCSSParser.cpp:
        (WebCore::CSSParser::parseSVGValue):

2008-06-06  Eric Seidel  <eric@webkit.org>

        Reviewed by mitz.

        More cleanup of CSSParser.
        Rename CSSParser::parsedProperties to m_parsedProperties.

        * css/CSSParser.cpp:
        (WebCore::CSSParser::CSSParser):
        (WebCore::CSSParser::~CSSParser):
        (WebCore::CSSParser::parseValue):
        (WebCore::CSSParser::parseColor):
        (WebCore::CSSParser::parseDeclaration):
        (WebCore::CSSParser::addProperty):
        (WebCore::CSSParser::rollbackLastProperties):
        (WebCore::CSSParser::clearProperties):
        (WebCore::CSSParser::parse4Values):
        (WebCore::CSSParser::createStyleRule):
        (WebCore::CSSParser::createFontFaceRule):
        * css/CSSParser.h:
        * css/SVGCSSParser.cpp:
        (WebCore::CSSParser::parseSVGValue):

2008-06-06  Eric Seidel  <eric@webkit.org>

        Reviewed by mitz.

        Start the cleanup of CSSParser.
        Rename CSSParser::styleElement to CSSParser::m_styleElement

        * css/CSSGrammar.y:
        * css/CSSParser.cpp:
        (WebCore::CSSParser::document):
        (WebCore::CSSParser::parseValue):
        (WebCore::CSSParser::parseContent):
        (WebCore::CSSParser::parseFillImage):
        (WebCore::CSSParser::parseFontFaceSrc):
        (WebCore::CSSParser::parseBorderImage):
        (WebCore::CSSParser::createCharsetRule):
        (WebCore::CSSParser::createImportRule):
        (WebCore::CSSParser::createMediaRule):
        (WebCore::CSSParser::createStyleRule):
        * css/CSSParser.h:

2008-06-06  Anthony Ricaud  <rik24d@gmail.com>

        Reviewed by adele.  Landed by eseidel.

        https://bugs.webkit.org/show_bug.cgi?id=18337
        
        Calls listBoxOnChange() in typeAheadFind() when the <select> tag is a listBox.
        
        * html/HTMLSelectElement.cpp:
        (WebCore::HTMLSelectElement::typeAheadFind):

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

        Reviewed by John.

        <rdar://problem/5890684> REGRESSION(r23969): Deleting a line break changes the style of text after the break
        
        Serialization of font-family:-webkit-monospace when it came from a 
        CSSMutableStyleDeclaration would wrap the value in single quotes but 
        serialization of the same property value pair from a CSSComputedStyleDeclaration 
        wouldn't, which kept code that checked for and removed non-redundant styles from 
        style spans from working correctly.

        A redundant style left on a style span would not normally create a rendering 
        difference, but it did in this case because an element with 
        font-family:-webkit-monospace does not appear to inherit font-size.  
        Added a FIXME about how we might need to keep font-size on a style span if its 
        non-redundant styles include font-family:-webkit-monospace, although I couldn't 
        create a test case to produce this scenario.

        * css/FontFamilyValue.cpp:
        (WebCore::isValidCSSIdentifier): Don't return false if the String starts
        with a '-'.  This function now appears identical to isCSSTokenizerIdentifier,
        so perhaps we should use a single function.
        * editing/ReplaceSelectionCommand.cpp:
        (WebCore::ReplaceSelectionCommand::handleStyleSpans): Added FIXME.  Removed the
        creation of two Strings that were never used.

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

        Reviewed by Darin.

        <https://bugs.webkit.org/show_bug.cgi?id=19087>
        Editing crash in IndentOutdentCommand::prepareBlockquoteLevelForInsertion, ASSERT in debug mode

        * editing/DeleteSelectionCommand.cpp:
        (WebCore::DeleteSelectionCommand::calculateTypingStyleAfterDelete): applyStyle
        can destroy insertedPlaceholder if it needs to move it, but it will set an
        endingSelection() at [movedPlaceholder, 0] if it does so.  Re-fetch insertedPlaceholder
        if that happens.  The long term solution for these crashes is to make moveParagraphs
        not copy/destroy/move content, and to make VisiblePositions update themselves on DOM 
        mutations.
        * editing/IndentOutdentCommand.cpp:
        (WebCore::IndentOutdentCommand::indentRegion): Early return to avoid crashes like this
        in the future, but ASSERT to catch them in debug builds.

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

        Reviewed by Eric.

        <https://bugs.webkit.org/show_bug.cgi?id=19403>
        ASSERT in InsertIntoTextNodeCommand::InsertIntoTextNodeCommand during RemoveFormat call

        * editing/RemoveFormatCommand.cpp:
        (WebCore::RemoveFormatCommand::doApply): If the selection was all
        formatting (like an empty list) the format-less text will be empty.
        Early return to avoid the ASSERT that fires if input(...) is called
        with an empty String.

2008-06-05  Alp Toker  <alp@nuanti.com>

        Build fix for r34387.

        * GNUmakefile.am:

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

        Reviewed by Eric.

        <https://bugs.webkit.org/show_bug.cgi?id=19089> Editing ASSERT in Range::compareBoundaryPoints
        
        ApplyStyleCommand::applyInlineStyle does some work and then checks to see
        if the start offset of the Range it's operating on is now past the caretMaxOffset
        of the start container.  If it is, applyInlineStyle updates the position to 
        [startContainer->traverseNextNode(), 0] and then operates on that new start
        position.
        
        caretMaxOffset was incorrect for horizontal rules.  It should be 1 and it was 0.  So,
        if the horizontal rule was the last node in the document, applyInlineStyle would update
        its start position to [0, 0] and then try to operate on that position, assuming it was
        non-null, leading to the ASSERT.
        
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::caretMaxOffset):

2008-06-05  Chris Fleizach  <cfleizach@apple.com>

        Reviewed by John Sullivan.

        <rdar://problem/5947396> AccessibilityListBoxOptions should return their string as AXValue, not AXTitle

        * page/AccessibilityListBoxOption.cpp:
        (WebCore::AccessibilityListBoxOption::stringValue):
        * page/AccessibilityListBoxOption.h:

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

        Reviewed by Harrison.

        <rdar://problem/5658933> GoogleDocs: Crash indenting a particular selection twice
        <rdar://problem/5831310> CrashTracer: [USER] 4 crashes in Mail at WebCore::IndentOutdentCommand::prepareBlockquoteLevelForInsertion
        <rdar://problem/5480141> GoogleDocs: Attempting to indent content in <td> closes <table> element
        
        A crash would occur when indenting a selection that started just before a table
        and ended inside that table.  With a selection like this, we'd indent the entire
        table, then try and indent paragraphs inside it, but the stored position for the
        next paragraph to indent was inside content that had been removed from the document 
        during the first Indent.
        
        Fixed the crash adjusting the selection to perform the indent on to prepare it
        for paragraph iteration using selectionForParagraphIteration.  We do this adjustment
        for paragraph iteration in InsertList as well.
        
        Also, indenting paragraphs inside table cells would break table structure because 
        we were splitting the DOM all the way up to the root editable element to insert
        a blockquote.  Fixed this by only splitting up to the enclosing table cell.  This 
        matches FF.  Lastly, fixed a bug where indenting several paragraphs inside different 
        table cells would move all the selected text into the same table cell. FF still has 
        this bug.

        * editing/IndentOutdentCommand.cpp:
        (WebCore::IndentOutdentCommand::indentRegion):

2008-06-05  chris fleizach  <cfleizach@apple.com>

        Reviewed by Alice Liu.

         <rdar://problem/5979998> AXList controls should have AXSelectedChildren and its children's AXSelected attribute writable

        * page/AccessibilityListBox.cpp:
        (WebCore::AccessibilityListBox::canSetSelectedChildrenAttribute):
        (WebCore::AccessibilityListBox::setSelectedChildren):
        (WebCore::AccessibilityListBox::selectedChildren):
        (WebCore::AccessibilityListBox::visibleChildren):
        * page/AccessibilityListBox.h:
        * page/AccessibilityListBoxOption.cpp:
        (WebCore::AccessibilityListBoxOption::canSetSelectedAttribute):
        (WebCore::AccessibilityListBoxOption::setSelected):
        * page/AccessibilityListBoxOption.h:
        (WebCore::AccessibilityListBoxOption::selectedChildren):
        (WebCore::AccessibilityListBoxOption::visibleChildren):
        * page/AccessibilityObject.cpp:
        (WebCore::AccessibilityObject::setSelected):
        (WebCore::AccessibilityObject::getDocumentLinks):
        * page/AccessibilityObject.h:
        (WebCore::AccessibilityObject::canSetSelectedAttribute):
        (WebCore::AccessibilityObject::canSetSelectedChildrenAttribute):
        (WebCore::AccessibilityObject::children):
        * page/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::getDocumentLinks):
        (WebCore::AccessibilityRenderObject::children):
        (WebCore::AccessibilityRenderObject::addChildren):
        (WebCore::AccessibilityRenderObject::ariaListboxSelectedChildren):
        (WebCore::AccessibilityRenderObject::selectedChildren):
        (WebCore::AccessibilityRenderObject::ariaListboxVisibleChildren):
        (WebCore::AccessibilityRenderObject::visibleChildren):
        * page/AccessibilityRenderObject.h:
        * page/mac/AccessibilityObjectWrapper.mm:
        (convertToVector):
        (convertToNSArray):
        (-[AccessibilityObjectWrapper accessibilityAttributeValue:]):
        (-[AccessibilityObjectWrapper accessibilityIsAttributeSettable:]):
        (-[AccessibilityObjectWrapper accessibilitySetValue:forAttribute:]):

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

        Fix for <rdar://problem/5957994> Height doesn't animate

        Improve the behavior when transitions are dynamically changed.  Make sure to leave older transitions
        running and let them obsolete themselves when they finish.

        Reviewed by Dan Bernstein

        Added WebCore/manual-tests/transitions2.html (must be tested manually)

        * manual-tests/transitions.html:
        * manual-tests/transitions2.html: Added.
        * page/AnimationController.cpp:
        (WebCore::ImplicitAnimation::property):
        (WebCore::ImplicitAnimation::setFinished):
        (WebCore::ImplicitAnimation::markedForDeath):
        (WebCore::ImplicitAnimation::setMarkedForDeath):
        (WebCore::ImplicitAnimation::ImplicitAnimation):
        (WebCore::ImplicitAnimation::reset):
        (WebCore::ImplicitAnimation::animate):
        (WebCore::CompositeImplicitAnimation::animate):

2008-06-05  Eric Seidel  <eric@webkit.org>

        Reviewed by mjs.

        Get rid of Uninitialized Memory Reads (UMRs) in the XPath::Value copy constructor.

        No functional changes, thus no tests.

        * xml/XPathValue.h:
        (WebCore::XPath::Value::Value): initialize all values in each constructor

2008-06-05  Eric Seidel  <eric@webkit.org>

        Reviewed by hyatt.

        No functional changes, thus no tests.

        * platform/graphics/Color.h: remove unnecessary bitfield use

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

        Reviewed by Dave Hyatt.
        
        Make hasFeature() return true for the animation stuff.

        * dom/DOMImplementation.cpp:
        (WebCore::isSVG11Feature):

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

        Reviewed by Darin Adler.

        - fix https://bugs.webkit.org/show_bug.cgi?id=19397
          REGRESSION (3.1-TOT): Box-shadow renders weird when rotating a div with border radius

        Test: fast/transforms/shadows.html

        * platform/graphics/cg/GraphicsContextCG.cpp:
        (WebCore::GraphicsContext::setPlatformShadow): In Core Graphics, shadow
        dimensions are always in device space. Account for that, and apply the
        current context transform to shadow offset, and multiply the blur radius
        by the inverse of the operator norm of the inverse transform (which is
        the radius of the circle inscribed in the transformed unit circle). 
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::paintBoxShadow): Added 1px separation between
        the edge of the filled shape and the edge of the clipped-out shape,
        because in a transformed context, due to antialiasing, the fill can
        bleed into the clip if they touch.

2008-06-05  Tor Arne Vestbø  <tavestbo@trolltech.com>

        Reviewed by Simon.

        Prevent cycles when converting from DOM objects to
        QVariant, due to cycles in the DOM tree.

        * bridge/qt/qt_runtime.cpp:
        (KJS::Bindings::convertValueToQVariant):

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

        Reviewed by Mitz.

        Get rid of DeprecatedPtrList from StyleSheetList.
        
        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::CSSStyleSelector):
        * css/StyleSheetList.cpp:
        (WebCore::StyleSheetList::~StyleSheetList):
        (WebCore::StyleSheetList::length):
        (WebCore::StyleSheetList::item):
        * css/StyleSheetList.h:
        (WebCore::StyleSheetList::swap):
        * dom/Document.cpp:
        (WebCore::Document::recalcStyleSelector):

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

        Reviewed by Darin.

        Convert more classes over to start out with a ref count of 1.
        
        * css/CSSImageGeneratorValue.cpp:
        (WebCore::CSSImageGeneratorValue::generatedImage):
        * css/CSSImageValue.cpp:
        (WebCore::CSSImageValue::cachedImage):
        * css/CSSMediaRule.cpp:
        (WebCore::CSSMediaRule::CSSMediaRule):
        * css/CSSParser.cpp:
        (WebCore::CSSParser::parseValue):
        (WebCore::CSSParser::parseFillSize):
        (WebCore::CSSParser::parseCounter):
        (WebCore::CSSParser::createRuleList):
        * css/CSSRuleList.cpp:
        (WebCore::CSSRuleList::CSSRuleList):
        * css/CSSRuleList.h:
        (WebCore::CSSRuleList::create):
        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::matchRules):
        (WebCore::CSSStyleSelector::styleRulesForElement):
        * css/CSSStyleSelector.h:
        * css/CSSStyleSheet.cpp:
        (WebCore::CSSStyleSheet::cssRules):
        (WebCore::CSSStyleSheet::addSubresourceURLStrings):
        * css/CSSStyleSheet.h:
        (WebCore::CSSStyleSheet::rules):
        * css/Pair.h:
        (WebCore::Pair::create):
        (WebCore::Pair::Pair):
        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::buffered):
        (WebCore::HTMLMediaElement::played):
        (WebCore::HTMLMediaElement::seekable):
        * html/TimeRanges.cpp:
        (TimeRanges::TimeRanges):
        * html/TimeRanges.h:
        (WebCore::TimeRanges::create):
        (WebCore::TimeRanges::TimeRanges):
        * rendering/style/RenderStyle.cpp:
        (WebCore::RenderStyle::addCursor):
        (WebCore::RenderStyle::clearCursorList):
        * rendering/style/RenderStyle.h:
        (WebCore::StyleImage::~StyleImage):
        (WebCore::StyleImage::StyleImage):
        (WebCore::StyleCachedImage::create):
        (WebCore::StyleCachedImage::StyleCachedImage):
        (WebCore::StyleGeneratedImage::create):
        (WebCore::StyleGeneratedImage::StyleGeneratedImage):
        (WebCore::CursorList::create):
        (WebCore::CursorList::CursorList):

2008-06-04  chris fleizach  <cfleizach@apple.com>

        Reviewed by Dave Hyatt, Alice, Liu

        <rdar://problem/5983804> Editable web areas do not properly report the AXFocused attribute

        * page/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::isFocused):

2008-06-03  Beth Dakin  <bdakin@apple.com>

        Reviewed by Adele.

        Fix for https://bugs.webkit.org/show_bug.cgi?id=19381 WebKit 
        Crashing Constantly on Gmail with accessibility turned on

        There was a missing null-check!

        * page/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::roleValue):

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

        Reviewed by Sam.

        Convert more classes to start with a ref count of 1.
        
        * bindings/js/JSCustomVoidCallback.cpp:
        (WebCore::toVoidCallback):
        * bindings/js/JSCustomVoidCallback.h:
        (WebCore::JSCustomVoidCallback::create):
        * css/StyleSheetList.cpp:
        (WebCore::StyleSheetList::StyleSheetList):
        * css/StyleSheetList.h:
        (WebCore::StyleSheetList::create):
        * dom/Document.cpp:
        (WebCore::Document::Document):
        (WebCore::Document::createNodeIterator):
        (WebCore::Document::createTreeWalker):
        * dom/NodeIterator.h:
        (WebCore::NodeIterator::create):
        * dom/Traversal.cpp:
        (WebCore::Traversal::Traversal):
        * dom/Traversal.h:
        * dom/TreeWalker.h:
        (WebCore::TreeWalker::create):
        * history/CachedPage.cpp:
        (WebCore::CachedPage::create):
        (WebCore::CachedPage::CachedPage):
        * html/CanvasGradient.cpp:
        (WebCore::CanvasGradient::CanvasGradient):
        * html/CanvasGradient.h:
        (WebCore::CanvasGradient::create):
        * html/CanvasRenderingContext2D.cpp:
        (WebCore::CanvasRenderingContext2D::CanvasRenderingContext2D):
        (WebCore::CanvasRenderingContext2D::createLinearGradient):
        (WebCore::CanvasRenderingContext2D::createRadialGradient):
        * html/CanvasRenderingContext2D.h:
        (WebCore::CanvasRenderingContext2D::create):
        * html/HTMLCanvasElement.cpp:
        (WebCore::HTMLCanvasElement::getContext):
        * html/VoidCallback.h:
        (WebCore::VoidCallback::VoidCallback):
        * loader/FormState.cpp:
        (WebCore::FormState::create):
        (WebCore::FormState::FormState):
        * platform/text/RegularExpression.cpp:
        (WebCore::RegularExpression::Private::create):
        (WebCore::RegularExpression::Private::Private):
        (WebCore::RegularExpression::RegularExpression):
        * storage/SQLResultSet.cpp:
        (WebCore::SQLResultSet::SQLResultSet):
        * storage/SQLResultSetRowList.h:
        (WebCore::SQLResultSetRowList::create):
        (WebCore::SQLResultSetRowList::SQLResultSetRowList):

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

        Reviewed by Dave Hyatt.

        - fix <rdar://problem/5962118> Crash in RenderBlock::calcColumnWidth()

        Test: fast/multicol/gap-non-negative.html

        * css/CSSParser.cpp:
        (WebCore::CSSParser::parseValue): Changed to not allow negative
        values for column-gap, per
        <http://www.w3.org/TR/2001/WD-css3-multicol-20010118/#column-gap>.

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

        Reviewed by Dave Hyatt.

        - fix <rdar://problem/5962270> Crash in WebCore::RenderTableCell::computeAbsoluteRepaintRect()

        Test: fast/reflections/table-cell.html

        * rendering/RenderTableCell.cpp:
        (WebCore::RenderTableCell::computeAbsoluteRepaintRect): Null-check
        parent().
        (WebCore::RenderTableCell::absolutePosition): Ditto.

2008-06-04  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Darin.

        Fix JSClassCreate to work with old JSCore API threading model.

        * ForwardingHeaders/wtf/StrHash.h: Removed (moved into ustring.h).

2008-06-03  Antti Koivisto  <antti@apple.com>

        Reviewed by Darin.
        
        https://bugs.webkit.org/show_bug.cgi?id=19384
        Implement path morphing for SVG animation
        
        You can animate smoothly between paths that have equal number of control points of matching type.

        Test: svg/custom/animate-path-morphing.svg

        * svg/SVGAnimateElement.cpp:
        (WebCore::SVGAnimateElement::determinePropertyType):
        (WebCore::SVGAnimateElement::calculateAnimatedValue):
        (WebCore::SVGAnimateElement::calculateFromAndToValues):
        (WebCore::SVGAnimateElement::resetToBaseValue):
        (WebCore::SVGAnimateElement::applyResultsToTarget):
        * svg/SVGAnimateElement.h:
        (WebCore::SVGAnimateElement::):
        * svg/SVGPathSegList.cpp:
        (WebCore::blendFunc):
        (WebCore::SVGPathSegList::createAnimated):
        * svg/SVGPathSegList.h:

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

        - try to fix the Qt build

        * bridge/qt/qt_runtime.cpp:
        (KJS::Bindings::QtRuntimeMetaMethod::lengthGetter): Remove the originalObject argument.
        (KJS::Bindings::QtRuntimeMetaMethod::connectGetter): Ditto.
        (KJS::Bindings::QtRuntimeMetaMethod::disconnectGetter): Ditto.
        (KJS::Bindings::QtRuntimeConnectionMethod::lengthGetter): Ditto.
        (KJS::Bindings::QtConnectionObject::execute): Use callAsFunction.
        * bridge/qt/qt_runtime.h: More of the same.

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

        Reviewed by John.

        <rdar://problem/5763082> GMail: Hang when removing indent from nested list
        <rdar://problem/5775449> In Gmail and GoogleDocs, a hang occurs when I attempt to apply a list style to a large selection of text
        <rdar://problem/5937624> 9D32: Hang in Safari. Using 100% of processor

        * editing/InsertListCommand.cpp:
        (WebCore::InsertListCommand::modifyRange): doApply() may operate on and remove 
        the last paragraph of the selection from the document if it's in the same list 
        item as startOfCurrentParagraph.  Return early to avoid an infinite loop and 
        because there is no more work to be done.  Added a FIXME (<rdar://problem/5983974>)
        about the incorrect endingSelection()s.

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

        Reviewed by Tim.

        Bug 12983: Web Inspector break on the debugger keyword
        <https://bugs.webkit.org/show_bug.cgi?id=12983>

        Added support for the new debugger didReachBreakpoint 
        callback so that WebInspector receives the debugger event
        and breaks.

        * page/JavaScriptDebugServer.cpp:
        (WebCore::JavaScriptDebugServer::didReachBreakpoint):
        * page/JavaScriptDebugServer.h:

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

        Reviewed by Geoff.

        - https://bugs.webkit.org/show_bug.cgi?id=19269
          speed up SunSpider by eliminating the toObject call for most get/put/delete

        Eliminate the originalObject argument from property getter functions; it's no longer
        available and was used only for JavaScript function-based getters and setters.

        Updated callers of PropertySlot::setUndefined. It no longer takes a base argument.

        * bindings/js/JSQuarantinedObjectWrapper.cpp:
        (WebCore::JSQuarantinedObjectWrapper::cachedValueGetter): Removed the originalObject
        argument.
        (WebCore::JSQuarantinedObjectWrapper::getOwnPropertySlot): Changed to initialize the
        PropertySlot with the original object -- this is a new requirement.

        * bindings/js/JSCSSStyleDeclarationCustom.cpp:
        (WebCore::JSCSSStyleDeclaration::nameGetter):
        * bindings/js/JSCanvasPixelArrayCustom.cpp:
        (WebCore::JSCanvasPixelArray::indexGetter):
        * bindings/js/JSDOMWindowBase.cpp:
        (WebCore::JSDOMWindowBase::childFrameGetter):
        (WebCore::JSDOMWindowBase::indexGetter):
        (WebCore::JSDOMWindowBase::namedItemGetter):
        (WebCore::JSDOMWindowBase::getOwnPropertySlot):
        * bindings/js/JSDOMWindowBase.h:
        * bindings/js/JSDOMWindowCustom.h:
        (WebCore::JSDOMWindow::customGetOwnPropertySlot):
        * bindings/js/JSHTMLAppletElementCustom.cpp:
        (WebCore::JSHTMLAppletElement::nameGetter):
        * bindings/js/JSHTMLCollectionCustom.cpp:
        (WebCore::JSHTMLCollection::nameGetter):
        * bindings/js/JSHTMLDocumentCustom.cpp:
        (WebCore::JSHTMLDocument::nameGetter):
        * bindings/js/JSHTMLEmbedElementCustom.cpp:
        (WebCore::JSHTMLEmbedElement::nameGetter):
        * bindings/js/JSHTMLFormElementCustom.cpp:
        (WebCore::JSHTMLFormElement::nameGetter):
        * bindings/js/JSHTMLFrameSetElementCustom.cpp:
        (WebCore::JSHTMLFrameSetElement::nameGetter):
        * bindings/js/JSHTMLObjectElementCustom.cpp:
        (WebCore::JSHTMLObjectElement::nameGetter):
        * bindings/js/JSHistoryCustom.cpp:
        (WebCore::JSHistory::customGetOwnPropertySlot):
        * bindings/js/JSLocationCustom.cpp:
        (WebCore::JSLocation::customGetOwnPropertySlot):
        * bindings/js/JSMimeTypeArrayCustom.cpp:
        (WebCore::JSMimeTypeArray::nameGetter):
        * bindings/js/JSNamedNodeMapCustom.cpp:
        (WebCore::JSNamedNodeMap::nameGetter):
        * bindings/js/JSNamedNodesCollection.cpp:
        (WebCore::JSNamedNodesCollection::lengthGetter):
        (WebCore::JSNamedNodesCollection::indexGetter):
        * bindings/js/JSNamedNodesCollection.h:
        * bindings/js/JSNodeListCustom.cpp:
        (WebCore::JSNodeList::nameGetter):
        * bindings/js/JSPluginArrayCustom.cpp:
        (WebCore::JSPluginArray::nameGetter):
        * bindings/js/JSPluginCustom.cpp:
        (WebCore::JSPlugin::nameGetter):
        * bindings/js/JSQuarantinedObjectWrapper.h:
        * bindings/js/JSStorageCustom.cpp:
        (WebCore::JSStorage::nameGetter):
        * bindings/js/JSStyleSheetListCustom.cpp:
        (WebCore::JSStyleSheetList::nameGetter):
        * bindings/js/kjs_binding.cpp:
        (WebCore::nonCachingStaticFunctionGetter):
        (WebCore::objectToStringFunctionGetter):
        * bindings/js/kjs_binding.h:
        * bindings/js/kjs_html.cpp:
        (WebCore::runtimeObjectGetter):
        (WebCore::runtimeObjectPropertyGetter):
        * bindings/js/kjs_html.h:
        * bindings/scripts/CodeGeneratorJS.pm:
        * bridge/objc/objc_runtime.mm:
        (ObjcFallbackObjectImp::getOwnPropertySlot):
        * bridge/runtime_array.cpp:
        (RuntimeArray::lengthGetter):
        (RuntimeArray::indexGetter):
        * bridge/runtime_array.h:
        * bridge/runtime_method.cpp:
        (RuntimeMethod::lengthGetter):
        * bridge/runtime_method.h:
        * bridge/runtime_object.cpp:
        (RuntimeObjectImp::fallbackObjectGetter):
        (RuntimeObjectImp::fieldGetter):
        (RuntimeObjectImp::methodGetter):
        * bridge/runtime_object.h:
        Removed originalObject arguments from getter fnctions and base arguments from
        calls to setUndefined.

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

        Fix build with GCC.

        * page/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::ariaRoleHasPresentationalChildren):
        Put a default case back in the switch statement so we don't get warned about
        all the unhandled cases with GCC. Remove the unreachable code that was causing
        a warning in Visual Studio.

2008-06-03  Steve Falkenburg  <sfalken@apple.com>

        Fix build

        * page/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::ariaRoleHasPresentationalChildren):

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

        Reviewed by John Sullivan.

        <rdar://problem/5943515> SelectionController()->modify Backward/Forward with LineGranularity sometimes don't work
        
        next/previousLinePosition didn't work if the input position was the last line in its
        block.  The code for handling such a position assumed that the input position was
        editable, and that the position to be returned needed to also be editable.  Changed
        this code to just maintain the same editability.
        
        No test case for now because we haven't enabled selection extension operations for
        non-editable selections.  I enabled them temporarily to test the fix, however.

        * dom/Node.cpp: Removed the now unused nextEditable(int).
        * dom/Node.h:
        * editing/visible_units.cpp:
        (WebCore::previousLeafWithSameEditability): Added.  Like previousEditable but just returns
        a node of the same editability.
        (WebCore::previousLinePosition): Call previousLeaf instead of previousEditable.
        (WebCore::nextLeafWithSameEditability): Added.
        (WebCore::nextLinePosition): Same as above.

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

        Reviewed by John and Sam.

        <rdar://problem/5955218> 
        Assertion failure in ApplicationCacheGroup::addEntry when reloading a page with a cache manifest (19182)
        
        * loader/appcache/ApplicationCacheGroup.h:
        (WebCore::ApplicationCacheGroup::hasNewestCache):
        Add new accessor.
        
        * loader/appcache/ApplicationCacheStorage.cpp:
        (WebCore::ApplicationCacheStorage::cacheGroupDestroyed):
        Don't call newestCache since it will always be null. Instead, call hasNewestCache which returns the saved newest cache pointer.
        
2008-06-03  Dan Bernstein  <mitz@apple.com>

        Reviewed by Dave Hyatt.

        - fix <rdar://problem/5965410>
          In fixed table layout, the width of cells with auto width should be
          proportional to their column span, to match Firefox and IE.

        Test: fast/table/fixed-with-auto-with-colspan.html

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

2008-06-03  Alp Toker  <alp@nuanti.com>

        Rubber-stamped by Alexey.

        Remove GenerateNativeConverter added in r34331 to fix JS regressions.
        (JSTextCustom.cpp added in r34141 is now unused in any code path.)

        * dom/Text.idl:

2008-06-03  Alexander Vassilev <avasilev@voipgate.com>

        Reviewed, tweaked and landed by Alexey.

        https://bugs.webkit.org/show_bug.cgi?id=19363
        Compiler error in Entity.h

        * dom/Entity.h:
        (WebCore::Entity::Entity): Add a private constructor to shut down the errors.

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

        Reviewed by Alexey Proskuryakov.
        
        Removed JSObject::call, since it just called JSObject::callAsFunction.
        
        SunSpider reports no change.

2008-06-02  Alp Toker  <alp@nuanti.com>

        Reviewed by Maciej.

        Two of the toJSNewlyCreated() optimisations in r34141 were never
        reached due to a generator bug and missing IDL attribute.

        Fix header generation to provide the necessary toJSNewlyCreated()
        overloads.

        Patch includes a related build fix by Jan Michael Alonzo.

        * GNUmakefile.am:
        * bindings/scripts/CodeGeneratorJS.pm:
        * dom/Text.idl:

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

        Reviewed by Beth Dakin.

        Some ARIA roles are designated to have presentational children, which
        means that their descendants aren't exposed to assistive technologies
        on an individual basis.  What this means in webcore is that descendants
        of such roles need to be ignored in terms of accessibility.

        * page/AccessibilityObject.cpp:
        (WebCore::AccessibilityObject::isPresentationalChildOfAriaRole):
        (WebCore::AccessibilityObject::ariaRoleHasPresentationalChildren):
        * page/AccessibilityObject.h:
        * page/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::accessibilityIsIgnored):
        (WebCore::RoleEntry::):
        (WebCore::AccessibilityRenderObject::isPresentationalChildOfAriaRole):
        (WebCore::AccessibilityRenderObject::ariaRoleHasPresentationalChildren):
        * page/AccessibilityRenderObject.h:

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

        Fix for https://bugs.webkit.org/show_bug.cgi?id=19303

        When the right slice value is omitted in border-image it should use the value of the left slice and not
        the top slice.

        Reviewed by darin

        Added fast/borders/border-image-omit-right-slice.html

        * css/CSSParser.cpp:
        (WebCore::BorderImageParseContext::commitBorderImage)

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

        Reviewed by David Hyatt and Mitz.

        <rdar://problem/5704119> 
        repro crash in WebCore::RenderPart::setWidget (plugin-related?)
        
        Test: platform/mac/plugins/update-widget-from-style-recalc.html

        Make sure to update the document's rendering before calling updateWidget.
        
        * html/HTMLEmbedElement.cpp:
        (WebCore::HTMLEmbedElement::updateWidget):
        * html/HTMLObjectElement.cpp:
        (WebCore::HTMLObjectElement::updateWidget):

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

        Reviewed by Adam.

        <rdar://problem/5954226> JSProfiler: Move the calls from
        JavaScriptProfileNode to JavaScriptProfile in WebCore (19231)
        - This Makes the profiler now call sorting function s on a per-profile
        basis instead of on a node in the profile.
        - This is also needed to remove the recursion limit in the profiler
        <rdar://problem/5969992> JSProfiler: Remove the recursion limit in the
        profiler
        since once the limit is removed calling sort on a node will only sort
        that node's children not the entire sub-tree of that node.

        * page/JavaScriptProfile.cpp: All of these functions were moved from 
        JavaScriptProfileNode.
        (WebCore::sortTotalTimeDescending):
        (WebCore::sortTotalTimeAscending):
        (WebCore::sortSelfTimeDescending):
        (WebCore::sortSelfTimeAscending):
        (WebCore::sortCallsDescending):
        (WebCore::sortCallsAscending):
        (WebCore::sortFunctionNameDescending):
        (WebCore::sortFunctionNameAscending):
        (WebCore::ProfileClass):
        * page/JavaScriptProfileNode.cpp:
        (WebCore::ProfileNodeClass):
        * page/inspector/ProfileView.js: Change uses of JavaScriptProfileNode
        for sorting to JavaScriptProfile.

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

        Reviewed by Oliver Hunt.

        - fix more cases of https://bugs.webkit.org/show_bug.cgi?id=19344
          <rdar://problem/5977300> Regression: Shadow offsets seem to have changed in 10.5.3 in canvas

        Tests: fast/canvas/shadow-offset-1.html
               fast/canvas/shadow-offset-2.html
               fast/canvas/shadow-offset-3.html
               fast/canvas/shadow-offset-4.html
               fast/canvas/shadow-offset-5.html
               fast/canvas/shadow-offset-6.html
               fast/canvas/shadow-offset-7.html

        * html/CanvasRenderingContext2D.cpp:
        (WebCore::adjustedShadowSize): Added this helper function.
        (WebCore::CanvasRenderingContext2D::setShadow): Changed to call
        adjustedShadowSize().
        (WebCore::CanvasRenderingContext2D::applyShadow): Ditto.

2008-06-02  Julien Chaffraix  <jchaffraix@webkit.org>

        Reviewed by Darin.

        Bug 18066: REGRESSION: createAttribute throws NAMESPACE_ERR exception
        https://bugs.webkit.org/show_bug.cgi?id=18066

        Test: fast/dom/createAttribute-exception.html

        * dom/Document.cpp:
        (WebCore::Document::createAttributeNS):
        * dom/Document.h: Add a bool parameter shouldIgnoreNamespaceChecks
        to createNamespaceNS() used by createAttribute() to bypass namespace
        checking.

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

        Reviewed by John Sullivan.

        - fix https://bugs.webkit.org/show_bug.cgi?id=18799
          apl.aip.org menu does not work (property names should be case sensitive)
          <rdar://problem/5900484>

        Test: fast/dom/CSSStyleDeclaration/css-properties-case-sensitive.html

        * bindings/js/JSCSSStyleDeclarationCustom.cpp:
        (WebCore::hasCSSPropertyNamePrefix): Tweak implementation a tiny bit for
        improved performance when the first character does not match.
        (WebCore::cssPropertyName): Reject property names with a leading uppercase
        letter.

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

        Reviewed by Mitz.

        - fix https://bugs.webkit.org/show_bug.cgi?id=19358
          <rdar://problem/5951986> first line break in <pre> elements ignored
          (chess boards at http://rankzero.de/)

        Test: fast/parser/pre-first-line-break.html

        * editing/markup.cpp:
        (WebCore::appendStartMarkup): Fix handling of <listing>. Not part of the
        bug mentioned above, but uncovered by the regression test.

        * html/HTMLTokenizer.cpp:
        (WebCore::HTMLTokenizer::write): Clear the "discardLF" flag when
        processing a new tag.

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

        Fixes a bug where only the last breakpoint would be hit after reloading
        the page. Also fixes a bug where disabled breakpoints would be hit
        after reloading the page.

        Reviewed by Darin Adler.

        * page/inspector/BreakpointsSidebarPane.js:
        (WebInspector.BreakpointsSidebarPane.prototype.addBreakpoint): Don't call
        InspectorController.addBreakpoint() unless the breakpoint is enabled.
        * page/inspector/ScriptsPanel.js:
        (WebInspector.ScriptsPanel.prototype.addScript): Move the addBreakpoint()
        call inside the for loop so each breakpoint is added. Also check the
        breakpoint's enabled state before calling addBreakpoint().

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

        Fixes a bug where the line highlight and the execution line were conflicting.
        The line highlight no longer shows up when the execution line changes, only
        when showResource or showScript is called with a line number.

        Reviewed by Darin Adler.

        * page/inspector/ScriptsPanel.js:
        (WebInspector.ScriptsPanel.prototype.showScript): Pass true for shouldHighlightLine.
        (WebInspector.ScriptsPanel.prototype.showResource): Ditto.
        (WebInspector.ScriptsPanel.prototype._showScriptOrResource): Added a shouldHighlightLine
        argument that triggers the highlightLine() call on the SourceFrame.
        (WebInspector.ScriptsPanel.prototype._goBack): Pass false for shouldHighlightLine since
        we need to pass true for fromBackForwardAction.
        (WebInspector.ScriptsPanel.prototype._goForward): Ditto.

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

        Bring the Web Inspector forward when the debugger pauses.

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

        Reviewed by Darin Adler.

        * page/inspector/ScriptsPanel.js:
        (WebInspector.ScriptsPanel.prototype.debuggerPaused): Call window.focus() and
        make the Scripts panel the current panel.

2008-06-02  Jan Michael Alonzo  <jmalonzo@webkit.org>

        Reviewed by Alp Toker.

        Build WebCore GTK+ sources as part of WebCore, not WebKit.
        Split common and GTK+-specific sources into separate file lists.

        * GNUmakefile.am:

2008-05-30  Tor Arne Vestbø  <tavestbo@trolltech.com>

        Reviewed by Simon.

        Implement basic media element controls for the QtWebKit port.

        * platform/qt/RenderThemeQt.cpp:
        (WebCore::WorldMatrixTransformer::WorldMatrixTransformer):
        (WebCore::WorldMatrixTransformer::~WorldMatrixTransformer):
        (WebCore::RenderThemeQt::getMediaElementFromRenderObject):
        (WebCore::RenderThemeQt::paintMediaBackground):
        (WebCore::RenderThemeQt::getMediaControlForegroundColor):
        (WebCore::RenderThemeQt::paintMediaFullscreenButton):
        (WebCore::RenderThemeQt::paintMediaMuteButton):
        (WebCore::RenderThemeQt::paintMediaPlayButton):
        (WebCore::RenderThemeQt::paintMediaSeekBackButton):
        (WebCore::RenderThemeQt::paintMediaSeekForwardButton):
        (WebCore::RenderThemeQt::paintMediaSliderTrack):
        (WebCore::RenderThemeQt::paintMediaSliderThumb):
        (WebCore::RenderThemeQt::adjustSliderThumbSize):
        * platform/qt/RenderThemeQt.h:
        * platform/qt/html4-adjustments-qt.css:

2008-05-30  Tor Arne Vestbø  <tavestbo@trolltech.com>

        Reviewed by Simon.

        Change default styling of media elements to allow controls
        to be placed at any position within the media element.

        * css/html4.css:

2008-05-30  Tor Arne Vestbø  <tavestbo@trolltech.com>

        Reviewed by Simon.

        Use intrinsic size for media elements with no natural size.

        * rendering/RenderVideo.cpp:
        (WebCore::RenderVideo::videoSizeChanged):

2008-05-28  Tor Arne Vestbø  <tavestbo@trolltech.com>

        Reviewed by Simon.

        Allow platform specific adjustments to the default style sheet.

        Clients will change the #ifdef in RenderTheme.cpp and implement
        any platform specific adjustments in RenderThemeXXX.cpp, either
        by loading a file as the Qt port does, or by modifying the style
        directly.

        * WebCore.pro: Add new resource file
        * css/CSSStyleSelector.cpp:
        (WebCore::loadDefaultStyle): adjust default stylesheet
        * platform/qt/RenderThemeQt.cpp:
        (WebCore::RenderTheme::adjustDefaultStyleSheet): Qt adjustments
        * platform/qt/WebCoreResources.qrc: Added.
        * platform/qt/html4-adjustments-qt.css: Added.
        * rendering/RenderTheme.cpp: Default adjustments (none)
        * rendering/RenderTheme.h:

2008-06-02  Siraj Razick  <siraj.razick@collabora.co.uk>

        Reviewed by Simon

        Allow button fonts to scale based on the text size multiplier.

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

        * platform/qt/RenderThemeQt.cpp:
        (WebCore::RenderThemeQt::adjustButtonStyle):

2008-06-01  Rob Buis  <buis@kde.org>

        Reviewed by Darin.

        https://bugs.webkit.org/show_bug.cgi?id=15823
        getPropertyValue for border returns null, should compute the shorthand value

        Compute the value for the border shorthand property by computing
        its shorthand subproperties.

        Test: fast/css/getPropertyValue-border.html

        * css/CSSMutableStyleDeclaration.cpp:
        (WebCore::CSSMutableStyleDeclaration::getPropertyValue):
        (WebCore::CSSMutableStyleDeclaration::getCommonValue):
        * css/CSSMutableStyleDeclaration.h:

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

        Reviewed by Darin Adler.

        - fix https://bugs.webkit.org/show_bug.cgi?id=19344
          <rdar://problem/5977300> Regression: Shadow offsets seem to have changed in 10.5.3 in canvas

        Test: fast/canvas/shadow-offset.html

        * html/CanvasRenderingContext2D.cpp:
        (WebCore::CanvasRenderingContext2D::applyShadow): Slightly increase the
        magnitude of the offsets passed to CGContextSetShadow* to ensure that
        the end result after truncation is the desired integer offsets. This is
        the same workaround for <rdar://problem/5539388> that is used in
        GraphicsContext::setShadow(). Also correct a recent regression where
        shadow Y offsets were flipped.

2008-05-31  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Sam.

        - avoid assertion in updateDocument() when running debug

        * bindings/js/kjs_proxy.cpp:
        (WebCore::KJSProxy::updateDocument): Exit early if the document is null. We
        don't need to update in this case.

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

        Reviewed by Darin Adler.

        - fix https://bugs.webkit.org/show_bug.cgi?id=19278
          <rdar://problem/5968621> REGRESSION (r31114-r31132): image float disappears on refresh

        Test: fast/dynamic/float-in-trailing-whitespace-after-last-line-break.html

        * rendering/bidi.cpp:
        (WebCore::RenderBlock::layoutInlineChildren): Ensured that floats
        occurring in trailing whitespace after a line break are added to the
        last line's floats vector.

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

        Implements the back and forward buttons in the Scripts panel.

        Reviewed by Adam Roben.

        * page/inspector/ScriptsPanel.js:
        (WebInspector.ScriptsPanel): Add the back and forward button elements
        and remove the FIXMEs.
        (WebInspector.ScriptsPanel.prototype.reset): Reset _backForwardList
        and _currentBackForwardIndex. Then call _updateBackAndForwardButtons().
        (WebInspector.ScriptsPanel.prototype._showScriptOrResource):
        Added a fromBackForwardAction argument. If fromBackForwardAction is false
        then update the _currentBackForwardIndex and _backForwardList.
        (WebInspector.ScriptsPanel.prototype._updateBackAndForwardButtons):
        Update the disabled state of the buttons.
        (WebInspector.ScriptsPanel.prototype._goBack): Update the _currentBackForwardIndex
        and call _showScriptOrResource() and _updateBackAndForwardButtons().
        (WebInspector.ScriptsPanel.prototype._goForward): Ditto.

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

        Made clicking a Console message URL originating from a JavaScript
        source show the Resource in the Scripts panel. This only happens
        when the debugger is attached.

        Reviewed by Adam Roben.

        * page/inspector/Console.js:
        (WebInspector.Console.prototype._formaterror):
        Add a preferredPanel of "scripts".
        (WebInspector.ConsoleMessage.prototype.toMessageElement):
        Add a preferredPanel of "scripts" when the source is JS.
        * page/inspector/ScriptView.js:
        (WebInspector.ScriptView.prototype.highlightLine): Added.
        Calls through to the sourceFrame. Matches SourceView.
        * page/inspector/ScriptsPanel.js:
        (WebInspector.ScriptsPanel.prototype.canShowResource): Added.
        Returns true if the debugger is attached and the resource has scripts.
        (WebInspector.ScriptsPanel.prototype._showScriptOrResource): Call
        highlightLine on the view.
        * page/inspector/inspector.js:
        (WebInspector.documentClick): Pass the preferredPanel to showResourceForURL.
        (WebInspector.showResourceForURL): Resolve the preferredPanel from the string
        passed in. Checks if the panel implements showResource and canShowResource.
        Reverts to the Resources panel if any of that is false or not implemented.

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

        Fixed an "undefined type" exception that was being thrown when
        selecting a eval script from the file menu in the Scripts panel.
        This would also happen when stepping into an eval which would
        break other parts of the Inspector interface.

        Reviewed by Adam Roben.

        * page/inspector/ScriptsPanel.js:
        (WebInspector.ScriptsPanel.prototype._showScriptOrResource):
        Use the scriptOrResource variable instead of the undefined script variable.

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

        Made the starting line number of scripts be 1-based throughout the engine.
        This cleans up script line numbers so they are all consistent now and fixes
        some cases where script execution was shown as off by one line in the debugger.

        Doing this also exposed a bug where JSLazyEventListener created in XHML or SVG
        documents would always have a line number of 0. So this change fixed that bug
        to pass all the SVG and XHTML tests.

        All layout tests pass.

        Reviewed by Oliver Hunt.

        * bindings/js/kjs_events.cpp:
        (WebCore::JSLazyEventListener::JSLazyEventListener): Set the line number to 1
        if it was passed in as 0. This can happen when listeners are created with
        a setAttribute call from JavaScript.
        (WebCore::JSLazyEventListener::parseCode): Add a FIXME about the URL being
        incorrect when listeners are created with a setAttribute call from JavaScript.
        * bindings/js/kjs_events.h: Remove the default value for lineNumber, since no
        callers need it.
        * bindings/objc/WebScriptObject.mm:
        (-[WebScriptObject evaluateWebScript:]): Pass a line number of 1 instead of 0
        to Interpreter::evaluate().
        * bridge/NP_jsobject.cpp:
        (_NPN_Evaluate): Ditto.
        * bridge/jni/jni_jsobject.mm:
        (JavaJSObject::eval): Ditto.
        * dom/XMLTokenizer.cpp:
        (WebCore::XMLTokenizer::startElementNs): Call KJSProxy::setEventHandlerLineno()
        around the call to handleElementAttributes, so any JSLazyEventListener created
        from those attributes have line numbers.
        (WebCore::XMLTokenizer::endElementNs): Remove a minus 1 of the line number.
        (WebCore::XMLTokenizer::notifyFinished): Pass a line number of 1 instead of 0.
        (WebCore::XMLTokenizer::parseEndElement): Remove a minus 1 of the line number.
        * html/HTMLScriptElement.cpp:
        (WebCore::HTMLScriptElement::evaluateScript): Add a FIXME about the starting
        line number being incorrect in some cases when this function is called.
        * html/HTMLTokenizer.cpp:
        (WebCore::HTMLTokenizer::parseSpecial): Add a plus 1 to the line number when
        setting scriptStartLineno so it is 1-based. Same for calling setEventHandlerLineno().
        (WebCore::HTMLTokenizer::processToken): Ditto.
        * html/HTMLTokenizer.h: Change the default line number on scriptExecution() to 1 from 0.
        * loader/FrameLoader.cpp:
        (FrameLoader::executeIfJavaScriptURL): Pass a line number of 1 instead of 0 to executeScript().

2008-05-30  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Oliver (earlier version reviewed by Alexey).

        - speculative fix for "REGRESSION(r34143?): Frequent crash while browsing"
        https://bugs.webkit.org/show_bug.cgi?id=19285
        
        ("This Time for Sure" Edition)

        I'm pretty sure this fixes it but I have not been able to
        reproduce and am unsure if my theory of the bug is right.

        I belive the bug was because JSDOMWindowBase accessed
        JSDOMWindowShell in its destructor to remove itself from a
        hashtable, but GC destructor order is not guaranteed, so the
        hashtable may have been freed already. This patch changes things
        so that a non-GC object (the KJSProxy) does the tracking of live
        window objects for a frame. JSDOMWindowBase can null check the frame
        pointer to verify if it is still good.
        
        In addition, we must create a similar setup between DOMWindow and
        Frame; since the DOMWindow of a given frame can now change over
        time, we must ensure that the Frame disconnects every live
        DOMWindow when destroyed, not just the last.

        * bindings/js/JSDOMWindowBase.cpp:
        (WebCore::JSDOMWindowBase::~JSDOMWindowBase):
        * bindings/js/JSDOMWindowShell.cpp:
        (WebCore::JSDOMWindowShell::JSDOMWindowShell):
        * bindings/js/JSDOMWindowShell.h:
        (WebCore::JSDOMWindowShell::setWindow):
        * bindings/js/kjs_proxy.cpp:
        (WebCore::KJSProxy::clear):
        (WebCore::KJSProxy::initScript):
        (WebCore::KJSProxy::updateDocument):
        * bindings/js/kjs_proxy.h:
        (WebCore::KJSProxy::clearFormerWindow):
        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::~DOMWindow):
        * page/Frame.cpp:
        (WebCore::Frame::~Frame):
        (WebCore::Frame::setDocument):
        (WebCore::Frame::clearDOMWindow):
        (WebCore::Frame::clearFormerDOMWindow):
        * page/Frame.h:
        * page/FramePrivate.h:

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

        Reviewed by Darin Adler and Dave Hyatt.

        - eliminate excessive repainting when an object's final position
          after layout is unchanged

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::layoutBlockChildren): Removed the full repaint
        for the case that the final position is unchanged but the position at
        which an intermediate layout occurred was different. Any repainting
        done during the intermediate layout would have happened at the object's
        initial (and also final) coordinates, since layoutDelta is factored
        into repaint rect calculations.

2008-05-30  Chris Fleizach  <cfleizach@apple.com>

        Reviewed by Beth Dakin.

        <rdar://problem/5959478> r34079: AX: crash at stringForReplacedNode

        * page/AccessibilityObject.cpp:
        (WebCore::stringForReplacedNode):

2008-05-30  Tor Arne Vestbø  <tavestbo@trolltech.com>

        Reviewed by Simon.

        Fix the build dependencies for the Qt build. Don't generate
        SVGCSSPropertyNames.cpp for every build.

        * WebCore.pro: The output file was renamed, so the compiler rule needs
        to be adjusted in order for qmake to generate correct depdencies.

2008-05-30  Maciej Stachowiak  <mjs@apple.com>

        Revert fix for 19285, it just caused more crashes and I need time
        to fix it properly.

        * bindings/js/JSDOMWindowBase.cpp:
        (WebCore::JSDOMWindowBase::~JSDOMWindowBase):
        * bindings/js/JSDOMWindowShell.cpp:
        (WebCore::JSDOMWindowShell::JSDOMWindowShell):
        (WebCore::JSDOMWindowShell::updateDocument):
        * bindings/js/JSDOMWindowShell.h:
        (WebCore::JSDOMWindowShell::setWindow):
        (WebCore::JSDOMWindowShell::clearFormerWindow):
        * bindings/js/kjs_proxy.cpp:
        (WebCore::KJSProxy::clear):
        (WebCore::KJSProxy::initScript):
        * bindings/js/kjs_proxy.h:
        * page/Frame.cpp:
        (WebCore::Frame::setDocument):

2008-05-30  Adam Treat  <treat@kde.org>

        Reviewed by Simon.

        Fix a huge memory leak by ensuring that on application shutdown
        the shared timer is fired one last time if it is active. This
        ensures that the GCController timer is fired at the end to free
        references to JavaScript objects.

        * platform/qt/SharedTimerQt.h:
        (WebCore::SharedTimerQt::cleanup):
        (WebCore::SharedTimerQt::inst):

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

        Reviewed by Darin.

        http://bugs.webkit.org/show_bug.cgi?id=7466
        <rdar://problem/4657563> Use of Ctrl as access key modifier conflicts with Mac OS X
        emacs-style keybindings

        * page/EventHandler.cpp:
        (WebCore::EventHandler::handleAccessKey): Use Ctrl+Option for access keys on Mac OS X.

2008-05-30  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Alexey.
        
        - speculative fix for "REGRESSION(r34143?): Frequent crash while browsing"
        https://bugs.webkit.org/show_bug.cgi?id=19285

        I'm pretty sure this fixes it but I have not been able to
        reproduce and am unsure if my theory of the bug is right.

        I belive the bug was because JSDOMWindowBase accessed
        JSDOMWindowShell in its destructor to remove itself from a
        hashtable, but GC destructor order is not guaranteed, so the
        hashtable may have been freed already. This patch changes things
        so that a non-GC object (the KJSProxy) does the tracking of live
        window objects for a frame. JSDOMWindowBase can null check the frame
        pointer to verify if it is still good.
        
        * bindings/js/JSDOMWindowBase.cpp:
        (WebCore::JSDOMWindowBase::~JSDOMWindowBase):
        * bindings/js/JSDOMWindowShell.cpp:
        (WebCore::JSDOMWindowShell::JSDOMWindowShell):
        * bindings/js/JSDOMWindowShell.h:
        (WebCore::JSDOMWindowShell::setWindow):
        * bindings/js/kjs_proxy.cpp:
        (WebCore::KJSProxy::clear):
        (WebCore::KJSProxy::initScript):
        (WebCore::KJSProxy::updateDocument):
        * bindings/js/kjs_proxy.h:
        (WebCore::KJSProxy::clearFormerWindow):
        * page/Frame.cpp:
        (WebCore::Frame::setDocument):

2008-05-29  Chris Fleizach  <cfleizach@apple.com>

        Reviewed by Darin Adler.

        <rdar://problem/4783102> Radio button/checkbox embedded with <label> tag should combine the text and the label as a single element
        <rdar://problem/5091386> Seed: VO reads form labels twice in Safari

        * page/AccessibilityObject.cpp:
        (WebCore::AccessibilityObject::titleUIElement):
        * page/AccessibilityObject.h:
        (WebCore::AccessibilityObject::isControl):
        * page/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::isControl):
        (WebCore::AccessibilityRenderObject::labelElementContainer):
        (WebCore::AccessibilityRenderObject::title):
        (WebCore::AccessibilityRenderObject::checkboxOrRadioRect):
        (WebCore::AccessibilityRenderObject::elementRect):
        (WebCore::AccessibilityRenderObject::titleUIElement):
        (WebCore::AccessibilityRenderObject::accessibilityIsIgnored):
        (WebCore::AccessibilityRenderObject::roleValue):
        * page/AccessibilityRenderObject.h:
        * page/mac/AccessibilityObjectWrapper.mm:
        (-[AccessibilityObjectWrapper accessibilityAttributeNames]):
        (-[AccessibilityObjectWrapper accessibilityAttributeValue:]):

2008-05-29  Timothy Hatcher  <timothy@apple.com>

        Fixes the regression where image resources don't have a preview icon.

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

        Reviewed by Adam Roben.

        * page/inspector/ResourcesPanel.js:
        (WebInspector.ResourceSidebarTreeElement): Call createIconElement before
        calling the superclass.
        (WebInspector.ResourceSidebarTreeElement.prototype.createIconElement):
        Create an iconElement, if the category is images then make a div that
        contains a preview image. Otherwise just make an img element. If there
        was a previous iconElement, then replace it.
        (WebInspector.ResourceSidebarTreeElement.prototype.refresh): Call
        createIconElement if the category changed.
        * page/inspector/SidebarTreeElement.js:
        (WebInspector.SidebarTreeElement): Create an iconElement if one hasn't
        been made already by a subclass.
        (WebInspector.SidebarTreeElement.prototype.onattach): Append the iconElement
        instead of creating one each time.
        * page/inspector/inspector.css: New and updated style rules.

2008-05-29  Timothy Hatcher  <timothy@apple.com>

        Removes a use of the internal _childrenListNode property by adding
        a getter/setter for smallChildren to SidebarSectionTreeElement.

        Reviewed by Adam Roben.

        * page/inspector/ResourcesPanel.js:
        (WebInspector.ResourcesPanel.prototype._toggleLargerResources):
        Toggle smallChildren on the resourcesTreeElement instead of setting
        the style class directly.
        * page/inspector/SidebarTreeElement.js:
        (WebInspector.SidebarSectionTreeElement.prototype.smallChildren):
        Sets or removes the small class on the _childrenListNode.

2008-05-29  Timothy Hatcher  <timothy@apple.com>

        Fixes a bug where the className would be reset for Resource
        tree elements and the selected state would be lost. This could
        happen when sorting the resources.

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

        Reviewed by Adam Roben.

        * page/inspector/ResourcesPanel.js:
        (WebInspector.ResourceSidebarTreeElement.prototype.refresh): Call
        removeMatchingStyleClasses to remove previous category classes instead
        of setting the whole className directly.
        * page/inspector/utilities.js:
        (Element.prototype.removeStyleClass): Moved code to
        removeMatchingStyleClasses and call removeMatchingStyleClasses.
        (Element.prototype.removeMatchingStyleClasses): Added. Code moved from
        removeStyleClass and don't escape the string.

2008-05-29  David Hyatt  <hyatt@apple.com>

        Improve the performance of the GUIMark benchmark by 2x in the CoreGraphics code path.

        Whenever a foreground image changes size rapidly, we will now dynamically shift into rendering it
        using low quality scaling.  Once the animation completes, the image will repaint at high quality.
        Scaled images will still render at high quality by default, only shifting into low quality if
        the scale factor is rapidly changing.  This change raises GUIMark from 21fps to 34fps on my machine.

        Rewrite the Image draw method to avoid the use of throwaway CG subimages.  Instead the entire image is
        always drawn (with the appropriate clip and scale set up to make sure the correct subimage portion shows up
        in the destination rect).  This change raises GUIMark from 34fps to 43fps on my machine.

        Reviewed by Darin

        * platform/graphics/GraphicsContext.cpp:
        (WebCore::GraphicsContext::drawImage):
        * platform/graphics/cg/ImageCG.cpp:
        (WebCore::BitmapImage::draw):
        * rendering/RenderImage.cpp:
        (WebCore::RenderImageScaleData::RenderImageScaleData):
        (WebCore::RenderImageScaleData::~RenderImageScaleData):
        (WebCore::RenderImageScaleData::size):
        (WebCore::RenderImageScaleData::time):
        (WebCore::RenderImageScaleData::useLowQualityScale):
        (WebCore::RenderImageScaleData::hiqhQualityRepaintTimer):
        (WebCore::RenderImageScaleData::setSize):
        (WebCore::RenderImageScaleData::setTime):
        (WebCore::RenderImageScaleData::setUseLowQualityScale):
        (WebCore::RenderImageScaleObserver::shouldImagePaintAtLowQuality):
        (WebCore::RenderImageScaleObserver::imageDestroyed):
        (WebCore::RenderImageScaleObserver::highQualityRepaintTimerFired):
        (WebCore::RenderImage::highQualityRepaintTimerFired):
        (WebCore::RenderImage::~RenderImage):
        (WebCore::RenderImage::paintReplaced):
        * rendering/RenderImage.h:

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

        Reviewed by Eric.

        <rdar://problem/5847330> REGRESSION CrashTracer: [USER] 536 crashes at WebCore::highestAncestor

        * editing/CompositeEditCommand.cpp:
        (WebCore::CompositeEditCommand::breakOutOfEmptyListItem): Don't break out of an empty
        list item if its parent is non-editable, since doing so will move into non-editable content.
        * editing/DeleteSelectionCommand.cpp:
        (WebCore::DeleteSelectionCommand::initializePositionData): We want to prevent merges from
        table cells even if those table cells are non-editable.
        * editing/htmlediting.cpp:
        (WebCore::enclosingNodeOfType): Can now return non-editable nodes, for cases where the caller 
        isn't going to do editing in the returned node.
        * editing/htmlediting.h:

2008-05-29  Anders Carlsson  <andersca@apple.com>

        Reviewed by Mitz.

        <rdar://problem/5971845>
        https://bugs.webkit.org/show_bug.cgi?id=19313
        Add version member to NPCocoaEvent
        
        * bridge/npapi.h:

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

        Reviewed by Adam Roben.

        <rdar://problem/5960682> REGRESSION(r30535): Crashes on iExploder in checkForHeadCharset().

        I don't see how to make a reliable test, but iExploder catches this quickly.

        * loader/TextResourceDecoder.cpp:
        (WebCore::TextResourceDecoder::checkForHeadCharset): Correct the length passed to
        findIgnoringCase().

2008-05-29  Peter Kasting  <pkasting@google.com>

        Reviewed by Dave Hyatt.

        https://bugs.webkit.org/show_bug.cgi?id=19273
        Handle looping GIFs correctly (at least in the open source GIF decoder) even when
        the loop count doesn't appear in the initial data packets.

        * platform/graphics/BitmapImage.cpp:
        (WebCore::BitmapImage::cacheFrame):
        (WebCore::BitmapImage::startAnimation):
        (WebCore::BitmapImage::advanceAnimation):
        * platform/image-decoders/gif/GIFImageDecoder.cpp:
        (WebCore::GIFImageDecoder::GIFImageDecoder):
        (WebCore::GIFImageDecoder::repetitionCount):
        (WebCore::GIFImageDecoder::gifComplete):
        * platform/image-decoders/gif/GIFImageDecoder.h:

2008-05-29  Brent Fulgham  <bfulgham@gmail.com>

        Reviewed by Alp Toker.

        http://bugs.webkit.org/show_bug.cgi?id=19284
        Correct Windows (Cairo) Build Regressions

        Correct small Windows (Cairo) build regressions in recent updates.

        * platform/graphics/SimpleFontData.h:  Correct build regression due
          to r32781 (additional use of m_syntheticBoldOffset in GDI code).
        * platform/graphics/cairo/GraphicsContextPlatformPrivateCairo.h:
          Correct build regression due to r31830 (change of clip signature
          to use FloatRect rather than IntRect).
        * platform/graphics/win/SimpleFontDataCairoWin.cpp:
        (WebCore::SimpleFontData::platformInit):  Initialize
        m_syntheticBoldOffset
        * platform/image-decoders/jpeg/JPEGImageDecoder.cpp:
        (WebCore::JPEGImageReader::JPEGImageReader):  Work around build
          error due to warnings about _setjmp treated as errors.
        * platform/image-decoders/png/PNGImageDecoder.cpp:  Work around
          build error due to warnings about _setjmp treated as errors.
        * platform/network/curl/ResourceHandleCurl.cpp:  Correct build error
          due to different order (and content) of include files when building
          with CoreFoundation (but not CoreGraphics).
        * platform/network/curl/ResourceHandleManager.cpp:
        (WebCore::ResourceHandleManager::setupPOST):  Correct build error
          due to Visual Studio compiler bug.

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

        Reviewed by Darin.

        https://bugs.webkit.org/show_bug.cgi?id=19215
        REGRESSION: transformToDocument fails when xsl includes &#160;

        Test: fast/xsl/nbsp-in-stylesheet.html

        * editing/markup.cpp:
        (WebCore::appendAttributeValue):
        (WebCore::appendEscapedContent):
        (WebCore::escapeContentText):
        (WebCore::appendQuotedURLAttributeValue):
        (WebCore::appendNamespace):
        (WebCore::appendStartMarkup):
        (WebCore::appendDocumentType):
        (WebCore::createMarkup):
        Only escape non-breaking spaces in HTML documents. In Firefox, this behavior is also limited
        to innerHTML, but we don't have a separate code path for it, and do not necessarily want to.

        * page/Frame.cpp:
        (WebCore::Frame::documentTypeString):
        * dom/CDATASection.cpp:
        * dom/CDATASection.h:
        * dom/Comment.cpp:
        * dom/Comment.h:
        * dom/DocumentType.cpp:
        * dom/DocumentType.h:
        * dom/ProcessingInstruction.cpp:
        * dom/ProcessingInstruction.h:
        While at it, I also wanted to fix escaping for these nodes, but it turned out that FIXMEs were
        incorrect. So, I just moved their serialization to markup.cpp for consistency.

2008-05-29  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Dave Hyatt.

        - speed up DHTML using lazy style resolution and renderer creation

        This change introduces the concept of "lazy attach" - when a node
        is lazy attached, then instead of resolving style and creating a
        renderer right away, we just mark it as needing a style recalc.
        
        The patch makes use of this mechanism when inserting nodes directly
        using DOM APIs from script. For now this is only done for the
        JavaScript language binding but could also be done for other
        bindings in the future.
        
        Lazy attach helps some common DHTML patterns - when a node is
        added to the DOM, and then subsequently changed in a
        style-affecting way, this causes an extra style recalc. This is a
        fairly common pattern so it is better to be lazy.
        
        * bindings/js/JSNodeCustom.cpp:
        (WebCore::JSNode::insertBefore): Request lazy attach.
        (WebCore::JSNode::replaceChild): ditto
        (WebCore::JSNode::appendChild): ditto
        * dom/ContainerNode.cpp:
        (WebCore::ContainerNode::insertBefore): Support lazy attach.
        (WebCore::ContainerNode::replaceChild): ditto
        (WebCore::ContainerNode::appendChild): ditto
        (WebCore::ContainerNode::detach): Clear "changed child" bit if still set.
        * dom/ContainerNode.h:
        * dom/Element.cpp:
        (WebCore::Element::recalcStyle): Adjusted to properly reattach a
        lazy-attached node.
        * dom/Node.cpp:
        (WebCore::Node::insertBefore): Extra parameter for lazy attach
        (still doesn't do anything).
        (WebCore::Node::replaceChild): ditto
        (WebCore::Node::appendChild): ditto
        (WebCore::Node::setChanged): Unrelated but obvious optimization -
        stop marking ancestor as having a changed child once we already reach
        an ancestor so marked.
        (WebCore::outermostLazyAttachedAncestor): Helper function for lazyAttach.
        (WebCore::Node::lazyAttach): Implement lazy attach.
        (WebCore::Node::canLazyAttach): Virtual method - true for most nodes.
        * dom/Node.h:
        * dom/Text.cpp:
        (WebCore::Text::recalcStyle): Properly handle the case of a reattached node.
        * html/HTMLEmbedElement.h:
        (WebCore::HTMLEmbedElement::canLazyAttach): Refuse lazy attach, since
        plugins and frames do important work at rederer creation time.
        * html/HTMLFrameElementBase.h:
        (WebCore::HTMLFrameElementBase::canLazyAttach): Refuse lazy attach, since
        plugins and frames do important work at rederer creation time.
        * html/HTMLFrameSetElement.cpp:
        (WebCore::HTMLFrameSetElement::recalcStyle): Change order so that
        reattach works properly.
        * html/HTMLObjectElement.h:
        (WebCore::HTMLObjectElement::canLazyAttach): Refuse lazy attach, since
        plugins and frames do important work at rederer creation time.
        * html/HTMLOptGroupElement.cpp:
        (WebCore::HTMLOptGroupElement::insertBefore): Pass along extra param.
        (WebCore::HTMLOptGroupElement::replaceChild): ditto
        (WebCore::HTMLOptGroupElement::appendChild): ditto
        * html/HTMLOptGroupElement.h:
        * html/HTMLSelectElement.cpp:
        (WebCore::HTMLSelectElement::insertBefore): Pass along extra param.
        (WebCore::HTMLSelectElement::replaceChild): ditto
        (WebCore::HTMLSelectElement::appendChild): ditto
        * html/HTMLSelectElement.h:
        * svg/SVGLocatable.cpp:
        (WebCore::SVGLocatable::getBBox): Add missing updateLayout call.
        * svg/SVGTextContentElement.cpp:
        (WebCore::SVGTextContentElement::getNumberOfChars): ditto
        (WebCore::SVGTextContentElement::getComputedTextLength): ditto
        (WebCore::SVGTextContentElement::getSubStringLength): ditto
        (WebCore::SVGTextContentElement::getStartPositionOfChar): ditto
        (WebCore::SVGTextContentElement::getEndPositionOfChar): ditto
        (WebCore::SVGTextContentElement::getExtentOfChar): ditto
        (WebCore::SVGTextContentElement::getRotationOfChar): ditto
        (WebCore::SVGTextContentElement::getCharNumAtPosition): ditto

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

        <rdar://problem/5957036> REGRESSION (r31960): 20-30% slowdown in i-Bench JavaScript test on XP Home
        Conditionalize the timer latency change (r31960) only for vista since it does not
        help xp anyway.

        Reviewed by Steve Falkenburg.

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

2008-05-28  Anders Carlsson  <andersca@apple.com>

        Build fix.
        
        * storage/LocalStorage.cpp:
        (WebCore::LocalStorage::scheduleImport):

2008-05-28  Anders Carlsson  <andersca@apple.com>

        Reviewed by Tim.

        <rdar://problem/5965960>
        CrashTracer: [USER] 4 crashes in Safari at libxml2.2.dylib: xmlGenericErrorDefaultFunc + 76
        
        Turns out that while libxml has two different error callbacks, they both use the same context, so we need to 
        set both error callbacks to prevent one of the error callbacks from using the context as a FILE pointer.
        
        * xml/XSLStyleSheet.cpp:
        (WebCore::XSLStyleSheet::parseString):
        * xml/XSLTProcessor.cpp:
        (WebCore::XSLTProcessor::genericErrorFunc):
        (WebCore::docLoaderFunc):
        * xml/XSLTProcessor.h:

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

        Reviewed by Adam

        Fix hang I introduced to WebKit clients without their LocalStorage paths set
        Such as DRT...

        * storage/LocalStorage.cpp:
        (WebCore::LocalStorage::scheduleImport): Return a bool, namely to signify
          whether or not there is a LocalStorageThread to schedule the import on.
        * storage/LocalStorage.h:

        * storage/LocalStorageArea.cpp:
        (WebCore::LocalStorageArea::LocalStorageArea): If the scheduleImport failed,
          mark the imported flag as true so the LocalStorageArea doesn't wait around
          locking the main thread.

2008-05-28  Anthony Ricaud  <rik24d@gmail.com>

        User stylesheets are now non-editable and displayed as user-stylesheets

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

        Reviewed by Tim Hatcher.

        * English.lproj/localizedStrings.js: Added a string
        * page/inspector/StylesSidebarPane.js:

2008-05-28  Anders Carlsson  <andersca@apple.com>

        Reviewed by Mitz.

        <rdar://problem/5819989> 
        Crash in WebKit!KJS::Window::printErrorMessage quitting Safari after pop up window on uk.real.com was closed

        Add null check for Frame::settings().
        
        * bindings/js/JSDOMWindowBase.cpp:
        (WebCore::JSDOMWindowBase::printErrorMessage):

2008-05-27  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Tim Hatcher.

        Fixed https://bugs.webkit.org/show_bug.cgi?id=19183
        REGRESSION (r33979): Crash in DebuggerCallFrame::functionName when
        clicking button in returnEvent-crash.html
        
        Added implementations for willExecuteProgram and didExecuteProgram. They
        take care to update our call frame when entering and exiting programs,
        preventing us from keeping around a stale global frame after executing
        a program.
        
        eval programs now show up as "anonymous function" in a new scope. This
        is slightly better than what they used to do -- overwriting the current
        scope -- but obviously we can do better.

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

        Reviewed by Dan Bernstein

        <rdar://problem/5946834> - LocalStorage threads appearing in apps that don't want them.

        Decided to fix this bug from a few different avenues to make sure we only create LocalStorage resources
        when we *really* want them.

        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::localStorage): Account for the possibility that the LocalStorage object might be null.

        * storage/LocalStorage.cpp:
        (WebCore::LocalStorage::LocalStorage): Don't create the thread if there is no path name - we know we'll never
          be needing it when there is no file backing us on disk.
        (WebCore::LocalStorage::scheduleImport): Null check the thread, as it might not exist.
        (WebCore::LocalStorage::scheduleSync): Ditto

        * storage/LocalStorageThread.cpp:
        (WebCore::LocalStorageThread::localStorageThread): Clear the threadID after termination - clear way to signify
          that this thread is truly done.
        (WebCore::LocalStorageThread::scheduleImport): ASSERT that the queue is live, and the threadID exists
        (WebCore::LocalStorageThread::scheduleSync): Ditto
        (WebCore::LocalStorageThread::terminate): Don't schedule termination and wait for it to complete if the thread 
          isn't live.

2008-05-28  Alexander Vassilev  <avasilev@voipgate.com>

        Reviewed by Kevin Ollivier.

        Rescale image to fit the destination rect so that we don't get a crash when drawing
        in a destination rect that's bigger than the image rect. Also adds an optimization for
        drawing an image that is a solid color.
        
        https://bugs.webkit.org/show_bug.cgi?id=18465

        * platform/graphics/wx/ImageWx.cpp:
        (WebCore::BitmapImage::draw):

2008-05-27  Tor Arne Vestbø  <tavestbo@trolltech.com>

        Reviewed by Simon

        Close the video widget explicitly so we don't hang
        when exiting the application.

        * platform/graphics/qt/MediaPlayerPrivatePhonon.cpp:
        (WebCore::MediaPlayerPrivate::~MediaPlayerPrivate):

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

        Reviewed by Oliver.

        <rdar://problem/5803706> Pressing return at the end of a header doesn't break out of header (17460)
        
        It wasn't enough to break out of the header, to match other browsers we 
        also need to not preserve the typing style.

        * editing/InsertParagraphSeparatorCommand.cpp:
        (WebCore::InsertParagraphSeparatorCommand::applyStyleAfterInsertion):
        (WebCore::InsertParagraphSeparatorCommand::doApply):
        * editing/InsertParagraphSeparatorCommand.h:

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

        <rdar://problem/5966961> REGRESSION: Font previews in the Web
        Inspector always show in Lucida Grande (not the real font)

        Reviewed by Adam Roben.

        * page/inspector/FontView.js: Add a style element that loads the
        @font-face rule that is excepted by the preview element.

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

        Fixes a regression where the Image and Font preview views do not
        size correctly.

        <rdar://problem/5966723> REGRESSION (r33991): Image and font previews
        are shrunken and can't be made larger (19281)

        Reviewed by Adam Roben.

        * page/inspector/FontView.js: Adjust the font size based only on the
        container width minus padding.
        * page/inspector/inspector.css: Updated styles for the image and
        font views.

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

        Fix Bug 19276: XHR resources are classified as "Other" until Inspector
        is closed and reopened

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

        Reviewed by Tim Hatcher.

        * page/InspectorController.cpp:
        (WebCore::InspectorController::updateScriptResourceResponse): Moved
        code that updates the resource's type from here...
        (WebCore::InspectorController::updateScriptResourceType): ...to here.
        (WebCore::InspectorController::resourceRetrievedByXMLHttpRequest):
        Call updateScriptResourceType now that we know this resource was
        retrieved via an XHR.
        * page/InspectorController.h:

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

        Removes a redundant call to InspectorController::stopDebugging().

        Rubber-stamped by Adam Roben.

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

2008-05-27  Kevin McCullough  <kmccullough@apple.com>

        Reviewed by Tim.

        - Added and updated some manual test for the profiler.

        * manual-tests/inspector/profiler-test-anonymous-function-calls-eval.html:
        * manual-tests/inspector/profiler-test-apply.html:
        * manual-tests/inspector/profiler-test-call.html:
        * manual-tests/inspector/profiler-test-deep-recursion.html: Added.
        * manual-tests/inspector/profiler-test-simple-event-call.html: Added.

2008-05-27  Kevin Ollivier  <kevino@theolliviers.com>

        wx build fix. Accidently left a couple fixes out of the previous commit.

        * webcore-base.bkl:

2008-05-27  Kevin Ollivier  <kevino@theolliviers.com>

        wx build fix. Adding JSHTMLElementWrapperFactory.cpp.
        
        * WebCoreSources.bkl:

2008-05-27  Ariya Hidayat  <ariya.hidayat@trolltech.com>

        Reviewed by Simon.

        Fix linking error (missing gdi32 and user32 libraries).

        * WebCore.pro:

2008-05-27  Ariya Hidayat  <ariya.hidayat@trolltech.com>

        Reviewed by Simon.

        Update the WebKit.qrc so that Web Inspector is functional again.

        * page/inspector/WebKit.qrc:

2008-05-26  Alp Toker  <alp@nuanti.com>

        Reviewed by Anders.

        http://bugs.webkit.org/show_bug.cgi?id=16495
        [GTK] Accessibility support with ATK/AT-SPI

        Implement basic action, text and editable text accessibility.

        Provide utility functions to simplify const string return and casting
        and add some more stubs.

        It's now possible to navigate and manipulate forms and text using
        assistive technologies.

        * page/gtk/AccessibilityObjectWrapperAtk.cpp:
        (returnString):
        (core):
        * platform/gtk/LocalizedStringsGtk.cpp:
        (WebCore::AXButtonActionVerb):
        (WebCore::AXRadioButtonActionVerb):
        (WebCore::AXTextFieldActionVerb):
        (WebCore::AXCheckedCheckBoxActionVerb):
        (WebCore::AXUncheckedCheckBoxActionVerb):
        (WebCore::AXLinkActionVerb):
        (WebCore::imageTitle):

2008-05-25  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Anders.

        - bind the window's "document" and "window" properties to static slots
        1.7% speedup on Acid3 test 26
        
        Only the "document" part matters for Acid3, but since I was doing
        this anyway, "window" also seemed like a good one to optimize.

        * bindings/js/JSDOMWindowBase.cpp:
        (WebCore::JSDOMWindowBase::JSDOMWindowBase): Allocate variable
        slots for document and window; but just put null in the document
        slot for now.
        (WebCore::JSDOMWindowBase::updateDocument): Fill in the document
        slot.        
        (WebCore::JSDOMWindowBase::~JSDOMWindowBase): Make our shell stop
        tracking us.
        * bindings/js/JSDOMWindowBase.h:
        * bindings/js/JSDOMWindowShell.cpp:
        (WebCore::JSDOMWindowShell::JSDOMWindowShell): Allocate HashSet
        for our still-not-dead inner windows.
        (WebCore::JSDOMWindowShell::updateDocument): Update all our
        inner windows ever (to make sure the update to the document
        property shows up everywhere).
        * bindings/js/JSDOMWindowShell.h:
        (WebCore::JSDOMWindowShell::setWindow): Update our hash.
        (WebCore::JSDOMWindowShell::clearFormerWindow): Ditto.
        * bindings/js/JSDocumentCustom.cpp:
        (WebCore::toJS): Don't set self as a property map property of
        the window, this is no longer necessary.
        * bindings/js/kjs_proxy.cpp:
        (WebCore::KJSProxy::initScript): Update document for the
        newly created window.
        * bindings/js/kjs_proxy.h:
        * page/Frame.cpp:
        (WebCore::Frame::setDocument): If the document is not null,
        update our window.

2008-05-26  Anders Carlsson  <andersca@apple.com>

        Reviewed by Sam.

        This patch does two things:
        
        * It adds a toJSNewlyCreated function for creating JS wrappers for nodes where we know
        that the node doesn't have a wrapper. This avoids a hash lookup.
        
        * It adds toJSNewlyCreated methods for JSElement and JSText. 
        
        All in all this is a 4.3% speedup on Acid 3 test 26.
        
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSElementCustom.cpp:
        (WebCore::toJSNewlyCreated):
        * bindings/js/JSNodeCustom.cpp:
        (WebCore::createWrapper):
        (WebCore::toJSNewlyCreated):
        (WebCore::toJS):
        * bindings/js/JSTextCustom.cpp: Added.
        (WebCore::toJSNewlyCreated):
        * bindings/scripts/CodeGeneratorJS.pm:
        * dom/Document.idl:

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

        Reviewed by Anders Carlsson.

        Inline the getOwnPropertySlot for JSNode, JSEventTargetNode, JSElement,
        and JSDocument for a 1-2% speedup on Acid 3 test 26.

        * bindings/js/JSEventTargetNode.cpp:
        * bindings/js/JSEventTargetNode.h:
        (WebCore::JSEventTargetNode::getOwnPropertySlot):
        (WebCore::JSEventTargetNode::getValueProperty):
        (WebCore::JSEventTargetNode::put):
        (WebCore::JSEventTargetNode::putValueProperty):
        * bindings/scripts/CodeGeneratorJS.pm:
        * dom/Document.idl:
        * dom/Element.idl:
        * dom/Node.idl:

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

        Reviewed by Maciej.

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

        Removed code that would only useful if if there was any way to create an Entity
        node or if we populated EntityReference nodes. It's likely that we'll remove
        these node types entirely in some future version of WebKit, depending in part
        on what happens with these in HTML 5.

        1.8% speedup of Acid3 test 26.

        The only read-only nodes we ever create are EntityReference nodes.
        These are only created by explicit calls to the Document.createEntityReference
        function. Since the created nodes are read-only, there can be no children of
        these nodes, so no other types of nodes can be read-only despite the rule that
        makes descendants of Entity and EntityReference nodes read-only.

        * bindings/objc/DOM.mm: Removed unneeded include.

        * dom/Attr.cpp:
        (WebCore::Attr::setValue): Removed unnecessary isReadOnlyNode check.
        (WebCore::Attr::setNodeValue): Ditto.
        * dom/CharacterData.cpp:
        (WebCore::CharacterData::setData): Removed unnecessary isReadOnlyNode check.
        (WebCore::CharacterData::substringData): Don't initialize the ec variable before
        calling checkCharDataOperation, since that function already does it.
        (WebCore::CharacterData::appendData): Removed unnecessary isReadOnlyNode check.
        (WebCore::CharacterData::insertData): Don't initialize ec.
        (WebCore::CharacterData::deleteData): Ditto.
        (WebCore::CharacterData::replaceData): Ditto.
        (WebCore::CharacterData::setNodeValue): Removed now-misleading comment.
        (WebCore::CharacterData::checkCharDataOperation): Removed unnecessary
        isReadOnlyNode check.
        * dom/CharacterData.h: Made checkCharDataOperation private and non-virtual
        since it's never used or defined in any other class.

        * dom/Element.cpp:
        (WebCore::Element::setAttribute): Removed unneeded isReadOnlyNode check.

        * dom/Entity.cpp: Removed the entire contents of this file.

        * dom/Entity.h: Replaced the class with a stub -- just enough to keep the
        public bindings (JavaScript and Objective-C compiling), but the class is
        abstract and can't be instantianted.

        * dom/EntityReference.cpp: Removed unused constructor.
        (WebCore::EntityReference::cloneNode): Removed unneeded code and comments
        to clone nonexistent child nodes.
        * dom/EntityReference.h: Removed unused constructor and unnecessary override
        of childTypeAllowed, since no children are allowed at all.

        * dom/NamedAttrMap.cpp:
        (WebCore::NamedAttrMap::setNamedItem): Removed unneeded isReadOnlyNode check.
        (WebCore::NamedAttrMap::removeNamedItem): Ditto.
        * dom/NamedAttrMap.h: Removed isReadOnlyNode function.

        * dom/Node.cpp: Removed the old isReadOnlyNode function. It made lots of
        virtual nodeType function calls.
        * dom/Node.h:
        (WebCore::Node::isReadOnlyNode): Replaced the old virtual isReadOnlyNode
        function with a new simple non-virtual one.

        * dom/ProcessingInstruction.cpp:
        (WebCore::ProcessingInstruction::setData): Removed unneeded isReadOnlyNode
        check.

        * dom/Text.cpp:
        (WebCore::Text::splitText): Removed unneeded isReadOnlyNode check.
        (WebCore::Text::replaceWholeText): Removed unnecessary isReadOnlyNode assertion.
        There is no reason for this function to go out of its way to mention the
        read-only node issue when none of the other DOM mutation functions do.

2008-05-26  Adam Barth  <abarth@webkit.org>

        Reviewed by Sam.

        Cleanup SecurityOrigin::canAccess.  Removed comment referring to an
        old version of the code.  Removed some useless code.

        * platform/SecurityOrigin.cpp:
        (WebCore::SecurityOrigin::canAccess):

2008-05-26  Gwenole Beauchesne  <gbeauchesne@splitted-desktop.org>

        Reviewed by Alp Toker.

        * platform/gtk/LocalizedStringsGtk.cpp:
        (WebCore::contextMenuItemTagSelectAll): Fix GTK+ version check.

2008-05-25  Chris Fleizach  <cfleizach@apple.com>

        Reviewed by David Harrison

        <rdar://problem/3582905> elements on separate pages need to be distinct

        * page/AccessibilityListBox.h:
        * page/AccessibilityObject.h:
        (WebCore::AccessibilityObject::accessibilityShouldUseUniqueId):
        * page/AccessibilityRenderObject.cpp:
        * page/AccessibilityRenderObject.h:

2008-05-25  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Darin.

        - don't repaint nodes that are removed before layout
        4.3% speedup on Acid3 test 26

        Mitz points out the new flag can also be used to optimize other
        cases of needless repaint such as
        <https://bugs.webkit.org/show_bug.cgi?id=15129>.
        
        * rendering/RenderContainer.cpp:
        (WebCore::RenderContainer::removeChildNode): If the child has never had a layout,
        don't bother to repaint it, since there's nothing to dirty.
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::RenderObject): Initialize m_everHadLayout to false.
        (WebCore::RenderObject::setNeedsLayout): Set m_everHadLayout to true if we
        are being marked as not needing layout.
        * rendering/RenderObject.h:

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

        Reviewed by Darin Adler.

        - fix https://bugs.webkit.org/show_bug.cgi?id=19086
          <rdar://problem/5962254> REGRESSION (r28519-r28535): Caret doesn't paint past the right edge of a block

        Test: fast/repaint/caret-outside-block.html

        * editing/SelectionController.cpp:
        (WebCore::repaintRectForCaret): Restored this function which was removed
        in r28523, but changed it to inflate only the width.
        (WebCore::SelectionController::caretRepaintRect): Changed back to use
        repaintRectForCaret().
        (WebCore::SelectionController::recomputeCaretRect): Ditto.

2008-05-25  Marco Barisione  <marco.barisione@collabora.co.uk>

        Reviewed by Alp Toker.

        http://bugs.webkit.org/show_bug.cgi?id=18940
        [CURL] Allow \n as line terminator for headers

        The line terminator for message-header fields should be CRLF. However,
        it is recommended to recognise as a line terminator also a single LF.

        * platform/network/curl/ResourceHandleManager.cpp:
        (WebCore::headerCallback): Allow headers to be terminated by "\n" and
        not just by "\r\n".

2008-05-25  Jan Michael Alonzo  <jmalonzo@webkit.org>

        Reviewed by Alp Toker.

        WARNING: NO TEST CASES ADDED OR CHANGED

        http://bugs.webkit.org/show_bug.cgi?id=19142
        [Gtk] Remove build options --svg-experimental and --cross-document-messaging

        * GNUmakefile.am:

2008-05-24  Rob Buis  <buis@kde.org>

        Reviewed by Eric.

        https://bugs.webkit.org/show_bug.cgi?id=18927
        Unify path data debug output

        Implement unified path data output for Mac svg tests.

        * platform/graphics/cg/PathCG.cpp:
        (WebCore::CGPathToCFStringApplierFunction):
        (WebCore::CFStringFromCGPath):

2008-05-24  Timothy Hatcher  <timothy@apple.com>

        Fixes a huge leak with the Inspector where it was protecting
        a large object that was not being unprotected.

        <rdar://problem/5961999> Inspector protects a large JavaScript
        object and never unprotects it (large leak)

        Reviewed by Darin Adler.

        * page/InspectorController.cpp:
        (WebCore::InspectorController::inspectedPageDestroyed): Call close()
        and removed a call to stopDebugging() and moved it to close().
        (WebCore::InspectorController::close): Add stopDebugging() and
        stopUserInitiatedProfiling(). Removed an ASSERT and added an
        if statement before calling JSValueUnprotect. We don't always have
        a m_scriptContext and m_scriptObject.

2008-05-24  Alp Toker  <alp@nuanti.com>

        Win32/gcc3 build fix in Pango font backend. UChar needs to be
        explicitly cast to gunichar2.

        * platform/graphics/gtk/FontGtk.cpp:
        (WebCore::utf16_to_utf8):

2008-05-24  Timothy Hatcher  <timothy@apple.com>

        Fixes a crash where a new Inspector would get an old
        JSInspectedObjectWrapper for a user agent CSSStyleDeclaration.
        Since these style objects shared between pages, the wrapper cache
        would have a wrapper for the object still. But the wrapper was
        for a previous global object and with a disconnected frame. This
        fixes the wrapper cache so wrappers are remembered per global object
        and the object they are wrapping.

        <rdar://problem/5958567> repro crash in WebCore::Frame::keepAlive()
        opening inspector window after closing it

        Reviewed by Darin Adler.

        * bindings/js/JSInspectedObjectWrapper.cpp:
        (WebCore::wrappers): Return a GlobalObjectWrapperMap reference.
        (WebCore::JSInspectedObjectWrapper::wrap): Find the WrapperMap
        by the dynamicGlobalObject then find the wrapper for unwrappedObject.
        (WebCore::JSInspectedObjectWrapper::JSInspectedObjectWrapper): Changes
        how the wrapper is added to the wrapper cache.
        (WebCore::JSInspectedObjectWrapper::~JSInspectedObjectWrapper): Changes
        how the wrapper is removed from the wrapper cache.
        * bindings/js/JSQuarantinedObjectWrapper.h:
        (WebCore::JSQuarantinedObjectWrapper:unwrappedGlobalObject): Added.

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

        Reviewed by Maciej.

        Optimize Node::textContent() to avoid O(n^2) string appending behavior.

        1.6% speedup at Acid3 test 26.

        * WebCore.xcodeproj/project.pbxproj:
        * GNUmakefile.am:
        * WebCore.pro:
        * WebCoreSources.bkl:
        * WebCore.vcproj/WebCore.vcproj:
        * platform/text/StringBuilder.cpp: Added.
        (WebCore::StringBuilder::append):
        (WebCore::StringBuilder::toString):
        * platform/text/StringBuilder.h: Added.
        (WebCore::StringBuilder::StringBuilder):
        (WebCore::StringBuilder::isNull):
        Added a simple class to efficiently build a string by appending. Potentially, it can be
        extended to be more like java.lang.StringBuilder, but we don't need that much flexibility now.

        * dom/Node.cpp:
        (WebCore::Node::appendTextContent):
        (WebCore::Node::textContent):
        * dom/Node.h:
        Changed to use StringBuilder.

2008-05-24  Julien Chaffraix  <jchaffraix@webkit.org>

        Reviewed by Eric.

        Bug 9191: JS*ElementWrapperFactory should be autogenerated
        https://bugs.webkit.org/show_bug.cgi?id=9191

        This is a first pass for generation of JS*ElementWrapperFactory, in the long term we should move the make_names.pl
        intelligence to the *.in files.

        - Add a new parameter to make_names.pl --wrapperFactory which works like --wrapper but generates the
        JS*ElementWrapperFactory files.

        - Removed JS*ElementWrapperFactory files in WebCore/bindings/js, replaced by the generated ones.

        - Updated the build systems to account for the previous changes.

        * DerivedSources.make:
        * GNUmakefile.am:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * WebCoreSources.bkl:
        * bindings/js/JSHTMLElementWrapperFactory.cpp: Removed.
        * bindings/js/JSHTMLElementWrapperFactory.h: Removed.
        * bindings/js/JSSVGElementWrapperFactory.cpp: Removed.
        * bindings/js/JSSVGElementWrapperFactory.h: Removed.
        * dom/make_names.pl:

2008-05-24  Oleg Finkelshteyn <olegfink@gmail.com>

        Rubber-stamped and landed by Alexey.

        Build fix for gcc 4.3.

        * WebCore/page/Console.cpp:
        Add missing standard includes.

2008-05-23  Timothy Hatcher  <timothy@apple.com>

        Fixes a bug where a timer would keep firing after the Inspector
        was closed. It turns out this timer wasn't needed anymore now
        that we can add an event listener to the inspected page and have
        it get called in the Inspector's context.

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

        Reviewed by Mark Rowe.

        * page/inspector/ElementsPanel.js:

2008-05-23  Anthony Ricaud  <rik24d@gmail.com>

        Changes the largerResourcesButton tooltip to toggle.

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

        Reviewed by Tim Hatcher.

        * WebCore/English.lproj/localizedStrings.js: New string and clean an
        double string "Dock to main window."
        * WebCore/page/inspector/ResourcesPanel.js: Toggle the tooltip and
        change the default tooltip

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

        Reviewed by Darin.

        <rdar://problem/5939887> REGRESSION: With no selection, copy does not fire oncopy handler (affects CIFilterBrowser widget)
        
        Execute cut, copy and paste if they are invoked explicitly, via execCommand or -[WebView copy:], even
        if they are disabled.  This will fire oncopy, oncut and onpaste, but won't perform any other work, like
        writing to the pasteboard during cut/copy or deleting the selection during cut/paste.  This matches FF3,
        which actually goes further and fires oncopy on any Command-C.
        
        * editing/EditorCommand.cpp:
        (WebCore::CommandEntry::):
        (WebCore::Editor::Command::execute):

2008-05-23  Timothy Hatcher  <timothy@apple.com>

        Adds a percentage toggle button the profile view status bar that
        changes the time columns between absolute and percents.

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

        Reviewed by Kevin McCullough.

        * English.lproj/localizedStrings.js: New strings.
        * page/inspector/Images/percentButtons.png: Added.
        * page/inspector/ProfileView.js: Make the button and add it to the
        status bar. Make clicking toggle the showAsPercent* properties.
        * page/inspector/inspector.css: New styles.

2008-05-23  Timothy Hatcher  <timothy@apple.com>

        Fixes a bug where excluding nodes from the profile could
        show an empty parent node.

        <rdar://problem/5959573> Excluding nodes from the profile could show
        an empty parent node

        Reviewed by Kevin McCullough.

        * page/inspector/ProfileView.js: Only say we have children if
        all of our children nodes are visible.

2008-05-23  Anders Carlsson  <andersca@apple.com>

        Reviewed by Adam.

        Add IconFetcher to project.
        
        * WebCore.vcproj/WebCore.vcproj:

2008-05-23  Timothy Hatcher  <timothy@apple.com>

        Fixes a bug where the Web Insepctor would jump back to
        Elements each time it is opened instead of staying at the
        last selected panel.

        <rdar://problem/5959475> Inspector jumps to the Elements panel
        each time it is opened, instead of staying at the previous panel

        Reviewed by Adam Roben.

        * page/InspectorController.cpp:
        (WebCore::InspectorController::setWindowVisible): Reset
        m_showAfterVisible to CurrentPanel, so the next time setWindowVisible
        is called it will use CurrentPanel unless showPanel was called again.

2008-05-23  chris fleizach  <cfleizach@apple.com>

        Reviewed by Darin Adler.

        <rdar://problem/5933759> REGRESSION: Frames don't appear as AX children of the top level web area

        * page/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::accessibilityIsIgnored):

2008-05-23  Ariya Hidayat  <ariya.hidayat@trolltech.com>

        Reviewed by Simon.

        For Qt port, support painting to native Windows HDC.

        * platform/graphics/GraphicsContext.h:
        * platform/graphics/qt/GraphicsContextQt.cpp:
        (WebCore::GraphicsContext::getWindowsContext):
        (WebCore::GraphicsContext::releaseWindowsContext):

2008-05-23  Timothy Hatcher  <timothy@apple.com>

        Fixes a bug where the Inspector could have 0ms timers firing
        even after it is closed.

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

        Reviewed by Oliver Hunt.

        * page/inspector/DatabasesPanel.js: Removes setTimeouts that call
        the same function with a 0ms delay. These we not doing any good anyway,
        so they weren't needed and just caused problems.
        * page/inspector/ElementsPanel.js: Ditto.
        * page/inspector/ProfilesPanel.js: Ditto.
        * page/inspector/ResourcesPanel.js: Ditto.

2008-05-23  Timothy Hatcher  <timothy@apple.com>

        Make the Inspector correctly populate the profiles when
        closed and re-opened.

        Reviewed by Adam Roben.

        * page/InspectorController.cpp:
        (WebCore::InspectorController::populateScriptObjects): Call populateInterface
        in inspector.js.
        * page/inspector/ProfilesPanel.js:
        (WebInspector.ProfilesPanel.prototype.populateInterface): If visible,
        call _populateProfiles. Else just set this._shouldPopulateProfiles to true.
        (WebInspector.ProfilesPanel.prototype.reset): Don't call _populateProfiles.
        Just set this._shouldPopulateProfiles to true.
        (WebInspector.ProfilesPanel.prototype._populateProfiles): Delete
        this._shouldPopulateProfiles.
        * page/inspector/inspector.js:
        (WebInspector.populateInterface): Added. Call populateInterface on all the
        panels if they implement it.

2008-05-23  Kevin McCullough  <kmccullough@apple.com>

        RS = Adam.

        Editorial changes

        * manual-tests/inspector/profiler-test-apply.html:
        * manual-tests/inspector/profiler-test-document-dot-write.html:
        * manual-tests/inspector/profiler-test-execution-context-and-eval-on-same-line.html:
        * manual-tests/inspector/profiler-test-one-execution-context.html:
        * manual-tests/inspector/profiler-test-two-execution-contexts.html:

2008-05-23  Timothy Hatcher  <timothy@apple.com>

        Fixes the bug where the profile was not added when finished.

        <rdar://problem/5958851> Stop Profiling from the Develop menu does
        not add the Profile to the Inspector

        Reviewed by Adam Roben.

        * page/InspectorController.cpp:
        (WebCore::InspectorController::stopUserInitiatedProfiling): Call
        addProfile with the result of stopProfiling.

2008-05-23  Timothy Hatcher  <timothy@apple.com>

        Tweak the Web Insector toolbar look to be smaller when attached to
        the inspected page.

        Reviewed by Adam Roben.

        * page/inspector/inspector.css:

2008-05-23  Simon Hausmann  <hausmann@webkit.org>

        Fix compilation without accessibility by providing an empty stub for
        AXObjectCache::handleAriaRoleChanged.

        * page/AXObjectCache.h:

2008-05-23  Alice Liu  <alice.liu@apple.com>

        Reviewed by Mark Rowe.

        Remove call to function whose body was commented out. Returning the
        children for a menu button by the normal calculation works just as well. 

        * page/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::addChildren):
        * page/AccessibilityRenderObject.h:

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

        Fixes the bug where resource would show up multiple times in the
        Inspector. This happened when a resource was used multiple times or
        when the preloader was scanning ahead to fetch resources.

        <rdar://problem/5689373> Cached resources re-appear in Web Inspector
        for each access (18223)

        Reviewed by Adam Roben.

        * page/InspectorController.cpp:
        (WebCore::InspectorController::addResource): Add the URL to m_knownResources.
        (WebCore::InspectorController::removeResource): Remove the URL from m_knownResources
        (WebCore::InspectorController::didLoadResourceFromMemoryCache): If the URL
        is in m_knownResources, then early return.
        * page/InspectorController.h: Added m_knownResources.

2008-05-22  Alice Liu  <alice.liu@apple.com>

        Reviewed by Adele, Dan Bernstein.

        Fixed <rdar://problem/5943104> Need to implement ARIA role="menu" and related roles
        <rdar://problem/5943132> Need to implement ARIA role="menuitem"
        <rdar://problem/5943173> Need to implement ARIA role="menubar" 

        These changes added a handler for determining the ARIA role when the
        attribute changes.  Before we were querying for the attribute over and
        over every time we queried for the role.
        * dom/Element.cpp:
        (WebCore::Element::attributeChanged):
        * page/AXObjectCache.cpp:
        (WebCore::AXObjectCache::handleAriaRoleChanged):
        * page/AXObjectCache.h:

        The rest of these changes implement menu, menuitem, and menubar. the last 2 of those
        have to, for now, be represented as a Group and MenuButton instead, because AppKit 
        won't recognize menubar and menubaritems within apps. 
        * page/AccessibilityObject.h:
        (WebCore::AccessibilityObject::isMenuRelated):
        (WebCore::AccessibilityObject::isMenu):
        (WebCore::AccessibilityObject::isMenuBar):
        (WebCore::AccessibilityObject::isMenuButton):
        (WebCore::AccessibilityObject::isMenuItem):
        * page/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::AccessibilityRenderObject):
        (WebCore::AccessibilityRenderObject::parentObject):
        (WebCore::AccessibilityRenderObject::isMenuRelated):
        (WebCore::AccessibilityRenderObject::isMenu):
        (WebCore::AccessibilityRenderObject::isMenuBar):
        (WebCore::AccessibilityRenderObject::isMenuButton):
        (WebCore::AccessibilityRenderObject::isMenuItem):
        (WebCore::siblingWithAriaRole):
        (WebCore::AccessibilityRenderObject::menuElementForMenuButton):
        (WebCore::AccessibilityRenderObject::menuForMenuButton):
        (WebCore::AccessibilityRenderObject::menuItemElementForMenu):
        (WebCore::AccessibilityRenderObject::menuButtonForMenu):
        (WebCore::AccessibilityRenderObject::title):
        (WebCore::AccessibilityRenderObject::accessibilityShouldUseUniqueId):
        (WebCore::AccessibilityRenderObject::accessibilityIsIgnored):
        (WebCore::RoleEntry::):
        (WebCore::AccessibilityRenderObject::determineAriaRoleAttribute):
        (WebCore::AccessibilityRenderObject::setAriaRole):
        (WebCore::AccessibilityRenderObject::ariaRoleAttribute):
        (WebCore::AccessibilityRenderObject::addChildren):
        (WebCore::AccessibilityRenderObject::ariaMenuButtonChildren):
        * page/AccessibilityRenderObject.h:
        * page/mac/AccessibilityObjectWrapper.mm:
        (-[AccessibilityObjectWrapper accessibilityActionNames]):
        (-[AccessibilityObjectWrapper accessibilityAttributeNames]):
        (-[AccessibilityObjectWrapper roleDescription]):
        (-[AccessibilityObjectWrapper accessibilityAttributeValue:]):
        (-[AccessibilityObjectWrapper accessibilityParameterizedAttributeNames]):

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

        Make top-level resources show their full URLs again instead of just
        "/"

        Reviewed by Tim Hatcher.

        * page/inspector/Resource.js:
        (WebInspector.Resource.prototype.displayName): If the title has gotten
        down to just "/", which will happen for, e.g., http://webkit.org/,
        just show the entire URL.

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

        Shorten URLs shown in the Web Inspector to the file name. This makes
        finding files in the Console or the Scripts panel easier.

        Reviewed by Adam Roben.

        * page/inspector/Console.js:
        (WebInspector.ConsoleMessage.prototype.get shortURL): Removed dead code.
        (WebInspector.ConsoleMessage.prototype.toMessageElement): Call WebInspector.displayNameForURL
        for the URL before making the link element.
        * page/inspector/ProfileView.js:
        (WebInspector.ProfileDataGridNode.prototype.createCell): Use WebInspector.displayNameForURL.
        * page/inspector/Resource.js:
        (WebInspector.Resource.prototype.get displayName): Use trimURL to
        trim the URL with the main resource's domain.
        * page/inspector/ScriptsPanel.js:
        (WebInspector.ScriptsPanel.prototype._addScriptToFilesMenu): Use WebInspector.displayNameForURL.
        * page/inspector/StylesSidebarPane.js:
        (WebInspector.StylePropertiesSection): Ditto.
        * page/inspector/inspector.js:
        (WebInspector.displayNameForURL): Added.
        (WebInspector.resourceForURL): Check for a direct match in resourceURLMap first.

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

        Fix Bug 19204: Inspector should highlight source lines when following
        links to them

        <https://bugs.webkit.org/show_bug.cgi?id=19204>

        Reviewed by Tim Hatcher.

        Test: manual-tests/inspector/highlight-source-line.html

        * manual-tests/inspector/highlight-source-line.html: Added.
        * page/inspector/ResourcesPanel.js:
        (WebInspector.ResourcesPanel.prototype.showResource): Call
        highlightLine on the view if that function exists.
        * page/inspector/SourceFrame.js:
        (WebInspector.SourceFrame.prototype.highlightLine): Added. Adds the
        webkit-highlighted-line class to the relevant line, then removes it
        after a short delay.
        (WebInspector.SourceFrame.prototype._loaded): Added styles for the
        highlighted line(s).
        * page/inspector/SourceView.js:
        (WebInspector.SourceView.prototype.highlightLine): Added. Calls
        through to the SourceFrame.

2008-05-22  Rob Buis  <buis@kde.org>

        Reviewed by Eric.

        https://bugs.webkit.org/show_bug.cgi?id=12053
        SVGPathSeg*(Abs|Rel) classses should be combined to reduce code size

        Reduce code size through shared base classes.

        * svg/SVGPathSeg.h:
        (WebCore::SVGPathSegSingleCoord::SVGPathSegSingleCoord):
        (WebCore::SVGPathSegSingleCoord::setX):
        (WebCore::SVGPathSegSingleCoord::x):
        (WebCore::SVGPathSegSingleCoord::setY):
        (WebCore::SVGPathSegSingleCoord::y):
        (WebCore::SVGPathSegSingleCoord::toString):
        * svg/SVGPathSegArc.cpp:
        (WebCore::SVGPathSegArcAbs::SVGPathSegArcAbs):
        (WebCore::SVGPathSegArcRel::SVGPathSegArcRel):
        * svg/SVGPathSegArc.h:
        (WebCore::SVGPathSegArc::SVGPathSegArc):
        (WebCore::SVGPathSegArc::toString):
        (WebCore::SVGPathSegArc::setX):
        (WebCore::SVGPathSegArc::x):
        (WebCore::SVGPathSegArc::setY):
        (WebCore::SVGPathSegArc::y):
        (WebCore::SVGPathSegArc::setR1):
        (WebCore::SVGPathSegArc::r1):
        (WebCore::SVGPathSegArc::setR2):
        (WebCore::SVGPathSegArc::r2):
        (WebCore::SVGPathSegArc::setAngle):
        (WebCore::SVGPathSegArc::angle):
        (WebCore::SVGPathSegArc::setLargeArcFlag):
        (WebCore::SVGPathSegArc::largeArcFlag):
        (WebCore::SVGPathSegArc::setSweepFlag):
        (WebCore::SVGPathSegArc::sweepFlag):
        (WebCore::SVGPathSegArcAbs::create):
        (WebCore::SVGPathSegArcAbs::pathSegType):
        (WebCore::SVGPathSegArcAbs::pathSegTypeAsLetter):
        (WebCore::SVGPathSegArcRel::create):
        (WebCore::SVGPathSegArcRel::pathSegTypeAsLetter):
        * svg/SVGPathSegCurvetoCubic.cpp:
        (WebCore::SVGPathSegCurvetoCubicAbs::SVGPathSegCurvetoCubicAbs):
        (WebCore::SVGPathSegCurvetoCubicRel::SVGPathSegCurvetoCubicRel):
        * svg/SVGPathSegCurvetoCubic.h:
        (WebCore::SVGPathSegCurvetoCubic::SVGPathSegCurvetoCubic):
        (WebCore::SVGPathSegCurvetoCubic::toString):
        (WebCore::SVGPathSegCurvetoCubic::setX):
        (WebCore::SVGPathSegCurvetoCubic::x):
        (WebCore::SVGPathSegCurvetoCubic::setY):
        (WebCore::SVGPathSegCurvetoCubic::y):
        (WebCore::SVGPathSegCurvetoCubic::setX1):
        (WebCore::SVGPathSegCurvetoCubic::x1):
        (WebCore::SVGPathSegCurvetoCubic::setY1):
        (WebCore::SVGPathSegCurvetoCubic::y1):
        (WebCore::SVGPathSegCurvetoCubic::setX2):
        (WebCore::SVGPathSegCurvetoCubic::x2):
        (WebCore::SVGPathSegCurvetoCubic::setY2):
        (WebCore::SVGPathSegCurvetoCubic::y2):
        (WebCore::SVGPathSegCurvetoCubicAbs::create):
        (WebCore::SVGPathSegCurvetoCubicAbs::pathSegType):
        (WebCore::SVGPathSegCurvetoCubicAbs::pathSegTypeAsLetter):
        (WebCore::SVGPathSegCurvetoCubicRel::create):
        (WebCore::SVGPathSegCurvetoCubicRel::pathSegTypeAsLetter):
        * svg/SVGPathSegCurvetoCubicSmooth.cpp:
        (WebCore::SVGPathSegCurvetoCubicSmoothAbs::SVGPathSegCurvetoCubicSmoothAbs):
        (WebCore::SVGPathSegCurvetoCubicSmoothRel::SVGPathSegCurvetoCubicSmoothRel):
        * svg/SVGPathSegCurvetoCubicSmooth.h:
        (WebCore::SVGPathSegCurvetoCubicSmooth::SVGPathSegCurvetoCubicSmooth):
        (WebCore::SVGPathSegCurvetoCubicSmooth::toString):
        (WebCore::SVGPathSegCurvetoCubicSmooth::setX):
        (WebCore::SVGPathSegCurvetoCubicSmooth::x):
        (WebCore::SVGPathSegCurvetoCubicSmooth::setY):
        (WebCore::SVGPathSegCurvetoCubicSmooth::y):
        (WebCore::SVGPathSegCurvetoCubicSmooth::setX2):
        (WebCore::SVGPathSegCurvetoCubicSmooth::x2):
        (WebCore::SVGPathSegCurvetoCubicSmooth::setY2):
        (WebCore::SVGPathSegCurvetoCubicSmooth::y2):
        (WebCore::SVGPathSegCurvetoCubicSmoothAbs::create):
        (WebCore::SVGPathSegCurvetoCubicSmoothAbs::pathSegType):
        (WebCore::SVGPathSegCurvetoCubicSmoothAbs::pathSegTypeAsLetter):
        (WebCore::SVGPathSegCurvetoCubicSmoothRel::create):
        (WebCore::SVGPathSegCurvetoCubicSmoothRel::pathSegType):
        (WebCore::SVGPathSegCurvetoCubicSmoothRel::pathSegTypeAsLetter):
        * svg/SVGPathSegCurvetoQuadratic.cpp:
        (WebCore::SVGPathSegCurvetoQuadraticAbs::SVGPathSegCurvetoQuadraticAbs):
        (WebCore::SVGPathSegCurvetoQuadraticRel::SVGPathSegCurvetoQuadraticRel):
        * svg/SVGPathSegCurvetoQuadratic.h:
        (WebCore::SVGPathSegCurvetoQuadratic::SVGPathSegCurvetoQuadratic):
        (WebCore::SVGPathSegCurvetoQuadratic::toString):
        (WebCore::SVGPathSegCurvetoQuadratic::setX):
        (WebCore::SVGPathSegCurvetoQuadratic::x):
        (WebCore::SVGPathSegCurvetoQuadratic::setY):
        (WebCore::SVGPathSegCurvetoQuadratic::y):
        (WebCore::SVGPathSegCurvetoQuadratic::setX1):
        (WebCore::SVGPathSegCurvetoQuadratic::x1):
        (WebCore::SVGPathSegCurvetoQuadratic::setY1):
        (WebCore::SVGPathSegCurvetoQuadratic::y1):
        (WebCore::SVGPathSegCurvetoQuadraticAbs::create):
        (WebCore::SVGPathSegCurvetoQuadraticAbs::pathSegType):
        (WebCore::SVGPathSegCurvetoQuadraticAbs::pathSegTypeAsLetter):
        (WebCore::SVGPathSegCurvetoQuadraticRel::create):
        (WebCore::SVGPathSegCurvetoQuadraticRel::pathSegType):
        (WebCore::SVGPathSegCurvetoQuadraticRel::pathSegTypeAsLetter):
        * svg/SVGPathSegCurvetoQuadraticSmooth.cpp:
        (WebCore::SVGPathSegCurvetoQuadraticSmoothAbs::SVGPathSegCurvetoQuadraticSmoothAbs):
        (WebCore::SVGPathSegCurvetoQuadraticSmoothRel::SVGPathSegCurvetoQuadraticSmoothRel):
        * svg/SVGPathSegCurvetoQuadraticSmooth.h:
        (WebCore::SVGPathSegCurvetoQuadraticSmoothAbs::create):
        (WebCore::SVGPathSegCurvetoQuadraticSmoothAbs::pathSegTypeAsLetter):
        (WebCore::SVGPathSegCurvetoQuadraticSmoothRel::create):
        (WebCore::SVGPathSegCurvetoQuadraticSmoothRel::pathSegTypeAsLetter):
        * svg/SVGPathSegLineto.cpp:
        (WebCore::SVGPathSegLinetoAbs::SVGPathSegLinetoAbs):
        (WebCore::SVGPathSegLinetoRel::SVGPathSegLinetoRel):
        * svg/SVGPathSegLineto.h:
        (WebCore::SVGPathSegLinetoAbs::create):
        (WebCore::SVGPathSegLinetoAbs::pathSegTypeAsLetter):
        (WebCore::SVGPathSegLinetoRel::pathSegTypeAsLetter):
        * svg/SVGPathSegLinetoHorizontal.cpp:
        (WebCore::SVGPathSegLinetoHorizontalAbs::SVGPathSegLinetoHorizontalAbs):
        (WebCore::SVGPathSegLinetoHorizontalRel::SVGPathSegLinetoHorizontalRel):
        * svg/SVGPathSegLinetoHorizontal.h:
        (WebCore::SVGPathSegLinetoHorizontal::SVGPathSegLinetoHorizontal):
        (WebCore::SVGPathSegLinetoHorizontal::toString):
        (WebCore::SVGPathSegLinetoHorizontal::setX):
        (WebCore::SVGPathSegLinetoHorizontal::x):
        (WebCore::SVGPathSegLinetoHorizontalAbs::create):
        (WebCore::SVGPathSegLinetoHorizontalAbs::pathSegTypeAsLetter):
        (WebCore::SVGPathSegLinetoHorizontalRel::create):
        (WebCore::SVGPathSegLinetoHorizontalRel::pathSegTypeAsLetter):
        * svg/SVGPathSegLinetoVertical.cpp:
        (WebCore::SVGPathSegLinetoVerticalAbs::SVGPathSegLinetoVerticalAbs):
        (WebCore::SVGPathSegLinetoVerticalRel::SVGPathSegLinetoVerticalRel):
        * svg/SVGPathSegLinetoVertical.h:
        (WebCore::SVGPathSegLinetoVertical::SVGPathSegLinetoVertical):
        (WebCore::SVGPathSegLinetoVertical::toString):
        (WebCore::SVGPathSegLinetoVertical::setY):
        (WebCore::SVGPathSegLinetoVertical::y):
        (WebCore::SVGPathSegLinetoVerticalAbs::create):
        (WebCore::SVGPathSegLinetoVerticalAbs::pathSegTypeAsLetter):
        (WebCore::SVGPathSegLinetoVerticalRel::create):
        (WebCore::SVGPathSegLinetoVerticalRel::pathSegTypeAsLetter):
        * svg/SVGPathSegMoveto.cpp:
        (WebCore::SVGPathSegMovetoAbs::SVGPathSegMovetoAbs):
        (WebCore::SVGPathSegMovetoRel::SVGPathSegMovetoRel):
        * svg/SVGPathSegMoveto.h:
        (WebCore::SVGPathSegMovetoAbs::create):
        (WebCore::SVGPathSegMovetoAbs::pathSegTypeAsLetter):
        (WebCore::SVGPathSegMovetoRel::create):
        (WebCore::SVGPathSegMovetoRel::pathSegTypeAsLetter):

2008-05-22  Alp Toker  <alp@nuanti.com>

        GTK+/DirectFB build fix attempt.

        * plugins/PluginDatabase.cpp:
        (WebCore::PluginDatabase::isPreferredPluginDirectory):
        * plugins/gtk/PluginDatabaseGtk.cpp:
        (WebCore::PluginDatabase::isPreferredPluginDirectory):

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

        Adds Focus, Exclude and Restore buttons to the Profile view
        Status bar. Also adds a Record button to create new profiles.

        <rdar://problem/5950867> JSProfiler: Allow the profiler to "Focus" a profile node.
        <rdar://problem/5951529> JSProfiler: Allow the profiler to "Exclude" a profile node.

        Reviewed by Adam Roben.

        * English.lproj/localizedStrings.js: Added new strings.
        * page/JavaScriptProfile.cpp:
        (WebCore::restoreAll): Call Profile::restoreAll.
        (WebCore::ProfileClass): Added restoreAll to the static functions.
        * page/inspector/Images/excludeButtons.png: Added.
        * page/inspector/Images/focusButtons.png: Added.
        * page/inspector/Images/recordButtons.png: Added.
        * page/inspector/Images/reloadButtons.png: Added.
        * page/inspector/ProfileView.js:
        (WebInspector.ProfileView): Create the buttons elements.
        (WebInspector.ProfileView.prototype.get statusBarItems): Return the three
        status bar buttons.
        (WebInspector.ProfileView.prototype.refresh): Only create ProfileDataGridNodes
        for ProfileNodes that are visible.
        (WebInspector.ProfileView.prototype.refreshShowAsPercents): Just call
        refresh on the children, now that they have access to the ProfileView's properties.
        (WebInspector.ProfileView.prototype._focusClicked): Call focus
        on the profile, refresh the ProfileView and show the reset button.
        (WebInspector.ProfileView.prototype._excludeClicked): Call exclude
        on the profile, refresh the ProfileView and show the reset button.
        (WebInspector.ProfileView.prototype._resetClicked): Call restoreAll
        on the profile, refresh the ProfileView and hide the reset button.
        (WebInspector.ProfileView.prototype._dataGridNodeSelected): Enable the 
        focus and exclude buttons.
        (WebInspector.ProfileView.prototype._dataGridNodeDeselected): Disable the
        focus and exclude buttons.
        (WebInspector.ProfileDataGridNode): Take a ProfileView, and remove the 
        showPercentAs* arguments.
        * page/inspector/ProfilesPanel.js: Add a record status bar button and
        th ability to have per-view status bar buttons.
        * page/inspector/inspector.css: New styles.

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

        Reviewed by Tim Hatcher.

        <rdar://problem/5956612> ibtool crashes during build

        SCDynamicStoreCreate will return null if it cannot create a dynamic store object.  We need
        to check for failure rather than continuing with a null store as this results in us
        passing a null CFRunLoopSourceRef to CFRunLoopAddSource, which promptly crashes.

        * platform/network/mac/NetworkStateNotifierMac.cpp:
        (WebCore::NetworkStateNotifier::NetworkStateNotifier): Null check SCDynamicStoreCreate and
        SCDynamicStoreCreateRunLoopSource as it is possible for them to fail.

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

        Add a test for calling a NodeList as a function while profiling

        Reviewed by Kevin McCullough.

        * manual-tests/inspector/profiler-test-call-nodelist-as-function.html: Added.

2008-05-22  Kevin McCullough  <kmccullough@apple.com>

        Rubber stamped by Adam.

        -Added new profiler tests.

        * manual-tests/inspector/profiler-test-calling-the-function-that-started-the-profiler-from-another-scope.html: Added.
        * manual-tests/inspector/profiler-test-constructor.html: Added.
        * manual-tests/inspector/profiler-test-document-dot-write.html: Added.
        * manual-tests/inspector/profiler-test-simple-no-level-change.html: Added.
        * manual-tests/inspector/profiler-test-throw-exception-from-eval.html: Added.
        * manual-tests/inspector/profiler-test-window-dot-eval.html: Added.

2008-05-22  Kevin McCullough  <kmccullough@apple.com>

        Reviewed by Tim.

        <rdar://problem/5951529> JSProfiler: Allow the profiler to "Exclude" a
        profile node.
        -Expose the 'exclude' function to the WebInspector.
        -Also fix a bug with 'focus' and expose whether or not a node is visible

        * page/JavaScriptProfile.cpp: Renamed profileClass to have a capital P.
        (WebCore::getTitleCallback):
        (WebCore::getHeadCallback):
        (WebCore::focus): Now correctly compares against a ProfileNodeClass
        instead of ProfileClass.
        (WebCore::exclude): Expose 'exclude' function to the WebInspector.
        (WebCore::ProfileClass):
        (WebCore::toJS):
        * page/JavaScriptProfileNode.cpp: Declare the ProfileNodeClass in the
        header so that ProfileClass can use it.
        (WebCore::getVisible): Expose a node's visiblity to the WebInspector.
        (WebCore::ProfileNodeClass):
        * page/JavaScriptProfileNode.h:

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

        Reviewed by Anders Carlsson.

        <rdar://problem/5838772> Support cross-site XMLHttpRequest

        - Implement support for cross-site non-GET requests using the HTTP header
          Access-control mechanism.

        Tests: http/tests/xmlhttprequest/access-control-basic-allow-async.html
               http/tests/xmlhttprequest/access-control-basic-not-get-allow-async.html
               http/tests/xmlhttprequest/access-control-basic-not-get-allow.html

        * xml/XMLHttpRequest.cpp:
        (WebCore::XMLHttpRequest::XMLHttpRequest):
        (WebCore::XMLHttpRequest::send):
        Don't continue send if inside the method check preflight (only happens for async).
        
        (WebCore::XMLHttpRequest::crossSiteAccessRequest):
        Add support for non-GET requests, starting off a method check preflight.

        (WebCore::XMLHttpRequest::handleAsynchronousMethodCheckResult):
        Handler for finishing up after an asynchronous method check has completed.

        (WebCore::XMLHttpRequest::didFinishLoading):
        (WebCore::XMLHttpRequest::didFinishLoadingMethodCheck):
        (WebCore::XMLHttpRequest::didReceiveResponse):
        (WebCore::XMLHttpRequest::didReceiveResponseMethodCheck):
        (WebCore::XMLHttpRequest::didReceiveData):
        Do a limited set of access control when in the method check preflight.
        * xml/XMLHttpRequest.h:

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

        Make sure we don't call findTreeElement with the same representedObject
        again, to prevent infinite recursion. Added many comments to this
        code so it can be understood later.

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

        Reviewed by Adam Roben.

        * page/inspector/treeoutline.js:

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

        Re-word the "Attach Debugger" overlay to never say "Attach". The new
        wording is "Start Debugging". This makes the overlay consistent with
        other wording used for starting the debugger. Also fixes the tooltips
        for the Pause on Exceptions button.

        Reviewed by Adam Roben and Dan Bernstein.

        * English.lproj/localizedStrings.js: Adds new strings.
        * page/inspector/ScriptsPanel.js: Changes the wording. Flips the
        tooltips for the Pause on Exceptions buttons so the tooltip says
        what will happen when the button is pressed.

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

        Remove some non-functional elements from the Scripts panel
        so they don't confuse users why they aren't working.

        Reviewed by Adam Roben.

        * page/inspector/ScriptsPanel.js: Removes the back/forward buttons
        and the function menu.
        * page/inspector/inspector.css: Make the files menu wider since there
        is more room now.

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

        <rdar://problem/5956403> Update the Develop menu to match the new Inspector items

        Reviewed by Adam Roben.

        * English.lproj/localizedStrings.js:
        * WebCore.base.exp:
        * page/InspectorController.cpp:
        (WebCore::InspectorController::InspectorController):
        (WebCore::InspectorController::inspect):
        (WebCore::InspectorController::setWindowVisible):
        (WebCore::InspectorController::showPanel):
        (WebCore::InspectorController::startUserInitiatedProfiling):
        (WebCore::InspectorController::stopUserInitiatedProfiling):
        (WebCore::InspectorController::startDebuggingAndReloadInspectedPage):
        (WebCore::InspectorController::stopDebugging):
        * page/InspectorController.h:
        (WebCore::InspectorController::):
        (WebCore::InspectorController::isRecordingUserInitiatedProfile):
        * page/inspector/ProfilesPanel.js:
        * page/inspector/ScriptsPanel.js:
        * page/inspector/inspector.js:

2008-05-22  Josh Aas  <joshmoz@gmail.com>

        Reviewed by Anders.

        <rdar://problem/5956429> 
        https://bugs.webkit.org/show_bug.cgi?id=19192
        remove NPNVpluginEventModel, fix example plugin
        
        Remove NPNVpluginEventModel enum variable.
        
        * bridge/npapi.h:

2008-05-22  Stephanie Lewis  <slewis@apple.com>

        Reviewed by Dan.

        Fix <rdar://problem/5952405>.  The unbeforeunload count cannot be cleared when it is dispatched because it is possible to be called again.  Clear it after the unload event is dispatched.

        Test: fast/events/onunload-clears-onbeforeunload.html

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::stopLoading):
        * page/Frame.cpp:
        (WebCore::Frame::shouldClose):

2008-05-22  Simon Hausmann  <hausmann@webkit.org>

        Reviewed by Oliver.

        Qt build fix.

        * bindings/js/StringSourceProvider.h: Remove text at end of
        preprocessor statement.
        * bridge/qt/qt_instance.cpp:
        (KJS::Bindings::QtRuntimeObjectImp::getConstructData): Replaced
        implementsConstruct() with getConstructData().
        (KJS::Bindings::QtInstance::getCallData): Replaced implementsCall with
        getCallData().
        (KJS::Bindings::QtInstance::invokeDefaultMethod): Use getCallData()
        instead of implementsCall().
        * bridge/qt/qt_instance.h:

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

        Massively speed up date-format-tofte with the debugger attached

        On a debug Windows build (I know, hardly a good testcase) this patch
        makes this test run 57.25x as fast.

        Reviewed by Mark Rowe.

        * page/inspector/ScriptsPanel.js:
        (WebInspector.ScriptsPanel.prototype.reset): Clear the
        _scriptsForURLsInFilesSelect object.
        (WebInspector.ScriptsPanel.prototype._showScriptOrResource): Instead
        of looping over all the options in the select to find the option we
        want, get the script object from _scriptsForURLsInFilesSelect and get
        the option element from the script object.
        (WebInspector.ScriptsPanel.prototype._addScriptToFilesMenu): Use
        _scriptsForURLsInFilesSelect to cache the script objects. Store the
        option element for each script on the script object so we can quickly
        retrieve it later.

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

        Remove some dead code from ScriptsPanel.js

        Reviewed by Mark Rowe.

        * page/inspector/ScriptsPanel.js:

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

        Fix Bug 19178: Inspector should support sorting resources by latency

        <https://bugs.webkit.org/show_bug.cgi?id=19178>

        I replaced "Sort by Time" with the following sorting options:
          - Sort by Start Time
          - Sort by Response Time
          - Sort by End Time
          - Sort by Duration
          - Sort by Latency

        You can no longer sort by Size when looking at the Time graph, and you
        can't use any of the time-based sorting functions when looking at the
        Size graph.

        Reviewed by Tim Hatcher.

        * page/inspector/Resource.js:
        (WebInspector.Resource.prototype.get duration): Added.
        (WebInspector.Resource.prototype.get latency): Added.
        (WebInspector.Resource.CompareByStartTime): Added.
        (WebInspector.Resource.CompareByResponseReceivedTime): Added.
        (WebInspector.Resource.CompareByEndTime): Added.
        (WebInspector.Resource.CompareByDuration): Added.
        (WebInspector.Resource.CompareByLatency): Added.
        * page/inspector/ResourcesPanel.js:
        (WebInspector.ResourcesPanel):
          - Each graph sidebar item now holds a list of sorting options
          - Graph sidebar items no longer have a calculator property. This is
            stored on the sorting options instead, to allow each kind of
            sorting to have a different calculator.
          - The sortingSelectElement starts out empty, and is populated in
            _graphSelected
          - The sortingFunction starts out uninitialized and is set as a
            side-effect of _graphSelected.
        (WebInspector.ResourcesPanel.prototype.set calculator): Don't do
        anything if the calculator hasn't changed.
        (WebInspector.ResourcesPanel.prototype.closeVisibleResource): Use the
        _lastSelectedGraphTreeElement property instead of getting the graph
        element from the calculator.
        (WebInspector.ResourcesPanel.prototype._graphSelected):
          - Store the tree element in the _lastSelectedGraphTreeElement
            property
          - Popuplate sortingSelectElement with the sortingOptions and select
            the option that was last selected
        (WebInspector.ResourcesPanel.prototype._changeSortingFunction): Set
        our calculator from the sorting option.
        (WebInspector.ResourceTimeCalculator): Renamed from
        ResourceTransferTimeCalculator. Now takes a parameter to specify
        whether the bars should all start at zero.
        (WebInspector.ResourceTimeCalculator.prototype.computeBarGraphPercentages):
        Take this.startAtZero into account.
        (WebInspector.ResourceTimeCalculator.prototype.updateBoundries):
        Abstracted the lower/upper bounds of a resource into methods.
        (WebInspector.ResourceTimeCalculator.prototype._lowerBound): Added.
        (WebInspector.ResourceTimeCalculator.prototype._upperBound): Added.
        (WebInspector.ResourceTransferTimeCalculator): Added. This is now a
        subclass of ResourceTimeCalculator
        (WebInspector.ResourceTransferDurationCalculator): Added.
        (WebInspector.ResourceSidebarTreeElement.CompareByAscendingStartTime): Added.
        (WebInspector.ResourceSidebarTreeElement.CompareByAscendingResponseReceivedTime): Added.
        (WebInspector.ResourceSidebarTreeElement.CompareByAscendingEndTime): Added.
        (WebInspector.ResourceSidebarTreeElement.CompareByDescendingDuration): Added.
        (WebInspector.ResourceSidebarTreeElement.CompareByDescendingLatency): Added.
        (WebInspector.ResourceSidebarTreeElement.CompareByDescendingSize):
        Changed to call CompareBySize.

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

        Fix Bug 19173: Tool tips for Inspector debugger status bar buttons are
        wrong/missing

        <https://bugs.webkit.org/show_bug.cgi?id=19173>

        Reviewed by Tim Hatcher.

        * manual-tests/inspector/debugger-status-bar-buttons-state.html:
        Added.
        * page/inspector/ScriptsPanel.js:
        (WebInspector.ScriptsPanel.prototype._toggleDebugging): Call
        _clearInterface (which updates the buttons' tool tips) after
        attaching/detaching the debugger so that the buttons will reflect the
        new state.
        (WebInspector.ScriptsPanel.prototype._updatePauseOnExceptionsButton):
        Set the title of the pauseOnExceptionsButton, not the debuggingButton.

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

        Fix Bug 19153: Inspector should support console.debug

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

        Reviewed by Tim Hatcher.

        Test: manual-tests/inspector/console-log-formatting.html

        * bindings/js/JSConsoleCustom.cpp:
        (WebCore::JSConsole::debug): Added.
        * manual-tests/inspector/console-log-formatting.html: Changed to test
        console.debug as well.
        * page/Console.cpp:
        (WebCore::Console::debug): Added. Just calls through to log().
        * page/Console.h:
        * page/Console.idl: Added debug() declaration.

2008-05-21  Kevin McCullough  <kmccullough@apple.com>

        Reviewed by Adam.

        <rdar://problem/5950867> JSProfiler: Allow the profiler to "Focus" a
        profile node.
        - Expose the Profile's 'focus' ability to WebCore and the WebInspector.

        * page/JavaScriptProfile.cpp:
        (WebCore::focus):
        (WebCore::profileClass):

2008-05-21  Timothy Hatcher  <timothy@apple.com>

        Remove the rest of the debug code inside DEBUG_DEBUGGER_CALLBACKS
        since the parts the remain aren't useful.

        * page/JavaScriptDebugServer.cpp:
        (WebCore::JavaScriptDebugServer::sourceParsed):

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.

2008-05-21  Timothy Hatcher  <timothy@apple.com>

        Adds the Request and Response headers to the Resource view.

        <rdar://problem/5940782> REGRESSION: Resource Request and Response
        headers aren't shown (18451)

        Reviewed by Adam Roben.

        * English.lproj/localizedStrings.js: Added new strings.
        * css/view-source.css: Add comments to make sure a couple of
        style rules stay in sync with inspector.css.
        * page/inspector/Resource.js:
        (WebInspector.Resource.prototype.set url): Dispatch an event when
        this property changes.
        (WebInspector.Resource.prototype.set requestHeaders): Ditto.
        (WebInspector.Resource.prototype.set responseHeaders): Ditto.
        * page/inspector/ResourceView.js:
        (WebInspector.ResourceView): Add new elements for the headers
        and a headers TreeOutline. Add event listeners for resource
        property changes. Calls the three new refresh functions.
        (WebInspector.ResourceView.prototype.set headersVisible): Implemented.
        Toggles the headers-visible class name.
        (WebInspector.ResourceView.prototype._refreshURL): Update the URL
        tree element.
        (WebInspector.ResourceView.prototype._refreshRequestHeaders): Call _refreshHeaders.
        (WebInspector.ResourceView.prototype._refreshResponseHeaders): Ditto.
        (WebInspector.ResourceView.prototype._refreshHeaders): Remove the previous
        headers fromm the tree element. Loop throuh the headers and create new
        tree elements and append them.
        * page/inspector/ResourcesPanel.js:
        (WebInspector.ResourcesPanel.prototype._updateSidebarWidth): Call resize
        on the visible view if it is implemented.
        * page/inspector/SourceFrame.js:
        (WebInspector.SourceFrame.prototype.get autoSizesToFitContentHeight):
        (WebInspector.SourceFrame.prototype.set autoSizesToFitContentHeight):
        (WebInspector.SourceFrame.prototype.sizeToFitContentHeight):
        (WebInspector.SourceFrame.prototype._loaded): 
        (WebInspector.SourceFrame.prototype._windowResized): 
        * page/inspector/SourceView.js:
        (WebInspector.SourceView): Move the SourceFrame creation so it is
        available when headersVisible is set. Add a gutter element to fill
        the vertical space no covered by the SourceFrame now.
        (WebInspector.SourceView.prototype.set headersVisible): Set the
        SourceFrame.autoSizesToFitContentHeight when this property changes.
        (WebInspector.SourceView.prototype.resize): Call SourceFrame.sizeToFitContentHeight
        when autoSizesToFitContentHeight is true. This happens when resizing the 
        Resources sidebar.
        * page/inspector/inspector.css: Add a copy of webkit-line-gutter-backdrop
        and a comment to keep in sync with view-source.css. Adds other styles
        for the headers area of resource-view.

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

        Reviewed by Anders Carlsson.

        <rdar://problem/5838772> Support cross-site XMLHttpRequest

        - Implement support for cross-site GET requests using the HTTP header
          Access-control mechanism.

        Tests: http/tests/xmlhttprequest/access-control-basic-allow-headers.html
               http/tests/xmlhttprequest/access-control-basic-allow.html
               http/tests/xmlhttprequest/access-control-basic-denied.html
               http/tests/xmlhttprequest/access-control-basic-exclude.html

        * xml/AccessControlList.cpp:
        (WebCore::AccessControlList::checkOrigin): Implement the list check algorithm.
        * xml/AccessControlList.h:

        * xml/AccessItem.cpp:
        (WebCore::AccessItem::AccessItem):
        (WebCore::AccessItem::matches):
        * xml/AccessItem.h:
        Temporarily use a SecurityOrigin as the bases of AccessItem matching. Using
        the isSameSchemeHostPort test of the SecurityOrigin allows for a legal subset
        of the AccessItem match algorithm to be used, until the complete parsing of
        the wildcards and optional pieces is complete. 

        * xml/AccessItemRule.cpp:
        (WebCore::matchesAny):
        (WebCore::AccessItemRule::allowListMatchesAny):
        (WebCore::AccessItemRule::excludeListMatchesAny):
        * xml/AccessItemRule.h:
        More of the implementation of the list check algorithm.  Check if any of the items
        in the rule match the control origin.

        * xml/XMLHttpRequest.cpp:
        (WebCore::XMLHttpRequest::XMLHttpRequest):
        (WebCore::XMLHttpRequest::open): Don't throw a SECURITY_ERR for cross-domain requests anymore.
        (WebCore::XMLHttpRequest::send): Use different paths for same origin and cross-domain requests.
        (WebCore::XMLHttpRequest::crossSiteAccessRequest): Temporarily only support the GET method for
        cross-domain requests.  
        (WebCore::XMLHttpRequest::loadRequestSynchronously):
        (WebCore::XMLHttpRequest::processSyncLoadResults):
        This can now throw an exception if a cross-domain request is denied by the access control
        (WebCore::XMLHttpRequest::didFinishLoading):
        Add support for cross-domain GET request.  ASSERT temporarily that the method is GET, since we
        should have bailed out much earlier for non-GET methods.
        (WebCore::XMLHttpRequest::willSendRequest):
        (WebCore::XMLHttpRequest::didReceiveResponse):
        Do the HTTP header access-control check as soon as the headers arrive.
        * xml/XMLHttpRequest.h:

2008-05-21  Alp Toker  <alp@nuanti.com>

        Rubber-stamped by Maciej.

        Replace non-standard #pragma marks with comments to avoid compiler
        warnings.

        * page/InspectorController.cpp:

=== End merge of squirrelfish ===

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

        Reviewed by Tim Hatcher.

        Merged with trunk WebCore's new debugger.

        * page/InspectorController.cpp:
        (WebCore::currentCallFrame): Updated to use the DebuggerCallFrame API.
        (WebCore::InspectorController::pauseInDebugger): Updated for name change
        explained below.
        (WebCore::InspectorController::resumeDebugger): ditto
        (WebCore::InspectorController::didParseSource): Fixed a bug that would
        produce garbled text in some cases: Don't treat JS source as null-
        terminated UTF8; it's UTF16.

        * page/JavaScriptCallFrame.cpp:
        * page/JavaScriptCallFrame.h: Changed this class to do all of its processing
        through a JavaScriptCore DebuggerCallFrame. We have to copy the DebuggerCallFrame
        because it's a temporary.
        (WebCore::JavaScriptCallFrame::update): Added an API for updating a call
        frame during execution: this is how we handle "with" and "eval".

        * page/JavaScriptDebugServer.cpp: Separated "m_paused" from
        "m_doneProcessingDebuggerEvents", because they have different semantics:
        "m_paused" is the flag the debug server uses to indicate that new debugger
        callbacks should be ignored, because they come from the debugger's own
        JS code; "m_doneProcessingDebuggerEvents" is the flag the debugger UI
        uses to indicate that it's done processing events, and would like execution
        to continue. When these flags were one, the debugger would erroneously
        process callbacks that ocurred while unwinding from its own JS code.

        (WebCore::toPage): Removed some unnecessary NULL checking. Added some
        missing NULL checking.
        
        (WebCore::JavaScriptDebugServer::pauseIfNeeded): Changed pause tracking
        to track a JavaScriptCallFrame instead of an ExecState, since ExecState
        is no longer a unique identifier for a call frame.

        I removed the updateCurrentCallFrame scheme, and replaced it with
        individual tracking inside these callbacks:
        
        (WebCore::JavaScriptDebugServer::callEvent):
        (WebCore::JavaScriptDebugServer::atStatement):
        (WebCore::JavaScriptDebugServer::returnEvent):
        (WebCore::JavaScriptDebugServer::exception):
        
        The updateCurrentCallFrame scheme was just too incompatible with the
        squirrelfish execution model. Everything still works as before, except
        for eval, which no longer shows up as an independent call frame. We'll
        need to augment our debugger callbacks to bring back support for that.

        * page/inspector/ScopeChainSidebarPane.js: Updated to use the activation
        class's new name.

2008-05-21  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Oliver.

        - write directly to the slot we used to check for override properties, when possible
        2.6% speedup on in-browser SunSpider

        * bindings/js/JSDOMWindowCustom.h:
        (WebCore::JSDOMWindow::customPut):

2008-05-20  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Oliver.

        - inline JSDOMWindow security checks
        0.9% speedup to SunSpider in-browser

        * bindings/js/JSDOMWindowBase.cpp:
        * bindings/js/JSDOMWindowCustom.h:
        (WebCore::JSDOMWindowBasePrivate::JSDOMWindowBasePrivate):
        (WebCore::JSDOMWindowBase::allowsAccessFrom):
        (WebCore::JSDOMWindowBase::allowsAccessFromNoErrorMessage):
        (WebCore::JSDOMWindowBase::allowsAccessFromPrivate):
        * bindings/js/kjs_binding.cpp:

2008-05-20  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Adam.

        - use ALWAYS_INLINE on customGetOwnPropertySlot since it wasn't inlining
        2% speedup to SunSpider in-browser

        * bindings/js/JSDOMWindowCustom.h:
        (WebCore::JSDOMWindow::customGetOwnPropertySlot):

2008-05-20  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Adam.

        - inline JSDOMWindow's customPut and customGetOwnPropertySlot methods
        1.2% speedup to SunSpider in-browser
        
        The approach here is to make the code generator include a
        JS{classname}Custom.h header in the autogenerated implementation,
        which we can use to provide inline versions.

        * bindings/js/JSCSSStyleDeclarationCustom.cpp:
        * bindings/js/JSCSSStyleDeclarationCustom.h: Added.
        * bindings/js/JSDOMWindowCustom.cpp:
        * bindings/js/JSDOMWindowCustom.h:
        (WebCore::asJSDOMWindow):
        (WebCore::JSDOMWindow::customGetOwnPropertySlot):
        (WebCore::JSDOMWindow::customPut):
        * bindings/js/JSHTMLAppletElementCustom.cpp:
        * bindings/js/JSHTMLAppletElementCustom.h: Added.
        * bindings/js/JSHTMLEmbedElementCustom.cpp:
        * bindings/js/JSHTMLEmbedElementCustom.h: Added.
        * bindings/js/JSHTMLObjectElementCustom.cpp:
        * bindings/js/JSHTMLObjectElementCustom.h: Added.
        * bindings/js/JSHistoryCustom.cpp:
        * bindings/js/JSHistoryCustom.h: Added.
        * bindings/js/JSLocationCustom.cpp:
        * bindings/js/JSLocationCustom.h: Added.
        * bindings/js/JSStorageCustom.cpp:
        * bindings/js/JSStorageCustom.h: Added.
        * bindings/scripts/CodeGeneratorJS.pm:

2008-05-19  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Anders.

        - inline asDOMWindow (using a new JSDOMWindowCustom.h header) since it is just a cast
        1% speedup to SunSpider in-browser

        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSCustomVoidCallback.cpp:
        * bindings/js/JSCustomXPathNSResolver.cpp:
        * bindings/js/JSDOMApplicationCacheCustom.cpp:
        * bindings/js/JSDOMWindowBase.cpp:
        * bindings/js/JSDOMWindowBase.h:
        * bindings/js/JSDOMWindowCustom.cpp:
        * bindings/js/JSDOMWindowCustom.h: Added.
        (WebCore::asJSDOMWindow):
        * bindings/js/JSDatabaseCustom.cpp:
        * bindings/js/JSDocumentCustom.cpp:
        * bindings/js/JSLocationCustom.cpp:
        * bindings/js/JSSQLTransactionCustom.cpp:
        * bindings/js/JSXMLHttpRequestCustom.cpp:
        * page/JavaScriptDebugServer.cpp:

2008-05-19  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Oliver.

        - obtain current inner window of outer window in a more efficient way
        1.6% speedup to SunSpider in-browser

        * bindings/js/JSDOMWindowBase.cpp:
        (WebCore::JSDOMWindowBase::allowsAccessFromPrivate):

2008-05-19  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Adam.

        - make impl() method for JSWindow inline
        0.6% speedup to SunSpider in-browser

        * WebCore.base.exp: Remove now-inline symbol
        * bindings/scripts/CodeGeneratorJS.pm: Make the codegen script inline impl()
        even for classes with a parent class.

2008-05-17  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Oliver Hunt.

        Updated for API changes in KJS::Debugger.

2008-05-13  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Oliver Hunt.

        Updated for API changes in KJS::Debugger.

        * page/JavaScriptDebugServer.cpp:
        (WebCore::JavaScriptDebugServer::callEvent):
        (WebCore::JavaScriptDebugServer::atStatement):
        (WebCore::JavaScriptDebugServer::returnEvent):
        (WebCore::JavaScriptDebugServer::exception):
        * page/JavaScriptDebugServer.h:

2008-05-13  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Oliver Hunt.
        
        Updated JavaScriptDebugServer API to accept a SourceProvider instead
        of a UString, to avoid copying.

        * page/JavaScriptDebugServer.cpp:
        (WebCore::JavaScriptDebugServer::sourceParsed): Updated this function
        not to return a value.

2008-05-10  Maciej Stachowiak  <mjs@apple.com>

        Build fix.
        
        - add missing forwarding header

        * ForwardingHeaders/kjs/SourceProvider.h: Added.

2008-05-10  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Oliver.

        - WebCore part of fix for: "SQUIRRELFISH: function toString broken after calling"
        https://bugs.webkit.org/show_bug.cgi?id=18869

        * bindings/js/StringSourceProvider.h: Added. SourceProvider subclass backed by a WebCore::String.
        (WebCore::StringSourceProvider::create):
        (WebCore::StringSourceProvider::getRange):
        (WebCore::StringSourceProvider::data):
        (WebCore::StringSourceProvider::length):
        (WebCore::StringSourceProvider::StringSourceProvider):
        * bindings/js/kjs_proxy.cpp:
        (WebCore::KJSProxy::evaluate): Pass a StringSourceProvider to
        evaluate() instead of UChar* / length.
        * html/HTMLScriptElement.cpp:
        (WebCore::HTMLScriptElement::text): Modified to return the
        original string as-is when the script element contains only a
        single text node, to avoid excess memory use.
        
        * WebCore.vcproj/WebCore.vcproj: Add new file to build.
        * WebCore.xcodeproj/project.pbxproj: ditto

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

        Reviewed by Geoff.

        Build fixes for SquirrelFish on windows.

        * bindings/js/JSNavigatorCustom.cpp:

2008-05-08  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Oliver Hunt.

        Fixed platform/mac/plugins/bindings-test-objc.html.
        
        I've restored -[WebScriptObject setException] and
        +[WebScriptObject throwException].
        
        Instead of mucking around in the JavaScript engine's execution state,
        throwing an exception sets a global exception string, along with the
        environment in which to throw it. An ObjC callback checks the global
        exception string and, if it's non-nil and the environment matches the
        current exceution environment, throws the global exception string as a
        JS exception.

        I also removed the old currentGlobalObject infrastructure: it's no longer
        used.

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

        Reviewed by Maciej.

        Bug 18866: SQUIRRELFISH: JS/ObjC bridge is broken <https://bugs.webkit.org/show_bug.cgi?id=18866>
        Bug 18867: SQUIRRELFISH: JS/NPRuntime bridge is broken <https://bugs.webkit.org/show_bug.cgi?id=18867>

        This fixes function binding logic for the ObjC and NPRuntime by
        replacing incorrect implementations of implementsCall (which is
        no longer virtual) with implementations of getCallData.

        * bindings/js/JSQuarantinedObjectWrapper.cpp:
        (WebCore::JSQuarantinedObjectWrapper::getCallData):
        * bindings/js/JSQuarantinedObjectWrapper.h:
        * bridge/c/c_instance.cpp:
        * bridge/c/c_instance.h:
        * bridge/objc/objc_instance.h:
        * bridge/objc/objc_instance.mm:
        * bridge/objc/objc_runtime.h:
        * bridge/objc/objc_runtime.mm:
        (ObjcFallbackObjectImp::getCallData):
        * bridge/runtime.h:
        * bridge/runtime_object.cpp:
        (RuntimeObjectImp::getCallData):
        * bridge/runtime_object.h:

2008-04-30  Geoffrey Garen  <ggaren@apple.com>

        Build fix: supply a parameter that used to be implicit to
        Interpreter::evaluate.

2008-04-30  Geoffrey Garen  <ggaren@apple.com>

        Build fix: #ifdef'd out some code that doesn't work anymore.

        * bindings/objc/WebScriptObject.mm:
        (+[WebScriptObject throwException:]):
        (-[WebScriptObject setException:]):

2008-04-14  Gabor Loki  <loki@inf.u-szeged.hu>

        Reviewed by Geoffrey Garen.

        Bug 18489: Squirrelfish doesn't build on linux
        <https://bugs.webkit.org/show_bug.cgi?id=18489>

        * WebCore.pro: Add JavaScriptCore/VM into include path

2008-04-10  Sam Weinig  <sam@webkit.org>

        Reviewed by Geoffrey Garen.

        Adjusted WebCore JS functions to the new "getConstructData" calling convention.

2008-03-30  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Oliver Hunt.
        
        Adjusted WebCore JS functions to the new "getCallData" calling convention.

=== Start merge of squirrelfish ===

2008-05-21  Anders Carlsson  <andersca@apple.com>

        Reviewed by Mitz.

        Add IconFetcher implementation.

        * WebCore.base.exp:
        * WebCore.xcodeproj/project.pbxproj:
        * html/HTMLLinkElement.h:
        (WebCore::HTMLLinkElement::isIcon):
        * loader/icon/IconFetcher.cpp: Added.
        (WebCore::IconLinkEntry::):
        (WebCore::IconLinkEntry::IconLinkEntry):
        (WebCore::IconLinkEntry::type):
        (WebCore::IconLinkEntry::url):
        (WebCore::IconLinkEntry::buffer):
        (WebCore::parseIconLink):
        (WebCore::IconFetcher::create):
        (WebCore::IconFetcher::IconFetcher):
        (WebCore::IconFetcher::~IconFetcher):
        (WebCore::IconFetcher::cancel):
        (WebCore::IconFetcher::createIcon):
        (WebCore::IconFetcher::loadEntry):
        (WebCore::IconFetcher::loadFailed):
        (WebCore::IconFetcher::didReceiveResponse):
        (WebCore::IconFetcher::didReceiveData):
        (WebCore::IconFetcher::didFinishLoading):
        (WebCore::IconFetcher::didFail):
        * loader/icon/IconFetcher.h: Added.
        (WebCore::IconFetcherClient::~IconFetcherClient):

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

        Reviewed by Dave Hyatt.

        - fix https://bugs.webkit.org/show_bug.cgi?id=18352
          <rdar://problem/5854517> crash loading malicious font

        * platform/graphics/mac/SimpleFontDataMac.mm:
        (WebCore::SimpleFontData::platformInit): In the case of a custom font,
        there is no NSFont to base the fallback font on, so get a font based on
        fallback family name alone.

2008-05-21  Timothy Hatcher  <timothy@apple.com>

        Adds the files and line numbers to the Profile call tree.

        <rdar://problem/5952924> Inspector needs to show file and line number
        in the Profile call tree

        Reviewed by Geoff Garen.

        * page/JavaScriptProfileNode.cpp:
        (WebCore::getFunctionName): Fixes a JSStringRef leak.
        (WebCore::getURL): Call ProfileNode::url.
        (WebCore::getLineNumber): Call ProfileNode::lineNumber.
        (WebCore::ProfileNodeClass): Add the url and lineNumber properties.
        * page/inspector/ProfileView.js:
        (WebInspector.ProfileDataGridNode.prototype.createCell): Overload the
        DataGridNode.createCell and add the file and lineNumber to the
        cell if the column is the function column.
        * page/inspector/inspector.css: New styles for the file and line.

2008-05-21  Timothy Hatcher  <timothy@apple.com>

        Restores logging of console calls to the STDOUT
        when Interpreter::shouldPrintExceptions() is true.

        <rdar://problem/5636442> REGRESSION: Console.log no longer logs to
        the system console or terminal

        <rdar://problem/5146079> JavaScript exception logging should print
        accurate file and line info when called from WebScriptObject

        Reviewed by Adam Roben.

        * bindings/js/JSCustomSQLStatementCallback.cpp:
        (WebCore::JSCustomSQLStatementCallback::handleEvent): Remove existing
        printf and check for Interpreter::shouldPrintExceptions() since there is
        a call to Console::addMessage.
        * bindings/js/JSCustomSQLStatementErrorCallback.cpp:
        (WebCore::JSCustomSQLStatementErrorCallback::handleEvent): Ditto.
        * bindings/js/JSCustomSQLTransactionCallback.cpp:
        (WebCore::JSCustomSQLTransactionCallback::handleEvent): Ditto.
        * bindings/js/JSCustomSQLTransactionErrorCallback.cpp:
        (WebCore::JSCustomSQLTransactionErrorCallback::handleEvent): Ditto.
        * bindings/js/JSCustomVoidCallback.cpp:
        (WebCore::JSCustomVoidCallback::handleEvent): Ditto.
        * bindings/js/JSCustomXPathNSResolver.cpp:
        (WebCore::JSCustomXPathNSResolver::lookupNamespaceURI): Ditto.
        * bindings/js/JSDOMWindowBase.cpp:
        (WebCore::JSDOMWindowBase::printErrorMessage): Ditto.
        * bindings/js/ScheduledAction.cpp:
        (WebCore::ScheduledAction::execute): Ditto.
        * bindings/js/kjs_events.cpp:
        (WebCore::JSAbstractEventListener::handleEvent): Ditto.
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::shouldAllowNavigation): Ditto.
        * bindings/objc/WebScriptObject.mm:
        (WebCore::addExceptionToConsole): Added helper static function that
        calls Console::addMessage.
        (-[WebScriptObject callWebScriptMethod:withArguments:]): Call addExceptionToConsole.
        (-[WebScriptObject evaluateWebScript:]): Ditto.
        (-[WebScriptObject setValue:forKey:]): Ditto.
        (-[WebScriptObject valueForKey:]): Ditto.
        (-[WebScriptObject removeWebScriptKey:]): Ditto.
        (-[WebScriptObject webScriptValueAtIndex:]): Ditto.
        (-[WebScriptObject setWebScriptValueAtIndex:value:]): Ditto.
        * page/Console.cpp:
        (WebCore::Console::addMessage): Print the level, message,
        URL and line number to STDOUT.
        (WebCore::printToStandardOut): Helper static function that
        takes a prefix string, ExecState, an argument List and URL.
        Prints the prefix and loops through the arguments calling
        toString on each and printing the string. Finally printing
        the URL and new line.
        (WebCore::Console::error): Call printToStandardOut.
        (WebCore::Console::info): Ditto.
        (WebCore::Console::log): Ditto.
        (WebCore::Console::assertCondition): Ditto.
        (WebCore::Console::warn): Ditto.

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

        Changes to work with the new Profiler API. The Profile is now
        stored by the InspectorController when Console.profileEnd is called.
        This solves three issues with the previous design. First, we don't
        keep profiles around unless the Inspector is enabled. Second, we
        only show Profiles initiated by the Page in it's Inspector, not every
        Profile for the whole process. Third, we now show Profiles in the
        Inspector when they are created.

        <rdar://problem/5951562> New profiles aren't added to the Inspector
        as they finish

        Reviewed by Kevin McCullough.

        * bindings/js/JSConsoleCustom.cpp:
        (WebCore::JSConsole::profileEnd): Added. Calls impl()->profileEnd()
        and passes the ExecState and arguments.
        * page/Console.cpp:
        (WebCore::Console::profile):
        (WebCore::Console::profileEnd): Accept the optional title argument
        and pass it to Profilier::stopProfiling along with the ExecState.
        Calls InspectorController::addProfile with the result Profile.
        * page/Console.h:
        * page/Console.idl: Made profileEnd Custom so we can get the ExecState.
        * page/InspectorController.cpp:
        (WebCore::profiles): Renamed from allProfiles. Uses the controller's
        profiles vector.
        (WebCore::InspectorController::addProfile): Appends to m_profiles.
        Calls addScriptProfile if the window is visible.
        (WebCore::InspectorController::windowScriptObjectAvailable): Renamed
        allProfiles to profiles.
        (WebCore::InspectorController::addScriptProfile): Calls addProfile on
        the JavaScript side.
        (WebCore::InspectorController::didCommitLoad): Clears m_profiles.
        * page/InspectorController.h:
        * page/inspector/ProfilesPanel.js: Populates the profiles sidebar the first
        time the panel is shown after a rest.
        * page/inspector/inspector.js: Added addProfile, calls ProfilesPanel's
        addProfile function.

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

        Reviewed by Darin.

        https://bugs.webkit.org/show_bug.cgi?id=19169
        <rdar://5952342> REGRESSION: nakarte.ru searches don't work

        Test: http/tests/xmlhttprequest/encode-request-url.html

        * platform/KURL.cpp: (WebCore::KURL::init): Don't allow UTF-8 encoded data to be implicitly
        converted to String, as it will be encoded again by parse().

2008-05-21  Ariya Hidayat  <ariya.hidayat@trolltech.com>

        Reviewed by Simon.

        For the Qt port, fix building with Qt for Embedded Linux.

        * WebCore.pro:

2008-05-21  Ariya Hidayat  <ariya.hidayat@trolltech.com>

        Reviewed by Simon.

        For the Qt port, allow building without NPAPI plugin support.

        * WebCore.pro:
        * plugins/PluginView.h:

2008-05-20  Kevin McCullough  <kmccullough@apple.com>

        Reviewed by Tim.

        Added all of my personal manual tests for the profiler.

        * manual-tests/inspector/profiler-test-anonymous-event-handler.html: Added.
        * manual-tests/inspector/profiler-test-anonymous-function-called-from-different-contexts.html: Added.
        * manual-tests/inspector/profiler-test-anonymous-function-calls-built-in-functions.html: Added.
        * manual-tests/inspector/profiler-test-anonymous-function-calls-eval.html: Added.
        * manual-tests/inspector/profiler-test-apply.html: Added.
        * manual-tests/inspector/profiler-test-built-in-function-calls-anonymous.html: Added.
        * manual-tests/inspector/profiler-test-built-in-function-calls-user-defined-function.html: Added.
        * manual-tests/inspector/profiler-test-call.html: Added.
        * manual-tests/inspector/profiler-test-dead-time.html: Added.
        * manual-tests/inspector/profiler-test-event-handler.html: Added.
        * manual-tests/inspector/profiler-test-execution-context-and-eval-on-same-line.html: Added.
        * manual-tests/inspector/profiler-test-inline-event-handler.html: Added.
        * manual-tests/inspector/profiler-test-many-calls-in-the-same-scope.html: Added.
        * manual-tests/inspector/profiler-test-multiple-and-different-scoped-anonymous-function-calls.html: Added.
        * manual-tests/inspector/profiler-test-multiple-and-different-scoped-function-calls.html: Added.
        * manual-tests/inspector/profiler-test-multiple-frames.html: Added.
        * manual-tests/inspector/profiler-test-multiple-windows.html: Added.
        * manual-tests/inspector/profiler-test-nested-anonymous-functon.html: Added.
        * manual-tests/inspector/profiler-test-nested-start-and-stop-profiler.html: Added.
        * manual-tests/inspector/profiler-test-no-execution-context.html: Added.
        * manual-tests/inspector/profiler-test-one-execution-context.html: Added.
        * manual-tests/inspector/profiler-test-profile-calls-in-included-file.html: Added.
        * manual-tests/inspector/profiler-test-profiling-from-a-nested-location-but-stop-profiling-outside-the-nesting.html: Added.
        * manual-tests/inspector/profiler-test-profiling-from-a-nested-location.html: Added.
        * manual-tests/inspector/profiler-test-start-and-stop-profiler-multiple-times.html: Added.
        * manual-tests/inspector/profiler-test-two-execution-contexts.html: Added.
        * manual-tests/inspector/profiler-test-user-defined-function-calls-built-in-functions.html: Added.
        * manual-tests/inspector/resources: Added.
        * manual-tests/inspector/resources/other-frame.html: Added.
        * manual-tests/inspector/resources/other-window.html: Added.
        * manual-tests/inspector/resources/profiler-test-JS-resources.js: Added.

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

        Use KJS::List::getSlice instead of reimplementing it

        Rubberstamped and suggested by Sam Weinig.

        * bindings/js/JSConsoleCustom.cpp:
        (WebCore::JSConsole::assertCondition):

2008-05-20  Kevin Calhoun  <kcalhoun@apple.com>

        Reviewed by Darin.

        Fix <rdar://problem/5929010> Adopt new QTKit methods for <video> implementation

        If the class QTVideoRendererWebKitOnly is present use it to render video,
        otherwise fall back to existing use of QTMovieView/QTMovieContentView.

        * platform/graphics/mac/MediaPlayerPrivateQTKit.h:
        * platform/graphics/mac/MediaPlayerPrivateQTKit.mm:
        (WebCore::MediaPlayerPrivate::~MediaPlayerPrivate):
        (WebCore::MediaPlayerPrivate::createQTMovie):
        (WebCore::QTVideoRendererClass):
        (WebCore::MediaPlayerPrivate::detachQTMovieView):
        (WebCore::MediaPlayerPrivate::createQTVideoRenderer):
        (WebCore::MediaPlayerPrivate::destroyQTVideoRenderer):
        (WebCore::MediaPlayerPrivate::setUpVideoRendering):
        (WebCore::MediaPlayerPrivate::tearDownVideoRendering):
        (WebCore::MediaPlayerPrivate::load):
        (WebCore::MediaPlayerPrivate::cancelLoad):
        (WebCore::MediaPlayerPrivate::setVisible):
        (WebCore::MediaPlayerPrivate::paint):
        (-[WebCoreMovieObserver newImageAvailable:]):

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

        Fix Bug 19134: Inspector should support console.assert

        <https://bugs.webkit.org/show_bug.cgi?id=19134>

        Reviewed by Tim Hatcher.

        Test: manual-tests/inspector/console-assert.html

        * bindings/js/JSConsoleCustom.cpp:
        (WebCore::JSConsole::assertCondition): Added.
        * bindings/scripts/CodeGeneratorJS.pm: Added parsing of the
        ImplementationFunction extended attribute, which allows you to
        override the name of the C++ function used to implement this method.
        * manual-tests/inspector/console-assert.html: Added.
        * page/Console.cpp:
        (WebCore::Console::assertCondition): Added.
        * page/Console.h:
        * page/Console.idl: Added assert().

2008-05-20  Alice Liu  <alice.liu@apple.com>

        Reviewed by Brady.

        fix <rdar://problem/5908580> 10A58: Dictionary Panel hangs in WebCore::Cache::pruneDeadResources()

        * loader/Cache.cpp:
        (WebCore::Cache::requestUserCSSStyleSheet):
        Add a call to resourceAccessed() to more closely mirror what is done in requestResource()
        (WebCore::Cache::insertInLRUList):
        Assert that any resource in the LRU list has been accessed.  This is early detection of a
        potential hang later when pruning resources, and also agrees with the early return in 
        removeFromLRUList().

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

        Reviewed by Darin Adler.

        - fix https://bugs.webkit.org/show_bug.cgi?id=17655
          <rdar://problem/5778077> REGRESSION (3.1.1-TOT): Reproducible crash calling querySelector on viewless Document

        Test: fast/dom/SelectorAPI/viewless-document.html

        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::CSSStyleSelector): Updated to initialize the
        selector checker.
        (WebCore::CSSStyleSelector::init): Removed initialization of
        m_collectRulesOnly, which is now part of the selector checker.
        (WebCore::CSSStyleSelector::matchRules): Updated for renames and data
        moved into the selector checker.
        (WebCore::CSSStyleSelector::matchRulesForList): Ditto.
        (WebCore::CSSStyleSelector::initForStyleResolve): Added a PseudoId
        argument, which is used to initialize a data member of the selector
        checker. Updated for renames. Removed initialization of m_isXMLDoc
        because this bit is now initialized only once in the selector checker's
        constructor.
        (WebCore::CSSStyleSelector::SelectorChecker::SelectorChecker): Added.
        (WebCore::CSSStyleSelector::SelectorChecker::checkPseudoState): Changed
        into a SelectorChecker method.
        (WebCore::CSSStyleSelector::SelectorChecker::checkSelector): Added. Used
        by querySelector() and querySelectorAll().
        (WebCore::CSSStyleSelector::canShareStyleWithElement): Updated for data
        moved into the selector checker.
        (WebCore::CSSStyleSelector::matchUARules): Ditto.
        (WebCore::CSSStyleSelector::styleForElement):
        (WebCore::CSSStyleSelector::pseudoStyleForElement): Ditto. Also removed
        code that set the parentStyle variable after the last place it is
        accessed, and changed to ensure that m_style is set early in this
        function.
        (WebCore::CSSStyleSelector::adjustRenderStyle): Updated for data moved
        into the selector checker.
        (WebCore::CSSStyleSelector::styleRulesForElement): Ditto.
        (WebCore::CSSStyleSelector::checkSelector): Ditto. Also changed to pass
        the element's style and the parent style to the selector checker, as
        well as the dynamic pseudo variable and the selector attributes vector.
        (WebCore::CSSStyleSelector::SelectorChecker::checkOneSelector): Added
        arguments for the style of the base element and its parent. When the
        elementStyle argument is 0, the style is fetched from the element
        and its parent as needed. Also changed to take a reference to the
        dynamic pseudo ID and a pointer to the vector of attributes affecting
        the match.
        (WebCore::CSSStyleSelector::applyProperty): Updated for data moved
        into the selector checker.
        (WebCore::CSSStyleSelector::checkForGenericFamilyChange): Ditto.
        (WebCore::CSSStyleSelector::getComputedSizeFromSpecifiedSize): Ditto.
        (WebCore::CSSStyleSelector::fontSizeForKeyword): Ditto.
        (WebCore::CSSStyleSelector::getColorFromPrimitiveValue): Ditto.
        (WebCore::CSSStyleSelector::SelectorChecker::allVisitedStateChanged):
        Changed into a SelectorChecker method.
        (WebCore::CSSStyleSelector::SelectorChecker::visitedStateChanged):
        Ditto.

        * css/CSSStyleSelector.h:
        Added a SelectorChecker class and moved data and methods used in
        checking selectors into it.
        (WebCore::CSSStyleSelector::allVisitedStateChanged): Changed to call the
        SelectorChecker method.
        (WebCore::CSSStyleSelector::visitedStateChanged): Ditto.
        * dom/Node.cpp:
        (WebCore::Node::querySelector): Changed to use a SelectorChecker instead
        of the document's style selector.
        * dom/SelectorNodeList.cpp:
        (WebCore::SelectorNodeList::SelectorNodeList): Ditto.

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

        Implements the Profiles panel and Profile view.

        Reviewed by Kevin McCullough.

        * English.lproj/localizedStrings.js: Added new strings.
        * page/inspector/Images/profileIcon.png: Added.
        * page/inspector/Images/profilesIcon.png: Changed. New icon design
        that fits in with the other toolbar icons.
        * page/inspector/ProfileView.js:
        (WebInspector.ProfileView): Remove custom table elements
        and create a DataGrid. Sorts the profile by descending total time,
        since the profiles aren't sorted by default.
        (WebInspector.ProfileView.prototype.refresh): Clears the DataGrid
        and recreates all the nodes. The selection is preserved.
        (WebInspector.ProfileView.prototype.refreshShowAsPercents): Traverse
        all the children and change showTotalTimeAsPercent and showSelfTimeAsPercent
        to match the ProfileView values. Then call refresh on the child.
        (WebInspector.ProfileView.prototype._sortData): Determine the sort
        function to call on the head profile node. Call it and then call
        refresh to rebuild the DataGrid.
        (WebInspector.ProfileView.prototype._mouseDownInDataGrid): Return early
        if the event is not a double-click. When it is a double-click, determine
        the column that was targeted and if it was total or self toggle the
        show as percent property. Call refreshShowAsPercents.
        (WebInspector.ProfileDataGridNode): 
        (WebInspector.ProfileDataGridNode.prototype.get data): 
        (WebInspector.ProfileDataGridNode.prototype.expand): 
        (WebInspector.ProfileDataGridNode.prototype.collapse): 
        (WebInspector.ProfileDataGridNode.prototype._populate): 
        * page/inspector/ProfilesPanel.js:
        (WebInspector.ProfilesPanel): 
        (WebInspector.ProfilesPanel.prototype.show): Populate the sidebar
        with all profiles. This is a workaround until the Inspector
        is told about new profiles.
        (WebInspector.ProfilesPanel.prototype.reset): Clear the sidebar and
        profile views.
        (WebInspector.ProfilesPanel.prototype.handleKeyEvent): Pass the key
        event to the sidebar.
        (WebInspector.ProfilesPanel.prototype.addProfile): Create a
        ProfileSidebarTreeElement object and add it to the sidebar.
        (WebInspector.ProfilesPanel.prototype.showProfile): Create a ProfileView
        and show it.
        (WebInspector.ProfilesPanel.prototype.closeVisibleView): Hide the
        visible view.
        (WebInspector.ProfilesPanel.prototype._startSidebarDragging): Call
        WebInspector.elementDragStart.
        (WebInspector.ProfilesPanel.prototype._sidebarDragging): Call _updateSidebarWidth.
        (WebInspector.ProfilesPanel.prototype._endSidebarDragging):
        Call WebInspector.elementDragEnd.
        (WebInspector.ProfilesPanel.prototype._updateSidebarWidth): Update the
        sidebar width based on the passed in value.
        (WebInspector.ProfileSidebarTreeElement): Subclass WebInspector.SidebarTreeElement.
        (WebInspector.ProfileSidebarTreeElement.prototype.onselect): Call ProfilesPanel.showProfile.
        (WebInspector.ProfileSidebarTreeElement.prototype.get mainTitle): Return profile.title.
        (WebInspector.ProfileSidebarTreeElement.prototype.set mainTitle): Do nothing.
        (WebInspector.ProfileSidebarTreeElement.prototype.get subtitle): Ditto.
        (WebInspector.ProfileSidebarTreeElement.prototype.set subtitle): Ditto.
        * page/inspector/inspector.css: New styles for the profile sidebar
        item and profile data grid columns.
        * page/inspector/inspector.js:
        * page/inspector/utilities.js:
        (Number.secondsToString): Added a higherResolution argument
        that returns fractional milliseconds.

2008-05-20  chris fleizach  <cfleizach@apple.com>

        Reviewed by Darin Adler, Alice Liu

        <rdar://problem/3438014> Might need accessibility solution for context menus in web pages
        <rdar://problem/5060458> Elements without AXActions should not return kAXErrorFailure

        * page/AccessibilityObject.cpp:
        (WebCore::AccessibilityObject::clickPoint):
        * page/AccessibilityObject.h:
        * page/mac/AccessibilityObjectWrapper.mm:
        (-[AccessibilityObjectWrapper accessibilityActionNames]):
        (-[AccessibilityObjectWrapper accessibilityPerformPressAction]):
        (-[AccessibilityObjectWrapper accessibilityPerformShowMenuAction]):
        (-[AccessibilityObjectWrapper accessibilityShowContextMenu]):
        (-[AccessibilityObjectWrapper accessibilityPerformAction:]):

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

        Expose the ProfileNode functionName sorting functions on
        JavaScriptProfileNode.

        Reviewed by Kevin McCullough.

        * page/JavaScriptProfileNode.cpp:
        (WebCore::sortFunctionNameDescending): Call ProfileNode.
        (WebCore::sortFunctionNameAscending): Ditto.
        (WebCore::ProfileNodeClass): Add static functions.

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

        Reviewed by Mitz.

        - a first small step of CSS DOM refactoring -- the eventual goal is to
          reduce StyleBase and possibly eliminate it, since it has multiple
          purposes and unneccessarily ties many classes together

        * css/CSSCursorImageValue.cpp:
        (WebCore::isSVGCursorIdentifier): Mark static so it has internal linkage.
        (WebCore::resourceReferencedByCursorElement): Ditto.
        (WebCore::CSSCursorImageValue::CSSCursorImageValue): Removed unused style
        argument.
        (WebCore::CSSCursorImageValue::updateIfSVGCursorIsUsed): Removed code to
        check if X and Y changed before changing them -- there's no reason to do
        that. Removed code that depended on the internals of CSSImageValue. The
        new code uses only protected functions rather than going right at the
        fields and uing internal knowledge of the base class.
        * css/CSSCursorImageValue.h: Added a create function, made constructor
        private, removed unused style argument.

        * css/CSSImageValue.cpp:
        (WebCore::CSSImageValue::CSSImageValue): Removed unused style argument.
        (WebCore::CSSImageValue::cachedImageURL): Added. A protected function for
        use by CSSCursorImageValue that gives the URL.
        (WebCore::CSSImageValue::clearCachedImage): Added. A protected function for
        use by CSSCursorImageValue that clears the CachedImage.
        * css/CSSImageValue.h: Added create functions, made constructors protected
        and private, removed unused style argument, made data members private, added
        some protected functions for use by CSSCursorImageValue.

        * css/CSSImportRule.cpp:
        (WebCore::CSSImportRule::setCSSStyleSheet): Changed to call checkLoaded on
        the parent. This is part of preparation to move the checkLoaded function from
        StyleBase to StyleSheet.
        (WebCore::CSSImportRule::insertedIntoParent): Changed code to check the URL
        of the style sheet to use the href function of the style sheet rather than
        the baseURL function. This eliminates an O(n^2) algorithm here and reduces
        the use of baseURL, part of preparation to move it from StyleBase
        to CSSStyleSheet.

        * css/CSSMutableStyleDeclaration.cpp:
        (WebCore::CSSMutableStyleDeclaration::setImageProperty): Changed to use create
        function instead of a direct call to new for the CSSImageValue classes.
        * css/CSSParser.cpp:
        (WebCore::CSSParser::parseValue): Ditto.
        (WebCore::CSSParser::parseContent): Ditto.
        (WebCore::CSSParser::parseFillImage): Ditto.
        (WebCore::CSSParser::parseBorderImage): Ditto.

        * css/CSSStyleSelector.cpp: Removed unneeded include of CSSImageValue.h.
        * rendering/style/RenderStyle.h: Removed unneeded include of
        CSSCursorImageValue.h, which was causing us to rebuild the world way too often.

        * xml/XSLImportRule.cpp:
        (WebCore::XSLImportRule::setXSLStyleSheet): See change to CSSImportRule above.
        (WebCore::XSLImportRule::loadSheet): Ditto.

2008-05-20  Kevin McCullough  <kmccullough@apple.com>

        Rubber stamped by Adam.

        -Minor fix. Should not use a reference since the original may disappear.

        * page/Console.cpp:
        (WebCore::Console::profile):

2008-05-20  Kevin Ollivier  <kevino@theolliviers.com>

        wx build fix. userAgent should return a value.

        * plugins/wx/PluginViewWx.cpp:
        (WebCore::PluginView::userAgent):

2008-05-19  Timothy Hatcher  <timothy@apple.com>

        Expose the ProfileNode sorting functions on JavaScriptProfileNode.

        Reviewed by Kevin McCullough.

        * page/JavaScriptProfileNode.cpp:
        (WebCore::sortTotalTimeDescending): Call ProfileNode.
        (WebCore::sortTotalTimeAscending): Ditto.
        (WebCore::sortSelfTimeDescending): Ditto.
        (WebCore::sortSelfTimeAscending): Ditto.
        (WebCore::sortCallsDescending): Ditto.
        (WebCore::sortCallsAscending): Ditto.
        (WebCore::ProfileNodeClass): Add static functions.

2008-05-19  Timothy Hatcher  <timothy@apple.com>

        * page/InspectorController.cpp: Change the include for
        JavaScriptProfile.h to sue double quotes instead of backets.

2008-05-19  Timothy Hatcher  <timothy@apple.com>

        Adds a DataGrid object that is used for multi-column data
        and can contain hierarchical content with disclosure arrows.
        A lot of DataGrid was copied from treeoutline.js. This change
        makes the database views use the DataGrid. It will later be
        used by the ProfileView.

        Reviewed by Adam Roben.

        * page/inspector/DataGrid.js: Added. Most copied from treeoutline.js
        and modified to work with table elements.
        * page/inspector/DatabaseQueryView.js:
        (WebInspector.DatabaseQueryView.prototype._queryFinished):
        Call DatabasesPanel.dataGridForResult and adds the inline style to
        the DataGrid element.
        * page/inspector/DatabaseTableView.js:
        (WebInspector.DatabaseTableView.prototype._queryFinished):
        Call DatabasesPanel.dataGridForResult.
        * page/inspector/DatabasesPanel.js:
        (WebInspector.DatabasesPanel.prototype._tableForResult): Removed.
        (WebInspector.DatabasesPanel.prototype.dataGridForResult): Added.
        Similar to the previous _tableForResult function, but makes a DataGrid.
        * page/inspector/inspector.css: Changes to the data-grid
        style rules.
        * WebCore.vcproj/WebCore.vcproj: Add DataGrid.js.
        * page/inspector/WebKit.qrc: Ditto.
        * page/inspector/inspector.html: Ditto.

2008-05-19  Kevin McCullough  <kmccullough@apple.com>

        Reviewed by Adam.

        -build fix.

        * bindings/js/JSConsoleCustom.cpp:
        (WebCore::JSConsole::profile):
        * page/Console.cpp:
        (WebCore::Console::profile):
        * page/Console.h:
        * page/Console.idl:

2008-05-19  Alp Toker  <alp@nuanti.com>

        Reviewed by Maciej.

        GTK+/soup fixes:

        Remove the fragment part of the URL since the file backend doesn't
        deal with it.

        Fix a typo in the cleanup function.

        * platform/network/soup/ResourceHandleSoup.cpp:
        (WebCore::cleanupGioOperation):
        (WebCore::ResourceHandle::startGio):

2008-05-19  Kevin McCullough  <kmccullough@apple.com>

        Reviewed by Adam.

        <rdar://problem/5770054> JavaScript profiler (10928)
        - Send the executing context to the profiler so it can attribute time
        correctly to parent functions when calling profile() and profileEnd()
        while nested.

        * page/Console.cpp:
        (WebCore::Console::profile):
        (WebCore::Console::profileEnd):
        * page/Console.h:

2008-05-19  Alp Toker  <alp@nuanti.com>

        Reviewed by Anders and Beth.

        http://bugs.webkit.org/show_bug.cgi?id=16495
        [GTK] Accessibility support with ATK/AT-SPI

        Initial ATK/AT-SPI accessibility support for the GTK+ port.

        * GNUmakefile.am:
        * page/AccessibilityObject.cpp:
        (WebCore::AccessibilityObject::AccessibilityObject):
        (WebCore::AccessibilityObject::detach):
        * page/AccessibilityObject.h:
        * page/gtk/AXObjectCacheAtk.cpp: Added.
        (WebCore::AXObjectCache::detachWrapper):
        (WebCore::AXObjectCache::attachWrapper):
        (WebCore::AXObjectCache::postNotification):
        (WebCore::AXObjectCache::postNotificationToElement):
        (WebCore::AXObjectCache::handleFocusedUIElementChanged):
        * page/gtk/AccessibilityObjectWrapperAtk.cpp: Added.
        (WebCore::AccessibilityObject::wrapper):
        (WebCore::AccessibilityObject::setWrapper):
        * page/gtk/AccessibilityObjectWrapperAtk.h: Added.

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

        Reviewed by Adam.

        <rdar://problem/5946454>
        Support navigator.onLine from HTML5.

        Add Windows NetworkStateNotifier implementation using the IP Helper API.

        * WebCore.vcproj/WebCore.vcproj:
        * platform/network/NetworkStateNotifier.h:
        (WebCore::updateState):
        * platform/network/win/NetworkStateNotifierWin.cpp: Added.
        (WebCore::NetworkStateNotifier::updateState):
        (WebCore::NetworkStateNotifier::addressChanged):
        (WebCore::NetworkStateNotifier::callAddressChanged):
        (WebCore::NetworkStateNotifier::addrChangeCallback):
        (WebCore::NetworkStateNotifier::registerForAddressChange):
        (WebCore::NetworkStateNotifier::NetworkStateNotifier):

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

        Disable C4273, C4565 for CSSGrammar.cpp, XPathGrammar.cpp to fix build.
        
        Reviewed by Adam Roben.

        * WebCore.vcproj/WebCore.vcproj:

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

        Fix Bug 19065: Resources with a space in their URL don't get
        error/warning bubbles

        <https://bugs.webkit.org/show_bug.cgi?id=19065>

        Reviewed by Dan Bernstein.

        Test: manual-tests/inspector/errors-with-space in-url.html

        * manual-tests/inspector/errors-with-space in-url.html: Added.
        * page/Console.cpp:
        (WebCore::Console::error):
        (WebCore::Console::info):
        (WebCore::Console::log):
        (WebCore::Console::warn):
        Pass the raw URL to the Inspector, not the pretty URL, to match the
        URL that was used when initially telling the Inspector about this
        resource. We continue to pass the pretty URL to the ChromeClient for
        backwards compatibility.

2008-05-19  Stephanie Lewis  <slewis@apple.com>

        Reviewed by Darin.

        more fast teardown performance work, WebCore plumbing

        * page/Chrome.cpp:
        (WebCore::Chrome::disableSuddenTermination):
        (WebCore::Chrome::enableSuddenTermination):
        (WebCore::ChromeClient::disableSuddenTermination):
        (WebCore::ChromeClient::enableSuddenTermination):
        * page/Chrome.h:
        * page/ChromeClient.h:
        * page/Page.cpp:
        (WebCore::Page::changePendingUnloadEventCount):
        (WebCore::Page::changePendingBeforeUnloadEventCount):

2008-05-19  Kuchhal  <kuchal@yahoo.com>

        Reviewed by Justin.

        <rdar://problem/5863412> Crash when Ctrl C is pressed after a series of specific mouse events (18506)

        * editing/markup.cpp:
        (WebCore::createMarkup): Null check.

2008-05-19  Chris Fleizach  <cfleizach@apple.com>

        Reviewed by Beth Dakin.

        <rdar://problem/5912195> CrashTracer: [USER] 1 crash in Mail at -[AccessibilityObjectWrapper accessibilityAttributeValue:forParameter:]

        * page/mac/AccessibilityObjectWrapper.mm:
        (visiblePositionForTextMarker):

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.

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

        Reviewed by Darin.

        http://bugs.webkit.org/show_bug.cgi?id=18308
        SVG Encoding error with fill attribute

        This is caused by problems with data: URL loading. Besides what is fixed by this patch,
        I filed <rdar://problem/5845875> for CFNetwork.

        While at it, fixed a related javascript: URL issue.

        Tests: fast/loader/data-url-encoding-html.html
               fast/loader/data-url-encoding-svg.html
               fast/loader/javascript-url-encoding.html

        * platform/KURL.cpp:
        (WebCore::KURL::parse): Fix a FIXME, use UTF-8 instead of dropping high bytes. This fixes
        javascript: URL handling.
        (WebCore::encodeRelativeString): Like mailto: URLs, data: ones are all UTF-8. Restructured
        the code to not search for "#" if both parts are to be encoded as UTF-8 anyway.

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

        Reviewed by Darin.

        https://bugs.webkit.org/show_bug.cgi?id=18421
        <rdar://problem/5857369> XMLHttpRequest does not properly encode & and < in outgoing messages

        Test: http/tests/xmlhttprequest/serialize-document.html

        * bindings/js/JSXMLHttpRequestCustom.cpp:
        (WebCore::JSXMLHttpRequest::send): Use createMarkup() instead of Document::toString().

        * dom/Attr.cpp:
        * dom/Attr.h:
        * dom/Document.cpp:
        * dom/Document.h:
        * dom/DocumentFragment.cpp:
        * dom/DocumentFragment.h:
        * dom/Element.cpp:
        * dom/Element.h:
        * dom/Entity.cpp:
        * dom/Entity.h:
        * dom/EntityReference.cpp:
        * dom/EntityReference.h:
        * dom/Node.h:
        * dom/Text.cpp:
        * dom/Text.h:
        * html/HTMLElement.cpp:
        * html/HTMLElement.h:
        Removed most Node::toString() methods, which were massively wrong, and only used for
        XMLHttpRequest::send(). The remanining ones are still used in markup.cpp, but should probably
        be folded into it for consistency.

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

        Fix Windows build.
        
        * plugins/win/PluginViewWin.cpp:
        (WebCore::PluginView::userAgentStatic):
        (WebCore::PluginView::getValueStatic):
        (WebCore::PluginView::getValue):

2008-05-19  Chris Fleizach  <cfleizach@apple.com>

        Reviewed by Darin Adler.

        <rdar://problem/5935694> AX: crash in text marker range

        * page/mac/AccessibilityObjectWrapper.mm:
        (textMarkerRangeFromMarkers):

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

        - fix WebKit build

        * WebCore.xcodeproj/project.pbxproj: Make CSSReflectionDirection.h "private" instead of "project".

2008-05-19  chris fleizach  <cfleizach@apple.com>

        Reviewed by Darin Adler

        <rdar://problem/5700830> VO: VoiceOver should fall back to title attr if form element is not labeled

        * page/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::title):

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

        Reviewed by Mitz.

        - tweak CSSReflectValue, possibly fixing the leaks seen on the buildbot

        * WebCore.vcproj/WebCore.vcproj: Added CSSReflectionDirection.h. 
        * WebCore.xcodeproj/project.pbxproj: Ditto.
        * css/CSSReflectionDirection.h: Added.

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::valueForReflection): Changed to use CSSReflectValue::create.
        * css/CSSParser.cpp:
        (WebCore::CSSParser::parseReflect): Ditto.

        * css/CSSReflectValue.h: Added a create function. Got rid of the setter
        functions, which had const PassRefPtr& arguments -- those probably caused
        the leaks although I'm not exactly sure why. Made the contructor and all
        the data members private.

        * rendering/style/RenderStyle.h: Changed to include CSSReflectionDirection.h
        instead of CSSReflectValue.h so we can tweak CSSReflectValue without
        recompiling the world.

2008-05-19  Holger Hans Peter Freyther  <zecke@selfish.org>

        Rubber Stamped by Simon.

        Enforce the WebKit Coding Style.

        * plugins/PluginView.cpp:
        (WebCore::PluginView::load):
        (WebCore::PluginView::setValue):
        * plugins/gtk/PluginViewGtk.cpp:
        (WebCore::PluginView::setFocus):
        (WebCore::PluginView::show):
        (WebCore::PluginView::hide):
        (WebCore::PluginView::attachToWindow):
        (WebCore::PluginView::detachFromWindow):
        (WebCore::PluginView::getValueStatic):
        (WebCore::PluginView::getValue):
        * plugins/qt/PluginViewQt.cpp:
        (WebCore::PluginView::updateWindow):
        (WebCore::PluginView::detachFromWindow):
        (WebCore::PluginView::handlePostReadFile):
        (WebCore::PluginView::getValueStatic):
        (WebCore::PluginView::getValue):

2008-05-14  Marc Ordinas i Llopis  <marc.ordinasillopis@collabora.co.uk>

        Reviewed by Holger.

        https://bugs.webkit.org/show_bug.cgi?id=18882
        https://bugs.webkit.org/show_bug.cgi?id=18892
        Based also on work by Chris Lord.
        
        Provides support for NPAPI plugins that pass NULL as their instance
        info. There are two kinds:
        - Some call NPN_UserAgent and NPN_GetValue before a PluginView has
        been created. For those we provide static versions of those functions.
        - Others call NPN_* functions with a NULL instance inside NPP_*
        calls, for those we've added extra currentPluginView guards.

        * plugins/PluginView.cpp: Add additional currentPluginView guards and
        some small style changes.
        (WebCore::PluginView::start):
        (WebCore::PluginView::performRequest):
        (WebCore::PluginView::bindingInstance):
        (WebCore::PluginView::handlePost):
        * plugins/PluginView.h: Added static versions of NPN_UserAgent and
        NPN_GetValue.
        * plugins/gtk/PluginViewGtk.cpp: Add additional currentPluginView
        guards and some small style changes.
        (WebCore::PluginView::setNPWindowRect):
        (WebCore::PluginView::stop):
        (WebCore::PluginView::userAgentStatic): Added to deal with plugins
        that query this before having a PluginView.
        (WebCore::PluginView::getValueStatic): Added to deal with plugins
        that call this before we have created a PluginView.
        (WebCore::PluginView::getValue): Moved some code to getValueStatic.
        (WebCore::PluginView::init):
        * plugins/npapi.cpp: Call PluginView::userAgentStatic
        and PluginView::getValueStatic if no PluginView is
        present.
        (NPN_UserAgent):
        (NPN_GetValue):
        * plugins/qt/PluginPackageQt.cpp:
        (WebCore::PluginPackage::fetchInfo): Corrected split args because ignoring
        empty entries crashed.
        (WebCore::PluginPackage::load): Resolve all symbols when loading plugins
        to protect against XPCOM dependencies.
        * plugins/qt/PluginViewQt.cpp: Add additional currentPluginView guards and
        some small style changes.
        (WebCore::PluginView::updateWindow):
        (WebCore::PluginView::setNPWindowRect):
        (WebCore::PluginView::stop):
        (WebCore::PluginView::userAgentStatic): Added to deal with plugins
        that query this before having a PluginView.
        (WebCore::PluginView::handlePostReadFile):
        (WebCore::PluginView::getValueStatic): Added to deal with plugins
        that call this before we have created a PluginView.
        (WebCore::PluginView::getValue): Moved some code to getValueStatic.
        (WebCore::PluginView::init): m_needsXEmbed init was moved to constructor.

2008-05-19  Alp Toker  <alp@nuanti.com>

        GTK+ build fix on Mac. Conditionalize XP_UNIX use.

        * plugins/gtk/PluginPackageGtk.cpp:
        (WebCore::PluginPackage::fetchInfo):
        (WebCore::PluginPackage::load):
        * plugins/gtk/PluginViewGtk.cpp:

2008-05-18  Chris Fleizach  <cfleizach@apple.com>

        Reviewed by Darin Adler

        <rdar://problem/5942076> WebKit can no longer find URL links with VoiceOVer-U command (19100)

        * page/AccessibilityObject.h:

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-05-18  Brady Eidson  <beidson@apple.com>

        Reviewed by Sam Weinig

        Fix for https://bugs.webkit.org/show_bug.cgi?id=19111
        Allow `delete storage.itemName` syntax as an alias for `storage.removeItem("itemName")`

        Tests: storage/domstorage/localstorage/delete-removal.html
               storage/domstorage/sessionstorage/delete-removal.html

        * bindings/js/JSStorageCustom.cpp:
        (WebCore::JSStorage::deleteProperty): Only do the delete for non-built in properties
        * storage/Storage.idl:

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

        Reviewed by Mark Rowe.

        Re-factor core setRequestHeader logic into setRequestHeaderInternal.

        * xml/XMLHttpRequest.cpp:
        (WebCore::XMLHttpRequest::sameOriginRequest):
        (WebCore::XMLHttpRequest::setRequestHeader):
        (WebCore::XMLHttpRequest::setRequestHeaderInternal):
        * xml/XMLHttpRequest.h:

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

        Reviewed by Mark Rowe.

        Differentiate between cancelation errors and generic network error in XHR.

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::requestFromDelegate):
        (WebCore::FrameLoader::cancelledError):
        * platform/network/ResourceErrorBase.h:
        (WebCore::ResourceErrorBase::setIsCancelation):
        (WebCore::ResourceErrorBase::isCancelation):
        (WebCore::ResourceErrorBase::ResourceErrorBase):
        Add state that differentiates between errors created by cancelation and those made
        by all other generic network errors as this differentiation is needed by some specs.

        * xml/XMLHttpRequest.cpp:
        (WebCore::XMLHttpRequest::open):
        (WebCore::XMLHttpRequest::loadRequestSynchronously):
        (WebCore::XMLHttpRequest::clearResponseEntityBody):
        (WebCore::XMLHttpRequest::genericError):
        (WebCore::XMLHttpRequest::networkError):
        (WebCore::XMLHttpRequest::abortError):
        (WebCore::XMLHttpRequest::didFail):
        * xml/XMLHttpRequest.h:
        * xml/XMLHttpRequestException.h:
        (WebCore::XMLHttpRequestException::):
        * xml/XMLHttpRequestException.idl:
        Add ABORT_ERR. This error cannot be raised with the current WebKit architecture
        as it requires the ability to cancel a synchronous XHR, which we cannot currently
        do.  It may be possible in the future though.

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

        Reviewed by Sam Weinig.

        Including wtf/Platform.h or using any of the macros it defines in headers that may be
        included from outside of the WebKit project causes any project using those headers to
        fail to build.

        * page/mac/WebDashboardRegion.h:

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

        Reviewed by Brady Eidson.

        Re-factor send() logic a little to make adding cross-site requests easier.

        * xml/XMLHttpRequest.cpp:
        (WebCore::XMLHttpRequest::send):
        (WebCore::XMLHttpRequest::sameOriginRequest):
        (WebCore::XMLHttpRequest::loadRequestSynchronously):
        (WebCore::XMLHttpRequest::loadRequestAsynchronously):
        * xml/XMLHttpRequest.h:

2008-05-16  Anders Carlsson  <andersca@apple.com>

        Reviewed by Mitz.

        Copy appcache headers.
        
        * WebCore.vcproj/WebCore.vcproj:

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

        Reviewed by Anders.
        
        Fix <rdar://problem/5934400> 
        Movie controller does not update on first load of http://www.apple.com/getamac/ads/
        
        The issue is that we execute scripts while there are still pending stylesheet loads.
        If the script depends on a stylesheet having been applied it may fail.
        
        This will make external script execution block on external stylesheet loads. A full
        fix (as discussed with Hyatt) will also need to block inline script execution.

        Test: http/tests/local/stylesheet-and-script-load-order-http.html

        * html/HTMLTokenizer.cpp:
        (WebCore::HTMLTokenizer::notifyFinished):

2008-05-16  chris fleizach  <cfleizach@apple.com>

        Reviewed by Jon Honeycutt

        <rdar://problem/5582483> Mail compose area needs to allow AXValue to be settable

        * page/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::isReadOnly):
        (WebCore::AccessibilityRenderObject::canSetValueAttribute):

2008-05-16  Stephanie Lewis  <slewis@apple.com>

        Reviewed by Maciej.

        track onbeforeunlaod event counts. Pretty much identical to unload event tracking.
        Also rename methods from onunload tracking to be more clear.

        increment/decrement event counts when onunload and onbeforeunload events are added/removed
        * dom/Document.cpp:
        (WebCore::Document::removeHTMLWindowEventListener):
        (WebCore::Document::addWindowEventListener):
        (WebCore::Document::removeWindowEventListener):
        (WebCore::Document::addPendingFrameUnloadEventCount):
        (WebCore::Document::removePendingFrameUnloadEventCount):
        (WebCore::Document::addPendingFrameBeforeUnloadEventCount):
        (WebCore::Document::removePendingFrameBeforeUnloadEventCount):
        * dom/Document.h:
        
        clear onunload count after unload events are dispatched
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::stopLoading):

        track onunload and onbeforeunload event counts for each frame
        * page/EventHandler.cpp:
        (WebCore::EventHandler::EventHandler):
        (WebCore::EventHandler::addPendingFrameUnloadEventCount):
        (WebCore::EventHandler::removePendingFrameUnloadEventCount):
        (WebCore::EventHandler::clearPendingFrameUnloadEventCount):
        (WebCore::EventHandler::pendingFrameBeforeUnloadEventCount):
        (WebCore::EventHandler::addPendingFrameBeforeUnloadEventCount):
        (WebCore::EventHandler::removePendingFrameBeforeUnloadEventCount):
        (WebCore::EventHandler::clearPendingFrameBeforeUnloadEventCount):
        * page/EventHandler.h:
        
        clear unbeforeunload count after unbeforeunload events are detached
        * page/Frame.cpp:
        (WebCore::Frame::shouldClose):

        track total event count at page level
        * page/Page.cpp:
        (WebCore::Page::Page):
        (WebCore::Page::changePendingUnloadEventCount):
        (WebCore::Page::pendingBeforeUnloadEventCount):
        (WebCore::Page::changePendingBeforeUnloadEventCount):
        * page/Page.h:

2008-05-16  Anders Carlsson  <andersca@apple.com>

        Reviewed by Mitz.

        <rdar://problem/5787788>
        REGRESSION: fast/loader/xmlhttprequest-missing-file-exception.html fails on Windows.
        
        Replicate the Mac behavior when a sync load fails.
        
        * platform/network/cf/ResourceHandleCFNet.cpp:
        (WebCore::ResourceHandle::loadResourceSynchronously):

2008-05-16  Anders Carlsson  <andersca@apple.com>

        Reviewed by Brady.

        Parse and set the headers on the response.

        * loader/appcache/ApplicationCacheStorage.cpp:
        (WebCore::ApplicationCacheStorage::store):
        (WebCore::parseHeader):
        (WebCore::parseHeaders):
        (WebCore::ApplicationCacheStorage::loadCache):

2008-05-16  Timothy Hatcher  <timothy@apple.com>

        Adds the "this" object to the Local scope section of the
        Scope Variables pane.

        <rdar://problem/5774773> Web Inspector doesn't show the "this"
        object in its variables list (10438)

        Reviewed by Oliver Hunt.

        * bindings/js/JSJavaScriptCallFrameCustom.cpp:
        (WebCore::JSJavaScriptCallFrame::thisObject): Returns the thisObject
        of the JavaScriptCallFrame impl. Returns jsNull if the impl is invalid.
        * page/JavaScriptCallFrame.cpp:
        (WebCore::JavaScriptCallFrame::thisObject): Return the thisValue from
        the ExecState. Return 0 if m_exec is null.
        * page/JavaScriptCallFrame.h:
        * page/JavaScriptCallFrame.idl: Add thisObject.
        * page/inspector/ObjectPropertiesSection.js:
        (WebInspector.ObjectPropertiesSection): Adds two new arguments.
        The ignoreHasOwnProperty tells the section to show all properties,
        including inherited ones. And extraProperties is an object of
        additional properties to show.
        (WebInspector.ObjectPropertiesSection.prototype): Honor the
        extraProperties and ignoreHasOwnProperty properties.
        * page/inspector/ScopeChainSidebarPane.js:
        (WebInspector.ScopeChainSidebarPane.prototype.update): Add a this
        property to an extra object that is passed to the ObjectPropertiesSection.
        Also pass true for ignoreHasOwnProperty since we want to show all properties.

2008-05-16  Anders Carlsson  <andersca@apple.com>

        Reviewed by Brady.

        Add mimeType and textEncodingName to the resource table.
        
        * loader/appcache/ApplicationCacheStorage.cpp:
        (WebCore::ApplicationCacheStorage::openDatabase):
        (WebCore::ApplicationCacheStorage::store):
        (WebCore::ApplicationCacheStorage::loadCache):

2008-05-16  Kevin McCullough  <kmccullough@apple.com>

        Reviewed by Tim.

        <rdar://problem/5770054> JavaScript profiler (10928)
        Use a Vector instead of a Deque since we don't use the extra capabilities
        of the Deque.

        * page/JavaScriptProfileNode.cpp:
        (WebCore::getChildren):
        (WebCore::toJS):

2008-05-16  Anders Carlsson  <andersca@apple.com>

        Reviewed by Brady.

        Add a version table to the database.

        * loader/appcache/ApplicationCacheStorage.cpp:
        (WebCore::ApplicationCacheStorage::verifySchemaVersion):
        (WebCore::ApplicationCacheStorage::openDatabase):
        * loader/appcache/ApplicationCacheStorage.h:

2008-05-16  Timothy Hatcher  <timothy@apple.com>

        Adds the ability to evaluate expressions in the local scope
        of the selected call frame.

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

        Reviewed by Geoff Garen.

        * bindings/js/JSJavaScriptCallFrameCustom.cpp:
        (WebCore::JSJavaScriptCallFrame::evaluate): Pass the exception
        from evaluate to the calling ExecState.
        * page/JavaScriptCallFrame.cpp:
        (WebCore::JavaScriptCallFrame::evaluate): Added an exception out
        argument. Simplified the code by calling KJS:eval directly.
        * page/JavaScriptCallFrame.h: Change evalutate to take an exception
        out argument.
        * page/inspector/Console.js: Check if the debugger is paused and
        call evaluateInSelectedCallFrame on the Scripts panel.
        * page/inspector/ScriptsPanel.js: Added a paused getter and
        evaluateInSelectedCallFrame which does the evaluation and updates
        the scope variables pane afterwards.

2008-05-16  Timothy Hatcher  <timothy@apple.com>

        Fixed the bug where the Inspector node highlight would not show
        in the correct place for nodes in frames.

        <rdar://problem/5712834> Elements in iframes are highlighted incorrectly (14408)

        Reviewed by John Sullivan.

        * page/InspectorController.cpp:
        (WebCore::convertFromFrameToMainFrame): Helper function to convert
        IntRect coordinates from one frame to the main frame.
        (WebCore::InspectorController::drawNodeHighlight): Call the
        convertFromFrameToMainFrame helper for all the rects we get from
        the node since they are in the owner frame's coordinate space.

2008-05-16  Julien Chaffraix  <jchaffraix@webkit.org>

        Reviewed by Eric.

        Preparatory work for bug 9191: JS*ElementWrapperFactory should be autogenerated

        Make video tags use a header guard so that make_names.pl for factory generation.

        - Add video tag guard in HTMLTagNames.in & give an extraDefines parameter to make_names.pl
        when generating HTMLNames.

        - Modify the different build systems to accomodate the new parameter.

        - Small make_names.pl clean up (mainly code generated coding style issue).

        * DerivedSources.make: Add HTML_FLAGS and pass it to make_names.pl
        if it is defined (similar to SVG) 

        * GNUmakefile.am: Add HTML_FEATURES & HTML_FLAGS and pass it to
        make_names.pl if HTML_FLAGS is defined.

        * WebCore.pro: Pass $${DEFINES} to make_names.pl.

        * dom/make_names.pl: 
        * html/HTMLElement.cpp:
        (WebCore::inlineTagList): Add ENABLE(VIDEO) guard.
        * html/HTMLTagNames.in: Ditto.

2008-05-16  Anders Carlsson  <andersca@apple.com>

        Reviewed by Mitz.

        Fire progress events.
        
        * loader/appcache/ApplicationCacheGroup.cpp:
        (WebCore::ApplicationCacheGroup::startLoadingEntry):

2008-05-16  Anders Carlsson  <andersca@apple.com>

        Reviewed by John.

        Handle the case where the main resource load is cancelled while the cache attempt is in progress.
        
        * loader/DocumentLoader.cpp:
        (WebCore::DocumentLoader::mainReceivedError):
        Tell the group that the main resource failed to load.
        
        * loader/appcache/ApplicationCacheGroup.cpp:
        (WebCore::ApplicationCacheGroup::failedLoadingMainResource):
        Call cacheUpdateFailed.
        
        (WebCore::ApplicationCacheGroup::cacheUpdateFailed):
        Stop loading if the update failed.
        
        * loader/appcache/ApplicationCacheGroup.h:

2008-05-16  Chris Fleizach  <cfleizach@apple.com>

        Reviewed by Alice Liu

        <rdar://problem/5710317> REGRESSION:Selecting ranges of text should be possible using the keyboard (15310)

        * WebCore.base.exp:
        * editing/VisiblePosition.cpp:
        (WebCore::VisiblePosition::leftVisuallyDistinctCandidate):
        (WebCore::VisiblePosition::rightVisuallyDistinctCandidate):
        * page/AXObjectCache.cpp:
        * page/AXObjectCache.h:
        (WebCore::AXObjectCache::enableEnhancedUserInterfaceAccessibility):
        (WebCore::AXObjectCache::accessibilityEnabled):
        (WebCore::AXObjectCache::accessibilityEnhancedUserInterfaceEnabled):
        * page/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::visiblePositionRange):
        (WebCore::AccessibilityRenderObject::doSetAXSelectedTextMarkerRange):
        (WebCore::AccessibilityRenderObject::addChildren):
        (WebCore::AccessibilityRenderObject::actionVerb):
        * page/EventHandler.cpp:
        (WebCore::EventHandler::handleKeyboardSelectionMovement):
        (WebCore::EventHandler::defaultKeyboardEventHandler):
        * page/EventHandler.h:

2008-05-15  Ariya Hidayat  <ariya.hidayat@trolltech.com>

        Reviewed by Simon.

        Since WebKitGtk is fully using autotools now, clean-up the .pro/.pri files
        from gtk-port.

        * WebCore.pro:

2008-05-16  Simon Hausmann  <hausmann@webkit.org>

        Fix the Gtk build.

        * GNUmakefile.am: Added rendering/style to the include paths.

2008-05-16  Simon Hausmann  <hausmann@webkit.org>

        Fix the Qt build.

        * WebCore.pro: Added rendering/style to the include paths
        * page/AXObjectCache.cpp:
        (WebCore::AXObjectCache::handleActiveDescendantChanged): Don't compile
        this method unless a17n is enabled.

2008-05-15  Rob Buis  <buis@kde.org>

        Reviewed by Dave Hyatt.

        https://bugs.webkit.org/show_bug.cgi?id=17433
        getComputedStyle() -> clip returns empty string

        Make getComputedStyle return a shape value for clip
        if it is set.

        Tests: fast/css/getPropertyValue-clip.html

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::CSSComputedStyleDeclaration::getPropertyCSSValue):

2008-05-15  Kevin Ollivier  <kevino@theolliviers.com>

        wx build fix. Add rendering/style to includes dir.

        * webcore-base.bkl:

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

        Reviewed by Beth Dakin.

        Fixed <rdar://problem/5882283> Implement ARIA aria-activedescendant
        Also added support for aria roles listbox and option, and aria-selected, 
        and aria-multiselectable for listboxes

        * dom/Element.cpp:
        (WebCore::Element::attributeChanged):
        * dom/Element.h:
        * dom/StyledElement.cpp:
        (WebCore::StyledElement::attributeChanged):
        * html/HTMLAttributeNames.in:
        * page/AXObjectCache.cpp:
        (WebCore::AXObjectCache::handleActiveDescendantChanged):
        * page/AXObjectCache.h:
        (WebCore::AXObjectCache::accessibilityEnabled):
        (WebCore::AXObjectCache::handleActiveDescendantChanged):
        * page/AccessibilityListBox.cpp:
        (WebCore::AccessibilityListBox::selectedChildren):
        (WebCore::AccessibilityListBox::visibleChildren):
        * page/AccessibilityListBox.h:
        * page/AccessibilityListBoxOption.h:
        (WebCore::AccessibilityListBoxOption::selectedChildren):
        (WebCore::AccessibilityListBoxOption::visibleChildren):
        * page/AccessibilityObject.cpp:
        * page/AccessibilityObject.h:
        (WebCore::AccessibilityObject::isListBox):
        (WebCore::AccessibilityObject::shouldFocusActiveDescendant):
        (WebCore::AccessibilityObject::activeDescendant):
        (WebCore::AccessibilityObject::handleActiveDescendantChanged):
        * page/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::title):
        (WebCore::AccessibilityRenderObject::accessibilityShouldUseUniqueId):
        (WebCore::AccessibilityRenderObject::focusedUIElement):
        (WebCore::AccessibilityRenderObject::shouldFocusActiveDescendant):
        (WebCore::AccessibilityRenderObject::activeDescendant):
        (WebCore::AccessibilityRenderObject::handleActiveDescendantChanged):
        (WebCore::RoleEntry::):
        (WebCore::AccessibilityRenderObject::ariaRoleAttribute):
        (WebCore::AccessibilityRenderObject::ariaListboxSelectedChildren):
        (WebCore::AccessibilityRenderObject::selectedChildren):
        (WebCore::AccessibilityRenderObject::ariaListboxVisibleChildren):
        (WebCore::AccessibilityRenderObject::visibleChildren):
        * page/AccessibilityRenderObject.h:
        (WebCore::AccessibilityRenderObject::isDetached):
        * page/mac/AccessibilityObjectWrapper.mm:
        (-[AccessibilityObjectWrapper accessibilityAttributeValue:]):

2008-05-15  Timothy Hatcher  <timothy@apple.com>

        Adds an error and warning count indicator at the bottom right in the
        Inspector's status bar.

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

        Initial implementation by Adam Roben.
        Reviewed by Sam Weinig.

        Test: manual-tests/inspector/error-warning-count.html

        * English.lproj/localizedStrings.js: Added new strings.
        * manual-tests/inspector/error-warning-count.html: Added.
        * page/inspector/Console.js:
        (WebInspector.Console.prototype.show): Don't do anything if visible.
        (WebInspector.Console.prototype.hide): Don't do anything if hidden.
        Temporally set properties and classes to mimic the post-animation
        values so panels like Elements in their updateStatusBarItems call will
        size things to fit the final location. 
        * page/inspector/ElementsPanel.js:
        (WebInspector.ElementsPanel.prototype.updateBreadcrumbSizes):
        Account for the #error-warning-count width when sizing breadcrumbs. 
        * page/inspector/Resource.js:
        (WebInspector.Resource.prototype.set errors): Update the global error count.
        (WebInspector.Resource.prototype.set warnings): Update the global warning count.
        * page/inspector/inspector.css: Make .hidden's display property
        !important to ensure things really hide, and added styling for the new
        #error-warning-count element.
        * page/inspector/inspector.html: Added an #error-warning-count div
        in the #anchored-status-bar-items div.
        * page/inspector/inspector.js:
        (WebInspector.get errors): Added.
        (WebInspector.set errors): Added. Calls _updateErrorAndWarningCounts.
        (WebInspector.get warnings): Added.
        (WebInspector.set warnings): Added. Calls _updateErrorAndWarningCounts.
        (WebInspector._updateErrorAndWarningCounts): Added. Update the
        #error-warning-count div with the current error/warning count.
        (WebInspector.loaded): Add a click event listener to the
        #error-warning-count element that will show the Console. Call
        _updateErrorAndWarningCounts to display the initial error/warning counts.

2008-05-15  Timothy Hatcher  <timothy@apple.com>

        Fixes a bug in the view source parsing of text within <script>,
        <style>, <xmp>, <textarea> and other special tags. The text was
        being parsed as HTML and would be syntax highlighted if a "<"
        was encountered.

        <rdar://problem/5790805> Inspector's source view missing some words,
        doubles others in JS source in <script> tag (17752)

        Reviewed by Dave Hyatt.

        Added test: fast/frames/viewsource-plain-text-tags.html

        * html/HTMLTokenizer.cpp:
        (WebCore::HTMLTokenizer::scriptHandler): Set scriptCodeSize and
        scriptCodeResync to zero before an early return in view source mode.
        This was causing text from a previous script tag to show up in
        then next style tag.
        (WebCore::HTMLTokenizer::parseTag): Enter an if block in view source
        mode even if n is null. The n is property guarded in other places
        and not used by view source mode. Removes a redundant null check on n.
        Add a new null check of n before setting scriptSrcCharset. Other code
        in HTMLTokenizer is already guarded for this code path. 

2008-05-15  Timothy Hatcher  <timothy@apple.com>

        Changes the Web Inspector node highlight to be less aggressive
        and only highlight when hovering over the selected node in the DOM
        tree or breadcrumbs. You can highlight on hover for any node if
        you hold down the Alt/Option key while hovering.

        Reviewed by Kevin McCullough.

        * page/inspector/ElementsPanel.js:
        * page/inspector/inspector.js:

2008-05-15  Stephanie Lewis  <slewis@apple.com>

        Fix windows build

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

2008-05-15  Stephanie Lewis  <slewis@apple.com>

        Reviewed by Anders.
        
        export a symbol needed for fast teardown

        * WebCore.base.exp:

2008-05-15  Stephanie Lewis  <slewis@apple.com>

        Reviewed by Anders.

        Keep track on pending unload event counts

        No change in behavior so no new tests, but I am dumping the 
        unload event count to track the new variable.

        * WebCore.base.exp:

        increment/decrement the count when an event is added/removed
        * dom/Document.cpp:
        (WebCore::Document::removeHTMLWindowEventListener):
        (WebCore::Document::addWindowEventListener):
        (WebCore::Document::removeWindowEventListener):
        (WebCore::Document::setPendingFrameUnloadEventCount):
        * dom/Document.h:

        set the count to 0 for each frame after the unload event has been dispatched
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::stopLoading):

        keep track of the number of pending unload events for the eventHandler's frame
        * page/EventHandler.cpp:
        (WebCore::EventHandler::EventHandler):
       (WebCore::EventHandler::pendingFrameUnloadEventCount):
        (WebCore::EventHandler::setPendingFrameUnloadEventCount):
        * page/EventHandler.h:

        keep track of the total number of pending unload events for all of the frames
        * page/Page.cpp:
        (WebCore::Page::Page):
        (WebCore::Page::pendingUnloadEventCount):
        (WebCore::Page::setPendingUnloadEventCount):
        * page/Page.h:

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

        Fix build.

        * WebCore.vcproj/WebCore.vcproj:

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

        Fix build.

        * WebCore.vcproj/WebCore.vcproj:

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

        Fix build.

        * WebCore.vcproj/WebCore.vcproj:

2008-05-15  David Kilzer  <ddkilzer@apple.com>

        Bug 19085: font-family: initial sets font-family differently than font: initial

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

        Reviewed by David Hyatt.

        Test: fast/css/font-family-initial.html

        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::applyProperty): Don't set family if first
        family of initial font description is empty.

2008-05-15  David Hyatt  <hyatt@apple.com>

        Move RenderStyle into a new subdirectory, rendering/style/, in preparation for breaking it up into
        a bunch of smaller files.

        Reviewed by Dan Bernstein

        * GNUmakefile.am:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * WebCoreSources.bkl:
        * rendering/RenderStyle.cpp: Removed.
        * rendering/RenderStyle.h: Removed.
        * rendering/style: Added.
        * rendering/style/RenderStyle.cpp: Copied from rendering/RenderStyle.cpp.
        * rendering/style/RenderStyle.h: Copied from rendering/RenderStyle.h.

2008-05-15  David Kilzer  <ddkilzer@apple.com>

        Fix leaks when stopping a page from loading

        Patch suggested by Antti.  Reviewed by Antti.

        * loader/DocLoader.cpp:
        (WebCore::DocLoader::clearPreloads): If a resource is in m_preloads but
        never made it to the cache, delete it to prevent it from leaking.

2008-05-15  Julien Chaffraix  <jchaffraix@webkit.org>

        Reviewed by Darin.

        https://bugs.webkit.org/show_bug.cgi?id=13942
        ASSERTION FAILED: !attrName.contains('/') in HTMLTokenizer.cpp:132 when loading http://bamanzi.blogeden.cn/

        In HTML, when an attribute was null (for example when we parse '="somevalue"'
        (attribute forgotten or there is a space between the attribute and the '=')),
        the fallback was to assign the value to the attribute. However if the value was
        a url or did contain a '/', we would trigger the assertion.

        To avoid that, we check the value before assigning it now and do not assign it
        if it means adding a '/'.

        Test: fast/parser/assertion-empty-attribute.html

        * html/HTMLTokenizer.cpp:
        (WebCore::HTMLTokenizer::parseTag): Add check for '/' in value before
        assigning it to an attribute when the attribute is null.

2008-05-15  Kevin Ollivier  <kevino@theolliviers.com>

        wx build fix for recent breakages. Add EventLoopWx.cpp, update the Bakefiles,
        and add stubs for new Plugins functions. Also move plugin functions outside of
        TemporaryLinkStubs.cpp so that they are more noticeable.

        * WebCoreSources.bkl:
        * platform/wx/EventLoopWx.cpp: Added.
        (WebCore::EventLoop::cycle):
        * platform/wx/TemporaryLinkStubs.cpp:
        * plugins/wx: Added.
        * plugins/wx/PluginDataWx.cpp: Added.
        (WebCore::PluginData::initPlugins):
        (WebCore::PluginData::refresh):
        * plugins/wx/PluginDatabaseWx.cpp: Added.
        (WebCore::PluginDatabase::getPluginPathsInDirectories):
        (WebCore::PluginDatabase::defaultPluginDirectories):
        (WebCore::PluginDatabase::isPreferredPluginDirectory):
        * plugins/wx/PluginPackageWx.cpp: Added.
        (WebCore::PluginPackage::determineQuirks):
        (WebCore::PluginPackage::fetchInfo):
        (WebCore::PluginPackage::load):
        (WebCore::PluginPackage::hash):
        (WebCore::PluginPackage::equal):
        (WebCore::PluginPackage::compareFileVersion):
        * plugins/wx/PluginViewWx.cpp: Added.
        (WebCore::PluginView::updateWindow):
        (WebCore::PluginView::setFocus):
        (WebCore::PluginView::show):
        (WebCore::PluginView::hide):
        (WebCore::PluginView::paint):
        (WebCore::PluginView::handleKeyboardEvent):
        (WebCore::PluginView::handleMouseEvent):
        (WebCore::PluginView::setParent):
        (WebCore::PluginView::setNPWindowRect):
        (WebCore::PluginView::attachToWindow):
        (WebCore::PluginView::detachFromWindow):
        (WebCore::PluginView::stop):
        (WebCore::PluginView::userAgent):
        (WebCore::PluginView::handlePostReadFile):
        (WebCore::PluginView::getValue):
        (WebCore::PluginView::invalidateRect):
        (WebCore::PluginView::invalidateRegion):
        (WebCore::PluginView::forceRedraw):
        (WebCore::PluginView::~PluginView):
        (WebCore::PluginView::init):
        * webcore-wx.bkl:

2008-05-15  Adam Treat  <treat@kde.org>

        Reviewed by Simon.

        Don't try to setCompositionMode for devices that do not support PorterDuff

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

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

        Reviewed and landed by Alexey.

        Use TextIterator in +[NSAttributedString _web_attributedStringFromRange:].

        * WebCore.base.exp: Exported TextIterator methods.

2008-05-15  Simon Hausmann  <hausmann@webkit.org>

        Fix the Qt build by adding NetworkStateNotifier.cpp to the build.

        * WebCore.pro:

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

        Reviewed by Mark Rowe.

        - fix <rdar://problem/5907633> Memory corruption after closing a document that uses box-reflect

        Test: fast/reflections/teardown-crash.html

        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::~RenderLayer): Changed to not call removeLayers()
        on the reflection if the document is being destroyed, because in that
        case the layer tree is not being maintained.

2008-05-14  Kevin McCullough  <kmccullough@apple.com>

        Reviewed by Tim.

        <rdar://problem/5770054> JavaScript profiler (10928)
        - Expose the new Profiler functions to the WebInspector.

        * page/JavaScriptProfileNode.cpp:
        (WebCore::getTotalPercent):
        (WebCore::getSelfPercent):
        (WebCore::ProfileNodeClass):

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

        Fixes a crash in JavaScriptDebugServer::returnEvent when debugging
        code that contains an eval. This change makes stepping into eval
        code work as expected.

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

        Reviewed by Kevin McCullough.

        Tested with: manual-tests/inspector/returnEvent-crash.html

        * manual-tests/inspector/returnEvent-crash.html: Added.
        * page/JavaScriptDebugServer.cpp:
        (WebCore::JavaScriptDebugServer::sourceParsed): Adds #ifdefed
        debugging code to prevent the sourceID and URL.
        (WebCore::updateCurrentCallFrame): Added. A helper function that
        is called from all 4 of the debugger hooks below. This function will
        update and/or create JavaScriptCallFrames to match the exec state,
        sourceID and lineNumber passed into it. Contains #ifdefed debugging
        code that was helpful while fixing this bug.
        (WebCore::JavaScriptDebugServer::callEvent): Call updateCurrentCallFrame
        before pauseIfNeeded.
        (WebCore::JavaScriptDebugServer::atStatement): Ditto.
        (WebCore::JavaScriptDebugServer::returnEvent): Ditto.
        (WebCore::JavaScriptDebugServer::exception): Ditto.

2008-05-14  Alp Toker  <alp@nuanti.com>

        GTK+ build fix for r33457. Add NetworkStateNotifier.cpp to the build.

        * GNUmakefile.am:

2008-05-14  Alp Toker  <alp@nuanti.com>

        GTK+ build fix. Include value.h from kjs, not JavaScriptCore.

        * page/JavaScriptProfile.cpp:
        * page/JavaScriptProfileNode.cpp:

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

        Windows release build fix

        * WebCore.vcproj/WebCore.vcproj: Make sure the warnings we disable on
        XPathGrammar.cpp are disabled for all configurations, not just
        Debug_Internal.

2008-05-14  Kevin McCullough  <kmccullough@apple.com>

        Reviewed by Sam.

        <rdar://problem/5770054> JavaScript profiler (10928)
        - Rename FunctionCallProfile to ProfileNode

        * ForwardingHeaders/profiler/FunctionCallProfile.h: Removed.
        * ForwardingHeaders/profiler/ProfileNode.h: Copied from ForwardingHeaders/profiler/FunctionCallProfile.h.
        * GNUmakefile.am:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * WebCoreSources.bkl:
        * page/JavaScriptFunctionCallProfile.cpp: Removed.
        * page/JavaScriptFunctionCallProfile.h: Removed.
        * page/JavaScriptProfile.cpp:
        * page/JavaScriptProfileNode.cpp: Copied from page/JavaScriptFunctionCallProfile.cpp.
        (WebCore::ProfileNodeCache):
        (WebCore::getFunctionName):
        (WebCore::getTotalTime):
        (WebCore::getSelfTime):
        (WebCore::getNumberOfCalls):
        (WebCore::getChildren):
        (WebCore::finalize):
        (WebCore::ProfileNodeClass):
        (WebCore::toJS):
        * page/JavaScriptProfileNode.h: Copied from page/JavaScriptFunctionCallProfile.h.

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

        Reviewed by Brady.

        This patch adds support for the ARIA progressbar role and the 
        following ARIA states (ie HTML attributes): aria-checked, aria-
        level, aria-pressed, aria-valuenow, aria-valuemin, and aria-
        valuemax.

        * html/HTMLAttributeNames.in:
        * page/AccessibilityObject.h:
        (WebCore::AccessibilityObject::isProgressIndicator):
        (WebCore::AccessibilityObject::valueForRange):
        (WebCore::AccessibilityObject::maxValueForRange):
        (WebCore::AccessibilityObject::minValueForRange):
        * page/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::isProgressIndicator):
        (WebCore::AccessibilityRenderObject::isPressed): Check the aria-
        pressed attribute if this is an ARIA button.
        (WebCore::AccessibilityRenderObject::headingLevel): Check the aria-
        level attribute if this is an ARIA heading.
        (WebCore::AccessibilityRenderObject::intValue): Check the aria-
        checked attribute if this is an ARIA radio button or checkbox.
        (WebCore::AccessibilityRenderObject::valueForRange):
        (WebCore::AccessibilityRenderObject::maxValueForRange):
        (WebCore::AccessibilityRenderObject::minValueForRange):
        (WebCore::RoleEntry::):
        (WebCore::AccessibilityRenderObject::canSetValueAttribute):
        * page/AccessibilityRenderObject.h:
        * page/mac/AccessibilityObjectWrapper.mm:
        (-[AccessibilityObjectWrapper accessibilityAttributeNames]):
        (-[AccessibilityObjectWrapper accessibilityAttributeValue:]):

2008-05-14  Kevin McCullough  <kmccullough@apple.com>

        Reviewed by John.

        -<rdar://problem/5770054> JavaScript profiler (10928)
        Use the FunctionCallProfile's new total and self time functions.

        * page/JavaScriptFunctionCallProfile.cpp:
        (WebCore::getTotalTime):
        (WebCore::getSelfTime):

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

        Reviewed by Adam.

        Don't try to store the resource data if it's empty.
        
        * loader/appcache/ApplicationCacheStorage.cpp:
        (WebCore::ApplicationCacheStorage::store):

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

        Windows build fix

        * platform/network/NetworkStateNotifier.cpp: Added a missing #include.
        * platform/network/NetworkStateNotifier.h:
        (WebCore::NetworkStateNotifier::NetworkStateNotifier): Removed 'void'
        return type from the constructor, and fixed the spelling of a member
        variable.

2008-05-14  Kevin McCullough  <kmccullough@apple.com>

        Reviewed by Adam.

        <rdar://problem/5770054> JavaScript profiler (10928)
        - Add support for interacting with the JavaScriptCore profiler.

        * ForwardingHeaders/profiler/FunctionCallProfile.h: Added.
        * ForwardingHeaders/profiler/Profile.h: Added.
        * GNUmakefile.am: Add the new files to all the projects.
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * WebCoreSources.bkl:
        * page/InspectorController.cpp: Add the ability to retrieve all of the
        profiles in JavaScript from the InspectorController.
        (WebCore::allProfiles):
        (WebCore::InspectorController::windowScriptObjectAvailable):
        * page/JavaScriptFunctionCallProfile.cpp: Added. Wrapper around the JSC
        FunctionCallProfile.
        (WebCore::functionCallProfileCache): This cache makes sure we don't
        needlessly create duplicate wrappers around the same
        FunctionCallProfile*.
        (WebCore::getFunctionName): Callback to return the name of the function.
        (WebCore::getTotalTime): Callback to return the total time spent in the
        function.
        (WebCore::getSelfTime): Callback to return the time spent in self (total
        - time in children) in the function.
        (WebCore::getNumberOfCalls): Callback to return the number of times this
        function was called.
        (WebCore::getChildren): Callback to return the children of this function
        where the children are the functions this function called.
        (WebCore::finalize): Cleanup.
        (WebCore::functionCallProfileClass): Define the JSClassRef for this
        object.
        (WebCore::toJS): Create a conversion function to make a usable JSValue
        to wrap the FunctionCallProfile in JSC.
        * page/JavaScriptFunctionCallProfile.h: Added.
        * page/JavaScriptProfile.cpp: Added. Wrapper around the JSC Profile.
        (WebCore::profileCache): This cache makes sure we don't needlessly
        create duplicate wrappers aroudn the same Profile*.
        (WebCore::getHeadCallback): Callback to return the head of the graph of
        the functions profiled durring this profile's run.
        (WebCore::finalize):
        (WebCore::profileClass): Define the JSClassRef for this object.
        (WebCore::toJS): Create a conversion function to make a usable JSValue
        to wrap the Profile from JSC.
        * page/JavaScriptProfile.h: Added.

2008-05-14  David Hyatt  <hyatt@apple.com>

        Fix for bug https://bugs.webkit.org/show_bug.cgi?id=16130.

        Opacity, transforms, reflections and masks should not honor z-index unless the element is also
        positioned.  Always reset to auto if the element is not positioned (and then the following code will
        adjust auto to 0 as needed).

        Reviewed by Dan Bernstein

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

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

        Reviewed by Brady.

        <rdar://problem/5931742> Support navigator.onLine from HTML5
        
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        Add NetworkStateNotifier files.
        
        * dom/EventNames.h:
        Add offline and online events.
        
        * page/Navigator.cpp:
        (WebCore::Navigator::onLine):
        * page/Navigator.h:
        * page/Navigator.idl:
        Add navigator.onLine.
        
        * page/Page.cpp:
        (WebCore::networkStateChanged):
        Dispatch offline/online events to all frames.
        
        (WebCore::Page::Page):
        Set state change callback.
        
        * platform/network/NetworkStateNotifier.cpp: Added.
        * platform/network/NetworkStateNotifier.h: Added.

        * platform/network/mac/NetworkStateNotifierMac.cpp: Added.
        Mac network state notifier.

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

        Fix Bug 18888: REGRESSION (r32731): console.log always prints
        "undefined"

        <https://bugs.webkit.org/show_bug.cgi?id=18888>

        Reviewed by Tim Hatcher.

        Tested by pre-existing
        manual-tests/inspector/console-log-formatting.html.

        * page/inspector/Console.js:
        (WebInspector.ConsoleMessage.prototype._format): Changed to explicitly
        wrap Console._format instead of using bind to do it. Using bind was
        causing us to pass plainText in as the first parameter instead of as
        the second.

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

        Fixes the bug where stepping out of a function would show the wrong
        call stack (would look like it stepped out twice.)

        Reviewed by Adam Roben.

        * page/JavaScriptDebugServer.cpp:
        (WebCore::JavaScriptDebugServer::returnEvent):
        Call pauseIfNeeded before setting m_currentCallFrame to the caller.

2008-05-14  Stephanie Lewis  <slewis@apple.com>
   
        Fix 64bit build

        * plugins/PluginView.h:

2008-05-14  David Kilzer  <ddkilzer@apple.com>

        REGRESSION (r26474): WebKit fails jQuery test 64 core module: text(String) subtest 1 Check escaped text (createTextNode)

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

        Reviewed by Darin.

        Tests: fast/dom/dom-parse-serialize-expected.txt:
               fast/xsl/xslt-processor-expected.txt:
               fast/xsl/xslt-text-expected.txt:

        Commit r26474 removed escaping of '>' characters to '&gt;' in serialized
        HTML content, which broke one jQuery test.  This change restores that
        serialization behavior to both attributes and content for consistency.

        * editing/markup.cpp:
        (WebCore::appendAttributeValue): Escape '>' as '&gt;'.
        (WebCore::escapeContentText): Ditto.
        (WebCore::appendEscapedContent): Ditto.  This is the bug fix for the jQuery test.

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

        Fix Bug 19051: REGRESSION (r33447): Assertion in
        JSDebugServer::removeListener closing tab with Inspector open

        <https://bugs.webkit.org/show_bug.cgi?id=19051>

        m_inspectedPage is now cleared when the Page is destroyed, which never
        used to happen. Some of InspectorController's code was not prepared
        for this.

        Reviewed by Dave Hyatt.

        * page/InspectorController.cpp:
        (WebCore::InspectorController::~InspectorController): Removed a call
        to stopDebugging and added an assertion. Debugging should have already
        been stopped by this point.
        (WebCore::InspectorController::inspectedPageDestroyed): Moved here
        from the header file. Added a call to stopDebugging.
        (WebCore::InspectorController::enabled): Return false if our inspected
        Page has already been destroyed, since we can't really do much at this
        point anyway.
        (WebCore::InspectorController::didCommitLoad):
        (WebCore::InspectorController::didLoadResourceFromMemoryCache):
        (WebCore::InspectorController::identifierForInitialRequest):
        (WebCore::InspectorController::startDebuggingAndReloadInspectedPage):
        (WebCore::InspectorController::stopDebugging):
        (WebCore::InspectorController::drawNodeHighlight):
        Assert that m_inspectedPage hasn't been cleared.
        * page/InspectorController.h:

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

        Reviewed by Darin.

        <rdar://problem/5914803> Improve performance of WebCore::Editor::setComposition

        * editing/Editor.cpp:
        (WebCore::Editor::confirmComposition): Remove the previous composition
        when we insert the new one, not with a separate, slower, delete operation.
        (WebCore::Editor::setComposition): Ditto.
        * editing/InsertTextCommand.cpp:
        (WebCore::InsertTextCommand::performTrivialReplace): Remove the selected
        text with a low level operation that doesn't perform a layout and insert
        the new text in a way that won't trigger a layout from the removal.
        (WebCore::InsertTextCommand::input): Call the optimized replace.
        * editing/InsertTextCommand.h:
        * editing/htmlediting.cpp:
        (WebCore::isTabSpanNode): Check to see if the node is a span, to avoid 
        the expense of getAttribute in the common case.
        * page/Frame.cpp:
        (WebCore::Frame::selectionLayoutChanged): Selection::start() and end()
        will already be at VisiblePosition deepEquivalents. Selection::validate()
        ensures this.

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

        Make the Inspector able to handle being reloaded

        When Reload was selected from the context menu in the Inspector, the
        Inspector window would close and never be openable again. Now it
        closes, then reopens when the page finishes loading.

        Reviewed by Tim Hatcher.

        * page/InspectorController.cpp:
        (WebCore::InspectorController::close): Removed code that cleared out
        m_page. This is now handled by pageDestroyed.
        * page/InspectorController.h:
        (WebCore::InspectorController::inspectedPageDestroyed): Added.
        * page/Page.cpp:
        (WebCore::Page::~Page): Fixed a bug and added a call to the new
        inspectedPageDestroyed. If we have a parent InspectorController, that
        means that we are the Page in the Inspector's window (i.e., we are the
        Inspector's UI), so when we are destroyed we should call
        InspectorController::pageDestroyed. We also need to call
        inspectedPageDestroyed on our own InspectorController so that it won't
        try to call into us.

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

        Add pause on exception support to the Inspector debugger
        with a toggle buttons to enable or disable it.

        Reviewed by Adam Roben.

        * page/InspectorController.cpp:
        (WebCore::pauseOnExceptions): Call the InspectorController.
        (WebCore::setPauseOnExceptions): Ditto.
        (WebCore::InspectorController::windowScriptObjectAvailable): Add the new
        setPauseOnExceptions and pauseOnExceptions functions to the JS class.
        (WebCore::InspectorController::pauseOnExceptions): Call JavaScriptDebugServer.
        (WebCore::InspectorController::setPauseOnExceptions): Ditto.
        * page/InspectorController.h:
        * page/JavaScriptDebugServer.cpp:
        (WebCore::JavaScriptDebugServer::setPauseOnExceptions): Set m_pauseOnExceptions.
        (WebCore::JavaScriptDebugServer::exception): Check m_pauseOnExceptions
        and set m_pauseOnNextStatement to true before calling pauseIfNeeded.
        * page/JavaScriptDebugServer.h:
        * page/inspector/Images/pauseOnExceptionButtons.png: Added.
        * page/inspector/ScriptsPanel.js: Adds a status bar button that calls
        the new InspectorController functions.
        * page/inspector/inspector.css: New styles.

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

        Rename the Scope Chain pane to Scope Variables. Name the global
        object Global. Name objects before the locals "With Block".
        Name colsure scopes "Closure". Name any element or document
        after Local, "Event Target" and "Event Document", respectfully.

        Reviewed by Adam Roben.

        * English.lproj/localizedStrings.js: Add new strings.
        * page/inspector/ObjectPropertiesSection.js:
        (WebInspector.ObjectPropertiesSection): Add a new argument that is used
        for the empty placeholder text.
        (WebInspector.ObjectPropertiesSection.prototype.onpopulate): Use the
        empty placeholder text.
        * page/inspector/ScopeChainSidebarPane.js:
        (WebInspector.ScopeChainSidebarPane): Rename Scope Chain to Scope Variables.
        (WebInspector.ScopeChainSidebarPane.prototype.update): Use the object name as
        the subtitle. Use "Global" for the global object title. Use "With Block" for
        the title of objects before the locals. Use "No Variables" for the empty
        placeholder text for locals.

2008-05-14  Michael A. Puls II  <shadow2531@gmail.com>

        Reviewed by Alexey.

        Fix for https://bugs.webkit.org/show_bug.cgi?id=16923 
        Attr nodes with a value of "" should not have any childNodes
        
        In Opera, Firefox and IE, when an attribute node has a value
        of "", the attribute node doesn't have any childNodes. This
        is true in WebKit also, but not when you assign "" to the
        Attr's value when the existing value is non-empty.
        
        Test: fast/dom/attribute-empty-value-no-children.html

        * dom/Attr.cpp: (WebCore::Attr::setValue): Use createTextChild(), which only appends
        a child text node if the value being assigned is not empty.

2008-05-14  Julien Chaffraix  <jchaffraix@webkit.org>

        Reviewed by Eric.

        GCC 4.3 build fix.
        Removes some compiler warnings.

        * dom/Document.h:
        (WebCore::FormElementKey::hashTableDeletedValue): GCC complained about the const keyword
        so remove it as it is only used inside FormElementKey.

        * html/HTMLSelectElement.cpp:
        (WebCore::HTMLSelectElement::menuListDefaultEventHandler): Correct coding style (removes
        a warning too).

        * loader/appcache/ApplicationCacheResource.cpp: Include stdio.h for gcc4.3 build.

        * plugins/PluginPackage.cpp:
        (WebCore::PluginPackage::PluginPackage): Changed initialization order in the constructor.
        * plugins/PluginView.cpp:
        (WebCore::PluginView::PluginView): Ditto.
        * plugins/PluginView.h:
        * xml/AccessControlList.cpp: Include stdio.h
        * xml/AccessItem.cpp: Ditto.
        * xml/AccessItemRule.cpp: Ditto.

2008-05-14  Ariya Hidayat  <ariya.hidayat@trolltech.com>

        Reviewed by Simon.

        Qt build fix. Add JSJavaScriptCallFrameCustom.cpp to the build
        and implemented EventLoopQt.

        * WebCore.pro:
        * platform/qt/EventLoopQt.cpp: Added.

2008-05-14  Ariya Hidayat  <ariya.hidayat@trolltech.com>

        Reviewed by Simon.

        Qt build fix. Add JavaScriptCallFrame.{idl,cpp} to the build.

        * WebCore.pro:

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

        Reviewed by John Sullivan.

        - Windows part of <rdar://problem/5725912> improve render quality of transformed text

        * platform/graphics/win/FontCGWin.cpp:
        (WebCore::Font::drawGlyphs): Added call to
        wkSetCGContextFontRenderingStyle().

2008-05-13  Alp Toker  <alp@nuanti.com>

        GTK+ build fix. Implement EventLoopGtk.cpp.

        * GNUmakefile.am:
        * platform/gtk/EventLoopGtk.cpp: Added.
        (WebCore::EventLoop::cycle):

2008-05-13  Alp Toker  <alp@nuanti.com>

        GTK+ build fix. Fix IDL filename typo and add JavaScriptCallFrame.cpp
        to the build.

        * GNUmakefile.am:

2008-05-13  Matt Lilek  <webkit@mattlilek.com>

        Not reviewed, partial Gtk build fix.

        * GNUmakefile.am:

2008-05-13  Timothy Hatcher  <timothy@apple.com>

        Fixes a crash when stepping out in the Inspector's debugger.

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

        Reviewed by Dan Bernstein.

        * page/InspectorController.cpp:
        (WebCore::currentCallFrame): Adds a null check of currentCallFrame,
        since it can be null. Also returns JSNull to better signify this.
        * page/inspector/ScriptsPanel.js: Updates the debugger interface
        when stepping so the currentCallFrame isn't accessed when not paused.
        Adds a _clearInterface function to remove duplicate code.

2008-05-13  chris fleizach  <cfleizach@apple.com>

        Reviewed by Beth Dakin

        <rdar://problem/5932677> AX: Submit buttons aren't returning AXTitle

        * page/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::title):

2008-05-13  Timothy Hatcher  <timothy@apple.com>

        Adds an overlay window that covers the scripts panel and
        informs the user that they need to attach the debugger.
        Provides an "Attach Debugger" button below the info text.

        Reviewed by Dan Bernstein.

        * English.lproj/localizedStrings.js: New strings.
        * page/inspector/ScriptsPanel.js:
        (WebInspector.ScriptsPanel): Create the overlay elements and
        append to the main panel element.
        * page/inspector/inspector.css: New styles for the over lay elements.

2008-05-13  Timothy Hatcher  <timothy@apple.com>

        Fixes the assertion and crash that would happen when inspecting a element from a frame.
        This change makes JSInspectedObjectWrapper pass unwrapped objects around for global objects
        that share the same page group identifier. Also returns jsUndefined() instead of 0 to prevent
        crashing in release builds if the page groups don't match.

        Passes all the tests in: manual-tests/inspector-wrappers

        Reviewed by Adam Roben.

        * bindings/js/JSInspectedObjectWrapper.cpp:
        (WebCore::JSInspectedObjectWrapper::prepareIncomingValue): Return jsUndefined() instead of 0.
        Call allowsUnwrappedAccessFrom instead of unwrappedExecStateMatches.
        * bindings/js/JSQuarantinedObjectWrapper.cpp:
        (WebCore::JSQuarantinedObjectWrapper::allowsUnwrappedAccessFrom): Renamed from unwrappedExecStateMatches.
        Return true if the pageGroupIdentifier of both wrappers match.
        (WebCore::JSQuarantinedObjectWrapper::callAsFunction): Return jsUndefined() instead of 0.
        * bindings/js/JSQuarantinedObjectWrapper.h: Renamed unwrappedExecStateMatches to allowsUnwrappedAccessFrom.

2008-05-13  Timothy Hatcher  <timothy@apple.com>

        Fixes the hang that could happen when option-clicking to expand
        a disclosure triangle in the Properties pane. This change limits
        the recursion depth when expanding the tree elements.

        <rdar://problem/5847681> Safari hangs when option-clicking a
        disclosure triangle in the Inspector's Properties pane

        Reviewed by John Sullivan.

        * page/inspector/treeoutline.js:
        (TreeElement.prototype.expandRecursively): Pass an empty info object to
        traverseNextTreeElement to get the depthChange value. This is used to
        compute a current depth. If the depth exceeds the maxDepth argument, the
        item isn't expanded and children wont be populated when traverseNextTreeElement
        is called until the depth goes below the maxDepth.
        (TreeElement.prototype.traverseNextTreeElement): Added a new info
        argument that can be optionally used to return extra info like depth change.

2008-05-13  Timothy Hatcher  <timothy@apple.com>

        Adds info text to panes and sections in the Inspector's sidebars
        that would normally be empty. These help the user know why there
        is nothing in these sections.

        Reviewed by John Sullivan.

        * English.lproj/localizedStrings.js: Add strings.
        * page/inspector/BreakpointsSidebarPane.js: Adds "No Breakpoints".
        * page/inspector/CallStackSidebarPane.js: Adds "Not Paused".
        * page/inspector/ObjectPropertiesSection.js: Adds "No Properties".
        * page/inspector/ScopeChainSidebarPane.js: Adds "Not Paused".
        * page/inspector/inspector.css: Adds style rules for the info elements.

2008-05-13  Timothy Hatcher  <timothy@apple.com>

        Implements the rest of the Scripts panel to get the debugger
        mostly working. "Basic debugging seems to work."

        Reviewed by Geoff Garen.

        * English.lproj/localizedStrings.js: Adds new strings.
        * page/inspector/Resource.js:
        (WebInspector.Resource.prototype.get scripts): Returns _scripts and 
        creates it lazily.
        (WebInspector.Resource.prototype.addScript): Add the script object to the
        front of the _scripts array.
        (WebInspector.Resource.prototype.removeAllScripts): Removed all the scripts
        and removes the resource back-reference.
        (WebInspector.Resource.prototype.removeScript): Removes the script and
        breaks the resource back-reference.
        * page/inspector/ResourceView.js:
        (WebInspector.ResourceView): Adds a reminder comment.
        (WebInspector.ResourceView.prototype.get headersVisible): Returns _headersVisible. 
        (WebInspector.ResourceView.prototype.set headersVisible): Stubs out
        a setter that currently just sets _headersVisible. Has a comment that
        points out this needs implemented when network headers are added.
        * page/inspector/ResourcesPanel.js:
        (WebInspector.ResourcesPanel.prototype.show): Sets the headersVisible property of
        the visible view to true and shows it again, in case it was being shown in Scripts.
        (WebInspector.ResourcesPanel.prototype.recreateViewForResourceIfNeeded):
        Copies the headersVisible property from the old view to the new view.
        (WebInspector.ResourcesPanel.prototype.showResource): Sets the headersVisible
        property to true before showing.
        * page/inspector/ScriptView.js:
        (WebInspector.ScriptView): Passes in _addBreakpoint for the add breakpoint delegate.
        (WebInspector.ScriptView.prototype._addBreakpoint): Calls ScriptsPanel's addBreakpoint
        for the current Script.sourceID and line.
        * page/inspector/ScriptsPanel.js:
        (WebInspector.ScriptsPanel): 
        (WebInspector.ScriptsPanel.prototype.show): Sets the headersVisible property of
        the visible view to false and shows it again, in case it was being shown in Resources.
        (WebInspector.ScriptsPanel.prototype.addScript): Makes a new Script object and
        adds it to a Resource if one is found. Registers any breakpoint that match
        the new Script's source URL, and sets the sourceID of the breakpoints.
        (WebInspector.ScriptsPanel.prototype.addBreakpoint): Adds the breakpoint to the
        BreakpointsSidebarPane. Also adds it to _breakpointsURLMap so it can be found
        later in addScript by URL. Finally adds the breakpoint to the SourceFrame that
        represents the resources or script.
        (WebInspector.ScriptsPanel.prototype.removeBreakpoint): Removes the breakpoint from
        the BreakpointsSidebarPane, _breakpointsURLMap and SourceFrame.
        (WebInspector.ScriptsPanel.prototype.debuggerPaused): Update the debugger
        state variables, the buttons and the CallStackSidebarPane.
        (WebInspector.ScriptsPanel.prototype.reset): Clears and resets debugger
        and interface state.
        (WebInspector.ScriptsPanel.prototype.get visibleView): Returns _visibleView.
        (WebInspector.ScriptsPanel.prototype.set visibleView): Sets _visibleView and
        calls hide on the old view and show on the new view.
        (WebInspector.ScriptsPanel.prototype.showScript): Calls _showScriptOrResource.
        (WebInspector.ScriptsPanel.prototype.showResource): Ditto.
        (WebInspector.ScriptsPanel.prototype.scriptViewForScript): Lazily creates a
        ScriptView for the Script and returns it. 
        (WebInspector.ScriptsPanel.prototype.sourceFrameForScript): Returns the SourceFrame
        for the Script.
        (WebInspector.ScriptsPanel.prototype._sourceFrameForScriptOrResource): Returns the
        SourceFrame based on the type of object passed in.
        (WebInspector.ScriptsPanel.prototype._showScriptOrResource): Shows the view based on
        the type of object passed in. If the object is a resource and there are breakpoints
        defined for that Resource URL, then populate the SourceFrame with the breakpoints.
        (WebInspector.ScriptsPanel.prototype._addScriptToFilesMenu): Adds a script to the 
        files menu. If the Script is part of a resource, that resource is added.
        (WebInspector.ScriptsPanel.prototype._removeScriptFromFilesMenu): Remove a script from
        the files menu. If that script is part of a resource and it is the last script of that
        resource, then remove the whole resource.
        (WebInspector.ScriptsPanel.prototype._clearCurrentExecutionLine): Clears the execution
        line from the SourceFrame that is showing it.
        (WebInspector.ScriptsPanel.prototype._callFrameSelected): Event listener for when the
        call frame changes in the CallStackSidebarPane. Triggers updates to the ScopeChainSidebarPane
        and the visible view.
        (WebInspector.ScriptsPanel.prototype._changeVisibleFile): Event listener for the change state
        of the files select element.
        (WebInspector.ScriptsPanel.prototype._updateDebuggerButtons): Update more of the 
        buttons to reflect the current debugger state. Updates the status text too.
        (WebInspector.ScriptsPanel.prototype._toggleDebugging): Reset the UI and state when
        the debugger is attached/detached.
        (WebInspector.ScriptsPanel.prototype._togglePause): Call InspectorController.resumeDebugger or
        InspectorController.pauseInDebugger depending on the paused state.
        (WebInspector.ScriptsPanel.prototype._stepOverClicked): Call InspectorController.stepOverStatementInDebugger.
        (WebInspector.ScriptsPanel.prototype._stepIntoClicked): Call InspectorController.stepIntoStatementInDebugger.
        (WebInspector.ScriptsPanel.prototype._stepOutClicked): InspectorController.stepOutOfFunctionInDebugger.
        * page/inspector/SourceView.js:
        (WebInspector.SourceView): Passes in _addBreakpoint for the add breakpoint delegate.
        (WebInspector.SourceView.prototype._addBreakpoint): Calls ScriptsPanel's addBreakpoint
        for the nearest Script's sourceID and passed in line.
        * page/inspector/inspector.css: New style rules for the UI changes.
        * page/inspector/inspector.js:
        (WebInspector.loaded): Add the ScriptsPanel to the panels list.
        (WebInspector.parsedScriptSource): Call ScriptsPanel.addScript.
        (WebInspector.failedToParseScriptSource): Ditto.
        (WebInspector.pausedScript): Call ScriptsPanel.debuggerPaused.

2008-05-13  Timothy Hatcher  <timothy@apple.com>

        Adds implementations of the Scope Chain and Call Stack sidebar panes.
        These panes use the JSJavaScriptCallFrame object that will be passed
        to the update functions.

        Reviewed by Kevin McCullough.

        * English.lproj/localizedStrings.js: Adds new strings.
        * WebCore.vcproj/WebCore.vcproj: Adds new files.
        * page/inspector/CallStackSidebarPane.js:
        (WebInspector.CallStackSidebarPane.prototype.update): Walk the 
        caller chain of the call frame and make placards for each.
        (WebInspector.CallStackSidebarPane.prototype.get selectedCallFrame):
        Return _selectedCallFrame. 
        (WebInspector.CallStackSidebarPane.prototype.set selectedCallFrame):
        Set _selectedCallFrame and dispatch the "call frame selected" event.
        (WebInspector.CallStackSidebarPane.prototype._placardSelected):
        Set the selectedCallFrame based on the clicked placard.
        * page/inspector/Placard.js: Added. A user interface object that can
        be used to show a title and a subtitle block with a selected state.
        * page/inspector/ScopeChainSidebarPane.js: Added.
        (WebInspector.ScopeChainSidebarPane): Call the base object and set the title.
        (WebInspector.ScopeChainSidebarPane.prototype.update): Iterate over the
        call frame's scope chain and make ObjectPropertiesSections for each.
        * page/inspector/SidebarPane.js:
        (WebInspector.SidebarPane.prototype): Inherit from WebInspector.Object.
        * page/inspector/WebKit.qrc: Add new files.
        * page/inspector/inspector.css: Add placard styles.
        * page/inspector/inspector.html: Add new files.

2008-05-13  Timothy Hatcher  <timothy@apple.com>

        Fixes the bug where SourceViews would be blank if shown before
        the Resource finished loading.

        <rdar://problem/5807420> Safari's Web Inspector won't display the
        contents of some CSS and JS files

        Reviewed by Kevin McCullough.

        * page/inspector/Resource.js:
        (WebInspector.Resource.prototype.set finished): Dispatch the finished event
        (WebInspector.Resource.prototype): Inherit from WebInspector.Object.prototype.
        * page/inspector/SourceView.js:
        (WebInspector.SourceView): Register for the finished event on the resource.
        When the event fires, setup the source frame and deregister the event.

2008-05-13  Timothy Hatcher  <timothy@apple.com>

        Factored most of SourceView out into SourceFrame so it can be shared
        by the new ScriptView. Added the ScriptView class to be used for
        scripts that arn't Resources (like eval code.) Added a simple Script
        object that hold the data from the debugger parsedSource hooks. A
        ScriptView holds a Script object, and uses it for source data.

        Added breakpoint and execution line support to the SourceFrame
        where they are visually represented in the source.

        Reviewed by Kevin McCullough.

        * page/inspector/inspector.js:
        (WebInspector.performSearch): Change the caller of sourceFrameForResource
        to use the SourceFrame result's element property.
        * page/inspector/ResourcesPanel.js: Use the new SourceFrame.
        * page/inspector/Script.js: Added.
        * page/inspector/ScriptView.js: Added.
        * page/inspector/SourceFrame.js: Added.
        * page/inspector/SourceView.js: Use the new SourceFrame.
        * WebCore.vcproj/WebCore.vcproj: Add new files.
        * page/inspector/WebKit.qrc: Ditto.
        * page/inspector/inspector.html: Ditto.

2008-05-13  Timothy Hatcher  <timothy@apple.com>

        Adds a Breakpoint object and basic add/remove functions on
        BreakpointsSidebarPane that call the InspectorController to
        add/remove the breakpoint.

        Reviewed by Kevin McCullough.

        * page/inspector/Breakpoint.js:
        (WebInspector.Breakpoint): 
        (WebInspector.Breakpoint.prototype.get enabled): Return _enabled.
        (WebInspector.Breakpoint.prototype.set enabled): Set _enabled and
        dispatch the enabled/disabled event to listeners.
        * page/inspector/BreakpointsSidebarPane.js:
        (WebInspector.BreakpointsSidebarPane): Add a breakpoints array.
        (WebInspector.BreakpointsSidebarPane.prototype.addBreakpoint):
        Adds the breakpoint to the breakpoints array. Registers for the disabled
        and enabled event types. Call InspectorController.addBreakpoint if attached.
        (WebInspector.BreakpointsSidebarPane.prototype.removeBreakpoint):
        Removes the breakpoint from the breakpoints array. Deregisters for the disabled
        and enabled event types. Call InspectorController.removeBreakpoint if attached.
        (WebInspector.BreakpointsSidebarPane.prototype._breakpointEnableChanged):
        Call InspectorController.addBreakpoint or InspectorController.removeBreakpoint
        depending on the enabled state of the breakpoint.
        * WebCore.vcproj/WebCore.vcproj: Add new files.
        * page/inspector/WebKit.qrc: Ditto.
        * page/inspector/inspector.html: Ditto.

2008-05-13  Timothy Hatcher  <timothy@apple.com>

        Make addSourceToFrame not dependent on InspectorResource so it
        can be used to add source of a passed in string and mime-type to
        a frame. Added addResourceSourceToFrame for use by SourceView.

        Also fixes an assertion because of an incorrect static_cast of identifiers
        to unsigned long long, when they can be unsigned.

        Reviewed by Geoff Garen.

        * page/InspectorController.cpp:
        (WebCore::addSourceToFrame): Helper function used by addSourceToFrame
        and addResourceSourceToFrame.
        (WebCore::addSourceToFrame): Generalized to take a source and mime-type string.
        (WebCore::addResourceSourceToFrame): Renamed from addSourceToFrame.
        (WebCore::getResourceDocumentNode): Fixes the static_cast to be long long.
        (WebCore::InspectorController::windowScriptObjectAvailable): Adds
        addResourceSourceToFrame to the JavaScript class.
        * page/inspector/SourceView.js: Use the new addResourceSourceToFrame.

2008-05-13  Timothy Hatcher  <timothy@apple.com>

        Add debugger related functions to the InspectorController and
        expose them to the JavaScript side of InspectorController.

        Reviewed by Geoff Garen.

        * page/InspectorController.cpp:
        (WebCore::jsStringRef): Added helper to convert a UString to a JSStringRef.
        (WebCore::currentCallFrame): Call InspectorController::currentCallFrame.
        (WebCore::pauseInDebugger): Call InspectorController::pauseInDebugger.
        (WebCore::resumeDebugger): Call InspectorController::resumeDebugger.
        (WebCore::stepOverStatementInDebugger): Call InspectorController::stepOverStatementInDebugger.
        (WebCore::stepIntoStatementInDebugger): Call InspectorController::stepIntoStatementInDebugger.
        (WebCore::stepOutOfFunctionInDebugger): Call InspectorController::stepOutOfFunctionInDebugger.
        (WebCore::addBreakpoint): Call InspectorController::addBreakpoint.
        (WebCore::removeBreakpoint): Call InspectorController::removeBreakpoint.
        (WebCore::InspectorController::windowScriptObjectAvailable): Add the new functions to the
        InspectorController JavaScript class.
        (WebCore::InspectorController::startDebuggingAndReloadInspectedPage): Clear breakpoints.
        (WebCore::InspectorController::currentCallFrame): Return the currentCallFrame from the
        JavaScriptDebugServer.
        (WebCore::InspectorController::pauseInDebugger): Call JavaScriptDebugServer's pauseOnNextStatement.
        (WebCore::InspectorController::resumeDebugger): Call JavaScriptDebugServer's resume.
        (WebCore::InspectorController::stepOverStatementInDebugger):  Call JavaScriptDebugServer's stepOverStatement.
        (WebCore::InspectorController::stepIntoStatementInDebugger): Call JavaScriptDebugServer's stepIntoStatement.
        (WebCore::InspectorController::stepOutOfFunctionInDebugger): Call JavaScriptDebugServer's stepOutOfFunction.
        (WebCore::InspectorController::addBreakpoint): Call JavaScriptDebugServer's addBreakpoint.
        (WebCore::InspectorController::removeBreakpoint): Call JavaScriptDebugServer's removeBreakpoint.
        (WebCore::InspectorController::didParseSource): Call into the Inspector's JavaScript.
        (WebCore::InspectorController::failedToParseSource): Ditto.
        (WebCore::InspectorController::didPause): Ditto.
        * page/InspectorController.h: Add new functions.

2008-05-13  Timothy Hatcher  <timothy@apple.com>

        Implements more debugger APIs on JavaScriptDebugServer and reduces
        the number of callbacks to JavaScriptDebugListeners. These changes
        will better facilitate debugger optimizations when SquirrelFish merges.

        Reviewed by Kevin McCullough.

        * page/InspectorController.cpp:
        (WebCore::InspectorController::didParseSource): Removed the ExecState.
        (WebCore::InspectorController::failedToParseSource): Ditto.
        (WebCore::InspectorController::didPause): Added.
        * page/InspectorController.h: Changed the JavaScriptDebugListener functions.
        * page/JavaScriptDebugListener.h: Removed some callbacks and added didPause.
        * page/JavaScriptDebugServer.cpp:
        (WebCore::JavaScriptDebugServer::JavaScriptDebugServer): Initialize new data members.
        (WebCore::JavaScriptDebugServer::~JavaScriptDebugServer): Delete all values of m_breakpoints.
        (WebCore::JavaScriptDebugServer::removeListener): Call resume if the last listener was removed.
        (WebCore::JavaScriptDebugServer::hasListenersInterestedInPage): Returns true if there are any
        global listeners or a listener for the page.
        (WebCore::JavaScriptDebugServer::addBreakpoint): Adds and entry to m_breakpoints.
        (WebCore::JavaScriptDebugServer::removeBreakpoint): Removes a entry in m_breakpoints.
        (WebCore::JavaScriptDebugServer::hasBreakpoint):  Checks if there is a breakpoint for the
        sourceID and line.
        (WebCore::JavaScriptDebugServer::clearBreakpoints): Removed all breakpoints.
        (WebCore::JavaScriptDebugServer::pauseOnNextStatement): Sets m_pauseOnNextStatement to true.
        (WebCore::JavaScriptDebugServer::resume): Sets m_paused to false.
        (WebCore::JavaScriptDebugServer::stepIntoStatement): Calls resume and sets
        m_pauseOnNextStatement to true.
        (WebCore::JavaScriptDebugServer::stepOverStatement): Calls resume and sets m_pauseOnExecState to
        the current call frame's ExecState.
        (WebCore::JavaScriptDebugServer::stepOutOfFunction): Calls resume and sets m_pauseOnExecState to
        the current call frame's caller ExecState.
        (WebCore::JavaScriptDebugServer::currentCallFrame): Returns m_currentCallFrame if paused.
        (WebCore::dispatchDidParseSource): Removed the ExecState argument.
        (WebCore::dispatchFailedToParseSource): Ditto.
        (WebCore::JavaScriptDebugServer::sourceParsed): Doesn't pass the ExecState to dispatchDidParseSource
        or dispatchFailedToParseSource.
        (WebCore::dispatchFunctionToListeners):
        (WebCore::JavaScriptDebugServer::dispatchFunctionToListeners): Removes all the arguments passed
        to the callback.
        (WebCore::JavaScriptDebugServer::setJavaScriptPaused): Various overloaded functions
        to pause parts of WebCore to prevent JavaScript execution while paused.
        (WebCore::JavaScriptDebugServer::pauseIfNeeded): Decides if the debugger should pause based
        on the passed in ExecState, source ID and line number. This checks for breakpoints, stepping, etc.
        Calls didPause on all the listeners and spins a EventLoop until resume is called.
        (WebCore::JavaScriptDebugServer::callEvent): Call pauseIfNeeded.
        (WebCore::JavaScriptDebugServer::atStatement): Ditto.
        (WebCore::JavaScriptDebugServer::returnEvent): Ditto.
        (WebCore::JavaScriptDebugServer::exception): Ditto.
        * page/JavaScriptDebugServer.h: Added new functions.

2008-05-13  Timothy Hatcher  <timothy@apple.com>

        Change View.show to call detach if the parentNode dosen't
        match before appending to the passed in parent element.
        This also prevents appending to the same parent element
        multiple times.

        Reviewed by John Sullivan.

        * page/inspector/FontView.js:
        (WebInspector.FontView.prototype.show): Pass the parent element to View.show.
        * page/inspector/ResourceView.js: Optimize the attach method to no append if
        there is a parentNode already.
        * page/inspector/SourceView.js: Ditto.
        * page/inspector/View.js: Call detach before appending if the parentNode
        doesn't match the passed in element.

2008-05-13  Timothy Hatcher  <timothy@apple.com>

        Optimize the panel attach method to no append if there is a
        parentNode already.

        Reviewed by Adam Roben.

        * page/inspector/Panel.js:
        (WebInspector.Panel.prototype.attach): Don't append to main-panels
        if the panel element already has a parentNode.

2008-05-13  Timothy Hatcher  <timothy@apple.com>

        Add Widget::isPluginView so the JavaScriptDebugServer can identify
        plugins that need to be paused during debugging. This will be used
        in a upcoming commit.

        Reviewed by Kevin McCullough.

        * platform/Widget.h: Add isPluginView. Return false.
        * plugins/PluginView.h: Add isPluginView. Return true.

2008-05-13  Timothy Hatcher  <timothy@apple.com>

        Adds an event loop abstraction to platform. This abstraction will be
        used by the JavaScriptDebugServer to implement pausing.

        Reviewed by Kevin McCullough.

        * platform/EventLoop.h: Added.
        (WebCore::EventLoop::EventLoop):
        (WebCore::EventLoop::ended): Return m_ended.
        * platform/mac/EventLoopMac.mm: Added.
        (WebCore::EventLoop::cycle): Call nextEventMatchingMask and then sendEvent.
        * platform/win/EventLoopWin.cpp: Added.
        (WebCore::EventLoop::cycle): Call GetMessage, TranslateMessage and DispatchMessage.
        * WebCore.xcodeproj/project.pbxproj: Add new files.
        * WebCore.vcproj/WebCore.vcproj: Ditto.

2008-05-13  Timothy Hatcher  <timothy@apple.com>

        Breaks out ObjectPropertiesSection from PropertiesSidebarPane
        so it can be used by the Scripts panel's Scope Chain pane.

        Rubber-stamped by Adam Roben.

        * page/inspector/ObjectPropertiesSection.js: Added.
        * page/inspector/PropertiesSidebarPane.js: Moved ObjectPropertiesSection
        to ObjectPropertiesSection.js.
        * WebCore.vcproj/WebCore.vcproj: Add the new file.
        * page/inspector/WebKit.qrc: Ditto.
        * page/inspector/inspector.html: Ditto.

2008-05-13  Timothy Hatcher  <timothy@apple.com>

        Add a helper function to the Inspector's Array prototype
        that will remove any identical values/objects from the array.

        Reviewed by Kevin McCullough.

        * page/inspector/utilities.js:
        (Array.prototype.remove): Iterate over the array and strict
        compare to the passed in value. If they match, splice that index
        out of the array. If onlyFirst is true, return after the first splice.

2008-05-13  Timothy Hatcher  <timothy@apple.com>

        Adds a JavaScriptCallFrame object and JavaScript binding with an IDL.
        This object will expose the stack to the Inspector's debugger.

        Reviewed by Adam Roben.

        * DerivedSources.make: Add JavaScriptCallFrame.
        * bindings/js/JSJavaScriptCallFrameCustom.cpp: Added.
        (WebCore::JSJavaScriptCallFrame::evaluate): Calls impl evaluate and returns the result.
        (WebCore::JSJavaScriptCallFrame::scopeChain): Makes an array of the ScopeChain.
        * page/JavaScriptCallFrame.cpp: Added.
        (WebCore::JavaScriptCallFrame::JavaScriptCallFrame):
        (WebCore::JavaScriptCallFrame::caller): Returns m_caller.
        (WebCore::JavaScriptCallFrame::functionName): Returns the function
        name from the ExecState if this is not global code or anonymous.
        (WebCore::JavaScriptCallFrame::evaluate): Evaluates a script string
        in the scope of the call frame.
        * page/JavaScriptCallFrame.h: Added.
        (WebCore::JavaScriptCallFrame::create): Call the ctor can return in a PassRefPtr.
        (WebCore::JavaScriptCallFrame::invalidate): Sets m_mexec to 0. This prevents a
        stale ExecState from being accessed after the lifetime of the ExecState.
        (WebCore::JavaScriptCallFrame::isValid): Checks if m_exec is 0.
        (WebCore::JavaScriptCallFrame::execState): Returns m_exec.
        (WebCore::JavaScriptCallFrame::sourceIdentifier): Returns m_sourceID.
        (WebCore::JavaScriptCallFrame::line): Returns m_line.
        (WebCore::JavaScriptCallFrame::setLine): Sets m_line.
        (WebCore::JavaScriptCallFrame::scopeChain): Returns by reference m_exec->scopeChain().
        * page/JavaScriptCallFrame.idl: Added.
        * WebCore.xcodeproj/project.pbxproj: Add new files.
        * WebCore.vcproj/WebCore.vcproj: Ditto.

2008-05-13  Timothy Hatcher  <timothy@apple.com>

        Add a new WebInspector.Object base class that will be used for
        a few objects in the Web Inspector to support listeners on any
        object. This will help add more abstraction to the Inspector.

        Reviewed by Adam Roben.

        * page/inspector/Object.js: Added.
        (WebInspector.Object): Does nothing.
        (WebInspector.Object.prototype.addEventListener): Adds the listener to
        the _listeners map by type. Supports a this object argument, for easy
        addition of listeners without the need for bind.
        (WebInspector.Object.prototype.removeEventListener): Remove the listener
        from the _listeners map. If the listener is null and the thisObject was
        passed, remove any listener for that thisObject.
        (WebInspector.Object.prototype.dispatchEventToListeners): Sends an event
        for a type to all listeners for that type. Mimics some of the DOMEvent
        methods and properties for the event object passed to the listeners.
        * WebCore.vcproj/WebCore.vcproj: Add new files.
        * page/inspector/WebKit.qrc: Ditto.
        * page/inspector/inspector.html: Ditto.

2008-05-13  Timothy Hatcher  <timothy@apple.com>

        Update the view source CSS to better match the new Inspector mock-ups.

        Reviewed by Kevin McCullough.

        * css/view-source.css:

2008-05-13  John Sullivan  <sullivan@apple.com>

        Reviewed by Dan Bernstein and Kevin Decker
        
        - fixed <rdar://problem/5879597> reproducible crash in HTMLSelectElement::typeAheadFind

        Test: fast/forms/select-type-ahead-list-box-no-selection.html

        * html/HTMLSelectElement.cpp:
        (WebCore::HTMLSelectElement::typeAheadFind):
        When there's no initially-selected element, we were accessing index -1. Check for this
        case and start at 0.

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

        Reviewed by Dan Bernstein.

        Small cleanup to XMLHttpRequest in preparation for Access Control changes.

        * xml/XMLHttpRequest.cpp:
        (WebCore::XMLHttpRequest::XMLHttpRequest):
        (WebCore::XMLHttpRequest::~XMLHttpRequest):
        (WebCore::XMLHttpRequest::open):
        (WebCore::XMLHttpRequest::send):
        (WebCore::XMLHttpRequest::internalAbort):
        (WebCore::XMLHttpRequest::processSyncLoadResults):
        (WebCore::XMLHttpRequest::didFinishLoading):
        (WebCore::XMLHttpRequest::didReceiveResponse):
        (WebCore::XMLHttpRequest::didReceiveData):
        * xml/XMLHttpRequest.h:

2008-05-13  chris fleizach  <cfleizach@apple.com>

        Beth Dakin

        <rdar://problem/5701210> VO: If image is missing, VoiceOver does not speak the alternative text.

        * page/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::accessibilityIsIgnored):

2008-05-13  chris fleizach  <cfleizach@apple.com>

        Beth Dakin

        <rdar://problem/5908446> AX: webkit needs to return blockquote information for all AX objects, not just in AXTextMarker info

        * page/mac/AccessibilityObjectWrapper.mm:
        (-[AccessibilityObjectWrapper accessibilityAttributeNames]):
        (-[AccessibilityObjectWrapper accessibilityAttributeValue:]):

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

        Reviewed by John Sullivan.

        <rdar://problem/4852077> REGRESSION: The content of the HTML file which is saved as Thai
        (ISO 8859-11) disappear.

        <rdar://problem/5842597> Thai ISO-8859-11 should be upgraded to Windows-874

        Test: fast/encoding/char-decoding.html

        * platform/text/TextCodecICU.cpp: (WebCore::TextCodecICU::registerExtendedEncodingNames):
        Register ISO-8859-11, which doesn't have a standard IANA name, despite following
        the usual 8859 naming scheme. Also, made TIS-620 map to windows-874-2000 explicitly.

2008-05-13  chris fleizach  <cfleizach@apple.com>

        Reviewed by Beth Dakin

        <rdar://problem/5471973> Some AXLinks are not getting AXTitles though there is title text

        * page/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::title):

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

        Reviewed by Eric Seidel.

        https://bugs.webkit.org/show_bug.cgi?id=18681
        <rdar://problem/5888130> WebKit should not remove BOM characters from content.

        We were only trying to match Firefox, and it doesn't do this any more.

        Tests: fast/encoding/bom-in-content.html
               fast/encoding/bom-in-content-utf16.html

        * platform/text/TextDecoder.cpp: (WebCore::TextDecoder::checkForBOM): Skip the BOM if it's
        at the start of input stream.

        * platform/text/TextCodec.cpp:
        * platform/text/TextCodec.h:
        * platform/text/TextCodecICU.cpp:
        (WebCore::TextCodecICU::decode):
        * platform/text/TextCodecUTF16.cpp:
        (WebCore::TextCodecUTF16::decode):
        * platform/text/mac/TextCodecMac.cpp:
        (WebCore::TextCodecMac::decode):
        Don't remove the BOM.

2008-05-13  Anders Carlsson  <andersca@apple.com>

        Reviewed by Darin.

        Don't crash when a document loader is destroyed while an initial caching attempt
        is in progress.

        * loader/appcache/ApplicationCacheGroup.cpp:
        (WebCore::ApplicationCacheGroup::~ApplicationCacheGroup):
        Stop loading.
        
        (WebCore::ApplicationCacheGroup::stopLoading):
        New method that stops a cache update.
        
        (WebCore::ApplicationCacheGroup::documentLoaderDestroyed):
        Delete ourselves here.
        
        * loader/appcache/ApplicationCacheGroup.h:

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

        Reviewed by Darin.

        <rdar://problem/5841351> Turkish ISO 8859-9 encoding should be treated as windows-1254

        Match IE and upgrade ISO-8859-9 to windows-1254, which is its strict superset.

        Test: fast/encoding/char-decoding.html

        * platform/text/TextCodecICU.cpp:
        (WebCore::TextCodecICU::registerExtendedEncodingNames): Register the standard name
        unconditionally. Previously, we registered windows-949-2000 as a special case that lacked 
        an IANA standard name, and got away with not registering GBK because it happened
        to be reported by ICU normally earlier than any encoding upgraded to it.

2008-05-13  Tor Arne Vestbø  <tavestbo@trolltech.com>

        Reviewed by Simon

        Fix QtWebKit build on Qt embedded.

        * WebCore.pro:
        * platform/FileSystem.h:
        * platform/qt/FileSystemQt.cpp:

2008-05-13  Ariya Hidayat  <ariya.hidayat@trolltech.com>

        Reviewed by Simon.

        For Gtk/X11 and Qt/X11, use a more extensive plug-ins scan directories set

        * plugins/PluginDatabase.cpp:
        (WebCore::addMozillaPluginDirectories):
        (WebCore::PluginDatabase::isPreferredPluginDirectory):

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

        Turn on warnings as errors in WebCore.vcproj

        Rubberstamped by Anders Carlsson.

        * WebCore.vcproj/WebCore.vcproj: Also let VS reformat the file as it
        saw fit. The important part is the removal of the WarnAsError="false"
        lines.

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

        Fix a MSVC warning in PluginViewWin

        Reviewed by Anders Carlsson.

        Test: http/tests/plugins/post-url-file.html

        * plugins/win/PluginViewWin.cpp:
        (WebCore::PluginView::handlePostReadFile): Added a missing return
        statement.

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

        Fix a MSVC warning in GetEOTHeader

        Reviewed by Dan Bernstein.

        * platform/graphics/win/GetEOTHeader.cpp:
        (WebCore::getEOTHeader): MSVC complains that having a 0-sized array in
        a struct is a non-standard extension. I've replaced the 0-sized arrays
        with arrays of 1 element, and replaced sizeof(structType) with
        offsetof(structType, arrayMember).

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

        Fix a MSVC warning in TextCodecICU

        Reviewed by John Sullivan and Dan Bernstein.

        * platform/text/TextCodecICU.cpp:
        (WebCore::ErrorCallbackSetter::~ErrorCallbackSetter):
        UCNV_SUB_STOP_ON_ILLEGAL is a string literal, so using == with it
        doesn't really do what we want. Use strcmp instead. It's OK to pass an
        unknown value to strcmp here since 1) UCNV_SUB_STOP_ON_ILLEGAL is only
        a single character long so we're not going to ready more than 2 bytes
        from oldContext, and 2) we're inside an ASSERT which will cause a
        crash anyway if it fails.

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

        Fix a MSVC warning in CSSComputedStyleDeclaration

        Reviewed by Geoff Garen.

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::valueForRepeatRule): Removed some unreachable code.

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

        Fix a MSVC warning in InlineTextBox

        Reviewed by Dan Bernstein.

        * rendering/InlineTextBox.cpp:
        (WebCore::InlineTextBox::paint): Initialize some variables that MSVC
        isn't smart enough to figure out will always be initialized in the
        cases where they are used.

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

        Fix a MSVC warning in Position

        Reviewed by Darin Adler.

        * dom/Position.cpp:
        (WebCore::Position::getInlineBoxAndOffset): Use parentheses to make
        the precedence of our expressions explicit.

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

        Fix a MSVC warning in String

        Reviewed by Geoff Garen.

        * platform/text/String.cpp:
        (WebCore::toIntegralType): Disable a bogus warning about using unary -
        on an unsigned value. MSVC isn't smart enough to figure out that
        isNegative will always be false when value is unsigned.

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

        Fix a MSVC warning in XMLHttpRequest

        Reviewed by Geoff Garen.

        * xml/XMLHttpRequest.cpp:
        (WebCore::XMLHttpRequest::XMLHttpRequest): Added static_cast<unsigned
        long>.

2008-05-12  Anders Carlsson  <andersca@apple.com>

        Reviewed by Adam.

        Handle the case when a resource with the same URL as the manifest is listed in the manifest.

        * loader/appcache/ApplicationCacheGroup.cpp:
        (WebCore::ApplicationCacheGroup::addEntry):

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

        Reviewed by Dan Bernstein.

        Add parsing of AccessControlHeader and AccessItemRule.

        * xml/AccessControlList.cpp:
        (WebCore::AccessControlList::parseAccessControlHeader): When multiple http headers are sent
        in the response, the engine will concatenate them with commas separating the rules.  This simply
        reverses that process by splitting on the commas.
        (WebCore::AccessControlList::show):
        * xml/AccessControlList.h:
        * xml/AccessItem.cpp:
        (WebCore::AccessItem::AccessItem):
        (WebCore::AccessItem::show):
        * xml/AccessItem.h:
        (WebCore::AccessItem::isValid):
        * xml/AccessItemRule.cpp:
        (WebCore::skipLWS):
        (WebCore::AccessItemRule::parseAccessItemRule): Parse the rule according to the BNF provided by
        the Access Control spec.
        (WebCore::AccessItemRule::parsePatternList):
        (WebCore::AccessItemRule::invalidate):
        (WebCore::AccessItemRule::show):
        * xml/AccessItemRule.h:

2008-05-12  David Kilzer  <ddkilzer@apple.com>

        Fix logic error in DocLoader::clearPreloads()

        Reviewed by Antti.

        * loader/DocLoader.cpp:
        (WebCore::DocLoader::clearPreloads): Be sure to decrease the preload count for
        the cached resource before trying to remove it from the cache.  A non-zero
        preload count can prevent the resource from being removed from the cache.

2008-05-12  Anders Carlsson  <andersca@apple.com>

        Reviewed by Adam.

        Handle empty manifest files without crashing.
        
        * loader/appcache/ApplicationCacheGroup.cpp:
        (WebCore::ApplicationCacheGroup::startLoadingEntry):

2008-05-12  Alp Toker  <alp@nuanti.com>

        GTK+ build fix for breakage in r33056. Include limits.h for INT_MAX.

        * platform/graphics/FontCache.h:

2008-05-12  Anders Carlsson  <andersca@apple.com>

        Reviewed by Adam.

        Add user agent to requests when loading/updating the cache.
    
        * loader/FrameLoader.h:
        * loader/appcache/ApplicationCacheGroup.cpp:
        (WebCore::ApplicationCacheGroup::update):
        (WebCore::ApplicationCacheGroup::startLoadingEntry):

2008-05-12  Anders Carlsson  <andersca@apple.com>

        Reviewed by Adam.

        Make it possible to perform synchronous loads from the application cache.
        
        * loader/DocumentLoader.cpp:
        (WebCore::DocumentLoader::shouldLoadResourceFromApplicationCache):
        Factor out code from scheduleApplicationCacheLoad in its own method.
        
        (WebCore::DocumentLoader::scheduleApplicationCacheLoad):
        Call shouldLoadResourceFromApplicationCache here instead.
        
        * loader/DocumentLoader.h:
        
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::loadResourceSynchronously):
        Call shouldLoadResourceFromApplicationCache.

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

        Reviewed by Ada Chan and Sam Weinig.

        - WebCore changes for https://bugs.webkit.org/show_bug.cgi?id=17097
          <rdar://problem/5715471> CGFontRefs (and HFONTs on Windows) leak because FontCache grows without bound

        Added a way for clients to let the cache know that they no longer need
        font data, which lets the cache release it. Changed clients to track
        most of the font data they get from the cache so that they can later
        release it. Some instances of font data -- namely, those used for system
        font fallback -- are still not tracked and will therefore remain in the
        cache indefinitely.

        * WebCore.base.exp: Added exports for WebCoreStatistics in WebKit.

        * platform/graphics/Font.cpp:
        (WebCore::Font::Font): Changed to use FontFallbackList::create().
        (WebCore::Font::update): Ditto.

        * platform/graphics/FontCache.cpp:
        (WebCore::FontCache::getCachedFontData): Added code to track the number
        of times a SimpleFontData instance has been requested from the cache,
        remove requested instances from the inactive list, and purge inactive
        font data if the inactive list has grown above its maximum allowed size.
        (WebCore::FontCache::releaseFontData): Added. Called by clients to let
        the cache know that they no longer need the font data. Adds the font
        data to the inactive list if the last client has released it.
        (WebCore::FontCache::purgeInactiveFontData): Added. Removes inactive
        font data from the cache (and the inactive list).
        (WebCore::FontCache::fontDataCount): Added to provide statistics.
        (WebCore::FontCache::inactiveFontDataCount): Ditto.

        * platform/graphics/FontCache.h:

        * platform/graphics/FontData.h:
        (WebCore::FontData::FontData): Added a member variable to store the
        highest glyph page tree level in which there is a node for this FontData.
        This is used to limit the depth of the search when pruning glyph page
        trees.
        (WebCore::FontData::setMaxGlyphPageTreeLevel): Added this accessor.
        (WebCore::FontData::maxGlyphPageTreeLevel): Ditto.

        * platform/graphics/FontFallbackList.cpp:
        (WebCore::FontFallbackList::FontFallbackList): Changed to start with a
        refcount of 1.
        (WebCore::FontFallbackList::invalidate): Added a call to
        releaseFontData().
        (WebCore::FontFallbackList::releaseFontData): Added. Lets the font cache
        know that we no longer need the FontData in our font list.
        (WebCore::FontFallbackList::fontDataAt): Changed to record in the font
        list whether the font data is a custom font data or not.
        (WebCore::FontFallbackList::setPlatformFont): Ditto.

        * platform/graphics/FontFallbackList.h:
        (WebCore::FontFallbackList::create): Added and made the constructor
        private.
        (WebCore::FontFallbackList::~FontFallbackList): Added a call to
        releaseFontData().

        * platform/graphics/GlyphPageTreeNode.cpp:
        (WebCore::GlyphPageTreeNode::treeGlyphPageCount): Added to provide
        statistics.
        (WebCore::GlyphPageTreeNode::pageCount): Ditto.

        (WebCore::GlyphPageTreeNode::pruneTreeFontData): Added.
        (WebCore::GlyphPageTreeNode::getChild): Added code to update the font
        data's maximum glyph page tree level.
        (WebCore::GlyphPageTreeNode::pruneFontData): Added.

        * platform/graphics/GlyphPageTreeNode.h:

        * platform/graphics/SimpleFontData.cpp:
        (WebCore::SimpleFontData::~SimpleFontData): Added code to let the font
        cache know that we no longer need the small caps font data and to prune
        the glyph page trees.

2008-05-12  Anders Carlsson  <andersca@apple.com>

        Reviewed by Alexey.

        Add ApplicationCacheStorage::empty() method which will empty
        the application cache database.
        
        * WebCore.base.exp:
        * loader/appcache/ApplicationCache.cpp:
        (WebCore::ApplicationCache::clearStorageID):
        * loader/appcache/ApplicationCache.h:
        * loader/appcache/ApplicationCacheGroup.cpp:
        (WebCore::ApplicationCacheGroup::clearStorageID):
        * loader/appcache/ApplicationCacheGroup.h:
        * loader/appcache/ApplicationCacheResource.h:
        (WebCore::ApplicationCacheResource::clearStorageID):
        * loader/appcache/ApplicationCacheStorage.cpp:
        (WebCore::ApplicationCacheStorage::empty):
        * loader/appcache/ApplicationCacheStorage.h:

2008-05-12  Anders Carlsson  <andersca@apple.com>

        Reviewed by John.

        Don't throw an exception if the string passed in is an invalid URL.
        
        * loader/appcache/DOMApplicationCache.cpp:
        (WebCore::DOMApplicationCache::remove):

2008-05-12  Anders Carlsson  <andersca@apple.com>

        Reviewed by Mitz.

        Add the variable enums for getting the input vtables.
        
        * bridge/npapi.h:

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

        Windows build fix

        * WebCorePrefix.cpp: Touched this so that it will rebuild now that
        ENABLE_CROSS_DOCUMENT_MESSAGING has been removed.

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

        Roll out recent  threading changes (r32807, r32810, r32819, r32822) to simplify
        SquirrelFish merging.

        * bindings/js/GCController.cpp:
        (WebCore::collect):
        (WebCore::GCController::gcTimerFired):
        (WebCore::GCController::garbageCollectNow):
        * bindings/js/JSAudioConstructor.cpp:
        (WebCore::JSAudioConstructor::JSAudioConstructor):
        * bindings/js/JSCSSRuleCustom.cpp:
        (WebCore::toJS):
        * bindings/js/JSCSSStyleDeclarationCustom.cpp:
        (WebCore::JSCSSStyleDeclaration::nameGetter):
        * bindings/js/JSCSSValueCustom.cpp:
        (WebCore::toJS):
        * bindings/js/JSCanvasPixelArrayCustom.cpp:
        (WebCore::JSCanvasPixelArray::indexGetter):
        (WebCore::toJS):
        * bindings/js/JSCanvasRenderingContext2DCustom.cpp:
        (WebCore::toJS):
        * bindings/js/JSClipboardCustom.cpp:
        (WebCore::JSClipboard::types):
        (WebCore::JSClipboard::getData):
        * bindings/js/JSCustomXPathNSResolver.cpp:
        (WebCore::JSCustomXPathNSResolver::lookupNamespaceURI):
        * bindings/js/JSDOMApplicationCacheCustom.cpp:
        (WebCore::JSDOMApplicationCache::addEventListener):
        (WebCore::JSDOMApplicationCache::removeEventListener):
        (WebCore::JSDOMApplicationCache::setOnchecking):
        (WebCore::JSDOMApplicationCache::setOnerror):
        (WebCore::JSDOMApplicationCache::setOnnoupdate):
        (WebCore::JSDOMApplicationCache::setOndownloading):
        (WebCore::JSDOMApplicationCache::setOnprogress):
        (WebCore::JSDOMApplicationCache::setOnupdateready):
        (WebCore::JSDOMApplicationCache::setOncached):
        * bindings/js/JSDOMWindowBase.cpp:
        (WebCore::JSDOMWindowBase::JSDOMWindowBase):
        (WebCore::JSDOMWindowBase::getValueProperty):
        (WebCore::JSDOMWindowBase::setListener):
        (WebCore::JSDOMWindowBase::findOrCreateJSEventListener):
        (WebCore::JSDOMWindowBase::findJSUnprotectedEventListener):
        (WebCore::JSDOMWindowBase::findOrCreateJSUnprotectedEventListener):
        (WebCore::windowProtoFuncAToB):
        (WebCore::windowProtoFuncBToA):
        (WebCore::windowProtoFuncSetTimeout):
        (WebCore::windowProtoFuncSetInterval):
        (WebCore::windowProtoFuncAddEventListener):
        * bindings/js/JSDOMWindowBase.h:
        * bindings/js/JSDOMWindowShell.cpp:
        * bindings/js/JSDOMWindowShell.h:
        * bindings/js/JSDocumentCustom.cpp:
        (WebCore::toJS):
        * bindings/js/JSEventCustom.cpp:
        (WebCore::toJS):
        * bindings/js/JSEventTargetBase.cpp:
        (WebCore::jsEventTargetAddEventListener):
        * bindings/js/JSEventTargetBase.h:
        (WebCore::JSEventTargetPrototype::self):
        * bindings/js/JSEventTargetNode.cpp:
        (WebCore::JSEventTargetNode::setListener):
        * 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::getValueProperty):
        * bindings/js/JSHTMLOptionElementConstructor.cpp:
        (WebCore::JSHTMLOptionElementConstructor::JSHTMLOptionElementConstructor):
        * bindings/js/JSHTMLOptionsCollectionCustom.cpp:
        (WebCore::JSHTMLOptionsCollection::length):
        * bindings/js/JSInspectedObjectWrapper.cpp:
        (WebCore::JSInspectedObjectWrapper::wrap):
        * bindings/js/JSInspectorCallbackWrapper.cpp:
        (WebCore::JSInspectorCallbackWrapper::wrap):
        * bindings/js/JSLocationCustom.cpp:
        (WebCore::JSLocation::toString):
        * bindings/js/JSNamedNodesCollection.cpp:
        (WebCore::JSNamedNodesCollection::lengthGetter):
        * bindings/js/JSNavigatorCustom.cpp:
        (WebCore::JSNavigator::appVersion):
        * bindings/js/JSNodeCustom.cpp:
        (WebCore::toJS):
        * bindings/js/JSNodeFilterCustom.cpp:
        (WebCore::JSNodeFilter::acceptNode):
        * bindings/js/JSRGBColor.cpp:
        (WebCore::getJSRGBColor):
        * bindings/js/JSSQLResultSetRowListCustom.cpp:
        (WebCore::JSSQLResultSetRowList::item):
        * bindings/js/JSSVGElementWrapperFactory.cpp:
        (WebCore::createJSSVGWrapper):
        * bindings/js/JSSVGLazyEventListener.cpp:
        (WebCore::JSSVGLazyEventListener::eventParameterName):
        * bindings/js/JSStorageCustom.cpp:
        (WebCore::JSStorage::nameGetter):
        * bindings/js/JSStyleSheetCustom.cpp:
        (WebCore::toJS):
        * bindings/js/JSXMLHttpRequestConstructor.cpp:
        (WebCore::JSXMLHttpRequestConstructor::construct):
        * bindings/js/JSXMLHttpRequestCustom.cpp:
        (WebCore::JSXMLHttpRequest::setOnreadystatechange):
        (WebCore::JSXMLHttpRequest::setOnload):
        (WebCore::JSXMLHttpRequest::setOnprogress):
        (WebCore::JSXMLHttpRequest::getResponseHeader):
        (WebCore::JSXMLHttpRequest::addEventListener):
        (WebCore::JSXMLHttpRequest::removeEventListener):
        * bindings/js/JSXSLTProcessorConstructor.cpp:
        (WebCore::JSXSLTProcessorConstructor::construct):
        * bindings/js/JSXSLTProcessorCustom.cpp:
        (WebCore::JSXSLTProcessor::getParameter):
        * bindings/js/kjs_binding.cpp:
        (WebCore::jsStringOrNull):
        (WebCore::jsOwnedStringOrNull):
        (WebCore::jsStringOrUndefined):
        (WebCore::jsStringOrFalse):
        (WebCore::nonCachingStaticFunctionGetter):
        (WebCore::objectToStringFunctionGetter):
        * bindings/js/kjs_binding.h:
        (WebCore::DOMObject::DOMObject):
        (WebCore::cacheDOMObject):
        (WebCore::cacheSVGDOMObject):
        * bindings/js/kjs_events.cpp:
        (WebCore::JSLazyEventListener::eventParameterName):
        (WebCore::JSLazyEventListener::parseCode):
        * bindings/js/kjs_html.cpp:
        (WebCore::getRuntimeObject):
        * bindings/scripts/CodeGeneratorJS.pm:
        * bridge/c/c_instance.cpp:
        (KJS::Bindings::CInstance::defaultValue):
        (KJS::Bindings::CInstance::stringValue):
        (KJS::Bindings::CInstance::numberValue):
        (KJS::Bindings::CInstance::valueOf):
        * bridge/c/c_instance.h:
        * bridge/c/c_utility.cpp:
        (KJS::Bindings::convertNPVariantToValue):
        * bridge/jni/jni_instance.cpp:
        (JavaInstance::stringValue):
        (JavaInstance::numberValue):
        (JavaInstance::invokeMethod):
        (JavaInstance::defaultValue):
        (JavaInstance::valueOf):
        * bridge/jni/jni_instance.h:
        * bridge/jni/jni_jsobject.h:
        * bridge/jni/jni_jsobject.mm:
        (JavaJSObject::call):
        (JavaJSObject::setMember):
        (JavaJSObject::setSlot):
        (JavaJSObject::convertJObjectToValue):
        (JavaJSObject::getListFromJArray):
        * bridge/jni/jni_objc.mm:
        (KJS::Bindings::dispatchJNICall):
        * bridge/jni/jni_runtime.cpp:
        (JavaArray::convertJObjectToArray):
        (JavaField::dispatchValueFromInstance):
        (JavaField::valueFromInstance):
        (JavaField::dispatchSetValueToInstance):
        (JavaArray::valueAt):
        * bridge/jni/jni_utility.h:
        * bridge/objc/objc_class.mm:
        (KJS::Bindings::ObjcClass::fallbackObject):
        * bridge/objc/objc_instance.h:
        * bridge/objc/objc_instance.mm:
        (ObjcInstance::defaultValue):
        (ObjcInstance::stringValue):
        (ObjcInstance::numberValue):
        (ObjcInstance::valueOf):
        * bridge/objc/objc_utility.h:
        * bridge/objc/objc_utility.mm:
        (KJS::Bindings::convertNSStringToString):
        (KJS::Bindings::convertObjcValueToValue):
        * bridge/qt/qt_class.cpp:
        (KJS::Bindings::QtClass::fallbackObject):
        * bridge/qt/qt_instance.cpp:
        (KJS::Bindings::QtRuntimeObjectImp::construct):
        (KJS::Bindings::QtInstance::getRuntimeObject):
        (KJS::Bindings::QtInstance::invokeDefaultMethod):
        (KJS::Bindings::QtInstance::defaultValue):
        (KJS::Bindings::QtInstance::stringValue):
        (KJS::Bindings::QtInstance::numberValue):
        (KJS::Bindings::QtInstance::valueOf):
        * bridge/qt/qt_instance.h:
        * bridge/qt/qt_runtime.cpp:
        (KJS::Bindings::convertValueToQVariant):
        (KJS::Bindings::convertQVariantToValue):
        (KJS::Bindings::QtRuntimeMetaMethod::lengthGetter):
        (KJS::Bindings::QtRuntimeMetaMethod::connectGetter):
        (KJS::Bindings::QtRuntimeMetaMethod::disconnectGetter):
        (KJS::Bindings::QtRuntimeConnectionMethod::lengthGetter):
        (KJS::Bindings::QtConnectionObject::execute):
        * bridge/runtime.cpp:
        (KJS::Bindings::Instance::createRuntimeObject):
        * bridge/runtime.h:
        (KJS::Bindings::Instance::valueOf):
        * bridge/runtime_array.cpp:
        (RuntimeArray::lengthGetter):
        * bridge/runtime_method.cpp:
        (RuntimeMethod::lengthGetter):
        * bridge/runtime_object.cpp:
        (RuntimeObjectImp::RuntimeObjectImp):
        (RuntimeObjectImp::methodGetter):
        (RuntimeObjectImp::defaultValue):
        * xml/XMLHttpRequest.cpp:
        (WebCore::XMLHttpRequest::dropProtection):

2008-05-11  Robin Dunn  <robin@alldunn.com>

        Reviewed by Kevin Ollivier.

        Since wx popup menus dismiss themselves when an item is selected we need to
        call hidePopup so webkit's internal state is correct.
        
        https://bugs.webkit.org/show_bug.cgi?id=19000

        * platform/wx/PopupMenuWx.cpp:
        (WebCore::PopupMenu::OnMenuItemSelected):
        (WebCore::PopupMenu::hide):

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

        Reviewed by Mark Rowe.

        Move some generic parsing functions into a new ParserUtilities header so that
        they can be used for non-SVG builds too.

        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * platform/text/ParserUtilities.h: Added.
        (WebCore::skipString):
        * svg/SVGParserUtilities.h:
        (WebCore::isWhitespace):
        (WebCore::skipOptionalSpaces):
        (WebCore::skipOptionalSpacesOrDelimiter):

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

        Reviewed by Dan Bernstein.

        Add scaffolding for the implementation of Access Control for Cross-site Requests. 

        * GNUmakefile.am:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * WebCoreSources.bkl:
        * xml/AccessControlList.cpp: Added.
        (WebCore::AccessControlList::AccessControlList):
        (WebCore::AccessControlList::~AccessControlList):
        (WebCore::AccessControlList::parseAccessControlHeader):
        (WebCore::AccessControlList::checkOrigin):
        * xml/AccessControlList.h: Added.
        * xml/AccessItem.cpp: Added.
        (WebCore::AccessItem::AccessItem):
        (WebCore::AccessItem::parseAccessItem):
        (WebCore::AccessItem::matches):
        * xml/AccessItem.h: Added.
        * xml/AccessItemRule.cpp: Added.
        (WebCore::AccessItemRule::AccessItemRule):
        (WebCore::AccessItemRule::parseAccessItemRule):
        * xml/AccessItemRule.h: Added.

2008-05-11  Julien Chaffraix  <jchaffraix@webkit.org>

        Debug build fix.

        * loader/appcache/ApplicationCache.cpp: Include stdio.h
        as we are using printf in ApplicationCache::dump().

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

        Reviewed by Jessica Kahn.

        - add a copy assignment operator to FontPlatformData on Mac to properly
          retain the m_font data member.

        * platform/graphics/mac/FontPlatformData.h:
        * platform/graphics/mac/FontPlatformDataMac.mm:
        (WebCore::FontPlatformData::FontPlatformData):
        (WebCore::~FontPlatformData):
        (WebCore::FontPlatformData::operator=):
        (WebCore::FontPlatformData::setFont):

2008-05-10  Adele Peterson  <adele@apple.com>

        Reviewed by Tim Hatcher.

        Fix crash for WebKit clients that don't set a group name for the WebView/Page.

        * page/PageGroup.cpp: (WebCore::PageGroup::PageGroup): Instead of adding the Page directly to the group,
          call the addPage method, since it does extra work initializing m_localStorage.

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

        Reviewed by Mark Rowe.

        Fix for https://bugs.webkit.org/show_bug.cgi?id=18958
        NULL pointer dereference in NamedAttrMap::setNamedItem

        Test: fast/dom/NamedNodeMap-setNamedItem-crash.html

        * dom/NamedAttrMap.cpp:
        (WebCore::NamedAttrMap::setNamedItem): Null check the argument.

2008-05-09  Kevin McCullough  <kmccullough@apple.com>

        Build fix.

        * page/Console.cpp:
        (WebCore::Console::profile):

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

        Rubber-stamped by Mark Rowe.

        Remove the ENABLE_CROSS_DOCUMENT_MESSAGING #ifdefs.

        * Configurations/WebCore.xcconfig:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.vcproj/build-generated-files.sh:
        * bindings/js/JSDOMWindowCustom.cpp:
        (WebCore::JSDOMWindow::customGetOwnPropertySlot):
        (WebCore::JSDOMWindow::postMessage):
        * bindings/js/JSEventCustom.cpp:
        (WebCore::toJS):
        * bindings/objc/DOMEvents.mm:
        (+[DOMEvent _wrapEvent:WebCore::]):
        * dom/Document.cpp:
        (WebCore::Document::createEvent):
        * dom/Event.cpp:
        (WebCore::Event::isMessageEvent):
        * dom/Event.h:
        * dom/MessageEvent.cpp:
        * dom/MessageEvent.h:
        * dom/MessageEvent.idl:
        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::postMessageTimerFired):
        * page/DOMWindow.h:
        * page/DOMWindow.idl:

2008-05-09  Adam Barth  <abarth-webkit@adambarth.com>

        Reviewed by Sam Weinig.

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

        Make postMessage generate an event on the window instead of the
        document.

        Test: http/tests/messaging/cross-domain-message-event-dispatch.html

        * dom/EventTargetNode.cpp:
        (WebCore::EventTargetNode::dispatchWindowEvent):
        * dom/EventTargetNode.h:
        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::postMessageTimerFired):

2008-05-09  Tor Arne Vestbø  <tavestbo@trolltech.com>

        Reviewed by Simon.

        Replaced all instances of qDebug() with LOG(Media, ...)
        in MediaPlayerPrivatePhonon.

        * platform/graphics/qt/MediaPlayerPrivatePhonon.cpp:
        (WebCore::MediaPlayerPrivate::updateStates):

2008-05-09  Tor Arne Vestbø  <tavestbo@trolltech.com>

        Reviewed by Simon

        Fix the Qt/Mac build.

        * platform/qt/FileSystemQt.cpp:

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

        Reviewed by Anders Carlsson.

        Rename the XMLHttpRequestState enum values to match the spec.

        * xml/XMLHttpRequest.cpp:
        (WebCore::XMLHttpRequest::responseXML):
        (WebCore::XMLHttpRequest::XMLHttpRequest):
        (WebCore::XMLHttpRequest::callReadyStateChangeListener):
        (WebCore::XMLHttpRequest::open):
        (WebCore::XMLHttpRequest::send):
        (WebCore::XMLHttpRequest::abort):
        (WebCore::XMLHttpRequest::setRequestHeader):
        (WebCore::XMLHttpRequest::getAllResponseHeaders):
        (WebCore::XMLHttpRequest::getResponseHeader):
        (WebCore::XMLHttpRequest::status):
        (WebCore::XMLHttpRequest::statusText):
        (WebCore::XMLHttpRequest::processSyncLoadResults):
        (WebCore::XMLHttpRequest::didFinishLoading):
        (WebCore::XMLHttpRequest::didReceiveData):
        * xml/XMLHttpRequest.h:

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

        Reviewed by Mark Rowe.

        - fix https://bugs.webkit.org/show_bug.cgi?id=18818
          <rdar://problem/5901544> REGRESSION (3.1.1-TOT): Character order (float:left ordered after the first letter)

        Test: fast/css/first-letter-float-after-float.html

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::updateFirstLetter): Changed to add the first
        letter container right before the rest of the text it is taken from,
        instead of at the beginning of the block.

2008-05-08  Chris Fleizach  <cfleizach@apple.com>

        Reviewed by Darin Adler.

        <rdar://problem/5921046> AX: list box options have wrong AXPosition

        * page/AccessibilityObject.cpp:
        (WebCore::AccessibilityObject::documentFrameView):
        * page/AccessibilityObject.h:

2008-05-08  Julien Chaffraix  <jchaffraix@webkit.org>

        Reviewed by Eric.

        Bug 18916: make_names.pl --factory needs to support custom c++ guard

        Add --guardFactoryWith to handle the cpp guard around generated factories.

        * DerivedSources.make: Set the guardFactoryWith variable for SVG factory.
        * GNUmakefile.am: Ditto.
        * WebCore.pro: Ditto.
        * dom/make_names.pl: Add guardFactoryWith option.

2008-05-08  Julien Chaffraix  <jchaffraix@webkit.org>

        Reviewed by Adam Roben.

        wx & Gtk build fix.

        Should also fix the cURL backend for the Windows port.

        * WebCore.vcproj/WebCore.vcproj: Add FormDataStreamCurl information.
        * platform/network/curl/FormDataStreamCurl.h: Include stdio.h which
        fixes the build on some machine.

        * webcore-wx.bkl: Add FormDataStreamCurl.cpp.

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

        Fixes the bug where the Web Inspector could not
        find any localization strings.

        Reviewed by Mark Rowe.

        * WebCore.xcodeproj/project.pbxproj: Add the localizedStrings.js
        file to the WebCore Copy Resources phase. Also removes an idl from
        the Copy Resources phase.

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

        Reviewed by Adam Roben.

        - fix <rdar://problem/5697957> "No recent searches" label in a narrow search field's history popup is truncated

        * platform/win/PopupMenuWin.cpp:
        (WebCore::PopupMenu::calculatePositionAndSize): Changed to use a bold
        font for measuring labels.

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

        Reviewed by Geoffrey Garen.

        - cross-platform fix for http://bugs.webkit.org/show_bug.cgi?id=17590 
          ASSERTION FAILED: subject in jsRegExpExecute()

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

2008-05-08  Holger Hans Peter Freyther  <zecke@selfish.org>

        Reviewed by Simon.

        Simple ImageBuffer::image implementation.

        In contrast to cg and cairo we do not use a special BitmapImage because
        the ownership of the FrameData inside the BitmapImage is a bit backward
        (actually owned by the ImageDecoderQt...). Further work is needed for image
        and pixmap handling in the qt port...

        * WebCore.pro:
        * platform/graphics/ImageBuffer.h:
        * platform/graphics/qt/ImageBufferQt.cpp:
        (WebCore::ImageBuffer::image):
        * platform/graphics/qt/ImageQt.cpp:
        * platform/graphics/qt/StillImageQt.cpp: Added.
        (WebCore::StillImage::StillImage):
        (WebCore::StillImage::size):
        (WebCore::StillImage::getPixmap):
        (WebCore::StillImage::draw):
        * platform/graphics/qt/StillImageQt.h: Added.

2008-05-08  Holger Hans Peter Freyther  <zecke@selfish.org>

        Reviewed by Simon.

        Update the WebKit.qrc of the inspector to be functional again

        * page/inspector/WebKit.qrc:

2008-05-08  Tor Arne Vestbø  <tavestbo@trolltech.com>

        Reviewed by Simon

        Fix the Qt/Mac build.

        * platform/FileSystem.h:

2008-05-08  Ariya Hidayat  <ariya.hidayat@trolltech.com>

        Reviewed by Simon.

        Use native Windows library handling (instead of QLibrary) 
        for Qt/Win32's PlatformModule.

        * platform/FileSystem.h:
        (WebCore::PlatformModuleVersion::PlatformModuleVersion):
        * platform/qt/FileSystemQt.cpp:
        (WebCore::unloadModule):

2008-05-08  Simon Hausmann  <hausmann@webkit.org>

        Reviewed and found by Holger.

        Include .css in the list of extensions for text/css. Fixes
        fast/loader/local-css-allowed-in-strict-mode.html.

        * platform/qt/MIMETypeRegistryQt.cpp:

2008-05-08  Simon Hausmann  <hausmann@webkit.org>

        Fix the Qt and Wx build when compiling without offline app support.

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

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

        Reviewed by Adele Peterson

        Update MessageEvent to match the latest version of the HTML5 spec,
        adding the lastEventId attribute.

        * dom/MessageEvent.cpp:
        (WebCore::MessageEvent::MessageEvent):
        (WebCore::MessageEvent::initMessageEvent):
        * dom/MessageEvent.h:
        (WebCore::MessageEvent::lastEventId):
        * dom/MessageEvent.idl:
        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::postMessage):

2008-05-07  Stephanie Lewis <slewis@apple.com>

        Reviewed by Maciej.

        remove non-functioning code.  If onunload should be fired from these nodes then
        a WindowEventListener needs to be set.  However, Firefox and IE also do not
        fire onunload events for these cases.

        Test: fast/events/onunload-not-on-body.html 
        
        * html/HTMLFrameElementBase.cpp:
        (WebCore::HTMLFrameElementBase::parseMappedAttribute):
        * html/HTMLObjectElement.cpp
        (WebCore::HTMLObjectElement::parseMappedAttribute):

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

        Reviewed by John Sullivan.

        - fix https://bugs.webkit.org/show_bug.cgi?id=18909
          <rdar://problem/5914165> REGRESSION (r31872-r31878): Viewed photos not closing completely at indycar.com

        Test: fast/dynamic/positioned-movement-with-positioned-children.html

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::layoutOnlyPositionedObjects): Cover the case of
        a positioned object that has only moved and has only positioned children
        that have changed.
        * rendering/RenderObject.h:
        (WebCore::RenderObject::needsPositionedMovementLayout): Added this
        accessor.

2008-05-07  Anders Carlsson  <andersca@apple.com>

        Reviewed by John.

        When no document loaders are associated with an application cache group,
        release the reference to the newest cache group. This prevents reference cycles.
        
        * loader/appcache/ApplicationCacheGroup.cpp:
        (WebCore::ApplicationCacheGroup::ApplicationCacheGroup):
        (WebCore::ApplicationCacheGroup::documentLoaderDestroyed):
        (WebCore::ApplicationCacheGroup::cacheDestroyed):
        * loader/appcache/ApplicationCacheGroup.h:
        
        * loader/appcache/ApplicationCacheStorage.cpp:
        (WebCore::ApplicationCacheStorage::cacheGroupForURL):
        Return early if the datbase wasn't open.
        
        (WebCore::ApplicationCacheStorage::loadCache):
        Add error.

2008-05-07  Anders Carlsson  <andersca@apple.com>

        Reviewed by Adam.

        Don't put pages with an application cache in the BF cache.
        
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::canCachePage):

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

        Reviewed by John Sullivan.

        <rdar://problem/5666354> Crashes in Mail at WebCore::RemoveNodeCommand::doApply
        
        When a single tab or series of tabs was copied, we weren't putting them into a 
        tab span.  On Paste, we would be given a text node with a single tab or series
        of tabs in it, and we would crash when inserting it at the start of a block
        (where that kind of text becomes completely unrendered).

        * editing/ReplaceSelectionCommand.cpp:
        (WebCore::ReplaceSelectionCommand::removeUnrenderedTextNodesAtEnds): Clean
        up correctly and early return if we removed everything that was inserted.
        * editing/markup.cpp:
        (WebCore::createMarkup):  Include the tab span when the only thing copied
        was a tab or a series of tabs.

2008-05-07  Julien Chaffraix  <jchaffraix@webkit.org>

        Reviewed by Adam Roben.

        wx & Gtk build fix.

        * platform/network/curl/FormDataStreamCurl.cpp: Added stdint.h include. We need to define
        __STDC_LIMIT_MACROS to have SIZE_MAX exported.
        * platform/network/curl/FormDataStreamCurl.h: Removed cstdint include (replaced by stdint.h)
        as it is not present on the build bots.
        * plugins/gtk/PluginDatabaseGtk.cpp: Added missing #endif.

2008-05-07  David Kilzer  <ddkilzer@apple.com>

        Bug 18900: Password field has focus but can't type text (i.rememberthemilk.com)
        <https://bugs.webkit.org/show_bug.cgi?id=18900>
        <rdar://problem/5912383>

        Original patch by Aaron Golden and Tim Omernick.  Reviewed by Adele.

        Test: fast/forms/textfield-to-password-on-focus.html

        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::setInputType): If the current node has
        focus, call updateFocusAppearance() to make sure its state is correct
        after changing its type.

2008-05-07  Chris Fleizach  <cfleizach@apple.com>

        Reviewed by Alice Liu

        <rdar://problem/4867889> REGRESSION: "Choose File.." buttons are exposed as AXGroup instead of AXButton

        * page/AccessibilityObject.h:
        (WebCore::AccessibilityObject::isFileUploadButton):
        * page/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::isFileUploadButton):
        (WebCore::AccessibilityRenderObject::actionElement):
        (WebCore::AccessibilityRenderObject::textUnderElement):
        (WebCore::AccessibilityRenderObject::stringValue):
        (WebCore::AccessibilityRenderObject::roleValue):
        * page/AccessibilityRenderObject.h:
        * rendering/RenderFileUploadControl.cpp:
        (WebCore::RenderFileUploadControl::buttonValue):
        (WebCore::RenderFileUploadControl::fileTextValue):
        * rendering/RenderFileUploadControl.h:

2008-05-07  Julien Chaffraix  <jchaffraix@webkit.org>

        Reviewed by Eric.

        Bug 17971: [Curl] FormData processing should be moved to its own class

        Move FormData treatment into FormDataStream. The aim is to have FormDataStream behave like a stream that cURL
        could manipulate.

        First step into having complete file uploading facility in cURL.

        No test case as it is only code refactoring.

        * GNUmakefile.am: Add FormDataStreamCurl.cpp
        * platform/network/ResourceHandleInternal.h: Move code to FormStreamDataCurl.h
        (WebCore::ResourceHandleInternal::ResourceHandleInternal):
        * platform/network/curl/FormDataStreamCurl.cpp: Added.
        (WebCore::FormDataStream::~FormDataStream):
        (WebCore::FormDataStream::read):
        * platform/network/curl/FormDataStreamCurl.h: Added.
        (WebCore::FormDataStream::FormDataStream):
        * platform/network/curl/ResourceHandleCurl.cpp:
        (WebCore::ResourceHandleInternal::~ResourceHandleInternal):
        * platform/network/curl/ResourceHandleManager.cpp:
        (WebCore::readCallback): Move code to FormDataStreamCurl.cpp

2008-05-07  Adam Treat  <treat@kde.org>

        Reviewed by Simon.

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

        Fixed wrong transform being used for creating the pixmap for a new
        transparency layer. This fixes the popup menus on dell.com.

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

2008-05-07  Ariya Hidayat  <ariya.hidayat@trolltech.com>

        Reviewed by Simon.

        Share the plug-in directories between Gtk and Qt/X11 port.

        * platform/qt/FileSystemQt.cpp:
        (WebCore::homeDirectoryPath): Implement it for Qt.
        * plugins/PluginDatabase.cpp:
        (WebCore::addMozillaPluginDirectories): Shared code.
        (WebCore::PluginDatabase::defaultPluginDirectories):
        (WebCore::PluginDatabase::isPreferredPluginDirectory): Shared code.
        * plugins/gtk/PluginDatabaseGtk.cpp:
        (WebCore::PluginDatabase::isPreferredPluginDirectory): Refactored.
        * plugins/qt/PluginDatabaseQt.cpp: Refactored.

2008-05-07  Tor Arne Vestbø  <tavestbo@trolltech.com>

        Reviewed by Simon

        Fix build issues on Mac and refeactor the .pro file a bit.

        * WebCore.pro:
        * platform/qt/TemporaryLinkStubs.cpp:
        (PluginPackage::fetchInfo):

2008-05-07  Tor Arne Vestbø  <tavestbo@trolltech.com>

        Reviewed by Simon

        Draw scrollview corners (between scrollbars) using the Qt style.

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

        * platform/qt/ScrollViewQt.cpp:
        (WebCore::drawScrollbarCorner):
        (WebCore::ScrollView::paint):

2008-05-07  Simon Hausmann  <hausmann@webkit.org>

        Fix the Qt build, added AccessibilityListBox and ListBoxOption.cpp to
        the build.

        * WebCore.pro:

2008-05-07  Ariya Hidayat  <ariya.hidayat@trolltech.com>

        Rubber-stamped by Holger.

        Fix building without storage support.

        * page/PageGroup.cpp:
        (WebCore::PageGroup::closeLocalStorage): proper #if

2008-05-07  Ariya Hidayat  <ariya.hidayat@trolltech.com>

        Rubber-stamped by Oliver Hunt.

        Fix building without accessibility.

        * page/AXObjectCache.cpp:
        (WebCore::AXObjectCache::selectedChildrenChanged): proper #if

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

        Reviewed by Darin Adler.

        - fix <rdar://problem/5914544> Crash in layoutInlineChildren()

        Test: fast/block/float/float-on-zero-height-line.html

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::markLinesDirtyInVerticalRange):

2008-05-06  Alice Liu  <alice.liu@apple.com>

        Reviewed by Adele Peterson and John Sullivan.

        changes needed to build on Windows after r32911 and r32927

        * WebCore.vcproj/WebCore.vcproj:
        * page/AXObjectCache.cpp:
        (WebCore::AXObjectCache::selectedChildrenChanged):
        * page/AccessibilityObject.h:
        (WebCore::AccessibilityObject::document):
        (WebCore::AccessibilityObject::topDocumentFrameView):
        (WebCore::AccessibilityObject::documentFrameView):
        * page/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::document):
        (WebCore::AccessibilityRenderObject::topDocumentFrameView):
        (WebCore::AccessibilityRenderObject::documentFrameView):
        * page/AccessibilityRenderObject.h:
        * page/mac/AXObjectCacheMac.mm:
        * page/mac/AccessibilityObjectWrapper.mm:
        (-[AccessibilityObjectWrapper position]):
        (-[AccessibilityObjectWrapper accessibilityAttributeValue:]):

2008-05-06  Brady Eidson  <beidson@apple.com>

        Reviewed by Sam Weinig

        Fix a few bugs with the final sync'ing of LocalStorageAreas when the thread is shut down.
        1 - A sync task actually needs to be scheduled for each LocalStorageArea when the shut down occurs.
        2 - Pending sync timers all need to be cancelled.

        * storage/LocalStorage.cpp:
        (WebCore::LocalStorage::storageArea):
        (WebCore::LocalStorage::close): Tell each LocalStorageArea to schedule it's final sync before scheduling
          thread termination.
        * storage/LocalStorage.h:  Change the map to be of LocalStorageAreas instead of StorageAreas

        * storage/LocalStorageArea.cpp:
        (WebCore::LocalStorageArea::LocalStorageArea):
        (WebCore::LocalStorageArea::~LocalStorageArea): ASSERT the timer has been cancelled, but make SURE it is
          in release builds.
        (WebCore::LocalStorageArea::scheduleFinalSync): Cancel the sync timer, schedule the final sync, and set the
          "final sync scheduled" flag
        (WebCore::LocalStorageArea::scheduleItemForSync): ASSERT that the final sync hasn't already been scheduled
        (WebCore::LocalStorageArea::scheduleClear): Ditto
        * storage/LocalStorageArea.h:

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

        wx build fix. Adding files added in  r32925 to the bakefiles.

        * WebCoreSources.bkl:

2008-05-06  Alp Toker  <alp@nuanti.com>

        GTK+ build fix. Add empty stub to keep non-accessible ports building.

        * page/AXObjectCache.h:
        (WebCore::AXObjectCache::selectedChildrenChanged):

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

        Reviewed by Darin.

        Fix for <rdar://problem/5907916> Implement 'aria-labeledby' and 
        'aria-describedby' attributes.

        * html/HTMLAttributeNames.in: Added new attributes. Added both the 
        British spelling (since that is what is specified in the spec), and 
        the American spelling (since the bug filer and I are two Americans 
        who keep spelling it the American way by accident). 
        * page/AccessibilityObject.cpp: Added empty wrappers. These 
        functions can't do anything meaningful without a renderer.
        (WebCore::AccessibilityObject::ariaAccessiblityName):
        (WebCore::AccessibilityObject::ariaLabeledByAttribute):
        (WebCore::AccessibilityObject::ariaDescribedByAttribute):
        * page/AccessibilityObject.h:

        Here is where the real work is done.
        * page/AccessibilityRenderObject.h:
        * page/AccessibilityRenderObject.cpp:
        (WebCore::accessibleNameForNode): Takes a node and finds its 
        contribution to the accessible name, as defined by the Mozilla ARIA 
        Implementer's Guide. 
        (WebCore::AccessibilityRenderObject::ariaAccessiblityName): Takes a 
        string of space-separated IDs, fetches the corresponding element 
        for each ID, and concatenates an accessible name based on the 
        elements.
        (WebCore::AccessibilityRenderObject::ariaLabeledByAttribute): 
        Retrieve the labeledby attribute and send its contents to 
        ariaAccessibilityName().
        (WebCore::AccessibilityRenderObject::title): Return the ARIA 
        labeledby value if one exists.
        (WebCore::AccessibilityRenderObject::ariaDescribedByAttribute): 
        Retrieve the describedby attribute and send its contents to 
        ariaAccessibilityName().
        (WebCore::AccessibilityRenderObject::accessibilityDescription): 
        Return the ARIA describedby attribute if one exists. 

        These are two bugs I spotted. 
        (WebCore::AccessibilityRenderObject::accessibilityIsIgnored): Don't 
        ignore anything with an ARIA role.
        (WebCore::AccessibilityRenderObject::roleValue): Button tags maps 
        to ButtonRole.

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

        Reviewed by Brady.

        Support reading back app caches from the database.
    
        * loader/appcache/ApplicationCache.cpp:
        (WebCore::ApplicationCache::ApplicationCache):
        Initialize m_storageID to 0.
        
        * loader/appcache/ApplicationCacheGroup.cpp:
        (WebCore::ApplicationCacheGroup::cacheDestroyed):
        If the cache being destroyed is not the newest cache, it should no longer be 
        stored in the database. Remove it.
        
        (WebCore::ApplicationCacheGroup::setNewestCache):
        Don't store the cache here.
        
        (WebCore::ApplicationCacheGroup::checkIfLoadIsComplete):
        Store it here instead.
        
        * loader/appcache/ApplicationCacheStorage.cpp:
        (WebCore::ApplicationCacheStorage::loadCacheGroup):
        New method that loads a cache group with a given manifest URL (or returns 0 if the load fails).
        
        (WebCore::ApplicationCacheStorage::findOrCreateCacheGroup):
        Search for the group in the database.
        
        (WebCore::ApplicationCacheStorage::loadManifestHostHashes):
        New method that loads the host hashes from the database.
        
        (WebCore::ApplicationCacheStorage::cacheGroupForURL):
        Search in the database for a cache that contains the resource.
        
        (WebCore::ApplicationCacheStorage::loadCache):
        New method that loads a cache with a given ID.
        
        (WebCore::ApplicationCacheStorage::remove):
        New method that removes a cache.
        
        * loader/appcache/ApplicationCacheStorage.h:
        Add definitions.

2008-05-06  Alp Toker  <alp@nuanti.com>

        Partial GTK+ build fix. Add files from r32925 to the build and replace
        'nil' return with 0.

        * GNUmakefile.am:
        * page/AccessibilityListBoxOption.cpp:
        (WebCore::AccessibilityListBoxOption::parentObject):

2008-05-06  Brady Eidson  <beidson@apple.com>

        Reviewed by Anders

        Make LocalStorage persistent using a SQLite database.

        There's a few things going on here.  Whenever an item is changed, we add it to a set of
        "items to be sync'ed."  Instead of immediately scheduling the sync'ing on the background
        thread, we set a "sync timer" instead.  This is to shield against a series of rapid changes
        to avoid thread churn.

        When the sync timer fires, we move the "items to be sync'ed" set to a background thread set
        and schedule the sync task which is where the items are actually committed to disk.

        Current design for reading items back in from disk is to be as aggressive as possible.
        When a page first accesses it's LocalStorage area, we begin to import all items in from disk so
        they are immediately available.  A future enhancement will be to being this pre-fetching the
        moment we start loading a page when we know that page has LocalStorage.

        * storage/LocalStorageArea.cpp:
        (WebCore::LocalStorageArea::LocalStorageArea):
        (WebCore::LocalStorageArea::length): Return the length, or wait for the import to complete then return it.
        (WebCore::LocalStorageArea::key): Return the key, or wait for the import to complete then return it.
        (WebCore::LocalStorageArea::getItem): Return the item, or wait for the import to complete then return it.
        (WebCore::LocalStorageArea::setItem): Set the item, or hold the import lock and set it.  The second case is
          because if the item is set while the import is still in progress, the new value should override whatever
          the imported value is.
        (WebCore::LocalStorageArea::removeItem): Remove the item, or hold the import lock and remove it.  See the 
          explanation for setItem()
        (WebCore::LocalStorageArea::contains): Return whether or not the item is contained.  Do the same dance with
          the import flag, import lock, and import condition that the above methods do.

        (WebCore::LocalStorageArea::itemChanged): Schedule the item for sync'ing
        (WebCore::LocalStorageArea::itemRemoved): Schedule the removal of the item for sync'ing
        (WebCore::LocalStorageArea::areaCleared): Schedule the clear for sync'ing, and clear all previously 
          scheduled items.

        (WebCore::LocalStorageArea::scheduleItemForSync): Add an item to the sync set.
        (WebCore::LocalStorageArea::scheduleClear): Set a bool flag denoting "All items removed."  If any
          items are later set before the actual removal takes place, they will be written *after* the removal.
        (WebCore::LocalStorageArea::syncTimerFired): Move the current sync-set to the background thread sync set, then 
          schedule a sync task.  Also transfer the "items cleared" flag to the "background thread items cleared" flag
        (WebCore::LocalStorageArea::performImport): Import all items from disk, then signal the import complete.
        (WebCore::LocalStorageArea::markImported): Set the imported flag and signal the import complete
        (WebCore::LocalStorageArea::performSync): If the clear flag is set then drop all items.  Then update or delete 
          each item waiting to be sync'ed
        * storage/LocalStorageArea.h:

2008-05-06  Brady Eidson  <beidson@apple.com>

        Rubberstamped by Mitz Pettel RTL

        * storage/LocalStorage.cpp:
        (WebCore::LocalStorage::fullDatabaseFilename): Filename extensions for localstorage = all lowercase

2008-05-06  Brady Eidson  <beidson@apple.com>

        Reviewed by Darin, Sam Weinig, and Anders

        Preparation for upcoming work making LocalStorage persistent.

        The final step before code that actually does storage and retrieval of LocalStorage items.

        The LocalStorage set is responsible for controlling the path and filenames that individual
        LocalStorageAreas will use for their persistent store.  This adds the ability to return that
        filename.

        Also, add the scheduling methods that LocalStorageArea will use for importing and syncing 
        it's persistent items.

        * storage/LocalStorage.cpp:
        (WebCore::LocalStorage::storageArea):  Add some comments re: the future direction of this
          method once we actually do quota tracking.
        (WebCore::LocalStorage::fullDatabaseFilename):
        (WebCore::LocalStorage::scheduleImport):
        (WebCore::LocalStorage::scheduleSync):
        * storage/LocalStorage.h:

2008-05-06  Chris Fleizach  <cfleizach@apple.com>

        Reviewed by Beth Dakin.

        rdar://problem/5408464> REGRESSION: Unable to use Voiceover on combo boxes (disneyjobs.com)

        * WebCore.xcodeproj/project.pbxproj:
        * html/HTMLOptGroupElement.cpp:
        (WebCore::HTMLOptGroupElement::ownerSelectElement):
        (WebCore::HTMLOptGroupElement::accessKeyAction):
        * html/HTMLOptGroupElement.h:
        * html/HTMLOptionElement.cpp:
        (WebCore::HTMLOptionElement::accessKeyAction):
        (WebCore::HTMLOptionElement::index):
        (WebCore::HTMLOptionElement::setSelected):
        (WebCore::HTMLOptionElement::childrenChanged):
        (WebCore::HTMLOptionElement::ownerSelectElement):
        (WebCore::HTMLOptionElement::insertedIntoDocument):
        * html/HTMLOptionElement.h:
        * html/HTMLSelectElement.cpp:
        (WebCore::HTMLSelectElement::childrenChanged):
        (WebCore::HTMLSelectElement::accessKeySetSelectedIndex):
        * html/HTMLSelectElement.h:
        * page/AXObjectCache.cpp:
        (WebCore::AXObjectCache::get):
        * page/AccessibilityListBox.cpp: Added.
        (WebCore::AccessibilityListBox::AccessibilityListBox):
        (WebCore::AccessibilityListBox::~AccessibilityListBox):
        (WebCore::AccessibilityListBox::create):
        (WebCore::AccessibilityListBox::addChildren):
        (WebCore::AccessibilityListBox::selectedChildren):
        (WebCore::AccessibilityListBox::visibleChildren):
        (WebCore::AccessibilityListBox::listBoxOptionAccessibilityObject):
        (WebCore::AccessibilityListBox::doAccessibilityHitTest):
        * page/AccessibilityListBox.h: Added.
        (WebCore::AccessibilityListBox::accessibilityShouldUseUniqueId):
        (WebCore::AccessibilityListBox::isListBox):
        (WebCore::AccessibilityListBox::canSetFocusAttribute):
        (WebCore::AccessibilityListBox::roleValue):
        (WebCore::AccessibilityListBox::accessibilityIsIgnored):
        * page/AccessibilityListBoxOption.cpp: Added.
        (WebCore::AccessibilityListBoxOption::AccessibilityListBoxOption):
        (WebCore::AccessibilityListBoxOption::~AccessibilityListBoxOption):
        (WebCore::AccessibilityListBoxOption::create):
        (WebCore::AccessibilityListBoxOption::isEnabled):
        (WebCore::AccessibilityListBoxOption::isSelected):
        (WebCore::AccessibilityListBoxOption::elementRect):
        (WebCore::AccessibilityListBoxOption::title):
        (WebCore::AccessibilityListBoxOption::size):
        (WebCore::AccessibilityListBoxOption::actionElement):
        (WebCore::AccessibilityListBoxOption::parentObject):
        (WebCore::AccessibilityListBoxOption::listBoxOptionParentNode):
        (WebCore::AccessibilityListBoxOption::listBoxOptionIndex):
        * page/AccessibilityListBoxOption.h: Added.
        (WebCore::AccessibilityListBoxOption::setHTMLElement):
        (WebCore::AccessibilityListBoxOption::roleValue):
        (WebCore::AccessibilityListBoxOption::accessibilityIsIgnored):
        (WebCore::AccessibilityListBoxOption::isListBoxOption):
        * page/AccessibilityObject.h:
        (WebCore::AccessibilityObject::isListBox):
        * page/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::doAccessibilityHitTest):
        * page/mac/AccessibilityObjectWrapper.mm:
        (-[AccessibilityObjectWrapper accessibilityAttributeNames]):
        (-[AccessibilityObjectWrapper accessibilityAttributeValue:]):
        * rendering/RenderListBox.cpp:
        (WebCore::RenderListBox::selectionChanged):
        * rendering/RenderListBox.h:

2008-05-06  Chris Fleizach  <cfleizach@apple.com>

        Reviewed by Beth Dakin.

         <rdar://problem/5455287> AXWebArea should include AXURL

        * page/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::url):
        * page/mac/AccessibilityObjectWrapper.mm:
        (-[AccessibilityObjectWrapper accessibilityAttributeNames]):

2008-05-06  Alice Liu  <alice.liu@apple.com>

        Rubber-stamped by Beth
        
        stab-in-the-dark attempt at fixing non-mac builds.

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

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

        Reviewed by Adam.

        Only use the toplevel application cache when loading subframes.

        * loader/MainResourceLoader.cpp:
        (WebCore::MainResourceLoader::load):

2008-05-06  Adam Barth  <abarth-webkit@adambarth.com>

        Reviewed by Sam Weinig.

        https://bugs.webkit.org/show_bug.cgi?id=18725
        Implement asynchronous postMessage.
        MessageEvent no longer bubbles as per r1237 in the HTML 5 working draft.

        Collin Jackson <collinj-webkit@collinjackson.com> also contributed to this patch.

        Test: http/tests/security/postMessage/delivery-order.html

        * dom/MessageEvent.cpp:
        (WebCore::MessageEvent::MessageEvent):
        * page/DOMWindow.cpp:
        (WebCore::PostMessageTimer::PostMessageTimer):
        (WebCore::PostMessageTimer::event):
        (WebCore::PostMessageTimer::targetOrigin):
        (WebCore::PostMessageTimer::fired):
        (WebCore::DOMWindow::postMessage):
        (WebCore::DOMWindow::postMessageTimerFired):
        * page/DOMWindow.h:
        * page/DOMWindow.idl:
        
2008-05-06  Anders Carlsson  <andersca@apple.com>

        Reviewed by Brady.

        Store cache to the database.

        * loader/appcache/ApplicationCache.cpp:
        (WebCore::ApplicationCache::addResource):
        If the cache has been saved to disk, save the resource as well.
        
        * loader/appcache/ApplicationCache.h:
        (WebCore::ApplicationCache::onlineWhitelist):
        New method which returns the online whitelist.

        (WebCore::ApplicationCache::setStorageId):
        (WebCore::ApplicationCache::storageId):
        Setter/getter for the application cache storage ID.

        * loader/appcache/ApplicationCacheGroup.cpp:
        (WebCore::ApplicationCacheGroup::checkIfLoadIsComplete):
        Save the cache/group to disk.
        
        * loader/appcache/ApplicationCacheGroup.h:
        (WebCore::ApplicationCacheGroup::setStorageID):
        (WebCore::ApplicationCacheGroup::storageID):
        Setter/getter for the application cache group storage ID.
        
        * loader/appcache/ApplicationCacheResource.cpp:
        (WebCore::ApplicationCacheResource::addType):
        We can't add a new type if the resource has been saved to disk.
        
        * loader/appcache/ApplicationCacheResource.h:
        (WebCore::ApplicationCacheResource::setStorageID):
        (WebCore::ApplicationCacheResource::storageID):
        Setter/getter for the application cache resource storage ID.

        * loader/appcache/ApplicationCacheStorage.cpp:
        * loader/appcache/ApplicationCacheStorage.cpp:
        (WebCore::ApplicationCacheStorage::executeSQLCommand):
        New method for executing SQL and logging any errors.
        
        (WebCore::ApplicationCacheStorage::openDatabase):
        Create new tables.
        
        (WebCore::ApplicationCacheStorage::executeStatement):
        New method for executing an SQL statement and logging any errors.
        
        (WebCore::ApplicationCacheStorage::store):
        New methods for storing a cache group, cache and cache resource to the store.

        (WebCore::ApplicationCacheStorage::storeNewestCache):
        New method which stores the newest cache and updates the newest cache field in the cache group.
        
        * loader/appcache/ApplicationCacheStorage.h:
        Add new methods.
        
        * platform/sql/SQLiteStatement.h:
        (WebCore::SQLiteStatement::query):
        Getter for the SQL query.

2008-05-06  Brady Eidson  <beidson@apple.com>

        Reviewed by Darin Adler

        Preparation for upcoming work making LocalStorage persistent.

        Writing persistent values for LocalStorage will take place on a background thread.
        Here is that background thread, as well as most of the hooks that will be utilized to
        make the whole song and dance work.

        The thread itself is very simple and MessageQueue based.  LocalStorageTasks are what 
        mark the work that needs to be done and come in 5 flavors:  Import and Sync a LocalStorage set,
        Import and Sync a LocalStorageArea, and terminate the thread.

        This patch accomplished 2 things:
        
        1 - Each PageGroup has its own LocalStorage set.  Upon its creation its LocalStorageThread is 
            created and started.

        2 - At application shutdown, each thread is synchronously terminated.

        What happens between steps 1 and 2 will come later.

        * GNUmakefile.am:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * WebCoreSources.bkl:

        * storage/LocalStorage.cpp: Add some threading ASSERTs to make it clear which thread each
          method is meant to be called from.
        (WebCore::LocalStorage::LocalStorage):
        (WebCore::LocalStorage::storageArea):
        (WebCore::LocalStorage::performImport): Placeholder for importing known origins and quotas
        (WebCore::LocalStorage::performSync): Placeholder for writing out updated origins and quotas
        (WebCore::LocalStorage::close): Synchronously terminate the thread.
        * storage/LocalStorage.h:

        * storage/LocalStorageArea.cpp: Add some threading ASSERTs to make it clear which thread each
          method is meant to be called from.
        (WebCore::LocalStorageArea::itemChanged):
        (WebCore::LocalStorageArea::itemRemoved):
        (WebCore::LocalStorageArea::areaCleared):
        (WebCore::LocalStorageArea::dispatchStorageEvent):
        (WebCore::LocalStorageArea::performImport): Placeholder for importing all items for this 
          LocalStorageArea to prime the page before the items are needed
        (WebCore::LocalStorageArea::performSync): Placeholder for writing out dirty items to disk
        * storage/LocalStorageArea.h:

        * storage/LocalStorageTask.cpp: Added.
        (WebCore::LocalStorageTask::LocalStorageTask):
        (WebCore::LocalStorageTask::performTask):
        * storage/LocalStorageTask.h: Added.
        (WebCore::LocalStorageTask::):
        (WebCore::LocalStorageTask::createImport):
        (WebCore::LocalStorageTask::createSync):
        (WebCore::LocalStorageTask::createTerminate):

        * storage/LocalStorageThread.cpp: Added.
        (WebCore::LocalStorageThread::create):
        (WebCore::LocalStorageThread::LocalStorageThread):
        (WebCore::LocalStorageThread::start):
        (WebCore::LocalStorageThread::localStorageThreadStart):
        (WebCore::LocalStorageThread::localStorageThread):
        (WebCore::LocalStorageThread::scheduleImport):
        (WebCore::LocalStorageThread::scheduleSync):
        (WebCore::LocalStorageThread::terminate): 
        (WebCore::LocalStorageThread::performTerminate):
        * storage/LocalStorageThread.h: Added.

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

        Reviewed by Darin.

        Add NPN_PopUpContextMenu.
        
        * bridge/npapi.h:
        * plugins/npfunctions.h:

2008-05-06  Alp Toker  <alp@nuanti.com>

        GTK+ build fix. Add file from r32911 to the build.

        * GNUmakefile.am:

2008-05-06  Gwenole Beauchesne  <gbeauchesne@splitted-desktop.org>

        Reviewed by Alp Toker.

        http://bugs.webkit.org/show_bug.cgi?id=18906
        [GTK] Fix varargs terminator in g_build_filename()

        * plugins/gtk/PluginDatabaseGtk.cpp:
        (WebCore::PluginDatabase::isPreferredPluginDirectory): Fix varargs
        terminator.

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

        - Forgot to update localized Strings from previous checkin.

        * English.lproj/localizedStrings.js:

2008-05-06  Chris Fleizach  <cfleizach@apple.com>

        Reviewed by Beth Dakin

        <rdar://problem/5408464> REGRESSION: Unable to use Voiceover on combo boxes (disneyjobs.com)
        <rdar://problem/5895634> AX: AccessibilityObjectWrapper is being leaked all over the place
        <rdar://problem/5893907> CrashTracer: [REGRESSION] 44 crashes in Safari at com.apple.WebCore: WebCore::AccessibilityObject::clearChildren + 9
        
        Initial prep work to support accessibility objects that do not have renderers. 

        * WebCore.xcodeproj/project.pbxproj:
        * page/AXObjectCache.cpp:
        (WebCore::AXObjectCache::~AXObjectCache):
        (WebCore::AXObjectCache::get):
        (WebCore::AXObjectCache::remove):
        (WebCore::AXObjectCache::getAXID):
        (WebCore::AXObjectCache::removeAXID):
        (WebCore::AXObjectCache::childrenChanged):
        * page/AXObjectCache.h:
        (WebCore::AXObjectCache::isIDinUse):
        * page/AccessibilityObject.cpp:
        (WebCore::AccessibilityObject::AccessibilityObject):
        (WebCore::AccessibilityObject::create):
        (WebCore::AccessibilityObject::detach):
        (WebCore::AccessibilityObject::firstChild):
        (WebCore::AccessibilityObject::lastChild):
        (WebCore::AccessibilityObject::previousSibling):
        (WebCore::AccessibilityObject::nextSibling):
        (WebCore::AccessibilityObject::parentObject):
        (WebCore::AccessibilityObject::layoutCount):
        (WebCore::AccessibilityObject::text):
        (WebCore::AccessibilityObject::helpText):
        (WebCore::AccessibilityObject::textUnderElement):
        (WebCore::AccessibilityObject::isARIAInput):
        (WebCore::AccessibilityObject::isARIAControl):
        (WebCore::AccessibilityObject::intValue):
        (WebCore::AccessibilityObject::stringValue):
        (WebCore::AccessibilityObject::title):
        (WebCore::AccessibilityObject::accessibilityDescription):
        (WebCore::AccessibilityObject::boundingBoxRect):
        (WebCore::AccessibilityObject::elementRect):
        (WebCore::AccessibilityObject::size):
        (WebCore::AccessibilityObject::linkedUIElement):
        (WebCore::AccessibilityObject::textLength):
        (WebCore::AccessibilityObject::ariaSelectedTextDOMRange):
        (WebCore::AccessibilityObject::selectedText):
        (WebCore::AccessibilityObject::accessKey):
        (WebCore::AccessibilityObject::selection):
        (WebCore::AccessibilityObject::selectedTextRange):
        (WebCore::AccessibilityObject::setSelectedTextRange):
        (WebCore::AccessibilityObject::url):
        (WebCore::AccessibilityObject::setFocused):
        (WebCore::AccessibilityObject::setValue):
        (WebCore::AccessibilityObject::axObjectCache):
        (WebCore::AccessibilityObject::getDocumentLinks):
        (WebCore::AccessibilityObject::widget):
        (WebCore::AccessibilityObject::widgetForAttachmentView):
        (WebCore::AccessibilityObject::anchorElement):
        (WebCore::AccessibilityObject::actionElement):
        (WebCore::AccessibilityObject::visiblePositionRange):
        (WebCore::AccessibilityObject::doAXTextMarkerRangeForLine):
        (WebCore::AccessibilityObject::visiblePositionForIndex):
        (WebCore::AccessibilityObject::indexForVisiblePosition):
        (WebCore::AccessibilityObject::doAXBoundsForTextMarkerRange):
        (WebCore::AccessibilityObject::doSetAXSelectedTextMarkerRange):
        (WebCore::AccessibilityObject::doAXTextMarkerForPosition):
        (WebCore::AccessibilityObject::textMarkerForIndex):
        (WebCore::AccessibilityObject::rangeForTextMarkerRange):
        (WebCore::AccessibilityObject::indexForTextMarker):
        (WebCore::AccessibilityObject::doAXRangeForLine):
        (WebCore::AccessibilityObject::doAXRangeForPosition):
        (WebCore::AccessibilityObject::doAXRangeForIndex):
        (WebCore::AccessibilityObject::doAXStyleRangeForIndex):
        (WebCore::AccessibilityObject::doAXStringForRange):
        (WebCore::AccessibilityObject::doAXBoundsForRange):
        (WebCore::AccessibilityObject::doAccessibilityHitTest):
        (WebCore::AccessibilityObject::focusedUIElement):
        (WebCore::AccessibilityObject::observableObject):
        (WebCore::AccessibilityObject::roleValue):
        (WebCore::AccessibilityObject::ariaRoleAttribute):
        (WebCore::AccessibilityObject::childrenChanged):
        (WebCore::AccessibilityObject::addChildren):
        (WebCore::AccessibilityObject::removeAXObjectID):
        * page/AccessibilityObject.h:
        (WebCore::PlainTextRange::PlainTextRange):
        (WebCore::PlainTextRange::isNull):
        (WebCore::AccessibilityObject::isAccessibilityRenderObject):
        (WebCore::AccessibilityObject::isAnchor):
        (WebCore::AccessibilityObject::isAttachment):
        (WebCore::AccessibilityObject::isHeading):
        (WebCore::AccessibilityObject::isLink):
        (WebCore::AccessibilityObject::isImage):
        (WebCore::AccessibilityObject::isNativeImage):
        (WebCore::AccessibilityObject::isImageButton):
        (WebCore::AccessibilityObject::isPasswordField):
        (WebCore::AccessibilityObject::isTextControl):
        (WebCore::AccessibilityObject::isNativeTextControl):
        (WebCore::AccessibilityObject::isWebArea):
        (WebCore::AccessibilityObject::isCheckboxOrRadio):
        (WebCore::AccessibilityObject::isChecked):
        (WebCore::AccessibilityObject::isEnabled):
        (WebCore::AccessibilityObject::isSelected):
        (WebCore::AccessibilityObject::isFocused):
        (WebCore::AccessibilityObject::isHovered):
        (WebCore::AccessibilityObject::isIndeterminate):
        (WebCore::AccessibilityObject::isLoaded):
        (WebCore::AccessibilityObject::isMultiSelect):
        (WebCore::AccessibilityObject::isOffScreen):
        (WebCore::AccessibilityObject::isPressed):
        (WebCore::AccessibilityObject::isReadOnly):
        (WebCore::AccessibilityObject::isVisited):
        (WebCore::AccessibilityObject::canSetFocusAttribute):
        (WebCore::AccessibilityObject::canSetTextRangeAttributes):
        (WebCore::AccessibilityObject::canSetValueAttribute):
        (WebCore::AccessibilityObject::hasIntValue):
        (WebCore::AccessibilityObject::accessibilityShouldUseUniqueId):
        (WebCore::AccessibilityObject::accessibilityIsIgnored):
        (WebCore::AccessibilityObject::children):
        (WebCore::AccessibilityObject::hasChildren):
        (WebCore::AccessibilityObject::setWrapper):
        (WebCore::AccessibilityObject::isDetached):
        * page/AccessibilityRenderObject.cpp: Added.
        (WebCore::AccessibilityRenderObject::AccessibilityRenderObject):
        (WebCore::AccessibilityRenderObject::~AccessibilityRenderObject):
        (WebCore::AccessibilityRenderObject::create):
        (WebCore::AccessibilityRenderObject::detach):
        (WebCore::AccessibilityRenderObject::firstChild):
        (WebCore::AccessibilityRenderObject::lastChild):
        (WebCore::AccessibilityRenderObject::previousSibling):
        (WebCore::AccessibilityRenderObject::nextSibling):
        (WebCore::AccessibilityRenderObject::parentObject):
        (WebCore::AccessibilityRenderObject::isWebArea):
        (WebCore::AccessibilityRenderObject::isImageButton):
        (WebCore::AccessibilityRenderObject::isAnchor):
        (WebCore::AccessibilityRenderObject::isNativeTextControl):
        (WebCore::AccessibilityRenderObject::isTextControl):
        (WebCore::AccessibilityRenderObject::isNativeImage):
        (WebCore::AccessibilityRenderObject::isImage):
        (WebCore::AccessibilityRenderObject::isAttachment):
        (WebCore::AccessibilityRenderObject::isPasswordField):
        (WebCore::AccessibilityRenderObject::isCheckboxOrRadio):
        (WebCore::AccessibilityRenderObject::isPressed):
        (WebCore::AccessibilityRenderObject::isIndeterminate):
        (WebCore::AccessibilityRenderObject::isChecked):
        (WebCore::AccessibilityRenderObject::isHovered):
        (WebCore::AccessibilityRenderObject::isMultiSelect):
        (WebCore::AccessibilityRenderObject::isReadOnly):
        (WebCore::AccessibilityRenderObject::isOffScreen):
        (WebCore::AccessibilityRenderObject::headingLevel):
        (WebCore::AccessibilityRenderObject::isHeading):
        (WebCore::AccessibilityRenderObject::isLink):
        (WebCore::AccessibilityRenderObject::anchorElement):
        (WebCore::AccessibilityRenderObject::actionElement):
        (WebCore::AccessibilityRenderObject::mouseButtonListener):
        (WebCore::AccessibilityRenderObject::helpText):
        (WebCore::AccessibilityRenderObject::textUnderElement):
        (WebCore::AccessibilityRenderObject::hasIntValue):
        (WebCore::AccessibilityRenderObject::intValue):
        (WebCore::AccessibilityRenderObject::stringValue):
        (WebCore::labelForElement):
        (WebCore::AccessibilityRenderObject::title):
        (WebCore::AccessibilityRenderObject::accessibilityDescription):
        (WebCore::AccessibilityRenderObject::boundingBoxRect):
        (WebCore::AccessibilityRenderObject::elementRect):
        (WebCore::AccessibilityRenderObject::size):
        (WebCore::AccessibilityRenderObject::linkedUIElement):
        (WebCore::AccessibilityRenderObject::accessibilityShouldUseUniqueId):
        (WebCore::AccessibilityRenderObject::accessibilityIsIgnored):
        (WebCore::AccessibilityRenderObject::isLoaded):
        (WebCore::AccessibilityRenderObject::layoutCount):
        (WebCore::AccessibilityRenderObject::text):
        (WebCore::AccessibilityRenderObject::textLength):
        (WebCore::AccessibilityRenderObject::ariaSelectedTextDOMRange):
        (WebCore::AccessibilityRenderObject::selectedText):
        (WebCore::AccessibilityRenderObject::accessKey):
        (WebCore::AccessibilityRenderObject::selection):
        (WebCore::AccessibilityRenderObject::selectedTextRange):
        (WebCore::AccessibilityRenderObject::setSelectedTextRange):
        (WebCore::AccessibilityRenderObject::url):
        (WebCore::AccessibilityRenderObject::isVisited):
        (WebCore::AccessibilityRenderObject::isSelected):
        (WebCore::AccessibilityRenderObject::isFocused):
        (WebCore::AccessibilityRenderObject::setFocused):
        (WebCore::AccessibilityRenderObject::setValue):
        (WebCore::AccessibilityRenderObject::isEnabled):
        (WebCore::AccessibilityRenderObject::topRenderer):
        (WebCore::AccessibilityRenderObject::widget):
        (WebCore::AccessibilityRenderObject::axObjectCache):
        (WebCore::AccessibilityRenderObject::getDocumentLinks):
        (WebCore::AccessibilityRenderObject::widgetForAttachmentView):
        (WebCore::AccessibilityRenderObject::frameViewIfRenderView):
        (WebCore::AccessibilityRenderObject::visiblePositionRange):
        (WebCore::AccessibilityRenderObject::doAXTextMarkerRangeForLine):
        (WebCore::AccessibilityRenderObject::visiblePositionForIndex):
        (WebCore::AccessibilityRenderObject::indexForVisiblePosition):
        (WebCore::AccessibilityRenderObject::doAXBoundsForTextMarkerRange):
        (WebCore::AccessibilityRenderObject::doSetAXSelectedTextMarkerRange):
        (WebCore::AccessibilityRenderObject::doAXTextMarkerForPosition):
        (WebCore::AccessibilityRenderObject::textMarkerForIndex):
        (WebCore::AccessibilityRenderObject::indexForTextMarker):
        (WebCore::AccessibilityRenderObject::doAXRangeForLine):
        (WebCore::AccessibilityRenderObject::doAXRangeForIndex):
        (WebCore::AccessibilityRenderObject::doAXStringForRange):
        (WebCore::AccessibilityRenderObject::doAXBoundsForRange):
        (WebCore::AccessibilityRenderObject::doAccessibilityHitTest):
        (WebCore::AccessibilityRenderObject::focusedUIElement):
        (WebCore::AccessibilityRenderObject::observableObject):
        (WebCore::createARIARoleMap):
        (WebCore::RoleEntry::):
        (WebCore::ariaRoleToWebCoreRole):
        (WebCore::AccessibilityRenderObject::ariaRoleAttribute):
        (WebCore::AccessibilityRenderObject::roleValue):
        (WebCore::AccessibilityRenderObject::canSetFocusAttribute):
        (WebCore::AccessibilityRenderObject::canSetValueAttribute):
        (WebCore::AccessibilityRenderObject::canSetTextRangeAttributes):
        (WebCore::AccessibilityRenderObject::childrenChanged):
        (WebCore::AccessibilityRenderObject::children):
        (WebCore::AccessibilityRenderObject::addChildren):
        (WebCore::AccessibilityRenderObject::removeAXObjectID):
        (WebCore::AccessibilityRenderObject::actionVerb):
        * page/AccessibilityRenderObject.h: Added.
        (WebCore::AccessibilityRenderObject::isAccessibilityRenderObject):
        (WebCore::AccessibilityRenderObject::areaElement):
        (WebCore::AccessibilityRenderObject::setRenderer):
        (WebCore::AccessibilityRenderObject::renderer):
        (WebCore::AccessibilityRenderObject::setRenderObject):
        (WebCore::AccessibilityRenderObject::isDetached):
        * page/mac/AXObjectCacheMac.mm:
        (WebCore::AXObjectCache::detachWrapper):
        (WebCore::AXObjectCache::selectedChildrenChanged):
        (WebCore::AXObjectCache::postNotification):
        * page/mac/AccessibilityObjectWrapper.mm:
        (textMarkerForVisiblePosition):
        (CreateCGColorIfDifferent):
        (AXAttributeStringSetHeadingLevel):
        (AXLinkElementForNode):
        (AXAttributeStringSetElement):
        (AXAttributedStringAppendText):
        (-[AccessibilityObjectWrapper accessibilityAttributeNames]):
        (-[AccessibilityObjectWrapper documentFrameView:]):
        (-[AccessibilityObjectWrapper position]):
        (RoleEntry::):
        (-[AccessibilityObjectWrapper roleDescription]):
        (-[AccessibilityObjectWrapper accessibilityAttributeValue:]):
        (-[AccessibilityObjectWrapper accessibilityIsAttributeSettable:]):
        (-[AccessibilityObjectWrapper accessibilityParameterizedAttributeNames]):
        (-[AccessibilityObjectWrapper accessibilitySetValue:forAttribute:]):
        (-[AccessibilityObjectWrapper _accessibilityParentForSubview:]):
        (-[AccessibilityObjectWrapper doAXAttributedStringForRange:]):
        (-[AccessibilityObjectWrapper accessibilityAttributeValue:forParameter:]):

2008-05-06  Jonathan Haas  <myrdred@gmail.com>

        Reviewed by Rob Buis.

        https://bugs.webkit.org/show_bug.cgi?id=18859\
        Prevented SVGRootInlineBox from static_casting a
        node to a class it doesn't inherit
        
        * rendering/SVGRootInlineBox.cpp:
        (WebCore::SVGRootInlineBox::buildTextChunks):

2008-05-06  Brady Eidson  <beidson@apple.com>

        Reviewed by Darin Adler

        Preparation for upcoming work making LocalStorage persistent.

        When the application terminates, all pending local storage writes need to be
        sync'ed out to disk.
        This works n combination with platform specific code in WebKit that calls it.

        * WebCore.base.exp:

        * page/PageGroup.cpp:
        (WebCore::PageGroup::closeLocalStorage): Close all open LocalStorage objects
        * page/PageGroup.h:

        * storage/LocalStorage.cpp:
        (WebCore::LocalStorage::close): Placeholder for what will sync and terminate the
          local storage thread in the future.
        * storage/LocalStorage.h:

2008-05-06  Brady Eidson  <beidson@apple.com>

        Rubberstamped by David Kilzer

        * WebCore.base.exp:  Sort this mess!

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

        Reviewed by Dan Bernstein.

        Fix 60 crashes seen on the buildbots that were misreported as hangs.

        * dom/Document.cpp:
        (WebCore::Document::detachNodeIterator): Null-check page() before dereferencing it.
        (WebCore::Document::nodeWillBeRemoved): Ditto.
        (WebCore::Document::textInserted): Ditto.
        (WebCore::Document::textNodesMerged): Ditto.
        (WebCore::Document::textRemoved): Ditto.

2008-05-05  Brady Eidson  <beidson@apple.com>

        Reviewed by Mitz Pettel RTL

        Preparation for upcoming work making LocalStorage persistent.

        The other half of the StorageMap::importItem() addition.

        * storage/StorageArea.cpp:
        (WebCore::StorageArea::importItem):
        * storage/StorageArea.h:

2008-05-05  Brady Eidson  <beidson@apple.com>

        Reviewed by Mitz Pettel RTL

        Preparation for upcoming work making LocalStorage persistent.

        - Create the LocalStorage object for a PageGroup the moment the first Page is added to it
          The Settings of the first Page define what persistent path the LocalStorage will use
        - Add a Frame argument for the LocalStorageArea request - this will allow a client object
          to be queried before the LocalStorageArea is established

        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::localStorage):

        * page/PageGroup.cpp:
        (WebCore::PageGroup::addPage):
        (WebCore::PageGroup::localStorage):

        * storage/LocalStorage.cpp:
        (WebCore::LocalStorage::LocalStorage): Take the path as a constructor argument.  Deep copy
          the path as it will be used from another thread.
        (WebCore::LocalStorage::storageArea):
        * storage/LocalStorage.h:
        (WebCore::LocalStorage::create):

2008-05-05  Brady Eidson  <beidson@apple.com>

        Reviewed by Mitz Pettel RTL

        Preparation for upcoming work making LocalStorage persistent.

        StorageMaps normally have copy-on-write semantics to help support SessionStorage.
        For LocalStorage, we never want this behavior.  When we forcefully import items into 
        a StorageMap from the LocalStorage background thread, this new import method will be used.

        * storage/StorageMap.cpp:
        (WebCore::StorageMap::importItem): Add a deep-copy of the item to the map without worrying
          about copy-on-write.
        * storage/StorageMap.h:

2008-05-05  Kevin McCullough  <kmccullough@apple.com>

        Reviewed by Tim.

        -<rdar://problem/5770054> JavaScript profiler (10928)
        -Begininings of a UI for the Profiler in the WebInspector.

        * English.lproj/InspectorLocalizedStrings.js: Add new strings to be
        localized.
        * page/inspector/DatabasesPanel.js: Changed the name of the Databae's
        results table to be more generic as it is now also used by the profiler.
        * page/inspector/Images/glossySelected.png: Added.
        * page/inspector/Images/profilesIcon.png: Added.
        * page/inspector/Images/treeUpTriangleBlack.png: Added.
        * page/inspector/Images/treeUpTriangleWhite.png: Added.
        * page/inspector/ProfileView.js: Added. Sets up the header of the table.
        * page/inspector/ProfilesPanel.js: Added.
        * page/inspector/ProfilesPanel.js: Added. Sets up the containers of the
        profiler's content.
        * page/inspector/inspector.css: Change database-result-table to be more
        generic as well as add the styles needed by the profiler.
        * page/inspector/inspector.html: Add profiler support.

2008-05-05  Brady Eidson  <beidson@apple.com>

        Change by Darin, reviewed by Brady

        Small efficiency improvement Darin just spotted

        * storage/StorageMap.cpp:
        (WebCore::StorageMap::setItem):

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

        Reviewed by Anders.

        Fix https://bugs.webkit.org/show_bug.cgi?id=18899
        Bug 18899: REGRESSION (r32871): Non-Safari crash in WTF::HashTable on startup

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

2008-05-05  Brady Eidson  <beidson@apple.com>

        Reviewed by Sam Weinig

        Fix a bug in StorageMap iterator tracking where the iterator was not successfully
        invalidated at an appropriate time.

        * storage/StorageMap.cpp:
        (WebCore::StorageMap::setItem): ALWAYS invalidate it here

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

        Reviewed by Darin.

        <rdar://problem/5865171> REGRESSION: Creating a new quote places caret at beginning of quote instead of the end
        
        Disable Range mutation on document modifications in Tiger and Leopard Mail,
        since they do their own mutation which interferes with ours.

        * WebCore.base.exp:
        * dom/Document.cpp:
        (WebCore::Document::nodeChildrenChanged):
        (WebCore::Document::nodeWillBeRemoved):
        (WebCore::Document::textInserted):
        (WebCore::Document::textRemoved):
        (WebCore::Document::textNodesMerged):
        (WebCore::Document::textNodeSplit):
        * page/Settings.cpp:
        (WebCore::Settings::Settings):
        (WebCore::Settings::disableRangeMutationForOldAppleMail):
        * page/Settings.h:
        (WebCore::Settings::rangeMutationDisabledForOldAppleMail):

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

        Reviewed by Tim Hatcher.

        Make the Inspector's localizable strings file match the format used by Dashboard widgets.

        * English.lproj/InspectorLocalizedStrings.js: Removed.
        * English.lproj/localizedStrings.js: Added.
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * page/inspector/inspector.js:

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:
        * rendering/RenderTheme.cpp:
        (WebCore::RenderTheme::adjustStyle):
        (WebCore::RenderTheme::paint):
        (WebCore::RenderTheme::paintBorderOnly):
        (WebCore::RenderTheme::paintDecorations):
        (WebCore::RenderTheme::isControlStyled):
        (WebCore::RenderTheme::isDefault):
        * rendering/RenderTheme.h:
        * rendering/RenderThemeSafari.cpp:
        (WebCore::RenderThemeSafari::determineState):
        (WebCore::RenderThemeSafari::adjustRepaintRect):
        (WebCore::RenderThemeSafari::adjustButtonStyle):
        * rendering/RenderThemeWin.cpp:
        (WebCore::RenderThemeWin::supportsFocus):

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

        Reviewed by Darin.

        https://bugs.webkit.org/show_bug.cgi?id=11947
        nbsps should be converted to entities in innerHTML

        https://bugs.webkit.org/show_bug.cgi?id=18769
        replacing &nbsp; with spaces using regexp creates inconsistent result

        Tests: fast/dom/innerHTML-nbsp.html
               fast/dom/innerHTML-escaping-attribute.html

        * editing/markup.cpp:
        (WebCore::appendAttributeValue):
        (WebCore::escapeContentText):
        (WebCore::appendEscapedContent):
        Added U+00a0/nbsp to the list of characters to escape.

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

        Fix for https://bugs.webkit.org/show_bug.cgi?id=18821.  Fix some bugs in both get/PutImageData of <canvas>.

        Reviewed by Eric

        New tests added in fast/canvas/

        * platform/graphics/cg/ImageBufferCG.cpp:
        (WebCore::ImageBuffer::getImageData):
        (WebCore::ImageBuffer::putImageData):

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

        Reviewed by Dave Hyatt.

        - fix https://bugs.webkit.org/show_bug.cgi?id=18809
          Forms with block level generated content and absolutely positioned labels break inline layout (fixed on reflow)

        Test: fast/block/basic/adding-near-anonymous-block.html

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::addChildToFlow): When adding a floating or
        positioned object, if it follows an anonymous block, put it
        inside the anonymous block. When adding an inline, check if it comes
        after an anonymous block and put it in the anonymous block.

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

        Reviewed by Darin.

        Speculative fix for <rdar://problem/5906790> 
        Crash in Loader::servePendingRequests() due to hash table being modified during iteration
        
        I don't know how to reproduce this. It would require the load to fail (or succeed)
        synchronously, something that should not usually happen.

        * loader/loader.cpp:
        (WebCore::Loader::Loader):
        (WebCore::Loader::load):
        (WebCore::Loader::servePendingRequests):
        (WebCore::Loader::cancelRequests):
        (WebCore::Loader::Host::Host):
        * loader/loader.h:
        (WebCore::Loader::Host::name):

2008-05-05  Ariya Hidayat  <ariya.hidayat@trolltech.com>

        Reviewed by Simon.

        Disable SVG As Image support in the Qt port again, as it
        requires more work. Right now the chrome client is
        assumed to be a ChromeClientQt, which the SVG Image support
        changes.

        * WebCore.pro:

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

        Reviewed by Mitz.

        Fix <rdar://problem/5840475>
        CrashTracer: [USER] 2 crashes in Safari at com.apple.WebCore: WebCore::RenderBlock::insertPositionedObject
        
        Non-block objects can have transforms so containingBlock() could end up returning null. 
        RenderObject::container() needs to match.

        Test: fast/transforms/container-transform-crash.html

        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::containingBlock):
        (WebCore::RenderObject::container):

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

        Roll out r32851.  It broke tiger builds.

        * bindings/objc/DOMUtility.mm:
        (KJS::createDOMWrapper):
        (WebCore::createDOMWrapper):

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

        Reviewed by Sam Weinig.

        - fix https://bugs.webkit.org/show_bug.cgi?id=18879
          <rdar://problem/5909481> Reproducible crash when removing a gradient

        Test: fast/gradients/crash-on-remove.html

        * css/CSSImageGeneratorValue.cpp:
        (WebCore::CSSImageGeneratorValue::CSSImageGeneratorValue):
        (WebCore::CSSImageGeneratorValue::addClient): Added a call to ref() the
        value.
        (WebCore::CSSImageGeneratorValue::removeClient): Added code to deref()
        the value.

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

        Reviewed by Mark Rowe.

        Move createDOMWrapper(JSObject* object) out of the KJS namespace and into
        the WebCore namespace now that the required compilers don't freak out about
        this anymore.

        * bindings/objc/DOMUtility.mm:
        (WebCore::createDOMWrapper):

2008-05-03  Rob Buis  <buis@kde.org>

        Reviewed by Sam.

        https://bugs.webkit.org/show_bug.cgi?id=18652
        onchange events don't seem to fire for input[type=range] controls.

        Fire changeEvent when clicking the slider outside the current
        thumb position.

        * rendering/RenderSlider.cpp:
        (WebCore::RenderSlider::setValueForPosition):

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

        Reviewed by Mark Rowe.

        Remove unused enums from JSDOMWindowBase.

        * bindings/js/JSDOMWindowBase.h:
        (WebCore::JSDOMWindowBase::):

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

        Real build fix.

        * WebCore.xcodeproj/project.pbxproj:

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

        Build fix.

        * bindings/js/kjs_events.cpp:
        (WebCore::JSAbstractEventListener::handleEvent):

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

        Rubber-stamped by Geoffrey Garen.

        Rename JSDOMWindowWrapper to JSDOMWindowShell.

2008-05-01  Rob Buis  <buis@kde.org>

        Reviewed by Eric.

        https://bugs.webkit.org/show_bug.cgi?id=18568
        background: currentColor fails

        Implement currentColor from CSS3 color module.

        Tests: fast/css/background-currentcolor.html

        * css/CSSParser.cpp:
        (WebCore::CSSParser::parseValue):
        (WebCore::CSSParser::parseBackgroundColor):
        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::getColorFromPrimitiveValue):
        * css/CSSValueKeywords.in:
        * css/SVGCSSValueKeywords.in:

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

        Reviewed by Mark.

        Turns out calling locationInWindow on keyboard events will not throw an exception,
        but the point returned is completely bogus, so remove coordinates from the keyboard event struct.
        
        * bridge/npapi.h:
        (_NPCocoaEvent::):

2008-05-02  Benjamin Otte  <otte@gnome.org>

        Reviewed by Alp Toker.

        http://bugs.webkit.org/show_bug.cgi?id=18856
        [GTK] variable initialization missing

        Not initializing the m_needsXEmbed variable could have very funny
        results. Most often those results would be crashes.

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

2008-05-02  Jan Michael Alonzo  <jmalonzo@unpluggable.com>

        Reviewed by Eric.

        https://bugs.webkit.org/show_bug.cgi?id=18811
        Enable dashboard and offline web apps in autotools

        * GNUmakefile.am:

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

        Reviewed by Sam.

        Name the event union so it will work in plain C.

        * bridge/npapi.h:
        (_NPCocoaEvent::):

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

        Reviewed by John Sullivan.

        - render text shadows with zero offset, as the shadow can be seen behind
          the text if the text is translucent

        Test: fast/text/shadow-no-blur.html

        * platform/graphics/mac/FontMac.mm:
        (WebCore::Font::drawComplexText): Removed the isEmpty() condition on the
        shadow offset. Since isEmpty() is also true for sizes that have one or
        more non-positive components, this also ensures that subpixel
        antialiasing of the text is maintained with shadows in all directions.
        (WebCore::Font::drawGlyphs): Ditto.
        * platform/graphics/win/FontCGWin.cpp:
        (WebCore::Font::drawGlyphs): Ditto.

2008-05-02  Ariya Hidayat  <ariya.hidayat@trolltech.com>

        Reviewed by Simon.

        Build the Qt port with SVG Use and As Image support.

        * WebCore.pro:

2008-05-02  Ariya Hidayat  <ariya.hidayat@trolltech.com>

        Reviewed by Simon.

        Fixed potential crash on SVG animation (added more checks to the assert).

        * svg/SVGUseElement.cpp:
        (WebCore::SVGUseElement::associateInstancesWithShadowTreeElements):

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

        Rubber-stamped by John Sullivan.

        Fix a debug-only crash in layout tests.

        * loader/CachedResource.cpp:
        (WebCore::CachedResource::~CachedResource): Don't call resourceForURL() for null URLs.

2008-05-02  Simon Hausmann  <shausman@trolltech.com>

        Fix the Qt build on Windows when Phonon is enabled for Audio/Video support

        * WebCore.pro: Don't use QT += phonon as it prepends the phonon
        includes to the include paths. Instead add it manually and make sure
        phonon comes last, to avoid the conflict of phonon's path.h with
        WebCore's Path.h on case-insensitive filesystems.

2008-05-02  Simon Hausmann  <hausmann@webkit.org>

        Fix the Qt build. Add ExecState where necessary.

        * bridge/qt/qt_class.cpp:
        (KJS::Bindings::QtClass::fallbackObject):
        * bridge/qt/qt_instance.cpp:
        (KJS::Bindings::QtRuntimeObjectImp::construct):
        (KJS::Bindings::QtInstance::getRuntimeObject):
        (KJS::Bindings::QtInstance::invokeDefaultMethod):
        (KJS::Bindings::QtInstance::defaultValue):
        (KJS::Bindings::QtInstance::stringValue):
        * bridge/qt/qt_instance.h:
        (KJS::Bindings::QtInstance::getObject):
        * bridge/qt/qt_runtime.cpp:
        (KJS::Bindings::convertValueToQVariant):
        (KJS::Bindings::convertQVariantToValue):
        (KJS::Bindings::QtRuntimeMetaMethod::lengthGetter):
        (KJS::Bindings::QtRuntimeMetaMethod::connectGetter):
        (KJS::Bindings::QtRuntimeMetaMethod::disconnectGetter):
        (KJS::Bindings::QtRuntimeConnectionMethod::lengthGetter):
        (KJS::Bindings::QtConnectionObject::execute):
        * bridge/runtime.cpp:
        (KJS::Bindings::Instance::createRuntimeObject):

2008-05-02  Simon Hausmann  <shausman@trolltech.com>

        Fix the Qt/Win build.

        * WebCore.pro:
        * platform/qt/TemporaryLinkStubs.cpp:
        (PluginDatabase::getPluginPathsInDirectories):
        (PluginDatabase::defaultPluginDirectories):
        (PluginDatabase::isPreferredPluginDirectory):
        (PluginView::setNPWindowRect):
        (PluginView::userAgent):
        (PluginView::invalidateRect):
        (PluginView::invalidateRegion):
        (PluginView::forceRedraw):
        (PluginView::setFocus):
        (PluginView::show):
        (PluginView::hide):
        (PluginView::paint):
        (PluginView::setParent):
        (PluginView::attachToWindow):
        (PluginView::detachFromWindow):
        (PluginView::updateWindow):
        (PluginView::handleKeyboardEvent):
        (PluginView::handleMouseEvent):
        (PluginView::handlePostReadFile):
        (PluginView::getValue):
        * plugins/qt/PluginPackageQt.cpp:
        (WebCore::PluginPackage::load):

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

        Reviewed by Geoffrey Garen.

        https://bugs.webkit.org/show_bug.cgi?id=18826
        Make JavaScript heap per-thread

        This is mostly adaptation for JSC changes. The most prominent one is that JSObject
        allocator now takes ExecState, e.g. "new (exec) JSXMLHttpRequestConstructor(...)". It is
        OK to pass either the current or global one, whichever is faster to get hold of, as both
        have the same reference to a per-thread JS heap.

        * bindings/scripts/CodeGeneratorJS.pm: Pass ExecState to functions that now need it.
        JSDOMWindow, JSDOMWindowPrototype and JSDOMWindowWrapper are special, because they are
        constructed before any ExecState comes into existence, so they use Heap::threadHeap()
        directly for allocation.

        * bindings/js/JSDOMWindowWrapper.cpp:
        (WebCore::JSDOMWindowWrapper::operator new):
        * bindings/js/JSDOMWindowWrapper.h:
        Added a custom operator new to use per-thread heap when there's no ExecState around.

        * bindings/js/JSAudioConstructor.cpp:
        (WebCore::JSAudioConstructor::JSAudioConstructor):
        * bindings/js/JSCSSRuleCustom.cpp:
        (WebCore::toJS):
        * bindings/js/JSCSSStyleDeclarationCustom.cpp:
        (WebCore::JSCSSStyleDeclaration::nameGetter):
        * bindings/js/JSCSSValueCustom.cpp:
        (WebCore::toJS):
        * bindings/js/JSCanvasPixelArrayCustom.cpp:
        (WebCore::JSCanvasPixelArray::indexGetter):
        (WebCore::toJS):
        * bindings/js/JSCanvasRenderingContext2DCustom.cpp:
        (WebCore::toJS):
        * bindings/js/JSClipboardCustom.cpp:
        (WebCore::JSClipboard::types):
        (WebCore::JSClipboard::getData):
        * bindings/js/JSCustomXPathNSResolver.cpp:
        (WebCore::JSCustomXPathNSResolver::lookupNamespaceURI):
        * bindings/js/JSDOMApplicationCacheCustom.cpp:
        (WebCore::JSDOMApplicationCache::addEventListener):
        (WebCore::JSDOMApplicationCache::removeEventListener):
        (WebCore::JSDOMApplicationCache::setOnchecking):
        (WebCore::JSDOMApplicationCache::setOnerror):
        (WebCore::JSDOMApplicationCache::setOnnoupdate):
        (WebCore::JSDOMApplicationCache::setOndownloading):
        (WebCore::JSDOMApplicationCache::setOnprogress):
        (WebCore::JSDOMApplicationCache::setOnupdateready):
        (WebCore::JSDOMApplicationCache::setOncached):
        * bindings/js/JSDOMWindowBase.cpp:
        (WebCore::JSDOMWindowBase::JSDOMWindowBase):
        (WebCore::JSDOMWindowBase::getValueProperty):
        (WebCore::JSDOMWindowBase::setListener):
        (WebCore::JSDOMWindowBase::findOrCreateJSEventListener):
        (WebCore::JSDOMWindowBase::findJSUnprotectedEventListener):
        (WebCore::JSDOMWindowBase::findOrCreateJSUnprotectedEventListener):
        (WebCore::windowProtoFuncAToB):
        (WebCore::windowProtoFuncBToA):
        (WebCore::windowProtoFuncSetTimeout):
        (WebCore::windowProtoFuncSetInterval):
        (WebCore::windowProtoFuncAddEventListener):
        * bindings/js/JSDOMWindowBase.h:
        * bindings/js/JSDocumentCustom.cpp:
        (WebCore::toJS):
        * bindings/js/JSEventCustom.cpp:
        (WebCore::toJS):
        * bindings/js/JSEventTargetBase.cpp:
        (WebCore::jsEventTargetAddEventListener):
        * bindings/js/JSEventTargetBase.h:
        (WebCore::JSEventTargetPrototype::self):
        * bindings/js/JSEventTargetNode.cpp:
        (WebCore::JSEventTargetNode::setListener):
        * 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::getValueProperty):
        * bindings/js/JSHTMLOptionElementConstructor.cpp:
        (WebCore::JSHTMLOptionElementConstructor::JSHTMLOptionElementConstructor):
        * bindings/js/JSHTMLOptionsCollectionCustom.cpp:
        (WebCore::JSHTMLOptionsCollection::length):
        * bindings/js/JSInspectedObjectWrapper.cpp:
        (WebCore::JSInspectedObjectWrapper::wrap):
        * bindings/js/JSInspectorCallbackWrapper.cpp:
        (WebCore::JSInspectorCallbackWrapper::wrap):
        * bindings/js/JSLocationCustom.cpp:
        (WebCore::JSLocation::toString):
        * bindings/js/JSNamedNodesCollection.cpp:
        (WebCore::JSNamedNodesCollection::lengthGetter):
        * bindings/js/JSNavigatorCustom.cpp:
        (WebCore::JSNavigator::appVersion):
        * bindings/js/JSNodeCustom.cpp:
        (WebCore::toJS):
        * bindings/js/JSNodeFilterCustom.cpp:
        (WebCore::JSNodeFilter::acceptNode):
        * bindings/js/JSRGBColor.cpp:
        (WebCore::getJSRGBColor):
        * bindings/js/JSSQLResultSetRowListCustom.cpp:
        (WebCore::JSSQLResultSetRowList::item):
        * bindings/js/JSSVGElementWrapperFactory.cpp:
        (WebCore::createJSSVGWrapper):
        * bindings/js/JSSVGLazyEventListener.cpp:
        (WebCore::JSSVGLazyEventListener::eventParameterName):
        * bindings/js/JSStorageCustom.cpp:
        (WebCore::JSStorage::nameGetter):
        * bindings/js/JSStyleSheetCustom.cpp:
        (WebCore::toJS):
        * bindings/js/JSXMLHttpRequestConstructor.cpp:
        (WebCore::JSXMLHttpRequestConstructor::construct):
        * bindings/js/JSXMLHttpRequestCustom.cpp:
        (WebCore::JSXMLHttpRequest::setOnreadystatechange):
        (WebCore::JSXMLHttpRequest::setOnload):
        (WebCore::JSXMLHttpRequest::setOnprogress):
        (WebCore::JSXMLHttpRequest::getResponseHeader):
        (WebCore::JSXMLHttpRequest::addEventListener):
        (WebCore::JSXMLHttpRequest::removeEventListener):
        * bindings/js/JSXSLTProcessor.cpp:
        (WebCore::jsXSLTProcessorPrototypeFunctionGetParameter):
        (WebCore::JSXSLTProcessorConstructor::construct):
        * bindings/js/kjs_binding.cpp:
        (WebCore::jsStringOrNull):
        (WebCore::jsOwnedStringOrNull):
        (WebCore::jsStringOrUndefined):
        (WebCore::jsStringOrFalse):
        (WebCore::nonCachingStaticFunctionGetter):
        (WebCore::objectToStringFunctionGetter):
        * bindings/js/kjs_binding.h:
        (WebCore::DOMObject::DOMObject):
        (WebCore::cacheDOMObject):
        (WebCore::cacheSVGDOMObject):
        * bindings/js/kjs_events.cpp:
        (WebCore::JSLazyEventListener::eventParameterName):
        (WebCore::JSLazyEventListener::parseCode):
        * bindings/js/kjs_html.cpp:
        (WebCore::getRuntimeObject):
        * bridge/c/c_instance.cpp:
        (KJS::Bindings::CInstance::defaultValue):
        (KJS::Bindings::CInstance::stringValue):
        (KJS::Bindings::CInstance::numberValue):
        (KJS::Bindings::CInstance::valueOf):
        * bridge/c/c_instance.h:
        * bridge/c/c_utility.cpp:
        (KJS::Bindings::convertNPVariantToValue):
        * bridge/jni/jni_instance.cpp:
        (JavaInstance::stringValue):
        (JavaInstance::numberValue):
        (JavaInstance::invokeMethod):
        (JavaInstance::defaultValue):
        (JavaInstance::valueOf):
        * bridge/jni/jni_instance.h:
        * bridge/jni/jni_jsobject.h:
        * bridge/jni/jni_jsobject.mm:
        (JavaJSObject::call):
        (JavaJSObject::setMember):
        (JavaJSObject::setSlot):
        (JavaJSObject::convertJObjectToValue):
        (JavaJSObject::getListFromJArray):
        * bridge/jni/jni_objc.mm:
        (KJS::Bindings::dispatchJNICall):
        * bridge/jni/jni_runtime.cpp:
        (JavaArray::convertJObjectToArray):
        (JavaField::dispatchValueFromInstance):
        (JavaField::valueFromInstance):
        (JavaField::dispatchSetValueToInstance):
        (JavaArray::valueAt):
        * bridge/jni/jni_utility.h:
        * bridge/objc/objc_class.mm:
        (KJS::Bindings::ObjcClass::fallbackObject):
        * bridge/objc/objc_instance.h:
        * bridge/objc/objc_instance.mm:
        (ObjcInstance::defaultValue):
        (ObjcInstance::stringValue):
        (ObjcInstance::numberValue):
        (ObjcInstance::valueOf):
        * bridge/objc/objc_utility.h:
        * bridge/objc/objc_utility.mm:
        (KJS::Bindings::convertNSStringToString):
        (KJS::Bindings::convertObjcValueToValue):
        * bridge/runtime.cpp:
        (KJS::Bindings::Instance::createRuntimeObject):
        * bridge/runtime.h:
        (KJS::Bindings::Instance::valueOf):
        * bridge/runtime_array.cpp:
        (RuntimeArray::lengthGetter):
        * bridge/runtime_method.cpp:
        (RuntimeMethod::lengthGetter):
        * bridge/runtime_object.cpp:
        (RuntimeObjectImp::RuntimeObjectImp):
        (RuntimeObjectImp::methodGetter):
        (RuntimeObjectImp::defaultValue):
        * xml/XMLHttpRequest.cpp:
        (WebCore::XMLHttpRequest::dropProtection):
        * bindings/js/GCController.cpp:
        (WebCore::GCController::gcTimerFired):
        (WebCore::GCController::garbageCollectNow):
        Adapted to JSC changes. Pass ExecState to functions that now need it. Removed
        collectOnMainThreadOnly, as this is the only way to collect now. Replaced calls to static
        Collector methods with calls to per-thread Heap ones.

2008-05-02  Ariya Hidayat  <ariya.hidayat@trolltech.com>

        Reviewed by Simon.

        Build the Qt port with SVG Animation support.

        * WebCore.pro:

2008-05-02  Simon Hausmann  <hausmann@webkit.org>

        Build fix for Qt/Gtk. Don't declare NP_InitializeFuncPtr twice
        with different signatures.

        * plugins/npfunctions.h:

2008-05-01  Robin Dunn  <robin@alldunn.com>

        Reviewed by Kevin Ollivier.

        Explicitly set the pen style in wx port to keep pen style changes from 
        affecting URL underline or text field drawing.
        
        https://bugs.webkit.org/show_bug.cgi?id=18775

        * platform/graphics/wx/GraphicsContextWx.cpp:
        (WebCore::GraphicsContext::fillRect):
        (WebCore::GraphicsContext::drawLineForText):
        * platform/wx/RenderThemeWx.cpp:
        (WebCore::RenderThemeWx::paintTextField):

2008-05-01  Robin Dunn  <robin@alldunn.com>

        Reviewed by Kevin Ollivier.

        Implement popup menu support for wx port.
        
        https://bugs.webkit.org/show_bug.cgi?id=18776

        * platform/PopupMenu.h:
        * platform/wx/PopupMenuWx.cpp: Added.
        (WebCore::PopupMenu::PopupMenu):
        (WebCore::PopupMenu::~PopupMenu):
        (WebCore::PopupMenu::show):
        (WebCore::PopupMenu::OnMenuItemSelected):
        (WebCore::PopupMenu::hide):
        (WebCore::PopupMenu::updateFromElement):
        (WebCore::PopupMenu::itemWritingDirectionIsNatural):
        * platform/wx/TemporaryLinkStubs.cpp:
        * webcore-wx.bkl:

2008-05-01  Kevin Ollivier  <kevino@theolliviers.com>

        Reviewed by Eric Seidel.

        Make sure we properly set the button for all mouse events,
        not just mouse down, set the click count to 0
        for non-click events, and finally set the timestamp.
        
        https://bugs.webkit.org/show_bug.cgi?id=18464

        * platform/wx/MouseEventWx.cpp:
        (WebCore::PlatformMouseEvent::PlatformMouseEvent):

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

        Reviewed by Mark Rowe (in his infinite wisdom).

        Auto-generate the JSXSLTProcessor binding.

        * DerivedSources.make:
        * GNUmakefile.am:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * WebCoreSources.bkl:
        * bindings/js/JSDOMWindowBase.cpp:
        (WebCore::JSDOMWindowBase::getValueProperty):
        * bindings/js/JSDOMWindowBase.h:
        (WebCore::JSDOMWindowBase::):
        * bindings/js/JSXSLTProcessor.cpp: Removed.
        * bindings/js/JSXSLTProcessor.h: Removed.
        * xml/XSLTProcessor.h:

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

        Reviewed by Geoffrey Garen.

        Fixes:
          - https://bugs.webkit.org/show_bug.cgi?id=17249
            Incorrect lexical scope after navigation leads to UXSS
            <rdar://problem/5738497>

          - https://bugs.webkit.org/show_bug.cgi?id=16824
            Script authorization should follow lexical (not dynamic) scope
            <rdar://problem/5683032>

        This patch changes us to perform same-origin checks based on the lexical global object) 
        rather than dynamic global object, which is now possible we don't re-use the window on 
        navigations, but rather switch in a new one and re-use the outer shell.  This is both
        more secure and conforms with the HTML5 specification.  Now that all the checks are
        done based on the lexical global object, we can remove the SecurityOrigin::Reason
        concept, as it was only around to work around an ebay.com bug that required the check to
        be done that way.

        An important thing to note is that we currently implement a stricter than necessary policy
        and perform the same-origin check based on the currently active global object to avoid leaking
        the document in cases when the target frame is navigated before access.  This will be fixed in
        an upcoming patch.

        * bindings/js/JSDOMWindowBase.cpp:
        (WebCore::JSDOMWindowBase::allowsAccessFrom):
        (WebCore::JSDOMWindowBase::allowsAccessFromNoErrorMessage):
        (WebCore::JSDOMWindowBase::allowsAccessFromPrivate):
        (WebCore::JSDOMWindowBase::crossDomainAccessErrorMessage):
        (WebCore::JSDOMWindowBase::printErrorMessage):
        (WebCore::asJSDOMWindow):
        * bindings/js/JSDOMWindowBase.h:
        * html/CanvasRenderingContext2D.cpp:
        (WebCore::CanvasRenderingContext2D::checkOrigin):
        (WebCore::CanvasRenderingContext2D::createPattern):
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::begin):
        (WebCore::FrameLoader::write):
        (WebCore::FrameLoader::setOpener):
        (WebCore::FrameLoader::shouldAllowNavigation):
        * page/DOMWindow.h:
        (WebCore::DOMWindow::setSecurityOrigin):
        (WebCore::DOMWindow::securityOrigin):
        (WebCore::DOMWindow::setURL):
        (WebCore::DOMWindow::url):
        * platform/SecurityOrigin.cpp:
        (WebCore::SecurityOrigin::canAccess):
        (WebCore::SecurityOrigin::isSecureTransitionTo):
        * platform/SecurityOrigin.h:

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

        Reviewed by Mark.

        Enable 64-bit NPAPI plugins.
        
        * WebCore.xcodeproj/project.pbxproj:
        Don't remove NPAPI related symbols from the 64-bit .exp file.
        
        * bridge/npruntime.h:
        Remove now unnecessary #error.

2008-05-01  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Oliver (a while ago)

        - just a wee bit more bindings speedup
        
        Store the per-document Node --> JS wrapper cache in the document
        instead of an external hashtable.

        * bindings/js/kjs_binding.cpp:
        (WebCore::ScriptInterpreter::getDOMNodeForDocument):
        (WebCore::ScriptInterpreter::forgetDOMNodeForDocument):
        (WebCore::ScriptInterpreter::putDOMNodeForDocument):
        (WebCore::ScriptInterpreter::forgetAllDOMNodesForDocument):
        (WebCore::ScriptInterpreter::markDOMNodesForDocument):
        * dom/Document.h:
        (WebCore::Document::wrapperCache):

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

        Reviewed by Tim.

        Remove duplicate npfunctions.h header from WebKit.
        
        * WebCore.xcodeproj/project.pbxproj:
        Add npfunctions.h and set its role to private.
        
        * plugins/npfunctions.h:
        Merge Mac specific changes.

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

        Reviewed by Geoffrey Garen.

        Rename toJSDOMWindow(KJS::JSGlobalObject) to asJSDOMWindow, as all it does is
        cast.

        * bindings/js/JSCustomVoidCallback.cpp:
        (WebCore::toVoidCallback):
        * bindings/js/JSCustomXPathNSResolver.cpp:
        (WebCore::JSCustomXPathNSResolver::create):
        * bindings/js/JSDOMApplicationCacheCustom.cpp:
        (WebCore::JSDOMApplicationCache::add):
        (WebCore::JSDOMApplicationCache::remove):
        * bindings/js/JSDOMWindowBase.cpp:
        (WebCore::allowPopUp):
        (WebCore::createWindow):
        (WebCore::windowProtoFuncOpen):
        (WebCore::asJSDOMWindow):
        * bindings/js/JSDOMWindowBase.h:
        * bindings/js/JSDOMWindowCustom.cpp:
        (WebCore::JSDOMWindow::setLocation):
        (WebCore::JSDOMWindow::postMessage):
        * bindings/js/JSDatabaseCustom.cpp:
        (WebCore::JSDatabase::changeVersion):
        (WebCore::JSDatabase::transaction):
        * bindings/js/JSDocumentCustom.cpp:
        (WebCore::JSDocument::setLocation):
        * bindings/js/JSLocationCustom.cpp:
        (WebCore::navigateIfAllowed):
        (WebCore::JSLocation::setHref):
        (WebCore::JSLocation::replace):
        (WebCore::JSLocation::reload):
        (WebCore::JSLocation::assign):
        * bindings/js/JSSQLTransactionCustom.cpp:
        (WebCore::JSSQLTransaction::executeSql):
        * bindings/js/JSXMLHttpRequestCustom.cpp:
        (WebCore::JSXMLHttpRequest::open):
        * page/JavaScriptDebugServer.cpp:
        (WebCore::toPage):

2008-05-01  Anatoli Papirovski  <apapirovski@mac.com>

        Reviewed by Dave Hyatt.

        - fix https://bugs.webkit.org/show_bug.cgi?id=18347
          Absolutely positioned image percentage width does not respect container's padding

        Test: fast/replaced/absolute-position-percentage-width.html

        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::calcReplacedWidthUsing):

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

        - Windows build fix

        * platform/graphics/win/FontCGWin.cpp:
        (WebCore::Font::drawGlyphs):

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

        Reviewed by Darin Adler.

        - make synthetic bold and synthetic italics work in GDI text
        - account for synthetic bold in complex text on Windows

        * platform/graphics/win/FontCGWin.cpp:
        (WebCore::Font::drawGlyphs): Adjusted the text rectangle's x coordinates
        to fit italics. Added a skew transform for synthetic italics and a
        second paint pass for synthetic bold.
        * platform/graphics/win/SimpleFontDataWin.cpp:
        (WebCore::SimpleFontData::widthForGDIGlyph): Added the synthetic bold
        offset.
        * platform/graphics/win/UniscribeController.cpp:
        (WebCore::UniscribeController::shapeAndPlaceItem): Added the synthetic
        bold offset.

2008-05-01  Alp Toker  <alp@nuanti.com>

        Qt/Win build fix attempt following plugin changes. Add missing return
        statements.

        Also fixes some newly introduced coding style issues in the Qt port.

        * platform/qt/FileSystemQt.cpp:
        (WebCore::openTemporaryFile):
        (WebCore::closeFile):
        (WebCore::writeToFile):
        (WebCore::unloadModule):

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

        Reviewed by Adam.

        Export methods needed to subclass Widget.  (See r32770.)

        * WebCore.base.exp:

2008-05-01  Marc Ordinas i Llopis  <marc.ordinasillopis@collabora.co.uk>

        Reviewed by Alp Toker.
        Qt parts OK'ed by Simon Hausmann.

        https://bugs.webkit.org/show_bug.cgi?id=14750
        Added support for NPAPI plugins on Gtk and Qt-x11 ports.

        * GNUmakefile.am: Added Gtk plugin files.
        * WebCore.pro: Added Qt plugins files, defined XP_UNIX and
        ENABLE_NETSCAPE_PLUGIN_API
        * bridge/npruntime_internal.h: Additional undefs that conflict
        with Qt headers.
        * page/gtk/FrameGtk.cpp: Create js bindings for PluginView.
        (WebCore::Frame::createScriptInstanceForWidget):
        * page/qt/FrameQt.cpp: Create js bindings for PluginView.
        (WebCore::Frame::createScriptInstanceForWidget):
        (WebCore::Frame::clearPlatformScriptObjects):
        (WebCore::Frame::disconnectPlatformScriptObjects):
        * platform/FileSystem.h: Qt FileSystem implementation.
        * platform/Widget.h: Members to differentiate between Qt plugins and
        NPAPI ones.
        * platform/gtk/ScrollViewGtk.cpp:
        (WebCore::ScrollView::addChild): Set containing window before calling setParent.
        * platform/gtk/TemporaryLinkStubs.cpp: Removed implemented functions.
        (PluginView::invalidateRegion):
        * platform/qt/FileSystemQt.cpp: Implemented functions necessary for
        NPAPI plugins.
        (WebCore::openTemporaryFile):
        (WebCore::closeFile):
        (WebCore::writeToFile):
        (WebCore::unloadModule): Delete module if unloaded.
        * platform/qt/TemporaryLinkStubs.cpp: Removed implemented functions.
        * platform/qt/WidgetQt.cpp: Differentiate between Qt plugins and
        NPAPI ones.
        (WebCore::WidgetPrivate::WidgetPrivate):
        (WebCore::Widget::isNPAPIPlugin):
        (WebCore::Widget::setIsNPAPIPlugin):
        * plugins/PluginPackage.cpp:
        (WebCore::PluginPackage::~PluginPackage): Unload the module before
        destruction.
        (WebCore::PluginPackage::compare): Moved here as it's platform
        independent.
        * plugins/PluginView.cpp: Moved platform-independent functions here.
        (WebCore::PluginView::PluginView): Initialize m_npWindow.ws_info on
        Unix platforms.
        (WebCore::PluginView::freeStringArray):
        (WebCore::startsWithBlankLine):
        (WebCore::locationAfterFirstBlankLine):
        (WebCore::findEOL):
        (WebCore::capitalizeRFC822HeaderFieldName):
        (WebCore::parseRFC822HeaderFields):
        (WebCore::PluginView::handlePost):
        * plugins/PluginView.h: Moved platform-independent functions here.
        Added member to signal plugin needs XEmbed extension.
        * plugins/gtk/PluginDataGtk.cpp: Added.
        (WebCore::PluginData::initPlugins):
        (WebCore::PluginData::refresh):
        * plugins/gtk/PluginDatabaseGtk.cpp:
        (WebCore::PluginDatabase::defaultPluginDirectories):
        (WebCore::PluginDatabase::isPreferredPluginDirectory):
        * plugins/gtk/PluginPackageGtk.cpp: Added.
        (WebCore::PluginPackage::determineQuirks):
        (WebCore::PluginPackage::fetchInfo):
        (WebCore::PluginPackage::load):
        (WebCore::PluginPackage::hash):
        (WebCore::PluginPackage::equal):
        (WebCore::PluginPackage::compareFileVersion):
        * plugins/gtk/PluginViewGtk.cpp: Added.
        (WebCore::PluginView::updateWindow):
        (WebCore::PluginView::setFocus):
        (WebCore::PluginView::show):
        (WebCore::PluginView::hide):
        (WebCore::PluginView::paint):
        (WebCore::PluginView::handleKeyboardEvent):
        (WebCore::PluginView::handleMouseEvent):
        (WebCore::PluginView::setParent):
        (WebCore::PluginView::setNPWindowRect):
        (WebCore::PluginView::attachToWindow):
        (WebCore::PluginView::detachFromWindow):
        (WebCore::PluginView::stop):
        (WebCore::PluginView::userAgent):
        (WebCore::PluginView::handlePostReadFile):
        (WebCore::PluginView::getValue):
        (WebCore::PluginView::invalidateRect):
        (WebCore::PluginView::forceRedraw):
        (WebCore::PluginView::~PluginView):
        (WebCore::plug_removed_cb): Added callback to handle plug removal.
        (WebCore::PluginView::init):
        * plugins/gtk/xembed.h: Added.
        * plugins/npapi.cpp:
        (NPN_GetValue): Return error if no view present.
        * plugins/qt/PluginDataQt.cpp:
        (WebCore::PluginData::initPlugins):
        (WebCore::PluginData::refresh):
        * plugins/qt/PluginDatabaseQt.cpp: Added.
        (WebCore::PluginDatabase::getPluginPathsInDirectories):
        (WebCore::addQtWebKitPluginDirectories):
        (WebCore::addMozillaPluginDirectories):
        (WebCore::PluginDatabase::defaultPluginDirectories):
        (WebCore::PluginDatabase::isPreferredPluginDirectory):
        * plugins/qt/PluginPackageQt.cpp: Added.
        (WebCore::PluginPackage::determineQuirks):
        (WebCore::PluginPackage::fetchInfo):
        (WebCore::PluginPackage::load):
        (WebCore::PluginPackage::hash):
        (WebCore::PluginPackage::equal):
        (WebCore::PluginPackage::compareFileVersion):
        * plugins/qt/PluginViewQt.cpp: Added.
        (WebCore::PluginView::updateWindow):
        (WebCore::PluginView::setFocus):
        (WebCore::PluginView::show):
        (WebCore::PluginView::hide):
        (WebCore::PluginView::paint):
        (WebCore::PluginView::handleKeyboardEvent):
        (WebCore::PluginView::handleMouseEvent):
        (WebCore::PluginView::setParent):
        (WebCore::PluginView::setNPWindowRect):
        (WebCore::PluginView::attachToWindow):
        (WebCore::PluginView::detachFromWindow):
        (WebCore::PluginView::stop):
        (WebCore::PluginView::userAgent):
        (WebCore::PluginView::handlePostReadFile):
        (WebCore::PluginView::getValue):
        (WebCore::PluginView::invalidateRect):
        (WebCore::PluginView::invalidateRegion):
        (WebCore::PluginView::forceRedraw):
        (WebCore::PluginView::~PluginView):
        (WebCore::PluginView::init):
        * plugins/win/PluginPackageWin.cpp: Moved platform-independent code
        to plugins/PluginPackage.cpp
        * plugins/win/PluginViewWin.cpp: Moved platform-independent code to
        plugins/PluginView.cpp
        (WebCore::PluginView::stop):
        (WebCore::PluginView::handlePostReadFile):
        (WebCore::PluginView::getValue): Moved this function to each platform.

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

        Fix build.

        * ForwardingHeaders/wtf/StrHash.h: Added.

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

        Reviewed by Darin.

        Move management of cache groups to ApplicationCacheStorage. Also,
        application caches now start out with a null group and will have their group set
        when the cache has finished loading. 

        * loader/appcache/ApplicationCache.cpp:
        (WebCore::ApplicationCache::ApplicationCache):
        Initialize m_group to 0.
        
        (WebCore::ApplicationCache::~ApplicationCache):
        Null check the group.
        
        (WebCore::ApplicationCache::setGroup):
        New method for setting the group.
        
        * loader/appcache/ApplicationCache.h:        
        (WebCore::ApplicationCache::create):
        Remove the group argument.
        
        * loader/appcache/ApplicationCacheGroup.cpp:
        (WebCore::ApplicationCacheGroup::~ApplicationCacheGroup):
        Let the storage know that the cache group has been destroyed.
        
        (WebCore::ApplicationCacheGroup::cacheForMainRequest):
        Call into the storage.
        
        (WebCore::ApplicationCacheGroup::selectCache):
        Call into the storage.
        
        (WebCore::ApplicationCacheGroup::documentLoaderDestroyed):
        When there are no document loaders associated with the cache group,
        set the newest cache to 0.
        
        (WebCore::ApplicationCacheGroup::cacheDestroyed):
        Delete the group if there are no associated caches.
        
        (WebCore::ApplicationCacheGroup::setNewestCache):
        New method that will set the newest cache and associate the group with the cache.
        
        (WebCore::ApplicationCacheGroup::checkIfLoadIsComplete):
        Call setNewestCache instead.
        
        * loader/appcache/ApplicationCacheStorage.cpp:
        (WebCore::urlHostHash):
        Move host hash method here.
        
        (WebCore::ApplicationCacheStorage::findOrCreateCacheGroup):
        New method that finds a cache group with a given manifest URL or creates a new one.

        (WebCore::ApplicationCacheStorage::cacheGroupForURL):
        New method that returns a cache group for a given URL.
        
        (WebCore::ApplicationCacheStorage::cacheGroupDestroyed):
        When the cache group has been destroyed, remove it from the hash map.
        
        * loader/appcache/ApplicationCacheStorage.h:
        Add new methods.I b

2008-05-01  Dan Winship  <danw@gnome.org>

        Reviewed by Alp Toker.

        http://bugs.webkit.org/show_bug.cgi?id=18490
        Add mostly-working file: support and mostly-broken ftp: support to
        the soup backend.

        * platform/network/soup/ResourceHandleSoup.cpp (start): after
        doing basic checks, delegate to one of three submethods
        (startData): handles data: URLs
        (startHttp): handles http: and https: URLs, via libsoup
        (startGio, etc): handles file: and ftp: URLs, via gio. Lots of
        FIXMEs detailing the parts that don't fully work yet.

        * platform/network/ResourceHandle.h:
        * platform/network/ResourceHandleInternal.h: add new member
        variables for gio-based loading

2008-05-01  Alp Toker  <alp@nuanti.com>

        Rubber-stamped by Anders.

        GTK+ build fix for changes in r32752. Use int32, not int32_t types in
        npapi.h.

        Additional fix to use same signedness in npapi.h and Mac for the
        interval parameter.

        * bridge/npapi.h:

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

        Reviewed by Adam.

        Add new Cocoa event model type declarations.
        
        * bridge/npapi.h:

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

        Reviewed by Sam Weinig.

        This patch does three things:
        1. Adds support for the "img" ARIA role
        2. Switches over to a HashMap for converting ARIA role attributes 
        to WebCore's AccessibilityRole type. 
        3. Fixes a crash in the new ARIA code that I ran into while 
        browsing with VoiceOver enabled.

        * page/AccessibilityObject.cpp:
        (WebCore::AccessibilityObject::headingLevel): This is the crash 
        fix. Make sure the node's renderer is not null before looking up 
        its corresponding AccessibilityObject in the cache.
        (WebCore::AccessibilityObject::accessibilityIsIgnored): Account for 
        ARIA images.
        (WebCore::createARIARoleMap): Switch to HashMap, and add "img" to 
        the Map.
        (WebCore::RoleEntry::): Same.
        (WebCore::ariaRoleToWebCoreRole): Same.
        (WebCore::AccessibilityObject::ariaRoleAttribute): Same.

2008-04-30  Rob Buis  <buis@kde.org>

        Reviewed by Nikolas.

        https://bugs.webkit.org/show_bug.cgi?id=16447
        onload called too many times for <svg:image>
        https://bugs.webkit.org/show_bug.cgi?id=12282
        SVG wastes time in malloc to send loadEvents to non-existent listeners

        Postpone load event dispatching for image when externalResourcesRequired
        is true, delaying parents but not siblings, and make sure the load event
        is sent once for image in all cases.

        * svg/SVGElement.cpp:
        (WebCore::hasLoadListener):
        (WebCore::SVGElement::sendSVGLoadEventIfPossible):
        * svg/SVGImageElement.cpp:
        (WebCore::SVGImageElement::haveLoadedRequiredResources):
        * svg/SVGImageLoader.cpp:
        (WebCore::SVGImageLoader::dispatchLoadEvent):

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

        Fix crashes when dynamically removing <video> elements with layers that establish stacking contexts.  This
        won't typically crash release builds because of arena recycling.

        Reviewed by Dan Bernstein
        
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::~RenderLayer):
        Make sure to remove the reflection's child layer from its parent.

        * rendering/RenderMedia.cpp:
        (WebCore::RenderMedia::~RenderMedia):
        (WebCore::RenderMedia::destroy):
        (WebCore::RenderMedia::removeChild):
        * rendering/RenderMedia.h:
        Adjust the teardown of RenderMedia so that it does all of its teardown inside destroy() (this makes it more
        like other renderers and doesn't leave you staring at a trashed layer hierarchy in the RenderMedia
        destructor).

2008-04-30  Rémi Zara  <remi_zara@mac.com>

        Reviewed by Dave Hyatt.

        fix https://bugs.webkit.org/show_bug.cgi?id=18618
        <rdar://problem/5876063> REGRESSION (r31823-r31847): Patterns are upside down

        * svg/graphics/cg/SVGPaintServerPatternCg.cpp:
        (WebCore::patternCallback): flip the y axis when drawing the tile

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

        Fixes an undefined type exception that fires when adding a resource to the inspector
        that has a MIME type warning.

        Reviewed by Adam Roben.

        * page/inspector/Resource.js:
        (WebInspector.Resource.prototype._addTip): Call WebInspector.console instead of
        WebInspector.consolePanel.
        (WebInspector.Resource.prototype._checkWarning): Ditto.

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

        Fixes the bug where the selected resource would be deselected after
        changing the sort order in the Resources panel.

        Reviewed by Dan Bernstein.

        * page/inspector/ResourcesPanel.js:
        (WebInspector.ResourcesPanel.prototype._sortResourcesIfNeeded):
        Rememebr if the tree element that we are sorting was selected, so
        the selection can be restored after it is re-inserted. The onSelect
        is suppressed since we don't need to show the resource again.

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

        Fixes the regression where error bubbles in source views always show
        "undefined" for the content because the message property on
        ConsoleMessage was removed. Adds support for a plain text formated
        message that is stored in the message proeprty.

        Reviewed by Adam Roben.

        * page/inspector/Console.js:
        (WebInspector.Console.prototype._format): Add a plainText argument that is passed to
        the formatters.
        (WebInspector.Console.prototype._formatvalue): Add a plainText argument, and a comment
        about needing to honor it if the textContent of the output doesn't make sense.
        (WebInspector.Console.prototype._formatvalue): Ditto.
        (WebInspector.Console.prototype._formatstring): Ditto.
        (WebInspector.Console.prototype._formatregexp): Ditto.
        (WebInspector.Console.prototype._formatarray): Ditto.
        (WebInspector.Console.prototype._formatnode): Ditto.
        (WebInspector.Console.prototype._formatobject): Ditto.
        (WebInspector.Console.prototype._formaterror): Ditto.
        (WebInspector.ConsoleMessage): Call _format passing true for plainText. Get the 
        textContnet of the result and assign to the message proeprty. This property is 
        referenced from the SourceView.
        (WebInspector.ConsoleMessage.prototype._format): Add a plainText argument. Build the 
        result element as a local and return it, instead of using formatedMessage directly.

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

        Adds a helper function to convert a JSValueRef to a String.

        Reviewed by Adam Roben.

        * page/InspectorController.cpp:
        (WebCore::toString): Converts a JSValueRef to a String.
        (WebCore::search): Use toString.
        (WebCore::InspectorController::handleException): Ditto.

2008-04-30  Ariya Hidayat  <ariya.hidayat@trolltech.com>

        Reviewed by Simon.
        
        Build the Qt port with SVG Foreign Object support.

        * WebCore.pro:

2008-04-30  Simon Hausmann  <hausmann@webkit.org>

        Reviewed by Holger.

        Fix null pointer deference triggered by
        LayoutTests/fast/loader/cancel-load-during-port-block-timer.html

        * platform/network/qt/ResourceHandleQt.cpp:
        (WebCore::ResourceHandle::cancel): Check m_job before dereferencing.

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

        Improve the performance of masks by adding code to set more precise clips on the transparency layers
        used to paint the content under the mask, and then also avoid creating transparency layers for the masks
        themselves in common cases.

        Reviewed by Dan Bernstein

        * platform/graphics/GraphicsContext.cpp:
        (WebCore::GraphicsContext::drawTiledImage):
        Fix a bug in drawTiledImage where the composite mode got lost in the double stretch case for nine piece
        images.

        * rendering/InlineFlowBox.cpp:
        (WebCore::InlineFlowBox::paintFillLayers):
        (WebCore::InlineFlowBox::paintFillLayer):
        (WebCore::InlineFlowBox::paintMask):
        Optimize to only push a transparency layer for the mask if multiple images are combining.  Add a new
        composite operator argument for use when painting fill layers to do direct destination-in compositing while
        painting images.


        * rendering/InlineFlowBox.h:
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::paintMask):
        (WebCore::RenderBox::paintMaskImages):
        Optimize to only push a transparency layer for the mask if multiple images are combining.

        (WebCore::RenderBox::maskClipRect):
        A new method that attempts to compute a precise clip rect for the mask images.

        (WebCore::RenderBox::paintFillLayers):
        (WebCore::RenderBox::paintFillLayer):
        (WebCore::RenderBox::paintFillLayerExtended):
        * rendering/RenderBox.h:
        Added the composite operator argument to the paintFillLayer methods.

        * rendering/RenderFieldset.cpp:
        (WebCore::RenderFieldset::paintMask):
        Call the new base class paintMaskImages method for optimized mask painting.

        * rendering/RenderLayer.cpp:
        (WebCore::transparencyClipBox):
        Fix a coordinate space issue with transparencyClipBox when masks were used.  The border box was in the
        wrong coordinate space.  Moved the code into the layer's boundingBox() method instead.

        (WebCore::RenderLayer::paintLayer):
        Removed the code that always pushed a transparency layer before painting masks.

        (WebCore::RenderLayer::boundingBox):
        Call maskClipRect to shrink the bounding box of the layer to fit the mask clip.

        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::paintNinePieceImage):
        Added a composite operator argument for direct destination-in painting of nine piece images.

        * rendering/RenderObject.h:
        (WebCore::RenderObject::maskClipRect):
        (WebCore::RenderObject::paintFillLayerExtended):
        Base class stubs for RenderBox-implemented methods.

        * rendering/RenderTable.cpp:
        (WebCore::RenderTable::paintMask):
        * rendering/RenderTableCell.cpp:
        (WebCore::RenderTableCell::paintMask):
        Modified to call the new paintMaskImages function.

        * svg/graphics/SVGImage.cpp:
        (WebCore::SVGImage::draw):
        SVG images now respect composite modes by pushing a transparency layer when the composite mode
        is anything other than source-over.

2008-04-30  Ariya Hidayat  <ariya.hidayat@trolltech.com>

        Rubber-stamped by Rob Buis.

        Fixed crash or assertion if SVG_FOREIGN_OBJECT is not enabled

        * svg/SVGUseElement.cpp:
        (WebCore::SVGUseElement::associateInstancesWithShadowTreeElements):

2008-04-30  Ariya Hidayat  <ariya.hidayat@trolltech.com>

        Rubber-stamped by Rob Buis.

        Fixed compile, due to API change in XMLSerializer

        * svg/SVGUseElement.cpp:
        (WebCore::SVGUseElement::buildPendingResource):

2008-04-30  Rob Buis  <buis@kde.org>

        Reviewed by Eric.

        https://bugs.webkit.org/show_bug.cgi?id=11939
        Quirksmode: Ignores media types in stylesheet PIs

        Transfer the xml-stylesheet pseudo attribute media to the css
        stylesheet created from the ProcessingInstruction.

        Tests: fast/css/xml-stylesheet-media-processing.xhtml

        * css/StyleSheet.cpp:
        (WebCore::StyleSheet::setMedia):
        * css/StyleSheet.h:
        * dom/ProcessingInstruction.cpp:
        (WebCore::ProcessingInstruction::checkStyleSheet):
        (WebCore::ProcessingInstruction::setCSSStyleSheet):
        * dom/ProcessingInstruction.h:

2008-04-29  David D. Kilzer  <ddkilzer@apple.com>

        BUILD FIX for export of WTF::RefCounted<WebCore::FormData>::deref()

        On the buildbot, this is a fatal error:

        ld: symbols names listed in -exported_symbols_list: WebKitBuild/Release/DerivedSources/WebCore/WebCore.exp not in linked objects
        __ZN3WTF10RefCountedIN7WebCore8FormDataEE5derefEv
        /usr/bin/libtool: internal link edit command failed

        Newer dev tools only produce a warning:

        ld warning: cannot export hidden symbol __ZN3WTF10RefCountedIN7WebCore8FormDataEE5derefEv from WebKitBuild/WebCore.build/Release/WebCore.build/Objects-normal/i386/DocumentLoader.o

        * WebCore.base.exp: Remove hidden symbol from export list.

2008-04-29  David Kilzer  <ddkilzer@apple.com>

        Another BUILD FIX for ENABLE(DASHBOARD_SUPPORT)

        * dom/make_names.pl: Added #if ENABLE(DASHBOARD_SUPPORT) to Dashboard code.

2008-04-29  David Kilzer  <ddkilzer@apple.com>

        BUILD FIX for ENABLE(DASHBOARD_SUPPORT)

        * DerivedSources.make: Removed duplication of targets for
        generating CSSPropertyNames.h and CSSValueKeywords.h.
        * GNUmakefile.am: Ditto.  Added support for ENABLE_DASHBOARD_SUPPORT.
        * WebCore.pro: Added support for ENABLE_DASHBOARD_SUPPORT.
        Made both SVG and non-SVG variables of GENERATOR 6-A use new
        DASHBOARDSUPPORTCSSPROPERTIES variable.

2008-04-29  Ada Chan  <adachan@apple.com>

        Added missing return.        

        * platform/win/COMPtr.h:
        (WTF::):

2008-04-29  Alp Toker  <alp@nuanti.com>

        GTK+ build fix attempt following breakage in r32700 which
        conditionalised dashboard support.

        * GNUmakefile.am:

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

        Restore the beloved COMPtr::operator&

        * platform/win/COMPtr.h: Removed the HashTableDeletedValueType
        constructor and isHashTableDeletedValue and hashTableDeletedValue
        functions.
        (WTF::): Changed constructDeletedValue to play nicely with
        COMPtr::operator&.

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

        Fix assertion on launch on Windows

        * platform/graphics/win/FontPlatformData.h: Pass
        WTF::HashTableDeletedValue to the m_font constructor instead of a
        bogus -1 value. This is needed because m_font is a RefPtr.

2008-04-29  Greg Bolsinga  <bolsinga@apple.com>

        Reviewed by Darin.

        Wrapped Dashboard code with ENABLE(DASHBOARD_SUPPORT)

        * DerivedSources.make:
        * WebCore.DashboardSupport.exp: Added.
        * WebCore.base.exp:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSDOMWindowCustom.cpp:
        (WebCore::JSDOMWindow::setLocation):
        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::CSSComputedStyleDeclaration::getPropertyCSSValue):
        * css/CSSParser.cpp:
        (WebCore::CSSParser::parseValue):
        * css/CSSPrimitiveValue.cpp:
        (WebCore::CSSPrimitiveValue::cleanup):
        (WebCore::CSSPrimitiveValue::cssText):
        * css/CSSPropertyNames.in:
        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::applyProperty):
        * css/DashboardRegion.h:
        * css/DashboardSupportCSSPropertyNames.in: Added.
        * dom/DOMImplementation.cpp:
        (WebCore::DOMImplementation::createDocument):
        * dom/Document.cpp:
        (WebCore::Document::Document):
        (WebCore::Document::importNode):
        * dom/Document.h:
        * html/CanvasRenderingContext2D.cpp:
        (WebCore::CanvasRenderingContext2D::fill):
        (WebCore::CanvasRenderingContext2D::stroke):
        (WebCore::CanvasRenderingContext2D::clip):
        * html/CanvasRenderingContext2D.h:
        * html/HTMLCanvasElement.cpp:
        * html/HTMLCanvasElement.h:
        * page/Chrome.cpp:
        * page/ChromeClient.h:
        * page/Frame.cpp:
        (WebCore::Frame::paint):
        * page/Frame.h:
        * page/FrameView.cpp:
        (WebCore::FrameView::layout):
        * page/FrameView.h:
        * page/Settings.cpp:
        (WebCore::Settings::Settings):
        * page/Settings.h:
        * page/mac/EventHandlerMac.mm:
        (WebCore::EventHandler::needsKeyboardEventDisambiguationQuirks):
        * page/mac/FrameMac.mm:
        * page/mac/WebDashboardRegion.h:
        * page/mac/WebDashboardRegion.m:
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::scrollToOffset):
        (WebCore::RenderLayer::setHasHorizontalScrollbar):
        (WebCore::RenderLayer::setHasVerticalScrollbar):
        (WebCore::RenderLayer::updateScrollInfoAfterLayout):
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::setStyle):
        * rendering/RenderObject.h:
        * rendering/RenderStyle.cpp:
        (WebCore::StyleRareNonInheritedData::operator==):
        (WebCore::RenderStyle::diff):
        * rendering/RenderStyle.h:
        * xml/XMLHttpRequest.cpp:
        (WebCore::XMLHttpRequest::send):
        (WebCore::XMLHttpRequest::setRequestHeader):

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

        Windows build fix

        This removes COMPtr::operator&, which didn't jive with HashTable. It
        is replaced by COMPtr::adoptionPointer.

        Discussed with Darin Adler and Anders Carlsson.

        * platform/win/COMPtr.h: Replaced operator& with adoptionPointer.

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

        Implement the new box-reflect property in CSS.  This property enables real-time reflections on
        objects (yes you can reflect <video>!).

        Reviewed by Dan Bernstein

        Test cases added in fast/reflections/

        * GNUmakefile.am:
        * WebCore.pro:
        * WebCore.xcodeproj/project.pbxproj:
        * WebCoreSources.bkl:
        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::valueForReflection):
        (WebCore::CSSComputedStyleDeclaration::getPropertyCSSValue):
        * css/CSSParser.cpp:
        (WebCore::CSSParser::parseValue):
        (WebCore::CSSParser::parseReflect):
        (WebCore::BorderImageParseContext::commitBorderImage):
        (WebCore::CSSParser::parseBorderImage):
        (WebCore::parseGradientColorStop):
        (WebCore::CSSParser::parseTransform):
        * css/CSSParser.h:
        * css/CSSPropertyNames.in:
        * css/CSSReflectValue.cpp: Added.
        (WebCore::CSSReflectValue::cssText):
        * css/CSSReflectValue.h: Added.
        (WebCore::CSSReflectValue::CSSReflectValue):
        (WebCore::CSSReflectValue::direction):
        (WebCore::CSSReflectValue::offset):
        (WebCore::CSSReflectValue::mask):
        (WebCore::CSSReflectValue::setDirection):
        (WebCore::CSSReflectValue::setOffset):
        (WebCore::CSSReflectValue::setMask):
        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::adjustRenderStyle):
        (WebCore::CSSStyleSelector::applyProperty):
        (WebCore::CSSStyleSelector::mapNinePieceImage):
        * css/CSSStyleSelector.h:
        * rendering/InlineFlowBox.cpp:
        (WebCore::InlineFlowBox::placeBoxesVertically):
        (WebCore::InlineFlowBox::paintMask):
        * rendering/Length.h:
        (WebCore::Length::calcFloatValue):
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::overflowHeight):
        (WebCore::RenderBlock::overflowWidth):
        (WebCore::RenderBlock::overflowLeft):
        (WebCore::RenderBlock::overflowTop):
        (WebCore::RenderBlock::overflowRect):
        (WebCore::RenderBlock::layoutBlock):
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::setStyle):
        (WebCore::RenderBox::paintMask):
        (WebCore::RenderBox::imageChanged):
        (WebCore::RenderBox::computeAbsoluteRepaintRect):
        * rendering/RenderFlexibleBox.cpp:
        (WebCore::RenderFlexibleBox::layoutBlock):
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::RenderLayer):
        (WebCore::RenderLayer::~RenderLayer):
        (WebCore::RenderLayer::updateLayerPositions):
        (WebCore::RenderLayer::enclosingPositionedAncestor):
        (WebCore::RenderLayer::enclosingTransformedAncestor):
        (WebCore::RenderLayer::isTransparent):
        (WebCore::transparencyClipBox):
        (WebCore::RenderLayer::operator delete):
        (WebCore::RenderLayer::destroy):
        (WebCore::RenderLayer::removeOnlyThisLayer):
        (WebCore::RenderLayer::insertOnlyThisLayer):
        (WebCore::RenderLayer::paintLayer):
        (WebCore::RenderLayer::updateZOrderLists):
        (WebCore::RenderLayer::updateOverflowList):
        (WebCore::RenderLayer::collectLayers):
        (WebCore::RenderLayer::shouldBeOverflowOnly):
        (WebCore::RenderLayer::styleChanged):
        (WebCore::RenderLayer::reflectionLayer):
        (WebCore::RenderLayer::createReflection):
        (WebCore::RenderLayer::updateReflectionStyle):
        * rendering/RenderLayer.h:
        (WebCore::RenderLayer::hasReflection):
        (WebCore::RenderLayer::reflection):
        (WebCore::RenderLayer::paintingInsideReflection):
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::RenderObject):
        (WebCore::RenderObject::requiresLayer):
        (WebCore::RenderObject::setStyle):
        (WebCore::RenderObject::updateImage):
        (WebCore::RenderObject::reflectionBox):
        (WebCore::RenderObject::reflectionOffset):
        * rendering/RenderObject.h:
        (WebCore::RenderObject::hasTransform):
        (WebCore::RenderObject::setHasReflection):
        (WebCore::RenderObject::hasReflection):
        * rendering/RenderReplica.cpp: Added.
        (WebCore::RenderReplica::RenderReplica):
        (WebCore::RenderReplica::~RenderReplica):
        (WebCore::RenderReplica::layout):
        (WebCore::RenderReplica::calcPrefWidths):
        (WebCore::RenderReplica::paint):
        * rendering/RenderReplica.h: Added.
        (WebCore::RenderReplica::renderName):
        (WebCore::RenderReplica::requiresLayer):
        * rendering/RenderStyle.cpp:
        (WebCore::StyleRareNonInheritedData::StyleRareNonInheritedData):
        (WebCore::StyleRareNonInheritedData::operator==):
        (WebCore::StyleRareNonInheritedData::reflectionDataEquivalent):
        (WebCore::RenderStyle::diff):
        (WebCore::RenderStyle::applyTransform):
        * rendering/RenderStyle.h:
        (WebCore::TranslateTransformOperation::apply):
        (WebCore::StyleReflection::StyleReflection):
        (WebCore::StyleReflection::operator==):
        (WebCore::StyleReflection::operator!=):
        (WebCore::StyleReflection::direction):
        (WebCore::StyleReflection::offset):
        (WebCore::StyleReflection::mask):
        (WebCore::StyleReflection::setDirection):
        (WebCore::StyleReflection::setOffset):
        (WebCore::StyleReflection::setMask):
        (WebCore::RenderStyle::boxReflect):
        (WebCore::RenderStyle::setBoxReflect):
        (WebCore::RenderStyle::initialBoxReflect):
        * rendering/RenderTable.cpp:
        (WebCore::RenderTable::layout):
        (WebCore::RenderTable::paintMask):
        * rendering/RenderTableCell.cpp:
        (WebCore::RenderTableCell::requiresLayer):
        (WebCore::RenderTableCell::paintMask):

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

        Reviewed by Alice.

        Initial implementation of the following ARIA roles: button, 
        checkbox, heading, link, radio, textbox.

        * html/HTMLAttributeNames.in: Add 'role' to list of attributes.

        * page/AccessibilityObject.cpp:
         When an ARIA role is set, the role overrides whatever the actual 
element is when the element reports itself to the screen reader. So all of these isBlah functions report based on their roleValue now.
        (WebCore::AccessibilityObject::isWebArea):
        (WebCore::AccessibilityObject::isImageButton):
        (WebCore::AccessibilityObject::isAnchor):
        (WebCore::AccessibilityObject::isTextControl):
        (WebCore::AccessibilityObject::isImage):
        (WebCore::AccessibilityObject::isAttachment):
        (WebCore::AccessibilityObject::isPasswordField):
        (WebCore::AccessibilityObject::isCheckboxOrRadio):
        (WebCore::AccessibilityObject::isHeading):
        (WebCore::AccessibilityObject::isLink):

        Check for ARIA information:
        (WebCore::AccessibilityObject::headingLevel):
        (WebCore::AccessibilityObject::anchorElement):
        (WebCore::AccessibilityObject::actionElement):
        (WebCore::AccessibilityObject::hasIntValue):
        (WebCore::AccessibilityObject::intValue):
        (WebCore::AccessibilityObject::stringValue):
        (WebCore::AccessibilityObject::title):
        (WebCore::AccessibilityObject::accessibilityIsIgnored):
        (WebCore::AccessibilityObject::roleValue):

        There are a few places in the code where it is important to identify the difference between ARIA and non-ARIA.
        (WebCore::AccessibilityObject::isNativeImage):
        (WebCore::AccessibilityObject::isNativeTextControl):
        (WebCore::isARIAInput):
        (WebCore::isARIAControl):

        A lot of spots in the code used to cast to RenderTextControl to get information about the text inside the element. Now that non-native text controls can run this code with the ARIA role 'textbox', it needs to be as general as possible. 
        (WebCore::AccessibilityObject::text): Still calls into 
        RenderTextControl's text() for native text controls. Uses Element's 
        innerText() for ARIA textboxes.
        (WebCore::AccessibilityObject::textLength): Call 
        AccessibilityObject's text() instead of RenderTextControl's.
        (WebCore::AccessibilityObject::ariaSelectedTextDOMRange):
        (WebCore::AccessibilityObject::selectedText):
        (WebCore::AccessibilityObject::selectedTextRange):
        (WebCore::AccessibilityObject::selectionStart):
        (WebCore::AccessibilityObject::selectionEnd):
        (WebCore::AccessibilityObject::setSelectedTextRange):
        (WebCore::AccessibilityObject::setValue):
        (WebCore::AccessibilityObject::visiblePositionForIndex):
        (WebCore::AccessibilityObject::indexForVisiblePosition):
        (WebCore::AccessibilityObject::textMarkerRangeForRange):
        (WebCore::AccessibilityObject::textMarkerForIndex):
        (WebCore::AccessibilityObject::indexForTextMarker):
        (WebCore::AccessibilityObject::doAXRangeForLine):
        (WebCore::AccessibilityObject::doAXRangeForIndex):
        (WebCore::AccessibilityObject::doAXStringForRange):
        (WebCore::AccessibilityObject::doAXBoundsForRange):
        
        Reports ARIA role. If the role is not valid or simply not set, return UnknownRole.
        (WebCore::AccessibilityObject::ariaRoleAttribute):
        
        Added several new functions. Most of them existed before but were static, or have been added to reduce the dependency on RenderTextControl for a lot of the text functionality.
        * page/AccessibilityObject.h:

        Eliminated dependency on RenderTextControl cast. The information is generalized now and available directly through the AccessibilityObject.
        * page/mac/AccessibilityObjectWrapper.mm:
        (-[AccessibilityObjectWrapper accessibilityAttributeValue:]):
        (-[AccessibilityObjectWrapper doAXAttributedStringForRange:]):

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

        Make the exceptions that the InspectorController catches log the
        original file and line number, if present on the exception object.

        Reviewed by Adam Roben.

        * page/InspectorController.cpp:
        (WebCore::InspectorController::callFunction): Pass the context to HANDLE_EXCEPTION.
        (WebCore::InspectorController::~InspectorController): Ditto.
        (WebCore::InspectorController::scriptObjectReady): Ditto.
        (WebCore::InspectorController::addScriptResource): Ditto.
        (WebCore::InspectorController::updateScriptResourceRequest): Ditto.
        (WebCore::InspectorController::updateScriptResourceResponse): Ditto.
        (WebCore::InspectorController::updateScriptResource): Ditto.
        (WebCore::InspectorController::addDatabaseScriptResource): Ditto.
        (WebCore::InspectorController::addScriptConsoleMessage): Ditto.
        (WebCore::InspectorController::handleException): Take a context. Pull the line
        and sourceURL properties off the exception if it is an object.
        * page/InspectorController.h: Change handleException to take a context.

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

        Fixes a regression where the Page's debugger would not be reattached
        when a new JSDOMWindow is created.

        Reviewed by Sam Weinig.

        * bindings/js/kjs_proxy.cpp:
        (WebCore::KJSProxy::clear): Call attachDebugger after creating the JSDOMWindow.
        * history/CachedPage.cpp:
        (WebCore::CachedPage::restore): For the case where the CachedPage doesn't
        contain a window, reattach the debugger to the new JSDOMWindow by calling
        proxy->attachDebugger. Also restore the setPageGroupIdentifier.

2008-04-29  Anatoli Papirovski  <apapirovski@mac.com>

        Reviewed by Darin Adler.

        Fix for https://bugs.webkit.org/show_bug.cgi?id=18355
        Fixed RGB and RGBA parsing to ignore the declaration when the value is not
        "either three integer values or three percentage values."

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

2008-04-29  Holger Hans Peter Freyther  <zecke@selfish.org>

        Reviewed by Simon.

        Fix crash when setHtml gets called from slots connected to QWebPage::unsupportedContent

        Ben found this crash in the demo browser.

        In void MainResourceLoader::continueAfterContentPolicy(PolicyAction contentPolicy,

        case PolicyDownload:
        frameLoader()->client()->download(m_handle.get(), request(), m_handle.get()->request(), r);
        receivedError(interruptionForPolicyChangeError());

        We are in a policy check, the download() call will call setHtml, which will start loading
        the data into a frame. The loading will cancel all policy checks and call ResourceLoader::releaseResources
        which will set m_frame to 0. Then we return and invoke interruptionForPolicyChangeError() which
        will use the m_frame->loader() but it is gone. Do not call into receivedError and
        interruptionForPolicyChangeError if we are gone anyway...

        * loader/MainResourceLoader.cpp:
        (WebCore::MainResourceLoader::continueAfterContentPolicy):

2008-04-29  Holger Hans Peter Freyther  <zecke@selfish.org>

        Reviewed by Simon.

        Rely on auto-boxing of C++ for the QCursor c'tor

        * platform/qt/CursorQt.cpp:

2008-04-29  Holger Hans Peter Freyther  <zecke@selfish.org>

        Reviewed by Simon.

        Add the remaining cursors that defaulted to PointerCursor

        * Resources/WebKitResources.qrc:
        * platform/qt/CursorQt.cpp:
        (WebCore::verticalTextCursor):
        (WebCore::cellCursor):
        (WebCore::contextMenuCursor):
        (WebCore::copyCursor):
        (WebCore::progressCursor):
        (WebCore::aliasCursor):

2008-04-29  Alice Liu  <alice.liu@apple.com>

        Reviewed by Beth Dakin.

        Comply with HTML5 spec about parsing tabindex property according to
        integer parsing rules

        Test: fast/parser/tabindex-parsing.html

        * html/HTMLElement.cpp:
        (WebCore::HTMLElement::parseMappedAttribute):

2008-04-29  Tor Arne Vestbø  <tavestbo@trolltech.com>

        Reviewed by Simon.

        Fixes: Fix timing problem where scrollbars in subframes were sometimes not property repainted.

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

        We need to repaint scrollbars after a geometry change, and also make sure
        the computed clipping rect for the corners between scrollbars is propagated
        to the chrome client without beeing intersected by the visible content rect
        of the frame.

        * platform/ScrollView.h:
        * platform/qt/ScrollViewQt.cpp:
        (WebCore::ScrollView::geometryChanged):
        (WebCore::ScrollView::suppressScrollbars):
        (WebCore::ScrollView::invalidateScrollbars):

2008-04-29  Holger Hans Peter Freyther  <zecke@selfish.org>

        Reviewed by Simon.

        Calling QWebView::setCursor will override the WebCore Cursor.
        Calling QWebView::setCursor will override the WebCore Cursor using
        QWidget::unsetCursor will revert to the WebCore Cursor.

        For detecting the unset we have to compare the shape of the
        cursor to the default arrow. Qt::WA_SetCursor can not be used
        as it is set unconditionally but conditionally removed.

        Calling QWidget::setCursor will immediately send the CursorChange
        event. We listen to this event to decide if we currently use a
        WebCore cursor, got a cursor from outside, or revert to the default.

        This should be race free and work reliable, the manual test for this
        is WebCore/manual-tests/cursor.html

        * platform/qt/WidgetQt.cpp:
        (WebCore::Widget::setCursor):

2008-04-28  Dan Bernstein  <mitz@apple.com>

        Reviewed by Maciej Stachowiak.

        - fix https://bugs.webkit.org/show_bug.cgi?id=18795
          REGRESSION (r32660): Text heavier with text-shadow

        * rendering/InlineTextBox.cpp:
        (WebCore::paintTextWithShadows): The loop was doing one extra pass
        without shadow even in cases where the last pass with a shadow was
        painting the text at the right position (rather than outside the clip).
        Fixed that. The only case where a separate pass without shadow is needed
        is when there is text-stroke, since in that case all shadow passes
        paint the text outside the clip.

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

        Reviewed by Sam Weinig

        Add Storage.clear(), per updates to HTML5

        Tests: storage/domstorage/localstorage/clear.html
               storage/domstorage/sessionstorage/clear.html

        * storage/LocalStorageArea.cpp:
        (WebCore::LocalStorageArea::areaCleared):
        * storage/LocalStorageArea.h:

        * storage/SessionStorageArea.cpp:
        (WebCore::SessionStorageArea::areaCleared):
        * storage/SessionStorageArea.h:

        * storage/Storage.cpp:
        (WebCore::Storage::clear):
        * storage/Storage.h:
        * storage/Storage.idl:

        * storage/StorageArea.cpp:
        (WebCore::StorageArea::internalClear):
        * storage/StorageArea.h:
        (WebCore::StorageArea::clear):

2008-04-28  Adele Peterson  <adele@apple.com>

        Reviewed by Dan Bernstein, Tim Hatcher, Anders Carlsson, and Darin Adler.

        WebCore part of fix for <rdar://problem/3709505>
        Safari should have a way to upload bundles from the file upload control (as zip)

        * WebCore.base.exp: Added symbols.

        * html/HTMLFormElement.cpp: (WebCore::HTMLFormElement::formData): Ask the application if a file will need to be replaced before it's uploaded.
          It will also give the replacement filename which is used to determine the correct mime-type and to construct the correct header.

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::submitForm): Asks the application to generate any files for the form data before a form submission starts.
        (WebCore::FrameLoader::loadItem): ditto.
        * loader/ResourceLoader.cpp:
        (WebCore::ResourceLoader::didReceiveResponse): Tells the FormData from the request to remove any generated files if it needs to.
        (WebCore::ResourceLoader::didCancel): ditto.
        (WebCore::ResourceLoader::didFail): ditto.

        * platform/network/FormData.cpp:
        (WebCore::FormData::FormData): Initializes m_hasGeneratedFiles, which keeps track of whether there are files that will need to be removed.
        (WebCore::FormData::~FormData): Added.  Assert that there are no files that need to be removed, but if there are, release builds will still remove them here.
        (WebCore::FormData::appendFile): Passes along a shouldGenerateFile flag to the FormDataElement.
        (WebCore::FormData::generateFiles): Added. Iterates through the FormDataElements, and using the ChromeClient pointer, asks the application to
         create any compressed files so the FormDataElements can store the paths.
        (WebCore::FormData::removeGeneratedFilesIfNeeded): Added.  Removes generated files and their directories (if empty).
        * platform/network/FormData.h:
        (WebCore::FormDataElement::FormDataElement): Added a boolean to track whether the file will need to be generated,
         and a string to hold the path of the generated file.

        * platform/network/mac/FormDataStreamMac.mm:
        (WebCore::advanceCurrentStream): Uses the generated file path instead of the original file path when streaming the file.
        (WebCore::setHTTPBody): Uses the generated file path when determining the size of the file to be uploaded.

        * platform/FileSystem.h: Added directoryName.
        * platform/posix/FileSystemPOSIX.cpp: (WebCore::directoryName): Added.
        * platform/gtk/FileSystemGtk.cpp: (WebCore::directoryName): Added empty implementation.
        * platform/qt/FileSystemQt.cpp: (WebCore::directoryName): ditto.
        * platform/win/FileSystemWin.cpp: (WebCore::directoryName): ditto.
        * platform/wx/FileSystemWx.cpp: (WebCore::directoryName): ditto.

        Added new ChromeClient methods to give the application control over the file compression for uploading.
        * page/Chrome.cpp:
        (WebCore::ChromeClient::shouldReplaceWithGeneratedFileForUpload): Added a default implementation.
        (WebCore::ChromeClient::generateReplacementFile): ditto.
        * page/ChromeClient.h:

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

        Reviewed by Sam, Mark, Adele and Darin.

        Add a (currently not called) method for opening the application cache database.
        
        * WebCore.base.exp:
        * loader/appcache/ApplicationCacheStorage.cpp:
        (WebCore::ApplicationCacheStorage::setCacheDirectory):
        (WebCore::ApplicationCacheStorage::openDatabase):
        * loader/appcache/ApplicationCacheStorage.h:

2008-04-28  Alice Liu  <alice.liu@apple.com>

        Reviewed by Darin.

        Fix <rdar://problem/4911289> Add tabindex property to all children 
        of HTMLElement (7138)
        http://bugs.webkit.org/show_bug.cgi?id=7138

        Test: fast/events/tabindex-focus-blur-all.html

        * WebCore.xcodeproj/project.pbxproj:
        * bindings/objc/DOMPrivate.h:
        -DOMHTMLLabelElementPrivate.h and DOMHTMLLegendElementPrivate.h are no
         longer needed

        * bindings/objc/PublicDOMInterfaces.h:
        -Moving focus, blur, tabindex to HTMLElement from its descendants.

        * dom/Node.cpp:
        (WebCore::Node::Node):
        (WebCore::Node::isFocusable):
        (WebCore::Node::isKeyboardFocusable):
        -The concept of being focusable now needs to account for tabindex
        attribute.

        * dom/Node.h:
        -Need to use a bit to keep track of whether tabindex was explicitly set
         to 0 or was just initialized to 0.
        (WebCore::Node::tabIndex):
        -Make this virtual so that Anchors and GenericFormElements can determine
         tabindex without accounting for focusability
        (WebCore::Node::setTabIndexExplicitly):
        -Renamed setTabIndex() to setTabIndexExplicitly() so as not to hide
         behind and/or be confused for HTMLElement::setTabIndex

        * html/HTMLAnchorElement.cpp:
        * html/HTMLAnchorElement.h:
        (WebCore::HTMLAnchorElement::tabIndex):
        * html/HTMLGenericFormElement.cpp:
        * html/HTMLGenericFormElement.h:
        (WebCore::HTMLGenericFormElement::tabIndex):
        -Anchors and form elements are normally focusable, and need to avert the
         check for focusability in HTMLElement::tabIndex
         because tabIndex could be queried before a first layout happens.

        * html/HTMLElement.cpp:
        (WebCore::HTMLElement::parseMappedAttribute):
        -Function Node::setTabIndex changed to Node::setTabIndexExplicitly
        (WebCore::HTMLElement::isFocusable):
        -The concept of being focusable now needs to account for tabindex
         attribute.
        (WebCore::HTMLElement::tabIndex):
        -HTML5 specifies that querying tabindex for elements that aren't
         focusable shall return -1
        (WebCore::HTMLElement::setTabIndex):
        -New default implementation
        * html/HTMLElement.h:

        * html/HTMLLegendElement.cpp:
        (WebCore::HTMLLegendElement::focus):
        -Now with HTML5's enhanced specification of tabindex, legend elements
         themselves shall focus (if they should), and not the first form element 
         they encapsulate.  This matches Firefox behavior.  HTMLLabelElements
         still forward focus to the encapsulated element.  This also matches
         other browsers. 

        * html/HTMLAreaElement.cpp:
        (WebCore::HTMLAreaElement::isFocusable):
        * html/HTMLAreaElement.h:
        -HTMLAreaElement isn't subject to the same focusability requirements as
         its parent, HTMLAnchorElement. Default HTMLElement implementation is
         desired.  

        * html/HTMLFieldSetElement.cpp:
        (WebCore::HTMLFieldSetElement::isFocusable):
        * html/HTMLLegendElement.cpp:
        (WebCore::HTMLLegendElement::isFocusable):
        * html/HTMLOptGroupElement.cpp:
        (WebCore::HTMLOptGroupElement::isFocusable):
        * html/HTMLOptionElement.cpp:
        (WebCore::HTMLOptionElement::isFocusable):
        -These elements aren't subject to the same focusability requirements as
         their parent, HTMLGenericFormElement. Default HTMLElement 
         implementation is desired.  

        * html/HTMLAnchorElement.idl:
        * html/HTMLAreaElement.idl:
        * html/HTMLButtonElement.idl:
        * html/HTMLElement.idl:
        * html/HTMLInputElement.idl:
        * html/HTMLLabelElement.idl:
        * html/HTMLLegendElement.idl:
        * html/HTMLObjectElement.idl:
        * html/HTMLSelectElement.idl:
        * html/HTMLTextAreaElement.idl:
        -Moving tabindex attribute, focus and blur methods from descendants of
         HTMLElement to HTMLElement

2008-04-28  Dan Bernstein  <mitz@apple.com>

        Reviewed by Dave Hyatt.

        - support multiple box- and text-shadows

        Tests: fast/css/shadow-multiple.html
               fast/repaint/shadow-multiple-horizontal.html
               fast/repaint/shadow-multiple-strict-horizontal.html
               fast/repaint/shadow-multiple-strict-vertical.html
               fast/repaint/shadow-multiple-vertical.html

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::valueForShadow): Changed to account for reversing the order
        of the shadow values in the ShadowData list.

        * css/CSSValueList.cpp:
        (WebCore::CSSValueList::prepend): Added.
        * css/CSSValueList.h:

        * rendering/InlineFlowBox.cpp:
        (WebCore::InlineFlowBox::placeBoxesHorizontally): Changed to account for
        all shadows in overflow calculation.
        (WebCore::InlineFlowBox::placeBoxesVertically): Ditto.
        (WebCore::InlineFlowBox::paint): Changed to account for all shadows
        when testing for intersection with the damage rect.
        (WebCore::InlineFlowBox::paintTextDecorations): Changed to paint all
        shadows.

        * rendering/InlineTextBox.cpp:
        (WebCore::paintTextWithShadows): Factored out from paint() and changed
        to paint all shadows.
        (WebCore::InlineTextBox::paint): Moved the text painting code out to
        paintTextWithShadows(). Changed to not paint shadows for markers and
        composition underlines and in "force black text" mode.
        (WebCore::InlineTextBox::paintSelection):
        (WebCore::InlineTextBox::paintCompositionBackground):
        (WebCore::InlineTextBox::paintDecoration): Changed to paint all shadows.
        * rendering/InlineTextBox.h: Changed some public methods to private
        or protected.

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::overflowHeight): Changed to account for all
        shadows.
        (WebCore::RenderBlock::overflowWidth): Ditto.
        (WebCore::RenderBlock::overflowLeft): Ditto.
        (WebCore::RenderBlock::overflowTop): Ditto.
        (WebCore::RenderBlock::overflowRect): Ditto.
        (WebCore::RenderBlock::layoutBlock): Ditto.

        * rendering/RenderFlexibleBox.cpp:
        (WebCore::RenderFlexibleBox::layoutBlock): Ditto.

        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::calculateRects): Ditto.

        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::paintBoxShadow): Changed to paint all shadows.
        Changed to avoid clipping out the box if it has a fully opaque
        background.
        (WebCore::RenderObject::repaintAfterLayoutIfNeeded): Changed to account
        for all shadows.
        (WebCore::RenderObject::selectionForegroundColor): Cleaned up.
        (WebCore::RenderObject::adjustRectForOutlineAndShadow): Changed to
        account for all shadows.

        * rendering/RenderReplaced.cpp:
        (WebCore::RenderReplaced::adjustOverflowForBoxShadow): Ditto.

        * rendering/RenderStyle.cpp:
        (WebCore::RenderStyle::setTextShadow): Changed to prepend when adding
        so that the stacking order of shadows when painting will be "first o
        top".
        (WebCore::RenderStyle::setBoxShadow): Ditto.

        * rendering/RenderTable.cpp:
        (WebCore::RenderTable::layout): Changed to account for all shadows.

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

        Fix some more Windows build errors in COMPtr

        * platform/win/COMPtr.h:
        (WTF::): Define DefaultHash<COMPtr<P> > by using PtrHash<COMPtr<P> >,
        which is just a copy of PtrHash<RefPtr<P> >.

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

        Fix some Windows build errors in COMPtr

        * platform/win/COMPtr.h: Explicitly name the WTF namespace when using
        HashTableDeletedValueType.

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

        Fix some Windows build errors in FontPlatfomrData

        * platform/graphics/win/FontPlatformData.h: Removed the Deleted
        constructor and replaced it with a HashTableDeletedValueType
        constructor. Also added isHashTableDeletedValue() and
        hashTableDeletedFontValue().

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

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

        Canvas can't draw itself into its own buffer.  Make sure the dirtying call comes after the image()
        has been accessed.  Technically willDraw should be renamed to didDraw and all calls should be moved
        to after draws have occurred (since if the draw op itself wants to reference the image it shouldn't get
        a dirty copy either), but I'll take that up with olliej when he wakes up. :)

        Reviewed by Dan Bernstein

        Added fast/canvas/canvasDrawsIntoSelf.html

        * html/CanvasRenderingContext2D.cpp:
        (WebCore::CanvasRenderingContext2D::drawImage):

2008-04-28  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Geoff Garen.

        <rdar://problem/5825192> Replace use of Gestalt with BSD sysctl

        * platform/graphics/mac/MediaPlayerPrivateQTKit.mm:
        (WebCore::MediaPlayerPrivate::isAvailable): There is no need to check QuickTime version post-Tiger,
        as it will never be below 7.3 again. This change may make library loading happen earlier in
        some cases, hopefully, that's not a big deal.

2008-04-25  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Darin.

        Fix run-webkit-tests --threading
        and provisionally fix <https://bugs.webkit.org/show_bug.cgi?id=18661>
        Proxy server issue in Sunday's Nightly

        Adjusted for JavaScriptCore changes: added a new member to ClassInfo objects, turned
        ClassInfo::propHashTable into a function, made getPropertyAttributes() take an ExecState pointer.

        * bindings/js/JSAudioConstructor.cpp:
        * bindings/js/JSDOMWindowBase.cpp:
        * bindings/js/JSDOMWindowCustom.cpp:
        (WebCore::JSDOMWindow::customGetOwnPropertySlot):
        * bindings/js/JSDOMWindowWrapper.cpp:
        (WebCore::JSDOMWindowWrapper::getPropertyAttributes):
        * bindings/js/JSDOMWindowWrapper.h:
        * bindings/js/JSEventTargetBase.h:
        (WebCore::JSEventTargetPrototype::classInfo):
        * bindings/js/JSHTMLInputElementBase.cpp:
        * bindings/js/JSHTMLOptionElementConstructor.cpp:
        * bindings/js/JSHistoryCustom.cpp:
        (WebCore::JSHistory::customGetOwnPropertySlot):
        * bindings/js/JSImageConstructor.cpp:
        * bindings/js/JSInspectedObjectWrapper.cpp:
        * bindings/js/JSInspectorCallbackWrapper.cpp:
        * bindings/js/JSLocationCustom.cpp:
        (WebCore::JSLocation::customGetOwnPropertySlot):
        (WebCore::JSLocation::customPut):
        * bindings/js/JSNamedNodesCollection.cpp:
        * bindings/js/JSQuarantinedObjectWrapper.cpp:
        * bindings/js/JSRGBColor.cpp:
        * bindings/js/JSStorageCustom.cpp:
        (WebCore::JSStorage::customPut):
        * bindings/js/JSXMLHttpRequestConstructor.cpp:
        * bindings/js/JSXSLTProcessor.cpp:
        * bindings/scripts/CodeGeneratorJS.pm:
        * bridge/objc/objc_runtime.mm:
        * bridge/runtime_array.cpp:
        * bridge/runtime_object.cpp:

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

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

        The arguments in drawImage were reversed when I switched away from the image buffer method.

        Reviewed by Tim Hatcher

        Added fast/canvas/drawImage.html

        * html/CanvasRenderingContext2D.cpp:
        (WebCore::CanvasRenderingContext2D::drawImage):

2008-04-28  Holger Hans Peter Freyther  <zecke@selfish.org>

        Reviewed by Simon.

        Fix the crash on http://www.orad.pl. We called end too early.

        1. we need a ::write that will pause the parser due a pending
        script
        2. we need a second write to queue data (tricky part)
        3. we need to get a finish call (document loaded)
        4. we resume the script and parse, schedule loading of a new script
        and have called end
        5. we resume the new script and we get a crash

        This bug is hard to trigger, e.g. if the web server is only allowing
        one connection per client/IP. This is why we need to sleep in the scripts. We
        want to make sure that the page is first fully received before serving the
        scripts.

        Test: http/tests/misc/xmltokenizer-do-not-crash.pl

        * dom/XMLTokenizer.cpp:

2008-04-28  Ariya Hidayat  <ahidayat@trolltech.com>

        Reviewed by Simon.

        Fix rounded corner on combo box with CSS border

        * platform/qt/RenderThemeQt.cpp:
        (WebCore::RenderThemeQt::adjustMenuListButtonStyle):

2008-04-28  Ariya Hidayat  <ahidayat@trolltech.com>

        Reviewed by Simon.

        Fix CSS border does not show up for combo boxes

        Do not clear the border when painting the combo box for 'select' form element

        * platform/qt/RenderThemeQt.cpp:

2008-04-28  Olivier Goffart  <ogoffart@trolltech.com>

        Reviewed by Simon.

        Avoid comparing to 0 in qFuzzyCompare for increased
        numeric stability.

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

2008-04-28  Benjamin Meyer  <bmeyer@trolltech.com>

        Reviewed by Simon.

        Fixes: Pages returning 404 with content are not displayed.

        A web page that returns 404 can still have content.

        * platform/network/qt/QNetworkReplyHandler.cpp:
        (WebCore::QNetworkReplyHandler::finish):

2008-04-28  Paul Olav Tvete  <paul@trolltech.com>

        Reviewed by Simon.

        Fix compiler warning; Avoid the implicity QString(const char *)
        constructor

        * platform/qt/RenderThemeQt.cpp:
        (WebCore::RenderThemeQt::fallbackStyle):

2008-04-28  Tor Arne Vestbø  <tavestbo@trolltech.com>

        Reviewed by Simon.

        Prevent middle-click from triggering open URL from clipboard when the event has already been accepted.

        * platform/qt/PlatformScrollBarQt.cpp:
        (WebCore::PlatformScrollbar::handleMousePressEvent):

2008-04-28  Tor Arne Vestbø  <tavestbo@trolltech.com>

        Reviewed by Simon.

        Fix scrollbar behavior in QtWebKit to match QScrollBar.

        Right click context menu is now supported, along with
        middle click to center slider thumb over mouse cursor.

        * platform/qt/PlatformScrollBar.h:
        * platform/qt/PlatformScrollBarQt.cpp:
        (tr):
        (WebCore::PlatformScrollbar::pixelPosToRangeValue):
        (WebCore::PlatformScrollbar::handleMousePressEvent):
        (WebCore::PlatformScrollbar::handleMouseReleaseEvent):
        (WebCore::PlatformScrollbar::handleContextMenuEvent):

2008-04-28  Tor Arne Vestbø  <tavestbo@trolltech.com>

        Reviewed by Simon.

        Implemented channel-based logging for QtWebKit.

        Comma-separated log channels are read from the QT_WEBKIT_LOG environment variable.
        Warnings for notImplemented() is still output by default, but can be disabled
        by setting DISABLE_NI_WARNINGS=1.

        * WebCore.pro:
        * platform/NotImplemented.h:
        * platform/qt/LoggingQt.cpp: Added.
        (WebCore::getChannelFromName):
        (WebCore::InitializeLoggingChannelsIfNecessary):

2008-04-28  Simon Hausmann  <shausman@trolltech.com>

        Reviewed by Holger.

        Fixes: Popups/Context menu in WebKit appearing at the wrong location when embedded in the graphics view or using multiple screens

        Give the popups the right parent widget and the right coordinates relative within the parent.

        * platform/qt/PopupMenuQt.cpp:
        (WebCore::PopupMenu::show):

2008-04-28  Tor Arne Vestbø  <tavestbo@trolltech.com>

        Reviewed by Simon.

        Fixes: Tabbing to a checkbox/button doesn't work on Win/X11

        Respect platform settings for tabbing to all controls.

        * page/qt/EventHandlerQt.cpp:

2008-04-28  Tor Arne Vestbø  <tavestbo@trolltech.com>

        Reviewed by Simon.

        First part of the fix for tabbing to a checkbox/button doesn't work on Win/X11

        Draw controls instead of pimitive elements, to get focus rects for free.

        * platform/qt/RenderThemeQt.cpp:
        (WebCore::RenderThemeQt::paintButton):

2008-04-28  Lincoln Ramsay  <lincoln.ramsay@trolltech.com>

        Reviewed by Simon.

        Compile when QT_NO_CLIPBOARD is defined.

        * platform/qt/ClipboardQt.cpp:
        (WebCore::ClipboardQt::ClipboardQt):
        (WebCore::ClipboardQt::clearData):
        (WebCore::ClipboardQt::clearAllData):
        (WebCore::ClipboardQt::setData):
        (WebCore::ClipboardQt::declareAndWriteDragImage):
        (WebCore::ClipboardQt::writeURL):
        (WebCore::ClipboardQt::writeRange):
        * platform/qt/PasteboardQt.cpp:
        (WebCore::Pasteboard::writeSelection):
        (WebCore::Pasteboard::plainText):
        (WebCore::Pasteboard::documentFragment):
        (WebCore::Pasteboard::writeURL):
        (WebCore::Pasteboard::writeImage):

2008-04-28  Ariya Hidayat  <ariya.hidayat@trolltech.com>

        Reviewed by Simon.

        Draw the arrow button on the styled combo box using the fallback ("Windows") style

        * platform/qt/RenderThemeQt.cpp:
        (WebCore::RenderThemeQt::RenderThemeQt):
        (WebCore::RenderThemeQt::~RenderThemeQt):
        (WebCore::RenderThemeQt::fallbackStyle):
        (WebCore::RenderThemeQt::paintMenuListButton):
        (WebCore::RenderThemeQt::adjustMenuListButtonStyle):
        * platform/qt/RenderThemeQt.h:

2008-04-28  Simon Hausmann  <hausmann@webkit.org>

        Reviewed by Holger.

        Fix positioning of native widgets (plugins).

        Correctly convert the coordinates of the Widget in Widget::setFrameGeometry()
        to be relative to the containing toplevel QWidget using convertToContainingWindow().

        Note: convertToContainingWindow() takes child coordinates.

        * platform/qt/WidgetQt.cpp:
        (WebCore::Widget::frameGeometry):
        (WebCore::Widget::setFrameGeometry):

2008-04-28  Holger Hans Peter Freyther  <zecke@selfish.org>

        Reviewed by Simon.

        plugins: fix scrolling issues

        When scrolling you can see artefacts that remain on the screen, they
        seem to originate from the backingstore handling. I'm not entirely sure
        where they come from, my workarounds involved a
        data->m_widget->parentWidget()->update() call in Widget::geometryChanged or
        handling widgets with a native QWidget embedded like web pages with a
        static background. This needs more investigations, I think the ScrollView
        change is cleaner than the brute force in Widget::geometryChanged

        Focus handling seems to be broken as well and needs further work, we don't
        clip plugin QWidgets and they can draw out of their bounds, e.g. on the ScrollBar,
        the z-order is likely not honored as well.

        * platform/ScrollView.h:
        * platform/qt/ScrollViewQt.cpp:
        (WebCore::ScrollView::ScrollViewPrivate::ScrollViewPrivate):
        (WebCore::ScrollView::ScrollViewPrivate::scrollBackingStore):
        (WebCore::ScrollView::addChild):
        (WebCore::ScrollView::removeChild):
        (WebCore::ScrollView::incrementNativeWidgetCount):
        (WebCore::ScrollView::decrementNativeWidgetCount):
        (WebCore::ScrollView::hasNativeWidgets):

2008-04-28  Holger Hans Peter Freyther  <zecke@selfish.org>

        Reviewed by Simon.

        Add manual test to test placement of QWidgets in iframe's

        * manual-tests/qt/main.html: Added.
        * manual-tests/qt/qtplugin.html: Added.

2008-04-28  Simon Hausmann  <hausmann@webkit.org>

        Fix the build with ENABLE_DATABASE=0 (Qt/Windows) by including
        SecurityOrigin.h. It's used in the file and also implicitly included
        through the database headers.

        * page/DOMWindow.cpp:

2008-04-28  Simon Hausmann  <hausmann@webkit.org>

        Prospective Wx build fix.

        * platform/graphics/wx/FontPlatformData.h:

2008-04-28  Simon Hausmann  <hausmann@webkit.org>

        Reviewed by Alp.

        Gtk build fix, similar to the changes done in r32609.

        * platform/graphics/gtk/FontPlatformData.h:
        (WebCore::FontPlatformData::FontPlatformData):
        (WebCore::FontPlatformData::isHashTableDeletedValue):
        (WebCore::FontPlatformData::hashTableDeletedFontValue):

2008-04-28  Simon Hausmann  <hausmann@webkit.org>

        Prospective build fix. After r32609 it seems the workaround here
        is not needed anymore. With gcc 4.2/4.3 before 32609 the workaround
        is needed for compilation, after 32609 compilation only succeeds
        without the workaround.

        * plugins/PluginPackage.h: Removed workaround of extra StorageTraits
        specification for the custom hash function of PluginPackage used in
        PluginSet.

2008-04-28  Tor Arne Vestbø  <tavestbo@trolltech.com>

        Reviewed by Simon.

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

        Fix scrollbar painting issues in QtWebKit.

        Hovering and click-draging outside of the scrollbar would
        produce unexpected and inconcistent results. We also didn't
        pass on leave-events to the underlying WebKit code, which
        was nessecary to implement the paint fix.

        * platform/qt/PlatformScrollBarQt.cpp:
        (WebCore::PlatformScrollbar::handleMouseMoveEvent):
        (WebCore::PlatformScrollbar::handleMouseOutEvent):
        (WebCore::PlatformScrollbar::handleMouseReleaseEvent):

2008-04-27  Oliver Hunt  <oliver@apple.com>

        Reviewed by Maciej.

        Bug 17173: HTML5 Canvas API requires us to ignore certain operations
        <https://bugs.webkit.org/show_bug.cgi?id=17173>

        This fixes the semantics of a number of Canvas functions to match
        the new HTML5 non-throwing semantics.

        Test: fast/canvas/canvas-path-with-inf-nan-dimensions.html

        * bindings/js/JSCanvasRenderingContext2DCustom.cpp:
        (WebCore::JSCanvasRenderingContext2D::strokeRect):
        * html/CanvasRenderingContext2D.cpp:
        (WebCore::CanvasRenderingContext2D::moveTo):
        (WebCore::CanvasRenderingContext2D::lineTo):
        (WebCore::CanvasRenderingContext2D::quadraticCurveTo):
        (WebCore::CanvasRenderingContext2D::bezierCurveTo):
        (WebCore::CanvasRenderingContext2D::arcTo):
        (WebCore::CanvasRenderingContext2D::arc):
        (WebCore::validateRectForCanvas):
        (WebCore::CanvasRenderingContext2D::rect):
        (WebCore::CanvasRenderingContext2D::clearRect):
        (WebCore::CanvasRenderingContext2D::fillRect):
        (WebCore::CanvasRenderingContext2D::strokeRect):
        * html/CanvasRenderingContext2D.h:
        * html/CanvasRenderingContext2D.idl:

2008-04-27  Rob Buis  <buis@kde.org>

        Reviewed by Adele.

        https://bugs.webkit.org/show_bug.cgi?id=18652
        onchange events don't seem to fire for input[type=range] controls.

        Fire changeEvent when dragging the slider.

        Test: fast/forms/slider-onchange-event.html

        * rendering/RenderSlider.cpp:
        (WebCore::RenderSlider::valueChanged):

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

        Reviewed by Maciej.

        - update for compatibility with HashTable that no longer has optimization to share
          implementation between hash tables with integers, pointers, RefPtr, and String
          objects as keys

        * bindings/js/JSSVGPODTypeWrapper.h:
        (WebCore::PODTypeReadWriteHashInfo::PODTypeReadWriteHashInfo): Added constructor
        for HashTableDeletedValue.
        (WebCore::PODTypeReadWriteHashInfo::isHashTableDeletedValue): Added.
        (WebCore::PODTypeReadWriteHashInfoTraits::constructDeletedValue): Added.
        (WebCore::PODTypeReadWriteHashInfoTraits::isDeletedValue): Added.

        * dom/Document.cpp: Made changedDocuments internal to the file rather than a
        static data member of Document.
        (WebCore::FormElementKey::ref): Removed unneeded check for deleted value -- this
        will never be called on a deleted element.
        (WebCore::FormElementKey::deref): Ditto.

        * dom/Document.h: Added HashTableDeletedValue constructor and isHashTableDeletedValue
        to FormElementKey. Changed FormElementKeyHashTraits to use construct/isDeletedValue.
        Got rid of the changedDocuments data member. Changed iconURL to be an inline that
        returns a const String&.

        * dom/StyledElement.cpp: Changed MappedAttributeKeyTraits to use
        construct/isDeletedValue.

        * page/mac/AXObjectCacheMac.mm:
        (WebCore::AXObjectCache::getAXID): Call isDeletedValue instead of deletedValue.

        * platform/SecurityOriginHash.h: Added overload so that SecurityOriginHash can work
        with raw pointers as well as RefPt (helpful with the new RefPtrHashMap). Eliminated
        SecurityOriginTraits, since we can now use the default traits. Changed the value of
        safeToCompareToEmptyOrDeleted to false, since it's not safe to compare a deleted
        value using this hash function. I don't think it was safe before either; I'm not sure
        why it didn't cause a problem before.

        * platform/cf/SchedulePair.h: Removed SchedulePairTraits -- custom traits are no
        longer needed.

        * platform/graphics/FontCache.cpp:
        (WebCore::FontPlatformDataCacheKey::FontPlatformDataCacheKey): Added constructor
        for HashTableDeletedValue.
        (WebCore::FontPlatformDataCacheKey::isHashTableDeletedValue): Added.
        (WebCore::FontPlatformDataCacheKey::hashTableDeletedSize): Added.
        (WebCore::FontPlatformDataCacheKeyTraits::constructDeletedValue): Added.
        (WebCore::FontPlatformDataCacheKeyTraits::isDeletedValue): Added.
        (WebCore::FontDataCacheKeyTraits::constructDeletedValue): Added.
        (WebCore::FontDataCacheKeyTraits::isDeletedValue): Added.

        * platform/graphics/IntSizeHash.h: Changed HashTraits<IntSize> to use
        construct/isDeletedValue.

        * platform/graphics/mac/FontPlatformData.h:
        (WebCore::FontPlatformData::FontPlatformData): Added constructor for
        HashTableDeletedValue.
        (WebCore::FontPlatformData::isHashTableDeletedValue): Added.
        (WebCore::FontPlatformData::hashTableDeletedFontValue): Added.

        * platform/text/PlatformString.h:
        (WebCore::String::swap): Added. Avoids any refcount churn when swapping two strings.
        (WebCore::String::String): Added constructor for HashTableDeletedValue.
        (WebCore::String::isHashTableDeletedValue): Added.
        (WebCore::swap): Added. Avoids any refcount churn when swapping two strings.

        * platform/text/StringHash.h: Changed specialization of HashTraits for
        WebCore::String to use the deleted value now defined in that class and removed
        the code to do ref/deref. Removed HashKeyStorageTraits specializations.
        
        * platform/win/COMPtr.h: Changed specialization of HashTraits for
        COMPtr to use the deleted value now defined in that class and removed
        the code to do ref/deref. Removed HashKeyStorageTraits specializations.
        (COMPtr::COMPtr): Added constructor for HashTableDeletedValue.
        (COMPtr::isHashTableDeletedValue): Added.
        (COMPtr::query): Removed inline keyword not needed since functions defined in the
        class definition are automatically marked inline.
        (COMPtr::hashTableDeletedValue): Added.

        * storage/DatabaseTracker.h: Removed now-unneeded SecurityOriginTraits.
        * storage/LocalStorage.h: Ditto.
        * storage/OriginQuotaManager.h: Ditto.
        * storage/SessionStorage.h: Ditto.

        * svg/SVGAnimatedTemplate.h:
        (WebCore::SVGAnimatedTypeWrapperKey::SVGAnimatedTypeWrapperKey): Added constructor
        for HashTableDeletedValue.
        (WebCore::SVGAnimatedTypeWrapperKey::isHashTableDeletedValue): Added.
        (WebCore::SVGAnimatedTypeWrapperKeyHashTraits::constructDeletedValue): Added.
        (WebCore::SVGAnimatedTypeWrapperKeyHashTraits::isDeletedValue): Added.

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

        Reviewed by Tim Hatcher.

        Initialize the extra member of the xmlEntity struct when using libxml2 >= 2.6.27.

        * dom/XMLTokenizer.cpp:

2008-04-27  Dan Bernstein  <mitz@apple.com>

        Reviewed by Darin Adler.

        - fix https://bugs.webkit.org/show_bug.cgi?id=3729
          <rdar://problem/4036353> REGRESSION: arrow keys move insertion bar backwards in RTL text

        Test: editing/selection/move-left-right.html

        * editing/SelectionController.cpp:
        (WebCore::SelectionController::modifyMovingRight): Added. Currently
        implemented for character granularity, all other being treated as
        "forward".
        (WebCore::SelectionController::modifyMovingForward): Renamed
        modifyMovingRightForward() to this.
        (WebCore::SelectionController::modifyMovingLeft): Added. Currently
        implemented for character granularity, all other being treated as
        "backward".
        (WebCore::SelectionController::modifyMovingBackward): Renamed
        modifyMovingLeftBackward() to this.
        (WebCore::SelectionController::modify): Changed to call either the
        visual (left/right) or logical (backward/forward) methods depending on
        the 'dir' argument for moves.
        * editing/SelectionController.h:
        * editing/VisiblePosition.cpp:
        (WebCore::VisiblePosition::leftVisuallyDistinctCandidate): Added.
        (WebCore::VisiblePosition::left): Added.
        (WebCore::VisiblePosition::rightVisuallyDistinctCandidate): Added.
        (WebCore::VisiblePosition::right): Added.
        * editing/VisiblePosition.h:

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

        Reviewed by Maciej Stachowiak.

        Fix for <rdar://problem/5893385> Need to provide access to the CanvasRenderingContext2D prototype
        Add a JS constructor for CanvasRenderingContext2D.

        * html/CanvasRenderingContext2D.idl:
        * page/DOMWindow.idl:

2008-04-26  Adam Barth  <hk9565@gmail.com>

        Reviewed by Adam Roben and Sam Weinig.

        Fixes bug http://bugs.webkit.org/show_bug.cgi?id=17331
        Fixes bug http://bugs.webkit.org/show_bug.cgi?id=16848
        
        Updates postMessage implementation to match HTML 5 specification:
        1) Adds origin parameter to postMessage.
        2) Removes domain and uri attributes of MessageEvent in favor of
           origin attribute.

        In order to do this correctly, we need to distinguish between hosts and domains
        in the SecurityOrigin class. There are now three ways to compare security origins:
        1) isSameSchemeHostPort compares scheme, host, and port, and is used for postMessage
        2) equal compares all aspects of the security origin, and is used for hash keys
        3) canAccess understands the semantics of schemes such as file:// and data:// URLs,
           and should be used for scripting access checks.

        Changed SecurityOrigin::toString() to generate identifiers that are suitable for 
        being used as a MessageEvent's origin property. In the future, they could be used 
        as database string identifiers as well. Re-used KURL parser to parse serialized 
        SecurityOrigins.

        Collin Jackson <collinj-webkit@collinjackson.com> also contributed to this patch.
        
        Tests: http/tests/security/postMessage/invalid-origin-throws-exception.html
               http/tests/security/postMessage/javascript-page-still-sends-origin.html
               http/tests/security/postMessage/origin-unaffected-by-base-tag.html
               http/tests/security/postMessage/origin-unaffected-by-document-domain.html
               http/tests/security/postMessage/target-origin.html

        * WebCore.base.exp:
        * bindings/js/JSDOMWindowCustom.cpp:
        (WebCore::JSDOMWindow::postMessage):
        * dom/Document.cpp:
        (WebCore::Document::domain):
        * dom/MessageEvent.cpp:
        (WebCore::MessageEvent::MessageEvent):
        (WebCore::MessageEvent::initMessageEvent):
        * dom/MessageEvent.h:
        (WebCore::MessageEvent::origin):
        * dom/MessageEvent.idl:
        * html/CanvasRenderingContext2D.cpp:
        (WebCore::CanvasRenderingContext2D::checkOrigin):
        (WebCore::CanvasRenderingContext2D::createPattern):
        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::postMessage):
        * page/DOMWindow.h:
        * page/DOMWindow.idl:
        * platform/SecurityOrigin.cpp:
        (WebCore::SecurityOrigin::SecurityOrigin):
        (WebCore::SecurityOrigin::create):
        (WebCore::SecurityOrigin::createForFrame):
        (WebCore::SecurityOrigin::copy):
        (WebCore::SecurityOrigin::setDomainFromDOM):
        (WebCore::SecurityOrigin::canAccess):
        (WebCore::SecurityOrigin::isSecureTransitionTo):
        (WebCore::SecurityOrigin::toString):
        (WebCore::SecurityOrigin::createFromString):
        (WebCore::SecurityOrigin::createFromDatabaseIdentifier):
        (WebCore::SecurityOrigin::databaseIdentifier):
        (WebCore::SecurityOrigin::equal):
        (WebCore::SecurityOrigin::isSameSchemeHostPort):
        * platform/SecurityOrigin.h:
        (WebCore::SecurityOrigin::host):
        (WebCore::SecurityOrigin::domain):
        * platform/SecurityOriginHash.h:
        (WebCore::SecurityOriginTraits::deletedValue):
        * storage/DatabaseTracker.cpp:
        (WebCore::DatabaseTracker::hasEntryForDatabase):
        (WebCore::DatabaseTracker::originPath):
        (WebCore::DatabaseTracker::fullPathForDatabase):
        (WebCore::DatabaseTracker::populateOrigins):
        (WebCore::DatabaseTracker::databaseNamesForOrigin):
        (WebCore::DatabaseTracker::detailsForNameAndOrigin):
        (WebCore::DatabaseTracker::setDatabaseDetails):
        (WebCore::DatabaseTracker::setQuota):
        (WebCore::DatabaseTracker::addDatabase):
        (WebCore::DatabaseTracker::deleteOrigin):
        (WebCore::DatabaseTracker::deleteDatabase):

2008-04-26  Kevin Ollivier  <kevino@theolliviers.com>

        wx build fix. Add the AX*ActionVerb functions to the wx build.
        
        * platform/wx/LocalizedStringsWx.cpp:
        (WebCore::AXButtonActionVerb):
        (WebCore::AXRadioButtonActionVerb):
        (WebCore::AXTextFieldActionVerb):
        (WebCore::AXCheckedCheckBoxActionVerb):
        (WebCore::AXUncheckedCheckBoxActionVerb):
        (WebCore::AXLinkActionVerb):

2008-04-26  Robin Dunn  <robin@alldunn.com>

        Reviewed by Kevin Ollivier.

        wx build fix. Add needed wx includes for compilation.

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

        * platform/wx/FileSystemWx.cpp:

2008-04-26  Anatoli Papirovski  <apapirovski@mac.com>

        Reviewed by Dave Hyatt.

        Fix for https://bugs.webkit.org/show_bug.cgi?id=18583
        WebKit should ignore declarations with a negative value for
        line-height and font-size, including in the shorthand font form.

        Tests: fast/css/font-size-negative.html
               fast/css/line-height-negative.html

        * css/CSSParser.cpp:
        (WebCore::CSSParser::parseValue):
        (WebCore::CSSParser::parseFont):

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

        Reviewed by Sam.

        Add empty ApplicationCacheStorage class.
        
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * loader/appcache/ApplicationCacheStorage.cpp: Added.
        (WebCore::cacheStorage):
        * loader/appcache/ApplicationCacheStorage.h: Added.

2008-04-24  Sam Weinig  <sam@webkit.org>

        Reviewed by Geoffrey Garen.

        Replace the JSDOMWindow with a new one instead of clearing it.

        * bindings/js/JSDOMWindowBase.cpp:
        (WebCore::JSDOMWindowBase::clear):
        Don't reset the window.

        * bindings/js/kjs_proxy.cpp:
        (WebCore::KJSProxy::clear):
        Replace the current JSDOMWindow stored in the wrapper window
        with a new one.

        * history/CachedPage.cpp:
        (WebCore::CachedPage::CachedPage):
        (WebCore::CachedPage::restore):
        (WebCore::CachedPage::clear):
        * history/CachedPage.h:
        Instead of storing the builtins, properties and localstorage in
        special holding structs, store the entire JSDOMWindow.

        For the case of a page that has no JSDOMWindow before it's first
        navigation, has one created while it is in the cache and is then
        navigated back, create a new JSDOMWindow to keep the assumption
        in JSDOMWindowWrapper that it always has the correct window.

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::clear):
        We must clear the DOMWindow first, so that we create a new JSDOMWindow,
        it gets a new one.

        * page/Frame.cpp:
        (WebCore::Frame::clearDOMWindow):
        Null out the domWindow so that on the next access, a new one is
        created.

2008-04-25  Sam Weinig  <sam@webkit.org>

        Reviewed by Mark Rowe.

        The EventListeners need to operate and store JSDOMWindows, not JSDOMWrapperWindows.

        * bindings/js/JSDOMWindowBase.cpp:
        (WebCore::JSDOMWindowBase::~JSDOMWindowBase):
        (WebCore::JSDOMWindowBase::findOrCreateJSEventListener):
        (WebCore::JSDOMWindowBase::findOrCreateJSUnprotectedEventListener):
        * bindings/js/JSSVGLazyEventListener.cpp:
        (WebCore::JSSVGLazyEventListener::JSSVGLazyEventListener):
        * bindings/js/JSSVGLazyEventListener.h:
        * bindings/js/kjs_events.cpp:
        (WebCore::JSAbstractEventListener::handleEvent):
        (WebCore::JSUnprotectedEventListener::JSUnprotectedEventListener):
        (WebCore::JSUnprotectedEventListener::~JSUnprotectedEventListener):
        (WebCore::JSUnprotectedEventListener::window):
        (WebCore::JSUnprotectedEventListener::clearWindow):
        (WebCore::JSEventListener::JSEventListener):
        (WebCore::JSEventListener::~JSEventListener):
        (WebCore::JSEventListener::window):
        (WebCore::JSEventListener::clearWindow):
        (WebCore::JSLazyEventListener::JSLazyEventListener):
        (WebCore::JSLazyEventListener::parseCode):
        * bindings/js/kjs_events.h:
        * bindings/js/kjs_proxy.cpp:
        (WebCore::KJSProxy::createHTMLEventHandler):
        (WebCore::KJSProxy::createSVGEventHandler):

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

        Rubber-stamped by Sam Weinig.

        Add some content to an empty ICU header file to prevent verification errors.

        * icu/unicode/utf_old.h:

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

        Fix tyop.
        
        * loader/DocumentLoader.cpp:
        (WebCore::DocumentLoader::scheduleApplicationCacheLoad):

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

        Reviewed by Sam.

        Add and honor offlineWebApplicationCacheEnabled setting.
        
        * WebCore.base.exp:
        * loader/DocumentLoader.cpp:
        (WebCore::DocumentLoader::scheduleApplicationCacheLoad):
        * loader/MainResourceLoader.cpp:
        (WebCore::MainResourceLoader::load):
        * loader/appcache/ApplicationCacheGroup.cpp:
        (WebCore::ApplicationCacheGroup::selectCache):
        (WebCore::ApplicationCacheGroup::selectCacheWithoutManifestURL):
        * page/Settings.cpp:
        (WebCore::Settings::Settings):
        (WebCore::Settings::setOfflineWebApplicationCacheEnabled):
        * page/Settings.h:
        (WebCore::Settings::offlineWebApplicationCacheEnabled):

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

        Reviewed by Adam.

        <rdar://problem/5629139>
        PluginInfoStoreWin needs to implement pluginNameForMIMEType().
        
        * plugins/PluginInfoStore.cpp:
        (WebCore::PluginInfoStore::pluginNameForMIMEType):

2008-04-25  Tor Arne Vestbø  <tavestbo@trolltech.com>

        Reviewed by Simon.

        Respect antialiasing hint when drawing focus rects.

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

2008-04-25  Holger Hans Peter Freyther  <zecke@selfish.org>

        Reviewed by Simon.

        networking: Use Qt::QueuedConnection in QNetworkReplyHandler

        Make sure we leave the networking backend before calling
        into WebCore. Otheriwse we might return to the networking
        backend when it is already deleted.

        * platform/network/qt/QNetworkReplyHandler.cpp:
        (WebCore::FormDataIODevice::setParent):
        (WebCore::QNetworkReplyHandler::start):

2008-04-25  Tor Arne Vestbø  <tavestbo@trolltech.com>

        Reviewed by Simon.

        Fix propagation of mouse double click events.

        Treat a mouse double click as a regular mouse press with just a different click count.

        * platform/qt/PlatformMouseEventQt.cpp:
        (WebCore::PlatformMouseEvent::PlatformMouseEvent):

2008-04-25  Tor Arne Vestbø  <tavestbo@trolltech.com>

        Reviewed by Simon.

        Fixes: Fix strange button sizes (push, radio, and check) in QtWebKit.

        We now use pixel metrics instead of fixed sizes for the
        button margins, or if the style supports layout rects we
        use the delta between the content rect and the layout rect.

        In adition we compensate for the difference between the size
        for content and the actual layout rect (if supported) by
        reporting back the layout rect to WebKit for page layout,
        and then inflating the rect we actually paint to.

        * platform/qt/RenderThemeQt.cpp:
        (WebCore::StylePainter::StylePainter):
        (WebCore::StylePainter::~StylePainter):
        (WebCore::RenderThemeQt::RenderThemeQt):
        (WebCore::inflateButtonRect):
        (WebCore::RenderThemeQt::adjustRepaintRect):
        (WebCore::RenderThemeQt::isControlStyled):
        (WebCore::computeSizeBasedOnStyle):
        (WebCore::RenderThemeQt::setCheckboxSize):
        (WebCore::RenderThemeQt::paintCheckbox):
        (WebCore::RenderThemeQt::setRadioSize):
        (WebCore::RenderThemeQt::adjustButtonStyle):
        (WebCore::RenderThemeQt::setButtonSize):
        (WebCore::RenderThemeQt::setButtonPadding):
        (WebCore::RenderThemeQt::paintButton):
        (WebCore::RenderThemeQt::adjustMenuListStyle):
        (WebCore::RenderThemeQt::setPopupPadding):
        (WebCore::RenderThemeQt::paintMenuList):
        * platform/qt/RenderThemeQt.h:

2008-04-25  Benjamin Meyer  <bmeyer@trolltech.com>

        Reviewed by Holger.

        Fixes: Valgrind warnings about uninitilized variables used in jumps

        * rendering/RenderText.cpp:
        (WebCore::RenderText::trimmedPrefWidths):

2008-04-25  Warwick Allison  <warwick@trolltech.com>

        Reviewed by Simon.

        Added simple getter function to PlatformScrollBar to return the
        maximum value. Needed in the WebKit/qt API.

        * platform/qt/PlatformScrollBar.h:

2008-04-25  Benjamin Meyer  <bmeyer@trolltech.com>

        Reviewed by Holger, Simon.

        Implement NoDrop, ZoomIn, and ZoomOut cursors

        * Resources/WebKitResources.qrc:
        * platform/qt/CursorQt.cpp:
        (WebCore::noDropCursor):
        (WebCore::notAllowedCursor):
        (WebCore::zoomInCursor):
        (WebCore::zoomOutCursor):

2008-04-25  Holger Hans Peter Freyther  <zecke@selfish.org>

        Reviewed by Simon.

        Handle the ListboxAppearance as 'TextField' as well. We are mainly interested in the background.

        RenderBox will call us to paint the outline/background, it is handled the same as a
        TextAreaAppearance in RenderTheme, handle it the same in the RenderThemeQt

        * platform/qt/RenderThemeQt.cpp:
        (WebCore::RenderThemeQt::paintTextField):

2008-04-25  Holger Hans Peter Freyther  <zecke@selfish.org>

        Reviewed by Simon.

        No reason to exit the application when we can not paint something. Replace the Q_ASSERT
        with a runtime check. Return true to indicate that we did not handle the painting
        of this element.

        * platform/qt/RenderThemeQt.cpp:
        (WebCore::RenderThemeQt::paintTextField):

2008-04-25  Holger Hans Peter Freyther  <zecke@selfish.org>

        Reviewed by Simon.

        Correct the comment. We are in painTextField and don't paint a button.

        * platform/qt/RenderThemeQt.cpp:
        (WebCore::RenderThemeQt::paintTextField):

2008-04-25  Holger Hans Peter Freyther  <zecke@selfish.org>

        Reviewed by Simon.

        Allow ListboxAppearance to take focus as well. Stolen from Tor Arne

        * platform/qt/RenderThemeQt.cpp:
        (WebCore::RenderThemeQt::supportsFocus):

2008-04-25  Simon Hausmann  <hausmann@webkit.org>

        Reviewed by Holger.

        Remove debug output.

        * platform/network/qt/ResourceHandleQt.cpp:
        (WebCore::ResourceHandle::loadResourceSynchronously):

2008-04-25  Holger Hans Peter Freyther  <zecke@selfish.org>

        Reviewed by Simon.

        Change the string for searchableIndexIntroduction() to match the mac
        and pass http/tests/misc/isindex-formdata.html

        * platform/qt/Localizations.cpp:

2008-04-25  Simon Hausmann  <hausmann@webkit.org>

        Reviewed by Holger.

        When we encounter a new/unknown HTTP request type report it back to WebCore as loading error.

        * platform/network/qt/QNetworkReplyHandler.cpp:
        (WebCore::QNetworkReplyHandler::start):

2008-04-25  Benjamin Meyer  <bmeyer@trolltech.com>

        Reviewed by Simon.

        Fix crash in the networking layer.

        Set the m_reply to null right after calling deleteLater().

        * platform/network/qt/QNetworkReplyHandler.cpp:
        (WebCore::QNetworkReplyHandler::finish):

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

        Rubber-stamped by Oliver Hunt.

        * WebCore.base.exp: Remove two symbols from the export list that don't need to be exported.

2008-04-24  Dan Bernstein  <mitz@apple.com>

        Reviewed by Dave Hyatt.

        - fix https://bugs.webkit.org/show_bug.cgi?id=18722
          <rdar://problem/5888360> REGRESSION (3.1 -> TOT): Webkit Nightly Build crashes when visiting i has a hotdog

        Test: fast/dynamic/float-remove-above-line.html

        * rendering/bidi.cpp:
        (WebCore::RenderBlock::layoutInlineChildren): Avoid adding floats that
        do not intrude into the line to its floats vector. When such floats go
        away, they do not dirty the line (because they do not intersect with it)
        and having it keep them in its floats vector is what caused the crash.

2008-04-24  Justin Garcia  <justin.garcia@apple.com>

        Reviewed by John Sullivan.
        
        It is possible, despite our safeguards, for createMarkup to iterate past the end of the Range
        that is passed to it.  Added a null check to prevent crashes in this situation (we won't crash but
        we will create too much markup), and added an ASSERT to hopefully catch the scenario in a debugger 
        and help us understand what's going on.

        * editing/markup.cpp:
        (WebCore::createMarkup):

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

        Reviewed by Sam Weinig.

        Remove code for calculating the glyph cache size.

        * WebCore.base.exp: Remove unused symbol.
        * platform/graphics/mac/FontCacheMac.mm: Remove code that is unused now that we do not compute the glyph cache size.
        * platform/mac/WebCoreSystemInterface.h: Remove unused symbol.
        * platform/mac/WebCoreSystemInterface.mm: Ditto.

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

        Reviewed by Sam Weinig.

        Add a definition of BUILDING_ON_LEOPARD to complement BUILDING_ON_TIGER.

        * WebCorePrefix.h:

2008-04-24  Cameron McCormack  <cam@mcc.id.au>

        Reviewed by Maciej Stachowiak.

        Ensure that changes to rx="" and ry="" attributes on an SVG <rect>
        element cause a relayout.

        Test: svg/dom/SVGRectElement/rect-modify-rx.svg

        * svg/SVGRectElement.cpp:
        (WebCore::SVGRectElement::svgAttributeChanged): Call needsLayout()
        when the attribute is rx or ry.
        (WebCore::SVGRectElement::hasRelativeValues): Return true when the
        attribute is rx or ry, since they also can have relative values.

2008-04-24  Adam Barth  <hk9565@gmail.com>

        Reviewed by Sam Weinig.

        Update the XMLHttpRequest header black list to match the spec.

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

2008-04-22  Feng Qian  <feng@chromium.org>

        Reviewed by Geoff Garen.

        Fix https://bugs.webkit.org/show_bug.cgi?id=18677
        Bug 18677: Synchronous event dispatch confuses the popup blocker into incorrectly blocking chat popups in gmail.com.

        Test: fast/events/nested-window-event.html

        * bindings/js/kjs_events.cpp:
        (WebCore::JSAbstractEventListener::handleEvent): Save and restore the current event around the event dispatch.

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

        Reviewed by Teh Mitzpettel

        Make it so PageGroups know what their own name is.

        * WebCore.base.exp:

        * page/Page.cpp:
        (WebCore::Page::setGroupName):
        (WebCore::Page::groupName):
        * page/Page.h:

        * page/PageGroup.cpp: Move the PageGroupMap into the PageGroup class.
        (WebCore::PageGroup::PageGroup): Added a c'tor that takes the group name as an argument instead of
          the initial Page.
        (WebCore::PageGroup::pageGroup): Handles creating and mapping names to groups
        * page/PageGroup.h:
        (WebCore::PageGroup::name):

2008-04-24  Adele Peterson  <adele@apple.com>

        Reviewed by Darin.

        Consolidate two versions of pathGetFileName.

        * html/HTMLFormElement.cpp: (WebCore::HTMLFormElement::formData): Call FileSystem.h version of pathGetFileName and removed the static helper function.
        * platform/posix/FileSystemPOSIX.cpp: (WebCore::pathGetFileName): Moved general case from HTMLFormElement version here.
          If other platforms relied on that default they should implement this function for their platform specific version of FileSystem.cpp
        * platform/win/FileSystemWin.cpp: (WebCore::pathGetFileName): Moved win implementation from HTMLFormElement here.
        * platform/wx/FileSystemWx.cpp: (WebCore::pathGetFileName): Moved wx implementation from HTMLFormElement here.

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

        Windows build fix.
        
        * html/HTMLFormElement.cpp:
        (WebCore::pathGetFilename):

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

        Don't crash when the string is empty.
        
        * html/HTMLMediaElement.cpp:
        (WebCore::parseTimeOffset):

2008-04-24  Dan Bernstein  <mitz@apple.com>

        Reviewed by Darin Adler.

        - preparation for https://bugs.webkit.org/show_bug.cgi?id=3729
          <rdar://problem/4036353> REGRESSION: arrow keys move insertion bar backwards in RTL text

        The three main changes in this patch are:

        1) Making all inline boxes know their bidi level, instead of just text
           boxes knowing whether their bidi level is odd or even. This is
           required for the next change.

        2) Replacing RenderObject::inlineBox() with
           Position::getInlineBoxAndOffset() in recognition of the fact that the
           inline box containing the primary caret for a position in a given
           node may belong to a different node's renderer.

        3) Changing RenderObject::caretRect() to take an InlineBox parameter,
           and changing callers to call VisiblePosition::caretRect(), which
           locates the inline box, then calls caretRect() on the renderer for
           that box. This, combined with the previous change, ensures that the
           primary caret is rendered at the right place for positions that
           lie on a directionality boundary.

        Test: platform/mac/editing/input/caret-primary-bidi.html

        * WebCore.base.exp: Added the VisiblePosition(Node*, int, EAffinity)
        constructor and VisiblePosition::caretRect(), and sorted.

        * dom/Position.cpp:
        (WebCore::nextRenderedEditable): Adjusted for the removal of
        RenderObject::inlineBox().
        (WebCore::previousRenderedEditable): Ditto.
        (WebCore::Position::rendersInDifferentPosition): Ditto.
        (WebCore::Position::getInlineBoxAndOffset): Added. Gets the inline box
        and the offset within that box at which the primary caret for this
        position should render.

        * dom/Position.h:

        * editing/DeleteSelectionCommand.cpp:
        (WebCore::DeleteSelectionCommand::mergeParagraphs): Changed to call
        VisiblePosition::caretRect() instead of calling the RenderObject method.

        * editing/SelectionController.cpp:
        (WebCore::caretY): Ditto.
        (WebCore::SelectionController::xPosForVerticalArrowNavigation): Ditto.
        (WebCore::SelectionController::layout): Ditto.

        * editing/VisiblePosition.cpp:
        (WebCore::VisiblePosition::caretRect): Changed to call
        getInlineBoxAndOffset() to get the correct inline box and call the
        renderer for that box.

        * editing/VisiblePosition.h:
        (WebCore::VisiblePosition::getInlineBoxAndOffset): Added convenience
        methods for getting the inline box and caret offset for a visible
        position, accounting for its affinity.

        * editing/visible_units.cpp:
        (WebCore::rootBoxForLine): Changed to use getInlineBoxAndOffset()
        instead of RenderObject::inlineBox().
        (WebCore::startPositionForLine):
        (WebCore::endPositionForLine):
        (WebCore::previousLinePosition): Ditto.
        (WebCore::nextLinePosition): Ditto.

        * page/AccessibilityObject.cpp:
        (WebCore::updateAXLineStartForVisiblePosition): Ditto.

        * page/Frame.cpp:
        (WebCore::Frame::firstRectForRange): Ditto.

        * rendering/InlineBox.cpp:
        (WebCore::InlineBox::caretMinOffset): Changed to forward to the
        renderer.
        (WebCore::InlineBox::caretMaxOffset): Ditto.
        * rendering/InlineBox.h: Replaced the m_reversed bit, intended for use
        in InlineTextBox only, with six bits of the bidi level of the box,
        intended for use in all leaf inline boxes.
        (WebCore::InlineBox::InlineBox): Added missing initializer for
        m_dirOverride and initialized the bidi level.
        (WebCore::InlineBox::bidiLevel): Added this accessor.
        (WebCore::InlineBox::setBidiLevel): Ditto.
        (WebCore::InlineBox::direction): Ditto.
        (WebCore::InlineBox::caretLeftmostOffset): Added this convenience
        method.
        (WebCore::InlineBox::caretRightmostOffset): Ditto.

        * rendering/InlineTextBox.cpp: Replaced all references to m_reversed
        with checking of direction().
        (WebCore::InlineTextBox::selectionRect):
        (WebCore::InlineTextBox::placeEllipsisBox):
        (WebCore::InlineTextBox::paint):
        (WebCore::InlineTextBox::paintSelection):
        (WebCore::InlineTextBox::paintCompositionBackground):
        (WebCore::InlineTextBox::paintSpellingOrGrammarMarker):
        (WebCore::InlineTextBox::paintTextMatchMarker):
        (WebCore::InlineTextBox::textPos):
        (WebCore::InlineTextBox::offsetForPosition):
        (WebCore::InlineTextBox::positionForOffset):

        * rendering/RenderBR.cpp: Removed inlineBox().
        * rendering/RenderBR.h: Ditto.

        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::caretRect): Changed to take an inline box and
        account for the direction of the box (or the renderer) in positioning
        the caret: in right-to-left boxes, the "before" position is to the right
        while "after" is to the left.
        * rendering/RenderBox.h:

        * rendering/RenderFlow.cpp:
        (WebCore::RenderFlow::caretRect): Updated the signature.
        * rendering/RenderFlow.h:

        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::caretRect): Updated the signature.
        (WebCore::RenderObject::caretMaxOffset): Changed to return the child
        node count (or 1 if there are no children) for replaced elements, such
        as <select>s.
        * rendering/RenderObject.h:

        * rendering/RenderReplaced.cpp: Removed caretMinOffset() and
        caretMaxOffset() because the base class implementation does the right
        thing for replaced objects now.
        * rendering/RenderReplaced.h:

        * rendering/RenderSVGInlineText.cpp:
        (WebCore::RenderSVGInlineText::caretRect): Updated the signature.
        (WebCore::RenderSVGInlineText::positionForCoordinates): Updated for
        the change from m_reversed to direction().
        * rendering/RenderSVGInlineText.h:

        * rendering/RenderText.cpp:
        (WebCore::RenderText::caretRect): Changed to take an inline box and
        removed the code that used to find the inline for the given position.
        Changed use of m_reversed to use direction().
        (WebCore::RenderText::position): Changed use of m_reversed to use
        direction().
        * rendering/RenderText.h:

        * rendering/RenderTextControl.cpp:
        (WebCore::RenderTextControl::textWithHardLineBreaks): Adjusted for the
        removal of RenderObject::inlineBox().

        * rendering/RenderTreeAsText.cpp:
        (WebCore::writeTextRun): Changed to use direction() instead of
        m_reversed.

        * rendering/SVGInlineTextBox.cpp: Ditto.
        (WebCore::SVGInlineTextBox::calculateGlyphBoundaries):
        (WebCore::SVGInlineTextBoxClosestCharacterToPositionWalker::chunkPortionCallback):
        (WebCore::SVGInlineTextBox::svgCharacterHitsPosition):

        * rendering/SVGRenderTreeAsText.cpp: Ditto.
        (WebCore::writeSVGInlineTextBox):

        * rendering/SVGRootInlineBox.cpp: Ditto.
        (WebCore::svgTextRunForInlineTextBox):
        (WebCore::cummulatedWidthOrHeightOfTextChunk):
        (WebCore::SVGRootInlineBox::buildLayoutInformationForTextBox):

        * rendering/bidi.cpp:
        (WebCore::RenderBlock::constructLine): Made this function set the
        bidi level on all leaf boxes.

        * svg/SVGTextContentElement.cpp: Changed to use direction() instead of
        m_reversed.
        (WebCore::cumulativeCharacterRangeLength):
        (WebCore::SVGInlineTextBoxQueryWalker::chunkPortionCallback):

2008-04-24  Sam Weinig  <sam@webkit.org>

        Fix the world.

        * bindings/js/kjs_proxy.cpp:
        (WebCore::KJSProxy::clear):

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

        Reviewed by Geoff.

        - fix crash in regression test where we'd ask a frame for a user agent string
          after the WebView was already closed

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::scheduleHTTPRedirection): Quietly do nothing if this is
        called on a frame that's already detached from its page.
        (WebCore::FrameLoader::scheduleLocationChange): Ditto.
        (WebCore::FrameLoader::scheduleRefresh): Ditto.
        (WebCore::FrameLoader::scheduleHistoryNavigation): Ditto.
        (WebCore::FrameLoader::redirectionTimerFired): Assert that this is never called
        for a frame that's already detached from its page.
        (WebCore::FrameLoader::scheduleRedirection): Ditto.
        (WebCore::FrameLoader::startRedirectionTimer): Ditto.

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

        Add a new callFunction helper function to remove duplicate code
        for calling JavaScript functions with arguments.

        Reviewed by Darin Adler.

        * page/InspectorController.cpp:
        (WebCore::InspectorController::callSimpleFunction): Call callFunction.
        (WebCore::InspectorController::callFunction): Extended version of the original
        callSimpleFunction, with script function arguments and an exception argument.
        (WebCore::InspectorController::focusNode): Use callFunction.
        (WebCore::InspectorController::addScriptResource): Ditto.
        (WebCore::InspectorController::removeScriptResource): Ditto.
        (WebCore::InspectorController::addDatabaseScriptResource): Ditto.
        (WebCore::InspectorController::removeDatabaseScriptResource): Ditto.
        (WebCore::InspectorController::addScriptConsoleMessage): Ditto.
        * page/InspectorController.h: Add callFunction.

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

        Reviewed by Sam.

        Change some String arguments to be const references instead.
        
        * css/CSSRule.cpp:
        (WebCore::CSSRule::setCssText):
        * css/CSSRule.h:
        * html/HTMLFormElement.cpp:
        (WebCore::pathGetFilename):
        * html/HTMLMediaElement.cpp:
        (WebCore::parseTimeOffset):
        * page/EditorClient.h:
        * platform/SecurityOrigin.cpp:
        (WebCore::isDefaultPortForProtocol):
        * platform/graphics/MediaPlayer.cpp:
        (WebCore::MediaPlayer::load):
        * platform/graphics/MediaPlayer.h:
        * rendering/MediaControlElements.cpp:
        (WebCore::MediaControlInputElement::MediaControlInputElement):
        * rendering/MediaControlElements.h:
        * svg/animation/SVGSMILElement.cpp:
        (WebCore::SVGSMILElement::Condition::Condition):
        * svg/animation/SVGSMILElement.h:
        * svg/graphics/SVGImageEmptyClients.h:
        (WebCore::SVGEmptyEditorClient::shouldInsertText):
        * xml/XSLTProcessor.cpp:
        (WebCore::createFragmentFromSource):

2008-04-24  Justin Garcia  <justin.garcia@apple.com>

        Reviewed by Darin Adler.

        <rdar://problem/5604313> FormatBlock to apply an h1 also inserts a style span around the first letter (16004)
        
        * editing/TextIterator.cpp:
        (WebCore::TextIterator::advance): We emit an extra newline when leaving a
        block element that has atypical margin/padding. When we emit the extra newline, 
        it needs to be positioned after that block's contents, not after the block. 
        This is how we position the first newline, too, since the range for emitted newlines 
        should start where the line break begins visually.

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

        Reviewed by Adam.

        Only avoid implicit entries when doing the initial caching.
        
        * loader/appcache/ApplicationCacheGroup.cpp:
        (WebCore::ApplicationCacheGroup::didReceiveResponse):
        (WebCore::ApplicationCacheGroup::startLoadingEntry):

2008-04-24  Kevin McCullough  <kmccullough@apple.com>

        Reviewed by Adam and Sam.

        -<rdar://problem/5770054> JavaScript profiler (10928)
        -Only profile the page group that starts profiling to avoid profiling
        tools that shouldn't be profiled unless explicitly requested to.

        * bindings/js/kjs_proxy.cpp: When a new global object is created set its
        page group identifier.
        (WebCore::KJSProxy::clear):
        (WebCore::KJSProxy::initScript):
        * page/Console.cpp: When calling console.profile set the identifier of
        the page group being profiled.
        (WebCore::Console::profile):
        * page/PageGroup.cpp: Implement unique identifiers.
        (WebCore::getUniqueIdentifier):
        (WebCore::PageGroup::PageGroup):
        * page/PageGroup.h: Ditto.
        (WebCore::PageGroup::identifier):

2008-04-24  John Sullivan  <sullivan@apple.com>

        Mac buid fix

        * page/mac/WebCoreViewFactory.h:
        add declarations of six new AX methods that were added to LocalizedStrings.h
        
        * platform/mac/LocalizedStringsMac.mm:
        (WebCore::AXButtonActionVerb):
        implement by calling through to WebCoreViewFactory as we do with the other functions here
        (WebCore::AXRadioButtonActionVerb):
        ditto
        (WebCore::AXTextFieldActionVerb):
        ditto
        (WebCore::AXCheckedCheckBoxActionVerb):
        ditto
        (WebCore::AXUncheckedCheckBoxActionVerb):
        ditto
        (WebCore::AXLinkActionVerb):
        ditto

2008-04-24  Simon Hausmann  <hausmann@webkit.org>

        Rubber-stamped by Lars

        Fix text rendering in -reverse mode on Qt/Mac.

        For Font::width() don't use a plain QFontMetrics object but also the properly
        setup QTextLayout that has the RTL/LTR force flags set.

        * platform/graphics/qt/FontQt.cpp:
        (WebCore::Font::width):

2008-04-24  Tor Arne Vestbø  <tavestbo@trolltech.com>

        Reviewed by Simon.

        Don't do anti-aliasing for arcs, lines and rects, but continue to anti-alias
        all drawing primitives in the HTML Canvas element.

        This speeds up drawing of dashed outlines significantly.

        Also preserve the anti-aliasing renderhint for transparency layers and
        get rid of the mostly unused device pointer.

        * platform/graphics/qt/GraphicsContextQt.cpp:
        (WebCore::TransparencyLayer::TransparencyLayer):
        (WebCore::GraphicsContextPlatformPrivate::p):
        (WebCore::GraphicsContextPlatformPrivate::GraphicsContextPlatformPrivate):
        (WebCore::GraphicsContext::beginTransparencyLayer):
        (WebCore::GraphicsContext::drawRect):
        (WebCore::GraphicsContext::drawLine):
        (WebCore::GraphicsContext::strokeArc):

2008-04-24  Paul Olav Tvete <paul@trolltech.com>

        Reviewed by Simon.

        Fix various compiler warnings related to QString(const char *)
        construction by using QLatin1String.

        * bridge/qt/qt_instance.cpp:
        (KJS::Bindings::QtField::valueFromInstance):
        (KJS::Bindings::QtField::setValueToInstance):
        * dom/XMLTokenizer.cpp:
        * platform/graphics/qt/PathQt.cpp:
        (WebCore::Path::debugString):

2008-04-24  Morten Johan Sørvig  <msorvig@trolltech.com>

        Reviewed by Simon.

        Work around QMacStyle bug in repainting the vertical scrollbar.

        We draw the scrollbar using HITheme but somehow the translation and the
        clipping we previously set using ClipCGContextToRegion is ignored. Drawing
        without the translation fixes the clip.

        * platform/qt/PlatformScrollBarQt.cpp:
        (WebCore::PlatformScrollbar::paint):

2008-04-24  Holger Hans Peter Freyther  <zecke@selfish.org>

        Reviewed by Simon.

        * Set an expiration date for local files as we do not know what will happen
        to these files (in contrast to a http server with max-age and other headers)
        * Remember the time when we started the job and use that for the expiration date
        * QNetworkManager does not handle expiration at all, we might want to set the
        expiration for all downloads but this will be a performance nightmare.

        * platform/network/qt/QNetworkReplyHandler.cpp:
        (WebCore::QNetworkReplyHandler::QNetworkReplyHandler):
        (WebCore::QNetworkReplyHandler::sendResponseIfNeeded):
        (WebCore::QNetworkReplyHandler::start):
        * platform/network/qt/QNetworkReplyHandler.h:

2008-04-24  Simon Hausmann  <hausmann@webkit.org>

        Fix the Gtk and Qt builds.

        Added missing localization stubs for accessibility.

        * platform/gtk/LocalizedStringsGtk.cpp:
        (WebCore::AXButtonActionVerb):
        (WebCore::AXRadioButtonActionVerb):
        (WebCore::AXTextFieldActionVerb):
        (WebCore::AXCheckedCheckBoxActionVerb):
        (WebCore::AXUncheckedCheckBoxActionVerb):
        (WebCore::AXLinkActionVerb):
        * platform/qt/Localizations.cpp:
        (WebCore::AXButtonActionVerb):
        (WebCore::AXRadioButtonActionVerb):
        (WebCore::AXTextFieldActionVerb):
        (WebCore::AXCheckedCheckBoxActionVerb):
        (WebCore::AXUncheckedCheckBoxActionVerb):
        (WebCore::AXLinkActionVerb):

2008-04-24  Olivier Goffart  <ogoffart@trolltech.com>

        Reviewed by Simon

        Fix various compiler warnings in the Qt port.

        * platform/graphics/qt/ImageQt.cpp:
        (loadResourcePixmap):
        * platform/qt/CookieJarQt.cpp:
        (WebCore::cookies):
        * platform/qt/ScrollViewQt.cpp:
        (WebCore::ScrollView::wheelEvent):
        * plugins/qt/PluginDataQt.cpp:
        (WebCore::PluginData::initPlugins):

2008-04-24  Andre Poenitz  <andre.poenitz@trolltech.com>

        Reviewed by Simon.

        Removed spurious QHideEvent forward declaration.

        * platform/qt/QWebPopup.h:

2008-04-24  Tor Arne Vestbø  <tavestbo@trolltech.com>

        Reviewed by Simon.

        Render text areas using Qt (ensures proper style).

        * platform/qt/RenderThemeQt.cpp:
        (WebCore::RenderThemeQt::paintTextField):
        (WebCore::RenderThemeQt::adjustTextFieldStyle):
        (WebCore::RenderThemeQt::paintTextArea):
        (WebCore::RenderThemeQt::supportsFocus):
        * platform/qt/RenderThemeQt.h:

2008-04-24  Tor Arne Vestbø  <tavestbo@trolltech.com>

        Reviewed by Simon.

        Make mouse wheel events over scrollbars behave the same as in Qt, i.e. both
        horizontal and vertical wheel events will scroll the view in the orientation
        of the scrollbar underneath the cursor.

        * platform/qt/ScrollViewQt.cpp:
        (WebCore::ScrollView::paint):
        (WebCore::ScrollView::wheelEvent):

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

        Reviewed by Brady.

        * page/AccessibilityObject.cpp:
        (WebCore::AccessibilityObject::press): Return false if this object
        doesn't have an action element associated with it.
        * page/AccessibilityObject.h: Added a performDefaultAction() method,
        which just calls press(). Marked press() const and changed its return
        type to bool.

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

        Reviewed by Adam.

        Don't allow a hit test to return an AccessibilityObject that should be
        ignored.

        * page/AccessibilityObject.cpp:
        (WebCore::AccessibilityObject::doAccessibilityHitTest): If this result
        object's accessibility is ignored, return the parent unignored object.

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

        Reviewed by Adam.

        Fix a crash when performing a hit test on an AccessibilityObject with
        no layer (e.g., an AccessibilityObject for a RenderText object).

        * page/AccessibilityObject.cpp:
        (WebCore::AccessibilityObject::doAccessibilityHitTest): Added a null
        check for layer. Removed a null check for m_renderer, which shouldn't
        occur.

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

        * page/AccessibilityObject.cpp:
        (WebCore::AccessibilityObject::boundingBoxRect): Added FIXME about this
        method not working correctly for objects with CSS transforms applied.

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

        Reviewed by Adam.

        Implement contentsToScreen() and screenToContents() on Windows.

        * platform/ScrollView.h: Make these declarations conditional on
        HAVE(ACCESSIBILITY) instead of PLATFORM(MAC).
        * platform/win/ScrollViewWin.cpp:
        (WebCore::ScrollView::contentsToScreen): Translate from coordinates
        relative to the ScrollView to coordinates relative to the screen. Do
        this by getting the offset of the ScrollView in screen coordinates and
        moving the rect by this amount.
        (WebCore::ScrollView::screenToContents): Translate from coordinates
        relative to the screen to coordinates relative to the ScrollView.

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

        Reviewed by Oliver.

        Add a method to get a localized, human-readable string stating this
        object's default action, e.g., a button's default action is "press."

        * page/AccessibilityObject.cpp:
        (WebCore::AccessibilityObject::actionVerb): Added.
        * page/AccessibilityObject.h: Added declaration for actionVerb().
        * platform/LocalizedStrings.h: Added declarations for:
            AXButtonActionVerb()
            AXRadioButtonActionVerb()
            AXTextFieldActionVerb()
            AXCheckedCheckBoxActionVerb()
            AXUncheckedCheckBoxActionVerb()
            AXLinkActionVerb()

2008-04-24  Tor Arne Vestbø  <tavestbo@trolltech.com>

        Reviewed by Simon.

        Cleaned up copyright headers in the Qt port (removed misplaced class
        descriptions and fixed inconsistent whitespace and indentation).

        * platform/graphics/qt/FontQt.cpp:
        * platform/qt/WheelEventQt.cpp:

2008-04-24  Tor Arne Vestbø  <tavestbo@trolltech.com>

        Reviewed by Simon.

        Disable vanlilla focus rings since Qt provides this as part of the style.

        * platform/qt/RenderThemeQt.cpp:

2008-04-24  George Staikos  <george.staikos@torchmobile.com>

        Reviewed by Simon.

        This optimization in BitmapImage::drawPattern for the identity
        transform is bogus and causes incorrect results on sites like youtube.

        * platform/graphics/qt/ImageQt.cpp:
        (WebCore::BitmapImage::drawPattern):

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

        Reviewed by Jon Honeycutt

        Preparing for making LocalStorageAreas persistent.

        Since LocalStorageAreas will need to do a lot of additional work for each of the basic
        operations a Storage object supports, this patch makes the API entry points virtual so
        LocalStorageArea can override them.  The behavior for both Local and Session StorageAreas
        is unchanged with this patch, but LocalStorageArea will override them in the future.

        * storage/StorageArea.cpp: Rename the implementations to internalFoo
        (WebCore::StorageArea::internalLength):
        (WebCore::StorageArea::internalKey):
        (WebCore::StorageArea::internalGetItem):
        (WebCore::StorageArea::internalSetItem):
        (WebCore::StorageArea::internalRemoveItem):
        (WebCore::StorageArea::internalContains):

        * storage/StorageArea.h: Call internalFoo variants
        (WebCore::StorageArea::length):
        (WebCore::StorageArea::key):
        (WebCore::StorageArea::getItem):
        (WebCore::StorageArea::setItem):
        (WebCore::StorageArea::removeItem):
        (WebCore::StorageArea::contains):

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

        Implement getComputedStyle for border-image.

        Reviewed by Dan Bernstein

        Added fast/css/getComputedStyle-border-image.html

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::valueForRepeatRule):
        (WebCore::valueForNinePieceImage):
        (WebCore::CSSComputedStyleDeclaration::getPropertyCSSValue):

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

        Reviewed by Anders.

        - simplify use of HashTraits to prepare for some upcoming hash table changes

        * page/AXObjectCache.h: Removed uneeded AXIDHashTraits, which are no different
        from the default hash traits for unsigned.
        * page/mac/AXObjectCacheMac.mm:
        (WebCore::AXObjectCache::removeAXID): Remove assertion that's already done
        by HashTable that the value is not the deleted value.

        * platform/graphics/StringTruncator.cpp: Removed unneeded include.
        * svg/SVGFontFaceElement.cpp: Removed unneeded include.

2008-04-23  Kevin Ollivier  <kevino@theolliviers.com>

        wx build fixes. Changing BackgroundLayer -> FillLayer and adding
        Frame::disconnectPlatformScriptObjects().

        * platform/wx/RenderThemeWx.cpp:
        (WebCore::RenderThemeWx::isControlStyled):
        * platform/wx/TemporaryLinkStubs.cpp:
        (Frame::disconnectPlatformScriptObjects):

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

        Add support for mask-box-image (similar to border-image).  This property enables a single image
        to overlay the entire mask area (with nine-piece slicing rules similar to border image).

        Reviewed by Dan Bernstein

        Added inline-mask-overlay.html, block-mask-overlay.html

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::CSSComputedStyleDeclaration::getPropertyCSSValue):
        * css/CSSParser.cpp:
        (WebCore::CSSParser::parseValue):
        (WebCore::CSSParser::parseBorderImage):
        * css/CSSPropertyNames.in:
        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::applyProperty):
        * rendering/InlineFlowBox.cpp:
        (WebCore::InlineFlowBox::paintMask):
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::paintMask):
        * rendering/RenderFlow.cpp:
        (WebCore::RenderFlow::paintLines):
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::paintNinePieceImage):
        (WebCore::RenderObject::paintBorder):
        * rendering/RenderObject.h:
        * rendering/RenderStyle.cpp:
        (WebCore::NinePieceImage::operator==):
        * rendering/RenderStyle.h:
        (WebCore::NinePieceImage::m_verticalRule):
        (WebCore::NinePieceImage::horizontalRule):
        (WebCore::NinePieceImage::verticalRule):
        (WebCore::RenderStyle::borderImage):
        (WebCore::RenderStyle::maskOverlayImage):
        (WebCore::RenderStyle::hasMask):
        (WebCore::RenderStyle::resetBorderImage):
        (WebCore::RenderStyle::setBorderImage):
        (WebCore::RenderStyle::setMaskOverlayImage):
        (WebCore::RenderStyle::initialNinePieceImage):
        * rendering/RenderTable.cpp:
        (WebCore::RenderTable::paintMask):
        * rendering/RenderTableCell.cpp:
        (WebCore::RenderTableCell::paintMask):

2008-04-23  Justin Garcia  <justin.garcia@apple.com>

        Reviewed by Darin Adler.

        <rdar://problem/5825350> OWA: Caret disappears when navigating with arrows keys in contenteditable div

        * editing/htmlediting.cpp:
        (WebCore::firstEditablePositionAfterPositionInRoot): Return a null VisiblePosition if
        this function moves out of highestRoot.  Re-wrote so as to not duplicate code inside
        and outside of the while loop.
        (WebCore::lastEditablePositionBeforePositionInRoot): Ditto.

2008-04-23  Daniel Zucker  <zucker@wake3.com>

        Reviewed by Adam Roben.

        Fix build errors needed to compile Curl in Cairo build.  Add stubs for
        didReceiveAuthenticationChallenge, receivedCredential,
        receivedRequestToContinueWithoutCredential, and receivedCancellation.
        <https://bugs.webkit.org/show_bug.cgi?id=18468>

        * platform/network/ResourceHandle.h:  
        * platform/network/curl/ResourceHandleCurl.cpp:
        (WebCore::ResourceHandle::didReceiveAuthenticationChallenge):
        (WebCore::ResourceHandle::receivedCredential):
        (WebCore::ResourceHandle::receivedRequestToContinueWithoutCredential):
        (WebCore::ResourceHandle::receivedCancellation):

2008-04-23  Dan Bernstein  <mitz@apple.com>

        Reviewed by Darin Adler.

        - fix a bug where moving forward in bidirectional text skips over the
          position after the end of the line

        Test: editing/selection/move-past-trailing-space.html

        * dom/Position.cpp:
        (WebCore::Position::upstream): Changed the logic for identifying when a
        position is after the last character of a text box of a text node that
        continues on the next line, to make it work correctly when boxes are not
        laid out in logical order.
        (WebCore::Position::downstream): Ditto.

2008-04-23  Brad Hughes  <bhughes@trolltech.com>

        Reviewed by Simon.

        Fix release build with the intel compiler

        Intel compiler can't compile qtwebkit with -O2 or -O1, so we're left with -O0

        * WebCore.pro:

2008-04-22  Dan Bernstein  <mitz@apple.com>

        Reviewed by Anders Carlsson.

        - remove unused calls to Position::upstream()

        * editing/InsertLineBreakCommand.cpp:
        (WebCore::InsertLineBreakCommand::insertNodeAfterPosition):
        (WebCore::InsertLineBreakCommand::insertNodeBeforePosition):

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

        Reviewed by Sam.

        Add a method to query which modifier keys the platform uses for access
        key actions.

        * page/EventHandler.cpp:
        (WebCore::EventHandler::handleAccessKey): Bitwise and the event's
        modifier keys with the platform's access key modifier mask to determine
        whether this event can perform an access key action.
        * page/EventHandler.h: Added s_accessKeyModifiers, a platform-defined
        mask of modifier keys used for access key actions, and a getter.
        * page/mac/EventHandlerMac.mm: Use PlatformKeyboardEvent::CtrlKey for
        access key actions.
        * page/qt/EventHandlerQt.cpp: Same.
        * page/gtk/EventHandlerGtk.cpp: Use AltKey.
        * page/win/EventHandlerWin.cpp: Same.
        * page/wx/EventHandlerWx.cpp: Same.
        * platform/PlatformKeyboardEvent.h: Added an enum, ModifierKey.
        (WebCore::PlatformKeyboardEvent::):
        (WebCore::PlatformKeyboardEvent::modifiers): Return which modifier keys
        were active, a combination of ModifierKey values.

2008-04-22  Sam Weinig  <sam@webkit.org>

        Reviewed by Maciej Stachowiak.

        Make the KJSProxy and FrameLoader member variables instead of pointers
        in FramePrivate in a bid to do a little clean up before the last of the
        split window patches.  Also, make the KJSProxy not lazily created, as the
        real benefit comes from lazily creating the JSDOMWindowWrapper, which we
        still do.

        * page/Frame.cpp:
        (WebCore::Frame::~Frame):
        (WebCore::Frame::init):
        (WebCore::Frame::loader):
        (WebCore::Frame::scriptProxy):
        (WebCore::Frame::document):
        (WebCore::Frame::setDocument):
        (WebCore::Frame::clearScriptProxy):
        (WebCore::Frame::pageDestroyed):
        (WebCore::FramePrivate::FramePrivate):
        (WebCore::FramePrivate::~FramePrivate):
        * page/FramePrivate.h:

2008-04-22  Anatoli Papirovski  <apapirovski@mac.com>

        Reviewed by Dan Bernstein.

        - fix https://bugs.webkit.org/show_bug.cgi?id=18584
        border-color, outline-color, column-color, -webkit-text-stroke-color,
        and -webkit-text-fill-color inheritance to correctly use parent's color
        if the parent's corresponding (border, outline, etc.)-color property
        wasn't set.

        Test: fast/borders/border-color-inherit.html

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

2008-04-22  Alp Toker  <alp@nuanti.com>

        Rubber-stamped by Dave Hyatt.

        Move GraphicsContext::clipToImageBuffer() notImplemented() stub to
        GraphicsContextCairo.

        * platform/graphics/GraphicsContext.cpp:
        * platform/graphics/cairo/GraphicsContextCairo.cpp:
        (WebCore::GraphicsContext::clipToImageBuffer):

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

        Add support for mask-composite to match background-composite.

        Reviewed by Sam Weinig

        Added fast/backgrounds/mask-composite.html

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::CSSComputedStyleDeclaration::getPropertyCSSValue):
        * css/CSSParser.cpp:
        (WebCore::CSSParser::parseValue):
        (WebCore::CSSParser::parseFillProperty):
        * css/CSSPropertyNames.in:
        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::applyProperty):
        * rendering/InlineFlowBox.cpp:
        (WebCore::InlineFlowBox::paintMask):

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

        Fix for bug 18688, background-color stopped painting on inlines.  Fix a virtual function
        misnaming that led to the derived class not getting called properly.

        Reviewed by Mark Rowe

        * ChangeLog:
        * rendering/InlineFlowBox.cpp:
        (WebCore::InlineFlowBox::paintFillLayer):
        * rendering/RenderObject.h:
        (WebCore::RenderObject::paintFillLayerExtended):

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

        Reviewed by Sam Weinig

        <rdar://problem/5733282> and https://bugs.webkit.org/show_bug.cgi?id=18680
        Always loads default shortcut icon URL when an external <script> is referenced before the icon URL is set.

        * dom/Document.cpp:
        (WebCore::Document::implicitClose): Call FrameLoader->startIconLoader() here, when the document is
          finished parsing.

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::endIfNotLoadingMainResource):  Don't start the icon load here, when the
          document is finished parsing.  This was often too early, as document parsing may be blocked
          on an external script and therefore the correct iconURL is not set yet.
          The isLoadingFromCachedPage() check was when we started the icon load based on *loading* instead parsing,
          and is now irrelevant.
        * loader/FrameLoader.h:  Make startIconLoader() public

2008-04-22  Antti Koivisto  <antti@apple.com>

        Reviewed by Oliver.

        Support keyPoints attribute of <animateMotion>.
        
        Tested by SVG test suite test
        animate-elem-33-t.svg

        * svg/SVGAnimateMotionElement.cpp:
        (WebCore::SVGAnimateMotionElement::parseMappedAttribute):
        * svg/SVGAnimationElement.cpp:
        (WebCore::parseKeyTimes):
        (WebCore::SVGAnimationElement::parseMappedAttribute):
        (WebCore::SVGAnimationElement::calculatePercentForSpline):
        (WebCore::SVGAnimationElement::calculatePercentFromKeyPoints):
        (WebCore::SVGAnimationElement::currentValuesFromKeyPoints):
        (WebCore::SVGAnimationElement::currentValuesForValuesAnimation):
        (WebCore::SVGAnimationElement::startedActiveInterval):
        (WebCore::SVGAnimationElement::updateAnimation):
        * svg/SVGAnimationElement.h:

2008-04-22  Holger Hans Peter Freyther  <zecke@selfish.org>

        Unreviewed build fix.

        Update WebKit.qrc to catch up with the addition and removal of images
        from page/inspector/Images in recent commits.

        * page/inspector/WebKit.qrc:

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

        Fix for <rdar://5589634>.

        Implement CSS alpha masks.  The syntax is very similar to that used for backgrounds.  Multiple mask images
        can be specified, and each one can be tiled, positioned, etc.  The following new properties have been
        added (all of which are analogous to their background-* counterparts).

        mask, mask-image, mask-clip, mask-origin, mask-repeat, mask-attachment, mask-position

        The alpha values in the final composite image are used to determine how the mask applies (alpha of 1 = show,
        alpha of 0 = don't show).

        SVG images and CSS gradients can also be used as masks.

        Reviewed by Dan

        Added fast/backgrounds/repeat/mask-negative-offset-repeat.html, fast/backgrounds/svg-as-mask.html

        * css/CSSMutableStyleDeclaration.cpp:
        (WebCore::CSSMutableStyleDeclaration::getPropertyValue):
        (WebCore::initShorthandMap):
        * css/CSSParser.cpp:
        (WebCore::CSSParser::parseFillProperty):
        (WebCore::CSSParser::parseTransformOrigin):
        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::adjustRenderStyle):
        (WebCore::CSSStyleSelector::applyProperty):
        * rendering/InlineFlowBox.cpp:
        (WebCore::InlineFlowBox::paint):
        (WebCore::InlineFlowBox::paintFillLayers):
        (WebCore::InlineFlowBox::paintFillLayer):
        (WebCore::InlineFlowBox::paintBoxDecorations):
        (WebCore::InlineFlowBox::paintMask):
        * rendering/InlineFlowBox.h:
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::paint):
        (WebCore::RenderBlock::paintObject):
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::paintRootBoxDecorations):
        (WebCore::RenderBox::paintBoxDecorations):
        (WebCore::RenderBox::paintMask):
        (WebCore::RenderBox::paintFillLayers):
        (WebCore::RenderBox::paintFillLayer):
        (WebCore::RenderBox::paintFillLayerExtended):
        * rendering/RenderBox.h:
        * rendering/RenderFieldset.cpp:
        (WebCore::RenderFieldset::paintBoxDecorations):
        (WebCore::RenderFieldset::paintMask):
        * rendering/RenderFieldset.h:
        * rendering/RenderInline.cpp:
        (WebCore::RenderInline::requiresLayer):
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::isTransparent):
        (WebCore::RenderLayer::paintLayer):
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::requiresLayer):
        (WebCore::mustRepaintFillLayers):
        (WebCore::RenderObject::mustRepaintBackgroundOrBorder):
        (WebCore::RenderObject::setStyle):
        (WebCore::RenderObject::updateFillImages):
        * rendering/RenderObject.h:
        (WebCore::RenderObject::hasMask):
        (WebCore::RenderObject::paintMask):
        (WebCore::RenderObject::paintFillExtended):
        * rendering/RenderReplaced.cpp:
        (WebCore::RenderReplaced::paint):
        * rendering/RenderStyle.cpp:
        (WebCore::FillLayer::FillLayer):
        (WebCore::StyleRareNonInheritedData::StyleRareNonInheritedData):
        * rendering/RenderStyle.h:
        (WebCore::FillLayer::initialFillComposite):
        (WebCore::FillLayer::initialFillSize):
        (WebCore::FillLayer::FillLayer):
        (WebCore::RenderStyle::hasMask):
        * rendering/RenderTable.cpp:
        (WebCore::RenderTable::paint):
        (WebCore::RenderTable::paintBoxDecorations):
        (WebCore::RenderTable::paintMask):
        * rendering/RenderTable.h:
        * rendering/RenderTableCell.cpp:
        (WebCore::RenderTableCell::requiresLayer):
        (WebCore::RenderTableCell::paintBackgroundsBehindCell):
        (WebCore::RenderTableCell::paintMask):
        * rendering/RenderTableCell.h:
        * rendering/RenderWidget.cpp:
        (WebCore::RenderWidget::paint):
        * svg/graphics/SVGImage.cpp:
        (WebCore::SVGImage::draw):
        (WebCore::SVGImage::dataChanged):

2008-04-22  Sam Weinig  <sam@webkit.org>

        Reviewed by Geoffrey Garen.

        Make DOMAbstractView have a weak reference to the Frame instead of ref'ing
        the DOMWindow.

        To ensure that the WindowScriptObject (which is a DOMAbstractView) stays valid
        after a navigation once the split window is completed, the DOMAbstractView must
        wrap the Frame instead of a DOMWindow since the DOMWindow will change.

        * WebCore.xcodeproj/project.pbxproj:
        * bindings/objc/DOMAbstractView.mm: Added.
        (-[DOMAbstractView dealloc]):
        (-[DOMAbstractView finalize]):
        (-[DOMAbstractView document]):
        (-[DOMAbstractView _disconnectFrame]):
        (-[DOMAbstractView WebCore::]):
        (-[DOMAbstractView _initWithFrame:WebCore::]):
        (+[DOMAbstractView _wrapAbstractView:WebCore::]):
        Add custom implementation to implement weak reference semantics.

        * bindings/objc/DOMAbstractViewFrame.h: Added.
        Declare the [DOMAbstractView _disconectFrame] selector.
        * bindings/objc/DOMInternal.h:
        Remove DOMRGBColor Internal category since it is now generated.

        * bindings/objc/DOMUtility.mm:
        (KJS::createDOMWrapper):
        Don't ever create a DOMAbstractView from a JSDOMWindow, only from JSDOMWindowWrapper.

        * bindings/scripts/CodeGeneratorObjC.pm:
        Generate internal header for IDLs that want custom implementations.

        * css/RGBColor.idl:
        Make this a PODType as it really is in the implementation.

        * page/AbstractView.idl:
        This now needs a custom objective-c binding implementation.

        * page/Frame.cpp:
        (WebCore::Frame::~Frame):
        disconnect the weak frame reference in the WindowScriptObject.

        * page/Frame.h:
        * page/gtk/FrameGtk.cpp:
        (WebCore::Frame::disconnectPlatformScriptObjects): Dummy implementation.
        * page/mac/FrameMac.mm:
        (WebCore::Frame::windowScriptObject): ASSERT that the windowScriptObject is a DOMAbstractView.
        (WebCore::Frame::disconnectPlatformScriptObjects): Disconnect the frame pointer from the windowScriptObject.
        * page/qt/FrameQt.cpp:
        (WebCore::Frame::disconnectPlatformScriptObjects): Dummy implementation.
        * page/win/FrameWin.cpp:
        (WebCore::Frame::disconnectPlatformScriptObjects): Ditto.

2008-04-22  Dan Bernstein  <mitz@apple.com>

        Reviewed by Sam Weinig.

        - preparation for https://bugs.webkit.org/show_bug.cgi?id=3729
          <rdar://problem/4036353> REGRESSION: arrow keys move insertion bar backwards in RTL text

        * rendering/bidi.cpp:
        (WebCore::RenderBlock::layoutInlineChildren): Make sure to give the
        trailing white space a bidi level consistent with its position.

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

        Remove many unused Web Inspector images.

        Rubber-stamped by Adam Roben and Sam Weinig.

        * page/inspector/Images/attachedShadow.png: Removed.
        * page/inspector/Images/backNormal.png: Removed.
        * page/inspector/Images/bottomShadow.png: Removed.
        * page/inspector/Images/breadcrumbBackground.png: Removed.
        * page/inspector/Images/console.png: Removed.
        * page/inspector/Images/databaseBrowserViewNormal.png: Removed.
        * page/inspector/Images/databaseBrowserViewNormalSelected.png: Removed.
        * page/inspector/Images/databaseBrowserViewSmall.png: Removed.
        * page/inspector/Images/databaseBrowserViewSmallSelected.png: Removed.
        * page/inspector/Images/databaseQueryViewNormal.png: Removed.
        * page/inspector/Images/databaseQueryViewNormalSelected.png: Removed.
        * page/inspector/Images/databaseQueryViewSmall.png: Removed.
        * page/inspector/Images/databaseQueryViewSmallSelected.png: Removed.
        * page/inspector/Images/disclosureDownPressed.png: Removed.
        * page/inspector/Images/disclosureRightDown.png: Removed.
        * page/inspector/Images/disclosureRightPressed.png: Removed.
        * page/inspector/Images/document.png: Removed.
        * page/inspector/Images/domViewNormal.png: Removed.
        * page/inspector/Images/domViewNormalSelected.png: Removed.
        * page/inspector/Images/domViewSmall.png: Removed.
        * page/inspector/Images/domViewSmallSelected.png: Removed.
        * page/inspector/Images/downTriangle.png: Removed.
        * page/inspector/Images/folder.png: Removed.
        * page/inspector/Images/forwardNormal.png: Removed.
        * page/inspector/Images/gradient.png: Removed.
        * page/inspector/Images/gradientHighlight.png: Removed.
        * page/inspector/Images/gradientHighlightBottom.png: Removed.
        * page/inspector/Images/hideStatusWidget.png: Removed.
        * page/inspector/Images/hideStatusWidgetPressed.png: Removed.
        * page/inspector/Images/network.png: Removed.
        * page/inspector/Images/plainDocument.png: Removed.
        * page/inspector/Images/popupArrows.png: Removed.
        * page/inspector/Images/popupArrowsBlack.png: Removed.
        * page/inspector/Images/reload.png: Removed.
        * page/inspector/Images/rightTriangle.png: Removed.
        * page/inspector/Images/showStatusWidget.png: Removed.
        * page/inspector/Images/showStatusWidgetPressed.png: Removed.
        * page/inspector/Images/sidbarItemBackground.png: Removed.
        * page/inspector/Images/sidebarActionWidget.png: Removed.
        * page/inspector/Images/sidebarActionWidgetPressed.png: Removed.
        * page/inspector/Images/sidebarAttachWidget.png: Removed.
        * page/inspector/Images/sidebarAttachWidgetPressed.png: Removed.
        * page/inspector/Images/sidebarDetachWidget.png: Removed.
        * page/inspector/Images/sidebarDetachWidgetPressed.png: Removed.
        * page/inspector/Images/sidebarResizeWidget.png: Removed.
        * page/inspector/Images/sidebarStatusAreaBackground.png: Removed.
        * page/inspector/Images/sourceViewNormal.png: Removed.
        * page/inspector/Images/sourceViewNormalSelected.png: Removed.
        * page/inspector/Images/sourceViewSmall.png: Removed.
        * page/inspector/Images/sourceViewSmallSelected.png: Removed.
        * page/inspector/Images/tab.png: Removed.
        * page/inspector/Images/tabSelected.png: Removed.
        * page/inspector/Images/toggleDown.png: Removed.
        * page/inspector/Images/toggleUp.png: Removed.
        * page/inspector/Images/toolbarButtonNormal.png: Removed.
        * page/inspector/Images/toolbarButtonNormalInactive.png: Removed.
        * page/inspector/Images/toolbarButtonNormalPressed.png: Removed.
        * page/inspector/Images/toolbarButtonNormalSelected.png: Removed.
        * page/inspector/Images/toolbarButtonNormalSelectedInactive.png: Removed.
        * page/inspector/Images/toolbarButtonSmall.png: Removed.
        * page/inspector/Images/toolbarButtonSmallInactive.png: Removed.
        * page/inspector/Images/toolbarButtonSmallPressed.png: Removed.
        * page/inspector/Images/toolbarButtonSmallSelected.png: Removed.
        * page/inspector/Images/toolbarButtonSmallSelectedInactive.png: Removed.
        * page/inspector/Images/toolbarPopupButtonNormal.png: Removed.
        * page/inspector/Images/toolbarPopupButtonNormalInactive.png: Removed.
        * page/inspector/Images/toolbarPopupButtonNormalPressed.png: Removed.
        * page/inspector/Images/toolbarPopupButtonSmall.png: Removed.
        * page/inspector/Images/toolbarPopupButtonSmallInactive.png: Removed.
        * page/inspector/Images/toolbarPopupButtonSmallPressed.png: Removed.
        * page/inspector/Images/toolbarSplitButtonDividerNormal.png: Removed.
        * page/inspector/Images/toolbarSplitButtonDividerNormalInactive.png: Removed.
        * page/inspector/Images/toolbarSplitButtonDividerSmall.png: Removed.
        * page/inspector/Images/toolbarSplitButtonDividerSmallInactive.png: Removed.
        * page/inspector/Images/treeLeftTriangleBlack.png: Removed.

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

        Reviewed by Darin.

        Add NPN_Construct and NPN_PluginThreadAsyncCall declarations.

        * bridge/npapi.h:
        * bridge/npruntime.h:
        * plugins/npfunctions.h:

2008-04-22  Alice Liu  <alice.liu@apple.com>

        Reviewed by John Sullivan and Adam Roben.

        Test: fast/events/tabindex-focus-chain.html

        * dom/Document.cpp:
        (WebCore::Document::nextFocusableNode):
        (WebCore::Document::previousFocusableNode):
        If the focused node has been removed from the normal tabbing order,
        advancing focus from this node should advance to the next focusable
        node in tree order, and not start over at the beginning of the focus
        chain. 

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

        Adds a debugger toggle button to the scripts status bar that will start
        and stop debugging of the inspected page.

        Reviewed by Adam Roben.

        * English.lproj/InspectorLocalizedStrings.js: Adds the two new tooltip strings.
        * page/InspectorController.cpp:
        (WebCore::debuggerAttached): Call InspectorController::debuggerAttached.
        (WebCore::InspectorController::InspectorController): Initialize
        m_debuggerAttached to false.
        (WebCore::InspectorController::windowScriptObjectAvailable): Add the debuggerAttached
        property to the InspectorController class.
        (WebCore::InspectorController::startDebuggingAndReloadInspectedPage):
        Set m_debuggerAttached to true.
        (WebCore::InspectorController::stopDebugging): Set m_debuggerAttached to false.
        * page/InspectorController.h:
        * page/inspector/Images/debuggingButtons.png: Added.
        * page/inspector/ScriptsPanel.js:
        (WebInspector.ScriptsPanel): Disable the pause button. Create the debugging
        button and setup the id, className and event listener. Call reset.
        (WebInspector.ScriptsPanel.prototype.get statusBarItems): Return an array
        (WebInspector.ScriptsPanel.prototype.reset): Call _updateDebuggerButtons.
        (WebInspector.ScriptsPanel.prototype._updateDebuggerButtons): Adjust the title of
        the debugging button to match what will happen when clicked. Change the style class,
        and toggle the disabled state of the pause button.
        (WebInspector.ScriptsPanel.prototype._toggleDebugging): Start or stop debugging
        depending on InspectorController.debuggerAttached().
        * page/inspector/inspector.css: Added style rules for the debugger button.

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

        Change PlatformWheelEvent to use GET_WHEEL_DELTA_WPARAM

        Reviewed by Dan Bernstein.

        * platform/win/WheelEventWin.cpp:
        (WebCore::PlatformWheelEvent::PlatformWheelEvent): Use
        GET_WHEEL_DELTA_WPARAM, which is documented way of getting the wheel
        delta (it is equivalent to what we were previously doing, however).

2008-04-22  Simon Hausmann  <hausmann@webkit.org>

        Qt build fix.

        Adjust the Qt resource file to removed image files.

        * page/inspector/WebKit.qrc:

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

        Use CSS gradients to replace many image files in the Web Inspector.

        Rubber-stamped by Adam Roben.

        * page/inspector/Images/alternateTableRows.png: Removed.
        * page/inspector/Images/darkShadow.png: Removed.
        * page/inspector/Images/paneHeader.png: Removed.
        * page/inspector/Images/paneHeaderActive.png: Removed.
        * page/inspector/Images/sidebarSelection.png: Removed.
        * page/inspector/Images/sidebarSelectionBackground.png: Removed.
        * page/inspector/Images/sidebarSelectionBackgroundFocused.png: Removed.
        * page/inspector/Images/sidebarSelectionBackgroundInactive.png: Removed.
        * page/inspector/Images/sidebarSelectionBlurred.png: Removed.
        * page/inspector/Images/sidebarSelectionBlurredTall.png: Removed.
        * page/inspector/Images/sidebarSelectionGray.png: Removed.
        * page/inspector/Images/sidebarSelectionGrayTall.png: Removed.
        * page/inspector/Images/sidebarSelectionTall.png: Removed.
        * page/inspector/Images/sidebarSmallSelectionBackground.png: Removed.
        * page/inspector/Images/sidebarSmallSelectionBackgroundFocused.png: Removed.
        * page/inspector/Images/sidebarSmallSelectionBackgroundInactive.png: Removed.
        * page/inspector/Images/toolbarBackground.png: Removed.
        * page/inspector/Images/toolbarBackgroundInactive.png: Removed.
        * page/inspector/inspector.css:

2008-04-22  Andre Poenitz  <andre.poenitz@trolltech.com>

        Reviewed by Simon.

        Remove compiler warnings on string literals used to construct QStrings
        in webkit.

        * bridge/qt/qt_instance.cpp:
        (KJS::Bindings::QtField::valueFromInstance):
        (KJS::Bindings::QtField::setValueToInstance):
        * bridge/qt/qt_runtime.cpp:
        (KJS::Bindings::convertValueToQVariant):
        (KJS::Bindings::QtRuntimeConnectionMethod::callAsFunction):

2008-04-22  Tor Arne Vestbø  <tavestbo@trolltech.com>

        Reviewed by Simon.

        Fall back to last path component for suggested filename if the HTTP content disposition is not set.

        * platform/network/qt/QNetworkReplyHandler.cpp:
        (WebCore::QNetworkReplyHandler::sendResponseIfNeeded):

2008-04-22  Tor Arne Vestbø  <tavestbo@trolltech.com>

        Reviewed by Simon.

        Implemented the generation of the title string for images.

        * platform/qt/Localizations.cpp:

2008-04-22  Simon Hausmann  <hausmann@webkit.org>

        Qt build fix.

        * platform/qt/RenderThemeQt.cpp: Adjust isControlStyled signature to
        the signature in the base class.
        * platform/qt/RenderThemeQt.h: Ditto.

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

        Reviewed by Darin.

        Add a method to get the AccessibilityObject's access key,

        * page/AccessibilityObject.cpp:
        (WebCore::AccessibilityObject::accessKey): Added; returns the object's
        access key attribute.
        * page/AccessibilityObject.h: Added declaration for accessKey().

2008-04-21  Sam Weinig  <sam@webkit.org>

        Reviewed by Anders Carlsson.

        Fix numerous crashing tests.

        * html/HTMLHtmlElement.cpp:
        (WebCore::HTMLHtmlElement::insertedIntoDocument): Null check document->frame().

2008-04-21  Dan Bernstein  <mitz@apple.com>

        Reviewed by Darin Adler.

        Tests: fast/media/implicit-media-all.html
               fast/media/monochrome.html

        - allow implicit "all" media in media queries
        - use a value of 0 for the monochrome media feature on color displays

        * css/CSSGrammar.y:
        * css/CSSParser.cpp:
        (WebCore::CSSParser::createFloatingMediaQuery):
        * css/CSSParser.h:
        * css/MediaQueryEvaluator.cpp:
        (WebCore::monochromeMediaFeatureEval):

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

        Rockingly reviewed by Adele

        Small StorageArea cleanups

        * storage/SessionStorageArea.cpp:
        (WebCore::SessionStorageArea::copy): Pass "this" instead of the StorageMap belonging to this
        (WebCore::SessionStorageArea::SessionStorageArea):
        * storage/SessionStorageArea.h:

        * storage/StorageArea.cpp:  Changed to not expose the StorageMap at all - it's dangerous to expose
          it since we rely explicitly on its ref-count
        (WebCore::StorageArea::StorageArea): Take another StorageArea as the c'tor argument and get the 
          StorageMap from that.
        (WebCore::StorageArea::setItem):  The previous comment/code here was bogus.  All JS objects passed in
          to this API are stringified, so there's no such thing as "null" for setItem()
        * storage/StorageArea.h:

2008-04-21  Justin Garcia  <justin.garcia@apple.com>

        Reviewed by John Sullivan.

        <rdar://problem/5803706> Pressing return at the end of a header doesn't break out of header (17460)
        
        If we're doing InsertParagraphSeparator at the end of a header element, do not clone it.
        Renamed m_useDefaultParagraphElement to m_mustUseDefaultParagraphElement, since now,
        when it is false, that does not necessarily mean that a default paragraph element
        will not be used.  Callers that passed false for this argument are OK with this.

        * editing/InsertParagraphSeparatorCommand.cpp:
        (WebCore::InsertParagraphSeparatorCommand::InsertParagraphSeparatorCommand): 
        (WebCore::InsertParagraphSeparatorCommand::shouldUseDefaultParagraphElement):
        (WebCore::InsertParagraphSeparatorCommand::doApply):
        * editing/InsertParagraphSeparatorCommand.h:

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

        Reviewed by Adam.

        Perform cache selection. If a main resource has a URL that exists in a cache, load it from there.
        
        * html/HTMLAttributeNames.in:
        Add manifest attribute.
        
        * html/HTMLHtmlElement.cpp:
        (WebCore::HTMLHtmlElement::insertedIntoDocument):
        * html/HTMLHtmlElement.h:
        Perform cache selection.
        
        * loader/MainResourceLoader.cpp:
        (WebCore::MainResourceLoader::load):
        * loader/appcache/ApplicationCacheGroup.cpp:
        (WebCore::cacheHostSet):
        (WebCore::urlHostHash):
        (WebCore::ApplicationCacheGroup::cacheForRequest):
        (WebCore::ApplicationCacheGroup::selectCache):
        * loader/appcache/ApplicationCacheGroup.h:
        * platform/KURL.h:
        (WebCore::KURL::hostStart):
        (WebCore::KURL::hostEnd):

2008-04-21  Mike Belshe  <mike@belshe.com>

        Reviewed by eseidel and darin.  Landed by eseidel.

        Fix broken optimization in createStrippingNullCharacters.

        * platform/text/StringImpl.cpp:
        (WebCore::StringImpl::createStrippingNullCharacters):

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

        Make the back end parsing of background properties generic.  Rename all the parsing functions from
        background -> fill.

        Add a new set of properties for doing masks.  The code is now refactored so that the mask properties
        and the background properties share parsing routines.

        Reviewed by Dan

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::CSSComputedStyleDeclaration::getPropertyCSSValue):
        * css/CSSParser.cpp:
        (WebCore::CSSParser::parseValue):
        (WebCore::CSSParser::addFillValue):
        (WebCore::CSSParser::parseFillShorthand):
        (WebCore::CSSParser::parseFillImage):
        (WebCore::CSSParser::parseFillPositionXY):
        (WebCore::CSSParser::parseFillPosition):
        (WebCore::CSSParser::parseFillSize):
        (WebCore::CSSParser::parseFillProperty):
        (WebCore::CSSParser::parseTransformOrigin):
        * css/CSSParser.h:
        * css/CSSPropertyNames.in:
        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::CSSStyleSelector):
        (WebCore::CSSStyleSelector::mapFillAttachment):
        (WebCore::CSSStyleSelector::mapFillClip):
        (WebCore::CSSStyleSelector::mapFillComposite):
        (WebCore::CSSStyleSelector::mapFillOrigin):
        (WebCore::CSSStyleSelector::mapFillImage):
        (WebCore::CSSStyleSelector::mapFillRepeat):
        (WebCore::CSSStyleSelector::mapFillSize):
        (WebCore::CSSStyleSelector::mapFillXPosition):
        (WebCore::CSSStyleSelector::mapFillYPosition):
        * rendering/RenderStyle.cpp:
        (WebCore::FillLayer::FillLayer):
        (WebCore::FillLayer::operator=):
        (WebCore::FillLayer::operator==):
        (WebCore::StyleBackgroundData::StyleBackgroundData):
        (WebCore::StyleRareNonInheritedData::StyleRareNonInheritedData):
        (WebCore::StyleRareNonInheritedData::operator==):
        (WebCore::RenderStyle::diff):
        * rendering/RenderStyle.h:
        (WebCore::LengthSize::LengthSize):
        (WebCore::FillLayer::type):
        (WebCore::FillLayer::initialFillAttachment):
        (WebCore::FillLayer::initialFillClip):
        (WebCore::FillLayer::initialFillOrigin):
        (WebCore::FillLayer::initialFillRepeat):
        (WebCore::FillLayer::initialFillComposite):
        (WebCore::FillLayer::initialFillSize):
        (WebCore::FillLayer::initialFillXPosition):
        (WebCore::FillLayer::initialFillYPosition):
        (WebCore::FillLayer::initialFillImage):
        (WebCore::RenderStyle::maskImage):
        (WebCore::RenderStyle::maskRepeat):
        (WebCore::RenderStyle::maskComposite):
        (WebCore::RenderStyle::maskAttachment):
        (WebCore::RenderStyle::maskClip):
        (WebCore::RenderStyle::maskOrigin):
        (WebCore::RenderStyle::maskXPosition):
        (WebCore::RenderStyle::maskYPosition):
        (WebCore::RenderStyle::maskSize):
        (WebCore::RenderStyle::accessMaskLayers):
        (WebCore::RenderStyle::maskLayers):
        (WebCore::RenderStyle::clearBackgroundLayers):
        (WebCore::RenderStyle::clearMaskLayers):
        (WebCore::RenderStyle::inheritMaskLayers):

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

        Fixes the issue were a Database view could still be visible after navigating to a new page.

        Reviewed by Darin Adler.

        * page/inspector/DatabasesPanel.js:
        (WebInspector.DatabasesPanel.prototype.reset): Delete the _tableViews and _queryView properties
        from all databases. Remove all the children from databaseViews.

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

        Adds the ability to enter multi-line commands in the console by holding the
        alt/option key when pressing enter/return.

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

        Reviewed by Darin Adler.

        * page/inspector/Console.js:
        (WebInspector.Console.prototype._enterKeyPressed): Return early if the
        alt/option key is held when enter is pressed.
        * page/inspector/inspector.css:
        (.console-message-text): Added. Set white-space: pre-wrap.

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

        Fixes the bug where the Database table names do not update when
        running the CREATE TABLE or DROP TABLE queries. Also makes the
        table names update every time the database is collapsed and expanded.

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

        Reviewed by Darin Adler.

        * page/inspector/DatabasesPanel.js:
        (WebInspector.DatabasesPanel.prototype.updateDatabaseTables):
        Set shouldRefreshChildren to true on the Database's tree element.
        The refreshChildren property was renamed to shouldRefreshChildren.
        (WebInspector.DatabaseSidebarTreeElement.prototype.oncollapse):
        Request a refresh after every collapse so the next expand will
        have an updated table list.

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

        Adds INDEX to the list of completion words for the Databases query view.

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

        Reviewed by Darin Adler.

        * page/inspector/DatabaseQueryView.js:
        (WebInspector.DatabaseQueryView.prototype.completions): Split up "CREATE TABLE "
        and "DROP TABLE " into "CREATE ", "DROP ", "TABLE ". And added "INDEX ".

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

        Adds the UI portions of the Scripts panel to the Web Inspector.
        The Scripts panel has not been added to the toolbar yet.

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

        Reviewed by Adam Roben.

        * English.lproj/InspectorLocalizedStrings.js: Changed "Show inherited properties"
        to "Show inherited". Adds new strings for the Scripts' panel tooltips.
        * page/inspector/BreakpointsSidebarPane.js: Added.
        * page/inspector/CallStackSidebarPane.js: Added.
        * page/inspector/Images/back.png: Added.
        * page/inspector/Images/debuggerContinue.png: Added.
        * page/inspector/Images/debuggerPause.png: Added.
        * page/inspector/Images/debuggerStepInto.png: Added.
        * page/inspector/Images/debuggerStepOut.png: Added.
        * page/inspector/Images/debuggerStepOver.png: Added.
        * page/inspector/Images/forward.png: Added.
        * page/inspector/Images/statusbarResizerHorizontal.png: Added.
        * page/inspector/PropertiesSection.js:
        (WebInspector.PropertiesSection): Flip the order the subtile is appended
        so it can float right in the CSS.
        * page/inspector/ScriptsPanel.js: Added.
        * page/inspector/StylesSidebarPane.js:
        (WebInspector.StylePropertiesSection): Changed "Show inherited properties"
        to "Show inherited".
        * page/inspector/inspector.css: Added new CSS rules for the Scripts panel. 
        Also changes the look of the section to match the mockup, this affects
        Styles and Properties in Elements.
        * page/inspector/inspector.html: Import new files.
        * page/inspector/inspector.js:
        (Preferences.minScriptsSidebarWidth): Added.

2008-04-21  Kevin McCullough  <kmccullough@apple.com>

        Reviewed by Adam.

        <rdar://problem/5770054> JavaScript profiler (10928)
        Took out debugging printing since we really want to hook into the
        inspector and not to print to the terminal.

        * page/Console.cpp:
        (WebCore::Console::profileEnd):

2008-04-21  Sam Weinig  <sam@webkit.org>

        Reviewed by Alexey Proskuryakov.

        Fix up XMLHttpRequestProgressEvent.

        * bindings/js/JSEventCustom.cpp:
        (WebCore::toJS):
        * xml/XMLHttpRequestProgressEvent.cpp:
        * xml/XMLHttpRequestProgressEvent.h:

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

        Fix Bug 18615: Crash in PluginPackage::hash

        <https://bugs.webkit.org/show_bug.cgi?id=18615>

        Reviewed by Anders Carlsson.

        * plugins/PluginDatabase.cpp:
        (WebCore::PluginDatabase::refresh): Don't pass a null PluginPackage*
        to add().

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

        Reviewed by Adam.

        Add cache group implementation.

        * loader/DocumentLoader.cpp:
        (WebCore::DocumentLoader::scheduleApplicationCacheLoad):
        * loader/appcache/ApplicationCache.cpp:
        (WebCore::ApplicationCache::requestIsHTTPOrHTTPSGet):
        (WebCore::ApplicationCache::resourceForRequest):
        * loader/appcache/ApplicationCache.h:
        * loader/appcache/ApplicationCacheGroup.cpp:
        (WebCore::cacheGroupMap):
        (WebCore::ApplicationCacheGroup::ApplicationCacheGroup):
        (WebCore::ApplicationCacheGroup::selectCache):
        (WebCore::ApplicationCacheGroup::selectCacheWithoutManifestURL):
        (WebCore::ApplicationCacheGroup::finishedLoadingMainResource):
        (WebCore::ApplicationCacheGroup::documentLoaderDestroyed):
        (WebCore::ApplicationCacheGroup::cacheDestroyed):
        (WebCore::ApplicationCacheGroup::update):
        (WebCore::ApplicationCacheGroup::didReceiveResponse):
        (WebCore::ApplicationCacheGroup::didReceiveData):
        (WebCore::ApplicationCacheGroup::didFinishLoading):
        (WebCore::ApplicationCacheGroup::didFail):
        (WebCore::ApplicationCacheGroup::didReceiveManifestResponse):
        (WebCore::ApplicationCacheGroup::didReceiveManifestData):
        (WebCore::ApplicationCacheGroup::didFinishLoadingManifest):
        (WebCore::ApplicationCacheGroup::cacheUpdateFailed):
        (WebCore::ApplicationCacheGroup::didFailToLoadManifest):
        (WebCore::ApplicationCacheGroup::checkIfLoadIsComplete):
        (WebCore::ApplicationCacheGroup::startLoadingEntry):
        (WebCore::ApplicationCacheGroup::addEntry):
        (WebCore::ApplicationCacheGroup::associateDocumentLoaderWithCache):
        (WebCore::ApplicationCacheGroup::callListenersOnAssociatedDocuments):
        (WebCore::ApplicationCacheGroup::callListeners):
        * loader/appcache/ApplicationCacheGroup.h:
        (WebCore::ApplicationCacheGroup::status):
        (WebCore::ApplicationCacheGroup::newestCache):
        * platform/KURL.h:
        (WebCore::KURL::hostStart):
        (WebCore::KURL::hostEnd):

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

        Rename BackgroundLayer -> FillLayer in preparation for it being used for other types of fills.

        Reviewed by Dan

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::CSSComputedStyleDeclaration::getPropertyCSSValue):
        * css/CSSPrimitiveValueMappings.h:
        (WebCore::CSSPrimitiveValue::CSSPrimitiveValue):
        (WebCore::CSSPrimitiveValue::operator EFillBox):
        (WebCore::CSSPrimitiveValue::operator EFillRepeat):
        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::applyProperty):
        (WebCore::CSSStyleSelector::mapFillAttachment):
        (WebCore::CSSStyleSelector::mapFillClip):
        (WebCore::CSSStyleSelector::mapFillComposite):
        (WebCore::CSSStyleSelector::mapFillOrigin):
        (WebCore::CSSStyleSelector::mapFillImage):
        (WebCore::CSSStyleSelector::mapFillRepeat):
        (WebCore::CSSStyleSelector::mapFillSize):
        (WebCore::CSSStyleSelector::mapFillXPosition):
        (WebCore::CSSStyleSelector::mapFillYPosition):
        (WebCore::CSSStyleSelector::mapTransitionDuration):
        (WebCore::CSSStyleSelector::mapTransitionRepeatCount):
        (WebCore::CSSStyleSelector::mapTransitionTimingFunction):
        (WebCore::CSSStyleSelector::mapTransitionProperty):
        * css/CSSStyleSelector.h:
        * page/AnimationController.cpp:
        (WebCore::ImplicitAnimation::ImplicitAnimation):
        (WebCore::CompositeImplicitAnimation::animate):
        * rendering/InlineFlowBox.cpp:
        (WebCore::InlineFlowBox::paintBackgrounds):
        (WebCore::InlineFlowBox::paintBackground):
        * rendering/InlineFlowBox.h:
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::paintRootBoxDecorations):
        (WebCore::RenderBox::paintBackgrounds):
        (WebCore::RenderBox::paintBackground):
        (WebCore::RenderBox::calculateBackgroundSize):
        (WebCore::RenderBox::imageChanged):
        (WebCore::RenderBox::calculateBackgroundImageGeometry):
        (WebCore::RenderBox::paintBackgroundExtended):
        * rendering/RenderBox.h:
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::mustRepaintBackgroundOrBorder):
        (WebCore::RenderObject::updateBackgroundImages):
        (WebCore::RenderObject::arenaDelete):
        * rendering/RenderObject.h:
        (WebCore::RenderObject::paintBackgroundExtended):
        * rendering/RenderStyle.cpp:
        (WebCore::FillLayer::FillLayer):
        (WebCore::FillLayer::~FillLayer):
        (WebCore::FillLayer::operator=):
        (WebCore::FillLayer::operator==):
        (WebCore::FillLayer::fillUnsetProperties):
        (WebCore::FillLayer::cullEmptyLayers):
        (WebCore::Transition::fillUnsetProperties):
        * rendering/RenderStyle.h:
        (WebCore::FillLayer::image):
        (WebCore::FillLayer::xPosition):
        (WebCore::FillLayer::yPosition):
        (WebCore::FillLayer::attachment):
        (WebCore::FillLayer::clip):
        (WebCore::FillLayer::origin):
        (WebCore::FillLayer::repeat):
        (WebCore::FillLayer::composite):
        (WebCore::FillLayer::size):
        (WebCore::FillLayer::next):
        (WebCore::FillLayer::isImageSet):
        (WebCore::FillLayer::isXPositionSet):
        (WebCore::FillLayer::isYPositionSet):
        (WebCore::FillLayer::isAttachmentSet):
        (WebCore::FillLayer::isClipSet):
        (WebCore::FillLayer::isOriginSet):
        (WebCore::FillLayer::isRepeatSet):
        (WebCore::FillLayer::isCompositeSet):
        (WebCore::FillLayer::isSizeSet):
        (WebCore::FillLayer::setImage):
        (WebCore::FillLayer::setXPosition):
        (WebCore::FillLayer::setYPosition):
        (WebCore::FillLayer::setAttachment):
        (WebCore::FillLayer::setClip):
        (WebCore::FillLayer::setOrigin):
        (WebCore::FillLayer::setRepeat):
        (WebCore::FillLayer::setComposite):
        (WebCore::FillLayer::setSize):
        (WebCore::FillLayer::clearImage):
        (WebCore::FillLayer::clearXPosition):
        (WebCore::FillLayer::clearYPosition):
        (WebCore::FillLayer::clearAttachment):
        (WebCore::FillLayer::clearClip):
        (WebCore::FillLayer::clearOrigin):
        (WebCore::FillLayer::clearRepeat):
        (WebCore::FillLayer::clearComposite):
        (WebCore::FillLayer::clearSize):
        (WebCore::FillLayer::setNext):
        (WebCore::FillLayer::operator!=):
        (WebCore::FillLayer::hasFixedImage):
        (WebCore::Transition::isDurationSet):
        (WebCore::Transition::isRepeatCountSet):
        (WebCore::Transition::isTimingFunctionSet):
        (WebCore::Transition::isPropertySet):
        (WebCore::Transition::clearDuration):
        (WebCore::Transition::clearRepeatCount):
        (WebCore::Transition::clearTimingFunction):
        (WebCore::Transition::clearProperty):
        (WebCore::Transition::duration):
        (WebCore::Transition::repeatCount):
        (WebCore::Transition::timingFunction):
        (WebCore::Transition::property):
        (WebCore::Transition::setDuration):
        (WebCore::Transition::setRepeatCount):
        (WebCore::Transition::setTimingFunction):
        (WebCore::Transition::setProperty):
        (WebCore::RenderStyle::NonInheritedFlags::operator==):
        (WebCore::RenderStyle::setBitDefaults):
        (WebCore::RenderStyle::backgroundRepeat):
        (WebCore::RenderStyle::backgroundComposite):
        (WebCore::RenderStyle::backgroundAttachment):
        (WebCore::RenderStyle::backgroundClip):
        (WebCore::RenderStyle::backgroundOrigin):
        (WebCore::RenderStyle::backgroundSize):
        (WebCore::RenderStyle::accessBackgroundLayers):
        (WebCore::RenderStyle::backgroundLayers):
        (WebCore::RenderStyle::clearBackgroundLayers):
        (WebCore::RenderStyle::inheritBackgroundLayers):
        (WebCore::RenderStyle::initialFillAttachment):
        (WebCore::RenderStyle::initialFillClip):
        (WebCore::RenderStyle::initialFillOrigin):
        (WebCore::RenderStyle::initialFillRepeat):
        (WebCore::RenderStyle::initialFillComposite):
        (WebCore::RenderStyle::initialFillSize):
        (WebCore::RenderStyle::initialFillXPosition):
        (WebCore::RenderStyle::initialFillYPosition):
        (WebCore::RenderStyle::initialFillImage):
        (WebCore::RenderStyle::initialWhiteSpace):
        (WebCore::RenderStyle::initialColor):
        * rendering/RenderTableCell.cpp:
        (WebCore::RenderTableCell::paintBackgroundsBehindCell):
        * rendering/RenderTheme.cpp:
        (WebCore::RenderTheme::adjustStyle):
        (WebCore::RenderTheme::isControlStyled):
        * rendering/RenderTheme.h:
        * rendering/RenderThemeMac.h:
        * rendering/RenderThemeMac.mm:
        (WebCore::RenderThemeMac::isControlStyled):

2008-04-21  Julien Chaffraix  <jchaffraix@webkit.org>

        Rubber-stamped by Ap.

        Add 2 explicit casts.
        Fixes built on 64-bit machines (64-bit to 32-bit conversion warning).

        * xml/XMLHttpRequest.cpp:
        (WebCore::XMLHttpRequest::dispatchProgressEvent):

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

        Reviewed by Adam.

        Make it possible to load resources from the cache. 
        (Currently no documents are ever associated with a cache though.)
        
        * loader/DocumentLoader.cpp:
        (WebCore::DocumentLoader::setPrimaryLoadComplete):
        (WebCore::DocumentLoader::mainResourceApplicationCache):
        (WebCore::DocumentLoader::scheduleApplicationCacheLoad):
        * loader/DocumentLoader.h:
        * loader/MainResourceLoader.cpp:
        (WebCore::MainResourceLoader::didFinishLoading):
        (WebCore::MainResourceLoader::load):
        * loader/MainResourceLoader.h:
        (WebCore::MainResourceLoader::applicationCache):
        * loader/ResourceLoader.cpp:
        (WebCore::ResourceLoader::ResourceLoader):
        (WebCore::ResourceLoader::load):
        * loader/ResourceLoader.h:
        * loader/appcache/ApplicationCacheGroup.h:
        (WebCore::ApplicationCacheGroup::finishedLoadingMainResource):

2008-04-21  Darin Fisher  <darin@chromium.org>

        Reviewed by eseidel.  Landed by eseidel.

        Add FrameLoader::policyDocumentLoader, and change
        provisionalDocumentLoader to have a const signature to be
        consistent with documentLoader and activeDocumentLoader.

        * WebCore.base.exp:
        * WebCore.order:
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::policyDocumentLoader):
        (WebCore::FrameLoader::provisionalDocumentLoader):
        * loader/FrameLoader.h:

2008-04-21  Julien Chaffraix  <jchaffraix@webkit.org>

        Not reviewed, add missing files in my previous commit.

        Test: http/tests/xmlhttprequest/infoOnProgressEvent.html

        * xml/XMLHttpRequestProgressEvent.cpp: Added.
        (WebCore::XMLHttpRequestProgressEvent::XMLHttpRequestProgressEvent):
        (WebCore::XMLHttpRequestProgressEvent::position):
        (WebCore::XMLHttpRequestProgressEvent::totalSize):
        * xml/XMLHttpRequestProgressEvent.h: Added.
        (WebCore::XMLHttpRequestProgressEvent::isXMLHttpRequestProgressEvent):
        (WebCore::XMLHttpRequestProgressEvent::isProgressEvent):
        (WebCore::XMLHttpRequestProgressEvent::lengthComputable):
        (WebCore::XMLHttpRequestProgressEvent::loaded):
        (WebCore::XMLHttpRequestProgressEvent::total):
        * xml/XMLHttpRequestProgressEvent.idl: Added.

2008-04-21  Julien Chaffraix  <jchaffraix@webkit.org>

        Reviewed by Ap.

        Bug 13596: Implement .onprogress handler on XMLHttpRequest objects to support
        progressive download content length information.

        - Add the onprogress attribute to XMLHttpRequest and the necessary bindings.

        - We use a custom event XMLHttpRequestProgressEvent that is derived from ProgressEvent
         (as specified by the XHR2 specification) but also implement LSProgressEvent interface
         (to be compliant with Firefox event).

        Test: http/tests/xmlhttprequest/infoOnProgressEvent.html

        * DerivedSources.make:
        * GNUmakefile.am:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * WebCoreSources.bkl:
        * bindings/js/JSEventCustom.cpp:
        (WebCore::toJS):
        * bindings/js/JSXMLHttpRequestCustom.cpp:
        (WebCore::JSXMLHttpRequest::mark):
        (WebCore::JSXMLHttpRequest::onprogress):
        (WebCore::JSXMLHttpRequest::setOnprogress):
        * dom/Event.cpp:
        (WebCore::Event::isXMLHttpRequestProgressEvent):
        * dom/Event.h:
        * dom/ProgressEvent.h: Replaced 'private' by 'protected' to enable derivation.
        * xml/XMLHttpRequest.cpp:
        (WebCore::XMLHttpRequest::onProgressListener): onprogress getter.
        (WebCore::XMLHttpRequest::setOnProgressListener): onprogress setter.
        (WebCore::XMLHttpRequest::XMLHttpRequest): initialize m_receivedLength.
        (WebCore::XMLHttpRequest::internalAbort): reset m_receivedLength on abort.
        (WebCore::XMLHttpRequest::didReceiveData): add updateAndDispatchOnProgress call.
        (WebCore::XMLHttpRequest::updateAndDispatchOnProgress):
        (WebCore::XMLHttpRequest::dispatchProgressEvent):
        * xml/XMLHttpRequest.h:
        * xml/XMLHttpRequest.idl: Add onprogress event handler.
        * xml/XMLHttpRequestProgressEvent.cpp: Added.
        (WebCore::XMLHttpRequestProgressEvent::XMLHttpRequestProgressEvent):
        (WebCore::XMLHttpRequestProgressEvent::position):
        (WebCore::XMLHttpRequestProgressEvent::totalSize):
        The two previous methods are used for Firefox compatibility and map to the
        same value as the ProgressEvent methods (but they are deprecated and display

        * xml/XMLHttpRequestProgressEvent.h: Added.
        (WebCore::XMLHttpRequestProgressEvent::isXMLHttpRequestProgressEvent):
        (WebCore::XMLHttpRequestProgressEvent::isProgressEvent):
        (WebCore::XMLHttpRequestProgressEvent::lengthComputable):
        (WebCore::XMLHttpRequestProgressEvent::loaded):
        (WebCore::XMLHttpRequestProgressEvent::total):
        * xml/XMLHttpRequestProgressEvent.idl: Added.

2008-04-21  Michael Goddard  <michael.goddard@trolltech.com>

        Reviewed by Simon.

        Better handle Qt binding object lifetime in JS.
        Add explicit marking of JS objects created for Qt
        bindings, and remove the gcProtect calls.

        * bridge/qt/qt_class.cpp:
        (KJS::Bindings::QtClass::fallbackObject):
        * bridge/qt/qt_instance.cpp:
        (KJS::Bindings::QtRuntimeObjectImp::mark):
        (KJS::Bindings::QtInstance::~QtInstance):
        (KJS::Bindings::QtInstance::mark):
        (KJS::Bindings::QtInstance::invokeDefaultMethod):
        (KJS::Bindings::QtField::valueFromInstance):
        * bridge/qt/qt_instance.h:

2008-04-21  Michael Goddard  <michael.goddard@trolltech.com>

        Reviewed by Simon.

        Add better support for RuntimeArray type conversions.
        It seems that RuntimeArray claims to inherit ArrayInstance
        (in the JS sense), but the C++ class doesn't, so properly
        access RuntimeArrays.  Also, properly support turning
        a JS object into a QVariantMap, since we support the
        reverse.

        * bridge/qt/qt_runtime.cpp:
        (KJS::Bindings::):
        (KJS::Bindings::operator<<):
        (KJS::Bindings::valueRealType):
        (KJS::Bindings::convertValueToQVariant):
        (KJS::Bindings::convertQVariantToValue):

2008-04-21  Simon Hausmann  <hausmann@webkit.org>

        Reviewed by Holger.

        Fix painting of text fields in the CleanLooks style.

        The CleanLooks style calls painter->drawRect() and expects a painter
        that has no brush set. This is a fairly common assumption and therefore
        we now always set the brush to NoBrush before calling a style. This
        is done by centralizing the painter setup code into StylePainter
        and restore the old brush in the StylePainter destructor.

        In addition for textfields it is not necessary anymore to draw
        PE_FrameLineEdit as we set the lineWidth in the style option correctly
        and it's the style responsibility (QCommonStyle usually) to draw
        PE_FrameLineEdit.

        * platform/qt/RenderThemeQt.cpp:
        (WebCore::RenderThemeQt::paintButton):
        (WebCore::RenderThemeQt::paintTextField):
        (WebCore::RenderThemeQt::paintMenuList):
        (WebCore::StylePainter::StylePainter):
        (WebCore::StylePainter::~StylePainter):
        * platform/qt/RenderThemeQt.h:
        (WebCore::StylePainter::isValid):
        (WebCore::StylePainter::drawPrimitive):
        (WebCore::StylePainter::drawControl):
        (WebCore::StylePainter::drawComplexControl):

2008-04-21  Olivier Goffart  <ogoffart@trolltech.com>

        Reviewed by Simon.

        Fixes copy and paste of international characters.

        When exporting HTML to the clipboard we need meta tags for now that confirm the
        conversion to utf-8 done inside QClipboard.

        * platform/qt/PasteboardQt.cpp:
        (WebCore::Pasteboard::writeSelection):

2008-04-21  Olivier Goffart  <ogoffart@trolltech.com>

        Reviewed by Simon.

        Fixes: Copying on X11 doesn't always work in webkit

        Calling QClipboard::clear right before QClipboard::setData create a race condition with klipper. So don't call QClipboard::clear since it's not required.

        * platform/qt/PasteboardQt.cpp:

2008-04-21  Holger Hans Peter Freyther  <holger.freyther@trolltech.com>

        Reviewed by Simon.

        * Assume that our lineedit has a frame. This is needed for the motif style

        * platform/qt/RenderThemeQt.cpp:
        (WebCore::RenderThemeQt::paintTextField):

2008-04-21  Holger Hans Peter Freyther  <holger.freyther@trolltech.com>

        Reviewed by Simon.

        * Follow the windows render theme when determining whether to style
        listboxes or not.

        * platform/qt/RenderThemeQt.cpp:
        (WebCore::RenderThemeQt::isControlStyled):

2008-04-21  Holger Hans Peter Freyther  <holger.freyther@trolltech.com>

        Reviewed by Simon.

        * Try to bring the notImplemented implementations closer together. This will
        print each unimplemted method name only once.

        * We might want to change wtf/Assertions.cpp to use qDebug

        * platform/NotImplemented.h:

2008-04-21  Holger Hans Peter Freyther  <holger.freyther@trolltech.com>

        Reviewed by Simon.

        * Remove the special Qt ctor of BitmapImage as it did not work. The Bitmap returned
        0 as width and after intialising drawing would fail. BitmapImage relies on a proper
        ImageSource.
        * Instead of adding more special cases to BitmapImage create a new class called StillImage
        which is getting one QPixmap and is implementing Image::draw and Image::size. This is
        working well for the images created using Image::loadPlatformResource.

        * platform/graphics/BitmapImage.h:
        * platform/graphics/qt/ImageQt.cpp:
        (WebCore::BitmapImage::initPlatformData):
        (WebCore::BitmapImage::getPixmap):
        (WebCore::StillImage::StillImage):
        (WebCore::StillImage::size):
        (WebCore::StillImage::getPixmap):
        (WebCore::StillImage::draw):

2008-04-21  Holger Hans Peter Freyther  <holger.freyther@trolltech.com>

        Reviewed by Simon.

        * Package the Resources into a qrc

        * Resources/WebKitResources.qrc: Added.
        * WebCore.pro:

2008-04-21  Holger Hans Peter Freyther  <holger.freyther@trolltech.com>

        Reviewed by Simon.

        * Make sure every resource is available als png as well.

        * Resources/deleteButton.png: Added.
        * Resources/deleteButtonPressed.png: Added.
        * Resources/missingImage.png: Added.
        * Resources/nullPlugin.png: Copied from WebKit/win/WebKit.vcproj/nullplugin.png.
        * Resources/textAreaResizeCorner.png: Added.
        * Resources/urlIcon.png: Copied from WebKit/win/WebKit.vcproj/urlIcon.png.

2008-04-20  Sriram Neelakandan  <sriram.neelakandan@gmail.com>

        Reviewed by Alp Toker.

        Implement FileSystemGtk's getFileModificationTime() with GLib.

        * platform/gtk/FileSystemGtk.cpp:
        (WebCore::getFileModificationTime):

2008-04-20  Christian Persch  <chpe@gnome.org>

        Reviewed by Alp Toker.

        Bundle GTK+ Xt compatibility code from Mozilla. These files are used
        by all currently proposed GTK+ plugin patches and will make the
        proposed patches smaller and easier to review.

        These files should be kept as close to the upstream versions as
        possible so fixes can be shared between projects and to ensure
        compatibility with the reference implementation.

        * plugins/gtk/gtk2xtbin.c: Added.
        (xt_event_prepare):
        (xt_event_check):
        (xt_event_dispatch):
        (xt_event_polling_timer_callback):
        (gtk_xtbin_get_type):
        (gtk_xtbin_class_init):
        (gtk_xtbin_init):
        (gtk_xtbin_realize):
        (gtk_xtbin_new):
        (gtk_xtbin_set_position):
        (gtk_xtbin_resize):
        (gtk_xtbin_unrealize):
        (gtk_xtbin_destroy):
        (xt_client_init):
        (xt_client_create):
        (xt_client_unrealize):
        (xt_client_destroy):
        (xt_client_set_info):
        (xt_client_handle_xembed_message):
        (xt_client_event_handler):
        (send_xembed_message):
        (error_handler):
        (trap_errors):
        (untrap_error):
        (xt_client_focus_listener):
        (xt_add_focus_listener):
        (xt_remove_focus_listener):
        (xt_add_focus_listener_tree):
        * plugins/gtk/gtk2xtbin.h: Added.

2008-04-20  Dirk Schulze  <vbs85@gmx.de>

        Reviewed by Alp Toker.

        http://bugs.webkit.org/show_bug.cgi?id=15449
        [CAIRO] SVG gradients do not work properly

        Fixed SVG-gradients in Cairo.

        * svg/graphics/cairo/SVGPaintServerGradientCairo.cpp:
        (WebCore::SVGPaintServerGradient::setup):

2008-04-20  Simon Hausmann  <hausmann@webkit.org>

        Reviewed by Alp Toker.

        http://bugs.webkit.org/show_bug.cgi?id=18578
        Share the printing code between the Gtk and the Qt port

        Share the printing code between the Gtk and the Qt port
        and added printing to the Qt WebKit API.

        * GNUmakefile.am:
        * WebCore.pro:
        * page/PrintContext.cpp: Added.
        (WebCore::PrintContext::PrintContext):
        (WebCore::PrintContext::~PrintContext):
        (WebCore::PrintContext::pageCount):
        (WebCore::PrintContext::computePageRects):
        (WebCore::PrintContext::begin):
        (WebCore::PrintContext::spoolPage):
        * page/PrintContext.h: Added.

2008-04-19  Alp Toker  <alp@nuanti.com>

        Reviewed by Mark Rowe.

        Complete the Cairo (CSS) gradient implementation.

        * platform/graphics/Gradient.h:
        * platform/graphics/cairo/GradientCairo.cpp:
        (WebCore::Gradient::platformDestroy):
        (WebCore::Gradient::fill):

2008-04-19  Alp Toker  <alp@nuanti.com>

        Reviewed by Dave Hyatt.

        Restore Cairo canvas support following the recent changes in
        BitmapImage and ImageBuffer integrating canvas with CSS. Some
        drawing regressions remain unfixed.

        * platform/graphics/BitmapImage.h:
        * platform/graphics/ImageBuffer.h:
        * platform/graphics/cairo/ImageBufferCairo.cpp:
        (WebCore::ImageBuffer::image):
        * platform/graphics/cairo/ImageCairo.cpp:
        (WebCore::BitmapImage::BitmapImage):
        (WebCore::BitmapImage::draw):
        * platform/graphics/cairo/ImageSourceCairo.cpp:
        (WebCore::ImageSource::createFrameAtIndex):

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

        Reviewed by Dave Hyatt.

        - fix additional cases of https://bugs.webkit.org/show_bug.cgi?id=17921
          namely cases where the trailing white space is already in a separate
          run but still needs to be re-ordered.

        Test: fast/text/trailing-white-space-2.html

        * platform/text/BidiResolver.h:
        (WebCore::::moveRunToEnd):
        (WebCore::::moveRunToBeginning):
        * rendering/bidi.cpp:
        (WebCore::RenderBlock::layoutInlineChildren):

2008-04-19  Alp Toker  <alp@nuanti.com>

        Reviewed by Nikolas.

        Add text shadow support for simple text in FontCairo.

        * platform/graphics/cairo/FontCairo.cpp:
        (WebCore::Font::drawGlyphs):

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

        Fix a minor typo in CSSGradientValue's cssText() method.

        Reviewed by olliej

        * css/CSSGradientValue.cpp:
        (WebCore::CSSGradientValue::cssText):

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

        Reviewed by Tim Hatcher

        Add LocalStorageDatabasePath to the settings for the location of persistent local storage.

        * WebCore.base.exp:

        * page/Settings.cpp:
        (WebCore::Settings::setLocalStorageDatabasePath):
        * page/Settings.h:
        (WebCore::Settings::localStorageDatabasePath):

2008-04-18 Jan  Michael Alonzo  <jmalonzo@unpluggable.com>

        Reviewed by Alp Toker.

        http://bugs.webkit.org/show_bug.cgi?id=16620
        [GTK] Autotools make dist and make check support

        Cleanups.

        * GNUmakefile.am:

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

        Reviewed by Ollie.

        Change when AccessibilityObject children are added.

        Children are now added when children() is called if the children vector
        is not up to date. This removes the need for addChildren() and
        hasChildren() to be called from outside of AccessibilityObject.

        * page/AccessibilityObject.cpp:
        (WebCore::AccessibilityObject::AccessibilityObject): Initialize
        m_haveChildren to false.
        (WebCore::AccessibilityObject::clearChildren): Set m_haveChildren to
        false.
        (WebCore::AccessibilityObject::children): If m_haveChildren is false,
        call addChildren().
        (WebCore::AccessibilityObject::addChildren): Set m_haveChildren to true.
        * page/AccessibilityObject.h: Removed hasChildren(). Made addChildren()
        private and const. Added m_haveChildren. Made m_children mutable so
        children() could modify it.
        * page/mac/AccessibilityObjectWrapper.mm:
        (-[AccessibilityObjectWrapper accessibilityAttributeValue:]): Don't
        call hasChildren() or addChildren().

2008-04-18  Marco Barisione  <marco.barisione@collabora.co.uk>

        Reviewed by Alexey.

        http://bugs.webkit.org/show_bug.cgi?id=18357
        [GTK] Enter on buttons doesn't work

        * platform/gtk/KeyEventGtk.cpp:
        (WebCore::singleCharacterString): Set the text of a keyboard event for
        GDK_ISO_Enter, GDK_KP_Enter, GDK_Return to "\r" instead of an empty
        string.

2008-04-18  Marco Barisione  <marco@barisione.org>

        Reviewed by Alp Toker.

        https://bugs.webkit.org/show_bug.cgi?id=18576
        [GTK] windowsKeyCodeForKeyEvent doesn't handle GDK_ISO_Enter and
        GDK_KP_Enter

        * platform/gtk/KeyEventGtk.cpp:
        (WebCore::windowsKeyCodeForKeyEvent): handle GDK_ISO_Enter and
        GDK_KP_Enter in windowsKeyCodeForKeyEvent.

2008-04-18  Jan Michael Alonzo  <jmalonzo@unpluggable.com>

        Reviewed by Mark Rowe.

        Gtk build fix.  Profiler.h does not live inside the kjs directory of JavaScriptCore
        so it doesn't make sense to include it as kjs/Profiler.h from WebCore.

        * ForwardingHeaders/profiler/Profiler.h: Renamed from WebCore/ForwardingHeaders/kjs/Profiler.h.
        * page/Console.cpp:

2008-04-18  Antti Koivisto  <antti@apple.com>

        Reviewed by Oliver.

        Implement path animation for <animateMotion>.
        
        SVG test suite tests
        animate-elem-07-t.svg
        animate-elem-08-t.svg
        animate-elem-24-t.svg
        animate-elem-30-t.svg

        * svg/SVGAnimateMotionElement.cpp:
        (WebCore::SVGAnimateMotionElement::SVGAnimateMotionElement):
        (WebCore::SVGAnimateMotionElement::hasValidTarget):
        (WebCore::SVGAnimateMotionElement::parseMappedAttribute):
        (WebCore::SVGAnimateMotionElement::rotateMode):
        (WebCore::SVGAnimateMotionElement::animationPath):
        (WebCore::SVGAnimateMotionElement::calculateAnimatedValue):
        (WebCore::SVGAnimateMotionElement::applyResultsToTarget):
        * svg/SVGAnimateMotionElement.h:
        (WebCore::SVGAnimateMotionElement::):
        * svg/SVGAnimationElement.cpp:
        (WebCore::SVGAnimationElement::animationMode):
        (WebCore::SVGAnimationElement::startedActiveInterval):
        * svg/SVGAnimationElement.h:
        (WebCore::SVGAnimationElement::):
        (WebCore::SVGAnimationElement::calculateDistance):
        (WebCore::SVGAnimationElement::animationPath):

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

        Rubber-stamped by Antti Koivisto.

        Silence GCC 4.3 warnings by removing extraneous consts.

        * platform/graphics/Font.h:
        * platform/network/ResourceRequestBase.cpp:
        * platform/network/ResourceRequestBase.h:

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

        Rubberstamped by Mark Rowe

        Roll out http://trac.webkit.org/projects/webkit/changeset/32204 as it was an incorrect build fix.
        The feature in question was NOT database support.

        The proper build fix was later applied by Mark in http://trac.webkit.org/projects/webkit/changeset/32225

        * page/PageGroup.cpp:
        (WebCore::PageGroup::localStorage):

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

        Reviewed by Darin and Sam

        Don't forget PageGroups when their last Page goes away, as this hurts visited links and anything
        else that will be per-PageGroup in the future (such as LocalStorage).

        This also fixes a leak, since PageGroups are ref-counted and therefore clearing the raw pointer out
        of the PageGroups map without manual deletion leaked it!

        * page/Page.cpp:
        (WebCore::Page::setGroupName):

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

        Reviewed by Brady Eidson.

        - fix <rdar://problem/5872671> REGRESSION (3.1.1-TOT): Repro crash going to Ortega Park home page

        Test: fast/dynamic/5872671.html

        * rendering/bidi.cpp:
        (WebCore::RenderBlock::layoutInlineChildren): Added a missing null
        check.

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

        Rubber-stamped by Mark Rowe.

        responseText and responseXML don't throw exceptions so they don't need an ExceptionCode parameter.

        * bindings/js/JSXMLHttpRequestCustom.cpp:
        * xml/XMLHttpRequest.cpp:
        (WebCore::XMLHttpRequest::responseText):
        (WebCore::XMLHttpRequest::responseXML):
        * xml/XMLHttpRequest.h:
        * xml/XMLHttpRequest.idl:

2008-04-18  Kevin McCullough  <kmccullough@apple.com>

        Reviewed by Sam.

        - Build fix.

        * page/Console.cpp:
        (WebCore::Console::profile):
        * page/Console.h:
        * page/Console.idl:

2008-04-18  Eric Seidel  <eric@webkit.org>

        Reviewed by darin.

        Fix probable crasher caused by invalid static_cast
        https://bugs.webkit.org/show_bug.cgi?id=18585

        * page/Frame.cpp:
        (WebCore::Frame::contentRenderer):
        (WebCore::Frame::ownerRenderer):
        * rendering/RenderObject.h: sort the "is*" functions
        (WebCore::RenderObject::isApplet):
        (WebCore::RenderObject::isBR):
        (WebCore::RenderObject::isBlockFlow):
        (WebCore::RenderObject::isCounter):
        (WebCore::RenderObject::isFrame):
        (WebCore::RenderObject::isFrameSet):
        (WebCore::RenderObject::isImage):
        (WebCore::RenderObject::isInlineBlockOrInlineTable):
        (WebCore::RenderObject::isInlineFlow):
        (WebCore::RenderObject::isListBox):
        (WebCore::RenderObject::isListItem):
        (WebCore::RenderObject::isListMarker):
        (WebCore::RenderObject::isMedia):
        (WebCore::RenderObject::isMenuList):
        (WebCore::RenderObject::isRenderBlock):
        (WebCore::RenderObject::isRenderImage):
        (WebCore::RenderObject::isRenderInline):
        (WebCore::RenderObject::isRenderPart):
        (WebCore::RenderObject::isRenderView):
        (WebCore::RenderObject::isSlider):
        (WebCore::RenderObject::isTable):
        (WebCore::RenderObject::isTableCell):
        (WebCore::RenderObject::isTableCol):
        (WebCore::RenderObject::isTableRow):
        (WebCore::RenderObject::isTableSection):
        (WebCore::RenderObject::isTextArea):
        * rendering/RenderPart.h:

2008-04-17  Eric Seidel  <eric@webkit.org>

        Reviewed by beth.

        Rename Frame::renderer() to contentRenderer() and fix uses.

        * WebCore.base.exp:
        * editing/Editor.cpp:
        (WebCore::Editor::respondToChangedContents):
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::gotoAnchor):
        * page/DragController.cpp:
        (WebCore::DragController::canProcessDrag):
        (WebCore::DragController::mayStartDragAtEventLocation):
        (WebCore::DragController::startDrag):
        * page/EventHandler.cpp:
        (WebCore::EventHandler::eventMayStartDrag):
        (WebCore::EventHandler::updateSelectionForMouseDrag):
        (WebCore::EventHandler::hitTestResultAtPoint):
        (WebCore::EventHandler::hoverTimerFired):
        (WebCore::EventHandler::handleDrag):
        * page/Frame.cpp:
        (WebCore::Frame::selectionLayoutChanged):
        (WebCore::Frame::contentRenderer):
        (WebCore::Frame::paint):
        (WebCore::Frame::markAllMatchesForText):
        (WebCore::Frame::documentAtPoint):
        * page/Frame.h:
        * page/FrameView.cpp:
        (WebCore::FrameView::~FrameView):
        (WebCore::FrameView::adjustViewSize):
        (WebCore::FrameView::layout):
        (WebCore::FrameView::scheduleRelayoutOfSubtree):
        (WebCore::FrameView::needsLayout):
        (WebCore::FrameView::setNeedsLayout):
        (WebCore::FrameView::updateControlTints):
        * rendering/RenderTreeAsText.cpp:
        (WebCore::write):
        * svg/graphics/SVGImage.cpp:
        (WebCore::SVGImage::nativeImageForCurrentFrame):

2008-04-18  Antti Koivisto  <antti@apple.com>

        Reviewed by Oliver.

        https://bugs.webkit.org/show_bug.cgi?id=18551
        REGRESSION (r31801?): Crash in ContainerNode::removedFromDocument on many SVG tests
        
        Fix for test svg/W3C-SVG-1.1/animate-elem-62-t.svg which was still
        crashing under guard malloc after the previous fix.
        
        If the event base element was a parent of the current element, dereffing it during 
        removedFromDocument() would cause problems. Avoid this by not holding ref pointer
        to the event base but instead checking from the ref count of the event listener whether
        it is still alive and in need for unregistering.
        
        This shold not be a problem for syncbase pointers since those are always animation elements
        and leaf nodes.

        * svg/animation/SVGSMILElement.cpp:
        (WebCore::ConditionEventListener::ConditionEventListener):
        (WebCore::ConditionEventListener::unregister):
        (WebCore::ConditionEventListener::handleEvent):
        (WebCore::SVGSMILElement::connectConditions):
        (WebCore::SVGSMILElement::disconnectConditions):
        (WebCore::SVGSMILElement::createInstanceTimesFromSyncbase):
        * svg/animation/SVGSMILElement.h:

2008-04-18  Kevin McCullough  <kmccullough@apple.com>

        Reviewed by Sam and Adam.

        -<rdar://problem/5770054> JavaScript profiler (10928)
        - Added support for console.profile() and console.profileEnd().

        * ForwardingHeaders/kjs/FunctionCallProfile.h: Added.
        * ForwardingHeaders/kjs/Profiler.h: Added.
        * page/Console.cpp:
        (WebCore::Console::profile):
        (WebCore::Console::profileEnd):
        * page/Console.h:
        * page/Console.idl:

2008-04-18  Kevin Ollivier  <kevino@theolliviers.com>

        wx build fix. Add the new loader/appcache files.

        * WebCoreSources.bkl:

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

        Reviewed by Darin Adler.

        - fix https://bugs.webkit.org/show_bug.cgi?id=17921
          Extra white space at the end of right-aligned or justified text with -webkit-line-break: after-white-space

        Test: fast/text/trailing-white-space.html

        Made trailing white space on the line always behave like it has the base
        bidi level of the block, meaning it will always go on the right (left)
        of the line in a left-to-right (right-to-left) block. Made the trailing
        white space vanish when it is next to a margin that the text should
        be touching, and made its width not count when computing the center
        point for center alignment.

        * platform/text/BidiResolver.h:
        (WebCore::::prependRun): Added.
        * rendering/RenderBlock.h:
        * rendering/bidi.cpp:
        (WebCore::RenderBlock::computeHorizontalPositionsForLine): Changed the
        logicallyLastRun parameter to an optional trailingSpaceRun and changed
        the alignment logic to implement the above rules.
        (WebCore::RenderBlock::layoutInlineChildren): Added code to identify
        when there is trailing white space that needs to be split into its own
        run and optionally re-ordered.
        (WebCore::RenderBlock::findNextLineBreak): Removed code that split some
        trailing space into a separate run in one special case.

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

        Rubber-stamped by Brady Eidson.

        Fix builds that do not have DOM storage enabled.

        * page/DOMWindow.cpp:
        * page/Page.cpp:
        * page/PageGroup.cpp:
        * page/PageGroup.h:

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

        Fixes the regression where style rules in the Inspector always show "inline stylesheet"
        for the source of the rule and not the URL or other sources.

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

        Reviewed by Dan Bernstein.

        * page/inspector/StylesSidebarPane.js:
        (WebInspector.StylesSidebarPane.prototype.update): Add parentStyleSheet to the anonymous obejct
        that we make for each matched rule. The parentStyleSheet property is used later to make the subtitle.

2008-04-18  Dean Jackson <dino@apple.com>

        Fixed marquee suspension on wrong document. Passes current
        document into Frame::clearTimers.

        Reviewed by hyatt.

        * history/CachedPage.cpp:
        (WebCore::CachedPage::clear):
        * page/Frame.cpp:
        (WebCore::Frame::clearTimers):
        * page/Frame.h:

2008-04-18  Dean Jackson <dino@apple.com>

        Add 'ease' timing function to transitions and
        make it the default. See latest specification proposal at:
        http://webkit.org/specs/CSSVisualEffects/CSSTransitions.html

        Reviewed by hyatt.

        NOTE: still working on a way to test animating/transitioning content

        * css/CSSParser.cpp:
        (WebCore::CSSParser::parseTransitionTimingFunction):
        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::mapTransitionTimingFunction):
        * css/CSSValueKeywords.in:

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

        Change JavaScriptDebugListener to use KJS::UString instead of
        WebCore::String

        This should reduce the number of string allocations performed while
        debugging.

        Reviewed by Tim Hatcher.

        * page/InspectorController.cpp: Updated JavaScriptDebugListener
        functions.
        * page/InspectorController.h: Ditto.
        * page/JavaScriptDebugListener.h: Changed to use KJS::UString instead
        of WebCore::String.
        * page/JavaScriptDebugServer.cpp: Ditto.
        * platform/win/BString.cpp:
        (WebCore::BString::BString): Added a constructor that takes a
        KJS::UString.
        * platform/win/BString.h:

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

        Mac build fix

        * WebCore.xcodeproj/project.pbxproj: Mark JavaScriptDebugListener.h
        private.

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

        Make InspectorController a JavaScriptDebugListener

        I added two new functions to the InspectorController JS object:
        reloadInspectedPageAndStartDebugging and stopDebugging. These control
        when the InspectorController adds/removes itself to/from the
        JavaScriptDebugServer.

        Reviewed by Tim Hatcher.

        * page/InspectorController.cpp:
        (WebCore::reloadInspectedPageAndStartDebugging): Added. Just calls
        through to InspectorController.
        (WebCore::stopDebugging): Ditto.
        (WebCore::InspectorController::~InspectorController): Make sure we
        stop debugging before we are destroyed so the JavaScriptDebugServer
        won't be left with a stale pointer.
        (WebCore::InspectorController::windowScriptObjectAvailable): Added two
        new functions to our JS object.
        (WebCore::InspectorController::closeWindow): Stop debugging when the
        window closes.
        (WebCore::InspectorController::reloadInspectedPageAndStartDebugging):
        Added.
        (WebCore::InspectorController::stopDebugging): Added.

        (WebCore::InspectorController::didParseSource):
        (WebCore::InspectorController::failedToParseSource):
        (WebCore::InspectorController::didEnterCallFrame):
        (WebCore::InspectorController::willExecuteStatement):
        (WebCore::InspectorController::willLeaveCallFrame):
        Added empty implementations of the JavaScriptDebugListener functions.

        * page/InspectorController.h:

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

        Rename ExecState* instances from state to exec

        Requested by Darin Adler and Sam Weinig.

        * bindings/js/JSConsoleCustom.cpp:

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

        Clean up InspectorController's use of JSStringRef

        All JSStringRef creation now happens through a helper function,
        jsStringRef, which takes either a const char* or a const String& and
        returns a JSRetainPtr<JSStringRef>.

        Reviewed by Mitz Pettel.

        * page/InspectorController.cpp:
        Added jsStringRef and converted all callers to
        JSStringCreateWithUTF8CString or JSStringCreateWithCharacters to use
        it.

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

        Add wrappers around InspectorClient::{show,close}Window

        This will let us perform actions when the window is actually
        showing/closing (InspectorController::show doesn't always directly
        show the window).

        Reviewed by Tim Hatcher.

        * page/InspectorController.cpp:
        (WebCore::InspectorController::scriptObjectReady): Call showWindow()
        instead of m_client->showWindow().
        (WebCore::InspectorController::show): Ditto.
        (WebCore::InspectorController::close): Ditto for closeWindow().
        (WebCore::InspectorController::showWindow):
        (WebCore::InspectorController::closeWindow):
        * page/InspectorController.h:

2008-04-18  Simon Hausmann  <hausmann@webkit.org>

        Reviewed by Holger.

        Adapt to the API changes in WebKit/qt/

        * platform/graphics/qt/ImageQt.cpp:
        (loadResourcePixmap):

2008-04-18  Ariya Hidayat  <ariya.hidayat@trolltech.com>

        Reviewed by Adam Roben.

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

        No resize indication is shown when moving/hovering over the frame
        border/splitter.

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

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

        Windows build fix

        Same as before, but for fabs/fabsf.

        * svg/SVGAnimateTransformElement.cpp:
        (WebCore::SVGAnimateTransformElement::calculateDistance): Changed to
        use fabsf and removed narrowPrecisionToFloat.

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

        Windows build fix

        In MSVC, sqrt() has three overloads: float, double, and long
        double. In GCC, sqrt() is only for doubles. Both MSVC and GCC have
        sqrtf() to operate explicitly on floats.

        * svg/SVGAnimateMotionElement.cpp:
        (WebCore::SVGAnimateMotionElement::calculateDistance): Changed to use
        sqrtf and removed narrowPrecisionToFloat.
        * svg/SVGAnimateTransformElement.cpp:
        (WebCore::SVGAnimateTransformElement::calculateDistance): Ditto.

2008-04-18  Simon Hausmann  <hausmann@webkit.org>

        Fix the build without Database support (fixes the Qt/win build).

        * page/PageGroup.cpp:
        (WebCore::PageGroup::localStorage):

2008-04-18  Simon Hausmann  <hausmann@webkit.org>

        Fix the Gtk build on the build bot.

        * GNUmakefile.am: Back out the previous LocalStorage, etc. additions
        as they're already listed in another sources group that wasn't used
        due to a local configure error.

2008-04-18  Simon Hausmann  <hausmann@webkit.org>

        Prospective wx build fix.

        * webcore-base.bkl: Add loader/appcache to include paths.

2008-04-18  Simon Hausmann  <hausmann@webkit.org>

        Build fix. Back out previous #include fix for PageGroup.h as it broke
        the Mac build due to forwarding headers.

        * page/PageGroup.h:

2008-04-18  Simon Hausmann  <hausmann@webkit.org>

        Build fix for Qt and gcc 4.3.

        * WebCore.pro: Added missing files and include paths, re-ordered
        the storage/ include path to avoid conflict of storage/LocalStorage.h
        with kjs/LocalStorage.h
        * page/PageGroup.h: Include LocalStorage.h instead of forward
        declaration to fix compilation with gcc 4.3.

2008-04-18  Simon Hausmann  <hausmann@webkit.org>

        Build fix for Gtk and gcc 4.3.

        * GNUmakefile.am: Added missing files and include paths.
        * storage/LocalStorage.h: Include LocalStorageArea.h instead of
        forward declaring it due to the HashMap use where gcc 4.3 needs to
        see the class.

2008-04-17  Antti Koivisto  <antti@apple.com>

        Reviewed by Oliver.
        
        https://bugs.webkit.org/show_bug.cgi?id=18573

        Implement supplemental transforms and use them for <animateMotion> instead of the transform list.
        This will allow <animateTransform> and <animateMotion> combine properly.

        * svg/SVGAnimateMotionElement.cpp:
        (WebCore::SVGAnimateMotionElement::resetToBaseValue):
        (WebCore::SVGAnimateMotionElement::calculateAnimatedValue):
        (WebCore::SVGAnimateMotionElement::applyResultsToTarget):
        * svg/SVGElement.h:
        (WebCore::SVGElement::supplementalTransform):
        * svg/SVGStyledTransformableElement.cpp:
        (WebCore::SVGStyledTransformableElement::animatedLocalTransform):
        * svg/SVGStyledTransformableElement.h:
        (WebCore::SVGStyledTransformableElement::supplementalTransform):
        * svg/SVGTextElement.cpp:
        (WebCore::SVGTextElement::animatedLocalTransform):
        * svg/SVGTextElement.h:
        (WebCore::SVGTextElement::supplementalTransform):

2008-04-17  Antti Koivisto  <antti@apple.com>

        Reviewed by Oliver.

        Implement calcMode=paced.
        
        Tested by SVG testsuite tests
        animate-elem-11-t.svg
        animate-elem-15-t.svg
        animate-elem-82-t.svg

        * svg/SVGAnimateElement.cpp:
        (WebCore::SVGAnimateElement::calculateDistance):
        * svg/SVGAnimateElement.h:
        * svg/SVGAnimateMotionElement.cpp:
        (WebCore::SVGAnimateMotionElement::calculateDistance):
        * svg/SVGAnimateMotionElement.h:
        * svg/SVGAnimateTransformElement.cpp:
        (WebCore::SVGAnimateTransformElement::calculateDistance):
        * svg/SVGAnimateTransformElement.h:
        * svg/SVGAnimationElement.cpp:
        (WebCore::SVGAnimationElement::calculateKeyTimesForCalcModePaced):
        (WebCore::SVGAnimationElement::startedActiveInterval):
        * svg/SVGAnimationElement.h:
        (WebCore::SVGAnimationElement::calculateDistance):

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

        Fix a leak in ImageBuffer's clearImage method.

        Reviewed by olliej

        * platform/graphics/ImageBuffer.h:
        (WebCore::ImageBuffer::clearImage):

2008-04-17  Antti Koivisto  <antti@apple.com>

        Reviewed by Eric.
        
        https://bugs.webkit.org/show_bug.cgi?id=12438

        More SVG animation:
        
        - Make multiple additive animations work
        - Support animating <use> instance trees

        * svg/SVGAnimateColorElement.cpp:
        (WebCore::SVGAnimateColorElement::SVGAnimateColorElement):
        * svg/SVGAnimateColorElement.h:
        
        Made this AnimateElement subclass. All functionality is now provided by AnimateElement.
        
        * svg/SVGAnimateElement.cpp:
        (WebCore::SVGAnimateElement::determinePropertyType):
        (WebCore::SVGAnimateElement::calculateAnimatedValue):
        (WebCore::SVGAnimateElement::calculateFromAndToValues):
        (WebCore::SVGAnimateElement::calculateFromAndByValues):
        (WebCore::SVGAnimateElement::resetToBaseValue):
        (WebCore::SVGAnimateElement::applyResultsToTarget):
        * svg/SVGAnimateElement.h:
        * svg/SVGAnimateMotionElement.cpp:
        (WebCore::SVGAnimateMotionElement::resetToBaseValue):
        (WebCore::SVGAnimateMotionElement::calculateAnimatedValue):
        (WebCore::SVGAnimateMotionElement::applyResultsToTarget):
        * svg/SVGAnimateMotionElement.h:
        * svg/SVGAnimateTransformElement.cpp:
        (WebCore::SVGAnimateTransformElement::resetToBaseValue):
        (WebCore::SVGAnimateTransformElement::calculateAnimatedValue):
        (WebCore::SVGAnimateTransformElement::calculateFromAndByValues):
        (WebCore::SVGAnimateTransformElement::applyResultsToTarget):
        * svg/SVGAnimateTransformElement.h:
        
        Switch to new model where
        - resetToBaseValue() resets the animated value back to the base value
        - calculateAnimatedValue() computes the value and adds it to the element used for accumulation
        - applyResultsToTarget() sets the computed value the target element
        
        * svg/SVGAnimationElement.cpp:
        (WebCore::SVGAnimationElement::fromValue):
        (WebCore::SVGAnimationElement::attributeIsCSS):
        (WebCore::SVGAnimationElement::targetAttributeIsCSS):
        (WebCore::SVGAnimationElement::setTargetAttributeAnimatedValue):
        
        Update instances too.
        
        (WebCore::SVGAnimationElement::startedActiveInterval):
        (WebCore::SVGAnimationElement::updateAnimation):
        (WebCore::SVGAnimationElement::endedActiveInterval):
        * svg/SVGAnimationElement.h:
        * svg/SVGSVGElement.cpp:
        (WebCore::SVGSVGElement::SVGSVGElement):
        * svg/SVGSetElement.cpp:
        (WebCore::SVGSetElement::SVGSetElement):
        * svg/SVGSetElement.h:
        
        Made this AnimateElement subclass. All functionality is now provided by AnimateElement.
        
        * svg/animation/SMILTimeContainer.cpp:
        (WebCore::SMILTimeContainer::SMILTimeContainer):
        (WebCore::SMILTimeContainer::unschedule):
        (WebCore::SMILTimeContainer::updateDocumentOrderIndexes):
        (WebCore::PriorityCompare::PriorityCompare):
        (WebCore::PriorityCompare::operator()):
        (WebCore::SMILTimeContainer::sortByPriority):
        (WebCore::applyOrderSortFunction):
        (WebCore::sortByApplyOrder):
        (WebCore::SMILTimeContainer::baseValueFor):
        (WebCore::SMILTimeContainer::updateAnimations):
        * svg/animation/SMILTimeContainer.h:
        (WebCore::SMILTimeContainer::create):
        (WebCore::SMILTimeContainer::setDocumentOrderIndexesDirty):
        
        Do additive animation with the following steps
        - sort active animations based on their priority (begin time, document order).
        - if not yet saved for each (element, attribute) pair save the base value.
        - lowest priority animation for each (element, attribute) acts as the result element.
        - animation results are resolved in priority order and results are accumulated to the result element.
        - after all active animations have been processed the values in result elements are applied to the target elements.
        
        * svg/animation/SVGSMILElement.cpp:
        (WebCore::SVGSMILElement::SVGSMILElement):
        (WebCore::SVGSMILElement::insertedIntoDocument):
        
        Invalidate document order index.
        
        (WebCore::SVGSMILElement::attributeName):
        (WebCore::SVGSMILElement::isInactive):
        (WebCore::SVGSMILElement::isFrozen):
        (WebCore::SVGSMILElement::beginListChanged):
        (WebCore::SVGSMILElement::determineActiveState):
        (WebCore::SVGSMILElement::isContributing):
        (WebCore::SVGSMILElement::progress):
        
        Take care that animations in frozen state still contribute to the total. Since we now build the result starting
        from the base value, fill="replace" works magically simply by not contributing anything.
        
        * svg/animation/SVGSMILElement.h:
        (WebCore::SVGSMILElement::previousIntervalBegin):
        (WebCore::SVGSMILElement::documentOrderIndex):
        (WebCore::SVGSMILElement::setDocumentOrderIndex):

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

        Reviewed by Darin, Alice.

        Implement AXObjectCache::detachWrapper() on Windows.

        * page/win/AXObjectCacheWin.cpp:
        (WebCore::AXObjectCache::detachWrapper): If this object has a wrapper,
        call its detach() method.

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

        Reviewed by mrowe.

        Define HAVE_ACCESSIBILITY in a way that WebKit and WebCore can see it.

        * config.h: Remove HAVE_ACCESSIBILITY.
        * page/AccessibilityObject.h: Include wtf/Platform.h to pick up
        HAVE_ACCESSIBILITY.

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

        Reviewed by aliu.

        * page/AccessibilityObject.cpp:
        (WebCore::AccessibilityObject::layoutCount): Check isRenderView() before
        casting to RenderView.

2008-04-17  Antti Koivisto  <antti@apple.com>

        Reviewed by Oliver.
        
        Fix https://bugs.webkit.org/show_bug.cgi?id=18551
        Bug 18551: REGRESSION (r31801?): Crash in ContainerNode::removedFromDocument on many SVG tests under guard malloc
        
        Freeing a RefPtr that is the last ref to the parent from removedFromDocument() is a bad idea.

        Caching the target element is too dangerous, let's simply not do it. Getting it is very cheap anyway.

        * svg/animation/SVGSMILElement.cpp:
        (WebCore::SVGSMILElement::removedFromDocument):
        (WebCore::SVGSMILElement::attributeChanged):
        (WebCore::SVGSMILElement::targetElement):
        * svg/animation/SVGSMILElement.h:

2008-04-17  Sam Weinig  <sam@webkit.org>

        Reviewed by Anders Carlsson.

        Autogenerate the XMLHttpRequest javascript binding.

        * GNUmakefile.am:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCoreSources.bkl:
        * DerivedSources.make:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSDOMWindowBase.cpp:
        * bindings/js/JSXMLHttpRequest.cpp: Removed.
        * bindings/js/JSXMLHttpRequest.h: Removed.
        * bindings/js/JSXMLHttpRequestConstructor.cpp: Added.
        (WebCore::JSXMLHttpRequestConstructor::JSXMLHttpRequestConstructor):
        (WebCore::JSXMLHttpRequestConstructor::implementsConstruct):
        (WebCore::JSXMLHttpRequestConstructor::construct):
        * bindings/js/JSXMLHttpRequestConstructor.h: Added.
        (WebCore::JSXMLHttpRequestConstructor::classInfo):
        * bindings/js/JSXMLHttpRequestCustom.cpp: Added.
        (WebCore::JSXMLHttpRequest::mark):
        (WebCore::JSXMLHttpRequest::onreadystatechange):
        (WebCore::JSXMLHttpRequest::setOnreadystatechange):
        (WebCore::JSXMLHttpRequest::onload):
        (WebCore::JSXMLHttpRequest::setOnload):
        (WebCore::JSXMLHttpRequest::responseXML):
        (WebCore::JSXMLHttpRequest::open):
        (WebCore::JSXMLHttpRequest::setRequestHeader):
        (WebCore::JSXMLHttpRequest::send):
        (WebCore::JSXMLHttpRequest::getResponseHeader):
        (WebCore::JSXMLHttpRequest::overrideMimeType):
        (WebCore::JSXMLHttpRequest::addEventListener):
        (WebCore::JSXMLHttpRequest::removeEventListener):
        (WebCore::JSXMLHttpRequest::dispatchEvent):
        * xml/XMLHttpRequest.cpp:
        (WebCore::XMLHttpRequest::readyState):
        (WebCore::XMLHttpRequest::responseText):
        * xml/XMLHttpRequest.h:
        * xml/XMLHttpRequest.idl: Added.

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

        Reviewed by Anders

        The SessionStorage for a Page has to be copied every time a new Page is created.

        I thought I had the right choke point for creating new Pages at FrameLoader::createWindow(),
        but it just so happens there was another - in the ContextMenuController.

        The *real* choke point for this, then, is in the Chrome itself.

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::createWindow): Don't do the SessionStorage copy here...

        * page/Chrome.cpp:
        (WebCore::Chrome::createWindow): Do it here, instead!

2008-04-17  Alice Liu  <alice.liu@apple.com>

        Reviewed by Jon Honeycutt.

        Added some asserts to catch undesirable usage of setWrapper and addChildren.
        * page/AccessibilityObject.cpp:
        (WebCore::AccessibilityObject::addChildren):
        * page/AccessibilityObject.h:
        (WebCore::AccessibilityObject::setWrapper):

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

        Reviewed by the Mitzpettel

        Before things get much more intertwined, move away from a global LocalStorage model
        to a per-PageGroup LocalStorage model.

        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::localStorage): Get it from the current PageGroup, not the global
          LocalStorage (which doesn't exist anymore).

        * page/Page.cpp:
        * page/PageGroup.cpp:
        (WebCore::PageGroup::localStorage): Create a LocalStorage object on demand.
        * page/PageGroup.h:

        * storage/LocalStorage.cpp:
        (WebCore::LocalStorage::LocalStorage): Hold a back pointer to the owning PageGroup.
        (WebCore::LocalStorage::storageArea):
        * storage/LocalStorage.h:
        (WebCore::LocalStorage::create):

        * storage/LocalStorageArea.cpp:
        (WebCore::LocalStorageArea::LocalStorageArea): Hold a back pointer to the owning LocalStorage.
        * storage/LocalStorageArea.h:
        (WebCore::LocalStorageArea::create):

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

        Fix indentation.
        
        * loader/DocumentLoader.cpp:
        (WebCore::DocumentLoader::scheduleArchiveLoad):

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

        Reviewed by Brady.

        When in the web archive debug mode, don't call didFail immediately. Instead,
        add the loader to the substitute resource map, but with a null resource, which
        indicates to substituteResourceDeliveryTimerFired that the load should fail.
        
        * loader/DocumentLoader.cpp:
        (WebCore::DocumentLoader::substituteResourceDeliveryTimerFired):
        (WebCore::DocumentLoader::scheduleArchiveLoad):
        * loader/ResourceLoader.cpp:
        (WebCore::ResourceLoader::load):

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

        Reviewed by Sam.

        Add JS bindings for the DOMApplicationCache object.
        
        * bindings/js/JSDOMApplicationCacheCustom.cpp:
        (WebCore::JSDOMApplicationCache::add):
        (WebCore::JSDOMApplicationCache::remove):
        (WebCore::JSDOMApplicationCache::addEventListener):
        (WebCore::JSDOMApplicationCache::removeEventListener):
        (WebCore::JSDOMApplicationCache::dispatchEvent):
        (WebCore::JSDOMApplicationCache::setOnchecking):
        (WebCore::JSDOMApplicationCache::onchecking):
        (WebCore::JSDOMApplicationCache::setOnerror):
        (WebCore::JSDOMApplicationCache::onerror):
        (WebCore::JSDOMApplicationCache::setOnnoupdate):
        (WebCore::JSDOMApplicationCache::onnoupdate):
        (WebCore::JSDOMApplicationCache::setOndownloading):
        (WebCore::JSDOMApplicationCache::ondownloading):
        (WebCore::JSDOMApplicationCache::setOnprogress):
        (WebCore::JSDOMApplicationCache::onprogress):
        (WebCore::JSDOMApplicationCache::setOnupdateready):
        (WebCore::JSDOMApplicationCache::onupdateready):
        (WebCore::JSDOMApplicationCache::setOncached):
        (WebCore::JSDOMApplicationCache::oncached):
        (WebCore::JSDOMApplicationCache::mark):
        * bindings/js/JSDOMWindowCustom.cpp:
        (WebCore::JSDOMWindow::mark):
        * bindings/js/JSEventTargetBase.cpp:
        (WebCore::toJS):
        * loader/appcache/DOMApplicationCache.idl:
        * page/DOMWindow.idl:

2008-04-17 Eric Carlson  <eric.carlson@apple.com> 

        Reviewed by Adele. 

        Fix for <rdar://problem/5861642> QTMovieWin returns uninitialized values

        * platform/graphics/win/QTMovieWin.cpp:
        (QTMovieWin::rate):
        (QTMovieWin::setRate):
        (QTMovieWin::setVolume):
        (QTMovieWin::getNaturalSize):

2008-04-17  Marco Barisione  <marco.barisione@collabora.co.uk>

        Reviewed by Alp Toker.

        http://bugs.webkit.org/show_bug.cgi?id=18335
        Pango font backend unable to display japanese properly

        Different fonts can have different glyph indices, so we need to pass
        the right font when retrieving a glyph index.

        * platform/graphics/gtk/GlyphPageTreeNodePango.cpp:
        (WebCore::pango_font_get_glyph): Temporarily override the font in the
        PangoAnalysis passed to pango_shape.

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

        According to Sam and David, it's "topLevel", not "toplevel".
        
        * loader/DocumentLoader.cpp:
        (WebCore::DocumentLoader::topLevelApplicationCache):
        * loader/DocumentLoader.h:
        * loader/appcache/DOMApplicationCache.cpp:
        (WebCore::DOMApplicationCache::associatedCache):

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

        Reviewed by Sam.

        Add DOMApplicationCache implementation.
        
        * dom/EventNames.h:
        Add new event names.
        
        * dom/EventTarget.cpp:
        (WebCore::EventTarget::toDOMApplicationCache):
        * dom/EventTarget.h:
        Add EventTarget conversion method.
        
        * loader/appcache/ApplicationCacheGroup.h:
        (WebCore::ApplicationCacheGroup::):
        (WebCore::ApplicationCacheGroup::status):
        (WebCore::ApplicationCacheGroup::update):
        (WebCore::ApplicationCacheGroup::newestCache):
        Add more stubs.
        
        * loader/appcache/DOMApplicationCache.cpp:
        * loader/appcache/DOMApplicationCache.h:

        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::clear):
        (WebCore::DOMWindow::applicationCache):
        * page/DOMWindow.h:
        (WebCore::DOMWindow::optionalApplicationCache):
        Add ApplicationCache member.
        
2008-04-17  Anders Carlsson  <andersca@apple.com>

        Build fix.

        * WebCore.vcproj/WebCore.vcproj:

2008-04-17  Dean Jackson  <dino@apple.com>

        Reviewed by Hyatt.

        Fix for <rdar://problem/5849968> translate method should have Y=0 when only X is present

        Test: fast/css/transform-default-parameter.html

        * css/CSSStyleSelector.cpp: (WebCore::CSSStyleSelector::applyProperty):
        translate function with only X parameter now leaves the Y parameter as zero.

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

        Reviewed by Sam.
        
        Add plumbing for associating document loaders with application caches.
        
        * loader/DocumentLoader.cpp:
        (WebCore::DocumentLoader::DocumentLoader):
        (WebCore::DocumentLoader::~DocumentLoader):
        (WebCore::DocumentLoader::originalURL):
        (WebCore::DocumentLoader::requestURL):
        (WebCore::DocumentLoader::responseURL):
        (WebCore::DocumentLoader::responseMIMEType):
        (WebCore::DocumentLoader::setCandidateApplicationCacheGroup):
        (WebCore::DocumentLoader::setApplicationCache):
        (WebCore::DocumentLoader::toplevelApplicationCache):
        * loader/DocumentLoader.h:
        (WebCore::DocumentLoader::candidateApplicationCacheGroup):
        (WebCore::DocumentLoader::applicationCache):
        * loader/appcache/ApplicationCacheGroup.h:
        (WebCore::ApplicationCacheGroup::documentLoaderDestroyed):

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

        Fix Bug 18544: REGRESSION (r31951): Two fast/xsl tests crash

        <https://bugs.webkit.org/show_bug.cgi?id=18544>

        r31951 changed XSLTProcessor::parseErrorFunc to expect a Console* as
        the context parameter. The caller in XSLTProcessor was changed, but
        the one in XSLStyleSheet was missed.

        Reviewed by Alexey Proskuryakov.

        * xml/XSLStyleSheet.cpp:
        (WebCore::XSLStyleSheet::parseString): Pass the Console as the context
        to parseErrorFunc.

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

        Windows build fix after r31981

        * dom/Document.idl: Omit getCSSCanvasContext from the COM bindings.

2008-04-17  Ariya Hidayat  <ariya.hidayat@trolltech.com>

        Reviewed by Simon.

        Implemented getFileModificationTime and pathGetFileName for the Qt port.

        * platform/qt/FileSystemQt.cpp:
        (WebCore::getFileModificationTime):

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

        Fix the non-Mac builds that I broke with my Mac build fix.

        * css/CSSMutableStyleDeclaration.cpp:
        (WebCore::CSSMutableStyleDeclaration::getLayeredShorthandValue): Explicitly use the size_t version of max
        to avoid making assumptions about sizeof(size_t).

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

        Rubber-stamped by Dan Bernstein.

        Fix the Mac build.

        * css/CSSMutableStyleDeclaration.cpp:
        (WebCore::CSSMutableStyleDeclaration::getLayeredShorthandValue): Update to use size_t in place of unsigned.
        * dom/NamedNodeMap.h: Ditto.
        * page/AccessibilityObject.h: Forward-declare AccessibilityObjectWrapper in the non-Objective-C case too.

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

        Reviewed by Darin.

        Use size_t instead of unsigned where appropriate.

        * css/CSSValueList.h:
        * dom/NamedAttrMap.h:
        * rendering/RenderStyle.h:

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

        Reviewed by Darin.

        Add some methods to check AccessibilityObject state.

        * page/AccessibilityObject.cpp:
        (WebCore::AccessibilityObject::AccessibilityObject): Assert that the
        passed renderer is not null.
        (WebCore::AccessibilityObject::isPasswordField): Refactored to use early
        return.
        (WebCore::AccessibilityObject::isPressed): Return true if this is a
        button in the pressed state.
        (WebCore::AccessibilityObject::isIndeterminate): Return true if this is
        a tri-state checkbox in the indeterminate state.
        (WebCore::AccessibilityObject::isChecked): True if this is a radio
        button or checkbox in the checked state.
        (WebCore::AccessibilityObject::isHovered): True if object is currently
        under the mouse cursor.
        (WebCore::AccessibilityObject::isMultiSelect): True if this is a select
        element capable of multi-select.
        (WebCore::AccessibilityObject::isReadOnly): False if this object has
        editable content.
        (WebCore::AccessibilityObject::isOffScreen): True if this object is not
        in the visible portion of the view.
        * page/AccessibilityObject.h: Grouped methods into is-state and is-kind.

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

        Reviewed by Darin.

        Add AccessibilityObjectWrapper to Windows.

        * WebCore.vcproj/WebCore.vcproj: Add AccessibilityObjectWrapperWin.h
        * page/AccessibilityObject.h: Include COMPtr.h,
        AccessibilityObjectWrapperWin.h on Windows. Define wrapper() and
        setWrapper() if accessibility is present. Add an m_wrapper on Windows.
        * page/AccessibilityObject.cpp:
        (WebCore::AccessibilityObject::detach): Clear m_wrapper if
        accessibility is present.
        * page/win/AccessibilityObjectWrapperWin.h: Added; defines a wrapper for
        AccessibilityObjects on Windows.
        (WebCore::AccessibilityObjectWrapper::attached): Return true if attached
        to an object.
        (WebCore::AccessibilityObjectWrapper::accessibilityObject): Return the
        wrapped object.
        (WebCore::AccessibilityObjectWrapper::AccessibilityObjectWrapper):

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

        Reviewed by Darin.

        Add AXObjectCache to Windows.

        * WebCore.vcproj/WebCore.vcproj: Add AXObjectCacheWin.cpp.
        * page/AXObjectCache.h: Add handleFocusedUIElementChanged definition to
        non-Mac platforms, and added stub for it. Replace PLATFORM(MAC)
        conditional with HAVE(ACCESSIBILITY) for stubs.
        (WebCore::AXObjectCache::enableAccessibility):
        (WebCore::AXObjectCache::accessibilityEnabled):
        * page/win/AXObjectCacheWin.cpp: Added; contains stubs for the methods
        below.
        (WebCore::AXObjectCache::detachWrapper):
        (WebCore::AXObjectCache::attachWrapper):
        (WebCore::AXObjectCache::postNotification):
        (WebCore::AXObjectCache::postNotificationToElement):
        * config.h: Define HAVE_ACCESSIBILITY on Mac and Windows.

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

        Reviewed by Darin.

        * WebCore.vcproj/WebCore.vcproj: Fix path to AXObjectCache.h.

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

        Reviewed by Darin Adler

        Merge the StorageAreaClient into the StorageArea class itself as pure virtual methods.
        Add "LocalStorageArea" and "SessionStorageArea" implementations, and have SessionStorage
        and LocalStorage instantiate the appropriate type of StorageArea object.

        This purpose of this change is because while adding the persistent store to LocalStorage,
        it became obvious that the client approach wasn't scaling well.  Additionally, a StorageArea
        backing a local storage area required vastly different data members compared to one backing
        a session storage area.

        This will be much cleaner going forward.

        * GNUmakefile.am:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * WebCoreSources.bkl:

        * storage/LocalStorage.cpp:
        (WebCore::LocalStorage::storageArea):
        * storage/LocalStorage.h:

        * storage/LocalStorageArea.cpp: Added.
        (WebCore::LocalStorageArea::LocalStorageArea):
        (WebCore::LocalStorageArea::itemChanged):
        (WebCore::LocalStorageArea::itemRemoved):
        (WebCore::LocalStorageArea::dispatchStorageEvent):
        * storage/LocalStorageArea.h: Added.
        (WebCore::LocalStorageArea::create):

        * storage/SessionStorage.cpp:
        (WebCore::SessionStorage::copy):
        (WebCore::SessionStorage::storageArea):
        * storage/SessionStorage.h:

        * storage/SessionStorageArea.cpp: Added.
        (WebCore::SessionStorageArea::copy):
        (WebCore::SessionStorageArea::SessionStorageArea):
        (WebCore::SessionStorageArea::itemChanged):
        (WebCore::SessionStorageArea::itemRemoved):
        (WebCore::SessionStorageArea::dispatchStorageEvent):
        * storage/SessionStorageArea.h: Added.
        (WebCore::SessionStorageArea::create):
        (WebCore::SessionStorageArea::page):

        * storage/StorageArea.cpp:
        (WebCore::StorageArea::StorageArea):
        (WebCore::StorageArea::setItem):
        (WebCore::StorageArea::removeItem):
        (WebCore::StorageArea::storageMap):
        * storage/StorageArea.h:

        * storage/StorageAreaClient.h: Removed.

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

        Add support for the ability to draw directly into CSS images using CanvasRenderingContext2D.

        Reviewed by olliej

        Added fast/canvas/canvas-bg.html

        * GNUmakefile.am:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * WebCoreSources.bkl:
        * css/CSSCanvasValue.cpp: Added.
        (WebCore::CSSCanvasValue::~CSSCanvasValue):
        (WebCore::CSSCanvasValue::cssText):
        (WebCore::CSSCanvasValue::canvasChanged):
        (WebCore::CSSCanvasValue::canvasResized):
        (WebCore::CSSCanvasValue::fixedSize):
        (WebCore::CSSCanvasValue::element):
        (WebCore::CSSCanvasValue::image):
        * css/CSSCanvasValue.h: Added.
        (WebCore::CSSCanvasValue::CSSCanvasValue):
        (WebCore::CSSCanvasValue::isFixedSize):
        (WebCore::CSSCanvasValue::setName):
        * css/CSSGradientValue.cpp:
        * css/CSSGradientValue.h:
        * css/CSSImageGeneratorValue.cpp:
        (WebCore::CSSImageGeneratorValue::generatedImage):
        * css/CSSImageGeneratorValue.h:
        (WebCore::CSSImageGeneratorValue::isFixedSize):
        (WebCore::CSSImageGeneratorValue::fixedSize):
        * css/CSSParser.cpp:
        (WebCore::CSSParser::parseContent):
        (WebCore::CSSParser::parseBackgroundImage):
        (WebCore::CSSParser::parseBorderImage):
        (WebCore::CSSParser::parseCanvas):
        * css/CSSParser.h:
        * dom/Document.cpp:
        (WebCore::Document::getCSSCanvasContext):
        (WebCore::Document::getCSSCanvasElement):
        * dom/Document.h:
        * dom/Document.idl:
        * html/HTMLCanvasElement.cpp:
        (WebCore::HTMLCanvasElement::HTMLCanvasElement):
        (WebCore::HTMLCanvasElement::reset):
        * html/HTMLCanvasElement.h:
        (WebCore::HTMLCanvasElement::setSize):
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::calculateBackgroundSize):
        (WebCore::RenderBox::imageChanged):
        * rendering/RenderBox.h:
        * rendering/RenderImage.cpp:
        (WebCore::RenderImage::imageChanged):
        * rendering/RenderImage.h:
        (WebCore::RenderImage::imagePtr):
        (WebCore::RenderImage::intrinsicSizeChanged):
        * rendering/RenderImageGeneratedContent.h:
        (WebCore::RenderImageGeneratedContent::imageSize):
        (WebCore::RenderImageGeneratedContent::imagePtr):
        * rendering/RenderListMarker.cpp:
        (WebCore::RenderListMarker::layout):
        (WebCore::RenderListMarker::imageChanged):
        (WebCore::RenderListMarker::calcPrefWidths):
        (WebCore::RenderListMarker::getRelativeMarkerRect):
        * rendering/RenderListMarker.h:
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::paintBorderImage):
        (WebCore::RenderObject::imageChanged):
        * rendering/RenderObject.h:
        (WebCore::RenderObject::imageChanged):
        * rendering/RenderSVGImage.cpp:
        (WebCore::RenderSVGImage::imageChanged):
        * rendering/RenderSVGImage.h:
        * rendering/RenderStyle.cpp:
        (WebCore::StyleCachedImage::imageSize):
        (WebCore::StyleGeneratedImage::imageSize):
        * rendering/RenderStyle.h:
        (WebCore::StyleCachedImage::data):
        (WebCore::StyleGeneratedImage::StyleGeneratedImage):
        (WebCore::StyleGeneratedImage::data):
        (WebCore::StyleGeneratedImage::imageHasRelativeWidth):
        (WebCore::StyleGeneratedImage::imageHasRelativeHeight):
        (WebCore::StyleGeneratedImage::usesImageContainerSize):
        * rendering/RenderTableCol.cpp:
        (WebCore::RenderTableCol::imageChanged):
        * rendering/RenderTableCol.h:
        * rendering/RenderTableRow.cpp:
        (WebCore::RenderTableRow::imageChanged):
        * rendering/RenderTableRow.h:
        * rendering/RenderTableSection.cpp:
        (WebCore::RenderTableSection::imageChanged):
        * rendering/RenderTableSection.h:

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

        Reviewed by Darin.

        Add manifest parser.

        * loader/appcache/ManifestParser.cpp:
        (WebCore::parseManifest):
        * loader/appcache/ManifestParser.h:
        * platform/text/CharacterNames.h:

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

        Reviewed by Mitz.

        - fix <rdar://problem/5858617> REGRESSION (r21452-Safari 3.1):
          Safari does not find words containing ß (German letter sharp-s)

        Test: fast/text/find-case-folding.html

        * platform/text/StringImpl.cpp:
        (WebCore::StringImpl::foldCase):
        Pass the folded length to foldCase rather than the original string length.
        Without this, we get an error code every time.

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

        Fix build.
        
        * loader/appcache/ApplicationCache.cpp:
        (WebCore::ApplicationCache::ApplicationCache):
        (WebCore::ApplicationCache::setManifestResource):
        (WebCore::ApplicationCache::addResource):

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

        Reviewed by Darin.

        Add new protocolHostAndPortAreEqual function.
        
        * platform/KURL.cpp:
        (WebCore::KURL::host):
        (WebCore::KURL::setHost):
        (WebCore::KURL::setHostAndPort):
        (WebCore::protocolHostAndPortAreEqual):
        * platform/KURL.h:
        (WebCore::KURL::hostStart):

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

        Reviewed by Sam.
        
        Fix some style nits.
        
        * loader/appcache/ApplicationCache.cpp:
        (WebCore::ApplicationCache::ApplicationCache):
        (WebCore::ApplicationCache::setManifestResource):
        (WebCore::ApplicationCache::addResource):
        (WebCore::ApplicationCache::removeResource):
        (WebCore::ApplicationCache::dump):
        * loader/appcache/ApplicationCacheGroup.h:

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

        Reviewed by Brady and Sam.

        Add ApplicationCache implementation. Stub out ApplicationCacheGroup methods
        needed by ApplicationCache.
        
        * loader/appcache/ApplicationCache.cpp:
        (WebCore::ApplicationCache::ApplicationCache):
        (WebCore::ApplicationCache::~ApplicationCache):
        (WebCore::ApplicationCache::setManifestResource):
        (WebCore::ApplicationCache::addResource):
        (WebCore::ApplicationCache::removeResource):
        (WebCore::ApplicationCache::resourceForURL):
        (WebCore::ApplicationCache::resourceForRequest):
        (WebCore::ApplicationCache::numDynamicEntries):
        (WebCore::ApplicationCache::dynamicEntry):
        (WebCore::ApplicationCache::addDynamicEntry):
        (WebCore::ApplicationCache::removeDynamicEntry):
        (WebCore::ApplicationCache::setOnlineWhitelist):
        (WebCore::ApplicationCache::isURLInOnlineWhitelist):
        (WebCore::ApplicationCache::dump):
        * loader/appcache/ApplicationCache.h:
        (WebCore::ApplicationCache::create):
        (WebCore::ApplicationCache::manifestResource):
        (WebCore::ApplicationCache::group):
        (WebCore::ApplicationCache::begin):
        (WebCore::ApplicationCache::end):
        * loader/appcache/ApplicationCacheGroup.h:
        (WebCore::ApplicationCacheGroup::manifestURL):
        (WebCore::ApplicationCacheGroup::cacheDestroyed):

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

        Fix Bug 18505: REGRESSION: Search is disabled and not functional

        <https://bugs.webkit.org/show_bug.cgi?id=18505>

        Reviewed by Tim Hatcher.

        * page/inspector/ResourcesPanel.js:
        (WebInspector.ResourcesPanel.sourceFrameForResource): Added.
        * page/inspector/inspector.css: Added back rules for the search field
        that were removed in r31736.
        * page/inspector/inspector.html:
          - Removed the disabled attribute from the search field
          - Added back the #searchResults and #searchResultsResizer divs which
            were removed in r31736
        * page/inspector/inspector.js:
        (WebInspector.set showingSearchResults): Updated for class rename
        panels -> main-panels.
        (WebInspector.loaded): Added back the mousedown event listener for the
        search results resizer that was removed in r31736.
        (WebInspector.searchResultsResizerDrag): Updated for class rename
        panels -> main-panels.
        (WebInspector.performSearch):
          - Changed to use sourceFrameForResource
          - Changed to use showResource
          - Changed to save/restore the focused element around the setting of
            the current panel
          - Changed to get the source document from the match range instead of
            by crawling back up to the source view
          - Changed to bind the onselect handlers to this so that we can
            access the Elements/Resources panels

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

        Reviewed by Sam Weinig

        Changing ThreadSafeShared to start with a ref count of 1, so updating all users to
        adoptRef() that initial reference.

        * bindings/js/JSCustomSQLStatementCallback.h:
        (WebCore::JSCustomSQLStatementCallback::create):
        * bindings/js/JSCustomSQLStatementErrorCallback.h:
        (WebCore::JSCustomSQLStatementErrorCallback::create):
        * bindings/js/JSCustomSQLTransactionCallback.h:
        (WebCore::JSCustomSQLTransactionCallback::create):
        * bindings/js/JSCustomSQLTransactionErrorCallback.h:
        (WebCore::JSCustomSQLTransactionErrorCallback::create):

        * bindings/js/JSDatabaseCustom.cpp:
        (WebCore::JSDatabase::changeVersion):
        (WebCore::JSDatabase::transaction):

        * bindings/js/JSSQLTransactionCustom.cpp:
        (WebCore::JSSQLTransaction::executeSql):

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

        * platform/SecurityOrigin.cpp:
        (WebCore::SecurityOrigin::create):

        * platform/sql/SQLiteAuthorizer.h:
        (WebCore::SQLiteAuthorizer::create):
        (WebCore::SQLiteAuthorizer::SQLiteAuthorizer):

        * storage/ChangeVersionWrapper.cpp:
        (WebCore::ChangeVersionWrapper::performPreflight):
        (WebCore::ChangeVersionWrapper::performPostflight):
        * storage/ChangeVersionWrapper.h:
        (WebCore::ChangeVersionWrapper::create):

        * storage/Database.cpp:
        (WebCore::Database::openAndVerifyVersion):
        (WebCore::Database::markAsDeletedAndClose):
        (WebCore::Database::changeVersion):
        (WebCore::Database::transaction):
        (WebCore::Database::scheduleTransaction):
        (WebCore::Database::scheduleTransactionStep):
        (WebCore::Database::tableNames):

        * storage/DatabaseAuthorizer.h:
        (WebCore::DatabaseAuthorizer::create):

        * storage/DatabaseTask.h:
        (WebCore::DatabaseOpenTask::create):
        (WebCore::DatabaseCloseTask::create):
        (WebCore::DatabaseTransactionTask::create):
        (WebCore::DatabaseTableNamesTask::create):

        * storage/DatabaseThread.cpp:
        (WebCore::DatabaseThread::scheduleTask): Change to take a PassRefPtr instead of raw
        (WebCore::DatabaseThread::scheduleImmediateTask): Ditto
        * storage/DatabaseThread.h:
        (WebCore::DatabaseThread::create):

        * storage/SQLError.h:
        (WebCore::SQLError::create):
        (WebCore::SQLError::SQLError):

        * storage/SQLResultSet.h:
        (WebCore::SQLResultSet::create):

        * storage/SQLStatement.cpp:
        (WebCore::SQLStatement::create):
        (WebCore::SQLStatement::execute):
        (WebCore::SQLStatement::setDatabaseDeletedError):
        (WebCore::SQLStatement::setVersionMismatchedError):
        (WebCore::SQLStatement::setFailureDueToQuota):
        * storage/SQLStatement.h:

        * storage/SQLTransaction.cpp:
        (WebCore::SQLTransaction::create):
        (WebCore::SQLTransaction::executeSQL):
        (WebCore::SQLTransaction::openTransactionAndPreflight):
        (WebCore::SQLTransaction::deliverTransactionCallback):
        (WebCore::SQLTransaction::handleCurrentStatementError):
        (WebCore::SQLTransaction::deliverStatementCallback):
        (WebCore::SQLTransaction::postflightAndCommit):
        * storage/SQLTransaction.h:

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

        Reviewed by Adam and Brady.
        
        Add implementation of ApplicationCacheResource.
        
        * loader/appcache/ApplicationCacheResource.cpp:
        (WebCore::ApplicationCacheResource::ApplicationCacheResource):
        (WebCore::ApplicationCacheResource::dumpType):
        * loader/appcache/ApplicationCacheResource.h:
        (WebCore::ApplicationCacheResource::):
        (WebCore::ApplicationCacheResource::create):
        (WebCore::ApplicationCacheResource::type):
        (WebCore::ApplicationCacheResource::addType):

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

        Fixes an issue where the source for a resource that had errors would
        not be shown because the view was created before the resource load
        finished. The right view is now created, even if the resource isn't 
        finished. The SourceView just makes sure to not load the source until
        the resource is finished. Only if the category changes, does the view
        need to be recreated.

        Reviewed by Adam Roben.

        * page/inspector/Resource.js:
        (WebInspector.Resource.prototype.set category): Call recreateViewForResourceIfNeeded.
        * page/inspector/ResourcesPanel.js:
        (WebInspector.ResourcesPanel.prototype.recreateViewForResourceIfNeeded):
        Added. Tries to make a new view, if the view is the same prototype of the
        previous view, return early. If they differ, close and detach the old view
        and associate the resource with the new view. Calling updateErrorsAndWarnings
        is needed, because the errors and warnings that might have been added to the
        previous view will be lost, so make the tree element match.
        (WebInspector.Resource.prototype._createResourceView): Always create a view
        that matches the resource category. Ignore the loading and failed status.
        * page/inspector/SourceView.js:
        (WebInspector.SourceView.prototype.setupSourceFrameIfNeeded): Don't setup the
        frame if the resource hasn't finished or if the load failed.

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

        Adds a console formatter for Error objects. So typing a expression in the
        console that ends in an exception will print meaningful info. Also calling
        console.{log,error,warn,info} with an error object will output nicely.

        Reviewed by Adam Roben.

        * page/inspector/Console.js:
        (WebInspector.Console.prototype._formaterror): Added. Formats an error
        object by showing it like other exceptions, with a clickable file URL.

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

        Refactors code that updates the errors and warnings count in the
        resources sidebar so other functions can easily trigger updates.

        Reviewed by Adam Roben.

        * page/inspector/ResourcesPanel.js:
        (WebInspector.ResourcesPanel.prototype.addMessageToResource): Call updateErrorsAndWarnings.
        Removes code that updates the bubbleText and class names.
        (WebInspector.ResourcesPanel.prototype.clearMessages): Ditto.
        (WebInspector.ResourceSidebarTreeElement.prototype.updateErrorsAndWarnings):
        Added. Updates the bubbleText and adds or removes the class names
        depending on if the values are zero.

2008-04-16  Antti Koivisto  <antti@apple.com>

        Reviewed by Alexey.
        
        Fix <rdar://problem/5863728>
        REGRESSION: Garbage character shown in temperatures in the Weather widget (encoding issue with degree symbol)
        
        Parse the encoding attribute in PreloadScanner.

        Test: fast/encoding/script-preload-encoding.html

        * html/PreloadScanner.cpp:
        (WebCore::PreloadScanner::processAttribute):
        (WebCore::PreloadScanner::emitTag):
        (WebCore::PreloadScanner::emitCSSRule):
        * html/PreloadScanner.h:
        * loader/DocLoader.cpp:
        (WebCore::DocLoader::preload):
        * loader/DocLoader.h:

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

        Reviewed by Adam.

        Generate the DOMApplicationCache JS wrapper, add JSDOMApplicationCacheCustom.cpp and 
        fix typos in the #if line.
        
        * DerivedSources.make:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSDOMApplicationCacheCustom.cpp: Added.
        * loader/appcache/ApplicationCache.cpp:
        * loader/appcache/ApplicationCache.h:
        * loader/appcache/ApplicationCacheGroup.cpp:
        * loader/appcache/ApplicationCacheGroup.h:
        * loader/appcache/ApplicationCacheResource.cpp:
        * loader/appcache/ApplicationCacheResource.h:
        * loader/appcache/DOMApplicationCache.cpp:
        * loader/appcache/DOMApplicationCache.h:
        * loader/appcache/DOMApplicationCache.idl:
        * loader/appcache/ManifestParser.cpp:
        * loader/appcache/ManifestParser.h:

2008-04-16  Sam Weinig  <sam@webkit.org>

        Reviewed by Geoffrey Garen.

        - To keep the behavior of the WebKit and JavaScriptCore API's the same,
          we need to hide the fact that the global object and the window object
          are no longer the same thing, and the the global object now changes on
          navigations.  To do this, only the wrapper should ever be exposed.  This
          fixes the two remaining spots where the internal global object is exposed,
          the windowScriptObject returned from [WebFrame windowObject] and the object
          return by calling JSContextGetGlobalObject on [WebFrame globalContext]

        * bindings/js/JSDOMWindowWrapper.cpp:
        (WebCore::JSDOMWindowWrapper::putWithAttributes):
        * bindings/js/JSDOMWindowWrapper.h:
        Forward this new method so that JSObjectSetProperty doesn't set properties on the 
        wrapper.

        * page/mac/FrameMac.mm:
        (WebCore::Frame::windowScriptObject):
        Return the wrapper instead of the global object.

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

        Eliminate the paintBuffer and drawImage(ImageBuffer*) methods from GraphicsContext* in favor of just
        snagging an Image* from the ImageBuffer and drawing that instead.

        Enhance canvas with a CanvasObserver so that notifications of dirtying or resizing can be tracked by
        a consumer.

        Reviewed by olliej

        * html/CanvasRenderingContext2D.cpp:
        (WebCore::CanvasRenderingContext2D::drawImage):
        * html/HTMLCanvasElement.cpp:
        (WebCore::HTMLCanvasElement::HTMLCanvasElement):
        (WebCore::HTMLCanvasElement::willDraw):
        (WebCore::HTMLCanvasElement::reset):
        (WebCore::HTMLCanvasElement::paint):
        * html/HTMLCanvasElement.h:
        (WebCore::CanvasObserver::~CanvasObserver):
        (WebCore::HTMLCanvasElement::setSize):
        (WebCore::HTMLCanvasElement::setObserver):
        * platform/graphics/GraphicsContext.cpp:
        (WebCore::GraphicsContext::drawImage):
        (WebCore::GraphicsContext::drawTiledImage):
        * platform/graphics/GraphicsContext.h:
        * platform/graphics/ImageBuffer.h:
        (WebCore::ImageBuffer::clearImage):
        * platform/graphics/cairo/GraphicsContextCairo.cpp:
        * platform/graphics/cg/GraphicsContextCG.cpp:
        * platform/graphics/cg/ImageCG.cpp:
        (WebCore::BitmapImage::draw):
        (WebCore::Image::drawPattern):
        * platform/graphics/cg/ImageSourceCG.cpp:
        (WebCore::ImageSource::createFrameAtIndex):
        * platform/graphics/qt/GraphicsContextQt.cpp:
        * platform/graphics/wx/GraphicsContextWx.cpp:

2008-04-16  Steve Falkenburg  <sfalken@apple.com>

        Improve timer latency/resolution.
                
        The primary timing mechanism is now CreateTimerQueueTimer, with a PostMessage from
        the callback proc.  This event will be delivered sooner than if we used SetTimer(),
        since it is higher priority than other messages.
        
        If there is an input message pending, we'll use we SetTimer() based timers to avoid
        starving user input.

        Don't call PostMessage immediately on all timers < 10ms.  Only call immediately if
        timer is already expired.  This avoids the case where no timers would be processed,
        causing the timer to be re-posted via the slower SetTimer method.

        Don't call PostMessage immediately if there's a pending WM_PAINT, since
        we don't want to starve all paints when bombarded with a continuous stream of low
        duration timers.

        Removed reentrancy check, since we're now looking for specific starvation cases,
        and will typically defer non-expired timers through CreateTimerQueueTimer.

        The reason Windows wouldn't starve paints in favor of timers with the old code:
        When we went to reset the timer when it fired, the timer reset code treated this as a
        reentrant timer, causing us to hit the slow SetTimer code rather than calling PostMessage,
        even for timers expiring in < 10ms.  I corrected that, exposing the paint starvation problem.

        Use timeBeginPeriod/timeEndPeriod to improve resolution of system timers.
        Limit this resolution change to within 20ms of the last high resolution timer request.
                        
        Corrected GetQueueStatus to check for specific input (and paint) messages rather than
        checking QS_ALLINPUT.  Contrary to its name, QS_ALLINPUT actually indicates interest
        in ALL queued messages, not just input messages.
        
        Fix SetTimer/KillTimer calls to pass our window handle.

        Reviewed by Brady.

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

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

        Fix console-log-formatting to truly test formatting an undefined value

        Exceptions thrown by the test will also now be shown as errors.

        Reviewed by Tim Hatcher.

        * manual-tests/inspector/console-log-formatting.html:
        (test): Use console.error to report exceptions.
        (runTests): Use window.noSuchVariable instead of just noSuchVariable
        to avoid an exception.

2008-04-16  Anatoli Papirovski  <apapirovski@mac.com>

        Reviewed by David.

        Optimized the calculation of background-size.

        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::calculateBackgroundSize):

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

        Fix Bug 17228: console.{log,warn,info,error} should support format
        strings, variable arguments

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

        Reviewed by Tim Hatcher.

        Test: manual-tests/inspector/console-log-formatting.html

        * page/inspector/Console.js:
        (WebInspector.ConsoleMessage): Pass any extra arguments down to
        _format.
        (WebInspector.ConsoleMessage._format): This method constructs
        this.formattedMessage. We treat the first parameter as a format
        string. Any parameters that have not been used after substituting into
        the format string are concatenated together, separated by spaces.
        (WebInspector.ConsoleMessage.toMessageElement): Updated to use
        this.formattedMessage.
        (WebInspector.ConsoleMessage.toString): Ditto.

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

        Make String.format return an array of unused substitutions

        String.format now returns an object with two properties:
        formattedResult and unusedSubstitutions.

        Reviewed by Tim Hatcher.

        * page/inspector/utilities.js:
        (String.vsprintf): Updated for changes to String.format. We throw away
        the array of unused substitutions.
        (String.format): Changed to keep track of which substitutions are used
        when formatting. We then return both the formatted result and the
        array of unused substitutions.

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

        Generalize String.format some more

        String.format now takes an initial value and an append function which
        it uses to build the result. Each time a token is processed,
        append(valueSoFar, newValue) is called.

        Reviewed by Tim Hatcher.

        * page/inspector/utilities.js:
        (String.vsprintf): Pass the empty string for the initial value, and
        a function that concatenates two strings as the append function.
        (String.format): Use initialValue and append to build the result
        instead of only working with strings.

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

        Add String.format

        String.format is a more generic form of String.vsprintf that takes a
        set of formatter functions, one for each supported format specifier.
        Each formatter function is passed the relevant token and substitution
        value, and returns the formatted result.

        Reviewed by Tim Hatcher.

        * page/inspector/utilities.js:
        (String.standardFormatters): Added.
        (String.vsprintf): Changed to call through to String.format.
        (String.format): Added. Most of the code came from String.vsprintf,
        except that we use the passed-in formatters to format the
        substitutions rather than hard-coding how to handle each format
        specifier.

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

        Refactor String.vsprintf to separate tokenizing and substituting

        This will eventually be useful for the various console methods that
        take a format string.

        Reviewed by Tim Hatcher.

        * page/inspector/utilities.js:
        (String.tokenizeFormatString): Added. This uses the format parsing
        code from String.vsprintf but just returns an array of "string" and
        "specifier" tokens.
        (String.vsprintf): Now calls String.tokenizeFormatString and processes
        the tokens one at a time.

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

        Pass all arguments to console.{log,warn,info,error} into the Inspector's JS

        Part of Bug 17228: console.{log,warn,info,error} should support format
        strings, variable arguments
        <http://bugs.webkit.org/show_bug.cgi?id=17228>
        <rdar://problem/5732828>

        We don't use the extra arguments yet.

        Reviewed by Tim Hatcher.

        * page/Console.cpp:
        (WebCore::Console::error): Pass the arguments list to
        InspectorController.
        (WebCore::Console::info): Ditto.
        (WebCore::Console::log): Ditto.
        (WebCore::Console::warn): Ditto.
        * page/InspectorController.cpp:
        (WebCore::ConsoleMessage::ConsoleMessage): Added a new constructor
        that takes an ExecState and a List instead of a String. We wrap and
        store the JSValues from the List in a Vector<ProtectedPtr<JSValue> >.
        (WebCore::InspectorController::addMessageToConsole): Added an overload
        that takes an ExecState and a List.
        (WebCore::InspectorController::addConsoleMessage): Moved code here
        from addMessageToConsole. Both overloads of addMessageToConsole now
        call this helper method.
        (WebCore::InspectorController::addScriptConsoleMessage): Updated for
        the new parameter order of WebInspector.ConsoleMessage. If the
        ConsoleMessage has a non-empty wrappedArguments Vector, we use that
        instead of the ConsoleMessage's message String.
        * page/InspectorController.h:
        * page/inspector/Console.js:
        (WebInspector.ConsoleMessage): Removed the explicit message parameter.
        We now get the message from the unnamed 5th parameter.
        * page/inspector/Resource.js: Updated for the change to
        WebInspector.ConsoleMessage's parameter order.

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

        Change calls to Chrome::addMessageToConsole to use Console::addMessage

        Part of Bug 17228: console.{log,warn,info,error} should support format
        strings, variable arguments
        <http://bugs.webkit.org/show_bug.cgi?id=17228>
        <rdar://problem/5732828>

        Console now takes care of calling ChromeClient::addMessageToConsole
        for the appropriate messages (i.e., just messages from JavaScript). If
        you ever want to add a message to the console, Console is the place to
        do it.

        Reviewed by Darin Adler.

        * WebCore.xcodeproj/project.pbxproj: Mark Console.h Private.
        * page/Chrome.cpp: Removed addMessageToConsole
        * page/Chrome.h: Moved MessageSource/MessageLevel to Console.h.
        * page/Console.cpp:
        (WebCore::Console::addMessage): Added. Calls
        ChromeClient::addMessageToConsole for JS messages, and calls
        InspectorController::addMessageToConsole for all messages.
        (WebCore::Console::error): Changed to call directly to
        InspectorController in addition to ChromeClient.
        (WebCore::Console::info): Ditto.
        (WebCore::Console::log): Ditto.
        (WebCore::Console::warn): Ditto.
        * page/Console.h: Added MessageSource/MessageLevel enums from Chrome.h.

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

        Pass JSConsole's arguments unmodified to Console

        Part of Bug 17228: console.{log,warn,info,error} should support format
        strings, variable arguments
        <http://bugs.webkit.org/show_bug.cgi?id=17228>
        <rdar://problem/5732828>

        All of JSConsole's methods are now custom, so that we can pass the
        arguments unmodified to Console. Console now handles calling
        toString() on the first argument. Later it will pass the arguments off
        to InspectorController.

        There should be no behavioral changes caused by this patch.

        Reviewed by Darin Adler.

        * ForwardingHeaders/kjs/list.h: Added.
        * GNUmakefile.am: Added JSConsoleCustom.cpp to the project.
        * WebCore.pro: Ditto.
        * WebCore.vcproj/WebCore.vcproj: Ditto.
        * WebCore.xcodeproj/project.pbxproj: Ditto.
        * WebCoreSources.bkl: Ditto.
        * bindings/js/JSConsoleCustom.cpp: Added.
        (WebCore::JSConsole::error):
        (WebCore::JSConsole::info):
        (WebCore::JSConsole::log):
        (WebCore::JSConsole::warn):
        * page/Console.cpp: Changed all methods to take an ExecState* and a
        const List&. The first item in the List is toString()ed and passed to
        Chrome.
        (WebCore::Console::error):
        (WebCore::Console::info):
        (WebCore::Console::log):
        (WebCore::Console::warn):
        * page/Console.h:
        * page/Console.idl:

2008-04-16  Sam Weinig  <sam@webkit.org>

        Reviewed by Darin Adler.

        Rename kjs_strtod to KJS::strtod.

        * platform/text/String.cpp:
        (WebCore::charactersToDouble):

2008-04-16  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Adam.

        http://bugs.webkit.org/show_bug.cgi?id=18259
        XML+XSLT pages in iframe contains document.location of a parent window

        Test: fast/xsl/subframe-location.html

        * xml/XSLTProcessor.cpp:
        (WebCore::XSLTProcessor::createDocumentFromSource): Set resulting document URL before opening
        it, so that the document loader picks a correct URL, too.

2008-04-16  Dan Bernstein  <mitz@apple.com>

        Rubber-stamped by John Sullivan.

        - remove unreachable code which was added in r8802

        * rendering/RenderText.cpp:
        (WebCore::RenderText::caretRect):

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

        Adds a script resource icon. Update the CSS icon to better match the script icon.

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

        Rubber-stamped by Adele Peterson.

        * page/inspector/Images/resourceCSSIcon.png: Updated.
        * page/inspector/Images/resourceJSIcon.png: Added.
        * page/inspector/inspector.css: Changed the script icon rule to reference the new image.

2008-04-16  Eric Seidel  <eric@webkit.org>

        Reviewed by hyatt.

        Fix leaky ImageBuffer code.

        * platform/graphics/GeneratedImage.cpp:
        (WebCore::GeneratedImage::drawPattern):
        * platform/graphics/ImageBuffer.h:
        * platform/graphics/cg/ImageBufferCG.cpp:
        (WebCore::ImageBuffer::image):

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

        Reviewed by Oliver.

        <rdar://problem/5665299> REGRESSION (r27369): Paste text into a contenteditable div creates a contenteditable div for each line (16661)

        * editing/markup.cpp:
        (WebCore::createFragmentFromText): Don't use clones of the enclosing block to hold
        paragraphs if the enclosing block is the root editable element.

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

        Reviewed by Jon Honeycutt.

        Don't treat the misnamed NSAccessibilitySortButtonRole as an accessibility role.  It is really
        a subrole of NSAccessibilityButtonRole.  As it is not used inside WebCore there is no change in
        behaviour as a result of doing this.  This fixes <rdar://problem/5866444>.

        * page/AccessibilityObject.cpp:
        (WebCore::AccessibilityObject::canSetFocusAttribute): Remove SortButtonRole as it is unused.
        * page/AccessibilityObject.h: Ditto.
        * page/mac/AccessibilityObjectWrapper.mm:
        (RoleEntry::):

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

        Fix leaks seen on bot.
        
        * loader/SubstituteResource.h:
        (WebCore::SubstituteResource::~SubstituteResource):
        Add a virtual destructor.

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

        Reviewed by Anders Carlsson

        Fix for <rdar://problem/5820819> - Crash sometime occurs when interrupting a load.

        Each SubresourceLoader has a client.  That client is often a Loader::Host object.  
        The Loader/Host/CachedResource system predates our ref-counting and ownership models, and therefore manages
        object lifetime manually.

        The cause of this crash was that we would sometimes call "didFail()" on a Host object twice - Once when 
        beginning the new navigation, and once when the new navigation is committed.

        The problem is after the first time Host::didFail() gets called, the Host is almost always deleted shortly 
        thereafter.  But the SubresourceLoader had a dangling pointer to the Host which is now invalid.

        I explored a few options to fix this bug.  The one that was most obviously "clean" was to call cancel() on
        the SubresourceLoader itself, which would end up calling Host::didFail() and doing the appropriate cache
        cleanup.

        This problem with that approach was that it had other side effects - when you cut off a load that had already
        partially displayed in the WebView, images that hadn't finished loading would be invalidated and immediately
        turn into broken image icons.  This was visually jarring and pretty unacceptable. 

        So I decided to follow a much simpler approach, which was to have the Host clear the client pointer from each
        SubresourceLoader before it forgets about it.  This leaves things the same visually and fixes the crash.

        Note that the layout test for this - if possible - will require other enhancements to DRT including possibly 
        adding support for window.stop(). That task is non-trivial, and is documented in <rdar://problem/5061826> 

        * loader/SubresourceLoader.h:
        (WebCore::SubresourceLoader::clearClient): Add a method to clear the SubresourceLoaderClient.  This is 
          perfectly safe to do on an in-flight SubresourceLoader as they are already designed to be client-less,
          and already null-check the client before calling it.

        * loader/loader.cpp:
        (WebCore::Loader::Host::didFail): The SubresourceLoader itself might not be finished loading and might decide 
          to call into its client later.  Since the client has no guaranteed lifetime and is liable to be deleted 
          after didFail() is called, call clearClient() on the SubresourceLoader so such an invalid call can't happen.

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

        Reviewed by Adam.

        Add empty files for the application cache.
        
        * Configurations/WebCore.xcconfig:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.vcproj/build-generated-files.sh:
        Add ENABLE_OFFLINE_WEB_APPLICATIONS to FEATURE_DEFINES.
        
        * WebCore.xcodeproj/project.pbxproj:
        * loader/appcache: Added.
        * loader/appcache/ApplicationCache.cpp: Added.
        * loader/appcache/ApplicationCache.h: Added.
        * loader/appcache/ApplicationCacheGroup.cpp: Added.
        * loader/appcache/ApplicationCacheGroup.h: Added.
        * loader/appcache/ApplicationCacheResource.cpp: Added.
        * loader/appcache/ApplicationCacheResource.h: Added.
        * loader/appcache/DOMApplicationCache.cpp: Added.
        * loader/appcache/DOMApplicationCache.h: Added.
        * loader/appcache/DOMApplicationCache.idl: Added.
        * loader/appcache/ManifestParser.cpp: Added.
        * loader/appcache/ManifestParser.h: Added.

2008-04-15  Kevin McCullough  <kmccullough@apple.com>

        Reviewed by Tim.

        - <rdar://problem/5792587> AJAX (XMLHttpRequest) support for the Inspector (17776)
        - Add XMLHttpRequest support to the inspector.

        * English.lproj/InspectorLocalizedStrings.js: Specify capitalization
        instead of using text-transform because XHR must capitalize all the letters.
        * page/inspector/Resource.js: Assume XHRs are textType even though this
        may not always be true.
        Also add the XHR category and let all mime types be consistent with it.
        * page/inspector/ResourcesPanel.js: Set the XHR category color.
        * page/inspector/inspector.css: Make XHRs yellow and fonts red because
        XHRs are more common than fonts and yellow next to orange (scripts) is
        not as harsh on the eyes as red next to orange.
        * page/inspector/inspector.js: Specify capitalization again.

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

        Fix the zoom property so that it works properly with font-size.

        Reviewed by John Sullivan

        Added fast/css/zoom-font-size.html

        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::updateFont):
        (WebCore::CSSStyleSelector::applyProperty):
        (WebCore::CSSStyleSelector::checkForZoomChange):
        * css/CSSStyleSelector.h:

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

        Fixes the bug where a resource view could still be shown after the inspected
        page navigates to another page.

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

        Reviewed by Adam Roben.

        * page/inspector/ResourcesPanel.js:
        (WebInspector.ResourcesPanel.prototype.reset): Close the visible resource.
        Iterate over all the resources and zero errors and warnings and delete the
        resource view and tree element. Removes all children of resourceViews. Passes
        true to _updateGraphDividersIfNeeded to force an immediate update.
        (WebInspector.ResourcesPanel.prototype.removeResource): Added. Closes
        the resource view if it is visible. Removes the resource from the _resources
        array. Removes the tree element from the outline tree. Zeros out the errors
        and warnings properties. Deletes the tree element and resource view properties.
        (WebInspector.ResourcesPanel.prototype.closeVisibleResource): Null check
        this._calculator for times when reset is called before the calculator is set.
        * page/inspector/inspector.js:
        (WebInspector.removeResource): Call ResourcesPanel.removeResource.

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

        Reviewed by Adam.

        Rename "archive" to "substitute" in a couple of places.
        
        * loader/DocumentLoader.cpp:
        (WebCore::DocumentLoader::DocumentLoader):
        (WebCore::DocumentLoader::clearArchiveResources):
        (WebCore::DocumentLoader::deliverSubstituteResourcesAfterDelay):
        (WebCore::DocumentLoader::substituteResourceDeliveryTimerFired):
        (WebCore::DocumentLoader::isSubstituteLoadPending):
        (WebCore::DocumentLoader::cancelPendingSubstituteLoad):
        (WebCore::DocumentLoader::scheduleArchiveLoad):
        (WebCore::DocumentLoader::setDefersLoading):
        * loader/DocumentLoader.h:
        * loader/ResourceLoader.cpp:
        (WebCore::ResourceLoader::load):
        (WebCore::ResourceLoader::didCancel):

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

        Reviewed by Adam.

        Move the URL, response and data to SubstituteResource.
        
        * loader/SubstituteResource.h:
        (WebCore::SubstituteResource::url):
        (WebCore::SubstituteResource::response):
        (WebCore::SubstituteResource::data):
        (WebCore::SubstituteResource::SubstituteResource):
        * loader/archive/ArchiveResource.cpp:
        (WebCore::ArchiveResource::ArchiveResource):
        * loader/archive/ArchiveResource.h:
        (WebCore::ArchiveResource::frameName):

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

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

        Make sure to ignore zoom:0.  That is not supposed to actually do anything.  It's a hack in IE
        to cause an element to set "hasLayout."

        Reviewed by Anders

        Added fast/css/zoom-property-parsing.html

        * css/CSSParser.cpp:
        (WebCore::CSSParser::parseValue):
        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::applyProperty):

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

        Reviewed by Adam.

        Add a (currently empty) SubstituteResource class and make ArchiveResource inherit from it.
        
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * loader/SubstituteResource.h: Added.
        * loader/archive/ArchiveResource.h:

2008-04-15  Antti Koivisto  <antti@apple.com>

        Reviewed by Geoff.

        Fix <rdar://problem/5862921>
        REGRESSION: Leak in SVGSVGElement::SVGSVGElement
        
        In these strange days RefCounted starts with count of one.

        * svg/SVGSVGElement.cpp:
        (WebCore::SVGSVGElement::SVGSVGElement):
        * svg/animation/SMILTimeContainer.h:
        (WebCore::SMILTimeContainer::create):

2008-04-15  Anatoli Papirovski  <apapirovski@mac.com>

        Reviewed by hyatt

        [CSS1, CSS3] Fixed the background-origin calculation for root elements
        (background-size and background-position are affected), r10794
        [CSS3] Fixed the background-size transformation where width is specified in percentage and height is left to auto

        Test: fast/backgrounds/background-origin-root-element.html

        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::calculateBackgroundSize):
        (WebCore::RenderBox::calculateBackgroundImageGeometry):

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

        Fixes the regression where the error and warning counts did not show up in the Resources
        sidebar next to resources.

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

        Reviewed by Adam Roben.

        * page/inspector/ResourcesPanel.js:
        (WebInspector.ResourcesPanel.prototype.addMessageToResource): Increment errors or warnings
        on the resource. Set the bubbleText to the total of the errors and warnings. Add a error
        or warning class to the bubble.
        (WebInspector.ResourcesPanel.prototype.clearMessages): Zero out the errors and warnings
        properties on each resource. Set the bubbleText back to an empty string.
        * page/inspector/SidebarTreeElement.js:
        (WebInspector.SidebarTreeElement): Create a statusElement.
        (WebInspector.SidebarTreeElement.prototype.get bubbleText): Return _bubbleText.
        (WebInspector.SidebarTreeElement.prototype.set bubbleText): Create bubbleElement if needed.
        Assign the value to _bubbleText and bubbleElement.textContent.
        (WebInspector.SidebarTreeElement.prototype.onattach): Append statusElement to _listItemNode.
        * page/inspector/inspector.css: Style rules for bubbles and status elements.

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

        Fixes the regression where error and warning bubbles would not be added
        to the source view of a resource.

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

        Reviewed by Adam Roben.

        * css/view-source.css:
        (.webkit-html-message-bubble): Add a min-height to make sure the border-radius
        has enough room to apply.
        * page/inspector/Console.js:
        (WebInspector.Console.prototype.addMessage): Removed code that added messages
        to resource panels and incremented error and warning counts on resources.
        Now just call ResourcesPanel.addMessageToResource after assigning the resource
        to the console message.
        (WebInspector.Console.prototype.clearMessages): Removed code that cleared error
        and warning counts from resources an call ResourcesPanel.clearMessages.
        * page/inspector/ResourcesPanel.js:
        (WebInspector.ResourcesPanel.prototype.addMessageToResource): Call addMessage
        on the resource's view, if it is implemented.
        (WebInspector.ResourcesPanel.prototype.clearMessages): Call clearMessages
        on all the resource views for the ones that implement it.
        (WebInspector.ResourcesPanel.prototype.refreshResource): Call _resourceView
        to make the resource's view if needed. Use a local view variable.
        (WebInspector.ResourcesPanel.prototype._resourceView): Added helper function
        to create a resource view if needed.
        * page/inspector/SourceView.js:
        (WebInspector.SourceView.prototype.setupSourceFrameIfNeeded): Delete the 
        _frameNeedsSetup property at the beginning to prevent recursion. Get the
        length of the messages array when assigning the local length variable.
        (WebInspector.SourceView.prototype.addMessage): Renamed from addMessageToSource.
        (WebInspector.SourceView.prototype.clearMessages): Added. Clear all the message
        bubbles that might be sprinkled in the source. Also clears the messages array.
        (WebInspector.SourceView.prototype._addMessageToSource): Create the image
        element in the Inspector's document so we can use relative image URLs. Then
        adopt the image element into the frame's document.

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

        Reviewed by Anders

        Hook up event dispatching for window.localStorage changes.

        Tests: storage/domstorage/localstorage/enumerate-storage.html
               storage/domstorage/localstorage/iframe-events.html
               storage/domstorage/localstorage/index-get-and-set.html
               storage/domstorage/localstorage/onstorage-attribute-markup.html
               storage/domstorage/localstorage/onstorage-attribute-setattribute.html
               storage/domstorage/localstorage/simple-events.html
               storage/domstorage/localstorage/simple-usage.html
               storage/domstorage/localstorage/window-open.html

        * storage/LocalStorage.cpp:
        (WebCore::LocalStorage::dispatchStorageEvent): Walk every Page in the PageGroup, adding
          each Frame that matches the storage area's security origin to a Vector.  Then dispatch
          the StorageEvent to each Frame in the Vector

        * storage/SessionStorage.cpp:
        (WebCore::SessionStorage::dispatchStorageEvent): Adopt the technique used in LocalStorage,
          which is to only add the Frames to the Vector if their security origin matches

2008-04-15  Olivier Goffart  <ogoffart@trolltech.com>

        Reviewed by Simon.

        Fixes: copy to clipboard when selecting, and paste when clicking with the middle button

        * platform/Pasteboard.h: Added Qt-specific selection mode
        * platform/qt/PasteboardQt.cpp: Choose the clipboard or the selecton
        according to the selection mode
        (WebCore::Pasteboard::writeSelection):
        (WebCore::Pasteboard::plainText):
        (WebCore::Pasteboard::documentFragment):
        (WebCore::Pasteboard::writeURL):
        (WebCore::Pasteboard::clear):
        (WebCore::Pasteboard::isSelectionMode):

2008-04-15  Andre Poenitz  <andre.poenitz@trolltech.com>

        Reviewed by Simon.

        Fix compilation with Qt namespaces

        Qt can be configured to have all of its classes inside a specified namespaces.
        This is for example used in plugin/component environments like Eclipse.

        This change makes it possible to let the Qt port compile against a namespaced
        Qt by the use of macros Qt provides to properly forward declare Qt classes in
        the namespace.

        * WebCore.pro:
        * bridge/qt/qt_class.h:
        * bridge/qt/qt_instance.h:
        * html/HTMLCanvasElement.h:
        * platform/DragData.h:
        * platform/DragImage.h:
        * platform/KURL.h:
        * platform/PlatformKeyboardEvent.h:
        * platform/PlatformMouseEvent.h:
        * platform/PlatformWheelEvent.h:
        * platform/Widget.h:
        * platform/graphics/Color.h:
        * platform/graphics/FloatPoint.h:
        * platform/graphics/FloatRect.h:
        * platform/graphics/Gradient.h:
        * platform/graphics/GraphicsContext.h:
        * platform/graphics/ImageBuffer.h:
        * platform/graphics/ImageSource.h:
        * platform/graphics/IntPoint.h:
        * platform/graphics/IntRect.h:
        * platform/graphics/IntSize.h:
        * platform/graphics/Path.h:
        * platform/graphics/qt/MediaPlayerPrivatePhonon.cpp:
        * platform/graphics/qt/MediaPlayerPrivatePhonon.h:
        * platform/network/qt/QNetworkReplyHandler.h:
        * platform/network/qt/ResourceRequest.h:
        * platform/qt/ClipboardQt.h:
        * platform/qt/RenderThemeQt.h:
        * platform/text/PlatformString.h:
        * platform/text/qt/TextCodecQt.h:
        * svg/graphics/SVGPaintServer.h:
        * svg/graphics/SVGPaintServerGradient.h:

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

        Reviewed by Anders

        Lay the underpinnings for LocalStorage.

        For now, this just exposes window.localStorage to the dom which returns an in-memory Storage object, much
        like SessionStorage.  The primary difference at this point is that the object returned is shared globally,
        and isn't copied for new top-level browsing contexts like SessionStorage.

        Later, I'll add proper event dispatch and a persistent storage backing.

        * GNUmakefile.am:
        * WebCore.base.exp:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * WebCoreSources.bkl:

        * bindings/js/JSDOMWindowCustom.cpp:
        (WebCore::JSDOMWindow::mark): Mark the optionalLocalStorage

        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::clear):
        (WebCore::DOMWindow::localStorage):
        * page/DOMWindow.h:
        (WebCore::DOMWindow::optionalLocalStorage):

        * storage/LocalStorage.cpp: Added.
        (WebCore::LocalStorage::sharedLocalStorage):
        (WebCore::LocalStorage::LocalStorage):
        (WebCore::LocalStorage::storageArea):
        (WebCore::LocalStorage::itemChanged):
        (WebCore::LocalStorage::itemRemoved):
        (WebCore::LocalStorage::dispatchStorageEvent):
        * storage/LocalStorage.h: Added.

        * storage/SessionStorage.cpp: Refactor to use the client interface for event dispatching for sessionStorage objects
        (WebCore::SessionStorage::SessionStorage):
        (WebCore::SessionStorage::copy):
        (WebCore::SessionStorage::storageArea):
        (WebCore::SessionStorage::itemChanged):
        (WebCore::SessionStorage::itemRemoved):
        (WebCore::SessionStorage::dispatchStorageEvent):
        * storage/SessionStorage.h:

        * storage/StorageArea.cpp: Add a client parameter, and call to the client when an item is changed or removed.
        (WebCore::StorageArea::create):
        (WebCore::StorageArea::StorageArea):
        (WebCore::StorageArea::copy):
        (WebCore::StorageArea::setItem):
        (WebCore::StorageArea::removeItem):
        (WebCore::StorageArea::setClient):
        * storage/StorageArea.h:
        (WebCore::StorageArea::page):
        (WebCore::StorageArea::securityOrigin):

        * storage/StorageAreaClient.h: Added.  Break out "itemChanged" and "itemRemoved" to a StorageAreaClient
          This way, both SessionStorage and LocalStorage areas can have different behavior on changes with
          that behavior managed from a central location.
        (WebCore::StorageAreaClient::~StorageAreaClient):
        (WebCore::StorageAreaClient::StorageAreaClient):
        (WebCore::StorageAreaClient::itemChanged):
        (WebCore::StorageAreaClient::itemRemoved):

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

        Reviewed by Anders

        Add a hidden pref to debug WebArchive loading.  With this pref on, when loading a WebArchive,
        if the resource isn't in the ArchiveResourceCollection, the loader will not fall back to the 
        network and will instead fail the load with a "cannot show URL" error.

        * loader/ResourceLoader.cpp:
        (WebCore::ResourceLoader::load): Do the check here.

        * page/Settings.cpp:
        (WebCore::Settings::Settings):
        (WebCore::Settings::setWebArchiveDebugModeEnabled):
        * page/Settings.h:
        (WebCore::Settings::webArchiveDebugModeEnabled):

2008-04-14  Antti Koivisto  <antti@apple.com>

        Reviewed by Eric.

        Some preparations for additive animations and animations in <use>.
        - Disallow animation elements in instance trees.
        - Fix buggy SVGUseElement::removeDisallowedElementsFromSubtree(), make it 
          public and static
        - Invoke it from SVGElementInstance::updateInstance() to clean up the instance tree
          there as well.
        - Add mechanism for blocking instance updates when an animation changes
          the referenced tree.
        
        The added assert in SVGSMILElement::insertedIntoDocument() verifies the fixes
        with the existing test cases.

        * svg/SVGAElement.cpp:
        (WebCore::SVGAElement::defaultEventHandler):
        * svg/SVGElementInstance.cpp:
        (WebCore::SVGElementInstance::updateInstance):
        * svg/SVGStyledElement.cpp:
        (WebCore::SVGStyledElement::updateElementInstance):
        (WebCore::SVGStyledElement::setInstanceUpdatesBlocked):
        * svg/SVGStyledElement.h:
        * svg/SVGUseElement.cpp:
        (WebCore::isDisallowedElement):
        (WebCore::SVGUseElement::removeDisallowedElementsFromSubtree):
        * svg/SVGUseElement.h:
        * svg/animation/SVGSMILElement.cpp:
        (WebCore::SVGSMILElement::insertedIntoDocument):
        (WebCore::SVGSMILElement::isSMILElement):
        (WebCore::SVGSMILElement::connectConditions):
        (WebCore::SVGSMILElement::disconnectConditions):
        * svg/animation/SVGSMILElement.h:

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

        Don't let the inspected page overwrite properties of JS objects in the
        Inspector

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

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

        Reviewed by Sam Weinig and Geoff Garen.

        Tests (contributed by Adam Barth and Collin Jackson):
        manual-tests/inspector-wrappers

        * GNUmakefile.am:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * WebCoreSources.bkl:
        Added new files to the projects.

        * bindings/js/JSQuarantinedObjectWrapper.cpp: Added.
        (WebCore::JSQuarantinedObjectWrapper::asWrapper): Converts a JSValue
        into a JSQuarantinedObjectWrapper, if the JSValue is in fact a
        JSQuarantinedObjectWrapper.
        (WebCore::JSQuarantinedObjectWrapper::cachedValueGetter): Callback to
        be used with PropertySlot.
        (WebCore::JSQuarantinedObjectWrapper::JSQuarantinedObjectWrapper):
        Hold onto the object we're wrapping and its global object. Pass the
        wrapped prototype up to the JSObject constructor.
        (WebCore::JSQuarantinedObjectWrapper::~JSQuarantinedObjectWrapper):
        (WebCore::JSQuarantinedObjectWrapper::unwrappedExecStateMatches):
        Returns true if our underlying object originated from the same global
        object as the passed-in ExecState.
        (WebCore::JSQuarantinedObjectWrapper::unwrappedExecState):
        (WebCore::JSQuarantinedObjectWrapper::transferExceptionToExecState):
        Wraps and moves an exception from our underlying ExecState to the
        passed-in one.
        (WebCore::JSQuarantinedObjectWrapper::mark): Marks ourselves and the
        objects we're holding references to.

        (WebCore::JSQuarantinedObjectWrapper::getOwnPropertySlot):
        (WebCore::JSQuarantinedObjectWrapper::put):
        (WebCore::JSQuarantinedObjectWrapper::deleteProperty):
        (WebCore::JSQuarantinedObjectWrapper::implementsConstruct):
        (WebCore::JSQuarantinedObjectWrapper::construct):
        (WebCore::JSQuarantinedObjectWrapper::implementsHasInstance):
        (WebCore::JSQuarantinedObjectWrapper::hasInstance):
        (WebCore::JSQuarantinedObjectWrapper::implementsCall):
        (WebCore::JSQuarantinedObjectWrapper::callAsFunction):
        (WebCore::JSQuarantinedObjectWrapper::getPropertyNames):
        JSObject overrides. These each check the appropriate permission before
        allowing the call to proceed. We wrap all outgoing values using
        m_wrapOutgoingValue, and we prepare all incoming values with the
        virtual prepareIncomingValue function. If an exception is raised when
        calling the underlying object, we transfer the exception in wrapped
        form to the passed-in ExecState.

        * bindings/js/JSQuarantinedObjectWrapper.h: Added.
        (WebCore::JSQuarantinedObjectWrapper::unwrappedObject):
        (WebCore::JSQuarantinedObjectWrapper::className): We return the
        underlying object's class name so that we can successfully masquerade
        as that underlying object when, e.g., Object.prototype.toString is
        called on us.
        (WebCore::JSQuarantinedObjectWrapper::classInfo):

        (WebCore::JSQuarantinedObjectWrapper::allowsGetProperty):
        (WebCore::JSQuarantinedObjectWrapper::allowsSetProperty):
        (WebCore::JSQuarantinedObjectWrapper::allowsDeleteProperty):
        (WebCore::JSQuarantinedObjectWrapper::allowsConstruct):
        (WebCore::JSQuarantinedObjectWrapper::allowsHasInstance):
        (WebCore::JSQuarantinedObjectWrapper::allowsCallAsFunction):
        (WebCore::JSQuarantinedObjectWrapper::allowsGetPropertyNames):
        These virtual methods let subclasses define the allowed operations on
        the wrapped object. By default all operations are disabled.

        * bindings/js/JSInspectedObjectWrapper.cpp: Added. This subclass of
        JSQuarantinedObjectWrapper is used to wrap objects from the inspected
        page being passed to the Inspector.
        (WebCore::wrappers):
        (WebCore::JSInspectedObjectWrapper::wrap): Wraps the passed-in object
        if needed and returns the wrapper. If this object has been wrapped
        previously we'll return the old wrapper rather than make a new one.
        (WebCore::JSInspectedObjectWrapper::JSInspectedObjectWrapper): Add
        ourselves to the wrapper map.
        (WebCore::JSInspectedObjectWrapper::~JSInspectedObjectWrapper): Remove
        ourselves from the wrapper map.
        (WebCore::JSInspectedObjectWrapper::prepareIncomingValue): Ensure that
        any objects passed to the inspected object are either wrappers around
        objects from the inspected page (in which case we unwrap them so that
        the inspected page never sees the wrapper), or wrapped callbacks from
        the Inspector.
        * bindings/js/JSInspectedObjectWrapper.h: Added.
        (WebCore::JSInspectedObjectWrapper::classInfo):
        (WebCore::JSInspectedObjectWrapper::allowsGetProperty):
        (WebCore::JSInspectedObjectWrapper::allowsSetProperty):
        (WebCore::JSInspectedObjectWrapper::allowsDeleteProperty):
        (WebCore::JSInspectedObjectWrapper::allowsConstruct):
        (WebCore::JSInspectedObjectWrapper::allowsHasInstance):
        (WebCore::JSInspectedObjectWrapper::allowsCallAsFunction):
        (WebCore::JSInspectedObjectWrapper::allowsGetPropertyNames):
        These all return true so that the Inspector can use objects from the
        inspected page however it needs.
        (WebCore::JSInspectedObjectWrapper::wrapOutgoingValue): Wrap all
        outgoing values as JSInspectedObjectWrappers.

        * bindings/js/JSInspectorCallbackWrapper.cpp: Added. This subclass of
        JSQuarantinedObjectWrapper is used to wrap callbacks that the
        Inspector passes to the inspected page (e.g., for event listeners or
        client-side storage callbacks).
        (WebCore::wrappers):
        (WebCore::JSInspectorCallbackWrapper::wrap): Wraps the passed-in
        object if needed and returns the wrapper. If this object has been
        wrapped previously we'll return the old wrapper rather than make a new
        one.
        (WebCore::JSInspectorCallbackWrapper::JSInspectorCallbackWrapper): Add
        ourselves to the wrapper map.
        (WebCore::JSInspectorCallbackWrapper::~JSInspectorCallbackWrapper):
        Remove ourselves from the wrapper map.
        (WebCore::JSInspectorCallbackWrapper::prepareIncomingValue): Ensure
        that values passed from the inspected page to an Inspector callback
        are wrapped in JSInspectedObjectWrappers. We also allow the inspected
        page to pass ourselves in (which will happen in the case of a
        client-side storage callback, where the callback itself is passed as
        the `this` object). In this case we unwrap ourselves so that the
        Inspector doesn't have to deal with the wrapper.
        * bindings/js/JSInspectorCallbackWrapper.h: Added.
        (WebCore::JSInspectorCallbackWrapper::classInfo):
        (WebCore::JSInspectorCallbackWrapper::allowsCallAsFunction):
        This is the only allowed operation on a JSInspectorCallbackWrapper.
        (WebCore::JSInspectorCallbackWrapper::wrapOutgoingValue): Wrap all
        outgoing values as JSInspectorCallbackWrappers.

        * page/InspectorController.cpp:
        (WebCore::getResourceDocumentNode): Wrap the Document before passing
        it to the Inspector.
        (WebCore::highlightDOMNode): Unwrap the Node that the Inspector passed
        to us.
        (WebCore::databaseTableNames): Unwrap the Database that the Inspector
        passed to us.
        (WebCore::inspectedWindow): Wrap the Window before passing it to the
        Inspector.
        (WebCore::InspectorController::focusNode): Wrap the Node before
        passing it to the Inspector.
        (WebCore::wrapCallback): Wraps the passed-in callback in a
        JSInspectorCallbackWrapper.
        (WebCore::InspectorController::addDatabaseScriptResource): Wrap the
        Database beore pasing it to the Inspector.
        (WebCore::InspectorController::windowScriptObjectAvailable): Add the
        new wrapCallback function to the InspectorController JS object.

        * page/inspector/ElementsPanel.js:
        (WebInspector.ElementsPanel.reset): Wrap the contentLoaded callback.

        * page/inspector/DatabaseQueryView.js:
        (WebInspector.DatabaseQueryView._enterKeyPressed):
        * page/inspector/DatabaseTableView.js:
        (WebInspector.DatabaseTableView.update):
        Pass null instead of an empty array to executeSql since we're no
        longer allowed to pass any unwrapped objects to the inspected page.
        We now wrap all callbacks being passed to the inspected page using
        InspectorController.wrapCallback.

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

        Use prototypes/constructors from the inspected page when operating on
        objects from the inspected page

        Reviewed by Tim Hatcher.

        * page/inspector/Console.js:
        (WebInspector.ConsolePanel._format): Use the Node constructor from the
        inspected Window with the instanceof operator.
        * page/inspector/ElementsPanel.js:
        (WebInspector.DOMNodeTreeElement._attributeEditingCommitted): Use the
        Element prototype from the inspected Window instead of the Element
        prototype from this Window.
        * page/inspector/inspector.js:
        (WebInspector.performSearch): Ditto for Document prototype.
        * page/inspector/utilities.js:
        (Object.type): Now takes an optional Window parameter that is used to
        find the built-in constructors.

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

        Don't store objects from the Inspector on CSSStyleRules from the
        inspected page

        Reviewed by Tim Hatcher.

        * page/inspector/StylesSidebarPane.js:
        (WebInspector.StylesSidebarPane.update): Don't store raw CSSStyleRules
        from the inspected page in the styleRules array. Instead, always use a
        wrapper object. This will keep us from setting Inspector objects as
        properties of inspected objects.

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

        Fixes a regression where clicking a resource URL in the Console would not
        show the resource in the Resources panel.

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

        Reviewed by Adam Roben.

        * page/inspector/Console.js:
        (WebInspector.Console.prototype._messagesClicked): Removed console-message-url
        handling to show resources. This is now handled by WebInspector.showResourceForURL.
        (WebInspector.ConsoleMessage.prototype.toMessageElement): Add the webkit-html-resource-link
        class name to the URL anchor. Also add the line number as a property to the anchor.
        * page/inspector/ResourcesPanel.js:
        (WebInspector.ResourcesPanel): Add a reference to the tree element to each calculator.
        (WebInspector.ResourcesPanel.prototype.showResource): Select and reveal the resource in
        the sidebar. Call showLine on the resource view if it is implemented.
        (WebInspector.ResourcesPanel.prototype.closeVisibleResource): Select the current calculator's
        tree element in the sidebar.
        (WebInspector.ResourcesPanel.prototype._graphSelected): Call closeVisibleResource after
        the calculator changes since closeVisibleResource uses the calculator.
        * page/inspector/SourceView.js:
        (WebInspector.SourceView.prototype.sourceRow): Early return if the line is null/zero.
        (WebInspector.SourceView.prototype.showLine):  Renamed from showSourceLine.
        * page/inspector/inspector.css:
        (body.console-visible #main-panels): Made the bottom 24px to match
        the height of #main-status-bar.
        (.console-message-url): Make the color important so it wins over
        the .webkit-html-resource-link rule.
        (.resource-view .resource-view-content): Made more generic from .image
        so all resource views get sized correctly.
        (.resource-view.image .resource-view-content): Removed.
        * page/inspector/inspector.js:
        (WebInspector.documentClick): Pass the line number from the anchor to
        WebInspector.showResourceForURL.
        (WebInspector.showResourceForURL): Add line number support. Pass the line
        to ResourcesPanel.showResource.
        (WebInspector.addMainEventListeners): Use bind for the event listeners.

2008-04-14  Xan Lopez  <xan@gnome.org>

        Reviewed by Alp Toker.

        http://bugs.webkit.org/show_bug.cgi?id=17917
        Bug 17917: Cookie support for HTTP soup backend

        Initial implementation of cookies for the http soup backend.

        Moved CookieJarGtk to CookieJarSoup in network/soup and left the original
        one as CookieJarCurl in network/curl.

        * GNUmakefile.am:
        * platform/CookieJar.h:
        * platform/network/curl/CookieJarCurl.cpp: Renamed from WebCore/platform/gtk/CookieJarGtk.cpp.
        (WebCore::setCookies):
        (WebCore::cookies):
        * platform/network/soup/CookieJarSoup.cpp: Added.
        (WebCore::getCookieJar):
        (WebCore::setCookies):
        (WebCore::cookies):
        * platform/network/soup/ResourceHandleSoup.cpp:
        (WebCore::ResourceHandle::start):

2008-04-14  Holger Freyther  <zecke@selfish.org>

        Reviewed by Alp Toker.

        https://bugs.webkit.org/show_bug.cgi?id=18411
        Enable Page caching and create FrameViews on the fly

        Create the FrameView on the fly and cache pages

        - Keep a copy of the GtkAdjustment to be able to reuse it for the
          FrameViews
        - Do not initially create a FrameView and update the WebKit code to
          cope with not having a view.
        - Cache seven pages by default.

        * platform/gtk/ScrollViewGtk.cpp:
        (WebCore::ScrollView::setGtkAdjustments):

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

        Add a new optimized layout path for positioned objects that move.  Also avoid always marking the <html>
        object for layout when it has a percentage height, since the RenderView already does that when its size
        changes.

        Reviewed by mjs

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::layoutBlockChildren):
        (WebCore::RenderBlock::layoutPositionedObjects):
        * rendering/RenderBox.h:
        (WebCore::RenderBox::layoutDoingPositionedMovementOnly):
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::RenderObject):
        (WebCore::RenderObject::setNeedsLayout):
        (WebCore::RenderObject::setChildNeedsLayout):
        (WebCore::RenderObject::setNeedsPositionedMovementLayout):
        (WebCore::RenderObject::setStyle):
        * rendering/RenderObject.h:
        (WebCore::RenderObject::needsLayout):
        (WebCore::RenderObject::needsPositionedMovementLayoutOnly):
        (WebCore::RenderObject::layoutDoingPositionedMovementOnly):
        * rendering/RenderStyle.cpp:
        (WebCore::positionedObjectMoved):
        (WebCore::RenderStyle::diff):
        * rendering/RenderStyle.h:
        (WebCore::RenderStyle::):

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

        Add support for gradients in the CSS content property.

        Reviewed by olliej

        Added fast/gradients/generated-gradients.html

        * GNUmakefile.am:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * WebCoreSources.bkl:
        * css/CSSParser.cpp:
        (WebCore::CSSParser::parseContent):
        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::applyProperty):
        (WebCore::CSSStyleSelector::styleImage):
        (WebCore::CSSStyleSelector::mapBackgroundImage):
        * css/CSSStyleSelector.h:
        * html/HTMLImageElement.cpp:
        (WebCore::HTMLImageElement::attach):
        * rendering/RenderContainer.cpp:
        (WebCore::RenderContainer::updateBeforeAfterContentForContainer):
        * rendering/RenderImage.cpp:
        (WebCore::RenderImage::RenderImage):
        (WebCore::RenderImage::setCachedImage):
        (WebCore::RenderImage::paintReplaced):
        (WebCore::RenderImage::calcReplacedWidth):
        (WebCore::RenderImage::calcReplacedHeight):
        (WebCore::RenderImage::calcAspectRatioWidth):
        (WebCore::RenderImage::calcAspectRatioHeight):
        * rendering/RenderImage.h:
        (WebCore::RenderImage::hasImage):
        (WebCore::RenderImage::image):
        (WebCore::RenderImage::errorOccurred):
        (WebCore::RenderImage::usesImageContainerSize):
        (WebCore::RenderImage::setImageContainerSize):
        (WebCore::RenderImage::imageHasRelativeWidth):
        (WebCore::RenderImage::imageHasRelativeHeight):
        (WebCore::RenderImage::imageSize):
        * rendering/RenderImageGeneratedContent.cpp: Added.
        (WebCore::RenderImageGeneratedContent::RenderImageGeneratedContent):
        (WebCore::RenderImageGeneratedContent::~RenderImageGeneratedContent):
        (WebCore::RenderImageGeneratedContent::setStyleImage):
        * rendering/RenderImageGeneratedContent.h: Added.
        (WebCore::RenderImageGeneratedContent::hasImage):
        (WebCore::RenderImageGeneratedContent::image):
        (WebCore::RenderImageGeneratedContent::errorOccurred):
        (WebCore::RenderImageGeneratedContent::usesImageContainerSize):
        (WebCore::RenderImageGeneratedContent::setImageContainerSize):
        (WebCore::RenderImageGeneratedContent::imageHasRelativeWidth):
        (WebCore::RenderImageGeneratedContent::imageHasRelativeHeight):
        (WebCore::RenderImageGeneratedContent::imageSize):
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::createObject):
        * rendering/RenderStyle.cpp:
        (WebCore::StyleCachedImage::imageHasRelativeWidth):
        (WebCore::StyleCachedImage::imageHasRelativeHeight):
        (WebCore::StyleCachedImage::usesImageContainerSize):
        (WebCore::RenderStyle::contentDataEquivalent):
        (WebCore::RenderStyle::setContent):
        (WebCore::ContentData::clear):
        * rendering/RenderStyle.h:
        (WebCore::StyleGeneratedImage::imageHasRelativeWidth):
        (WebCore::StyleGeneratedImage::imageHasRelativeHeight):
        (WebCore::StyleGeneratedImage::usesImageContainerSize):
        (WebCore::BackgroundLayer::setBackgroundImage):
        (WebCore::ContentData::):
        (WebCore::RenderStyle::setListStyleImage):

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

        Reviewed by Sam, but Anders too, and he was more thorough in his review
        and thats the only reason Sam beat him

        Swap the Page and SecurityOrigin arguments when creating a StorageArea.

        SecurityOrigin is really the primary identifying characteristic of a StorageArea,
        and StorageAreas that represent LocalStorage won't have an owner Page.

        * storage/SessionStorage.cpp:
        (WebCore::SessionStorage::copy):
        (WebCore::SessionStorage::storageArea):

        * storage/StorageArea.cpp:
        (WebCore::StorageArea::create):
        (WebCore::StorageArea::StorageArea):
        (WebCore::StorageArea::copy):
        (WebCore::StorageArea::dispatchStorageEvent): Null check m_page here, as in the future
          it might be null
        * storage/StorageArea.h:

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

        Add support for changing the sort order of the resources. The two sorting
        methods supported current are Time and Size.

        Reviewed by Adam Roben.

        * page/inspector/Images/statusbarMenuButton.png: Added.
        * page/inspector/Images/statusbarMenuButtonSelected.png: Added.
        * page/inspector/ResourcesPanel.js:
        (WebInspector.ResourcesPanel): Create the status bar menu button and
        setup the event listener to call _changeSortingFunction. Each option in
        the select references a sorting function.
        (WebInspector.ResourcesPanel.get statusBarItems): Add the sorting menu to the
        items returned.
        (WebInspector.ResourcesPanel._changeSortingFunction): Set the sorting function
        to the selected option's function in the sorting menu.
        * page/inspector/inspector.css: Added CSS rules for select elements in status bars.

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

        Add support for toggling between small and large resource rows
        in the Resources panel.

        Reviewed by Adam Roben.

        * English.lproj/InspectorLocalizedStrings.js: Added new tooltip string.
        * page/inspector/Images/largerResourcesButtons.png: Added.
        * page/inspector/Images/resourceDocumentIconSmall.png: Added.
        * page/inspector/Images/resourcePlainIconSmall.png: Added.
        * page/inspector/ResourcesPanel.js:
        (WebInspector.ResourcesPanel): Create the status bar button and
        setup the event listener to call _toggleLargerResources.
        (WebInspector.ResourcesPanel.get statusBarItems): Return the status bar button.
        (WebInspector.ResourcesPanel._toggleLargerResources): Toggle the class names
        for the resources children list and the status bar button.
        * page/inspector/inspector.css: New style rules for small resources
        and the status bar item.

2008-04-14  Chris Fleizach  <cfleizach@apple.com>

        Reviewed by Darin Adler

        <rdar://problem/5854572> REGRESSION: AXPosition seems to be flipped in nightly build
        AX was using the wrong method to determine the view to use to create the screen position 

        * page/AccessibilityObject.cpp:
        (WebCore::AccessibilityObject::documentFrameView):
        * page/mac/AccessibilityObjectWrapper.mm:
        (-[AccessibilityObjectWrapper position]):

2008-04-14  David Smith  <catfish.man@gmail.com>

        Reviewed by Timothy Hatcher.
        
        - Fix https://bugs.webkit.org/show_bug.cgi?id=14258
        Response time vs. download time should be shown in the network profile

        * page/inspector/Resource.js: Change the sorting function to sort by response received time.
        * page/inspector/ResourcesPanel.js: Hook up the existing infrastructure to two bars instead of one; one for the total time, one for the time post-response.
        * page/inspector/inspector.css: Add a new rule to make the waiting bar have a lower opacity, and change the total bar opacity to handle the overlap

2008-04-14  Julien Chaffraix  <jchaffraix@webkit.org>

        Reviewed by Ap.

        Bug 17403: WebKit Creates Invalid Xhtml Links with Ajax
        http://bugs.webkit.org/show_bug.cgi?id=17403

        The previous code had callbacks for the normal parsing (full document) and fragment parsing.
        The difference was induced by the method we were using which did not accept a xmlParserCtxt.
        The code has been refactored to allow us to share the callbacks between the different cases.
        A drawback is that we have to use xmlParseContent which is an internal libxml method and thus
        some internal intialization is done in WebCore.

        Test: fast/parser/ampersand-escaped-parseXMLFragment.xhtml

        * dom/XMLTokenizer.cpp:
        (WebCore::createStringParser): Moved didInit in the global scope as it is shared by the
        2 create methods.

        (WebCore::createMemoryParser): Create a memory parser similar to the previous code.
        Initialize the xmlParserContext to call xmlParseContent in parseXMLDocumentFragment.

        (WebCore::XMLTokenizer::initializeParserContext): Check m_parsingFragment to know
        which create method to call.

        * dom/XMLTokenizer.h: Added parseXMLDocumentFragment as a friend of XMLTokenizer.

2008-04-14  Rob Buis  <buis@kde.org>

        Reviewed by Eric.

        http://bugs.webkit.org/show_bug.cgi?id=18230
        tspan in link not working

        Implement SVG Errata: "The 'a' element may contain any
        element that its parent may contain, except itself."

        * svg/SVGAElement.cpp:
        (WebCore::SVGAElement::childShouldCreateRenderer):

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

        Fix for bug 18466, WebKit exhibits slow performance on Opera DHTML benchmark.  Improve layout's rect
        invalidation code to only invalidate a single unioned rect once enough individual little rects have
        been detected.

        Reviewed by olliej

        * page/FrameView.cpp:
        (WebCore::FrameViewPrivate::reset):
        (WebCore::FrameView::layout):
        (WebCore::FrameView::repaintRectangle):
        (WebCore::FrameView::beginDeferredRepaints):
        (WebCore::FrameView::endDeferredRepaints):
        * page/FrameView.h:

2008-04-13  Eric Seidel  <eric@webkit.org>

        Reviewed by Oliver.

        Fix spelling error in function name, no test case.

        * svg/SVGTextContentElement.cpp:
        (WebCore::SVGInlineTextBoxQueryWalker::chunkPortionCallback):

2008-04-13  Eric Seidel  <eric@webkit.org>

        Reviewed by Oliver.

        Build fix for +SVG_ANIMATION -SVG_FOREIGN_OBJECT build, no tests.

        * svg/SVGAnimateMotionElement.cpp:
        (WebCore::SVGAnimateMotionElement::hasValidTarget):

2008-04-13  Jan Michael Alonzo  <jmalonzo@unpluggable.com>

        Reviewed by Oliver Hunt.

        http://bugs.webkit.org/show_bug.cgi?id=18239
        [Gtk] Build breaks if SVG is enabled but SVG Fonts disabled

        * svg/SVGAltGlyphElement.idl: Add SVG_FONTS in Conditional

2008-04-13  Julien Chaffraix  <jchaffraix@webkit.org>

        Reviewed by David.

        More SVG filters build fix.

        * svg/graphics/filters/SVGFEImage.cpp:
        (WebCore::SVGFEImage::~SVGFEImage):
        (WebCore::SVGFEImage::setCachedImage):

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

        Fix build bustage on the filters SVG code path (not built by default).

        * svg/SVGFEImageElement.cpp:
        (WebCore::SVGFEImageElement::~SVGFEImageElement):
        (WebCore::SVGFEImageElement::parseMappedAttribute):

2008-04-13  Dan Winship  <danw@gnome.org>

        Reviewed by Alp Toker.

        http://bugs.webkit.org/show_bug.cgi?id=18391
        return body data incrementally from libsoup backend

        Fix libsoup backend to pass data to the loader incrementally
        rather than all at once at the end.

        * platform/network/soup/ResourceHandleSoup.cpp
        (ResourceHandle::start): connect to "got-headers" and "got-chunk"
        signals on the message
        (gotHeadersCallback): call client->didReceiveResponse() from here
        (gotChunkCallback): call client->didReceiveData() from here
        (finishedCallback): renamed from dataCallback. mostly just calls
        client->didFinishLoading() now.

2008-04-13  Dan Bernstein  <mitz@apple.com>

        Reviewed by Jessica Kahn.

        - remove duplicate condition in canHaveChildrenForEditing()

        * editing/htmlediting.cpp:
        (WebCore::canHaveChildrenForEditing):

2008-04-13  Dan Bernstein  <mitz@apple.com>

        Reviewed by Darin Adler.

        - fix http://bugs.webkit.org/show_bug.cgi?id=18307
          <rdar://problem/5842546> REGRESSION (r31620): Incorrect Hiragino Kaku Gothic, font-weight:500

        Test: fast/css/font-weight-1.html

        * platform/graphics/mac/FontCacheMac.mm:
        (WebCore::toAppKitFontWeight): Adjusted the mapping to cover the AppKit
        weight range from 2 to 12, because AppKit weight 1 never occurs. The
        new mapping matches font-weight: n00 to ISO weight Wn.
        * platform/mac/WebFontCache.mm:
        (betterChoice): Changed the midpoint used when deciding between two
        candidates that deviate from the desired weight by the same amount.

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

        Memory management cleanup for the new StyleCachedImage and StyleGeneratedImage classes.  Make the back end
        values hold refptrs to cached front end values.  This will avoid malloc churn as RenderStyles get
        re-resolved.

        Reviewed by olliej

        * css/CSSCursorImageValue.cpp:
        (WebCore::CSSCursorImageValue::updateIfSVGCursorIsUsed):
        (WebCore::CSSCursorImageValue::cachedImage):
        * css/CSSCursorImageValue.h:
        * css/CSSImageGeneratorValue.cpp:
        (WebCore::CSSImageGeneratorValue::CSSImageGeneratorValue):
        (WebCore::CSSImageGeneratorValue::generatedImage):
        * css/CSSImageGeneratorValue.h:
        * css/CSSImageValue.cpp:
        (WebCore::CSSImageValue::CSSImageValue):
        (WebCore::CSSImageValue::~CSSImageValue):
        (WebCore::CSSImageValue::cachedImage):
        * css/CSSImageValue.h:
        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::applyProperty):
        (WebCore::CSSStyleSelector::createStyleImage):
        * css/CSSStyleSelector.h:
        * rendering/RenderStyle.h:
        (WebCore::StyleCachedImage::cachedImage):
        (WebCore::StyleGeneratedImage::StyleGeneratedImage):
        (WebCore::StyleGeneratedImage::data):

2008-04-12  Julien Chaffraix  <jchaffraix@webkit.org>

        Not reviewed, Qt build fix.

        * dom/XMLTokenizer.cpp:
       (WebCore::XMLTokenizer::parseEndElement):
        * platform/graphics/qt/GraphicsContextQt.cpp:
        (WebCore::GraphicsContext::clip):
        * platform/qt/ClipboardQt.cpp:
        (WebCore::ClipboardQt::setDragImage):

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

        Add support for list-style-image gradients.  Also improve the image comparisons between two RenderStyles        
        to not mistakenly believe that images have changed.

        Reviewed by olliej

        Added fast/gradients/list-item-gradient.html

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::CSSComputedStyleDeclaration::getPropertyCSSValue):
        * css/CSSParser.cpp:
        (WebCore::CSSParser::parseValue):
        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::applyProperty):
        (WebCore::CSSStyleSelector::createStyleImage):
        * rendering/RenderListMarker.cpp:
        (WebCore::RenderListMarker::RenderListMarker):
        (WebCore::RenderListMarker::paint):
        (WebCore::RenderListMarker::imageChanged):
        (WebCore::RenderListMarker::calcPrefWidths):
        * rendering/RenderListMarker.h:
        * rendering/RenderStyle.cpp:
        (WebCore::imagesEquivalent):
        (WebCore::BorderImage::operator==):
        (WebCore::StyleCachedImage::errorOccurred):
        (WebCore::BackgroundLayer::operator==):
        (WebCore::StyleInheritedData::StyleInheritedData):
        (WebCore::cursorDataEquivalent):
        (WebCore::StyleInheritedData::operator==):
        (WebCore::RenderStyle::diff):
        * rendering/RenderStyle.h:
        (WebCore::StyleImage::errorOccurred):
        (WebCore::RenderStyle::listStyleImage):
        (WebCore::RenderStyle::setListStyleImage):
        (WebCore::RenderStyle::initialListStyleImage):

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

        - Windows build fix

        * platform/win/ClipboardWin.cpp:
        (WebCore::ClipboardWin::setDragImage):

2008-04-12  Kevin Ollivier  <kevino@theolliviers.com>

        wx build fix. Update clip to take a FloatRect.

        * platform/graphics/wx/GraphicsContextWx.cpp:
        (WebCore::GraphicsContext::clip):

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

        Add gradient support to border-image (even though it's mostly just weird).

        Reviewed by Dan

        Added fast/gradients/border-image-gradient.html
              fast/gradients/border-image-gradient-sides-and-corners.html

        * css/CSSBorderImageValue.h:
        (WebCore::CSSBorderImageValue::imageValue):
        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::applyProperty):
        * platform/graphics/GeneratedImage.cpp:
        (WebCore::GeneratedImage::draw):
        * rendering/InlineFlowBox.cpp:
        (WebCore::InlineFlowBox::paintBoxDecorations):
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::imageChanged):
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::mustRepaintBackgroundOrBorder):
        (WebCore::RenderObject::paintBorderImage):
        (WebCore::RenderObject::paintBorder):
        (WebCore::RenderObject::updateBackgroundImages):
        (WebCore::RenderObject::arenaDelete):
        * rendering/RenderStyle.cpp:
        (WebCore::StyleCachedImage::isLoaded):
        * rendering/RenderStyle.h:
        (WebCore::StyleImage::isLoaded):
        (WebCore::BorderImage::image):

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

        Reviewed by Dave Hyatt.

        - fix a regression from r31324 which caused most Arabic text to render
          as missing glyphs

        Test: svg/W3C-SVG-1.1/fonts-glyph-02-t.svg

        * svg/SVGFont.cpp:
        (WebCore::SVGTextRunWalker::walk): Changed to always process characters
        in logical order and therefore dispatch the callbacks with a logically-
        ordered glyph stream. Changed the call to isCompatibleGlyph() to check
        for compatibility only with the range of characters the candidate glyph
        is derived from rather than with the entire lookup range. Changed to
        mark the <missing-glyph> glyph identifier as valid, to facilitate the
        use of invalid glyph identifiers to mark font fallback.
        (WebCore::drawTextUsingSVGFontCallback): Changed to only append the
        glyph identifier to a vector.
        (WebCore::drawTextMissingGlyphCallback): Changed to only append the
        character to a vector and append an invalid glyph identifier to the
        glyph vector.
        (WebCore::Font::drawTextUsingSVGFont): Moved the drawing from the
        callbacks into this function, iterating over the glyph and fallback
        characters vector in visual order.

2008-04-11  Dirk Schulze <vbs85@gmx.de>

        Reviewed by eseidel.

        Attempt to fix Cairo build.

        * platform/graphics/cairo/GraphicsContextCairo.cpp:
        * platform/graphics/cairo/GraphicsContextPlatformPrivateCairo.h:

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

        Rename CachedResource's ref/deref methods to addClient/removeClient.  This matches the new
        StyleImage class and is a more accurate description of what those methods really do.

        Reviewed by olliej

        * WebCore.base.exp:
        * css/CSSCursorImageValue.cpp:
        (WebCore::CSSCursorImageValue::updateIfSVGCursorIsUsed):
        * css/CSSFontFaceSource.cpp:
        (WebCore::CSSFontFaceSource::CSSFontFaceSource):
        (WebCore::CSSFontFaceSource::~CSSFontFaceSource):
        * css/CSSImageValue.cpp:
        (WebCore::CSSImageValue::~CSSImageValue):
        (WebCore::CSSImageValue::image):
        * css/CSSImportRule.cpp:
        (WebCore::CSSImportRule::~CSSImportRule):
        (WebCore::CSSImportRule::insertedIntoParent):
        * dom/ProcessingInstruction.cpp:
        (WebCore::ProcessingInstruction::~ProcessingInstruction):
        (WebCore::ProcessingInstruction::checkStyleSheet):
        (WebCore::ProcessingInstruction::parseStyleSheet):
        * dom/XMLTokenizer.cpp:
        (WebCore::XMLTokenizer::~XMLTokenizer):
        (WebCore::XMLTokenizer::endElementNs):
        (WebCore::XMLTokenizer::notifyFinished):
        * html/CanvasPattern.cpp:
        (WebCore::CanvasPattern::CanvasPattern):
        (WebCore::CanvasPattern::~CanvasPattern):
        * html/HTMLImageLoader.cpp:
        (WebCore::HTMLImageLoader::~HTMLImageLoader):
        (WebCore::HTMLImageLoader::setImage):
        (WebCore::HTMLImageLoader::updateFromElement):
        * html/HTMLLinkElement.cpp:
        (WebCore::HTMLLinkElement::~HTMLLinkElement):
        (WebCore::HTMLLinkElement::process):
        * html/HTMLScriptElement.cpp:
        (WebCore::HTMLScriptElement::~HTMLScriptElement):
        (WebCore::HTMLScriptElement::parseMappedAttribute):
        (WebCore::HTMLScriptElement::insertedIntoDocument):
        (WebCore::HTMLScriptElement::removedFromDocument):
        (WebCore::HTMLScriptElement::notifyFinished):
        * html/HTMLTokenizer.cpp:
        (WebCore::HTMLTokenizer::reset):
        (WebCore::HTMLTokenizer::scriptHandler):
        (WebCore::HTMLTokenizer::notifyFinished):
        * loader/CachedCSSStyleSheet.cpp:
        (WebCore::CachedCSSStyleSheet::addClient):
        * loader/CachedCSSStyleSheet.h:
        * loader/CachedFont.cpp:
        (WebCore::CachedFont::addClient):
        * loader/CachedFont.h:
        * loader/CachedImage.cpp:
        (WebCore::CachedImage::addClient):
        * loader/CachedImage.h:
        * loader/CachedResource.cpp:
        (WebCore::CachedResource::addClient):
        (WebCore::CachedResource::removeClient):
        * loader/CachedResource.h:
        * loader/CachedScript.cpp:
        (WebCore::CachedScript::addClient):
        * loader/CachedScript.h:
        * loader/CachedXBLDocument.h:
        * loader/CachedXSLStyleSheet.cpp:
        (WebCore::CachedXSLStyleSheet::addClient):
        * loader/CachedXSLStyleSheet.h:
        * loader/mac/UserStyleSheetLoader.cpp:
        (UserStyleSheetLoader::UserStyleSheetLoader):
        (UserStyleSheetLoader::~UserStyleSheetLoader):
        * platform/mac/ClipboardMac.mm:
        (WebCore::ClipboardMac::setDragImage):
        * rendering/RenderImage.cpp:
        (WebCore::RenderImage::~RenderImage):
        (WebCore::RenderImage::setCachedImage):
        * rendering/RenderListMarker.cpp:
        (WebCore::RenderListMarker::~RenderListMarker):
        (WebCore::RenderListMarker::setStyle):
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::updateBackgroundImages):
        (WebCore::RenderObject::arenaDelete):
        * rendering/RenderStyle.cpp:
        (WebCore::StyleCachedImage::addClient):
        (WebCore::StyleCachedImage::removeClient):
        * svg/SVGImageLoader.cpp:
        (WebCore::SVGImageLoader::updateFromElement):
        * xml/XSLImportRule.cpp:
        (WebCore::XSLImportRule::~XSLImportRule):
        (WebCore::XSLImportRule::loadSheet):

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

        This patch adds support for CSS gradients as background images.  RenderStyles now hold a StyleImage
        RefPtr, which is a wrapper for two types of images: CachedImages (loaded from URLs) and generated images
        (patterns created on the fly such as gradients).

        All of the features of <canvas> are supported: gradients can be linear or radial, have multiple stops, and
        can specify their points as percentages (for reusable gradients across different box sizes).

        Reviewed by olliej

        Added fast/gradients/simple-gradients.html

        * WebCore.xcodeproj/project.pbxproj:
        * css/CSSBorderImageValue.cpp:
        (WebCore::CSSBorderImageValue::CSSBorderImageValue):
        * css/CSSBorderImageValue.h:
        (WebCore::CSSBorderImageValue::imageValue):
        (WebCore::CSSBorderImageValue::generatorValue):
        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::CSSComputedStyleDeclaration::getPropertyCSSValue):
        * css/CSSGradientValue.cpp: Added.
        (WebCore::CSSGradientValue::cssText):
        (WebCore::CSSGradientValue::createGradient):
        (WebCore::CSSGradientValue::image):
        (WebCore::compareStops):
        (WebCore::CSSGradientValue::sortStopsIfNeeded):
        (WebCore::CSSGradientValue::resolvePoint):
        (WebCore::CSSGradientValue::resolveRadius):
        * css/CSSGradientValue.h: Added.
        (WebCore::CSSGradientColorStop::CSSGradientColorStop):
        (WebCore::CSSGradientValue::CSSGradientValue):
        (WebCore::CSSGradientValue::type):
        (WebCore::CSSGradientValue::setType):
        (WebCore::CSSGradientValue::setFirstX):
        (WebCore::CSSGradientValue::setFirstY):
        (WebCore::CSSGradientValue::setSecondX):
        (WebCore::CSSGradientValue::setSecondY):
        (WebCore::CSSGradientValue::setFirstRadius):
        (WebCore::CSSGradientValue::setSecondRadius):
        (WebCore::CSSGradientValue::addStop):
        * css/CSSImageGeneratorValue.cpp: Added.
        (WebCore::CSSImageGeneratorValue::~CSSImageGeneratorValue):
        (WebCore::CSSImageGeneratorValue::addClient):
        (WebCore::CSSImageGeneratorValue::removeClient):
        (WebCore::CSSImageGeneratorValue::getImage):
        (WebCore::CSSImageGeneratorValue::putImage):
        * css/CSSImageGeneratorValue.h: Added.
        (WebCore::CSSImageGeneratorValue::isImageGeneratorValue):
        * css/CSSImageValue.h:
        (WebCore::CSSImageValue::isImageValue):
        * css/CSSParser.cpp:
        (WebCore::CSSParser::parseBackgroundImage):
        (WebCore::BorderImageParseContext::commitImage):
        (WebCore::CSSParser::parseBorderImage):
        (WebCore::parseGradientPoint):
        (WebCore::parseGradientColorStop):
        (WebCore::CSSParser::parseGradient):
        * css/CSSParser.h:
        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::applyProperty):
        (WebCore::CSSStyleSelector::createStyleImage):
        (WebCore::CSSStyleSelector::mapBackgroundImage):
        * css/CSSStyleSelector.h:
        * css/CSSValue.h:
        (WebCore::CSSValue::isImageValue):
        (WebCore::CSSValue::isImageGeneratorValue):
        * html/CanvasRenderingContext2D.cpp:
        (WebCore::CanvasRenderingContext2D::isPointInPath):
        * platform/graphics/BitmapImage.cpp:
        (WebCore::BitmapImage::BitmapImage):
        (WebCore::BitmapImage::dataChanged):
        (WebCore::BitmapImage::frameCount):
        * platform/graphics/BitmapImage.h:
        * platform/graphics/GraphicsContext.cpp:
        (WebCore::GraphicsContext::clipToImageBuffer):
        * platform/graphics/GraphicsContext.h:
        * platform/graphics/ImageBuffer.h:
        (WebCore::ImageBuffer::cgImage):
        (WebCore::ImageBuffer::image):
        * platform/graphics/cg/GraphicsContextCG.cpp:
        (WebCore::GraphicsContext::clipToImageBuffer):
        (WebCore::GraphicsContext::paintBuffer):
        (WebCore::GraphicsContext::drawImage):
        * platform/graphics/cg/ImageBufferCG.cpp:
        (WebCore::ImageBuffer::create):
        (WebCore::ImageBuffer::ImageBuffer):
        (WebCore::ImageBuffer::~ImageBuffer):
        (WebCore::ImageBuffer::image):
        (WebCore::ImageBuffer::getImageData):
        (WebCore::ImageBuffer::putImageData):
        (WebCore::ImageBuffer::toDataURL):
        * platform/graphics/cg/ImageCG.cpp:
        (WebCore::BitmapImage::BitmapImage):
        (WebCore::BitmapImage::draw):
        (WebCore::Image::drawPattern):
        * platform/graphics/qt/ImageQt.cpp:
        (WebCore::BitmapImage::BitmapImage):
        * rendering/InlineFlowBox.cpp:
        (WebCore::InlineFlowBox::paintBackground):
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::calculateBackgroundSize):
        (WebCore::RenderBox::imageChanged):
        (WebCore::RenderBox::paintBackgroundExtended):
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::mustRepaintBackgroundOrBorder):
        (WebCore::RenderObject::updateBackgroundImages):
        (WebCore::RenderObject::arenaDelete):
        * rendering/RenderStyle.cpp:
        (WebCore::StyleCachedImage::cssValue):
        (WebCore::StyleCachedImage::canRender):
        (WebCore::StyleCachedImage::imageSize):
        (WebCore::StyleCachedImage::setImageContainerSize):
        (WebCore::StyleCachedImage::addClient):
        (WebCore::StyleCachedImage::removeClient):
        (WebCore::StyleCachedImage::image):
        (WebCore::StyleGeneratedImage::cssValue):
        (WebCore::StyleGeneratedImage::imageSize):
        (WebCore::StyleGeneratedImage::setImageContainerSize):
        (WebCore::StyleGeneratedImage::addClient):
        (WebCore::StyleGeneratedImage::removeClient):
        (WebCore::StyleGeneratedImage::image):
        * rendering/RenderStyle.h:
        (WebCore::StyleImage::StyleImage):
        (WebCore::StyleImage::~StyleImage):
        (WebCore::StyleImage::operator==):
        (WebCore::StyleImage::canRender):
        (WebCore::StyleImage::isCachedImage):
        (WebCore::StyleImage::isGeneratedImage):
        (WebCore::StyleCachedImage::StyleCachedImage):
        (WebCore::StyleCachedImage::data):
        (WebCore::StyleCachedImage::isCachedImage):
        (WebCore::StyleGeneratedImage::StyleGeneratedImage):
        (WebCore::StyleGeneratedImage::data):
        (WebCore::StyleGeneratedImage::isGeneratedImage):
        (WebCore::BackgroundLayer::backgroundImage):
        (WebCore::BackgroundLayer::setBackgroundImage):
        (WebCore::BackgroundLayer::containsImage):
        (WebCore::RenderStyle::backgroundImage):
        (WebCore::RenderStyle::initialBackgroundImage):
        * svg/graphics/cg/SVGPaintServerGradientCg.cpp:
        (WebCore::SVGPaintServerGradient::teardown):
        * svg/graphics/cg/SVGResourceMaskerCg.mm:
        (WebCore::SVGResourceMasker::applyMask):

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

        Reviewed by Oliver Hunt.

        - add SVGGlyphMap.h to project files

        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:

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

        Fix release build.
        
        * WebCore.base.exp:
        
        * loader/archive/ArchiveResource.h:
        (WebCore::ArchiveResource::response):
        This should be const.

2008-04-11  Antti Koivisto  <antti@apple.com>

        Try to fix Qt build.

        * svg/animation/SMILTime.cpp:

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

        Reviewed by Brady.

        Don't create the ArchiveResource response lazily.
        
        * loader/archive/ArchiveResource.cpp:
        (WebCore::ArchiveResource::ArchiveResource):
        * loader/archive/ArchiveResource.h:
        (WebCore::ArchiveResource::response):

2008-04-11  Jan Michael Alonzo  <jmalonzo@unpluggable.com>

        Reviewed by Mark Rowe.

        Added missing '\' in the svg include path

        * GNUmakefile.am:

2008-04-11  Antti Koivisto  <antti@apple.com>

        Another attempted Qt build fix.

        * WebCore.pro:

2008-04-11  Antti Koivisto  <antti@apple.com>

        Reviewed by Oliver.

        Fix build when SVG is enabled but SVG_ANIMATION is not.

        * ChangeLog:
        * bindings/js/JSSVGElementWrapperFactory.cpp:
        * bindings/objc/DOM.mm:
        (WebCore::createElementClassMap):
        * svg/SVGAElement.cpp:
        (WebCore::SVGAElement::defaultEventHandler):
        * svg/SVGAnimateColorElement.cpp:
        * svg/SVGAnimateColorElement.h:
        * svg/SVGAnimateColorElement.idl:
        * svg/SVGAnimateMotionElement.h:
        * svg/SVGAnimationElement.cpp:
        (WebCore::SVGAnimationElement::animationMode):
        * svg/SVGAnimationElement.h:
        * svg/SVGAnimationElement.idl:
        * svg/SVGSetElement.cpp:
        * svg/SVGSetElement.h:
        * svg/SVGSetElement.idl:
        * svg/animation/SMILTimeContainer.cpp:
        (WebCore::SMILTimeContainer::begin):
        (WebCore::SMILTimeContainer::pause):
        (WebCore::SMILTimeContainer::resume):
        (WebCore::SMILTimeContainer::elapsed):
        (WebCore::SMILTimeContainer::isPaused):
        (WebCore::SMILTimeContainer::timerFired):
        * svg/animation/SMILTimeContainer.h:
        * svg/animation/SVGSMILElement.cpp:
        * svg/animation/SVGSMILElement.h:
        * svg/svgtags.in:

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

        Reviewed by Brady.

        Move archive loading from FrameLoader to DocumentLoader.
        
        * loader/DocumentLoader.cpp:
        (WebCore::DocumentLoader::DocumentLoader):
        (WebCore::DocumentLoader::clearArchiveResources):
        (WebCore::DocumentLoader::deliverArchivedResourcesAfterDelay):
        (WebCore::DocumentLoader::archiveResourceDeliveryTimerFired):
        (WebCore::DocumentLoader::isArchiveLoadPending):
        (WebCore::DocumentLoader::cancelPendingArchiveLoad):
        (WebCore::DocumentLoader::scheduleArchiveLoad):
        (WebCore::DocumentLoader::setDefersLoading):
        * loader/DocumentLoader.h:
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::FrameLoader):
        (WebCore::FrameLoader::setDefersLoading):
        (WebCore::FrameLoader::stopAllLoaders):
        * loader/FrameLoader.h:
        * loader/ResourceLoader.cpp:
        (WebCore::ResourceLoader::load):
        (WebCore::ResourceLoader::didCancel):

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

        Fixes the regression where the DOM tree does not update when navigating
        to another page with the Inspector open.

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

        Reviewed by Adam Roben.

        * page/inspector/ElementsPanel.js:
        (WebInspector.ElementsPanel.prototype.reset): If the inspected document does not have a
        firstChild yet, add an event listener for DOMContentLoaded. The event listener just sets
        a proeprty that a polling functions looks for then triggers the reset.
        (WebInspector.ElementsPanel.prototype._focusedNodeChanged): Always call updateStyles with
        forceUpdate as true. This makes sure the Styles pane clears when there isn't a focused node.

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

        Reviewed by Timothy Hatcher.

        - fix http://bugs.webkit.org/show_bug.cgi?id=18412
          Inspector truncates text when editing a CSS property

        * page/inspector/inspector.css:

2008-04-11  Antti Koivisto  <antti@apple.com>

        Try to fix Qt build by including some headers.

        * ChangeLog:
        * platform/graphics/UnitBezier.h:
        * svg/SVGAnimationElement.cpp:
        * svg/animation/SMILTime.h:
        * svg/animation/SVGSMILElement.cpp:

2008-04-11  Antti Koivisto  <antti@apple.com>

        Try to fix Windows build by switching to std::sort().

        * svg/animation/SVGSMILElement.cpp:
        (WebCore::sortTimeList):

2008-04-11  Rob Buis  <buis@kde.org>

        Reviewed by Eric.

        http://bugs.webkit.org/show_bug.cgi?id=18340
        Elements with display="none" in a <clipPath> still contribute to clipping path

        Skip elements in clip-path container that have display=none specified.

        * svg/SVGClipPathElement.cpp:
        (WebCore::SVGClipPathElement::canvasResource):

2008-04-10  Antti Koivisto  <antti@apple.com>

        Reviewed by Eric.

        Redo the SVG animation support.
        
        It does
        - Full SMIL interval timing model including syncbase and event base timing (the hard part).
        - CSS and XML attribute animation.
        - Linear, discrete and spline calcModes.
        - Values animation with keyTimes and keySplines.
        - Link activated animations.
        - Pretty good support for <animate> and <set> animations
        - Basic support for <animateColor>, <animateMotion> and <animateTransform>.

        This passes some 35 of the 56 tests in W3C SVG animation test suite, a bunch more
        with some subtest failures.

        What is still missing
        - Additive animation with multiple animations operating on the same property. This is a
          major architectural feature in animation code. It shouldn't be too hard to add.
        - Only <animate> implements accumulate.
        - <animateMotion> does not do paths, keypoints, rotate.
        - <animateTransform> does not work correctly in all cases
        - calcMode paced is missing.
        - repeat, beginEvent, endEvent are missing.
        - accesskey() is missing.
        - JS does not see correct values for baseVal/animVal, changing values that are being
          animted for a script produces wrong results. This problem needs to be solved outside
          the animation code.
        - Some other stuff I forgot or do not know about.

        * GNUmakefile.am:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * dom/Document.cpp:
        * history/CachedPage.cpp:
        (WebCore::CachedPage::CachedPage):
        
        Use cache notification mechanism to start/stop animations.

        * svg/SVGAElement.cpp:
        (WebCore::SVGAElement::defaultEventHandler):
        
        Start target animation on link activation.
        
        * svg/SVGAnimateColorElement.cpp:
        (WebCore::SVGAnimateColorElement::applyAnimatedValueToElement):
        (WebCore::SVGAnimateColorElement::updateAnimatedValue):
        (WebCore::SVGAnimateColorElement::calculateFromAndToValues):
        (WebCore::SVGAnimateColorElement::calculateFromAndByValues):
        * svg/SVGAnimateColorElement.h:
        * svg/SVGAnimateElement.cpp:
        (WebCore::SVGAnimateElement::SVGAnimateElement):
        (WebCore::parseNumberValueAndUnit):
        (WebCore::SVGAnimateElement::applyAnimatedValueToElement):
        (WebCore::SVGAnimateElement::updateAnimatedValue):
        (WebCore::isColorAttribute):
        (WebCore::SVGAnimateElement::calculateFromAndToValues):
        (WebCore::SVGAnimateElement::calculateFromAndByValues):
        * svg/SVGAnimateElement.h:
        (WebCore::SVGAnimateElement::):
        * svg/SVGAnimateMotionElement.cpp:
        (WebCore::SVGAnimateMotionElement::SVGAnimateMotionElement):
        (WebCore::SVGAnimateMotionElement::parseMappedAttribute):
        (WebCore::SVGAnimateMotionElement::updateAnimatedValue):
        (WebCore::parsePoint):
        (WebCore::SVGAnimateMotionElement::calculateFromAndToValues):
        (WebCore::SVGAnimateMotionElement::calculateFromAndByValues):
        (WebCore::SVGAnimateMotionElement::applyAnimatedValueToElement):
        (WebCore::SVGAnimateMotionElement::startedActiveInterval):
        * svg/SVGAnimateMotionElement.h:
        * svg/SVGAnimateTransformElement.cpp:
        (WebCore::SVGAnimateTransformElement::SVGAnimateTransformElement):
        (WebCore::SVGAnimateTransformElement::hasValidTarget):
        (WebCore::SVGAnimateTransformElement::updateAnimatedValue):
        (WebCore::transformListFor):
        (WebCore::SVGAnimateTransformElement::applyAnimatedValueToElement):
        (WebCore::SVGAnimateTransformElement::calculateFromAndToValues):
        (WebCore::SVGAnimateTransformElement::calculateFromAndByValues):
        (WebCore::SVGAnimateTransformElement::startedActiveInterval):
        (WebCore::SVGAnimateTransformElement::parseTransformValue):
        * svg/SVGAnimateTransformElement.h:
        
        Concrete anmation element classes.
        
        * svg/SVGAnimationElement.cpp:
        (WebCore::SVGAnimationElement::SVGAnimationElement):
        (WebCore::SVGAnimationElement::~SVGAnimationElement):
        (WebCore::parseKeyTimes):
        (WebCore::parseKeySplines):
        (WebCore::SVGAnimationElement::parseMappedAttribute):
        (WebCore::SVGAnimationElement::attributeChanged):
        (WebCore::SVGAnimationElement::getStartTime):
        (WebCore::SVGAnimationElement::getCurrentTime):
        (WebCore::SVGAnimationElement::getSimpleDuration):
        (WebCore::SVGAnimationElement::beginElement):
        (WebCore::SVGAnimationElement::beginElementAt):
        (WebCore::SVGAnimationElement::endElement):
        (WebCore::SVGAnimationElement::endElementAt):
        (WebCore::SVGAnimationElement::animationMode):
        (WebCore::SVGAnimationElement::calcMode):
        (WebCore::SVGAnimationElement::attributeType):
        (WebCore::SVGAnimationElement::toValue):
        (WebCore::SVGAnimationElement::byValue):
        (WebCore::SVGAnimationElement::fromValue):
        (WebCore::SVGAnimationElement::attributeName):
        (WebCore::SVGAnimationElement::isAdditive):
        (WebCore::SVGAnimationElement::isAccumulated):
        (WebCore::SVGAnimationElement::hasValidTarget):
        (WebCore::SVGAnimationElement::targetAttributeIsCSS):
        (WebCore::SVGAnimationElement::setTargetAttributeAnimatedValue):
        (WebCore::SVGAnimationElement::targetAttributeBaseValue):
        (WebCore::solveEpsilon):
        (WebCore::SVGAnimationElement::currentValuesForValuesAnimation):
        (WebCore::SVGAnimationElement::startedActiveInterval):
        (WebCore::SVGAnimationElement::applyAnimation):
        (WebCore::SVGAnimationElement::unapplyAnimation):
        (WebCore::SVGAnimationElement::endedActiveInterval):
        * svg/SVGAnimationElement.h:
        (WebCore::SVGAnimationElement::):
        
        This is pretty much a complete rewrite of the SVGAnimationElement. Timing related functionality
        was refactored to SMILTimingElement class that this class now inherits.
        
        * svg/SVGDocumentExtensions.cpp:
        (WebCore::SVGDocumentExtensions::startAnimations):
        * svg/SVGElement.cpp:
        (WebCore::SVGElement::ownerSVGElement):
        * svg/SVGSVGElement.cpp:
        
        We need to reach the <svg> element from <use> too so go out from the shadow tree.
        
        (WebCore::SVGSVGElement::SVGSVGElement):
        (WebCore::SVGSVGElement::~SVGSVGElement):
        (WebCore::SVGSVGElement::pauseAnimations):
        (WebCore::SVGSVGElement::unpauseAnimations):
        (WebCore::SVGSVGElement::animationsPaused):
        (WebCore::SVGSVGElement::getCurrentTime):
        (WebCore::SVGSVGElement::willSaveToCache):
        (WebCore::SVGSVGElement::willRestoreFromCache):
        * svg/SVGSVGElement.h:
        (WebCore::SVGSVGElement::timeContainer):
        * svg/SVGSetElement.cpp:
        (WebCore::SVGSetElement::applyAnimatedValueToElement):
        (WebCore::SVGSetElement::calculateFromAndToValues):
        (WebCore::SVGSetElement::calculateFromAndByValues):
        (WebCore::SVGSetElement::updateAnimatedValue):
        * svg/SVGSetElement.h:
        
        Concrete anmation element classes.
        
        * svg/SVGTimer.cpp: Removed.
        * svg/SVGTimer.h: Removed.
        * svg/SVGUseElement.cpp:
        (WebCore::SVGUseElement::removedFromDocument):
        * svg/TimeScheduler.cpp: Removed.
        * svg/TimeScheduler.h: Removed.
        
        Replaced these with SMILTimeContainer class.
        
        * svg/animation: Added.
        * svg/animation/SMILTime.cpp: Added.
        (WebCore::operator+):
        (WebCore::operator-):
        (WebCore::operator*):
        * svg/animation/SMILTime.h: Added.
        (WebCore::SMILTime::SMILTime):
        (WebCore::SMILTime::unresolved):
        (WebCore::SMILTime::indefinite):
        (WebCore::SMILTime::operator=):
        (WebCore::SMILTime::value):
        (WebCore::SMILTime::isFinite):
        (WebCore::SMILTime::isIndefinite):
        (WebCore::SMILTime::isUnresolved):
        (WebCore::operator==):
        (WebCore::operator!=):
        (WebCore::operator>):
        (WebCore::operator<):
        (WebCore::operator>=):
        (WebCore::operator<=):
        (WebCore::max):
        (WebCore::min):
        
        A floating point number with special values "indefinite" and "unresolved". Defines math for those.
        
        * svg/animation/SMILTimeContainer.cpp: Added.
        (WebCore::SMILTimeContainer::SMILTimeContainer):
        (WebCore::SMILTimeContainer::schedule):
        (WebCore::SMILTimeContainer::unschedule):
        (WebCore::SMILTimeContainer::elapsed):
        (WebCore::SMILTimeContainer::isActive):
        (WebCore::SMILTimeContainer::isPaused):
        (WebCore::SMILTimeContainer::begin):
        (WebCore::SMILTimeContainer::pause):
        (WebCore::SMILTimeContainer::resume):
        (WebCore::SMILTimeContainer::startTimer):
        (WebCore::SMILTimeContainer::timerFired):
        (WebCore::SMILTimeContainer::updateAnimations):
        * svg/animation/SMILTimeContainer.h: Added.
        
        Manages the clock and time line for active animations in a document.
        
        * svg/animation/SVGSMILElement.cpp: Added.
        (WebCore::ConditionEventListener::ConditionEventListener):
        (WebCore::ConditionEventListener::handleEvent):
        (WebCore::SVGSMILElement::Condition::Condition):
        (WebCore::SVGSMILElement::SVGSMILElement):
        (WebCore::SVGSMILElement::~SVGSMILElement):
        (WebCore::SVGSMILElement::insertedIntoDocument):
        (WebCore::SVGSMILElement::removedFromDocument):
        (WebCore::SVGSMILElement::finishParsingChildren):
        (WebCore::SVGSMILElement::parseOffsetValue):
        (WebCore::SVGSMILElement::parseClockValue):
        (WebCore::smilTimeSortFunction):
        (WebCore::sortTimeList):
        (WebCore::SVGSMILElement::parseCondition):
        (WebCore::SVGSMILElement::isTimingElement):
        (WebCore::SVGSMILElement::parseBeginOrEnd):
        (WebCore::SVGSMILElement::parseMappedAttribute):
        (WebCore::SVGSMILElement::attributeChanged):
        (WebCore::SVGSMILElement::connectConditions):
        (WebCore::SVGSMILElement::disconnectConditions):
        (WebCore::SVGSMILElement::reschedule):
        (WebCore::SVGSMILElement::targetElement):
        (WebCore::SVGSMILElement::elapsed):
        (WebCore::SVGSMILElement::restart):
        (WebCore::SVGSMILElement::fill):
        (WebCore::SVGSMILElement::xlinkHref):
        (WebCore::SVGSMILElement::dur):
        (WebCore::SVGSMILElement::repeatDur):
        (WebCore::SVGSMILElement::repeatCount):
        (WebCore::SVGSMILElement::maxValue):
        (WebCore::SVGSMILElement::minValue):
        (WebCore::SVGSMILElement::simpleDuration):
        (WebCore::SVGSMILElement::addBeginTime):
        (WebCore::SVGSMILElement::addEndTime):
        (WebCore::SVGSMILElement::findInstanceTime):
        (WebCore::SVGSMILElement::repeatingDuration):
        (WebCore::SVGSMILElement::resolveActiveEnd):
        (WebCore::SVGSMILElement::resolveInterval):
        (WebCore::SVGSMILElement::resolveFirstInterval):
        (WebCore::SVGSMILElement::resolveNextInterval):
        (WebCore::SVGSMILElement::nextProgressTime):
        (WebCore::SVGSMILElement::beginListChanged):
        (WebCore::SVGSMILElement::endListChanged):
        (WebCore::SVGSMILElement::checkRestart):
        (WebCore::SVGSMILElement::calculateAnimationPercentAndRepeat):
        (WebCore::SVGSMILElement::calculateNextProgressTime):
        (WebCore::SVGSMILElement::determineActiveState):
        (WebCore::SVGSMILElement::progress):
        (WebCore::SVGSMILElement::notifyDependentsIntervalChanged):
        (WebCore::SVGSMILElement::createInstanceTimesFromSyncbase):
        (WebCore::SVGSMILElement::addTimeDependent):
        (WebCore::SVGSMILElement::removeTimeDependent):
        (WebCore::SVGSMILElement::handleConditionEvent):
        (WebCore::SVGSMILElement::beginByLinkActivation):
        * svg/animation/SVGSMILElement.h: Added.
        (WebCore::SVGSMILElement::timeContainer):
        (WebCore::SVGSMILElement::):
        (WebCore::SVGSMILElement::intervalBegin):
        (WebCore::SVGSMILElement::intervalEnd):
        (WebCore::SVGSMILElement::Condition::):
        
            This abstract class implements the SMIL timing model. As an output it produces calls
            to these virtual functions:
        
            virtual void startedActiveInterval() = 0;
            virtual void applyAnimation(float percent, unsigned repeat) = 0;
            virtual void unapplyAnimation() = 0;
            virtual void endedActiveInterval() = 0;

2008-04-10  Antti Koivisto  <antti@apple.com>

        Reviewed by Eric.

        Move CurveData out from AnimationController.cpp and rename
        it to UnitBezier. This makes it possible to reuse this nice class from the 
        SVG animation code.

        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * page/AnimationController.cpp:
        (WebCore::solveCubicBezierFunction):
        * platform/graphics/UnitBezier.h: Added.
        (WebCore::UnitBezier::UnitBezier):
        (WebCore::UnitBezier::sampleCurveX):
        (WebCore::UnitBezier::sampleCurveY):
        (WebCore::UnitBezier::sampleCurveDerivativeX):
        (WebCore::UnitBezier::solveCurveX):
        (WebCore::UnitBezier::solve):

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

        Reviewed by Sam Weinig

        The name "OriginStorage" never felt right to a few of us.  The HTML5 spec refers to our 
        concept of "OriginStorage" as a "storage area", which makes more sense here.

        This patch is basically:
        s/OriginStorage/StorageArea/

        * GNUmakefile.am:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * WebCoreSources.bkl:

        * loader/FrameLoader.cpp:

        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::sessionStorage):
        * page/Page.cpp:

        * storage/OriginStorage.cpp: Removed.
        * storage/OriginStorage.h: Removed.

        * storage/SessionStorage.cpp:
        (WebCore::SessionStorage::copy):
        (WebCore::SessionStorage::storageArea):
        * storage/SessionStorage.h:

        * storage/Storage.cpp:
        (WebCore::Storage::create):
        (WebCore::Storage::Storage):
        (WebCore::Storage::length):
        (WebCore::Storage::key):
        (WebCore::Storage::getItem):
        (WebCore::Storage::setItem):
        (WebCore::Storage::removeItem):
        (WebCore::Storage::contains):
        * storage/Storage.h:

        * storage/StorageArea.cpp: Copied from storage/OriginStorage.cpp.
        (WebCore::StorageArea::create):
        (WebCore::StorageArea::StorageArea):
        (WebCore::StorageArea::~StorageArea):
        (WebCore::StorageArea::copy):
        (WebCore::StorageArea::length):
        (WebCore::StorageArea::key):
        (WebCore::StorageArea::getItem):
        (WebCore::StorageArea::setItem):
        (WebCore::StorageArea::removeItem):
        (WebCore::StorageArea::contains):
        (WebCore::StorageArea::dispatchStorageEvent):
        * storage/StorageArea.h: Copied from storage/OriginStorage.h.

2008-04-10  Xan Lopez  <xan@gnome.org>

        Reviewed by Alp Toker.

        http://bugs.webkit.org/show_bug.cgi?id=18342
        Bug #18342 - Add logging to HTTP soup backend
        
        Add soup logging facilities to HTTP soup backend.
        Enable defining WEBKIT_SOUP_LOGGING, with values from
        0 to 3 for more verbosity.
        
        * platform/network/soup/ResourceHandleSoup.cpp:
        (WebCore::ResourceHandle::start):

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

        Fixes floating point precision in the Resources graph labels by using String.sprintf to
        format the values. Also makes the image view use Number.bytesToString when showing the file
        size. Makes Number.bytesToString and Number.secondsToString take an optional formatter function
        so the Inspector can pass WebInspector.UIString, so the format strings can be localized.

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

        Reviewed by Adam Roben.

        * English.lproj/InspectorLocalizedStrings.js: Added the new strings.
        * page/inspector/ImageView.js:
        (WebInspector.ImageView): Use Number.bytesToString to format this.resource.contentLength.
        * page/inspector/ResourcesPanel.js:
        (WebInspector.ResourceTransferTimeCalculator.prototype.formatValue): Pass WebInspector.UIString
        to Number.secondsToString.
        (WebInspector.ResourceTransferSizeCalculator.prototype.formatValue): Pass WebInspector.UIString
        to Number.bytesToString.
        * page/inspector/utilities.js:
        (Number.secondsToString): Added a formatterFunction argument. Use the formatter and format strings
        to control the number precision.
        (Number.bytesToString): Ditto.

2008-04-010  Alice Liu  <alice.liu@apple.com>

        Reviewed by Dan Bernstein.

        Fixed <rdar://5815856> CrashTracer: [USER] 8384 crashes in WebCore::Widget::getView const + 6

        Test: fast/events/mouseout-dead-subframe.html

        * page/EventHandler.cpp:
        dispatching a mouse event can change the document structure, necessitating
        a check for whether we still want to pass the event to the pre-determined subframe 
        (WebCore::EventHandler::handleMouseMoveEvent):

2008-04-10  Antti Koivisto  <antti@apple.com>

        Reviewed by Eric.

        Fix scale transform. This will be tested by the animation test suite when
        SVG animation support lands.

        * svg/SVGTransformDistance.cpp:
        (WebCore::SVGTransformDistance::SVGTransformDistance):

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

        Add a gradient fillRect method to GraphicsContext.  This is implemented only in the CG port.  I stubbed
        out a method in GraphicsContext.cpp with notImplemented().  Other platforms will need to add their own
        gradient fill methods.

        Reviewed by aroben

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

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

        Gradient improvements.  Support for adding color stops by Color and not just by String.  Add the ability to mark
        stops as already being sorted.

        Reviewed by aroben

        * platform/graphics/Gradient.cpp:
        (WebCore::Gradient::addColorStop):
        * platform/graphics/Gradient.h:
        (WebCore::Gradient::setStopsSorted):

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

        Fixes the build where some wtf headers would not be copied due
        to a bug in some older versions of Xcode.

        Rubber-stamped by Adam Roben.

        * WebCore.xcodeproj/project.pbxproj: Adds a new script phase to handle
        the copying of the icu and ForwardingHeaders folder to WebCore's PrivateHeaders.
        Removes the old copy files phase and the icu and ForwardingHeaders folder references.

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

        Reviewed by Mitz Pettel

        Add the "onstorage" attribute for the body element to provide easy setup of StorageEvent handling.

        Tests: storage/domstorage/sessionstorage/onstorage-attribute-markup.html
               storage/domstorage/sessionstorage/onstorage-attribute-setattribute.html

        * html/HTMLAttributeNames.in: Added "onstorage"
        * html/HTMLBodyElement.cpp:
        (WebCore::HTMLBodyElement::parseMappedAttribute): Handle this attribute on the body element *only*
          because that's where the HTML5 spec says StorageEvents go.  This might change in the future

2008-04-09  Antti Koivisto  <antti@apple.com>

        Reviewed by Mitz.

        Remove a less-than-critical bit from Node and replace it with a hash. Those bits are valuable!

        Also moved setting of the guard to dispatchSimulatedClick for better consistency. 
        No one else calls dispatchSimulatedMouseEvent() currently and this is really a click() specific behavior.

        * dom/EventTargetNode.cpp:
        (WebCore::EventTargetNode::dispatchSimulatedMouseEvent):
        (WebCore::EventTargetNode::dispatchSimulatedClick):
        * dom/Node.cpp:
        (WebCore::Node::Node):
        * dom/Node.h:

2008-04-09  Sam Weinig  <sam@webkit.org>

        Reviewed by Geoffrey Garen.

        Fix for https://bugs.webkit.org/show_bug.cgi?id=18389
        Crash in JSDOMWindowWrapper::mark loading digg.com

        - Add a null check to JSDOMWindowWrapper::mark for the case when the collector
          runs during its allocation.
        - Cleans up the creation of the window to be a little more straight forward.

        * bindings/js/JSDOMWindowBase.cpp:
        (WebCore::JSDOMWindowBasePrivate::JSDOMWindowBasePrivate):
        (WebCore::JSDOMWindowBase::JSDOMWindowBase):
        (WebCore::JSDOMWindowBase::clear):
        (WebCore::JSDOMWindowBase::wrapper):
        * bindings/js/JSDOMWindowBase.h:
        * bindings/js/JSDOMWindowWrapper.cpp:
        (WebCore::JSDOMWindowWrapper::JSDOMWindowWrapper):
        (WebCore::JSDOMWindowWrapper::mark):
        * bindings/js/JSDOMWindowWrapper.h:
        * bindings/js/kjs_proxy.cpp:
        (WebCore::KJSProxy::initScript):
        * bindings/scripts/CodeGeneratorJS.pm:

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

        Rubberstamped by Mitzpettel

        Added HTMLAttributeNames.in and HTMLTagNames.in to the xcodeproj for easy editing, 
        and sorted the html group

        * WebCore.xcodeproj/project.pbxproj:

2008-04-09  Brent Fulgham  <bfulgham@gmail.com>

        Reviewed by Mitz.

        Correct build regression in Windows (Cairo) build due to changes
        in FontDescription.h signature.  (see http://bugs.webkit.org/show_bug.cgi?id=18394)

        * rendering/RenderThemeWin.cpp:  Change for new font methods.
        (WebCore::RenderThemeWin::systemFont):

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

        Reviewed by Sam Weinig

        When enumerating a Storage object, the Storage built-ins should not be included, but the 
        prototype chain SHOULD be included.

        * bindings/js/JSStorageCustom.cpp:
        (WebCore::JSStorage::customGetPropertyNames): Return false so the prototype chain is walked

        * storage/Storage.idl: Mark all built-ins as "DontEnum"

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

        Reviewed by Adam Roben

        Per the HTML5 spec, enumerating a Storage object should walk the keys in the storage area, 
        and should not return the built-in properties.

        Test: storage/domstorage/sessionstorage/enumerate-storage.html

        * bindings/js/JSLocationCustom.cpp:
        (WebCore::JSLocation::customGetPropertyNames): Removed the name from an unused parameter

        * bindings/js/JSStorageCustom.cpp:
        (WebCore::JSStorage::customGetPropertyNames): Copy all of the keys into the property names array

        * storage/Storage.idl: Add CustomGetPropertyNames

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

        Fixes the regression where resource time/size pills do not
        update during a load in the Inspector.

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

        Reviewed by John Sullivan.

        * page/inspector/ResourcesPanel.js:
        (ResourcesPanel.prototype.show): Remove an unneeded call to _updateGraphBars,
        since _updateSidebarWidth already calls _updateGraphBars.
        (ResourcesPanel.prototype.addResource): Call updateGraphSideWidth.
        (ResourcesPanel.prototype._updateGraphBars): Ditto.
        (ResourceSidebarTreeElement.prototype.updateGraphSideWidth): Update the
        style for graphSideElement with the passed in width.

2008-04-09  Antti Koivisto  <antti@apple.com>

        Reviewed by Mitz.

        Avoid unnecessary calls to virtual updateStyleAttributeIfNeeded() method.
        - do the the checking in call sites instead of inside the function
        - rename to updateStyleAttribute()
        - use namedAttrMap directly (for getting id attribute) in insertedIntoDocument/removedFromDocument 
          to avoid calling attributes() which may trigger style attribute update.
        
        * dom/Element.cpp:
        (WebCore::Element::attributes):
        (WebCore::Element::getAttribute):
        (WebCore::Element::hasAttributes):
        (WebCore::Element::insertedIntoDocument):
        (WebCore::Element::removedFromDocument):
        * dom/Element.h:
        (WebCore::Element::updateStyleAttribute):
        * dom/NamedAttrMap.cpp:
        (WebCore::NamedAttrMap::addAttribute):
        * dom/StyledElement.cpp:
        (WebCore::StyledElement::updateStyleAttribute):
        * dom/StyledElement.h:

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

        A more complete fix for: can't drag the Web Inspector when grabbing
        in the toolbar area. Makes dragging under the search field in the
        empty space work again.

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

        Reviewed by Adam Roben.

        * page/inspector/inspector.js:
        (WebInspector.toolbarDragStart): Prevent dragging if the event target
        is a toggleable toolbar item. Allow dragging when the target is a
        normal toolbar item.

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

        Reviewed by Timothy Hatcher.

        Fix for http://bugs.webkit.org/show_bug.cgi?id=18373
        REGRESSION: Can't drag the Web Inspector when grabbing in the toolbar area

        * page/inspector/inspector.css:

2008-04-08  Christian Persch  <chpe@gnome.org>

        Reviewed by Alp Toker.

        http://bugs.webkit.org/show_bug.cgi?id=18360
        "missing sentinel" warnings in PluginDatabaseGtk.cpp

        Use NULL, not 0 as sentinel in varargs calls.

        * plugins/gtk/PluginDatabaseGtk.cpp:
        (WebCore::PluginDatabase::getPluginPathsInDirectories):
        (WebCore::PluginDatabase::defaultPluginDirectories):

2008-04-04  Sam Weinig  <sam@webkit.org>

        Reviewed by Geoffrey Garen.

        First step in implementing the "split window"

        - This patch takes the first step in changing the window navigation model
          from clearing the window properties on navigation, to replacing
          an inner window.  This is necessary to safely perform security checks
          using the lexical global object.

          This first step adds a new class called JSDOMWindowWrapper, which wraps
          the real window object.  All JS calls that would go to the window object
          now go to it, which it forwards to the current inner window.  To accomplish
          this, the wrapper window is used as the ThisValue wherever the window was used
          before.

        * WebCore.base.exp:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSDOMWindowBase.cpp:
        (WebCore::JSDOMWindowBase::JSDOMWindowBase):
        (WebCore::JSDOMWindowBase::clear): Reset the wrapper windows prototype too.
        (WebCore::JSDOMWindowBase::toThisObject):
        (WebCore::JSDOMWindowBase::wrapper):
        (WebCore::windowProtoFuncAToB):
        (WebCore::windowProtoFuncBToA):
        (WebCore::windowProtoFuncOpen):
        (WebCore::windowProtoFuncSetTimeout):
        (WebCore::windowProtoFuncClearTimeout):
        (WebCore::windowProtoFuncSetInterval):
        (WebCore::windowProtoFuncAddEventListener):
        (WebCore::windowProtoFuncRemoveEventListener):
        (WebCore::windowProtoFuncShowModalDialog):
        (WebCore::windowProtoFuncNotImplemented):
        (WebCore::toJS):
        * bindings/js/JSDOMWindowBase.h:
        Fix to expect the wrapper as the thisObj.
        * bindings/js/JSDOMWindowCustom.cpp:
        (WebCore::JSDOMWindow::postMessage):
        (WebCore::toDOMWindow):
        * bindings/js/JSDOMWindowWrapper.cpp: Added.
        (WebCore::JSDOMWindowWrapper::JSDOMWindowWrapper):
        (WebCore::JSDOMWindowWrapper::~JSDOMWindowWrapper):
        (WebCore::JSDOMWindowWrapper::mark):
        (WebCore::JSDOMWindowWrapper::className):
        (WebCore::JSDOMWindowWrapper::getOwnPropertySlot):
        (WebCore::JSDOMWindowWrapper::put):
        (WebCore::JSDOMWindowWrapper::deleteProperty):
        (WebCore::JSDOMWindowWrapper::getPropertyNames):
        (WebCore::JSDOMWindowWrapper::getPropertyAttributes):
        (WebCore::JSDOMWindowWrapper::defineGetter):
        (WebCore::JSDOMWindowWrapper::defineSetter):
        (WebCore::JSDOMWindowWrapper::lookupGetter):
        (WebCore::JSDOMWindowWrapper::lookupSetter):
        (WebCore::JSDOMWindowWrapper::toGlobalObject):
        (WebCore::JSDOMWindowWrapper::impl):
        (WebCore::JSDOMWindowWrapper::disconnectFrame):
        (WebCore::JSDOMWindowWrapper::clear):
        (WebCore::toJS):
        * bindings/js/JSDOMWindowWrapper.h: Added.
        (WebCore::JSDOMWindowWrapper::innerWindow):
        (WebCore::JSDOMWindowWrapper::setInnerWindow):
        (WebCore::JSDOMWindowWrapper::classInfo):
        Forward methods to the innerWindow.
        * bindings/js/JSHTMLDocumentCustom.cpp:
        (WebCore::JSHTMLDocument::open):
        * bindings/js/ScheduledAction.cpp:
        (WebCore::ScheduledAction::execute):
        * bindings/js/kjs_events.cpp:
        (WebCore::JSAbstractEventListener::handleEvent):
        * bindings/js/kjs_proxy.cpp:
        (WebCore::KJSProxy::~KJSProxy):
        (WebCore::KJSProxy::evaluate):
        (WebCore::KJSProxy::clear):
        (WebCore::KJSProxy::initScript):
        (WebCore::KJSProxy::clearDocumentWrapper):
        (WebCore::KJSProxy::processingUserGesture):
        (WebCore::KJSProxy::attachDebugger):
        * bindings/js/kjs_proxy.h:
        (WebCore::KJSProxy::haveWindowWrapper):
        (WebCore::KJSProxy::windowWrapper):
        (WebCore::KJSProxy::globalObject):
        (WebCore::KJSProxy::initScriptIfNeeded):
        Hold onto the wrapper window instead of global object.  As a convenience,
        keep the globalObject() as a forward to the inner window.
        * bindings/objc/DOMUtility.mm:
        (KJS::createDOMWrapper):
        * bindings/scripts/CodeGeneratorJS.pm:
        * dom/Document.cpp:
        (WebCore::Document::domWindow):
        * dom/Document.h:
        (WebCore::Document::defaultView):
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::dispatchWindowObjectAvailable):
        * page/DOMWindow.idl:
        * page/Frame.cpp:
        (WebCore::Frame::~Frame):
        (WebCore::Frame::pageDestroyed):

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

        Encourage Windows to rebuild - AGAIN...

        * WebCore.vcproj/build-generated-files.sh:
        * bindings/scripts/CodeGenerator.pm:
        * bindings/scripts/CodeGeneratorJS.pm:
        * config.h:

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

        OMG release builds didn't have this flag Windows build bots I'm so 
        sorry will you ever forgive me?

        (Found by Stephanie, rubberstamped and landed by Brady)

        * WebCore.vcproj/WebCore.vcproj: Add ENABLE_DOM_STORAGE for release builds

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

        Fixes a crash in KJS::JSValue::toObject when closing
        Safari with Inspector open.

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

        Reviewed by Adam Roben.

        * page/InspectorController.cpp:
        (WebCore::inspectedWindow): NULL check the result of toJSDOMWindow.
        Return JSNull if JSDOMWindow is 0.
        * page/inspector/ElementsPanel.js:
        (ElementsPanel.prototype.reset): NULL check the result of
        InspectorController.inspectedWindow.

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

        Wx build fix

        * webcore-wx.bkl: Removed entry for non-existent file.

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

        qmake build fixes

        * WebCore.pro: Removed entries for non-existent files.

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

        Rubberstamped by Adam Roben
        
        Touch some files to *strongly* encourage Windows to rebuilt with DOM_STORAGE enabled

        * WebCore.vcproj/build-generated-files.sh:
        * bindings/scripts/CodeGenerator.pm:
        * config.h:

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

        Implements the majority of the Inspector UI refresh as shown at:
        http://trac.webkit.org/projects/webkit/wiki/ProposedWebInspectorUIRefresh

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

        A few areas that have not been re-implemented with the new UI are:
        * Search and search results.
        * Request and response headers in the Resources panel.
        * Changing the sorting, grouping or toggling small rows in Resources.
        * Image and font previews in the icon of resources.

        Reviewed by Adam Roben.

        * English.lproj/InspectorLocalizedStrings.js: Updated to match actual strings.
        * WebCore.vcproj/WebCore.vcproj: Added new files.
        * page/InspectorController.cpp:
        (WebCore::InspectorController::setWindowVisible): Call resetScriptObjects()
        instead of individual clear functions.
        (WebCore::InspectorController::populateScriptObjects): Renamed from
        populateScriptResources.
        (WebCore::InspectorController::addDatabaseScriptResource): Call
        addDatabase instead of addResource.
        (WebCore::InspectorController::removeDatabaseScriptResource): Call
        removeDatabase instead of removeResource.
        (WebCore::InspectorController::resetScriptObjects): Renamed from
        clearScriptResources.
        (WebCore::InspectorController::didCommitLoad): Call resetScriptObjects()
        instead of individual clear functions.
        * page/InspectorController.h: Rename functions.
        * page/inspector/Console.js: Changed the object name to Console from
        ConsolePanel. Made it inherit the prototype from View. Added code
        to animate in and out.
        * page/inspector/Database.js: Removed title updating and Resource
        pseudo-subclassing. Made more of a Model object that just encapsulates
        data. Add a getter for table names.
        * page/inspector/DatabaseQueryView.js: Added. Implements the view seen
        when selecting a Database in the DatabasesPanel. Implemented as an
        interactive console-like area.
        * page/inspector/DatabaseTableView.js: Added. Implements the view seen
        when selecting a Database Table in the DatabasesPanel. Matches the old
        Browse view of Database panels.
        * page/inspector/DatabasesPanel.js: Changed the object name to DatabasesPanel
        from DatabasePanel. Implements a panel that shows a sidebar of Databases
        and Database Tables.
        * page/inspector/ElementsPanel.js:  Changed the object name to ElementsPanel
        from DocumentPanel. Implements the DOM tree that shows the DOM rooted at the
        main resource.
        * page/inspector/FontView.js: Use this.contentElement instead of this.element.
        * page/inspector/ImageView.js: Ditto.
        * page/inspector/Images/clearConsoleButtons.png: Added.
        * page/inspector/Images/consoleButtons.png: Added.
        * page/inspector/Images/darkShadow.png: Flipped.
        * page/inspector/Images/database.png: Modified to be 32x32.
        * page/inspector/Images/databaseTable.png: Added.
        * page/inspector/Images/databasesIcon.png: Added.
        * page/inspector/Images/disclosureTriangleSmallDown.png: Added.
        * page/inspector/Images/disclosureTriangleSmallDownBlack.png: Added.
        * page/inspector/Images/disclosureTriangleSmallDownWhite.png: Added.
        * page/inspector/Images/disclosureTriangleSmallRight.png: Added.
        * page/inspector/Images/disclosureTriangleSmallRightBlack.png: Added.
        * page/inspector/Images/disclosureTriangleSmallRightDown.png: Added.
        * page/inspector/Images/disclosureTriangleSmallRightDownBlack.png: Added.
        * page/inspector/Images/disclosureTriangleSmallRightDownWhite.png: Added.
        * page/inspector/Images/disclosureTriangleSmallRightWhite.png: Added.
        * page/inspector/Images/dockButtons.png: Added.
        * page/inspector/Images/elementsIcon.png: Added.
        * page/inspector/Images/gradientHighlightBottom.png:
        * page/inspector/Images/resourceCSSIcon.png: Added.
        * page/inspector/Images/resourceDocumentIcon.png: Added.
        * page/inspector/Images/resourcePlainIcon.png: Added.
        * page/inspector/Images/resourcesIcon.png: Added.
        * page/inspector/Images/resourcesSizeGraphIcon.png: Added.
        * page/inspector/Images/resourcesTimeGraphIcon.png: Added.
        * page/inspector/Images/scriptsIcon.png: Added.
        * page/inspector/Images/segment.png: Modified to fit the taller status bar.
        * page/inspector/Images/segmentEnd.png: Ditto.
        * page/inspector/Images/segmentHover.png: Ditto.
        * page/inspector/Images/segmentHoverEnd.png: Ditto.
        * page/inspector/Images/segmentSelected.png: Ditto.
        * page/inspector/Images/segmentSelectedEnd.png: Ditto.
        * page/inspector/Images/sidebarSelectionBackground.png: Added.
        * page/inspector/Images/sidebarSelectionBackgroundFocused.png: Added.
        * page/inspector/Images/sidebarSelectionBackgroundInactive.png: Added.
        * page/inspector/Images/sidebarSmallSelectionBackground.png: Added.
        * page/inspector/Images/sidebarSmallSelectionBackgroundFocused.png: Added.
        * page/inspector/Images/sidebarSmallSelectionBackgroundInactive.png: Added.
        * page/inspector/Images/statusbarBackground.png: Added.
        * page/inspector/Images/statusbarBottomBackground.png: Added.
        * page/inspector/Images/statusbarButtons.png: Added.
        * page/inspector/Images/statusbarResizerVertical.png: Added.
        * page/inspector/Images/toolbarItemSelected.png: Added.
        * page/inspector/Panel.js: Added support for toolbar items and status bar items.
        Inherits from the View prototype.
        * page/inspector/Resource.js: Removed title updating and the ResourceTreeElement.
        Made more of a Model object that just encapsulates data.
        * page/inspector/ResourceCategory.js: Removed the ResourceCategoryTreeElement.
        Made more of a Model object that just encapsulates data.
        * page/inspector/ResourceView.js: A simple base object for Resource views
        shown in ResourcesPanel. Inherits from the View prototype.
        * page/inspector/ResourcesPanel.js: Changed the object name to ResourcesPanel
        from NetworkPanel. Implements the timeline graph, size graph and resource
        viewing by using ResourceViews.
        * page/inspector/SidebarTreeElement.js: Added. Inherits from TreeElement and implements
        a section element and a regular element that has an icon, title and optional subtitle.
        * page/inspector/SourceView.js: Use this.contentElement instead of this.element.
        * page/inspector/StylesSidebarPane.js: Null check WebInspector.mainResource.
        * page/inspector/View.js: Added. A simple object to manage showing and hiding an element.
        * page/inspector/WebKit.qrc: Added new files.
        * page/inspector/inspector.css: New and changed style rules to support the new UI.
        * page/inspector/inspector.html: New and changed HTML for the UI. The search field
        is disabled until search is reimplemented.
        * page/inspector/inspector.js: Removed code related to the sidebar and back-forward lists.
        Also removed code related to navigation to panels. Added code to instantiate the new
        panels and setup the toolbar.

2008-04-08  Dan Bernstein  <mitz@apple.com>

        Reviewed by Antti Koivisto.

        - fix a regression from r31313 which made the inspector highlight and
          yellow find highlight for table cells with extra top appear in the
          wrong position

        * rendering/LayoutState.cpp:
        (WebCore::LayoutState::LayoutState): Changed absolutePosition() to
        absolutePositionForContent(), to get the right position for children of
        table cells. This is the correct fix for this part of r31313.
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::absolutePosition): Reverted the change from r31313
        by changing absolutePosition() to absolutePositionForContent() here too.
        * rendering/RenderObject.h:
        (WebCore::RenderObject::absolutePositionForContent): Changed to return
        the result from absolutePosition().
        * rendering/RenderTableCell.cpp:
        (WebCore::RenderTableCell::absoluteClippedOverflowRect): Turned the
        "else" case into an early return.
        (WebCore::RenderTableCell::absolutePosition): Reverted the change from
        r31313.

2008-04-08  Dan Bernstein  <mitz@apple.com>

        Reviewed by Antti Koivisto.

        - fix http://bugs.webkit.org/show_bug.cgi?id=18172
          REGRESSION (r31114-31132): Page renders structured almost horizontally (at flickr.com)

        Test: fast/block/float/br-with-clear-2.html

        * rendering/bidi.cpp:
        (WebCore::RenderBlock::layoutInlineChildren): The existing code for
        handling a float-clearing <br> in incremental layout had several bugs in
        it: it only applied when the <br> was on the last line of the block; it
        assumed that the <br> was always the rightmost box on the line (which is
        false in right-to-left runs); and in some places it looked at the last
        child of the block instead of the last box on the line. Fixed these
        bugs.

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

        Mac build fix

        * WebCore.xcodeproj/project.pbxproj: Removed MainThread* files which
        were moved to WTF.

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

        Change WebInspector.elementDragStart and WebInspector.elementDragEnd to have more
        state, so calling elementDragEnd does not need the listener functions. Also makes
        calling elementDragStart again without elementDragEnd work correctly.

        Reviewed by Adam Roben.

        * page/inspector/ElementsPanel.js:
        (DocumentPanel.prototype.rightSidebarResizerDragStart): Just call WebInspector.elementDragStart.
        Removed code that stored away the listeners now that elementDragStart does it.
        (DocumentPanel.prototype.rightSidebarResizerDragEnd): Just call WebInspector.elementDragEnd.
        Removed code that deleted listeners properties now that elementDragEnd does it.
        * page/inspector/inspector.js:
        (WebInspector.sidebarResizerDragEnd): Pass less arguments to elementDragEnd.
        (WebInspector.searchResultsResizerDragEnd): Ditto.
        (WebInspector.elementDragStart): Store the listeners as private properties on WebInspector.
        If the properties are already defined, call elementDragEnd first.
        (WebInspector.elementDragEnd): Remove the event listeners using the stored properties.
        Delete the private listener properties.

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

        Build fix

        * ForwardingHeaders/wtf/MainThread.h: Added. Forgot to commit this.

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

        Move callOnMainThread to WTF

        Reviewed by Alexey Proskuryakov.

        * GNUmakefile.am:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCoreSources.bkl:
        Removed MainThread files.

        * bindings/js/JSCustomSQLTransactionCallback.cpp:
        * loader/icon/IconDatabase.cpp:
        (WebCore::iconDatabase):
        * storage/Database.cpp:
        (WebCore::Database::Database):
        * storage/DatabaseTracker.cpp:
        Updated #includes and replaced calls to
        WebCore::initializeThreadingAndMainThread with calls to
        KJS::initializeThreading.

        * platform/MainThread.cpp: Removed.
        * platform/MainThread.h: Removed.
        * platform/gtk/MainThreadGtk.cpp: Removed.
        * platform/mac/MainThreadMac.mm: Removed.
        * platform/qt/MainThreadQt.cpp: Removed.
        * platform/win/MainThreadWin.cpp: Removed.
        * platform/wx/MainThreadWx.cpp: Removed.

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

        Makes the Network timeline graph resource sizes on the bar graph
        when Transfer Size is selected.

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

        Reviewed by Adam Roben.

        * page/inspector/Resource.js:
        (WebInspector.Resource.CompareByTime): Array sorting function for time.
        Copied from WebInspector.NetworkPanel.timelineEntryCompare.

        * page/inspector/ResourcesPanel.js:
        (WebInspector.NetworkPanel): Set the selectedIndex of graphModeSelectElement to
        make Transfer Time the default graph.
        (WebInspector.NetworkPanel.prototype.changeGraphMode): Call calculator.reset,
        _refreshAllResources and _updateGraphDividersIfNeeded.
        (WebInspector.NetworkPanel.prototype.get totalDuration): Removed.
        (WebInspector.NetworkPanel.prototype._updateGraphBoundriesIfNeeded): Removed boundary
        checking code and just call calculator.updateBoundries.
        (WebInspector.NetworkPanel.prototype._updateGraphDividersIfNeeded): Add a force argument.
        Use calculator.boundarySpan when computing the slice. If the slice is NaN, don't make a label.
        Ask the calculator to format the label values for each slice.
        (WebInspector.NetworkPanel.prototype.clearTimeline): Call calculator.reset.
        (WebInspector.NetworkPanel.timelineEntryCompare): Call WebInspector.Resource.CompareByTime.

        (WebInspector.NetworkTimelineEntry.prototype.refresh): Ask the panel's calculator to compute
        bar graph percentages for a resource. Use those percentages to change the bar style.

        (WebInspector.ResourceCalculator): Renamed from WebInspector.TimelineValueCalculator.
        (WebInspector.ResourceCalculator.prototype.computeSummaryValues): Changed the Array.forEach
        to a normal for loop. Work with resources instead of TimelineEntries.
        (WebInspector.ResourceCalculator.prototype.computeBarGraphPercentages): Return basic bar graph
        percents with start always being zero.
        (WebInspector.ResourceCalculator.prototype.get boundarySpan): Return the difference between
        maximumBoundary and minimumBoundary.
        (WebInspector.ResourceCalculator.prototype.updateBoundries): Update maximumBoundary based on _value.
        The minimumBoundary is always zero.
        (WebInspector.ResourceCalculator.prototype.reset): Delete maximumBoundary and minimumBoundary.
        (WebInspector.ResourceCalculator.prototype._value): Takes a Resource instead of TimelineEntry.

        (WebInspector.ResourceTransferTimeCalculator): Renamed from TransferTimeCalculator.
        (WebInspector.ResourceTransferTimeCalculator.prototype.computeSummaryValues): Work with resources
        instead of entries. Changed the Array.forEach to a normal for loop.
        (WebInspector.ResourceTransferTimeCalculator.prototype.computeBarGraphPercentages): Return percents
        just like WebInspector.NetworkTimelineEntry.prototype.refresh was doing before.
        (WebInspector.ResourceTransferTimeCalculator.prototype.updateBoundries): Update minimumBoundary and
        maximumBoundary just like the checks WebInspector.NetworkPanel.prototype._updateGraphBoundriesIfNeeded was doing.

        (WebInspector.ResourceTransferSizeCalculator): Renamed from TransferSizeCalculator.
        (WebInspector.ResourceTransferSizeCalculator.prototype._value): Takes a Resource instead of TimelineEntry.

2008-04-08  Rob Buis  <buis@kde.org>

        Fix the SVG build.

        * svg/SVGFEFloodElement.cpp:
        (WebCore::SVGFEFloodElement::filterEffect):

2008-04-08  Alice Liu  <alice.liu@apple.com>

        Reviewed by Dan Bernstein.
        
        fixed http://bugs.webkit.org/show_bug.cgi?id=18329
        REGRESSION: Assertion failure in -[WebViewFactory endOfTextMarkerRange:] 
        when invoking the Dictionary pop-up

        * page/mac/AccessibilityObjectWrapper.mm:
        (-[AccessibilityObjectWrapper accessibilityAttributeValue:forParameter:]):
        In the section of code where WebCore-equivalents of mac-specific types are
        prepared, some functions weren't meant to operate on the default initialized
        values.  Checking for nil in certain places will better maintain the original
        pre-refactoring code path. 

2008-04-08  Dan Bernstein  <mitz@apple.com>

        Reviewed by Maciej Stachowiak.

        - fix most of the Windows layout test regressions from the font-weight patch

        * platform/graphics/win/FontCacheWin.cpp:
        (WebCore::matchImprovingEnumProc): Changed to be symmetric with respect
        to italics: always prefer (reject) a candidate that changes the italics
        trait to (from) the desired value.
        (WebCore::createGDIFont): Added code to set more members of the LOGFONT
        structure before creating the font.

2008-04-07  Rob Buis  <buis@kde.org>

        Reviewed by Ollie.

        http://bugs.webkit.org/show_bug.cgi?id=18354
        feFlood in attribute should be removed according to SVG 1.1 Errata

        Remove the in attribute from SVGFEFlood DOM.

        * svg/SVGFEFloodElement.cpp:
        (WebCore::SVGFEFloodElement::parseMappedAttribute):
        * svg/SVGFEFloodElement.h:
        * svg/SVGFEFloodElement.idl:

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

        Touch JSStorageCustom.cpp to try to FORCE a recompile on bots that haven't gotten the message

        * bindings/js/JSStorageCustom.cpp:
        (WebCore::JSStorage::customPut):

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

        Reviewed by John Honeycutt

        ENABLE_DOM_STORAGE for Windows

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

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

        Fix build for builds without DOM_STORAGE enabled

        * dom/EventTargetNode.cpp:
        (WebCore::EventTargetNode::dispatchStorageEvent):
        * dom/EventTargetNode.h:

2008-04-07  Alice Liu  <alice.liu@apple.com>

        Reviewed by Beth Dakin.

        * WebCore.vcproj/WebCore.vcproj:
            Added a few cross-platform accessibility source files
            
        * WebCore.xcodeproj/project.pbxproj:
            Added AXObjectCache.cpp
            
        * page/AXObjectCache.cpp: Added.
            These were made cross-platform:
        (WebCore::AXObjectCache::~AXObjectCache):
        (WebCore::AXObjectCache::get):
        (WebCore::AXObjectCache::remove):
        (WebCore::AXObjectCache::childrenChanged):
        
        * page/AXObjectCache.h:
            These were made platform-specific
        (WebCore::AXObjectCache::isIDinUse):
        (WebCore::AXObjectCache::detachWrapper):
        (WebCore::AXObjectCache::attachWrapper):
        (WebCore::AXObjectCache::postNotificationToElement):
        
        * page/AccessibilityObject.cpp:
        (WebCore::AccessibilityObject::detach):
            Since only the mac has a wrapper for now, so temporarily 
            wrapping this line in #if PLATFORM(MAC)
            
        (WebCore::AccessibilityObject::removeAXObjectID):
            Since only the mac has uses Accessibility Object IDs,
            wrap this line in #if PLATFORM(MAC)
            
        * page/mac/AXObjectCacheMac.mm:
            Detaching and attaching the wrapper is platform-specific 
            since each wrapper class is platform-specific.
        (WebCore::AXObjectCache::detachWrapper):
        (WebCore::AXObjectCache::attachWrapper):        

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

        Lovingly reviewed by Sam Weinig

        <rdar://problem/5797684> - HTML5 SessionStorage and underpinnings for LocalStorage

        Tests: storage/domstorage/sessionstorage/iframe-events.html
               storage/domstorage/sessionstorage/index-get-and-set.html
               storage/domstorage/sessionstorage/simple-events.html
               storage/domstorage/sessionstorage/simple-usage.html
               storage/domstorage/sessionstorage/window-open.html
               storage/domstorage/window-attributes-exist.html

        * Configurations/WebCore.xcconfig: Define to enable DOM_STORAGE

        * bindings/js/JSDOMWindowCustom.cpp:
        (WebCore::JSDOMWindow::mark): Add optionalSessionStorage case

        * bindings/js/JSEventCustom.cpp:
        (WebCore::toJS): Add StorageEvent case

        * bindings/js/JSStorageCustom.cpp:
        (WebCore::JSStorage::canGetItemsForName):
        (WebCore::JSStorage::nameGetter): If the property doesn't exist on the object, call through to getItem()
        (WebCore::JSStorage::customPut): If the property doesn't exist on the object, call through to setItem()

        * dom/Event.cpp:
        (WebCore::Event::isStorageEvent):
        * dom/Event.h:

        * dom/EventNames.h: Add "storage"

        * dom/EventTargetNode.cpp:
        (WebCore::EventTargetNode::dispatchStorageEvent):
        * dom/EventTargetNode.h:

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::createWindow): After a new page has been created, set its SessionStorage object
          to a copy of the previous Page's

        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::sessionStorage): Accessor to pull the appropriate OriginStorage out of the Page's
          SessionStorage.
        (WebCore::DOMWindow::localStorage): To be filled in later
        * page/DOMWindow.h:
        (WebCore::DOMWindow::optionalSessionStorage): Return the session Storage object for this window to mark, 
          if any exists
        * page/DOMWindow.idl:

        * page/Page.cpp:
        (WebCore::Page::sessionStorage):  Create and/or return the SessionStorage for this Page.
        (WebCore::Page::setSessionStorage): Set the SessionStorage for this Page - used in FrameLoader after a
          Window.open();
        * page/Page.h:

        * storage/OriginStorage.cpp: Intermediate layer between individual Storage objects, and shared StorageMap 
          objects.  There is one OriginStorage object per SecurityOrigin in each "unique set of storage areas", such
          as the SessionStorage.  This layer forwards DOM-level calls down to the backing StorageMap, handles 
          copy-on-write along with the StorageMap, fires StorageEvents to the DOM when a value is changed, and will
          eventually handle quota enforcement.
        (WebCore::OriginStorage::create):
        (WebCore::OriginStorage::OriginStorage):
        (WebCore::OriginStorage::~OriginStorage):
        (WebCore::OriginStorage::copy):
        (WebCore::OriginStorage::length):
        (WebCore::OriginStorage::key):
        (WebCore::OriginStorage::getItem):
        (WebCore::OriginStorage::setItem):
        (WebCore::OriginStorage::removeItem):
        (WebCore::OriginStorage::contains):
        (WebCore::OriginStorage::dispatchStorageEvent):
        * storage/OriginStorage.h:

        * storage/SessionStorage.cpp: From the HTML5 spec:
          "Each top-level browsing context has a unique set of session storage areas, one for each origin."
          This object represents that "unique set of session storage areas", and creates or returns the Storage
          object for the requested SecurityOrigin
        (WebCore::SessionStorage::create):
        (WebCore::SessionStorage::SessionStorage):
        (WebCore::SessionStorage::copy):
        (WebCore::SessionStorage::originStorage):
        * storage/SessionStorage.h:
        (WebCore::SessionStorage::page):

        * storage/Storage.cpp: Representation of the DOM-level object, wrapped by JSStorage.  There is a unique
          Storage object per Window (per-Frame) that wraps a specific shared OriginStorage object.
        (WebCore::Storage::create):
        (WebCore::Storage::Storage):
        (WebCore::Storage::length):
        (WebCore::Storage::key):
        (WebCore::Storage::getItem):
        (WebCore::Storage::setItem):
        (WebCore::Storage::removeItem):
        (WebCore::Storage::contains):
        * storage/Storage.h:
        * storage/Storage.idl:

        * storage/StorageEvent.cpp:
        (WebCore::StorageEvent::StorageEvent):
        (WebCore::StorageEvent::initStorageEvent):
        * storage/StorageEvent.h:
        (WebCore::StorageEvent::isStorageEvent):

        * storage/StorageMap.cpp: The physical map of key/value pairs that is shared between OriginStorage objects, 
          and implements copy-on-write semantics whenever a value is changed
        (WebCore::StorageMap::create):
        (WebCore::StorageMap::StorageMap):
        (WebCore::StorageMap::copy):
        (WebCore::StorageMap::invalidateIterator): Used to support the key(unsigned i) part of the API
        (WebCore::StorageMap::setIteratorToIndex): Ditto
        (WebCore::StorageMap::length):
        (WebCore::StorageMap::key):
        (WebCore::StorageMap::getItem):
        (WebCore::StorageMap::setItem):
        (WebCore::StorageMap::removeItem):
        (WebCore::StorageMap::contains):
        * storage/StorageMap.h:

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

        Renamed various functions that are internal to the Console
        object to have an underscore prefix.

        Rubber-stamped by Adam Roben.

        * page/inspector/Console.js:

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

        Renamed various functions and properties that are internal
        to an object to have an underscore prefix.

        Rubber-stamped by Adam Roben.

        * page/inspector/Resource.js:
        * page/inspector/ResourcesPanel.js:

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

        Fixes coding style for two utility getters.

        * page/inspector/utilities.js: Fix coding style for the
        totalOffsetLeft and totalOffsetTop getters.

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

        Reviewed by Dave Hyatt.

        - fix http://bugs.webkit.org/show_bug.cgi?id=18311
          <rdar://problem/5842980> REGRESSION (r31620): Font variants (e.g. Helvetica Neue *Light*) don't render correctly

        * platform/mac/WebFontCache.mm:
        (+[WebFontCache internalFontWithFamily:traits:weight:size:]): Changed to
        match by family name first, and only if that fails, look for a match by
        full (PostScript) name. Reverted the full name-based match logic to only
        distinguish between the broad categories of "bold" and "not bold".

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

        When the WebInspector.currentFocusElement changes, move the caret
        selection to be inside the focused element. This makes sure the
        caret moves in and out of the console when the focus changes.

        Reviewed by Adam Roben.

        * page/inspector/TextPrompt.js:
        (TextPrompt.prototype.isCaretInsidePrompt): Just call isInsertionCaretInside.
        * page/inspector/inspector.js: 
        (WebInspector.set currentFocusElement): Make a caret selection inside
        the focused element if there isn't a range selection and there isn't
        already a caret selection inside.
        * page/inspector/utilities.js:
        (Element.prototype.isInsertionCaretInside): Added. Tests if the
        selection is collapsed and is inside the element.

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

        Reviewed by Tim Hatcher

        Add 1 more empty file for upcoming work, as a separate step, to keep all build-systems working

        * GNUmakefile.am:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * WebCoreSources.bkl:

        * bindings/js/JSStorageCustom.cpp: Added.

2008-04-07  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Dan Bernstein.

        <rdar://problem/5574946> Inline frame ISO-8859-1 even though parent character set is UTF-8

        Test: fast/loader/inherit-charset-to-empty-frame.html

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::write): Treat an empty m_encoding the same as null one.

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

        Rename some Inspector panel objects to facilitate the up-coming
        UI refresh changes.

        Reviewed by Adam Roben.

        * page/inspector/DatabasesPanel.js: Renamed ResourcePanel to ResourceView.
        * page/inspector/ElementsPanel.js: Renamed SourcePanel to SourceView.
        * page/inspector/FontView.js: Renamed FontPanel to FontView.
        * page/inspector/ImageView.js: Renamed ImagePanel to ImageView.
        * page/inspector/Resource.js: Instantiate the new "View" named objects.
        * page/inspector/ResourceView.js: Renamed ResourcePanel to ResourceView.
        * page/inspector/SourceView.js: Renamed SourcePanel to SourceView.

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

        Fix an exception and remove code that was missed when TextPrompt
        was added. This makes the Console work again.
        
        Reviewed by Adam Roben.
        
        * page/inspector/Console.js: Removed code that used non-existent
        properties.

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

        Remove the workaround for bug 11399 now that it is fixed.

        Reviewed by Adam Roben.

        * page/inspector/Console.js: Removed the 'with' statement
        around the eval and call eval directly on the inspected window.

2008-04-07  Luca Bruno  <lethalman88@gmail.com>

        Reviewed by Alp Toker.

        http://bugs.webkit.org/show_bug.cgi?id=18297
        Bug #18297 - Acid2/Acid3 -tests don't load load with soup.

        Fixes in the libsoup backend: data url parsing, acid tests, redirects,
        response headers handling and re-entrancy issues on job cancellation.
        Thanks to Dan Winship for libsoup hints.

        * platform/network/ResourceHandleInternal.h:
        (WebCore::ResourceHandleInternal::ResourceHandleInternal): add m_cancelled and remove unuseful m_session
        * platform/network/soup/ResourceHandleSoup.cpp:
        (WebCore::restartedCallback): added to route redirects to webkit
        (WebCore::dataCallback): add response headers, some checks and fix re-entrancy
        (WebCore::parseDataUrl): be an idle callback for the main loop
        (WebCore::ResourceHandle::start):
        (WebCore::ResourceHandle::cancel): fixed re-entrancy

2008-04-07  Jan Michael Alonzo  <jmalonzo@unpluggable.com>

        Build fix, rubber-stamped and landed by ap.

        * GNUmakefile.am: Fix dom_storage conditional and typo: ENABLE_DOM_STORAG

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

        Whoops, idls don't go in the vcproj!

        * WebCore.vcproj/WebCore.vcproj:

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

        Attempt to tickle Windows build into accepting this idl

        * storage/StorageEvent.idl:

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

        Reviewed by Sam

        HTML5 Session and Local Storage

        Land a bunch of empty files and interfaces to keep things building while 
        I finish off the rest of the implementation of SessionStorage

        * DerivedSources.make:
        * GNUmakefile.am:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * WebCoreSources.bkl:

        * storage/OriginStorage.cpp: Added.
        * storage/OriginStorage.h: Added.

        * storage/SessionStorage.cpp: Added.
        * storage/SessionStorage.h: Added.

        * storage/Storage.cpp: Added.
        (WebCore::Storage::length):
        (WebCore::Storage::key):
        (WebCore::Storage::getItem):
        (WebCore::Storage::setItem):
        (WebCore::Storage::removeItem):
        * storage/Storage.h: Added.
        * storage/Storage.idl: Added.

        * storage/StorageEvent.cpp: Added.
        * storage/StorageEvent.h: Added.
        (WebCore::StorageEvent::key):
        (WebCore::StorageEvent::oldValue):
        (WebCore::StorageEvent::newValue):
        (WebCore::StorageEvent::uri):
        (WebCore::StorageEvent::source):
        (WebCore::StorageEvent::initStorageEvent):
        * storage/StorageEvent.idl: Added.

        * storage/StorageMap.cpp: Added.
        * storage/StorageMap.h: Added.

2008-04-05  Kevin Ollivier  <kevino@theolliviers.com>

        Reviewed by Mark Rowe.

        Add CSS to the MIMETypeRegistry, which ensures CSS files get
        the right MIMEType when loaded from disk.

        * platform/gtk/MIMETypeRegistryGtk.cpp:
        * platform/wx/MimeTypeRegistryWx.cpp:

2008-04-05  Rob Buis  <buis@kde.org>

        Reviewed by Eric.

        http://bugs.webkit.org/show_bug.cgi?id=17129
        Incorrect style resolution in CSS styled SVG, with multiple style sheets

        Fix the style resolution on the svg by ensuring xml-stylesheet pseudo
        attributes title and alternate are transferred to the stylesheet
        created from the ProcessingInstruction.

        * dom/ProcessingInstruction.cpp:
        (WebCore::ProcessingInstruction::ProcessingInstruction):
        (WebCore::ProcessingInstruction::checkStyleSheet):
        (WebCore::ProcessingInstruction::setCSSStyleSheet):
        * dom/ProcessingInstruction.h:

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

        Reviewed by Darin Adler.

        - fix <rdar://problem/5843719> Excessive repainting of cells in tables with non-auto height

        Test: fast/repaint/table-two-pass-layout-overpaint.html

        * rendering/RenderTable.cpp:
        (WebCore::RenderTable::layout): Changed the first pass over the sections
        to only call calcRowHeight() and recalcOuterBorder() but not
        layoutRows(), because the section's final height is unknown yet.
        Removed caching of m_height before the call to calcHeight(), because
        for non-positioned tables, calcHeight() only calculates the vertical
        margins and does not change m_height.
        Added a second pass over the sections, after the table height is known,
        to call layoutRows() on each section, with additional height if needed.
        Did minimal cleanup including caching the value of collapseBorders() in
        a local variable and changing a while loop into a for loop.
        * rendering/RenderTableSection.cpp:
        (WebCore::RenderTableSection::calcRowHeight): Changed to return the
        height of the section based on row height calculations.
        (WebCore::RenderTableSection::layoutRows): Removed a call to
        recalcOuterBorder(), which is now done by RenderTable::layout().
        * rendering/RenderTableSection.h: Changed calcRowHeight() to have a
        return value.

2008-04-05  Simon Hausmann  <shausman@trolltech.com>

        Reviewed by Holger.

        Fixes: Disable "unimplemented" warnings when building WebKit inside Qt.

        * WebCore.pro:
        * platform/NotImplemented.h:

2008-04-05  Simon Hausmann  <hausmann@webkit.org>

        Rubber-stamped by Holger

        Revert "* Load images incrementally. This will show warnings on the console"
        This rolls out -r29739.

        This unfortunately caused some crashes and drawing errors. Backing out for now.

        * platform/graphics/qt/ImageDecoderQt.cpp:
        (WebCore::ImageDecoderQt::setData):

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

        Add GradientWx.cpp to the wx build process. 

        * webcore-wx.bkl:

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

        Reviewed by Sam Weinig.

        - speed up CSSFontSelector::getFontData()

        * css/CSSFontSelector.cpp:
        (WebCore::fontDataForGenericFamily): Factored out of getFontData().
        (WebCore::CSSFontSelector::getFontData): Changed to call
        fontDataForGenericFamily() directly if the map is empty.

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

        Reviewed by Oliver.

        Replace AccessibilityObject::isRenderImage() with a virtual
        RenderObject::isRenderImage().

        * page/AccessibilityObject.cpp:
        (WebCore::AccessibilityObject::accessibilityIsIgnored):
        (WebCore::AccessibilityObject::addChildren):
        * page/AccessibilityObject.h:
        (WebCore::AccessibilityObject::isDetached):
        * rendering/RenderImage.h:
        (WebCore::RenderImage::isRenderImage):
        * rendering/RenderObject.h:
        (WebCore::RenderObject::isRenderImage):

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

        - try to fix the wx build

        * platform/graphics/wx/FontPlatformDataWx.cpp:
        (WebCore::fontWeightToWxFontWeight):
        (WebCore::FontPlatformData::FontPlatformData):

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

        Reviewed by Beth.

        Some more clean-up of AccessibilityObject:
        - Rearranged/grouped methods.
        - Marked many methods const.
        - Changed many methods to take args by const ref instead of by val.
        - Made headingLevel() static.
        - Renamed detached() to isDetached(), loaded() to isLoaded(),
          documentLinks to getDocumentLinks().
        - Made clearChildren(), removeAXObjectID(), isDetached() private.
        - Added notImplemented() calls for unimplemented methods.
        - Replaced stringForReplacedNode method with static function.

        * page/AccessibilityObject.cpp:
        (WebCore::AccessibilityObject::~AccessibilityObject):
        (WebCore::AccessibilityObject::firstChild):
        (WebCore::AccessibilityObject::lastChild):
        (WebCore::AccessibilityObject::previousSibling):
        (WebCore::AccessibilityObject::nextSibling):
        (WebCore::AccessibilityObject::parentObject):
        (WebCore::AccessibilityObject::parentObjectUnignored):
        (WebCore::AccessibilityObject::headingLevel):
        (WebCore::AccessibilityObject::anchorElement):
        (WebCore::AccessibilityObject::actionElement):
        (WebCore::AccessibilityObject::mouseButtonListener):
        (WebCore::AccessibilityObject::helpText):
        (WebCore::AccessibilityObject::textUnderElement):
        (WebCore::AccessibilityObject::hasIntValue):
        (WebCore::AccessibilityObject::intValue):
        (WebCore::AccessibilityObject::stringValue):
        (WebCore::AccessibilityObject::title):
        (WebCore::AccessibilityObject::accessibilityDescription):
        (WebCore::AccessibilityObject::boundingBoxRect):
        (WebCore::AccessibilityObject::size):
        (WebCore::AccessibilityObject::linkedUIElement):
        (WebCore::AccessibilityObject::accessibilityShouldUseUniqueId):
        (WebCore::AccessibilityObject::accessibilityIsIgnored):
        (WebCore::AccessibilityObject::isLoaded):
        (WebCore::AccessibilityObject::layoutCount):
        (WebCore::AccessibilityObject::textLength):
        (WebCore::AccessibilityObject::selectedText):
        (WebCore::AccessibilityObject::selection):
        (WebCore::AccessibilityObject::selectedTextRange):
        (WebCore::AccessibilityObject::setSelectedText):
        (WebCore::AccessibilityObject::setSelectedTextRange):
        (WebCore::AccessibilityObject::makeRangeVisible):
        (WebCore::AccessibilityObject::url):
        (WebCore::AccessibilityObject::isVisited):
        (WebCore::AccessibilityObject::isFocused):
        (WebCore::AccessibilityObject::setValue):
        (WebCore::AccessibilityObject::isEnabled):
        (WebCore::AccessibilityObject::topRenderer):
        (WebCore::AccessibilityObject::textControl):
        (WebCore::AccessibilityObject::widget):
        (WebCore::AccessibilityObject::axObjectCache):
        (WebCore::AccessibilityObject::getDocumentLinks):
        (WebCore::AccessibilityObject::documentFrameView):
        (WebCore::AccessibilityObject::widgetForAttachmentView):
        (WebCore::AccessibilityObject::frameViewIfRenderView):
        (WebCore::AccessibilityObject::visiblePositionRange):
        (WebCore::AccessibilityObject::doAXTextMarkerRangeForLine):
        (WebCore::AccessibilityObject::doAXTextMarkerRangeForUnorderedTextMarkers):
        (WebCore::AccessibilityObject::doAXLeftWordTextMarkerRangeForTextMarker):
        (WebCore::AccessibilityObject::doAXRightWordTextMarkerRangeForTextMarker):
        (WebCore::AccessibilityObject::doAXLeftLineTextMarkerRangeForTextMarker):
        (WebCore::AccessibilityObject::doAXRightLineTextMarkerRangeForTextMarker):
        (WebCore::AccessibilityObject::doAXSentenceTextMarkerRangeForTextMarker):
        (WebCore::AccessibilityObject::doAXParagraphTextMarkerRangeForTextMarker):
        (WebCore::AccessibilityObject::doAXStyleTextMarkerRangeForTextMarker):
        (WebCore::AccessibilityObject::textMarkerRangeForRange):
        (WebCore::stringForReplacedNode):
        (WebCore::AccessibilityObject::doAXStringForTextMarkerRange):
        (WebCore::AccessibilityObject::doAXBoundsForTextMarkerRange):
        (WebCore::AccessibilityObject::doAXLengthForTextMarkerRange):
        (WebCore::AccessibilityObject::doSetAXSelectedTextMarkerRange):
        (WebCore::AccessibilityObject::doAXTextMarkerForPosition):
        (WebCore::AccessibilityObject::doAXNextTextMarkerForTextMarker):
        (WebCore::AccessibilityObject::doAXPreviousTextMarkerForTextMarker):
        (WebCore::AccessibilityObject::doAXNextWordEndTextMarkerForTextMarker):
        (WebCore::AccessibilityObject::doAXPreviousWordStartTextMarkerForTextMarker):
        (WebCore::AccessibilityObject::doAXNextLineEndTextMarkerForTextMarker):
        (WebCore::AccessibilityObject::doAXPreviousLineStartTextMarkerForTextMarker):
        (WebCore::AccessibilityObject::doAXNextSentenceEndTextMarkerForTextMarker):
        (WebCore::AccessibilityObject::doAXPreviousSentenceStartTextMarkerForTextMarker):
        (WebCore::AccessibilityObject::doAXNextParagraphEndTextMarkerForTextMarker):
        (WebCore::AccessibilityObject::doAXPreviousParagraphStartTextMarkerForTextMarker):
        (WebCore::AccessibilityObject::textMarkerForIndex):
        (WebCore::AccessibilityObject::doAXUIElementForTextMarker):
        (WebCore::AccessibilityObject::doAXLineForTextMarker):
        (WebCore::AccessibilityObject::rangeForTextMarkerRange):
        (WebCore::AccessibilityObject::indexForTextMarker):
        (WebCore::AccessibilityObject::doAXRangeForLine):
        (WebCore::AccessibilityObject::doAXRangeForPosition):
        (WebCore::AccessibilityObject::doAXRangeForIndex):
        (WebCore::AccessibilityObject::doAXStyleRangeForIndex):
        (WebCore::AccessibilityObject::doAXStringForRange):
        (WebCore::AccessibilityObject::doAXBoundsForRange):
        (WebCore::AccessibilityObject::doAccessibilityHitTest):
        (WebCore::AccessibilityObject::focusedUIElement):
        (WebCore::AccessibilityObject::observableObject):
        (WebCore::AccessibilityObject::roleValue):
        (WebCore::AccessibilityObject::canSetFocusAttribute):
        (WebCore::AccessibilityObject::canSetValueAttribute):
        (WebCore::AccessibilityObject::canSetTextRangeAttributes):
        (WebCore::AccessibilityObject::hasChildren):
        (WebCore::AccessibilityObject::axObjectID):
        * page/AccessibilityObject.h:
        (WebCore::VisiblePositionRange::VisiblePositionRange):
        (WebCore::AccessibilityObject::PlainTextRange::PlainTextRange):
        (WebCore::AccessibilityObject::areaElement):
        (WebCore::AccessibilityObject::renderer):
        (WebCore::AccessibilityObject::children):
        (WebCore::AccessibilityObject::wrapper):
        (WebCore::AccessibilityObject::isDetached):
        * page/mac/AccessibilityObjectWrapper.mm:
        (AXAttributeStringSetHeadingLevel):
        (-[AccessibilityObjectWrapper accessibilityAttributeValue:]):

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

        Restore the user entered text when clearing the auto-completion.
        This is important when the user typed text that is a different
        case than the completion. This has no affect on the Console, since
        it matches completions case-sensitively. This is used in the up-coming
        Database Query view for words like "SELECT" and "INSERT".

        Reviewed by Adam Roben.

        * page/inspector/TextPrompt.js:
        (WebInspector.TextPrompt.prototype.clearAutoComplete): Restore the user typed
        text in the original DOM range that complete() saved away.
        (WebInspector.TextPrompt.prototype.complete): Store away the fullWordRange
        and it's text content so clearAutoComplete can restore it.

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

        Don't trim whitespace when looking for the current match, this prevents
        tabbing through matches in the up-coming Database Query view.

        Reviewed by Adam Roben.

        * page/inspector/TextPrompt.js: Removed a trimTrailingWhitespace() call.

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

        Factor out the Console text completion and command history into
        a new TextPrompt object. This TextPrompt object will be used later
        other parts of the Inspector that need text completion and history.
        Not functionality changed, just moved code around.

        Reviewed by Adam Roben.

        * WebCore.vcproj/WebCore.vcproj: Add TextPrompt.js.
        * page/inspector/Console.js: Call the new prompt object and
          delete all the code that moved.
        * page/inspector/TextPrompt.js: Added. Moved code from Console.js.
        * page/inspector/WebKit.qrc: Add TextPrompt.js.
        * page/inspector/inspector.html: Add TextPrompt.js.

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

        Makes setting shouldRefreshChildren on a TreeElement perform the refresh
        immediately if the element is already expanded.

        Reviewed by Adam Roben.

        * page/inspector/treeoutline.js:
        (TreeElement.prototype.get shouldRefreshChildren): Return this._shouldRefreshChildren.
        (TreeElement.prototype.set shouldRefreshChildren): If changing to true, and
        already expanded,
        call expand again to trigger the refresh. Sets this._shouldRefreshChildren.
        (TreeElement.prototype._attach): Check for this._shouldRefreshChildren.
        (TreeElement.prototype.expand): Ditto.

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

        Reviewed by Beth.

        Some clean up of AccessibilityObject:
        - Use existing isImage() in more places.
        - Use existing isTextControl() in more places.
        - Added isRenderImage(). Check this before casting to RenderImage,
          since other, non-RenderImage derived RenderObjects (e.g.
          RenderListMarker) can return true for isImage().
        - Fix two copy/paste errors with improper semicolons.

        * page/AccessibilityObject.cpp:
        (WebCore::AccessibilityObject::isImageButton): Use isImage().
        (WebCore::AccessibilityObject::isRenderImage): Added.
        (WebCore::AccessibilityObject::isAnchor): Use isImage().
        (WebCore::AccessibilityObject::isAttachment): Same.
        (WebCore::AccessibilityObject::accessibilityDescription): Same.
        (WebCore::AccessibilityObject::accessibilityIsIgnored): Use
        isRenderImage() instead of isImage().
        (WebCore::AccessibilityObject::url): Use isImage().
        (WebCore::AccessibilityObject::textControl): Remove improper semicolon, 
        and use isTextControl().
        (WebCore::AccessibilityObject::textMarkerForIndex): Same.
        (WebCore::AccessibilityObject::indexForTextMarker): Use isTextControl().
        (WebCore::AccessibilityObject::doAXRangeForLine): Same.
        (WebCore::AccessibilityObject::doAXRangeForIndex): Same
        (WebCore::AccessibilityObject::doAXStringForRange): Same.
        (WebCore::AccessibilityObject::roleValue):  Use isImage().
        (WebCore::AccessibilityObject::addChildren): Use isRenderImage().
        * page/AccessibilityObject.h:

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

        Fixes a null exception when hovering in some areas of the DOM tree.

        Reviewed by Adam Roben.

        * page/inspector/treeoutline.js:
        (TreeOutline.prototype.treeElementFromPoint): Check listNode for null/undefined
        before accessing any properties. Return null if listNode is null.

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

        Changing WebInspector.currentFocusElement to/from an input element
        does not change the actual focus of that input element. You see this
        in the search field.

        Reviewed by Adam Roben.

        * page/inspector/inspector.js:
        (WebInspector.set currentFocusElement): Call blur and focus if the
        node implements them.

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

        Improve the background size heuristic for SVGs used as background images with no intrinsic size specified.
        Treat them as having a background-size of 100%.  This means their maximal size will be the box established
        by background-origin.

        Reviewed by Beth

        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::calculateBackgroundSize):

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

        Correctly show DOCTYPE in the breadcrumbs and match the CSS rules
        from view-source.css for the DOCTYPE in the DOM tree.

        Reviewed by Adam Roben.

        * css/view-source.css: Add and correct comments about keeping
        in-sync with inspector.css.
        * page/inspector/ElementsPanel.js:
        (WebInspector.DocumentPanel.prototype.updateBreadcrumb):
        Add a case for Node.DOCUMENT_TYPE_NODE.
        * page/inspector/inspector.css: Add a rule for .webkit-html-doctype.
        * page/inspector/utilities.js:
        (nodeTitleInfo): Use the webkit-html-doctype class for nodes
        with Node.DOCUMENT_TYPE_NODE.

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

        - try to fix the Tiger build

        * icu/unicode/uscript.h: Copied from WebKit/mac/icu/unicode/uscript.h.

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

        Copy icu/ to PrivateHeaders for WebKit's benefit

        Rubberstamped by Tim Hatcher.

        * WebCore.xcodeproj/project.pbxproj: Renamed the Copy Forwarding
        Headers build phase to Copy Forwarding and ICU Headers, and added the
        icu/ directory to it.

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

        Fix <rdar://problem/5804776> Would like to use WebCore's
        ForwardingHeaders in WebKit without manually creating copies

        Patch by Tim Hatcher, typed by me.

        * WebCore.xcodeproj/project.pbxproj: Added a new build phase, Copy
        Forwarding Headers, that copies the ForwardingHeaders directory to
        WebCore's PrivateHeaders directory.

2008-04-04  Ada Chan  <adachan@apple.com>

        Changed the signature of imageTitleForFilename so we can pass in the width
        and height as integers.

        Reviewed by Dan.

        * page/mac/WebCoreViewFactory.h:
        * platform/mac/LocalizedStringsMac.mm:
        (WebCore::imageTitle):

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

        - Windows build fix

        * platform/graphics/win/FontCacheWin.cpp:
        (WebCore::matchImprovingEnumProc):

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

        Fix PlatformGradient so that it's a pointer on all platforms.

        * platform/graphics/Gradient.h:

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

        - 64-bit build fix

        * platform/mac/WebFontCache.mm:
        (+[WebFontCache internalFontWithFamily:traits:weight:size:]):

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

        wx build fix. Add stubs for gradient class platform functions.

        * platform/graphics/wx/GradientWx.cpp: Added.
        (WebCore::Gradient::platformDestroy):
        (WebCore::Gradient::platformGradient):

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

        Reviewed by Dan Bernstein.

        Refactor Gradient.h to have the same API on platforms 
        without a gradient class.

        * platform/graphics/Gradient.h:

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

        - Qt build fix

        * platform/graphics/qt/FontQt.cpp:
        (WebCore::Font::Font):

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

        - Tiger build fix

        * platform/mac/WebFontCache.mm:
        * rendering/RenderThemeMac.mm:

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

        - Gtk build fix

        * platform/graphics/gtk/FontPlatformData.h:
        (WebCore::FontPlatformData::size):
        * platform/graphics/gtk/FontPlatformDataGtk.cpp:
        (WebCore::FontPlatformData::FontPlatformData):
        * platform/graphics/gtk/FontPlatformDataPango.cpp:
        (WebCore::FontPlatformData::FontPlatformData):

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

        - project file updates in preparation for build fixes

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

2008-04-03  Nicholas Shanks  <webkit@nickshanks.com>

        Updated by Dan Bernstein. Reviewed by Dave Hyatt.

        - WebCore part of fixing http://bugs.webkit.org/show_bug.cgi?id=6484
          font-weight does not properly support graded weights

        Tests to come: <http://bugs.webkit.org/show_bug.cgi?id=18306>

        Build fixes for platforms other than Mac and Windows to come.

        * WebCore.vcproj/WebCore.vcproj: Added FontDescription.cpp.

        * WebCore.xcodeproj/project.pbxproj: Ditto.

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::CSSComputedStyleDeclaration::getPropertyCSSValue): Changed to
        return additional weight value keywords 100, 200, 300, 500, 600, 800
        and 900.

        * css/CSSFontSelector.cpp:
        (WebCore::hashForFont): Changed the bold parameter into a weight
        parameter and added the weight to the string to be hashed.
        (WebCore::CSSFontSelector::addFontFaceRule): Changed to apply all CSS
        weight values to the font description.
        (WebCore::CSSFontSelector::getFontData): Updated the fallback logic to
        go through all weights equal or lighter from the desired weight. For
        SVG, to also consider heavier weights.

        * css/CSSParser.cpp:
        (WebCore::CSSParser::parseValue): Cleaned up parsing of the font-weight
        property.

        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::applyProperty): Changed to apply all CSS
        weight values to the font description.

        * platform/graphics/Font.h:
        (WebCore::Font::weight): Updated for the change to
        FontDescription::weight().

        * platform/graphics/FontCache.cpp:
        (WebCore::FontPlatformDataCacheKey::FontPlatformDataCacheKey): Replaced
        the bold component of the key with a weight component.
        (WebCore::FontPlatformDataCacheKey::operator==): Updated for the above.
        (WebCore::computeHash): Ditto.
        (WebCore::FontPlatformDataCacheKeyTraits::deletedValue): Removed
        unnecessary parameters.
        (WebCore::FontPlatformDataCacheKeyTraits::emptyValue): Ditto.
        (WebCore::FontCache::getCachedFontPlatformData): Updated for the change
        in FontPlatformDataCacheKey.

        * platform/graphics/FontDescription.cpp: Added.
        (WebCore::FontDescription::lighterWeight): Added. Returns a lighter CSS
        font-weight value if there is one, or the lightest value.
        (WebCore::FontDescription::bolderWeight): Added. Returns a heavier CSS
        font-weight value if there is one, or the heaviest value.

        * platform/graphics/FontDescription.h:
        (WebCore::FontWeight): Added this enumeration.
        (WebCore::FontDescription::FontDescription):
        (WebCore::FontDescription::bold): Removed.
        (WebCore::FontDescription::weight): Changed to return a FontWeight.
        (WebCore::FontDescription::setBold): Removed.
        (WebCore::FontDescription::setWeight): Changed to take a FontWeight.

        * platform/graphics/mac/FontCacheMac.mm:
        (WebCore::toAppKitFontWeight): Added. Maps a FontWeight to the AppKit
        font weight scale of 0-15.
        (WebCore::isAppKitFontWeightBold): Added.
        (WebCore::FontCache::getFontDataForCharacters): Changed to use a weight
        instead of the bold trait for custom fonts, and to decide whether to
        synthesize bold based on the weights rather than the bold trait.
        (WebCore::FontCache::fontExists): Updated for the change in
        WebFontCache .
        (WebCore::FontCache::createFontPlatformData): Ditto. Also changed to
        decide whether to synthesize bold based on the weights rather than on
        the bold trait.

        * platform/graphics/win/FontCacheWin.cpp:
        (WebCore::toGDIFontWeight): Added. Maps a FontWeight to a GDI font
        weight constant.
        (WebCore::isGDIFontWeightBold): Added.
        (WebCore::adjustedGDIFontWeight): Added.
        (WebCore::MatchImprovingProcData::MatchImprovingProcData): Added this
        data structure for use by the following callback.
        (WebCore::matchImprovingEnumProc): Added. The logic of this method is a
        simplification of the betterChoice() predicate in WebFontCache.mm, which
        considers only the italic trait and the weight.
        (WebCore::createGDIFont): Added. Similarly to
        +[WebFontCache fontWithFamily:traits:weight:size:], this function
        finds the closest match in the family for the desired italic bit and
        weight.
        (WebCore::FontCache::fontExists): Changed to call createGDIFont().
        (WebCore::FontCache::createFontPlatformData): Ditto. Also changed to
        compute the synthetic bold and synthetic italic flags based on weights
        and italic bits and pass them to the FontPlatformData constructor.

        * platform/graphics/win/FontPlatformDataWin.cpp:
        (WebCore::FontPlatformData::FontPlatformData): Changed the bold and
        oblique parameters to mean whether these should be synthesized and
        removed the font enumeration code that used to decide that.

        * platform/graphics/win/SimpleFontDataWin.cpp:
        (WebCore::SimpleFontData::smallCapsFontData): Changed to pass the
        synthetic bold and oblique flags from the full-size FontPlatformData to
        the FontPlatformData constructor for the small caps font.

        * platform/mac/WebCoreTextRenderer.h:
        * platform/mac/WebCoreTextRenderer.mm:
        (WebCoreFindFont): Added a weight parameter, which is passed to
        +[WebFontCache fontWithFamily:traits:weight:size:].

        * platform/mac/WebFontCache.h:
        * platform/mac/WebFontCache.mm:
        (acceptableChoice):
        (betterChoice): Changed to ignore the bold trait. Changed the logic for
        deciding based on weights to prefer the font whose weight is closer to
        the desired one, or, if both candidates' weights are the same distance
        from the desired weight, the one that is more "off-center". 
        (+[WebFontCache internalFontWithFamily:traits:weight:size:]): Changed to
        check for weight when matching by full name. Changed to pass
        the actual desired weight instead of the constant 5 to
        acceptableChoice() and betterChoice(). Changed to use weights to decide
        whether to synthesize bold.
        (+[WebFontCache fontWithFamily:traits:weight:size:]): Added a weight
        parameter, which is passed to the internal method.

        * platform/win/PopupMenuWin.cpp:
        (WebCore::PopupMenu::paint): Updated for the change to FontDescription.

        * rendering/RenderListBox.cpp:
        (WebCore::RenderListBox::updateFromElement): Ditto.
        (WebCore::RenderListBox::paintItemForeground): Ditto.

        * rendering/RenderThemeMac.mm:
        (WebCore::toFontWeight): Added. Maps the AppKit font weight range of
        0-15 to the FontWeight range.
        (WebCore::RenderThemeMac::systemFont): Updated for the change to
        FontDescription.

        * rendering/RenderThemeSafari.cpp:
        (WebCore::RenderThemeSafari::systemFont): Ditto.

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

        - another Gtk build fix attempt

        * platform/graphics/cairo/GradientCairo.cpp:
        (WebCore::Gradient::platformDestroy):

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

        - attempted Gtk build fix

        * GNUmakefile.am:

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

        - attempted Qt build fix

        * platform/graphics/qt/GradientQt.cpp:
        (WebCore::Gradient::platformDestroy):

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

        - attempted Gtk build fix

        * html/CanvasRenderingContext2D.cpp:
        (WebCore::CanvasRenderingContext2D::stroke):

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

        - attempted Qt build fix

        * html/CanvasRenderingContext2D.cpp:
        (WebCore::CanvasRenderingContext2D::stroke):

2008-04-03  Beth Dakin  <bdakin@apple.com>

        Reviewed by Alice.

        Build fix for non-Macs.

        * page/AXObjectCache.h:
        (WebCore::AXObjectCache::isIDinUse):

2008-04-03  Brent Fulgham  <bfulgham@gmail.com>

        Reviewed by Darin.

        Correct build error due to incomplete merging of changes to project
        files from Issue 17985.  This small project file patch corrects
        the build issue (see http://bugs.webkit.org/show_bug.cgi?id=18195).

        * WebCore.vcproj/WebCore.vcproj:

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

        Reviewed by Hyatt.

        This patch eliminates AccessibilityObjectMac. All of the platform-
        specific code is now in AccessibilityObjectWrapper.

        * WebCore.xcodeproj/project.pbxproj:
        * dom/Element.h:
        (WebCore::Element::isPasswordField):
        * html/HTMLInputElement.h:
        (WebCore::HTMLInputElement::isPasswordField):
        * page/AXObjectCache.h:
        (WebCore::AXObjectCache::isIDinUse):
        * page/AccessibilityObject.cpp:
        (WebCore::AccessibilityObject::isPasswordField):
        (WebCore::AccessibilityObject::press):
        (WebCore::AccessibilityObject::widgetForAttachmentView):
        (WebCore::AccessibilityObject::doAXBoundsForTextMarkerRange):
        (WebCore::AccessibilityObject::doAXTextMarkerForPosition):
        * page/AccessibilityObject.h:
        (WebCore::AccessibilityObject::areaElement):
        (WebCore::AccessibilityObject::setWrapper):
        * page/mac/AXObjectCacheMac.mm:
        * page/mac/AccessibilityObjectMac.mm: Removed.
        * page/mac/AccessibilityObjectWrapper.h:
        * page/mac/AccessibilityObjectWrapper.mm:
        (-[AccessibilityObjectWrapper attachmentView]):
        (textMarkerForVisiblePosition):
        (visiblePositionForTextMarker):
        (visiblePositionForStartOfTextMarkerRange):
        (visiblePositionForEndOfTextMarkerRange):
        (textMarkerRangeFromMarkers):
        (AXAttributeStringSetFont):
        (CreateCGColorIfDifferent):
        (AXAttributeStringSetColor):
        (AXAttributeStringSetNumber):
        (AXAttributeStringSetStyle):
        (blockquoteLevel):
        (AXAttributeStringSetBlockquoteLevel):
        (AXAttributeStringSetSpelling):
        (AXAttributeStringSetHeadingLevel):
        (AXLinkElementForNode):
        (AXAttributeStringSetElement):
        (AXAttributedStringAppendText):
        (nsStringForReplacedNode):
        (-[AccessibilityObjectWrapper doAXAttributedStringForTextMarkerRange:]):
        (textMarkerRangeFromVisiblePositions):
        (-[AccessibilityObjectWrapper accessibilityActionNames]):
        (-[AccessibilityObjectWrapper accessibilityAttributeNames]):
        (-[AccessibilityObjectWrapper visiblePositionRangeForTextMarkerRange:]):
        (-[AccessibilityObjectWrapper textMarkerRangeForSelection]):
        (-[AccessibilityObjectWrapper position]):
        (createAccessibilityRoleMap):
        (RoleEntry::):
        (roleValueToNSString):
        (-[AccessibilityObjectWrapper role]):
        (-[AccessibilityObjectWrapper subrole]):
        (-[AccessibilityObjectWrapper roleDescription]):
        (-[AccessibilityObjectWrapper accessibilityAttributeValue:]):
        (-[AccessibilityObjectWrapper accessibilityIsIgnored]):
        (-[AccessibilityObjectWrapper accessibilityPerformAction:]):
        (-[AccessibilityObjectWrapper doAXAttributedStringForRange:]):
        (-[AccessibilityObjectWrapper doAXRTFForRange:]):
        (-[AccessibilityObjectWrapper accessibilityAttributeValue:forParameter:]):
        (-[AccessibilityObjectWrapper accessibilityShouldUseUniqueId]):
        * platform/ScrollView.h:
        * platform/mac/ScrollViewMac.mm:
        (WebCore::ScrollView::viewRectToScreen):
        (WebCore::ScrollView::absolutePointToView):

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

        Create a new cross-platform Gradient abstraction and make CanvasGradient wrap it.  This first
        step just cleans up CanvasGradient.  The code that calls it remains ifdef'd however.

        Reviewed by olliej

        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * WebCoreSources.bkl:
        * bindings/js/JSCanvasRenderingContext2DCustom.cpp:
        (WebCore::toJS):
        * html/CanvasGradient.cpp:
        (WebCore::CanvasGradient::CanvasGradient):
        * html/CanvasGradient.h:
        (WebCore::CanvasGradient::gradient):
        (WebCore::CanvasGradient::addColorStop):
        (WebCore::CanvasGradient::getColor):
        * html/CanvasRenderingContext2D.cpp:
        (WebCore::CanvasRenderingContext2D::fill):
        (WebCore::CanvasRenderingContext2D::stroke):
        (WebCore::CanvasRenderingContext2D::fillRect):
        * html/CanvasStyle.h:
        (WebCore::CanvasStyle::canvasGradient):
        * platform/graphics/Gradient.cpp: Added.
        (WebCore::Gradient::Gradient):
        (WebCore::Gradient::~Gradient):
        (WebCore::Gradient::addColorStop):
        (WebCore::compareStops):
        (WebCore::Gradient::getColor):
        (WebCore::Gradient::findStop):
        * platform/graphics/Gradient.h: Added.
        (WebCore::Gradient::ColorStop::ColorStop):
        (WebCore::Gradient::platformInit):
        * platform/graphics/cairo/GradientCairo.cpp: Added.
        (WebCore::Gradient::platformDestroy):
        (WebCore::Gradient::platformGradient):
        * platform/graphics/cg/GradientCG.cpp: Added.
        (WebCore::Gradient::platformDestroy):
        (WebCore::gradientCallback):
        (WebCore::Gradient::platformGradient):
        * platform/graphics/qt/GradientQt.cpp: Added.
        (WebCore::Gradient::platformDestroy):
        (WebCore::Gradient::platformGradient):

2008-04-03  Simon Hausmann  <hausmann@webkit.org>

        Reviewed by Mark Rowe.

        Roll out r31599 and r31605 again after discussion with Mark Rowe.

        * history/HistoryItem.cpp:
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::startIconLoader):
        * loader/icon/IconDatabase.cpp:
        (WebCore::IconDatabase::iconForPageURL):
        (WebCore::IconDatabase::readIconForPageURLFromDisk):
        * loader/icon/IconDatabase.h:
        * loader/icon/IconDatabaseNone.cpp:

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

        Fix for bug 18194, resizable text fields get messed up when resizing in the presence of zoom.

        Reviewed by adele

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

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

        Rollout r31566 as there were a few issues i missed during review (thanks to antti for pointing them out)

        * dom/Element.h:
        * dom/NamedAttrMap.h:
        * rendering/SVGRootInlineBox.cpp:
        (WebCore::SVGRootInlineBox::buildLayoutInformation):
        (WebCore::SVGRootInlineBox::buildTextChunks):
        * svg/SVGAElement.h:
        (WebCore::SVGAElement::contextElement):
        * svg/SVGAltGlyphElement.h:
        (WebCore::SVGAltGlyphElement::contextElement):
        * svg/SVGAnimateColorElement.h:
        * svg/SVGAnimateElement.h:
        * svg/SVGAnimateMotionElement.h:
        * svg/SVGAnimateTransformElement.h:
        * svg/SVGAnimatedTemplate.h:
        (WebCore::SVGAnimatedTemplate::associatedAttributeName):
        (WebCore::lookupOrCreateWrapper):
        * svg/SVGAnimationElement.h:
        * svg/SVGCircleElement.h:
        (WebCore::SVGCircleElement::contextElement):
        * svg/SVGClipPathElement.h:
        (WebCore::SVGClipPathElement::contextElement):
        * svg/SVGComponentTransferFunctionElement.cpp:
        * svg/SVGComponentTransferFunctionElement.h:
        * svg/SVGCursorElement.cpp:
        (WebCore::SVGCursorElement::SVGCursorElement):
        * svg/SVGCursorElement.h:
        (WebCore::SVGCursorElement::contextElement):
        * svg/SVGDefsElement.h:
        (WebCore::SVGDefsElement::contextElement):
        * svg/SVGElement.cpp:
        * svg/SVGElement.h:
        (WebCore::SVGElement::svgAttributeChanged):
        * svg/SVGEllipseElement.cpp:
        (WebCore::SVGEllipseElement::SVGEllipseElement):
        * svg/SVGEllipseElement.h:
        (WebCore::SVGEllipseElement::contextElement):
        * svg/SVGExternalResourcesRequired.h:
        * svg/SVGFEBlendElement.h:
        * svg/SVGFEColorMatrixElement.cpp:
        * svg/SVGFEColorMatrixElement.h:
        * svg/SVGFEComponentTransferElement.h:
        * svg/SVGFECompositeElement.h:
        * svg/SVGFEDiffuseLightingElement.h:
        * svg/SVGFEDisplacementMapElement.h:
        * svg/SVGFEFloodElement.h:
        * svg/SVGFEGaussianBlurElement.h:
        * svg/SVGFEImageElement.cpp:
        * svg/SVGFEImageElement.h:
        (WebCore::SVGFEImageElement::contextElement):
        * svg/SVGFELightElement.h:
        * svg/SVGFEMergeElement.h:
        * svg/SVGFEMergeNodeElement.h:
        * svg/SVGFEOffsetElement.h:
        * svg/SVGFESpecularLightingElement.h:
        * svg/SVGFETileElement.h:
        * svg/SVGFETurbulenceElement.h:
        * svg/SVGFilterElement.cpp:
        (WebCore::SVGFilterElement::SVGFilterElement):
        * svg/SVGFilterElement.h:
        (WebCore::SVGFilterElement::contextElement):
        * svg/SVGFilterPrimitiveStandardAttributes.cpp:
        (WebCore::SVGFilterPrimitiveStandardAttributes::SVGFilterPrimitiveStandardAttributes):
        * svg/SVGFilterPrimitiveStandardAttributes.h:
        * svg/SVGFitToViewBox.cpp:
        * svg/SVGFitToViewBox.h:
        * svg/SVGFontElement.h:
        * svg/SVGForeignObjectElement.cpp:
        (WebCore::SVGForeignObjectElement::SVGForeignObjectElement):
        * svg/SVGForeignObjectElement.h:
        (WebCore::SVGForeignObjectElement::contextElement):
        * svg/SVGGElement.h:
        (WebCore::SVGGElement::contextElement):
        * svg/SVGGradientElement.cpp:
        * svg/SVGGradientElement.h:
        * svg/SVGImageElement.cpp:
        (WebCore::SVGImageElement::SVGImageElement):
        * svg/SVGImageElement.h:
        (WebCore::SVGImageElement::contextElement):
        * svg/SVGLength.cpp:
        * svg/SVGLength.h:
        * svg/SVGLengthList.cpp:
        * svg/SVGLengthList.h:
        * svg/SVGLineElement.cpp:
        (WebCore::SVGLineElement::SVGLineElement):
        * svg/SVGLineElement.h:
        (WebCore::SVGLineElement::contextElement):
        * svg/SVGLinearGradientElement.cpp:
        (WebCore::SVGLinearGradientElement::SVGLinearGradientElement):
        (WebCore::SVGLinearGradientElement::collectGradientProperties):
        * svg/SVGLinearGradientElement.h:
        * svg/SVGMPathElement.h:
        * svg/SVGMarkerElement.cpp:
        (WebCore::SVGMarkerElement::SVGMarkerElement):
        * svg/SVGMarkerElement.h:
        (WebCore::SVGMarkerElement::contextElement):
        * svg/SVGMaskElement.cpp:
        (WebCore::SVGMaskElement::SVGMaskElement):
        * svg/SVGMaskElement.h:
        * svg/SVGNumberList.cpp:
        * svg/SVGNumberList.h:
        * svg/SVGPathElement.h:
        (WebCore::SVGPathElement::contextElement):
        * svg/SVGPatternElement.cpp:
        (WebCore::SVGPatternElement::SVGPatternElement):
        (WebCore::SVGPatternElement::collectPatternProperties):
        * svg/SVGPatternElement.h:
        * svg/SVGPolyElement.h:
        (WebCore::SVGPolyElement::contextElement):
        * svg/SVGPreserveAspectRatio.cpp:
        * svg/SVGPreserveAspectRatio.h:
        * svg/SVGRadialGradientElement.cpp:
        (WebCore::SVGRadialGradientElement::SVGRadialGradientElement):
        (WebCore::SVGRadialGradientElement::svgAttributeChanged):
        (WebCore::SVGRadialGradientElement::collectGradientProperties):
        * svg/SVGRadialGradientElement.h:
        * svg/SVGRectElement.cpp:
        (WebCore::SVGRectElement::SVGRectElement):
        * svg/SVGRectElement.h:
        (WebCore::SVGRectElement::contextElement):
        * svg/SVGSVGElement.cpp:
        (WebCore::SVGSVGElement::SVGSVGElement):
        (WebCore::SVGSVGElement::currentView):
        * svg/SVGSVGElement.h:
        * svg/SVGScriptElement.h:
        (WebCore::SVGScriptElement::contextElement):
        * svg/SVGSetElement.h:
        * svg/SVGStyledElement.h:
        * svg/SVGStyledTransformableElement.cpp:
        * svg/SVGStyledTransformableElement.h:
        * svg/SVGSwitchElement.h:
        (WebCore::SVGSwitchElement::contextElement):
        * svg/SVGSymbolElement.h:
        (WebCore::SVGSymbolElement::contextElement):
        * svg/SVGTRefElement.h:
        (WebCore::SVGTRefElement::contextElement):
        * svg/SVGTSpanElement.h:
        * svg/SVGTextContentElement.cpp:
        (WebCore::SVGTextContentElement::SVGTextContentElement):
        * svg/SVGTextContentElement.h:
        * svg/SVGTextElement.cpp:
        * svg/SVGTextElement.h:
        (WebCore::SVGTextElement::contextElement):
        * svg/SVGTextPathElement.cpp:
        (WebCore::SVGTextPathElement::SVGTextPathElement):
        * svg/SVGTextPathElement.h:
        (WebCore::SVGTextPathElement::contextElement):
        * svg/SVGTextPositioningElement.cpp:
        * svg/SVGTextPositioningElement.h:
        * svg/SVGTransformList.cpp:
        * svg/SVGTransformList.h:
        * svg/SVGURIReference.h:
        * svg/SVGUseElement.cpp:
        (WebCore::SVGUseElement::SVGUseElement):
        * svg/SVGUseElement.h:
        (WebCore::SVGUseElement::contextElement):
        * svg/SVGViewElement.h:
        (WebCore::SVGViewElement::contextElement):
        * svg/SVGViewSpec.cpp:
        * svg/SVGViewSpec.h:

2008-04-03  Holger Hans Peter Freyther  <holger.freyther@trolltech.com>

        Reviewed by Simon.

        * Change IconDatabase::iconForPageURL to return more information. E.g. if
        an image has been found, or if the loading of an image has been scheduled.
        * Update FrameLoader to use another method to trigger reading from disk
        * Update the QWebFrame and QWebSettings

        * history/HistoryItem.cpp:
        * loader/FrameLoader.cpp:
        * loader/icon/IconDatabase.cpp:
        (WebCore::IconDatabase::iconForPageURL):
        (WebCore::IconDatabase::readIconForPageURLFromDisk):
        (WebCore::IconDatabase::iconURLForPageURL):
        (WebCore::IconDatabase::defaultIcon):
        * loader/icon/IconDatabase.h:

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

        - Mac build fix

        * WebCore.base.exp:

2008-04-03  Simon Hausmann  <hausmann@webkit.org>

        Fix the build when building without icondatabase.

        * loader/icon/IconDatabaseNone.cpp: Fix the function signature, no
        bool cache anymore.

2008-04-03  Holger Hans Peter Freyther  <holger.freyther@trolltech.com>

        Reviewed by Simon.

        * Remove the unused 'cache' parameter

        * loader/icon/IconDatabase.cpp:
        (WebCore::IconDatabase::iconForPageURL):
        * loader/icon/IconDatabase.h:

2008-04-03  Holger Hans Peter Freyther  <holger.freyther@trolltech.com>

        Reviewed by Simon.

        * Add WebCore/loader/icon to the DEPENDPATH as well

        * WebCore.pro:

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

        Reviewed by Mitz Pettel

        <rdar://problem/5838347> and http://bugs.webkit.org/show_bug.cgi?id=11839
        Webarchive fails to save CSS files in @import statements

        * css/CSSStyleSheet.cpp:
        (WebCore::CSSStyleSheet::addSubresourceURLStrings): Recursively add the URL each @import rule under the current style sheet.
        * css/CSSStyleSheet.h:
        * css/StyleSheet.h:
        (WebCore::StyleSheet::addSubresourceURLStrings):

        * html/HTMLLinkElement.cpp:
        (WebCore::HTMLLinkElement::getSubresourceAttributeStrings): Add the linked URL as well as all @import
          rules rooted at the linked stylesheet.

        * html/HTMLStyleElement.cpp:
        (WebCore::HTMLStyleElement::getSubresourceAttributeStrings): Walk all @import rules rooted at this
          stylesheet to add to the list.
        * html/HTMLStyleElement.h:

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-04-02  Christian Persch  <chpe@gnome.org>

        Reviewed by Alp Toker.

        GTK+/Pango font backend build fix.

        * platform/graphics/gtk/FontCustomPlatformDataPango.cpp:
        (WebCore::FontCustomPlatformData::fontPlatformData):

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

        No review, build fix only.

        Speculative build fix for no-svg build.
        Use #if ENABLE(SVG) instead of #if ENABLE_SVG

        * css/CSSMutableStyleDeclaration.cpp:
        (WebCore::CSSMutableStyleDeclaration::getPropertyValue):

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

        Rename instances of ExecState from "state" to "exec" in
        JavaScriptDebugServer

        Rename requested by Darin Adler.

        * page/JavaScriptDebugServer.cpp:

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

        Make it possible for JavaScriptDebugListeners to listen to specific Pages

        JavaScriptDebugServer now has overloads of its
        addListener/removeListener methods that take a Page* to indicate for
        which Page the JavaScriptDebugListener wishes to receive messages.

        Reviewed by Darin.

        * page/JavaScriptDebugServer.cpp:
        (WebCore::JavaScriptDebugServer::~JavaScriptDebugServer): Delete all
        ListenerSets being held in m_pageListenersMap.
        (WebCore::JavaScriptDebugServer::addListener): Changed to call
        hasListeners().
        (WebCore::JavaScriptDebugServer::removeListener): Ditto.
        (WebCore::JavaScriptDebugServer::addListener): Added. This overload
        takes a Page* and puts the listener in the appropriate ListenerSet
        within m_pageListenersMap. The ListenerSet is allocated and added to
        m_pageListenersMap when its first listener is added.
        (WebCore::JavaScriptDebugServer::removeListener): Added. This overload
        takes a Page* and removes the listener from the appropriate
        ListenerSet in m_pageListenersMap. The ListenerSet is deleted and
        removed from m_pageListenersMap when its last listener is removed.
        (WebCore::toPage): Added. Retrieves the parent Page from an ExecState.
        (WebCore::JavaScriptDebugServer::sourceParsed): Changed to call
        dispatchDidParseSource/dispatchDidFailToParseSource for both the
        global listeners and the Page listeners.
        (WebCore::dispatchFunctionToListeners): Added. This code was extracted
        from the JavaScriptDebugServer method of the same name.
        (WebCore::JavaScriptDebugServer::dispatchFunctionToListeners): Call
        dispatchFunctionToListeners for both the global listeners and the Page
        listeners.
        * page/JavaScriptDebugServer.h:
          - Added declarations for new methods.
          - Made JavaScriptExecutionCallback typedef public so that it could
            be used by a helper method.
          - Added new m_pageListenersMap member.
2008-04-02  Simon Hausmann  <hausmann@webkit.org>

        Fix compilation on case-sensitive file systems.

        * svg/SVGGradientElement.h: Include SVGTransformList.h instead of
        SVGTRansformlist.h

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

        Reviewed by Oliver.

        Fixes: http://bugs.webkit.org/show_bug.cgi?id=17779 (SVG 1.1 Errata demands "SVG JavaScript Liveness" support)

        SVG Errata states: "All SVG DOM objects that directly correspond to an
        attribute, e.g. the SVGAnimatedLength 'ry' in an SVGRectElement, are live. This
        means that any changes made to the attribute are immediately reflected in the
        corresponding SVG DOM object." (see linked URL on bug report)

        Until now only XML -> SVG DOM changes took affect, aka. changing the 'rx' attribute of a <rect>
        element resuted in changes when accessing 'rx' through SVG DOM (rx.baseVal.value).

        Add a new synchronization layer to handle SVG DOM -> XML changes.

        Added Test: svg/custom/svg-xml-dom-sync.html

        * dom/Element.h:
        * dom/NamedAttrMap.h:
        * rendering/SVGRootInlineBox.cpp:
        (WebCore::nodeToTextContentElement):
        (WebCore::nodeToTextPositioningElement):
        (WebCore::SVGRootInlineBox::buildLayoutInformation):
        (WebCore::SVGRootInlineBox::buildTextChunks):
        * svg/SVGAElement.h:
        (WebCore::SVGAElement::contextElement):
        * svg/SVGAltGlyphElement.h:
        (WebCore::SVGAltGlyphElement::contextElement):
        * svg/SVGAnimateColorElement.h:
        (WebCore::SVGAnimateColorElement::contextElement):
        * svg/SVGAnimateElement.h:
        (WebCore::SVGAnimateElement::contextElement):
        * svg/SVGAnimateMotionElement.h:
        (WebCore::SVGAnimateMotionElement::contextElement):
        * svg/SVGAnimateTransformElement.h:
        (WebCore::SVGAnimateTransformElement::contextElement):
        * svg/SVGAnimatedTemplate.h:
        (WebCore::SVGAnimatedTemplate::toString):
        (WebCore::SVGAnimatedTemplate::associatedAttributeName):
        (WebCore::lookupOrCreateWrapper):
        (WebCore::SVGAnimatedAngle::SVGAnimatedAngle):
        (WebCore::SVGAnimatedAngle::toString):
        (WebCore::SVGAnimatedBoolean::SVGAnimatedBoolean):
        (WebCore::SVGAnimatedBoolean::toString):
        (WebCore::SVGAnimatedEnumeration::SVGAnimatedEnumeration):
        (WebCore::SVGAnimatedEnumeration::toString):
        (WebCore::SVGAnimatedInteger::SVGAnimatedInteger):
        (WebCore::SVGAnimatedInteger::toString):
        (WebCore::SVGAnimatedLength::SVGAnimatedLength):
        (WebCore::SVGAnimatedLength::toString):
        (WebCore::SVGAnimatedLengthList::SVGAnimatedLengthList):
        (WebCore::SVGAnimatedLengthList::toString):
        (WebCore::SVGAnimatedNumber::SVGAnimatedNumber):
        (WebCore::SVGAnimatedNumber::toString):
        (WebCore::SVGAnimatedNumberList::SVGAnimatedNumberList):
        (WebCore::SVGAnimatedNumberList::toString):
        (WebCore::SVGAnimatedPreserveAspectRatio::SVGAnimatedPreserveAspectRatio):
        (WebCore::SVGAnimatedPreserveAspectRatio::toString):
        (WebCore::SVGAnimatedRect::SVGAnimatedRect):
        (WebCore::SVGAnimatedRect::toString):
        (WebCore::SVGAnimatedString::SVGAnimatedString):
        (WebCore::SVGAnimatedString::toString):
        (WebCore::SVGAnimatedTransformList::SVGAnimatedTransformList):
        (WebCore::SVGAnimatedTransformList::toString):
        (WebCore::SVGAnimatedType::SVGAnimatedType):
        * svg/SVGAnimationElement.h:
        * svg/SVGCircleElement.h:
        (WebCore::SVGCircleElement::contextElement):
        * svg/SVGClipPathElement.h:
        (WebCore::SVGClipPathElement::contextElement):
        * svg/SVGComponentTransferFunctionElement.cpp:
        * svg/SVGComponentTransferFunctionElement.h:
        * svg/SVGCursorElement.cpp:
        (WebCore::SVGCursorElement::SVGCursorElement):
        * svg/SVGCursorElement.h:
        (WebCore::SVGCursorElement::contextElement):
        * svg/SVGDefsElement.h:
        (WebCore::SVGDefsElement::contextElement):
        * svg/SVGElement.cpp:
        (WebCore::SVGElement::getAttribute):
        * svg/SVGElement.h:
        (LazilyUpdatedType::LazilyUpdatedType):
        (LazilyUpdatedType::operator=):
        (LazilyUpdatedType::operator==):
        (LazilyUpdatedType::operator!=):
        (LazilyUpdatedType::operator StoredType):
        (WebCore::SVGElement::invokeSVGPropertySynchronizer):
        (WebCore::SVGElement::addSVGPropertySynchronizer):
        * svg/SVGEllipseElement.cpp:
        (WebCore::SVGEllipseElement::SVGEllipseElement):
        * svg/SVGEllipseElement.h:
        (WebCore::SVGEllipseElement::contextElement):
        * svg/SVGExternalResourcesRequired.h:
        * svg/SVGFEBlendElement.h:
        (WebCore::SVGFEBlendElement::contextElement):
        * svg/SVGFEColorMatrixElement.cpp:
        * svg/SVGFEColorMatrixElement.h:
        (WebCore::SVGFEColorMatrixElement::contextElement):
        * svg/SVGFEComponentTransferElement.h:
        (WebCore::SVGFEComponentTransferElement::contextElement):
        * svg/SVGFECompositeElement.h:
        (WebCore::SVGFECompositeElement::contextElement):
        * svg/SVGFEDiffuseLightingElement.h:
        (WebCore::SVGFEDiffuseLightingElement::contextElement):
        * svg/SVGFEDisplacementMapElement.h:
        (WebCore::SVGFEDisplacementMapElement::contextElement):
        * svg/SVGFEFloodElement.h:
        (WebCore::SVGFEFloodElement::contextElement):
        * svg/SVGFEGaussianBlurElement.h:
        (WebCore::SVGFEGaussianBlurElement::contextElement):
        * svg/SVGFEImageElement.cpp:
        * svg/SVGFEImageElement.h:
        (WebCore::SVGFEImageElement::contextElement):
        * svg/SVGFELightElement.h:
        * svg/SVGFEMergeElement.h:
        (WebCore::SVGFEMergeElement::contextElement):
        * svg/SVGFEMergeNodeElement.h:
        (WebCore::SVGFEMergeNodeElement::contextElement):
        * svg/SVGFEOffsetElement.h:
        (WebCore::SVGFEOffsetElement::contextElement):
        * svg/SVGFESpecularLightingElement.h:
        (WebCore::SVGFESpecularLightingElement::contextElement):
        * svg/SVGFETileElement.h:
        (WebCore::SVGFETileElement::contextElement):
        * svg/SVGFETurbulenceElement.h:
        (WebCore::SVGFETurbulenceElement::contextElement):
        * svg/SVGFilterElement.cpp:
        (WebCore::SVGFilterElement::SVGFilterElement):
        * svg/SVGFilterElement.h:
        (WebCore::SVGFilterElement::contextElement):
        * svg/SVGFilterPrimitiveStandardAttributes.cpp:
        (WebCore::SVGFilterPrimitiveStandardAttributes::SVGFilterPrimitiveStandardAttributes):
        * svg/SVGFilterPrimitiveStandardAttributes.h:
        (WebCore::SVGFilterPrimitiveStandardAttributes::contextElement):
        * svg/SVGFitToViewBox.cpp:
        * svg/SVGFitToViewBox.h:
        * svg/SVGFontElement.h:
        (WebCore::SVGFontElement::contextElement):
        * svg/SVGForeignObjectElement.cpp:
        (WebCore::SVGForeignObjectElement::SVGForeignObjectElement):
        * svg/SVGForeignObjectElement.h:
        (WebCore::SVGForeignObjectElement::contextElement):
        * svg/SVGGElement.h:
        (WebCore::SVGGElement::contextElement):
        * svg/SVGGradientElement.cpp:
        * svg/SVGGradientElement.h:
        * svg/SVGImageElement.cpp:
        (WebCore::SVGImageElement::SVGImageElement):
        * svg/SVGImageElement.h:
        (WebCore::SVGImageElement::contextElement):
        * svg/SVGLength.cpp:
        (WebCore::SVGLength::SVGLength):
        (WebCore::SVGLength::operator=):
        (WebCore::SVGLength::operator==):
        (WebCore::SVGLength::operator!=):
        * svg/SVGLength.h:
        * svg/SVGLengthList.cpp:
        (WebCore::SVGLengthList::valueAsString):
        * svg/SVGLengthList.h:
        * svg/SVGLineElement.cpp:
        (WebCore::SVGLineElement::SVGLineElement):
        * svg/SVGLineElement.h:
        (WebCore::SVGLineElement::contextElement):
        * svg/SVGLinearGradientElement.cpp:
        (WebCore::SVGLinearGradientElement::SVGLinearGradientElement):
        (WebCore::SVGLinearGradientElement::collectGradientProperties):
        * svg/SVGLinearGradientElement.h:
        (WebCore::SVGLinearGradientElement::contextElement):
        * svg/SVGMPathElement.h:
        (WebCore::SVGMPathElement::contextElement):
        * svg/SVGMarkerElement.cpp:
        (WebCore::SVGMarkerElement::SVGMarkerElement):
        * svg/SVGMarkerElement.h:
        (WebCore::SVGMarkerElement::contextElement):
        * svg/SVGMaskElement.cpp:
        (WebCore::SVGMaskElement::SVGMaskElement):
        * svg/SVGMaskElement.h:
        (WebCore::SVGMaskElement::contextElement):
        * svg/SVGNumberList.cpp:
        (WebCore::SVGNumberList::valueAsString):
        * svg/SVGNumberList.h:
        * svg/SVGPathElement.h:
        (WebCore::SVGPathElement::contextElement):
        * svg/SVGPatternElement.cpp:
        (WebCore::SVGPatternElement::SVGPatternElement):
        (WebCore::SVGPatternElement::collectPatternProperties):
        * svg/SVGPatternElement.h:
        (WebCore::SVGPatternElement::contextElement):
        * svg/SVGPolyElement.h:
        (WebCore::SVGPolyElement::contextElement):
        * svg/SVGPreserveAspectRatio.cpp:
        (WebCore::SVGPreserveAspectRatio::valueAsString):
        * svg/SVGPreserveAspectRatio.h:
        * svg/SVGRadialGradientElement.cpp:
        (WebCore::SVGRadialGradientElement::SVGRadialGradientElement):
        (WebCore::SVGRadialGradientElement::svgAttributeChanged):
        (WebCore::SVGRadialGradientElement::collectGradientProperties):
        * svg/SVGRadialGradientElement.h:
        (WebCore::SVGRadialGradientElement::contextElement):
        * svg/SVGRectElement.cpp:
        (WebCore::SVGRectElement::SVGRectElement):
        * svg/SVGRectElement.h:
        (WebCore::SVGRectElement::contextElement):
        * svg/SVGSVGElement.cpp:
        (WebCore::SVGSVGElement::SVGSVGElement):
        (WebCore::SVGSVGElement::currentView):
        * svg/SVGSVGElement.h:
        (WebCore::SVGSVGElement::contextElement):
        * svg/SVGScriptElement.h:
        (WebCore::SVGScriptElement::contextElement):
        * svg/SVGSetElement.h:
        (WebCore::SVGSetElement::contextElement):
        * svg/SVGStyledElement.h:
        * svg/SVGStyledTransformableElement.cpp:
        * svg/SVGStyledTransformableElement.h:
        * svg/SVGSwitchElement.h:
        (WebCore::SVGSwitchElement::contextElement):
        * svg/SVGSymbolElement.h:
        (WebCore::SVGSymbolElement::contextElement):
        * svg/SVGTRefElement.h:
        (WebCore::SVGTRefElement::contextElement):
        * svg/SVGTSpanElement.h:
        (WebCore::SVGTSpanElement::contextElement):
        * svg/SVGTextContentElement.cpp:
        (WebCore::SVGTextContentElement::SVGTextContentElement):
        * svg/SVGTextContentElement.h:
        * svg/SVGTextElement.cpp:
        * svg/SVGTextElement.h:
        (WebCore::SVGTextElement::contextElement):
        * svg/SVGTextPathElement.cpp:
        (WebCore::SVGTextPathElement::SVGTextPathElement):
        * svg/SVGTextPathElement.h:
        (WebCore::SVGTextPathElement::contextElement):
        * svg/SVGTextPositioningElement.cpp:
        * svg/SVGTextPositioningElement.h:
        * svg/SVGTransformList.cpp:
        (SVGTransformList::valueAsString):
        * svg/SVGTransformList.h:
        * svg/SVGURIReference.h:
        * svg/SVGUseElement.cpp:
        (WebCore::SVGUseElement::SVGUseElement):
        * svg/SVGUseElement.h:
        (WebCore::SVGUseElement::contextElement):
        * svg/SVGViewElement.h:
        (WebCore::SVGViewElement::contextElement):
        * svg/SVGViewSpec.cpp:
        (WebCore::SVGViewSpec::SVGViewSpec):
        (WebCore::SVGViewSpec::contextElement):
        * svg/SVGViewSpec.h:

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

        Reviewed by Alexey.

        - fix storage leak seen on buildbot

        * platform/graphics/cg/ImageBufferCG.cpp:
        (WebCore::utiFromMIMEType): Put the result of createCFString() into a RetainPtr. Changed
        result to be a RetainPtr.
        (WebCore::ImageBuffer::toDataURL): Tweak a little bit, removing one local variable and
        some unneeded explicit conversions.

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

        * WebCore.vcproj/WebCore.vcproj: Added RangeBoundaryPoint.h -- not required, but convenient.

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

        Reviewed by Sam and Antti.

        - fix <rdar://problem/5829565> paste performance slowed down with the Range Acid3 changes

        Added a new class, RangeBoundaryPoint, to use for range boundary points. The "truth" of
        the offset is now stored as a node pointer, and the offset is computed as and when needed.
        This allows us to efficiently update when the DOM tree is changed -- computation of the
        node offsets is deferred until the Range is used later.

        * WebCore.base.exp: Export nodeIndex().

        * WebCore.xcodeproj/project.pbxproj: Added RangeBoundaryPoint.h, removed NodeWithIndexBefore.h
        and NodeWIthIndexAfter.h. Also let Xcode tweak the file formatting.

        * dom/ContainerNode.cpp:
        (WebCore::ContainerNode::childrenChanged): Pass fewer arguments to Document.

        * dom/Document.cpp:
        (WebCore::Document::nodeChildrenChanged): Pass fewer arguments to Range.
        (WebCore::Document::nodeWillBeRemoved): Pass node to range as a raw node pointer; no need for
        the index.
        * dom/Document.h: Take fewer arguments.

        * dom/NodeWithIndexAfter.h: Removed.
        * dom/NodeWithIndexBefore.h: Removed.

        * dom/Range.cpp:
        (WebCore::Range::Range): Changed to use the new RangeBoundaryPoint constructor.
        (WebCore::Range::create): Updated to use RangeBoundaryPoint instead of Position.
        (WebCore::Range::~Range): Ditto.
        (WebCore::Range::startContainer): Ditto.
        (WebCore::Range::startOffset): Ditto.
        (WebCore::Range::endContainer): Ditto.
        (WebCore::Range::endOffset): Ditto.
        (WebCore::Range::commonAncestorContainer): Ditto.
        (WebCore::Range::collapsed): Ditto.
        (WebCore::Range::setStart): Ditto.
        (WebCore::Range::setEnd): Ditto.
        (WebCore::Range::collapse): Ditto.
        (WebCore::Range::isPointInRange): Ditto.
        (WebCore::Range::comparePoint): Ditto.
        (WebCore::Range::compareNode): Ditto.
        (WebCore::Range::compareBoundaryPoints): Ditto.
        (WebCore::Range::boundaryPointsValid): Ditto.
        (WebCore::Range::intersectsNode): Ditto.
        (WebCore::Range::processContents): Ditto.
        (WebCore::Range::cloneContents): Ditto.
        (WebCore::Range::insertNode): Updated to use RangeBoundaryPoint. Also simplified the code
        at the end that updates the range -- not all of it is needed now since most of the fixup
        is done automatically by the range document mutation machinery. The one bit that remains
        is arguably a bug, but we need to keep it to keep passing Acid3 until we get clarification
        that it is indeed a bug (and then Acid3 will probably have to change).
        (WebCore::Range::toString): Update to use RangeBoundaryPoint instead of Position.
        (WebCore::Range::text): Ditto.
        (WebCore::Range::createContextualFragment): Ditto.
        (WebCore::Range::detach): Ditto.
        (WebCore::Range::checkNodeWOffset): Changed case where the offset is a node offset to
        be more efficient by using childNode instead of childNodeCount, and also return the node
        before which is needed to set the value of a RangeBoundaryPoint.
        (WebCore::Range::cloneRange): Ditto.
        (WebCore::Range::setStartAfter): Ditto.
        (WebCore::Range::setEndBefore): Ditto.
        (WebCore::Range::setEndAfter): Ditto.
        (WebCore::Range::selectNode): Ditto.
        (WebCore::Range::selectNodeContents): Ditto.
        (WebCore::Range::surroundContents): Ditto.
        (WebCore::Range::setStartBefore): Ditto.
        (WebCore::Range::checkDeleteExtract): Ditto.
        (WebCore::Range::containedByReadOnly): Ditto.
        (WebCore::Range::firstNode): Ditto.
        (WebCore::Range::editingStartPosition): Ditto.
        (WebCore::Range::pastLastNode): Ditto.
        (WebCore::Range::addLineBoxRects): Ditto.
        (WebCore::Range::formatForDebugger): Ditto.
        (WebCore::Range::maxStartOffset): Ditto.
        (WebCore::Range::maxEndOffset): Ditto.
        (WebCore::boundaryNodeChildrenChanged): Updated to use RangeBoundaryPoint instead of
        Position. Also changed name and changed to just call invalidateOffset.
        (WebCore::Range::nodeChildrenChanged): Changed to take just a container node.
        (WebCore::boundaryNodeWillBeRemoved): Updated to use RangeBoundaryPoint instead of
        Position. Also changed name and changed to update childBefore.
        (WebCore::Range::nodeWillBeRemoved): Changed to just take a Node*.
        (WebCore::boundaryTextInserted): Updated to use RangeBoundaryPoint instead of
        Position. Also changed name.
        (WebCore::Range::textInserted): Ditto.
        (WebCore::boundaryTextRemoved): Ditto.
        (WebCore::Range::textRemoved): Ditto.
        (WebCore::boundaryTextNodesMerged): Ditto.
        (WebCore::Range::textNodesMerged): Ditto.
        (WebCore::boundaryTextNodesSplit): Ditto.
        (WebCore::Range::textNodeSplit): Ditto.

        * dom/Range.h: Updated to use RangeBoundaryPoint instead of Position.

        * dom/RangeBoundaryPoint.h: Added.

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

        Reviewed by Sam.

        Get rid of old "bindings" forwarding headers.

        * ForwardingHeaders/bindings: Removed.
        * ForwardingHeaders/bindings/NP_jsobject.h: Removed.
        * ForwardingHeaders/bindings/npruntime.h: Removed.
        * ForwardingHeaders/bindings/npruntime_impl.h: Removed.
        * ForwardingHeaders/bindings/npruntime_internal.h: Removed.
        * ForwardingHeaders/bindings/runtime.h: Removed.
        * ForwardingHeaders/bindings/runtime_object.h: Removed.
        * ForwardingHeaders/bindings/runtime_root.h: Removed.

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

        Rename DatabasePanel.js to DatabasesPanel.js to facilitate the up-coming UI refresh changes.

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

        Rubber-stamped by Brady Eidson.

        * WebCore.vcproj/WebCore.vcproj: Reference DatabasesPanel.js.
        * page/inspector/DatabasePanel.js: Removed.
        * page/inspector/DatabasesPanel.js: Copied from page/inspector/DatabasePanel.js.
        * page/inspector/WebKit.qrc: Reference DatabasesPanel.js.
        * page/inspector/inspector.html: Reference DatabasesPanel.js.

2008-04-01  Brady Eidson  <beidson@apple.com>

        Touch a file to get Windows to rebuild WebCore

        * platform/ContextMenu.cpp: Alphabetize headers

2008-04-01  Brady Eidson  <beidson@apple.com>

        Reviewed by Adam Roben

        Export loader/archive and loader/archive/cf headers for WebKitWin to use

        * WebCore.vcproj/WebCore.vcproj:

2008-04-01  Brady Eidson  <beidson@apple.com>

        Reviewed by Darin

        WebArchives need to load on Windows the same way as on Mac, and this change in the 
        finished-loading code path was a big part of that

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::finishedLoadingDocument): Only call the client's finishedLoading()
          for non-archive loads

2008-04-01  Dan Bernstein  <mitz@apple.com>

        - Mac build fix

        * WebCore.xcodeproj/project.pbxproj: Made FontRenderingMode.h private.

2008-04-01  Dan Bernstein  <mitz@apple.com>

        Reviewed by Darin Adler.

        - move the FontRenderingMode enumeration into its own header file

        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * loader/CachedFont.h:
        * platform/graphics/FontDescription.h:
        * platform/graphics/FontRenderingMode.h: Added.
        * platform/graphics/gtk/FontCustomPlatformData.h:
        * platform/graphics/mac/FontCustomPlatformData.h:
        * platform/graphics/qt/FontCustomPlatformData.h:
        * platform/graphics/win/FontCustomPlatformData.h:

2008-04-01  Darin Adler  <darin@apple.com>

        Reviewed by Mitz.

        - fix <rdar://problem/5833351> REGRESSION: Leak in JSCustomXPathNSResolver::create
        - fix <rdar://problem/5833216> REGRESSION: Leak in CSSStyleSelector::addViewportDependentMediaQueryResult

        * bindings/js/JSCustomXPathNSResolver.cpp:
        (WebCore::JSCustomXPathNSResolver::create): Added a missing adoptRef.
        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::~CSSStyleSelector): Added a missing call to deleteAllValues.

2008-04-01  Darin Adler  <darin@apple.com>

        Reviewed by Sam.

        - speed up hasChildNodes, which does not need to be virtual

        * dom/ContainerNode.cpp: Removed hasChildNodes.
        * dom/ContainerNode.h: Added non-virtual inline hasChildNodes.
        * dom/Node.cpp: Removed hasChildNodes.
        * dom/Node.h: Added non-vritual inline hasChildNodes.

2008-04-01  Simon Hausmann  <hausmann@webkit.org>

        Fix the non-mac build.

        * page/AXObjectCache.h: Don't reference AccessibilityObjects when
        building without accessibility.
        * page/AccessibilityObject.h: Don't include RetainPtr.h for non-mac
        builds.

2008-04-01  Holger Hans Peter Freyther  <holger.freyther@trolltech.com>

        Reviewed by Simon.

        * Do not store the QWebFrame associated with a ScrollView/FrameView
        in the WebCore::Widget.
        * Instead of asking the Widget for the QWebFrame use the QWebFramePrivate::core
        and QWebFramePrivate::kit function to convert from and to QWebFrame.

        * platform/Widget.h:
        * platform/qt/WidgetQt.cpp:
        (WebCore::WidgetPrivate::WidgetPrivate):
        (WebCore::Widget::containingWindow):

2008-04-01  Alice Liu  <alice.liu@apple.com>
        Patch by Beth Dakin <bdakin@apple.com> and Alice Liu

        Reviewed by Darin.

        Refactored WebCore Accessibility code.  Prior to this patch, WebCore
        accessibility was implemented in an ObjC class named WebCoreAXObject,
        with much of the "guts" in C++.  This patch the next natural step of
        factoring out the C++ code into a class named AccessibilityObject, and 
        in order to maintain the required ObjC object ties, also implements an
        ObjC class named AccessibilityObjectWrapper as a thin wrapper around the
        C++ object.  Internally within WebCore we operate on the C++ object as
        much as possible, and the ObjC object gets used mostly when we need to
        return something to AppKit or call something implemented on NSObject.
        The AXObjectCache still keeps one HashMap, now of RenderObjects to
        AccessibilityObjects instead of WebCoreAXObjects, and the
        AccessibilityObject keeps track of its ObjC wrapper.

        * WebCore.xcodeproj/project.pbxproj:
        * page/AXObjectCache.h:
        (WebCore::AXObjectCache::get):
        (WebCore::AXObjectCache::removeAXID):
        * page/AccessibilityObject.cpp: Added.
        (WebCore::AccessibilityObject::AccessibilityObject):
        (WebCore::AccessibilityObject::~AccessibilityObject):
        (WebCore::AccessibilityObject::create):
        (WebCore::AccessibilityObject::detach):
        (WebCore::AccessibilityObject::firstChild):
        (WebCore::AccessibilityObject::lastChild):
        (WebCore::AccessibilityObject::previousSibling):
        (WebCore::AccessibilityObject::nextSibling):
        (WebCore::AccessibilityObject::parentObject):
        (WebCore::AccessibilityObject::parentObjectUnignored):
        (WebCore::AccessibilityObject::isWebArea):
        (WebCore::AccessibilityObject::isImageButton):
        (WebCore::AccessibilityObject::isAnchor):
        (WebCore::AccessibilityObject::isTextControl):
        (WebCore::AccessibilityObject::isImage):
        (WebCore::AccessibilityObject::isAttachment):
        (WebCore::isPasswordFieldElement):
        (WebCore::AccessibilityObject::isPasswordField):
        (WebCore::AccessibilityObject::headingLevel):
        (WebCore::AccessibilityObject::isHeading):
        (WebCore::AccessibilityObject::anchorElement):
        (WebCore::isCheckboxOrRadio):
        (WebCore::AccessibilityObject::actionElement):
        (WebCore::AccessibilityObject::mouseButtonListener):
        (WebCore::AccessibilityObject::helpText):
        (WebCore::AccessibilityObject::textUnderElement):
        (WebCore::AccessibilityObject::hasIntValue):
        (WebCore::AccessibilityObject::intValue):
        (WebCore::AccessibilityObject::stringValue):
        (WebCore::labelForElement):
        (WebCore::AccessibilityObject::title):
        (WebCore::AccessibilityObject::accessibilityDescription):
        (WebCore::AccessibilityObject::boundingBoxRect):
        (WebCore::AccessibilityObject::size):
        (WebCore::AccessibilityObject::linkedUIElement):
        (WebCore::AccessibilityObject::accessibilityShouldUseUniqueId):
        (WebCore::AccessibilityObject::accessibilityIsIgnored):
        (WebCore::AccessibilityObject::loaded):
        (WebCore::AccessibilityObject::layoutCount):
        (WebCore::AccessibilityObject::textLength):
        (WebCore::AccessibilityObject::selectedText):
        (WebCore::AccessibilityObject::selection):
        (WebCore::AccessibilityObject::selectedTextRange):
        (WebCore::AccessibilityObject::setSelectedText):
        (WebCore::AccessibilityObject::setSelectedTextRange):
        (WebCore::AccessibilityObject::makeRangeVisible):
        (WebCore::AccessibilityObject::url):
        (WebCore::AccessibilityObject::isVisited):
        (WebCore::AccessibilityObject::isFocused):
        (WebCore::AccessibilityObject::setFocused):
        (WebCore::AccessibilityObject::setValue):
        (WebCore::AccessibilityObject::isEnabled):
        (WebCore::AccessibilityObject::press):
        (WebCore::AccessibilityObject::topRenderer):
        (WebCore::AccessibilityObject::textControl):
        (WebCore::AccessibilityObject::widget):
        (WebCore::AccessibilityObject::axObjectCache):
        (WebCore::AccessibilityObject::documentLinks):
        (WebCore::AccessibilityObject::documentFrameView):
        (WebCore::AccessibilityObject::frameViewIfRenderView):
        (WebCore::AccessibilityObject::visiblePositionRange):
        (WebCore::AccessibilityObject::doAXTextMarkerRangeForLine):
        (WebCore::AccessibilityObject::doAXTextMarkerRangeForUnorderedTextMarkers):
        (WebCore::AccessibilityObject::doAXLeftWordTextMarkerRangeForTextMarker):
        (WebCore::AccessibilityObject::doAXRightWordTextMarkerRangeForTextMarker):
        (WebCore::updateAXLineStartForVisiblePosition):
        (WebCore::AccessibilityObject::doAXLeftLineTextMarkerRangeForTextMarker):
        (WebCore::AccessibilityObject::doAXRightLineTextMarkerRangeForTextMarker):
        (WebCore::AccessibilityObject::doAXSentenceTextMarkerRangeForTextMarker):
        (WebCore::AccessibilityObject::doAXParagraphTextMarkerRangeForTextMarker):
        (WebCore::startOfStyleRange):
        (WebCore::endOfStyleRange):
        (WebCore::AccessibilityObject::doAXStyleTextMarkerRangeForTextMarker):
        (WebCore::AccessibilityObject::textMarkerRangeForRange):
        (WebCore::AccessibilityObject::stringForReplacedNode):
        (WebCore::AccessibilityObject::doAXStringForTextMarkerRange):
        (WebCore::AccessibilityObject::doAXBoundsForTextMarkerRange):
        (WebCore::AccessibilityObject::doAXLengthForTextMarkerRange):
        (WebCore::AccessibilityObject::doSetAXSelectedTextMarkerRange):
        (WebCore::AccessibilityObject::doAXTextMarkerForPosition):
        (WebCore::AccessibilityObject::doAXNextTextMarkerForTextMarker):
        (WebCore::AccessibilityObject::doAXPreviousTextMarkerForTextMarker):
        (WebCore::AccessibilityObject::doAXNextWordEndTextMarkerForTextMarker):
        (WebCore::AccessibilityObject::doAXPreviousWordStartTextMarkerForTextMarker):
        (WebCore::AccessibilityObject::doAXNextLineEndTextMarkerForTextMarker):
        (WebCore::AccessibilityObject::doAXPreviousLineStartTextMarkerForTextMarker):
        (WebCore::AccessibilityObject::doAXNextSentenceEndTextMarkerForTextMarker):
        (WebCore::AccessibilityObject::doAXPreviousSentenceStartTextMarkerForTextMarker):
        (WebCore::AccessibilityObject::doAXNextParagraphEndTextMarkerForTextMarker):
        (WebCore::AccessibilityObject::doAXPreviousParagraphStartTextMarkerForTextMarker):
        (WebCore::AccessibilityObject::textMarkerForIndex):
        (WebCore::AccessibilityObject::doAXUIElementForTextMarker):
        (WebCore::AccessibilityObject::doAXLineForTextMarker):
        (WebCore::AccessibilityObject::rangeForTextMarkerRange):
        (WebCore::AccessibilityObject::indexForTextMarker):
        (WebCore::AccessibilityObject::doAXRangeForLine):
        (WebCore::AccessibilityObject::doAXRangeForPosition):
        (WebCore::AccessibilityObject::doAXRangeForIndex):
        (WebCore::AccessibilityObject::doAXStyleRangeForIndex):
        (WebCore::AccessibilityObject::doAXStringForRange):
        (WebCore::AccessibilityObject::doAXBoundsForRange):
        (WebCore::AccessibilityObject::doAXLineForIndex):
        (WebCore::AccessibilityObject::doAccessibilityHitTest):
        (WebCore::AccessibilityObject::focusedUIElement):
        (WebCore::AccessibilityObject::observableObject):
        (WebCore::AccessibilityObject::roleValue):
        (WebCore::AccessibilityObject::canSetFocusAttribute):
        (WebCore::AccessibilityObject::canSetValueAttribute):
        (WebCore::AccessibilityObject::canSetTextRangeAttributes):
        (WebCore::AccessibilityObject::childrenChanged):
        (WebCore::AccessibilityObject::clearChildren):
        (WebCore::AccessibilityObject::hasChildren):
        (WebCore::AccessibilityObject::addChildren):
        (WebCore::AccessibilityObject::axObjectID):
        (WebCore::AccessibilityObject::setAXObjectID):
        (WebCore::AccessibilityObject::removeAXObjectID):
        * page/AccessibilityObject.h: Added.
        (WebCore::VisiblePositionRange::VisiblePositionRange):
        (WebCore::VisiblePositionRange::isNull):
        (WebCore::AccessibilityObject::detached):
        (WebCore::AccessibilityObject::PlainTextRange::PlainTextRange):
        (WebCore::AccessibilityObject::PlainTextRange::isNull):
        (WebCore::AccessibilityObject::renderer):
        (WebCore::AccessibilityObject::children):
        (WebCore::AccessibilityObject::wrapper):
        (WebCore::AccessibilityObject::setWrapper):
        * page/mac/AXObjectCacheMac.mm:
        (WebCore::AXObjectCache::~AXObjectCache):
        (WebCore::AXObjectCache::get):
        (WebCore::AXObjectCache::remove):
        (WebCore::AXObjectCache::getAXID):
        (WebCore::AXObjectCache::removeAXID):
        (WebCore::AXObjectCache::textMarkerForVisiblePosition):
        (WebCore::AXObjectCache::childrenChanged):
        (WebCore::AXObjectCache::postNotification):
        (WebCore::AXObjectCache::postNotificationToElement):
        * page/mac/AccessibilityObjectMac.mm: Added.
        (createAccessibilityRoleMap):
        (RoleEntry::):
        (roleValueToNSString):
        (AccessibilityObject::attachmentView):
        (AccessibilityObject::performPressActionForAttachment):
        (AccessibilityObject::textMarkerRange):
        (AccessibilityObject::textMarkerForVisiblePosition):
        (AccessibilityObject::startTextMarker):
        (AccessibilityObject::visiblePositionForTextMarker):
        (AccessibilityObject::visiblePositionForStartOfTextMarkerRange):
        (AccessibilityObject::visiblePositionForEndOfTextMarkerRange):
        (AccessibilityObject::textMarkerRangeFromVisiblePositions):
        (AccessibilityObject::textMarkerRangeForSelection):
        (AccessibilityObject::textMarkerRangeFromMarkers):
        (AccessibilityObject::convertViewRectToScreenCoords):
        (AccessibilityObject::convertAbsolutePointToViewCoords):
        (AccessibilityObject::convertWidgetChildrenToNSArray):
        (AccessibilityObject::position):
        (AccessibilityObject::role):
        (AccessibilityObject::subrole):
        (AccessibilityObject::roleDescription):
        (blockquoteLevel):
        (AccessibilityObject::AXAttributeStringSetElement):
        (AXAttributeStringSetBlockquoteLevel):
        (CreateCGColorIfDifferent):
        (AXAttributeStringSetColor):
        (AXAttributeStringSetNumber):
        (AXAttributeStringSetFont):
        (AXAttributeStringSetStyle):
        (AccessibilityObject::AXAttributeStringSetHeadingLevel):
        (AccessibilityObject::AXLinkElementForNode):
        (AXAttributeStringSetSpelling):
        (AccessibilityObject::AXAttributedStringAppendText):
        (nsStringForReplacedNode):
        (AccessibilityObject::doAXAttributedStringForTextMarkerRange):
        (AccessibilityObject::doAXAttributedStringForRange):
        (AccessibilityObject::doAXRTFForRange):
        * page/mac/AccessibilityObjectWrapper.h: Added.
        * page/mac/AccessibilityObjectWrapper.mm: Added.
        (-[AccessibilityObjectWrapper initWithAccessibilityObject:]):
        (-[AccessibilityObjectWrapper unregisterUniqueIdForUIElement]):
        (-[AccessibilityObjectWrapper detach]):
        (-[AccessibilityObjectWrapper accessibilityObject]):
        (-[AccessibilityObjectWrapper accessibilityActionNames]):
        (-[AccessibilityObjectWrapper accessibilityAttributeNames]):
        (-[AccessibilityObjectWrapper visiblePositionRangeForTextMarkerRange:]):
        (-[AccessibilityObjectWrapper renderWidgetChildren]):
        (convertToNSArray):
        (-[AccessibilityObjectWrapper accessibilityAttributeValue:]):
        (-[AccessibilityObjectWrapper accessibilityFocusedUIElement]):
        (-[AccessibilityObjectWrapper accessibilityHitTest:]):
        (-[AccessibilityObjectWrapper accessibilityIsAttributeSettable:]):
        (-[AccessibilityObjectWrapper accessibilityIsIgnored]):
        (-[AccessibilityObjectWrapper accessibilityParameterizedAttributeNames]):
        (-[AccessibilityObjectWrapper accessibilityPerformAction:]):
        (-[AccessibilityObjectWrapper accessibilitySetValue:forAttribute:]):
        (rendererForView):
        (-[AccessibilityObjectWrapper _accessibilityParentForSubview:]):
        (-[AccessibilityObjectWrapper accessibilityActionDescription:]):
        (-[AccessibilityObjectWrapper accessibilityAttributeValue:forParameter:]):
        (-[AccessibilityObjectWrapper accessibilityShouldUseUniqueId]):
        * page/mac/WebCoreAXObject.h: Removed.
        * page/mac/WebCoreAXObject.mm: Removed.
        * rendering/RenderMenuList.cpp:
        (WebCore::RenderMenuList::selectElement):
        * rendering/RenderMenuList.h:

2008-03-31  Dan Bernstein  <mitz@apple.com>

        - fix previous attempted fixes

        * platform/qt/TemporaryLinkStubs.cpp:
        (PluginDatabase::getPluginPathsInDirectories):
        * platform/wx/TemporaryLinkStubs.cpp:
        (PluginDatabase::getPluginPathsInDirectories):

2008-03-31  Dan Bernstein  <mitz@apple.com>

        - fix Qt link stubs

        * platform/qt/TemporaryLinkStubs.cpp:
        (PluginDatabase::getPluginPathsInDirectories):
        (PluginDatabase::isPreferredPluginDirectory):

2008-03-31  Dan Bernstein  <mitz@apple.com>

        - try to fix the Wx build

        * platform/wx/TemporaryLinkStubs.cpp:
        (PluginDatabase::getPluginPathsInDirectories):
        (PluginDatabase::isPreferredPluginDirectory):

2008-03-31  Dan Bernstein  <mitz@apple.com>

        - Gtk and Qt build fixes

        * platform/graphics/gtk/FontCustomPlatformData.cpp:
        (WebCore::FontCustomPlatformData::fontPlatformData):
        * platform/graphics/gtk/FontCustomPlatformData.h:
        * platform/graphics/qt/FontCustomPlatformData.cpp:
        (WebCore::FontCustomPlatformData::fontPlatformData):
        * platform/graphics/qt/FontCustomPlatformData.h:

2008-03-31  Dan Bernstein  <mitz@apple.com>

        - Mac build fix

        * platform/graphics/mac/FontCustomPlatformData.cpp:
        (WebCore::FontCustomPlatformData::fontPlatformData):
        * platform/graphics/mac/FontCustomPlatformData.h:

2008-03-31  Dan Bernstein  <mitz@apple.com>

        Reviewed by Darin Adler.

        - fix <rdar://problem/5792638> @font-face with downloadable fonts doesn't work with GDI text

        * WebCore.vcproj/WebCore.vcproj: Added GetEOTHeader.{h,cpp}

        * css/CSSFontFaceSource.cpp:
        (WebCore::CSSFontFaceSource::getFontData): Changed to pass the rendering
        mode to CachedFont::platformDataFromCustomData().

        * loader/CachedFont.cpp:
        (WebCore::CachedFont::platformDataFromCustomData): Added a rendering
        mode parameter which is passed down to
        FontCustomPlatformData::fontPlatformData().

        * loader/CachedFont.h:

        * platform/graphics/win/FontCacheWin.cpp:
        (WebCore::FontCache::fontExists): Changed the number 5 to the named
        constant CLEARTYPE_QUALITY.

        * platform/graphics/win/FontCustomPlatformData.cpp:
        (WebCore::FontCustomPlatformData::~FontCustomPlatformData): Added code
        to delete the embedded font reference.
        (WebCore::FontCustomPlatformData::fontPlatformData): Added code to
        create an HFONT from the embedded font reference and pass it along with
        the CGFontRef to the FontPlatformData constructor. Added a rendering
        mode parameter which is passed down to the FontPlatformData constructor.
        (WebCore::EOTStream::EOTStream): Added this helper class used to feed
        data to TTLoadEmbeddedFont().
        (WebCore::EOTStream::read): Added.
        (WebCore::readEmbedProc): Added this TTLoadEmbeddedFont() callback.
        (WebCore::createUniqueFontName): Added. Creates a unique GUID-derived
        font name. 
        (WebCore::createFontCustomPlatformData): Added code to make the font
        accessible to GDI by creating an Embedded OpenType stream and
        activating it in the process under a globally-unique name.

        * platform/graphics/win/FontCustomPlatformData.h:
        Added a font reference data member which holds the embedded font.
        (WebCore::FontCustomPlatformData::FontCustomPlatformData): Added a
        rendering mode parameter.

        * platform/graphics/win/FontPlatformData.h:
        (WebCore::FontPlatformData::FontPlatformData): Made this class always
        own the CGFontRef and the HFONT by turning these data members into a
        RetainPtr and a RefPtr around a RefCountedHFONT.
        Added an HFONT parameter to the CGFontRef-based constructor.
        Made platformDataInit() private.
        (WebCore::FontPlatformData::hfont):
        (WebCore::FontPlatformData::cgFont):
        (WebCore::FontPlatformData::hash):
        (WebCore::FontPlatformData::RefCountedHFONT::RefCountedHFONT): Added.
        (WebCore::FontPlatformData::RefCountedHFONT::~RefCountedHFONT):
        (WebCore::FontPlatformData::RefCountedHFONT::hfont):
        (WebCore::FontPlatformData::RefCountedHFONT::hash):

        * platform/graphics/win/FontPlatformDataCGWin.cpp:
        (WebCore::FontPlatformData::platformDataInit): Changed to take
        ownership of the CGFontRef created here.
        (WebCore::FontPlatformData::FontPlatformData): Added an HFONT parameter
        and a useGDI flag.

        * platform/graphics/win/FontPlatformDataWin.cpp:
        (WebCore::FontPlatformData::FontPlatformData): Changed to take ownership
        of the HFONT.

        * platform/graphics/win/GetEOTHeader.cpp: Added.
        (WebCore::BigEndianUShort::operator unsigned short):
        (WebCore::BigEndianULong::operator unsigned):
        (WebCore::appendBigEndianStringToEOTHeader):
        (WebCore::getEOTHeader): Added. Creates an Embedded OpenType (.eot)
        header for the given font data, making it suitable as input for
        TTLoadEmbeddedFont.

        * platform/graphics/win/GetEOTHeader.h: Added.

        * platform/graphics/win/SimpleFontDataCGWin.cpp:
        (WebCore::SimpleFontData::platformDestroy): Removed code to delete parts
        of the FontPlatformData, since they are now always owned and managed
        by the FontPlatformData.

2008-03-31  Darin Adler  <darin@apple.com>

        Reviewed by Anders.

        - fix crash seen on buildbot (regression from a recent speedup)

        * html/HTMLDocument.cpp:
        (WebCore::HTMLDocument::createElement): Check validity before calling isLower, since
        that takes care of the null string case.

2008-03-31  Dan Bernstein  <mitz@apple.com>

        Reviewed by John Sullivan.

        - fix <rdar://problem/5741075> Google Maps: cursor and placemarks don't match up

        * platform/win/CursorWin.cpp:
        (WebCore::Cursor::Cursor): Set the 1-bit mask for full-alpha cursors
        to fully opaque. The mask is ignored and the alpha values from the
        32-bit image are used except in the case of a fully-transparent image,
        in which the fully-opaque 1-bit mask is required to get transparency.

2008-03-31  Brady Eidson  <beidson@apple.com>

        Reviewed by Jon Honeycutt

        Move a WebArchive loading check into WebCore
        
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::committedLoad): Don't call the client method if currently loading a WebArchive

2008-03-31  Brady Eidson  <beidson@apple.com>

        Reviewed by Oliver Hunt

        "Turn on" WebArchives for Windows
        
        Thought I'd done this already, but I hadn't!

        * platform/MIMETypeRegistry.cpp:
        (WebCore::initializeSupportedNonImageMimeTypes): Apply known ArchiveFactory MIME types

2008-03-31  Dan Bernstein  <mitz@apple.com>

        Reviewed by Dave Hyatt.

        - fix http://bugs.webkit.org/show_bug.cgi?id=18076
          Box disappears after CSS Transition completes

        * page/AnimationController.cpp: Changed the BLEND_MAYBE_INVALID_COLOR
        macro to not blend two invalid colors.
        * rendering/RenderStyle.cpp:
        (WebCore::StyleBackgroundData::StyleBackgroundData): Added missing
        copying of the m_color data member.

2008-03-31  Julien Chaffraix  <jchaffraix@webkit.org>

        Reviewed by Darin.

        Bug 18177: m_encoding is used twice in XMLHttpRequest
        http://bugs.webkit.org/show_bug.cgi?id=18177

        - Change XMLHttpRequest variable m_encoding to m_responseEncoding.

        - Change send local variable m_encoding to encoding.

        No test case (no functionnal change).

        * platform/network/ResourceResponseBase.h: Removed unused variable.
        * xml/XMLHttpRequest.cpp:
        (WebCore::XMLHttpRequest::send): Changed local m_encoding to encoding.
        (WebCore::XMLHttpRequest::didReceiveResponse): m_encoding -> m_responseEncoding.
        (WebCore::XMLHttpRequest::didReceiveData): Ditto.
        * xml/XMLHttpRequest.h: Change m_encoding to m_responseEncoding to disambiguate
        the name as it is only used for response.

2008-03-27  Adam Roben  <aroben@apple.com>

        Pass the right ExecStates to toJS when creating JS wrappers for
        objects from the inspected page

        We now use an ExecState from the inspected page to create the JS
        wrappers for objects from the inspected page, rather than use an
        ExecState from the Inspector.

        Reviewed by Tim Hatcher.

        * page/InspectorController.cpp:
        (WebCore::getResourceDocumentNode):
        (WebCore::InspectorController::focusNode):
        (WebCore::InspectorController::addDatabaseScriptResource):

2008-03-31  Adam Roben  <aroben@apple.com>

        Stop relying on functions added to prototypes in the Inspector being
        callable on objects from the inspected window

        Reviewed by Tim Hatcher.

        * page/inspector/Console.js:
        (WebInspector.ConsolePanel._formatnode): Use nodeTitleInfo.call(node)
        instead of node.titleInfo().
        * page/inspector/StylesSidebarPane.js: Changed uses of
        getShorthandValue, getShorthandPriority, getLonghandProperties, and
        getUniqueStyleProperties to call them as functions instead of as
        methods on the CSSStyleDeclaration objects.
        * page/inspector/utilities.js: Removed Node.prototype.titleInfo, and
        changed our CSSStyleDeclaration methods to just be standalone
        functions.

2008-03-26  Adam Roben  <aroben@apple.com>

        Fix an exception while adding a message to the console

        Reviewed by Mark Rowe.

        * page/inspector/ConsolePanel.js: Don't call addMessageToSource if the
        panel has no such method. This can happen if we get a message for,
        e.g., a Database.

2008-03-31  Brady Eidson  <beidson@apple.com>

        Reviewed by Darin and Mitz's rubber stamp

        Remove dataForArchivedSelection(WebCore::Frame*) from the EditorClient - only usage is now directly in WebCore

        * page/EditorClient.h:
        * svg/graphics/SVGImageEmptyClients.h:

        * platform/mac/PasteboardMac.mm:
        (WebCore::Pasteboard::writeSelection): Make the archive and get the data directly

2008-03-31  Brady Eidson  <beidson@apple.com>

        Reviewed by Mitz Pettel

        Fix for http://bugs.webkit.org/show_bug.cgi?id=18183

        Despite the bug reporter's instructions, I have still not been able to actually reproduce this crash and 
        therefore don't know how to make a layout test for it.

        * loader/archive/ArchiveResource.cpp:
        (WebCore::ArchiveResource::response): Fix potential null dereference

2008-03-29  Adam Roben  <aroben@apple.com>

        Fix Bug 18208: Acid3 test 65 takes >33ms due to plugin refreshing on
        Windows

        <http://bugs.webkit.org/show_bug.cgi?id=18208>

        We now keep track of all the plugin paths found each time refresh() is
        called. We'll only instantiate PluginPackages if there are new paths
        or paths with changed timestamps since the last time refresh() was
        called.

        Reviewed by Darin Adler and Anders Carlsson.

        * plugins/PluginDatabase.cpp:
        (WebCore::PluginDatabase::refresh):
          - Only instantiate PluginPackages if there is a new path or a path
            with a changed timestamp since we last ran refresh().
          - Cache the set of plugin paths found and their timestamps for the
            next call to refresh().
          - Only re-register MIME types if our set of plugins changed.
        * plugins/PluginDatabase.h: Added a new member to cache plugin paths
        and their timestamps.

2008-03-29  Adam Roben  <aroben@apple.com>

        Separate filesystem crawling from PluginPackage instantiation

        Part of Bug 18208: Acid3 test 65 takes >33ms due to plugin refreshing
        on Windows
        <http://bugs.webkit.org/show_bug.cgi?id=18208>

        refresh() is now the only place where PluginPackages are instantiated.
        refresh() now asks for a set of plugins that no longer exist on disk,
        and the set of all plugin files in our plugin directories. Using these
        two sets we can update our instantiated plugins without copying any
        HashSets. The code in refresh() and in the platform-specific methods
        to crawl the filesystem is now quite a bit simpler.

        PluginDatabase now stores both a PluginSet and a HashMap that maps
        plugin paths to PluginPackages. This allows us to quickly determine
        whether we already have a PluginPackage instantiated for a particular
        path. The new add/remove methods handle the modification of these two
        collections.

        A nice side effect of all this is that refresh() no longer copies any
        HashSets.

        Reviewed by Mitz Pettel.

        * plugins/PluginDatabase.cpp:
        (WebCore::PluginDatabase::refresh): Unload any plugins that have been
        deleted from disk, and add any plugins that either weren't installed
        last time, or have changed since last time.
        (WebCore::PluginDatabase::getDeletedPlugins): Added.
        (WebCore::PluginDatabase::add): Added. Returns whether or not the
        PluginPackage was actually added to the database (duplicates won't be
        added).
        (WebCore::PluginDatabase::remove): Added.
        * plugins/PluginDatabase.h:
        * plugins/PluginPackage.h:
        (WebCore::PluginPackage::path): Added.
        (WebCore::PluginPackage::lastModified): Added.
        * plugins/gtk/PluginDatabaseGtk.cpp:
        (WebCore::PluginDatabase::getPluginPathsInDirectories): Renamed from
        getPluginsInDirectories. Now fills a HashSet of Strings instead of
        instantiated PluginPackages.
        * plugins/win/PluginDatabaseWin.cpp:
        (WebCore::addPluginPathsFromRegistry): Ditto.
        (WebCore::PluginDatabase::getPluginPathsInDirectories): Ditto.

2008-03-29  Adam Roben  <aroben@apple.com>

        Change getPluginsInDirectories to use an out parameter

        This avoids copying a HashSet.

        Reviewed by Mitz Pettel.

        * plugins/PluginDatabase.cpp:
        (WebCore::PluginDatabase::refresh):
        * plugins/PluginDatabase.h:
        * plugins/gtk/PluginDatabaseGtk.cpp:
        (WebCore::PluginDatabase::getPluginsInDirectories):
        * plugins/win/PluginDatabaseWin.cpp:
        (WebCore::PluginDatabase::getPluginsInDirectories):

2008-03-29  Adam Roben  <aroben@apple.com>

        Make some PluginPackage methods return const String&

        Reviewed by Mitz Pettel.

        * plugins/PluginPackage.h:

2008-03-29  Adam Roben  <aroben@apple.com>

        Rename PluginDatabase's "PluginPaths" to "PluginDirectories"

        The code expects these paths to all be directories, so it seems good
        to refer to them as such.

        This patch just changes "Paths" to "Directories" and "Path" to
        "Directory".

        Reviewed by Mitz Pettel.

        * platform/qt/TemporaryLinkStubs.cpp:
        * platform/wx/TemporaryLinkStubs.cpp:
        * plugins/PluginDatabase.cpp:
        (WebCore::PluginDatabase::installedPlugins):
        (WebCore::PluginDatabase::refresh):
        * plugins/PluginDatabase.h:
        (WebCore::PluginDatabase::setPluginDirectories):
        * plugins/gtk/PluginDatabaseGtk.cpp:
        (WebCore::PluginDatabase::getPluginsInDirectories):
        * plugins/win/PluginDatabaseWin.cpp:
        (WebCore::PluginDatabase::getPluginsInDirectories):
        (WebCore::safariPluginsDirectory):
        (WebCore::PluginDatabase::defaultPluginDirectories):
        (WebCore::PluginDatabase::isPreferredPluginDirectory):
        * plugins/win/PluginPackageWin.cpp:
        (WebCore::PluginPackage::compare):

2008-03-29  Adam Roben  <aroben@apple.com>

        Remove PlatformFileTime

        This typedef is time_t on all platforms, so we can just get rid of the
        typedef.

        Reviewed by Mitz Pettel.

        * platform/FileSystem.h:
        * plugins/PluginPackage.cpp:
        * plugins/PluginPackage.h:

2008-03-29  Adam Roben  <aroben@apple.com>

        Change PlatformFileTime on Windows to be time_t

        This matches other platforms and our existing functions in
        FileSystem.h. It will also let us get rid of PlatformFileTime
        altogether.

        Reviewed by Mitz Pettel.

        * platform/FileSystem.h: Change PlatformFileTime to time_t on Windows.
        * plugins/win/PluginDatabaseWin.cpp:
        (WebCore::addPluginsFromRegistry): Use getFileModificationTime to get
        the modification time to pass to PluginPackage::create.
        (WebCore::PluginDatabase::getPluginsInPaths): Ditto.
        * plugins/win/PluginPackageWin.cpp:
        (WebCore::PluginPackage::hash): Updated to use m_lastModified as a
        time_t.
        (WebCore::PluginPackage::equal): Ditto.

2008-03-29  Adam Roben  <aroben@apple.com>

        Make PluginPackage work like our other RefCounted classes

        PluginPackage now starts with a ref count of 1, and its createPackage
        method now returns a PassRefPtr instead of a raw pointer.

        Reviewed by Darin Adler.

        * plugins/PluginPackage.cpp:
        (WebCore::PluginPackage::PluginPackage): Removed explicit call to the
        RefCounted constructor so that we'll start with a ref count of 1.
        (WebCore::PluginPackage::createPackage): Changed to return a
        PassRefPtr.
        * plugins/PluginPackage.h:
        * plugins/gtk/PluginDatabaseGtk.cpp:
        (WebCore::PluginDatabase::getPluginsInPaths): Changed to store the
        newly-created PluginPackage in a RefPtr.
        * plugins/win/PluginDatabaseWin.cpp:
        (WebCore::addPluginsFromRegistry): Ditto.
        (WebCore::PluginDatabase::getPluginsInPaths): Ditto.

2008-03-29  Adam Roben  <aroben@apple.com>

        Fix Bug 18214: WebKit will sometimes load duplicate plugins

        <http://bugs.webkit.org/show_bug.cgi?id=18214>

        We now compare 3 things to determine if two PluginPackages are equal:
          1) Name
          2) Description
          3) Supported MIME types

        This matches Gecko's equality logic for plugins (implemented in
        nsPluginTag::Equals).

        Reviewed by Darin Adler.

        * plugins/win/PluginPackageWin.cpp:
        (WebCore::PluginPackage::hash): Use the above-mentioned 3 criteria to
        calculate the hash.
        (WebCore::PluginPackage::equal): Use the above-mentioned 3 criteria to
        determine equality.

2008-03-31  Simon Hausmann  <hausmann@webkit.org>

        Fix the Qt build.

        ResourceHandleInternal.h references ResourceHandle::fireFailure, so include
        ResourceHandle.h.

        * platform/network/ResourceHandleInternal.h:

2008-03-31  Rob Buis  <buis@kde.org>

        Reviewed by Darin.

        http://bugs.webkit.org/show_bug.cgi?id=15595
        marker property doesn't show up correctly as "shorthand" in inspector

        Make sure parsing the marker property sets the individual
        marker properties as implicit with marker as shorthand.
        Also let CSSStyleDecleration::getPropertyValue return
        the correct value for the marker property.

        * css/CSSMutableStyleDeclaration.cpp:
        (WebCore::CSSMutableStyleDeclaration::getPropertyValue):
        * css/CSSParser.cpp:
        * css/CSSParser.h:
        (WebCore::ShorthandScope::ShorthandScope):
        (WebCore::ShorthandScope::~ShorthandScope):
        * css/SVGCSSParser.cpp:
        (WebCore::CSSParser::parseSVGValue):

2008-03-30  Eric Seidel  <eric@webkit.org>

        Reviewed by Oliver.

        Make AMatthews life easier -- fix the SVG_FILTERS build

        Build fix only, no tests.

        * svg/SVGComponentTransferFunctionElement.cpp:
        (WebCore::SVGComponentTransferFunctionElement::SVGComponentTransferFunctionElement):
        * svg/SVGFEColorMatrixElement.cpp:
        (WebCore::SVGFEColorMatrixElement::SVGFEColorMatrixElement):
        * svg/SVGFEDiffuseLightingElement.cpp:
        * svg/SVGFEGaussianBlurElement.cpp:
        * svg/SVGFEImageElement.cpp:
        (WebCore::SVGFEImageElement::SVGFEImageElement):
        * svg/SVGFESpecularLightingElement.cpp:
        * svg/SVGFETurbulenceElement.cpp:
        * svg/SVGFilterElement.cpp:
        * svg/SVGFilterPrimitiveStandardAttributes.cpp:
        * svg/graphics/filters/SVGFEBlend.cpp:
        * svg/graphics/filters/SVGFEComponentTransfer.cpp:
        * svg/graphics/filters/SVGFEComposite.cpp:
        * svg/graphics/filters/SVGFEDiffuseLighting.cpp:
        * svg/graphics/filters/SVGFEGaussianBlur.cpp:
        * svg/graphics/filters/SVGFEImage.cpp:
        * svg/graphics/filters/SVGFEMerge.cpp:
        * svg/graphics/filters/SVGFEMorphology.cpp:
        * svg/graphics/filters/SVGFEOffset.cpp:
        * svg/graphics/filters/SVGFESpecularLighting.cpp:
        * svg/graphics/filters/SVGFETurbulence.cpp:

2008-03-30  Dan Bernstein  <mitz@apple.com>

        Reviewed by Sam Weinig.

        - fix http://bugs.webkit.org/show_bug.cgi?id=18115
          REGRESSION (r31250): Incomplete repaint of GoogleReader sidebar while reading unread posts

        Test: fast/repaint/lines-with-layout-delta.html

        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::repaintRectangle): Made this method take layout
        delta into account.

2008-03-30  Dan Bernstein  <mitz@apple.com>

        Reviewed by Maciej Stachowiak.

        - fix assertion failure in CSSParser.cpp's equalIgnoringCase() when
          parsing certain transforms.

        Test: fast/css/transform-function-lowercase-assert.html

        * css/CSSParser.cpp:
        (WebCore::TransformOperationInfo::TransformOperationInfo): Changed to
        always pass a lowercase string as the second argument of
        equalIgnoringCase().

2008-03-30  Mark Rowe  <mrowe@apple.com>

        ARM build fix.

        * platform/text/AtomicString.cpp:
        (WebCore::equal): Use correct variable name.

2008-03-30  Hiroyuki Ikezoe  <poincare@ikezoe.net>

        Reviewed by Alp Toker.

        http://bugs.webkit.org/show_bug.cgi?id=18036
        Rendering invalid japanese characters with pango backend.

        * platform/graphics/gtk/FontPlatformDataPango.cpp:
        (FontPlatformData::FontPlatformData): Set PangoFontDescription for
        PangoContext explicitly to use proper font.

2008-03-30  Rob Buis  <buis@kde.org>

        Reviewed by Oliver.

        http://bugs.webkit.org/show_bug.cgi?id=17633
        SVG: modifying x & y attribute of text element from JS fails

        Make SVG text relayout when x, y attribute is changed from js.

        * svg/SVGTextContentElement.cpp:
        (WebCore::SVGTextContentElement::isKnownAttribute):
        * svg/SVGTextContentElement.h:
        * svg/SVGTextElement.cpp:
        (WebCore::SVGTextElement::svgAttributeChanged):
        * svg/SVGTextElement.h:
        * svg/SVGTextPositioningElement.cpp:
        (WebCore::SVGTextPositioningElement::isKnownAttribute):
        * svg/SVGTextPositioningElement.h:

2008-03-28  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Oliver.

        - yet still more bindings speedup
        
        Make AtomicString straight from UString in handcoded bindings

        * bindings/js/JSElementCustom.cpp:
        (WebCore::JSElement::setAttribute):
        (WebCore::JSElement::setAttributeNS):
        * dom/Document.cpp:
        (WebCore::Document::createElement):
        * dom/Document.h:
        * html/HTMLDocument.cpp:
        (WebCore::HTMLDocument::createElement):
        * html/HTMLDocument.h:

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-29  Darin Adler  <darin@apple.com>

        Reviewed by Mitz.

        - more bindings speedup

        When I changed the temporary variables to be UString that means that the
        valueToString functions also need to return UString to avoid converting
        from UString to String twice.

        * bindings/js/kjs_binding.cpp:
        (WebCore::valueToStringWithNullCheck): Changed return value to UString.
        (WebCore::valueToStringWithUndefinedOrNullCheck): Ditto.
        * bindings/js/kjs_binding.h: Ditto.

2008-03-29  Darin Adler  <darin@apple.com>

        Reviewed by Sam.

        * DerivedSources.make: Removed temporary remove-stray-JSRGBColor build rule.

2008-03-29  Darin Adler  <darin@apple.com>

        Reviewed by Sam.

        - tweak handling of the class attribute to speed up code that
          sets it but never needs to parse it

        6% speedup of Acid3 test 26

        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::matchRules): Change to use non-virtual
        classNames function since the hasClass bit can only be set for a
        StyledElement.
        (WebCore::CSSStyleSelector::checkOneSelector): Ditto. Also
        streamlined the code a bit for the tag matching as well.

        * dom/ClassNames.cpp:
        (WebCore::hasNonASCIIOrUpper): Added. This function does what other
        callers seem to want isLower() to do. We should merge this with
        isLower() in a subsequent cleanup pass.
        (WebCore::ClassNamesData::createVector): Renamed from parseClassAttribute.
        Turns the string into a vector.
        (WebCore::ClassNamesData::containsAll): Added. Used by getElementsByClassName.

        * dom/ClassNames.h: Added a separate ClassNameData class so we could hold
        the string and case folding flag as well as the vector. Changed ClassNames
        to have a set function rather than a parseClassAttribute function. Removed
        the "static" from isClassWhitespace. There's no reason to ask for internal linkage.

        * dom/ClassNodeList.cpp:
        (WebCore::ClassNodeList::ClassNodeList): Use constructor instead of the
        parseClassAttribute function.
        (WebCore::ClassNodeList::nodeMatches): Get rid of unnneeded isElementNode
        check, since hasClass will only be true for StyledElement nodes. Use the new
        containsAll function in ClassNames instead of having a loop here.

        * dom/ClassNodeList.h: Removed unneeded forward declaration.

        * dom/Document.cpp: Removed unneeded include.

        * dom/Element.cpp:
        (WebCore::Element::cloneNode): Changed code to copy attributes to use a
        function call instead of the assignment operator. This paves the way to
        making the function more efficient, using a virtual function.
        (WebCore::Element::setAttributeMap): Updated for PassRefPtr and for name change
        (element -> m_element).
        (WebCore::Element::createAttributeMap): Changed to use create function instead of
        calling the constructor directly.
        * dom/Element.h: Removed unneeded virtual getClassNames function.
        Changed the argument to setAttributeMap to be a PassRefPtr.

        * dom/NamedAttrMap.cpp:
        (WebCore::NamedAttrMap::NamedAttrMap): Updated for name change (element -> m_element).
        (WebCore::NamedAttrMap::getNamedItem): Ditto.
        (WebCore::NamedAttrMap::removeNamedItem): Ditto.
        (WebCore::NamedAttrMap::setNamedItem): Ditto.
        (WebCore::NamedAttrMap::item): Ditto.
        (WebCore::NamedAttrMap::detachFromElement): Ditto.
        (WebCore::NamedAttrMap::setAttributes): Renamed this from the assignment operator.
        (WebCore::NamedAttrMap::addAttribute): Ditto.
        (WebCore::NamedAttrMap::removeAttribute): Ditto.
        (WebCore::NamedAttrMap::isReadOnlyNode): Ditto.
        * dom/NamedAttrMap.h: Removed the copy constructor and assignment operator and added
        a new function, setAttributes, possibly to be made virtual in the future. Made
        isReadOnlyNode non-virtual. Renamed element -> m_element. Made constructor protected
        and added a create function.

        * dom/NamedMappedAttrMap.cpp:
        (WebCore::NamedMappedAttrMap::NamedMappedAttrMap): Changed constructor parameter to
        take a StyledElement.
        (WebCore::NamedMappedAttrMap::setClass): Changed to use the new set function.

        * dom/NamedMappedAttrMap.h: Made constructor private and added a create function.
        Replaced theparseClassAttribute function with clearClass and setClass functions.
        Replaced the getClassNames function with a classNames function returning a reference
        instead of a pointer.

        * dom/NamedNodeMap.h: Changed to start refcount at 1 instead of 0. Removed unneeded
        virtual function isReadOnlyNode.

        * dom/StyledElement.cpp:
        (WebCore::StyledElement::parseMappedAttribute): Rewrote class attribute handling to
        use new function names and took out uneeded special case for null attribute.
        (WebCore::StyledElement::createAttributeMap): Changed to use create function instead
        of a direct call to new.

        * dom/StyledElement.h: Replaced the virtual getClassNames function with a non-virtual
        inline classNames function.

        * html/HTMLElement.cpp:
        (WebCore::HTMLElement::cloneNode): Changed code to copy attributes to use a
        function call instead of the assignment operator.

        * html/HTMLTokenizer.cpp:
        (WebCore::Token::addAttribute): Use create function instead of a a direct call
        to new.

        * html/HTMLViewSourceDocument.cpp:
        (WebCore::HTMLViewSourceDocument::createContainingTable): Use RefPtr and the new
        create function.
        (WebCore::HTMLViewSourceDocument::addViewSourceToken): Ditto.
        (WebCore::HTMLViewSourceDocument::addSpanWithClassName): Ditto.
        (WebCore::HTMLViewSourceDocument::addLine): Ditto.
        (WebCore::HTMLViewSourceDocument::addText): Ditto.
        (WebCore::HTMLViewSourceDocument::addLink): Ditto.
        * html/HTMLViewSourceDocument.h: Ditto.

        * svg/SVGUseElement.cpp:
        (WebCore::SVGUseElement::expandSymbolElementsInShadowTree): Changed code to copy
        attributes to use a function call instead of the assignment operator.
        (WebCore::SVGUseElement::transferUseAttributesToReplacedElement): Ditto.

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-28  Stephanie  <slewis@apple.com>

        Fix 64bit build

        * WebCore.LP64.exp:
        * loader/archive/cf/LegacyWebArchiveMac.mm:
        (WebCore::createResourceResponseFromMacArchivedData):

2008-03-28  Steve Falkenburg  <sfalken@apple.com>

        Enabled LTCG on files within "page".

        Rubber stamped by Oliver.

        * WebCore.vcproj/WebCore.vcproj:

2008-03-28  Dan Bernstein  <mitz@apple.com>

        Reviewed by Dave Hyatt.

        - fix a percentage background position regression from r31389

        Test: fast/backgrounds/background-position-1.html

        * rendering/Length.h:
        (WebCore::Length::calcValue): Divide by 100.
        (WebCore::Length::calcMinValue): Ditto.

2008-03-28  David Hyatt  <hyatt@apple.com>

        Back out the Ahem font antialiasing hack, since it is now no longer required for LCD antialiased text
        to match the reference rendering on Acid 3.

        * platform/graphics/SimpleFontData.h:
        * platform/graphics/mac/FontMac.mm:
        (WebCore::Font::drawGlyphs):
        * platform/graphics/mac/SimpleFontDataMac.mm:
        (WebCore::SimpleFontData::platformInit):
        * platform/graphics/win/FontCGWin.cpp:
        (WebCore::Font::drawGlyphs):
        * platform/graphics/win/SimpleFontDataCGWin.cpp:
        (WebCore::SimpleFontData::platformInit):
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::positionNewFloats):

2008-03-28  Brady Eidson  <beidson@apple.com>

        Reviewed by Darin Adler

        More Kit->Core WebArchive changes.

        Create an archive from the current selection in a frame

        * WebCore.base.exp:

        * loader/archive/cf/LegacyWebArchive.cpp:
        (WebCore::LegacyWebArchive::createFromSelection):
        * loader/archive/cf/LegacyWebArchive.h:

2008-03-28  Kevin McCullough  <kmccullough@apple.com>

        - Somehow managed to duplicate code :(

        * xml/XMLHttpRequest.cpp:
        (WebCore::XMLHttpRequest::didFinishLoading):

2008-03-28  Kevin McCullough  <kmccullough@apple.com>

        - Missed some changes in previous checkin.

        * xml/XMLHttpRequest.cpp:
        (WebCore::XMLHttpRequest::send): Get identifier from synchronous loader.
        (WebCore::XMLHttpRequest::didFinishLoading):

2008-03-28  Kevin McCullough  <kmccullough@apple.com>

        Reviewed by Adam.

        -<rdar://problem/5712804> XMLHttpRequests do not show response contents, preview images (14313)
        -<rdar://problem/5712931> XMLHttpRequests should be shown separately and grouped (14315)
        -<rdar://problem/5732836> XMLHttpRequest: Inspector should show network activity/XHR in Console (17233)
        - Send the XMLHttpRequest data to the Inspector Controller.

        * loader/FrameLoader.cpp: Return the identifier for this resource since we need it in the XHR case.
        (WebCore::FrameLoader::loadResourceSynchronously):
        * loader/FrameLoader.h: Ditto.
        * page/InspectorController.cpp:
        (WebCore::XMLHttpRequestResource::XMLHttpRequestResource): We only need the data since the type will
        be XHR and the encoding is not used (we decoded earlier).
        (WebCore::XMLHttpRequestResource::~XMLHttpRequestResource): Locking is necessary when setting and clearing
        the KJS::UString::Rep.
        (WebCore::InspectorResource::setXMLHttpRequestProperties):
        (WebCore::InspectorResource::sourceString): Return the decoded source.
        (WebCore::addSourceToFrame): No longer do the decoding here, it has been encapsulated in the InspectorResource.
        (WebCore::InspectorController::resourceRetrievedByXMLHttpRequest):
        * page/InspectorController.h: Pass a UString instead of copying to a WebCore::String.  In case we
        never ask for the string's contents this will save us an extra copy.
        * xml/XMLHttpRequest.cpp:
        (WebCore::XMLHttpRequest::send): In the synchronous load case we normally do not keep the identifier
        but we need it to find the InspectorResource in order to tell it that it was loaded via XHR.
        (WebCore::XMLHttpRequest::didFinishLoading): Tell the InspectorController that its resource was loaded
        via XHR.
        * xml/XMLHttpRequest.h: Ditto.

2008-03-28  Brady Eidson  <beidson@apple.com>

        Reviewed by Sam Weinig

        WebArchive saga continues - Can now make archives from ranges in WebCore

        Again, previous layout test coverage exercised this code

        * WebCore.base.exp:

        * editing/markup.cpp:
        (WebCore::createFullMarkup): Added a "markup from range" variant that copies the previous WebKit implementation
        * editing/markup.h:

        * loader/archive/cf/LegacyWebArchive.cpp:
        (WebCore::LegacyWebArchive::create):
        * loader/archive/cf/LegacyWebArchive.h:

2008-03-28  Stephanie Lewis  <slewis@apple.com>

        windows build fix.

        * platform/win/MainThreadWin.cpp:
        (WebCore::initializeThreadingAndMainThread):

2008-03-28  Brady Eidson  <beidson@apple.com>

        Reviewed by Sam Weinig

        More Kit->Core webarchive code movement

        * WebCore.base.exp:
        * editing/markup.cpp:
        (WebCore::createFullMarkup): Replacement for [DOMNode markupString], creating full markup at this node including 
          the document type string, which the WebKit implementation did indirectly
        * editing/markup.h:

2008-03-28  Darin Adler  <darin@apple.com>

        Reviewed by Maciej.

        - cut down on copying and refcount churn a little by using references a bit more for
          KURL and String

        * bindings/js/JSXMLHttpRequest.cpp:
        (WebCore::jsXMLHttpRequestPrototypeFunctionOpen): Use const KURL& instead of KURL.
        * css/StyleSheet.h:
        (WebCore::StyleSheet::href): Return const String& instead of String.
        (WebCore::StyleSheet::title): Ditto.
        * dom/Document.cpp:
        (WebCore::Document::completeURL): Use const KURL* for a local variable instead of
        KURL to avoid copying the KURL.
        * dom/Element.cpp:
        (WebCore::Element::baseURI): Use const KURL& instead of KURL.
        * html/HTMLAnchorElement.cpp:
        (WebCore::HTMLAnchorElement::hostname): Ditto.
        * html/HTMLFrameElementBase.cpp:
        (WebCore::HTMLFrameElementBase::isURLAllowed): Ditto.
        * html/HTMLKeygenElement.cpp: Removed unneeded include of KURL.
        * page/ContextMenuController.cpp:
        (WebCore::ContextMenuController::contextMenuItemSelected): Get rid of temporary
        KURL.
        * platform/SecurityOrigin.cpp:
        (WebCore::SecurityOrigin::createForFrame): Use const KURL& instead of KURL.

2008-03-28  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Sam Weinig.

        Fix a dtoa thread safety issue.

        * ForwardingHeaders/kjs/InitializeThreading.h: Added.
        * platform/MainThread.cpp:
        * platform/MainThread.h:
        (WebCore::initializeThreadingAndMainThread): Call KJS::initializeThreading instead of its
        WTF counterpart.

2008-03-28  Brent Fulgham  <bfulgham@gmail.com>

        Reviewed by Maciej, landed by Brady

        Correct build regression (http://bugs.webkit.org/show_bug.cgi?id=18148)

        * platform/graphics/win/GraphicsContextCairoWin.cpp:
        (WebCore::GraphicsContext::getWindowsContext):
        (WebCore::GraphicsContext::releaseWindowsContext):

2008-03-28  Brady Eidson  <beidson@apple.com>

        Reviewed by Darin

        "Yet another transitional step" to empty out WebKit-based code for archiving.

        With this patch, the key operation of "Creating a WebArchive rooted at a single Node" takes place
        entirely within WebCore, and opens the door to saving WebArchives on Windows.

        This is another "zero behavior change" patch, and current editing/ and webarchive/ layout tests
        covered the relevant code

        * WebCore.base.exp:
        * loader/archive/cf/LegacyWebArchive.cpp:
        (WebCore::LegacyWebArchive::create):
        * loader/archive/cf/LegacyWebArchive.h:

2008-03-28  Jasper Bryant-Greene  <jasper@unix.geek.nz>

        Reviewed by Alp Toker.

        http://bugs.webkit.org/show_bug.cgi?id=18061
        PlatformScrollBarGtk attempts to allocate negative width and/or height for widgets

        Missing clampNegativeToZero() call meant that we tried to allocate widgets with negative width and/or height.

        * platform/gtk/PlatformScrollBarGtk.cpp:
        (PlatformScrollbar::geometryChanged):

2008-03-28  Brady Eidson  <beidson@apple.com>

        Reviewed by Darin

        Using convertUTF16ToUTF8() from WTF, add a helper function that gives you a UTF8 SharedBuffer
        created from a String.

        * ForwardingHeaders/wtf/unicode/UTF8.h: Added.
        * platform/text/PlatformString.h:
        * platform/text/String.cpp:
        (WebCore::utf8Buffer):

2008-03-28  Darin Adler  <darin@apple.com>

        Reviewed by Adam.

        - eliminate a tiny bit of unnecessary refcount churn

        * bindings/js/JSEventTargetBase.cpp:
        (WebCore::eventNameForPropertyToken): Return const AtomicString&.
        * bindings/js/JSEventTargetBase.h:
        (WebCore::JSEventTargetBase::getValueProperty): Update for above change.
        (WebCore::JSEventTargetBase::putValueProperty): Ditto.

2008-03-28  Simon Hausmann  <hausmann@webkit.org>

        Fix the Qt build.

        * rendering/Length.h: Include wtf/MathExtras.h for round().

2008-03-28  David Hyatt  <hyatt@apple.com>

        Fix a bug where background-position truncates instead of rounding when it evaluates to fractional
        pixel values.  This matches other browsers.

        Reviewed by maciej

        Added fast/backgrounds/background-position-rounding.html

        * rendering/Length.h:
        (WebCore::Length::calcValue):
        (WebCore::Length::calcMinValue):
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::calculateBackgroundImageGeometry):

2008-03-27  Kevin Ollivier  <kevino@theolliviers.com>

        wx build fix. Return a default value for operator == 
        when !USE(WXGC) (not implemented in that case).

        * platform/graphics/wx/AffineTransformWx.cpp:
        (WebCore::AffineTransform::operator== ):

2008-03-27  Maciej Stachowiak  <mjs@apple.com>

        - fix build

        * svg/SVGGlyphMap.h:
        (WebCore::GlyphMapNode::create):

2008-03-27  Brady Eidson  <beidson@apple.com>

        Forgot a small requested change before committing

        * loader/DocumentLoader.cpp:
        (WebCore::DocumentLoader::mainResource):

2008-03-27  Brady Eidson  <beidson@apple.com>

        Reviewed by Adam Roben

        Move [WebDataSource mainResource] and [WebDataSource subresources] down into WebCore
        as the push to core-ify WebArchives continues.

        This patch also introduces a behavior change.  WebCore allows ArchiveResources with null or empty data.  
        WebKit has had the inexplicable distinction of allowing empty Data in a WebResource, but not null.  
        Since WebResource is API, I decided to leave it be to avoid a behavior change.  But internally created resources 
        (as in "while archiving a page") are accepting of null or empty data.

        This actually fixes a bug where not all subframes are archived, and resulted in a layout test change.

        * WebCore.base.exp:
        * loader/DocumentLoader.cpp:
        (WebCore::DocumentLoader::archiveResourceForURL): Make this const
        (WebCore::DocumentLoader::mainResource):
        (WebCore::DocumentLoader::subresource): Make this const and relocate
        (WebCore::DocumentLoader::getSubresources):
        * loader/DocumentLoader.h:

2008-03-27  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Darin.

        - fixed many buildbot leaks in glyph map code

        * svg/SVGGlyphMap.h:
        (WebCore::GlyphMapNode::create): Use explicit create pattern, to avoid overreffing and therefore leaking
        these objects.
        (WebCore::SVGGlyphMap::add): Call create instead of using new.

2008-03-27  Maciej Stachowiak  <mjs@apple.com>

        Rubber stamped by Oliver.

        - re-fix Acid3, some code was incorrectly moved when fixing the Qt build

        * rendering/SVGRootInlineBox.cpp:
        (WebCore::SVGRootInlineBox::buildLayoutInformationForTextBox):

2008-03-27  Simon Hausmann  <hausmann@webkit.org>

        Fix compilation against Qt 4.4 and one missing SVG_FONTS #ifdef.

        * platform/graphics/qt/FontQt.cpp:
        (WebCore::Font::floatWidth): Forgot to adjust this signture for Qt 4.4.
        * bindings/js/JSSVGElementWrapperFactory.cpp: Added a missing #ifdef
        for SVG_FONTS

2008-03-27  Simon Hausmann  <hausmann@webkit.org>

        Reviewed by Eric Seidel.

        Fix the Qt build and the build without ENABLE(SVG_FONTS)

        * WebCore.pro: Removed ElementTimeControl.idl as it's ObjC only and
        removed some SVG_FONTS specific idl files from IDL_BINDINGS for now
        * bindings/js/JSSVGElementWrapperFactory.cpp: altGlyph is
        ENABLE(SVG_FONTS) only
        * platform/graphics/qt/FontQt.cpp:
        (WebCore::Font::floatWidth): Adjust the function signature to Font.h
        * rendering/SVGRootInlineBox.cpp:
        (WebCore::SVGRootInlineBox::buildLayoutInformationForTextBox): Fix
        compilation without SVG_FONTS
        * svg/SVGAltGlyphElement.cpp: Compile only if ENABLE(SVG_FONTS)
        * svg/SVGAltGlyphElement.h: Ditto
        * svg/svgtags.in: hkern and altGlyph are SVG_FONTS only.
        * svg/SVGTSpanElement.cpp:
        (WebCore::SVGTSpanElement::childShouldCreateRenderer): Compile without
        SVG_FONTS
        * svg/SVGTextElement.cpp:
        (WebCore::SVGTextElement::childShouldCreateRenderer): Ditto
        * svg/SVGTextPathElement.cpp:
        (WebCore::SVGTextPathElement::childShouldCreateRenderer):

2008-03-26  Timothy Hatcher  <timothy@apple.com>

        Rename some Inspector files to facilitate the up-coming UI refresh changes.

        http://bugs.webkit.org/show_bug.cgi?id=17773

        Rubber-stamped by Adam Roben.

        * WebCore.vcproj/WebCore.vcproj:
        * page/inspector/Console.js: Copied from page/inspector/ConsolePanel.js.
        * page/inspector/ConsolePanel.js: Removed.
        * page/inspector/DocumentPanel.js: Removed.
        * page/inspector/ElementsPanel.js: Copied from page/inspector/DocumentPanel.js.
        * page/inspector/FontPanel.js: Removed.
        * page/inspector/FontView.js: Copied from page/inspector/FontPanel.js.
        * page/inspector/ImagePanel.js: Removed.
        * page/inspector/ImageView.js: Copied from page/inspector/ImagePanel.js.
        * page/inspector/NetworkPanel.js: Removed.
        * page/inspector/ResourcePanel.js: Removed.
        * page/inspector/ResourceView.js: Copied from page/inspector/ResourcePanel.js.
        * page/inspector/ResourcesPanel.js: Copied from page/inspector/NetworkPanel.js.
        * page/inspector/SourcePanel.js: Removed.
        * page/inspector/SourceView.js: Copied from page/inspector/SourcePanel.js.
        * page/inspector/WebKit.qrc:
        * page/inspector/inspector.html:

2008-03-26  Steve Falkenburg  <sfalken@apple.com>

        Enable LTCG on css, dom files in WebCore

        Reviewed by Stephanie.

        * WebCore.vcproj/WebCore.vcproj:

2008-03-26  Stephanie Lewis  <slewis@apple.com>

        Fix Windows Build

        * WebCore.vcproj/WebCore.vcproj:

2008-03-26  Mark Rowe  <mrowe@apple.com>

        Speculative GTK build fix.

        * GNUmakefile.am:

2008-03-26  Mark Rowe  <mrowe@apple.com>

        Mac build fix.

        * WebCore.base.exp:  Remove nonexistent symbol from the export file.

2008-03-26  Sam Weinig  <sam@webkit.org>

        Try and fix Gtk+ again.

        * GNUmakefile.am:

2008-03-26  Dan Bernstein  <mitz@apple.com>

        Reviewed by Dave Hyatt.

        - fix <rdar://problem/5816522> REGRESSION (r30111-30112): Tahoe web cam website has some text in Chinese or japanese

        * html/HTMLParser.cpp:
        (WebCore::HTMLParser::insertNode): Added call to beginParsingChildren()
        on the new node.
        (WebCore::HTMLParser::handleError): Ditto.
        (WebCore::HTMLParser::reopenResidualStyleTags): Ditto.
        (WebCore::HTMLParser::pushBlock): Removed incorrect call to
        beginParsingChildren() on the current node.
        * manual-tests/applet-finish-parsing-children.html: Added.
        * manual-tests/resources/DrawMessage.class: Added.

2008-03-26  Brady Eidson  <beidson@apple.com>

        Reviewed by Darin

        When we create a WebArchive, we walk every node from some starting point, asking each node
        along the way "What are your subresource URLs?"

        That logic is currently in DOMNode in WebKitMac - this patch moves that ability down into
        WebCore::Node

        * WebCore.base.exp:
        
        * dom/Node.cpp:
        (WebCore::Node::getSubresourceURLs):
        (WebCore::Node::getSubresourceAttributeStrings):  Virtual and empty.  Subclasses of Node that have 
          subresources will override it.

        * dom/ProcessingInstruction.cpp:
        (WebCore::ProcessingInstruction::getSubresourceAttributeStrings):
        * dom/ProcessingInstruction.h:
        * html/HTMLBodyElement.cpp:
        (WebCore::HTMLBodyElement::getSubresourceAttributeStrings):
        * html/HTMLBodyElement.h:
        * html/HTMLEmbedElement.cpp:
        (WebCore::HTMLEmbedElement::getSubresourceAttributeStrings):
        * html/HTMLEmbedElement.h:
        * html/HTMLImageElement.cpp:
        (WebCore::HTMLImageElement::getSubresourceAttributeStrings):
        * html/HTMLImageElement.h:
        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::getSubresourceAttributeStrings):
        * html/HTMLInputElement.h:
        * html/HTMLLinkElement.cpp:
        (WebCore::HTMLLinkElement::getSubresourceAttributeStrings):
        * html/HTMLLinkElement.h:
        * html/HTMLObjectElement.cpp:
        (WebCore::HTMLObjectElement::getSubresourceAttributeStrings):
        * html/HTMLObjectElement.h:
        * html/HTMLParamElement.cpp:
        (WebCore::HTMLParamElement::getSubresourceAttributeStrings):
        * html/HTMLParamElement.h:
        * html/HTMLScriptElement.cpp:
        (WebCore::HTMLScriptElement::getSubresourceAttributeStrings):
        * html/HTMLScriptElement.h:
        * html/HTMLTableCellElement.cpp:
        (WebCore::HTMLTableCellElement::getSubresourceAttributeStrings):
        * html/HTMLTableCellElement.h:
        * html/HTMLTableElement.cpp:
        (WebCore::HTMLTableElement::getSubresourceAttributeStrings):
        * html/HTMLTableElement.h:
        * svg/SVGCursorElement.cpp:
        (WebCore::SVGCursorElement::getSubresourceAttributeStrings):
        * svg/SVGCursorElement.h:
        * svg/SVGFEImageElement.cpp:
        (WebCore::SVGFEImageElement::getSubresourceAttributeStrings):
        * svg/SVGFEImageElement.h:
        * svg/SVGImageElement.cpp:
        (WebCore::SVGImageElement::getSubresourceAttributeStrings):
        * svg/SVGImageElement.h:
        * svg/SVGScriptElement.cpp:
        (WebCore::SVGScriptElement::getSubresourceAttributeStrings):
        * svg/SVGScriptElement.h:

2008-03-26  Dan Bernstein  <mitz@apple.com>

        Reviewed by Dave Hyatt.

        - maintain subpixel-antialiasing when drawing text with a simple shadow

        * platform/graphics/mac/FontMac.mm:
        (WebCore::Font::drawComplexText): If the shadow has a zero blur radius,
        draw the shadow by drawing the text at an offset instead of relying on
        Core Graphics shadows.
        (WebCore::Font::drawGlyphs): Ditto.
        * platform/graphics/win/FontCGWin.cpp:
        (WebCore::Font::drawGlyphs): Ditto.

2008-03-26  Brady Eidson  <beidson@apple.com>

        Reviewed by Mark Rowe

        Part of the continued push to move WebArchive-related code down to WebCore, this
        moves [WebDataSource subresourceForURL:] down to DocumentLoader->subresource()

        * WebCore.base.exp:
        * loader/DocumentLoader.cpp:
        (WebCore::DocumentLoader::subresource): Create an ArchiveResource from a CachedResource if it exists
          Otherwise, fallback to an ArchiveResource from the current Archive if any.  Otherwise, return null
        * loader/DocumentLoader.h:

        * loader/archive/ArchiveResource.cpp:
        (WebCore::ArchiveResource::create):
        (WebCore::ArchiveResource::ArchiveResource):
        * loader/archive/ArchiveResource.h:

2008-03-26  Sam Weinig  <sam@webkit.org>

        Fix Gtk+ build.

        * GNUmakefile.am:

2008-03-26  Mark Rowe  <mrowe@apple.com>

        Rubber-stamped by Brady Eidson.

        Update FEATURE_DEFINES to be consistent with the other locations in which it is defined.

        * Configurations/WebCore.xcconfig:

2008-03-26  Brent Fulgham  <bfulgham@gmail.com>

        Reviewed by Adam Roben.

        Add necessary files and build commands to vcproj files to
        build a Curl-based Windows WebKit.  For details, see
        http://bugs.webkit.org/show_bug.cgi?id=17985

        * WebCore.vcproj/WebCore.vcproj:

2008-03-26  Adam Roben  <aroben@apple.com>

        Record JS exceptions triggered by the Inspector's use of JSC

        We now dump all exceptions returned from JavaScriptCore into the
        Inspector's console.

        The HANDLE_EXCEPTION macro records the line on which the exception was
        returned. It calls a new private handleException method on
        InspectorController.

        Reviewed by Kevin McCullough.

        * page/InspectorController.cpp:
        (WebCore::InspectorController::callSimpleFunction): Made this be a
        member of InspectorController so that it can call handleException.
        (WebCore::addSourceToFrame): Pass the exception pointer on to inner
        JSC calls, and check it after those calls return.
        (WebCore::getResourceDocumentNode): Ditto.
        (WebCore::search): Ditto. Also changed the name/type of an existing
        exception variable to ExceptionCode ec.
        (WebCore::databaseTableNames): Ditto.
        (WebCore::moveByUnrestricted): Ditto.
        (WebCore::InspectorController::~InspectorController): Check for and
        record exceptions as we call JSC.
        (WebCore::InspectorController::focusNode): Ditto.
        (WebCore::InspectorController::scriptObjectReady): Ditto.
        (WebCore::addHeaders): Added an exception parameter.
        (WebCore::scriptObjectForRequest): Ditto.
        (WebCore::scriptObjectForResponse): Ditto.
        (WebCore::InspectorController::addScriptResource): Check for and
        record exceptions as we call JSC.
        (WebCore::InspectorController::addAndUpdateScriptResource): Ditto.
        (WebCore::InspectorController::removeScriptResource): Ditto. Also
        moved the call to setScriptObject to before the JSC calls so that it
        will always be called even if we return early if JSC throws an
        exception.
        (WebCore::InspectorController::updateScriptResourceRequest): Check for
        and record exceptions as we call JSC.
        (WebCore::InspectorController::updateScriptResourceResponse): Ditto.
        (WebCore::InspectorController::updateScriptResource): Ditto.
        (WebCore::InspectorController::addDatabaseScriptResource): Ditto.
        (WebCore::InspectorController::removeDatabaseScriptResource): Ditto.
        Also moved the call to setScriptObject to before the JSC calls so that
        it will always be called even if we return early if JSC throws an
        exception.
        (WebCore::InspectorController::addScriptConsoleMessage): Check for and
        record exceptions as we call JSC.
        (WebCore::InspectorController::handleException): Added.
        * page/InspectorController.h:

2008-03-26  Darin Adler  <darin@apple.com>

        Rubber stamped by Maciej.

        - removed a couple log messages in error cases that are handled internally

        * platform/text/TextCodecICU.cpp:
        (WebCore::TextCodecICU::decode): Removed the LOG_ERROR.
        * platform/text/mac/TextCodecMac.cpp:
        (WebCore::TextCodecMac::decode): Ditto.

2008-03-26  Sam Weinig  <sam@webkit.org>

        Reviewed by Adam Roben.

        * page/Location.idl: Don't enumerate toString.

2008-03-26  Mark Rowe  <mrowe@apple.com>

        Release build fix.

        * rendering/SVGRootInlineBox.cpp:
        (WebCore::SVGRootInlineBox::buildLayoutInformationForTextBox): Initialize svgFont to zero.

2008-03-26  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Hyatt and Adam.

        Coded by me and Darin.
        
        - SVG kerning support (horizontal kerning only for now since we don't do vertical text layout right yet) 
        
        Acid3 100/100

        * DerivedSources.make:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * platform/graphics/Font.cpp:
        (WebCore::Font::floatWidth):
        (WebCore::Font::isSVGFont):
        * platform/graphics/Font.h:
        * rendering/SVGInlineTextBox.cpp:
        (WebCore::SVGInlineTextBox::calculateGlyphWidth):
        (WebCore::SVGInlineTextBox::calculateGlyphBoundaries):
        * rendering/SVGInlineTextBox.h:
        * rendering/SVGRootInlineBox.cpp:
        (WebCore::cummulatedWidthOrHeightOfTextChunk):
        (WebCore::SVGRootInlineBox::buildLayoutInformation):
        (WebCore::SVGRootInlineBox::buildLayoutInformationForTextBox):
        * rendering/SVGRootInlineBox.h:
        (WebCore::LastGlyphInfo::LastGlyphInfo):
        * svg/SVGFont.cpp:
        (WebCore::SVGTextRunWalker::walk):
        (WebCore::Font::svgFont):
        (WebCore::floatWidthOfSubStringUsingSVGFont):
        (WebCore::Font::floatWidthUsingSVGFont):
        (WebCore::Font::drawTextUsingSVGFont):
        (WebCore::Font::selectionRectForTextUsingSVGFont):
        * svg/SVGFontElement.cpp:
        (WebCore::SVGFontElement::invalidateGlyphCache):
        (WebCore::SVGFontElement::ensureGlyphCache):
        (WebCore::parseUnicodeRange):
        (WebCore::parseUnicodeRangeList):
        (WebCore::stringMatchesUnicodeRange):
        (WebCore::matches):
        (WebCore::SVGFontElement::getHorizontalKerningPairForStringsAndGlyphs):
        * svg/SVGFontElement.h:
        * svg/SVGGlyphElement.cpp:
        (WebCore::SVGGlyphElement::insertedIntoDocument):
        (WebCore::SVGGlyphElement::removedFromDocument):
        * svg/SVGHKernElement.cpp: Added.
        (WebCore::SVGHKernElement::SVGHKernElement):
        (WebCore::SVGHKernElement::~SVGHKernElement):
        (WebCore::SVGHKernElement::insertedIntoDocument):
        (WebCore::SVGHKernElement::removedFromDocument):
        (WebCore::SVGHKernElement::buildHorizontalKerningPair):
        * svg/SVGHKernElement.h: Added.
        (WebCore::SVGHorizontalKerningPair::SVGHorizontalKerningPair):
        (WebCore::SVGHKernElement::rendererIsNeeded):
        * svg/SVGHKernElement.idl: Added.
        * svg/SVGTextContentElement.cpp:
        (WebCore::cummulatedCharacterRangeLength):
        (WebCore::SVGInlineTextBoxQueryWalker::chunkPortionCallback):
        * svg/svgtags.in:

2008-03-26  Sam Weinig  <sam@webkit.org>

        Reviewed by Adam Roben.

        Autogenerate JSLocation.

        * GNUmakefile.am:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * WebCoreSources.bkl:
        Add files.

        * DerivedSources.make: Add Location, remove JSLocation.lut.h
        * bindings/js/JSDOMWindowBase.cpp:
        (WebCore::JSDOMWindowBasePrivate::JSDOMWindowBasePrivate):
        (WebCore::JSDOMWindowBase::getValueProperty):
        (WebCore::JSDOMWindowBase::put):
        (WebCore::JSDOMWindowBase::clearHelperObjectProperties):
        (WebCore::JSDOMWindowBase::disconnectFrame):
        * bindings/js/JSDOMWindowBase.h:
        Remove manuel management of the Location object.

        * bindings/js/JSDOMWindowCustom.cpp:
        (WebCore::JSDOMWindow::mark): Add marking of JSLocation.
        (WebCore::JSDOMWindow::setLocation): Add custom setLocation as we only want to do this when
        safe and we need to keep Dashboard quirks.

        * bindings/js/JSDocumentCustom.cpp:
        (WebCore::JSDocument::location):
        Fetch the location object using the normal toJS route.

        * bindings/js/JSLocation.cpp: Removed.
        * bindings/js/JSLocation.h: Removed.
        * bindings/js/JSLocationCustom.cpp: Added.
        (WebCore::JSLocation::customGetOwnPropertySlot):
        (WebCore::JSLocation::customPut):
        (WebCore::JSLocation::deleteProperty):
        (WebCore::JSLocation::customGetPropertyNames):
        (WebCore::navigateIfAllowed):
        (WebCore::JSLocation::setHref):
        (WebCore::JSLocation::setProtocol):
        (WebCore::JSLocation::setHost):
        (WebCore::JSLocation::setHostname):
        (WebCore::JSLocation::setPort):
        (WebCore::JSLocation::setPathname):
        (WebCore::JSLocation::setSearch):
        (WebCore::JSLocation::setHash):
        (WebCore::JSLocation::replace):
        (WebCore::JSLocation::reload):
        (WebCore::JSLocation::assign):
        (WebCore::JSLocation::toString):
        Setter and Functions need custom implementations as they rely on the dynamic
        global object for determining the behavior of the navigation.

        * history/CachedPage.cpp:
        (WebCore::CachedPage::CachedPage):
        (WebCore::CachedPage::restore):
        (WebCore::CachedPage::clear):
        * history/CachedPage.h:
        Removed all the special casing for location as it should be treated like all
        the other objects hanging off the window.

        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::clear):
        (WebCore::DOMWindow::location):
        * page/DOMWindow.h:
        (WebCore::DOMWindow::optionalLocation):
        * page/DOMWindow.idl:
        Add Location accessor and pointer getter for marking.

        * page/Location.cpp: Added.
        (WebCore::Location::Location):
        (WebCore::Location::disconnectFrame):
        (WebCore::Location::url):
        (WebCore::Location::href):
        (WebCore::Location::protocol):
        (WebCore::Location::host):
        (WebCore::Location::hostname):
        (WebCore::Location::port):
        (WebCore::Location::pathname):
        (WebCore::Location::search):
        (WebCore::Location::hash):
        (WebCore::Location::toString):
        * page/Location.h: Added.
        (WebCore::Location::create):
        (WebCore::Location::frame):
        * page/Location.idl: Added.

2008-03-26  David Hyatt  <hyatt@apple.com>

        Add support for the rendering and measurement of the <altGlyph> element in SVG.  This patch brings
        is half of what's needed to reach 100/100 on Acid3 and pass the test.  Maciej has coded up the other half. :)

        Reviewed by mjs

        Added svg/custom/altGlyph.svg

        * svg/SVGAltGlyphElement.cpp:
        (WebCore::SVGAltGlyphElement::childShouldCreateRenderer):
        (WebCore::SVGAltGlyphElement::glyphElement):
        * svg/SVGAltGlyphElement.h:
        * svg/SVGFont.cpp:
        (WebCore::SVGTextRunWalker::walk):
        * svg/SVGFontFaceElement.cpp:
        (WebCore::SVGFontFaceElement::insertedIntoDocument):
        * svg/SVGGlyphElement.cpp:
        (WebCore::SVGGlyphElement::insertedIntoDocument):
        (WebCore::SVGGlyphElement::removedFromDocument):

2008-03-26  Adam Roben  <aroben@apple.com>

        Turn on SVG animation on Windows

        Also touched some files to force things to rebuild/regenerate.

        * WebCore.vcproj/WebCore.vcproj: Added ENABLE_SVG_ANIMATION.
        * WebCore.vcproj/build-generated-files.sh: Ditto.
        * bindings/scripts/CodeGenerator.pm: Touched.
        * config.h: Touched.
        * svg/svgtags.in: Touched.

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-26  Antti Koivisto  <antti@apple.com>

        Reviewed by Anders.

        http://bugs.webkit.org/show_bug.cgi?id=17077
        Bug 17077: SVG SMIL animation is currently broken (and turned off) (affects Acid3 tests 75 and 76)

        - enable SVG animation support.
        - basic implementation of beginElement()/endElement().
        
        Animation definitely will need more work than this, but it is a start!

        * Configurations/WebCore.xcconfig:
        * svg/SVGAnimationElement.cpp:
        (WebCore::SVGAnimationElement::SVGAnimationElement):
        (WebCore::SVGAnimationElement::updateAnimatedValueForElapsedSeconds):
        (WebCore::SVGAnimationElement::beginElement):
        (WebCore::SVGAnimationElement::beginElementAt):
        (WebCore::SVGAnimationElement::endElement):
        (WebCore::SVGAnimationElement::endElementAt):
        * svg/SVGAnimationElement.h:

2008-03-26  Mark Rowe  <mrowe@apple.com>

        Reviewed by David Hyatt.

        Make the Ahem font antialias correctly on Acid3 on Tiger.

        * WebCore.Tiger.exp:
        * platform/graphics/mac/SimpleFontDataMac.mm:
        (WebCore::SimpleFontData::platformInit):
        * platform/mac/WebCoreSystemInterface.h:
        * platform/mac/WebCoreSystemInterface.mm:

2008-03-26  Simon Hausmann  <hausmann@webkit.org>

        Attempt to fix the Qt build.

        * platform/text/qt/TextCodecQt.cpp: Adjust function signature.
        (WebCore::TextCodecQt::decode):
        * platform/text/qt/TextCodecQt.h: Ditto.

2008-03-26  Dan Bernstein  <mitz@apple.com>

        Reviewed by Anders Carlsson.

        - fix http://bugs.webkit.org/show_bug.cgi?id=18104
          REGRESSION: LEAK: 2 InlineBox in editing/inserting/12882.html

        * rendering/bidi.cpp:
        (WebCore::RenderBlock::layoutInlineChildren): When deciding to ditch
        old clean lines (due to changed or newly-added floats), keep the
        reference to those lines so they can be properly deleted in the end,
        and use a separate flag to signal that no matching should be attempted.

2008-03-26  Mark Rowe  <mrowe@apple.com>

        Speculative Windows build fix.

        * platform/graphics/win/SimpleFontDataCGWin.cpp:

2008-03-25  Steve Falkenburg  <sfalken@apple.com>

        Turn on link-time-codegen in html and rendering related files.

        Reviewed by Oliver.

        * WebCore.vcproj/WebCore.vcproj:

2008-03-26  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Darin.

        - fixed "SVG multichar glyph matching matches longest instead of first (affects Acid3 test 79)"
        http://bugs.webkit.org/show_bug.cgi?id=18118

        * svg/SVGFont.cpp:
        (WebCore::SVGTextRunWalker::walk):
        * svg/SVGFontElement.cpp:
        (WebCore::SVGFontElement::SVGFontElement):
        (WebCore::SVGFontElement::addGlyphToCache):
        (WebCore::SVGFontElement::removeGlyphFromCache):
        (WebCore::SVGFontElement::ensureGlyphCache):
        (WebCore::SVGFontElement::getGlyphIdentifiersForString):
        * svg/SVGFontElement.h:
        * svg/SVGGlyphElement.h:
        (WebCore::SVGGlyphIdentifier::SVGGlyphIdentifier):
        * svg/SVGGlyphMap.h: Added. New radix tree based glyph map.
        (WebCore::GlyphMapNode::GlyphMapNode):
        (WebCore::SVGGlyphMap::SVGGlyphMap):
        (WebCore::SVGGlyphMap::add):
        (WebCore::SVGGlyphMap::compareGlyphPriority):
        (WebCore::SVGGlyphMap::get):
        (WebCore::SVGGlyphMap::clear):

2008-03-26  David Hyatt  <hyatt@apple.com>

        Fix build bustage on Tiger.  Tiger will not have the bug fix.

        * platform/graphics/mac/SimpleFontDataMac.mm:
        (WebCore::SimpleFontData::platformInit):
        * platform/graphics/win/SimpleFontDataCGWin.cpp:
        (WebCore::SimpleFontData::platformInit):

2008-03-26  David Hyatt  <hyatt@apple.com>

        Make the Ahem font antialias correctly on Acid3.

        Reviewed by Dan

        * platform/graphics/SimpleFontData.h:
        * platform/graphics/mac/FontMac.mm:
        (WebCore::Font::drawGlyphs):
        * platform/graphics/mac/SimpleFontDataMac.mm:
        (WebCore::SimpleFontData::platformInit):
        * platform/graphics/win/FontCGWin.cpp:
        (WebCore::Font::drawGlyphs):
        * platform/graphics/win/SimpleFontDataCGWin.cpp:
        (WebCore::SimpleFontData::platformInit):

2008-03-26  Mark Rowe  <mrowe@apple.com>

        Fix the Mac build.

        * WebCore.xcodeproj/project.pbxproj:  Copy the newly generated header into the right place.

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-26  Eric Seidel  <eric@webkit.org>

        Reviewed by darin.

        Forgot to add braces darin asked for during review.

        * dom/XMLTokenizer.cpp:
        (WebCore::XMLTokenizer::write):

2008-03-26  Eric Seidel  <eric@webkit.org>

        Reviewed by darin.

        Fix, makes us pass Test 70
        XML documents should be strict about encoding checks
        http://bugs.webkit.org/show_bug.cgi?id=17079

        Test: fast/encoding/invalid-xml.html

        * WebCore.base.exp:
        * dom/XMLTokenizer.cpp:
        (WebCore::XMLTokenizer::write):
        * loader/CachedFont.cpp:
        (WebCore::CachedFont::ensureSVGFontData):
        * loader/TextResourceDecoder.cpp:
        (WebCore::TextResourceDecoder::TextResourceDecoder):
        (WebCore::TextResourceDecoder::decode):
        * loader/TextResourceDecoder.h:
        * platform/text/TextCodec.h:
        (WebCore::TextCodec::decode):
        * platform/text/TextCodecICU.cpp:
        (WebCore::TextCodecICU::decodeToBuffer):
        (WebCore::ErrorCallbackSetter::ErrorCallbackSetter):
        (WebCore::ErrorCallbackSetter::~ErrorCallbackSetter):
        (WebCore::TextCodecICU::decode):
        * platform/text/TextCodecICU.h:
        * platform/text/TextCodecLatin1.cpp:
        * platform/text/TextCodecLatin1.h:
        * platform/text/TextCodecUTF16.cpp:
        * platform/text/TextCodecUTF16.h:
        * platform/text/TextCodecUserDefined.cpp:
        * platform/text/TextCodecUserDefined.h:
        * platform/text/TextDecoder.cpp:
        (WebCore::TextDecoder::checkForBOM):
        * platform/text/TextDecoder.h:
        (WebCore::TextDecoder::decode):
        * platform/text/TextEncoding.cpp:
        (WebCore::TextEncoding::decode):
        * platform/text/TextEncoding.h:
        (WebCore::TextEncoding::decode):
        * platform/text/mac/TextCodecMac.cpp:
        (WebCore::TextCodecMac::decode):
        * platform/text/mac/TextCodecMac.h:

2008-03-26  Antti Koivisto  <antti@apple.com>

        Reviewed by Adam.

        Add ElementTimeControl interface to SVGAnimationElement.
        Passes Acid3 test 75.

        * DerivedSources.make:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/scripts/CodeGeneratorObjC.pm:
        * svg/ElementTimeControl.h: Added.
        (WebCore::ElementTimeControl::~ElementTimeControl):
        * svg/ElementTimeControl.idl: Added.
        * svg/SVGAnimationElement.cpp:
        (WebCore::SVGAnimationElement::beginElement):
        (WebCore::SVGAnimationElement::beginElementAt):
        (WebCore::SVGAnimationElement::endElement):
        (WebCore::SVGAnimationElement::endElementAt):
        * svg/SVGAnimationElement.h:
        * svg/SVGAnimationElement.idl:

2008-03-26  Kevin McCullough  <kmccullough@apple.com>

        - LayoutTest fix.  Null check.

        * xml/XMLHttpRequest.cpp:
        (WebCore::XMLHttpRequest::send):

2008-03-26  Dan Bernstein  <mitz@apple.com>

        Reviewed by Darin Adler.

        - fix http://bugs.webkit.org/show_bug.cgi?id=17994
          REGRESSION (523-525+) View not updated when changing CSS size via JavaScript
        - fix http://bugs.webkit.org/show_bug.cgi?id=18063
          REGRESSION (r31250): Small bug that just cropped up in WebKit r31275

        Tests: fast/repaint/subtree-root-clip.html
               fast/repaint/subtree-root-clip-2.html
               fast/repaint/subtree-root-clip-3.html

        * rendering/LayoutState.cpp:
        (WebCore::LayoutState::LayoutState): Changed to not set an initial clip.
        Since the root is clipping, there is no need to set a clip, and setting
        the clip based on the container was wrong because often the root was
        not included in the container's overflow rect because it had its own
        layer.
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::absolutePosition): Removed code that added table
        cell's extra top offset only in the slow (recursive) code path.
        * rendering/RenderTableCell.cpp:
        (WebCore::RenderTableCell::absolutePosition): Added code to add the
        extra top offset in both code paths.

2008-03-26  Simon Hausmann  <hausmann@webkit.org>

        Fix the Qt build.

        * platform/graphics/qt/FontQt.cpp:
        (WebCore::Font::floatWidth):

2008-03-24  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Eric.

        - fixed "SVGTextElement.getStartPositionOfChar does not correctly account for multichar glyphs"
        http://bugs.webkit.org/show_bug.cgi?id=18046

        * platform/graphics/Font.cpp:
        (WebCore::Font::floatWidth): Allow expressing a run that has extra "context" characters beyond the end,
        and reporting of how many characters were actually consumed, to support multichar glyphs in SVG fonts.
        * platform/graphics/Font.h:
        * rendering/SVGInlineTextBox.cpp:
        (WebCore::SVGInlineTextBox::calculateGlyphWidth): Pass along extra chars in argument and chars consumed out
        argument.
        (WebCore::SVGInlineTextBox::calculateGlyphHeight): Pass along extra chars in argument.
        (WebCore::SVGInlineTextBox::calculateGlyphBoundaries): Add boilerplate; may not handle multichar glyphs
        right but I don't know what effects this would have.
        * rendering/SVGInlineTextBox.h:
        * rendering/SVGRootInlineBox.cpp:
        (WebCore::cummulatedWidthOrHeightOfTextChunk): Add boilerplate; may not handle multichar glyphs right
        but again I am not sure what effect this would have.
        (WebCore::SVGRootInlineBox::buildLayoutInformationForTextBox): Account for multichar glyphs - let glyph
        selection consider extra chars, and account for the fact that a glyph may have consumed multiple chars.
        * rendering/SVGRootInlineBox.h:
        * svg/SVGFont.cpp:
        (WebCore::SVGTextRunWalker::walk): This is the place where glyph selection happens, so this is where
        we accout for multichar glyphs (both looking at extra chars past the end of the run, and reporting how
        many chars were consumed).
        (WebCore::floatWidthOfSubStringUsingSVGFont): Pass aforementioned info through the layers.
        (WebCore::Font::floatWidthUsingSVGFont): ditto
        (WebCore::Font::drawTextUsingSVGFont): ditto
        (WebCore::Font::selectionRectForTextUsingSVGFont): ditto
        * svg/SVGTextContentElement.cpp:
        (WebCore::cummulatedCharacterRangeLength): ditto
        (WebCore::SVGInlineTextBoxQueryWalker::chunkPortionCallback): ditto

2008-03-25  Beth Dakin  <bdakin@apple.com>

        Reviewed by Oliver.

        Fix for <rdar://problem/5811826> CSSValueList::item() does not 
        range-check index

        Check bounds before accessing the item to avoid a crash. 
        itemWithoutBoundsCheck() is still inlined and not bounds-checked to 
        avoid slowing down our internal callers of item().
        * css/CSSValueList.cpp:
        (WebCore::CSSValueList::item):
        * css/CSSValueList.h:
        (WebCore::CSSValueList::itemWithoutBoundsCheck):

        Call itemWithoutBoundsCheck() to avoid slowing down these internal 
        callers.
        * css/CSSFontSelector.cpp:
        (WebCore::CSSFontSelector::addFontFaceRule):
        * css/CSSMutableStyleDeclaration.cpp:
        (WebCore::CSSMutableStyleDeclaration::getLayeredShorthandValue):
        * css/CSSStyleSelector.cpp:
        (WebCore::applyCounterList):
        (WebCore::CSSStyleSelector::applyProperty):
        * css/MediaQueryEvaluator.cpp:
        (WebCore::parseAspectRatio):
        * svg/SVGFontFaceElement.cpp:
        (WebCore::SVGFontFaceElement::rebuildFontFace):
        * svg/graphics/SVGPaintServer.cpp:
        (WebCore::dashArrayFromRenderingStyle):

2008-03-25  Antti Koivisto  <antti@apple.com>

        Reviewed by Oliver.

        Fix http://bugs.webkit.org/show_bug.cgi?id=18082
        REGRESSION (r31287): GMail does not work if user stylesheet is set
        
        Oops, my cache refactoring patch was missing these rather essential lines for
        user stylesheets. They would get reloaded repeatedly.

        * loader/Cache.cpp:
        (WebCore::Cache::requestUserCSSStyleSheet):

2008-03-25  Matt Lilek  <webkit@mattlilek.com>

        Rubber stamped by Adam

        Roll out r31300 since it causes assertion failures on page load.
        See http://bugs.webkit.org/show_bug.cgi?id=18093

        * page/InspectorController.cpp:
        (WebCore::InspectorController::didFinishLoading):
        (WebCore::InspectorController::didFailLoading):

2008-03-25  Darin Adler  <darin@apple.com>

        Reviewed by Anders.

        - fix http://bugs.webkit.org/show_bug.cgi?id=17252
          Acid3 test removing Nodes during NodeIterator walk fails (affects Acid3 test 2)

        Test: traversal/acid3-test-2.html

        * bindings/js/JSNodeIteratorCustom.cpp:
        (WebCore::JSNodeIterator::nextNode): Update since result is PassRefPtr.
        (WebCore::JSNodeIterator::previousNode): Ditto.
        * dom/NodeIterator.cpp:
        (WebCore::NodeIterator::nextNode): Changed result to PassRefPtr. Added code to
        track both the current candidate (which needs to move along to the next node
        if current node is deleted) and the current provisional result (passed to acceptNode,
        and needs to be returned even if it's deleted).
        (WebCore::NodeIterator::previousNode): Ditto.
        (WebCore::NodeIterator::nodeWillBeRemoved): Call updateForNodeRemoval for
        m_candidateNode as well as m_referenceNode.
        * dom/NodeIterator.h: Use PassRefPtr for return values.

2008-03-25  Brady Eidson  <beidson@apple.com>

        Reviewed by Anders

        Add the ability to transform a CString into a SharedBuffer to avoid copying data
        This is valuable to avoid copying a block of data for an upcoming patch

        * platform/SharedBuffer.cpp:
        (WebCore::SharedBuffer::adoptVector):
        * platform/SharedBuffer.h:

        * platform/text/CString.cpp:
        (WebCore::CString::releaseBuffer):
        * platform/text/CString.h:
        (WebCore::CStringBuffer::releaseBuffer):

2008-03-25  Brady Eidson  <beidson@apple.com>

        Attempt to fix .bkl build systems after recent archive additions

        * webcore-base.bkl:

2008-03-25  Kevin McCullough  <kmccullough@apple.com>

        Reviewed by Adam.

        - Cleaned up the needless use of RefPtrs, which we may someday no longer use for
        InspectorResources.

        * page/InspectorController.cpp:
        (WebCore::InspectorController::didFinishLoading):
        (WebCore::InspectorController::didFailLoading):

2008-03-25  Kevin McCullough  <kmccullough@apple.com>

        Reviewed by Adam.

        - Added a null check

        * xml/XMLHttpRequest.cpp: Null check
        (WebCore::XMLHttpRequest::send):

2008-03-25  Kevin McCullough  <kmccullough@apple.com>

        Reviewed by Tim.

        -<rdar://problem/5712804> XMLHttpRequests do not show response contents, preview images (14313)
        -<rdar://problem/5712931> XMLHttpRequests should be shown separately and grouped (14315)
        -<rdar://problem/5732836> XMLHttpRequest: Inspector should show network activity/XHR in Console (17233)
        - XMLHttpRequestResources now identify themselves to the inspector which caches the data related to
        the request since no one else caches it.  However this is just the plumbing and the Inspector's UI
        has not been changed to show XHR resources yet. 

        * page/InspectorController.cpp: Add ability to set XHR data on an InspectorResource.
        (WebCore::XMLHttpRequestResource::XMLHttpRequestResource):
        (WebCore::XMLHttpRequestResource::data):
        (WebCore::XMLHttpRequestResource::encoding):
        (WebCore::InspectorResource::): Add new type.
        (WebCore::InspectorResource::~InspectorResource): No longer virtual since we are not using inheritance.
        (WebCore::InspectorResource::type): Ditto.
        (WebCore::InspectorResource::setXMLHttpRequestResource):
        (WebCore::InspectorResource::isXHR):
        (WebCore::InspectorResource::xmlHttpRequestData):
        (WebCore::InspectorResource::xmlHttpRequestEncoding):
        (WebCore::InspectorResource::InspectorResource):
        (WebCore::addSourceToFrame):
        (WebCore::InspectorController::resourceRetrievedByXMLHttpRequest):
        * page/InspectorController.h: Add accessor for setting the XHR data.
        * page/inspector/Resource.js: Keep the XHR resource types in sync with the Inspector Controller.
        * xml/XMLHttpRequest.cpp: Give the InspectorController the XHR information to cache.
        (WebCore::XMLHttpRequest::send):

2008-03-25  Adam Roben  <aroben@apple.com>

        Add an UnusedParam.h forwarding header for use by testapi

        Reviewed by Steve Falkenburg.

        * ForwardingHeaders/wtf/UnusedParam.h: Added.

2008-03-25  Brady Eidson  <beidson@apple.com>

        Reviewed by Adam Roben

        <rdar://problem/5819308> - View Source is empty when view webarchives

        * WebCore.base.exp:
        * loader/DocumentLoader.cpp:
        (WebCore::DocumentLoader::setParsedArchiveData):
        (WebCore::DocumentLoader::parsedArchiveData):
        * loader/DocumentLoader.h:

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::finishedLoadingDocument): Set the archive's MainResource data as the parsedArchiveData
          in the DocumentLoader

2008-03-25  Eric Seidel  <eric@webkit.org>

        Reviewed by Oliver.

        Speculative crash fix for Acid3 crasher.
        I couldn't figure out how to make a test case for this?
        Suggestions welcome.

        * css/CSSFontSelector.cpp: null check document->renderer()

2008-03-25  Antti Koivisto  <antti@apple.com>

        Reviewed by Geoff Garen.

        Some memory cache cleanups:
        - Separate CachedResource loading from construction, initiate load using a separate load() method.
        - Add special case function to Cache for loading user stylesheets. This allows removal
          of a bunch of parameters from several methods and CachedResource constructors.
        - Construct CachedResources with m_inCache set to false which is quite a bit more logical as they
          are not yet in the cache at that point.
        - Pass encoding around as const String& instead of const String*.

        * css/CSSImageValue.cpp:
        (WebCore::CSSImageValue::image):
        * html/HTMLImageLoader.cpp:
        (WebCore::HTMLImageLoader::updateFromElement):
        * loader/Cache.cpp:
        (WebCore::createResource):
        (WebCore::Cache::requestResource):
        (WebCore::Cache::requestUserCSSStyleSheet):
        (WebCore::Cache::remove):
        * loader/Cache.h:
        * loader/CachedCSSStyleSheet.cpp:
        (WebCore::CachedCSSStyleSheet::CachedCSSStyleSheet):
        * loader/CachedCSSStyleSheet.h:
        * loader/CachedFont.cpp:
        (WebCore::CachedFont::CachedFont):
        (WebCore::CachedFont::load):
        (WebCore::CachedFont::ref):
        * loader/CachedFont.h:
        * loader/CachedImage.cpp:
        (WebCore::CachedImage::CachedImage):
        (WebCore::CachedImage::load):
        * loader/CachedImage.h:
        * loader/CachedResource.cpp:
        (WebCore::CachedResource::CachedResource):
        (WebCore::CachedResource::~CachedResource):
        (WebCore::CachedResource::load):
        * loader/CachedResource.h:
        (WebCore::CachedResource::load):
        * loader/CachedScript.cpp:
        (WebCore::CachedScript::CachedScript):
        * loader/CachedScript.h:
        * loader/CachedXBLDocument.cpp:
        (WebCore::CachedXBLDocument::CachedXBLDocument):
        * loader/CachedXBLDocument.h:
        * loader/CachedXSLStyleSheet.cpp:
        (WebCore::CachedXSLStyleSheet::CachedXSLStyleSheet):
        * loader/CachedXSLStyleSheet.h:
        * loader/DocLoader.cpp:
        (WebCore::DocLoader::requestImage):
        (WebCore::DocLoader::requestFont):
        (WebCore::DocLoader::requestCSSStyleSheet):
        (WebCore::DocLoader::requestUserCSSStyleSheet):
        (WebCore::DocLoader::requestScript):
        (WebCore::DocLoader::requestXSLStyleSheet):
        (WebCore::DocLoader::requestXBLDocument):
        (WebCore::DocLoader::requestResource):
        (WebCore::DocLoader::preload):
        * loader/DocLoader.h:

2008-03-25  Darin Adler  <darin@apple.com>

        Reviewed by Anders.

        - avoid converting UString to String and then later to AtomicString

        1% speedup on Acid3 test 26

        This is inefficient for the case where there's already an AtomicString.
        By first creating and destroying a String we waste time.

        * bindings/scripts/CodeGeneratorJS.pm: Use const UString& for string
        arguments rather than using String; this uses the object as it's produced
        from toString rather than creating a new temporary object that might not
        be of the right type. The type conversion happens at the callsite instead.
        Also eliminate the ability to use the type AtomicString from IDL.

        * dom/KeyboardEvent.idl: AtomicString -> DOMString.
        * dom/MouseEvent.idl: Ditto.
        * dom/MutationEvent.idl: Ditto.
        * dom/UIEvent.idl: Ditto.
        * svg/SVGStyleElement.idl: Ditto.

2008-03-25  Brady Eidson  <beidson@apple.com>

        Build fix for non-CoreFoundation platforms

        * loader/archive/ArchiveFactory.cpp:

2008-03-25  Brady Eidson  <beidson@apple.com>

        Reviewed by Darin

        Remove newly obsolete FrameLoaderClient methods

        * loader/FrameLoaderClient.h:
        * svg/graphics/SVGImageEmptyClients.h:
        (WebCore::SVGEmptyFrameLoaderClient::setMainDocumentError):
        (WebCore::SVGEmptyFrameLoaderClient::finishedLoading):

2008-03-25  Brady Eidson  <beidson@apple.com>

        Reviewed by Darin

        <rdar://problem/4516169> - Support WebArchives on Windows
        And pave the way for many future WebArchive bug fixes and enhancements

        This patch accomplishes two main goals:
        1 - Consolidates much of the spread out WebKitMac archive code into one place in WebCore.  This allows for cleaner refactoring 
            in the future as well as adding more archive formats with ease.
        2 - Hooks up WebArchive support on Windows.  Safari-style .webarchive files are nothing more than property lists readable by
            CoreFoundation.  While there are still some outstanding issues, including an NSKeyedArchiver chunk of data for the 
            ResourceResponse for each resource, this patch manually parses through the property list on CoreFoundation platforms and
            gets many archives loading on Windows

        My goal for this first cut was zero behavior change.  As such, I went for a direct port of the WebKitMac code.  There will be
        opportunities for redesign and refactoring as followups.

        * WebCore.base.exp:

        * loader/DocumentLoader.cpp:
        (WebCore::DocumentLoader::setupForReplaceByMIMEType): Ported from WebKitMac, WebDataSource
        (WebCore::DocumentLoader::addAllArchiveResources):
        (WebCore::DocumentLoader::addArchiveResource):
        (WebCore::DocumentLoader::archiveResourceForURL):
        (WebCore::DocumentLoader::popArchiveForSubframe):
        (WebCore::DocumentLoader::clearArchiveResources):
        * loader/DocumentLoader.h:

        * loader/FrameLoader.cpp: Moved WebFrameLoaderClient and WebFrame code down into their more appropriate FrameLoader home
        (WebCore::FrameLoader::FrameLoader):
        (WebCore::FrameLoader::setDefersLoading):
        (WebCore::FrameLoader::deliverArchivedResourcesAfterDelay):
        (WebCore::FrameLoader::archiveResourceDeliveryTimerFired):
        (WebCore::FrameLoader::loadURLIntoChildFrame):
        (WebCore::FrameLoader::loadArchive):
        (WebCore::FrameLoader::scheduleArchiveLoad):
        (WebCore::FrameLoader::stopAllLoaders):
        (WebCore::FrameLoader::cancelPendingArchiveLoad):
        (WebCore::FrameLoader::isArchiveLoadPending):
        (WebCore::FrameLoader::finishedLoadingDocument):
        * loader/FrameLoader.h:

        * loader/ResourceLoader.cpp:
        (WebCore::ResourceLoader::load):

        * loader/archive/Archive.h: Generic "Archive of web resources" class that is only useful when subclassed.  
            Contains a MainResource, subresources, and Archives for subframes
        (WebCore::Archive::mainResource):
        (WebCore::Archive::subresources):
        (WebCore::Archive::subframeArchives):
        (WebCore::Archive::setMainResource):
        (WebCore::Archive::addSubresource):
        (WebCore::Archive::addSubframeArchive):

        * loader/archive/ArchiveFactory.cpp: A class that will take raw archive data and the MIMEtype, and create the
            appropriate Archive class for it.  Additionally it handles registering the known MIMEtypes for all known archive formats
        (WebCore::archiveFactoryCreate):
        (WebCore::archiveMIMETypes):
        (WebCore::ArchiveFactory::isArchiveMimeType):
        (WebCore::ArchiveFactory::create):
        (WebCore::ArchiveFactory::registerKnownArchiveMIMETypes):
        * loader/archive/ArchiveFactory.h:

        * loader/archive/ArchiveResource.cpp: Analog to "WebResource" in WebKitMac.  Contains the data and other important
            attributes of an archived resource
        (WebCore::ArchiveResource::create):
        (WebCore::ArchiveResource::ArchiveResource):
        (WebCore::ArchiveResource::response):
        * loader/archive/ArchiveResource.h:
        (WebCore::ArchiveResource::data):
        (WebCore::ArchiveResource::url):
        (WebCore::ArchiveResource::mimeType):
        (WebCore::ArchiveResource::textEncoding):
        (WebCore::ArchiveResource::frameName):
        (WebCore::ArchiveResource::ignoreWhenUnarchiving):
        (WebCore::ArchiveResource::shouldIgnoreWhenUnarchiving):

        * loader/archive/ArchiveResourceCollection.cpp: Analog of "WebUnarchivingState" in WebKitMac.  Contains a hash of
            all the resources for every frame in an archive, and contains the archives for each subframe needed to load a multi-frame archive
        (WebCore::ArchiveResourceCollection::ArchiveResourceCollection):
        (WebCore::ArchiveResourceCollection::addAllResources):
        (WebCore::ArchiveResourceCollection::addResource):
        (WebCore::ArchiveResourceCollection::archiveResourceForURL):
        (WebCore::ArchiveResourceCollection::popSubframeArchive):
        * loader/archive/ArchiveResourceCollection.h:

        * loader/archive/cf/LegacyWebArchive.cpp: Subclass of Archive specifically for Webkit's Objective-C based ".webarchive" format.
            Mostly a collection of static methods involved in parsing and serializing a WebKit-style .webarchive.  Is mostly supported
            for any CF platform.
        (WebCore::createPropertyListRepresentationFromResource):
        (WebCore::createPropertyListRep):
        (WebCore::createResourceResponseFromPropertyListData):
        (WebCore::createResource):
        (WebCore::LegacyWebArchive::create):
        (WebCore::LegacyWebArchive::LegacyWebArchive):
        (WebCore::LegacyWebArchive::init):
        (WebCore::LegacyWebArchive::extract):
        (WebCore::LegacyWebArchive::rawDataRepresentation):
        (WebCore::createResourceResponseFromMacArchivedData):
        (WebCore::propertyListDataFromResourceResponse):
        * loader/archive/cf/LegacyWebArchive.h:
        * loader/archive/cf/LegacyWebArchiveMac.mm:
        (WebCore::createResourceResponseFromMacArchivedData):
        (WebCore::propertyListDataFromResourceResponse):

        * platform/network/mac/ResourceRequest.h:
        * platform/network/mac/ResourceRequestMac.mm:
        (WebCore::ResourceRequest::applyWebArchiveHackForMail): Tweak the resource request for Mac clients when loading WebArchives

2008-03-25  David Hyatt  <hyatt@apple.com>

        Cut and paste error in the zoom code.  A width() should have been a height().  Regression tests caught this.

        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::innerHeight):

2008-03-24  Darin Adler  <darin@apple.com>

        - try to fix broken Wx build

        * platform/wx/TemporaryLinkStubs.cpp:
        (GraphicsContext::setPlatformShadow):
        (GraphicsContext::clearPlatformShadow):

2008-03-24  Darin Adler  <darin@apple.com>

        Reviewed by Sam.

        - use AtomicString more consistently for attribute values

        1% speedup on Acid3 test 26

        * dom/Element.cpp:
        (WebCore::Element::setAttribute): Changed value argument to AtomicString.
        Also fixed call to lower() to only be done if the name isn't already lowercase.
        Also took out one unneeded condition in a cascade of if statements.
        (WebCore::Element::createAttribute): Ditto.
        (WebCore::Element::setAttributeNS): Ditto.
        * dom/Element.h: Ditto.
        * dom/StyledElement.cpp:
        (WebCore::StyledElement::createAttribute): Ditto.
        * dom/StyledElement.h: Ditto.

2008-03-24  Darin Adler  <darin@apple.com>

        Reviewed by Sam.

        - get rid of extra level of function call in toJS functions for Node

        0.6% speedup on Acid3 test 26

        * bindings/js/JSNodeCustom.cpp:
        (WebCore::toJS): Take a raw pointer, not a PassRefPtr, like other toJS functions.

        * bindings/scripts/CodeGeneratorJS.pm: Add an inlined toJS for EventTargetNode*
        to avoid ambiguity that otherwise exists between the toJS for EventTarget* and
        for Node*.

2008-03-24  Darin Adler  <darin@apple.com>

        Reviewed by Hyatt.

        - add fast path to isValidName that does not use advanced Unicode functions

        2% speedup on Acid3 test 26

        * dom/Document.cpp:
        (WebCore::isValidNameNonASCII): Added. Contains the old isValidName function.
        (WebCore::isValidNameASCII): Added. Contains a simpler function that returns
        true for most valid names that are also all ASCII.
        (WebCore::Document::isValidName): Changed to call both of the above functions.
        The common case is that isValidNameASCII returns true so isValidNameNonASCII
        is never called.

2008-03-24  David Hyatt  <hyatt@apple.com>

        Fix for bug 18052, window properties need to respect zoom factor.

        Reviewed by Beth

        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::innerHeight):
        (WebCore::DOMWindow::innerWidth):
        (WebCore::DOMWindow::scrollX):
        (WebCore::DOMWindow::scrollY):
        (WebCore::DOMWindow::scrollTo):
        * page/FrameView.cpp:
        (WebCore::FrameViewPrivate::reset):
        (WebCore::FrameView::layout):
        (WebCore::FrameView::performPostLayoutTasks):

2008-03-24  Sam Weinig  <sam@webkit.org>

        Reviewed by Darin Adler.

        Fix http://bugs.webkit.org/show_bug.cgi?id=18048
        The "thisObject" parameter to JSEvaluateScript is not used properly

        * bindings/js/kjs_proxy.cpp:
        (WebCore::KJSProxy::evaluate): No need to pass a thisObject since we want the global object to be used.
        * bridge/jni/jni_jsobject.mm:
        (JavaJSObject::eval): To avoid any change to this function, don't pass a thisObject to keep the same
        behavior.

2008-03-24  Brady Eidson  <beidson@apple.com>

        Reviewed by Darin's rubberstamp

        Land a load of empty files for upcoming work to make sure I'm not breaking any platform's build

        * GNUmakefile.am:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * WebCoreSources.bkl:
        * loader/archive: Added.
        * loader/archive/Archive.h: Added.
        * loader/archive/ArchiveFactory.cpp: Added.
        * loader/archive/ArchiveFactory.h: Added.
        * loader/archive/ArchiveResource.cpp: Added.
        * loader/archive/ArchiveResource.h: Added.
        * loader/archive/ArchiveResourceCollection.cpp: Added.
        * loader/archive/ArchiveResourceCollection.h: Added.
        * loader/archive/cf: Added.
        * loader/archive/cf/LegacyWebArchive.cpp: Added.
        * loader/archive/cf/LegacyWebArchive.h: Added.
        * loader/archive/cf/LegacyWebArchiveMac.mm: Added.

2008-03-24  David Hyatt  <hyatt@apple.com>

        Fix for bug 18009. Make sure the IE offset/client/scroll*** extensions respect full page zoom.

        Reviewed by Beth

        * dom/Element.cpp:
        (WebCore::localZoomForRenderer):
        (WebCore::adjustForLocalZoom):
        (WebCore::adjustForAbsoluteZoom):
        (WebCore::Element::offsetLeft):
        (WebCore::Element::offsetTop):
        (WebCore::Element::offsetWidth):
        (WebCore::Element::offsetHeight):
        (WebCore::Element::clientLeft):
        (WebCore::Element::clientTop):
        (WebCore::Element::clientWidth):
        (WebCore::Element::clientHeight):
        (WebCore::Element::scrollLeft):
        (WebCore::Element::scrollTop):
        (WebCore::Element::setScrollLeft):
        (WebCore::Element::setScrollTop):
        (WebCore::Element::scrollWidth):
        (WebCore::Element::scrollHeight):
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::setStyle):
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::offsetParent):
        * rendering/RenderObject.h:

2008-03-24  Brady Eidson  <beidson@apple.com>

        Reviewed by Darin

        Some style cleanup and add a logging channel for upcoming work

        * platform/Logging.cpp:
        * platform/Logging.h:

        * platform/MIMETypeRegistry.cpp:
        (WebCore::initializeSupportedImageMIMETypes):
        (WebCore::initializeSupportedNonImageMimeTypes):

2008-03-24  Dan Bernstein  <mitz@apple.com>

        Reviewed by Sam Weinig.

        - fix <rdar://problem/5812292> CrashTracer: [REGRESSION] 60 crashes in Safari at com.apple.WebCore: WebCore::RenderObject::repaintRectangle + 47

        Test: fast/repaint/renderer-destruction-by-invalidateSelection-crash.html

        * page/FrameView.cpp:
        (WebCore::FrameViewPrivate::reset): Removed repaintRects code.
        (WebCore::FrameView::layout): Ditto.
        (WebCore::FrameView::addRepaintInfo): Removed.

        * page/FrameView.h: Removed addRepaintInfo().

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::layoutBlock): Changed to call repaintRectangle
        instead of FrameView::addRepaintInfo().
        * rendering/RenderTable.cpp:
        (WebCore::RenderTable::layout): Ditto.

2008-03-24  Alp Toker  <alp@atoker.com>

        GTK+/soup http backend build fix for breakage introduced in r31141.
        Fix suggested by Xan.

        * platform/network/ResourceHandle.h:

2008-03-24  Dan Bernstein  <mitz@apple.com>

        Reviewed by Sam Weinig.

        - fix <rdar://problem/5792582> CSS opacity does not work with GDI text
        - fix <rdar://problem/5792619> non-opaque CSS colors do not work with GDI text (RGBA, HSLA)
        - fix <rdar://problem/5792624> GDI text can't be stroked/filled independently
        - make text-shadow work with GDI text
        - make -webkit-background-clip: text work with GDI text

        * platform/graphics/GraphicsContext.cpp:
        (WebCore::GraphicsContext::setShadow): Made this a shared method that
        updates the state and calls the platform-specific method.
        (WebCore::GraphicsContext::clearShadow): Ditto.
        (WebCore::GraphicsContext::getShadow): Added.

        * platform/graphics/GraphicsContext.h:
        (WebCore::GraphicsContext::WindowsBitmap): Added this class that
        represents a bitmap with a Windows device context that GDI can draw into.

        * platform/graphics/GraphicsContextPrivate.h:
        (WebCore::GraphicsContextState::GraphicsContextState): Added the shadow
        parameters to the graphics state.

        * platform/graphics/cairo/GraphicsContextCairo.cpp:
        (WebCore::GraphicsContext::setPlatformShadow): Renamed the platform-
        specific implementation to this.
        (WebCore::GraphicsContext::clearPlatformShadow): Renamed the platform-
        specific implementation to this.

        * platform/graphics/cg/GraphicsContextCG.cpp:
        (WebCore::GraphicsContext::setPlatformShadow): Renamed the platform-
        specific implementation to this.
        (WebCore::GraphicsContext::clearPlatformShadow): Renamed the platform-
        specific implementation to this.

        * platform/graphics/qt/GraphicsContextQt.cpp:
        (WebCore::GraphicsContext::setPlatformShadow): Renamed the platform-
        specific implementation to this.
        (WebCore::GraphicsContext::clearPlatformShadow): Renamed the platform-
        specific implementation to this.

        * platform/graphics/win/FontCGWin.cpp:
        (WebCore::toCGFloat): Added. Converts a Windows FIXED.
        (WebCore::createPathForGlyph): Added. Retrieves a glyph's hinted
        outline from GDI and creates a CGPath containing it.
        (WebCore::Font::drawGlyphs): Added two code paths in the GDI case.
        The existing code path, which uses GDI to draw text directly to the
        graphics context, is used for opaque-colored, non-transformed,
        non-stroked, non-shadowed text in a GDI-backed graphics context that is
        not in a transparency layer.
        An additional code path is used for non-stroked text in all other cases.
        It uses GDI to draw black text into an all-white Windows bitmap, then
        uses the green channel as a mask to create a bitmap with the desired
        fill color and alpha. The bitmap is then drawn into the graphics
        context, at which time transparency layers, transforms and shadows are
        handled properly.
        A third code path is used for stroked text. It constructs a path from
        hinted glyph outlines retrieved from GDI and strokes (and optionally
        fills) it.

        * platform/graphics/win/GraphicsContextCGWin.cpp:
        (WebCore::GraphicsContext::getWindowsContext): Added a mayCreateBitmap
        parameter. When false, prevents this method from creating a Windows
        device context if the graphics context does not already have one.
        (WebCore::GraphicsContext::releaseWindowsContext): Added a
        mayCreateBitmap parameter to match getWindowsContext().
        (WebCore::GraphicsContext::WindowsBitmap::WindowsBitmap):
        (WebCore::GraphicsContext::WindowsBitmap::~WindowsBitmap):
        (WebCore::GraphicsContext::createWindowsBitmap): Added.
        (WebCore::GraphicsContext::drawWindowsBitmap): Added. Draws the bitmap
        as a non-alpha-premultiplied image.

2008-03-24  Kevin McCullough <kmccullough@apple.com>

          - Fixed Changelog

2008-03-24  Marco Barisione  <marco.barisione@collabora.co.uk>

        Reviewed by Alp Toker.

        http://bugs.webkit.org/show_bug.cgi?id=17845
        [GTK] combo box menu displayed in the wrong position

        * platform/gtk/PopupMenuGtk.cpp:
        (WebCore::PopupMenu::show): Change the popup menu vertical position so
        that the active item is over the combo box.
        (WebCore::PopupMenu::menuPositionFunction): use the "push in" style
        like native GTK+ combo boxes to handle menus that don't fit in the
        screen.

2008-03-24  Adam Roben  <aroben@apple.com>

        * WebCore.vcproj/WebCore.vcproj: Add files from WebCore/page/inspector
        to the project.

2008-03-24  Alexey Proskuryakov  <ap@webkit.org>

        Build fix.

        * WebCore.xcodeproj/project.pbxproj: Added DOMSVGAltGlyphElement.h and
        DOMSVGAltGlyphElementInternal.h to Copy Generated Headers phase.

2008-03-24  Eric Seidel  <eric@webkit.org>

        Build fix, no review.

        Fix project paths to be group relative instead of project relative

        * WebCore.xcodeproj/project.pbxproj:

2008-03-23  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Eric.

        - fixed "SVGTextElement.getNumberOfChars is broken for altGlyph (affects Acid3 test 79)"
        http://bugs.webkit.org/show_bug.cgi?id=17062

        * svg/SVGAltGlyphElement.cpp: Added. Implementation for new element.
        (WebCore::SVGAltGlyphElement::SVGAltGlyphElement):
        (WebCore::SVGAltGlyphElement::~SVGAltGlyphElement):
        (WebCore::SVGAltGlyphElement::setGlyphRef):
        (WebCore::SVGAltGlyphElement::glyphRef):
        (WebCore::SVGAltGlyphElement::setFormat):
        (WebCore::SVGAltGlyphElement::format):
        (WebCore::SVGAltGlyphElement::childShouldCreateRenderer):
        (WebCore::SVGAltGlyphElement::createRenderer): For now, this just renders as a tspan,
        which is right for everything besides the alternate glyph substitution itself.
        * svg/SVGAltGlyphElement.h: Added. Header for new element.
        (WebCore::SVGAltGlyphElement::contextElement):
        * svg/SVGAltGlyphElement.idl: Added. Interface for new element.
        * svg/SVGTSpanElement.cpp:
        (WebCore::SVGTSpanElement::childShouldCreateRenderer): Allow altGlyph to render here.
        * svg/SVGTextElement.cpp:
        (WebCore::SVGTextElement::childShouldCreateRenderer): ditto
        * svg/SVGTextPathElement.cpp:
        (WebCore::SVGTextPathElement::childShouldCreateRenderer): ditto
        * svg/svgtags.in: Add altGlyph
        * DerivedSources.make: Add new files
        * GNUmakefile.am: ditto
        * WebCore.SVG.exp: Add new ObjC DOM class
        * WebCore.pro: Add new files
        * WebCore.vcproj/WebCore.vcproj: ditto
        * WebCore.xcodeproj/project.pbxproj: ditto
        * bindings/js/JSSVGElementWrapperFactory.cpp: Handle altGlyph
        * bindings/objc/DOM.mm:
        (WebCore::createElementClassMap): ditto
        * bindings/objc/DOMInternal.h: Include altGlyph header
        * bindings/objc/DOMSVG.h: Include altGlyph header

2008-03-23  Robert Blaut  <webkit@blaut.biz>

        Reviewed by eseidel.  Landed by eseidel.

        Bug 17685: [~=] attribute selector failing to match empty string
        <http://bugs.webkit.org/show_bug.cgi?id=17685>

        Test: fast/css/attribute-selector-empty-value.html

        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::checkOneSelector):

2008-03-22  Marco Barisione  <marco.barisione@collabora.co.uk>

        Reviewed by Darin Adler.

        http://bugs.webkit.org/show_bug.cgi?id=16339
        Frame scrollbar positions are not updated on page scroll

        Widget::geometryChanged() was called instead of
        ScrollViewScrollbar::geometryChanged() because of a missing const.

        * platform/gtk/ScrollViewGtk.cpp:
        (WebCore::ScrollViewScrollbar::geometryChanged): add the missing
        const.

2008-03-22  Rodney Dawes  <dobey@wayofthemonkey.com>

        Reviewed by Mark Rowe.

        Bug 17974: REGRESSION: npfunctions.h should not import npruntime_internal.h
        <http://bugs.webkit.org/show_bug.cgi?id=17974>
        <rdar://problem/5782310>

        Include npapi.h and npruntime.h directly in npfunctions.h.
        Add npfunctions.h and npapi.h to npruntime_internal.h.
        Replace includes of npfunctions.h with npruntime_internal.h.

        * bridge/npruntime_internal.h:
        * plugins/PluginPackage.h:
        * plugins/PluginStream.h:
        * plugins/npapi.cpp:
        * plugins/npfunctions.h:

2008-03-22  Mark Rowe  <mrowe@apple.com>

        Qt build fix.

        * bridge/qt/qt_runtime.cpp:
        (KJS::Bindings::valueRealType):

2008-03-22  Eric Seidel  <eric@webkit.org>

        Reviewed by mjs.

        Unify handling of NAMESPACE_ERR and fix Acid3 test 25
        http://bugs.webkit.org/show_bug.cgi?id=16693

        Test: fast/dom/DOMImplementation/createDocumentType-err.html

        * dom/DOMImplementation.cpp:
        (WebCore::DOMImplementation::createDocumentType):
        (WebCore::DOMImplementation::createDocument):
        * dom/DOMImplementation.idl:
        * dom/Document.cpp:
        (WebCore::Document::hasPrefixNamespaceMismatch):
        (WebCore::Document::createElementNS):
        (WebCore::Document::parseQualifiedName):
        (WebCore::Document::createAttributeNS):
        * dom/Document.h:
        * dom/Element.cpp:
        (WebCore::Element::setAttributeNS):
        * editing/FormatBlockCommand.cpp:
        (WebCore::FormatBlockCommand::doApply):

2008-03-22  Eric Seidel  <eric@webkit.org>

        Reviewed by mjs.

        Fix createElementNS to throw exceptions for invalid qualified names
        Fixes Acid3 sub-test 23
        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-03-21  Cameron Zwarich  <cwzwarich@uwaterloo.ca>

        Reviewed by Oliver Hunt.

        Bug 13693: REGRESSION (r13615): Acid2 Test Eyes render improperly after a page refresh
        <http://bugs.webkit.org/show_bug.cgi?id=13693>

        Do not create bogus history items for unloaded <object> elements, because they
        cause fallback content to be ignored on reload.

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::createHistoryItemTree):

2008-03-21  Dan Bernstein  <mitz@apple.com>

        Reviewed by Oliver Hunt.

        - fix http://bugs.webkit.org/show_bug.cgi?id=17988
          REGRESSION (r31114-31132): Crash in InlineBox::isDirty() opening chowhound.com

        Test: fast/css-generated-content/empty-content-with-float-crash.html

        * rendering/bidi.cpp:
        (WebCore::RenderBlock::layoutInlineChildren): Added a null check for
        the case where the block contains no in-flow elements but still lays
        out as a line flow, which can happen as a result of empty generated
        content.

2008-03-21  Sam Weinig  <sam@webkit.org>

        Reviewed by Oliver Hunt.

        Fix <rdar://problem/5788451>
        toDataURL not implemented for Windows (need mapping of MIME type to UTI)

        Hard code support for just PNG's on windows, the minimum the spec requires.

        * platform/MIMETypeRegistry.cpp:
        (WebCore::initializeSupportedImageMIMETypesForEncoding):
        * platform/graphics/cg/ImageBufferCG.cpp:
        (WebCore::utiFromMIMEType):
        (WebCore::ImageBuffer::toDataURL):

2008-03-21  Matt Lilek  <webkit@mattlilek.com>

        Not reviewed, Mac build fix.

        * bindings/objc/WebScriptObject.mm:
        (+[WebScriptObject _convertValueToObjcValue:originRootObject:rootObject:]):
        * bridge/jni/jni_utility.cpp:
        (KJS::Bindings::convertValueToJValue):
        * bridge/objc/objc_runtime.mm:
        (ObjcFallbackObjectImp::callAsFunction):

2008-03-21  Adam Roben  <aroben@apple.com>

        Attempt to fix the Mac build

        * bindings/objc/DOMUtility.mm:
        (KJS::createDOMWrapper):

2008-03-21  Adam Roben  <aroben@apple.com>

        Rename static info members to s_info

        This avoids conflicts with custom "info" methods, such as the one that
        will soon be added to Console.

        Reviewed by Ada Chan and Sam Weinig.

2008-03-21  David Hyatt  <hyatt@apple.com>

        <rdar://problem/5808863> Zooming should not let non-zero border width become zero

        Make sure zoomed values that begin >= 1 are not allowed to fall below 1.

        Reviewed by adele

        * css/CSSPrimitiveValue.cpp:
        (WebCore::CSSPrimitiveValue::computeLengthDouble):
        * loader/CachedImage.cpp:
        (WebCore::CachedImage::imageSize):
        (WebCore::CachedImage::imageRect):

2008-03-21  Kevin McCullough  <kmccullough@apple.com>

        Reviewed by Sam.

        -<rdar://problem/5712804> XMLHttpRequests do not show response contents, preview images (14313)
        -<rdar://problem/5712931> XMLHttpRequests should be shown separately and grouped (14315)
        -<rdar://problem/5732836> XMLHttpRequest: Inspector should show network activity/XHR in Console (17233)
        - Instrument the InspectorController to cache XHR resrouces since they are not cached by WebCore.
        The resources will be kept in the same map as all other resources so they will have the exact
        same lifecycle. 

        * ChangeLog:
        * page/InspectorController.cpp:
        (WebCore::InspectorCachedXMLHttpRequestResource::type):
        (WebCore::InspectorCachedXMLHttpRequestResource::setType):
        (WebCore::InspectorCachedXMLHttpRequestResource::data):
        (WebCore::InspectorCachedXMLHttpRequestResource::setData):
        (WebCore::InspectorCachedXMLHttpRequestResource::encoding):
        (WebCore::InspectorCachedXMLHttpRequestResource::setEncoding):
        (WebCore::InspectorCachedXMLHttpRequestResource::create):
        (WebCore::InspectorCachedXMLHttpRequestResource::InspectorCachedXMLHttpRequestResource):

2008-03-21  Rodney Dawes  <dobey@wayofthemonkey.com>

        Reviewed by Holger.

        http://bugs.webkit.org/show_bug.cgi?id=17981

        Remove WebCore/ForwardingHeaders from cppflags as it is not needed,
        and causes build problems with GTK+.

        * GNUmakefile.am:

2008-03-21  Dan Bernstein  <mitz@apple.com>

        Reviewed by Adele Peterson.

        - fix http://bugs.webkit.org/show_bug.cgi?id=17966
          REGRESSION (r31114-r31132): Clearing via br behaves unpredictably

        Test: fast/block/float/br-with-clear.html

        * rendering/bidi.cpp:
        (WebCore::RenderBlock::layoutInlineChildren): Fixed the logic for the
        very special case of an all-lines-clean block that ends with a float-
        clearing <br> by looking for the <br> at the end of the line rather
        than at its beginning.

2008-03-21  Adam Roben  <aroben@apple.com>

        Don't allow any newly-scheduled plugin requests to be serviced when JS is paused

        This is a followup to r31199.

        Reviewed by Tim Hatcher.

        * plugins/PluginView.cpp:
        (WebCore::PluginView::requestTimerFired): Added an assertion that JS
        is not paused.
        (WebCore::PluginView::scheduleRequest): Don't start the request timer
        if JS is paused. This is the bug fix.
        (WebCore::PluginView::setJavaScriptPaused): Replaced the use of
        m_requestTimerWasActive with a check to see if we have any pending
        requests. m_requestTimerWasActive would not be accurate if a new
        request had been scheduled while JS was paused.
        (WebCore::PluginView::PluginView): Removed initialization of
        m_requestTimerWasActive.
        * plugins/PluginView.h: Removed m_requestTimerWasActive.

2008-03-20  Dan Bernstein  <mitz@apple.com>

        Reviewed by Anders Carlsson.

        - fix an assertion failure due to a line being marked dirty during
          computeVerticalPositionsForLine() due to temporary box destruction

        Test: fast/inline/clean-after-removing-temp-boxes.html

        * rendering/RenderText.cpp:
        (WebCore::RenderText::setTextWithOffset): Added code to dirty lines
        when this method is called on an empty text node, which has no line
        boxes.
        * rendering/bidi.cpp:
        (WebCore::RenderBlock::computeVerticalPositionsForLine): Mark the line
        clean in the end.

2008-03-20  Anders Carlsson  <andersca@apple.com>

        Reviewed by Maciej.

        Make some member variables private.
        
        * loader/ResourceLoader.cpp:
        (WebCore::ResourceLoader::ResourceLoader):
        * loader/ResourceLoader.h:

2008-03-20  Anders Carlsson  <andersca@apple.com>

        Reviewed by Maciej.

        Get rid of m_originalURL in ResourceLoader.

        * loader/ResourceLoader.cpp:
        (WebCore::ResourceLoader::load):
        Don't store m_originalURL.
        
        * loader/ResourceLoader.h:
        * loader/SubresourceLoader.cpp:
        (WebCore::SubresourceLoader::willSendRequest):
        Use the url of the current request instead of the original URL.

2008-03-20  Anders Carlsson  <andersca@apple.com>

        Reviewed by Maciej.

        Small loader cleanups.
        
        * loader/MainResourceLoader.cpp:
        (WebCore::MainResourceLoader::willSendRequest):
        No need to call setRequest here, ResourceLoader::willSendRequest takes care of that. 
        Also, there is no need to check that newRequest is null here, because we assert earlier that it is not.
        
        * loader/ResourceLoader.h:
        Get rid of setRequest, it is no longer needed.

2008-03-20  Anders Carlsson  <andersca@apple.com>

        Get rid of a couple of unnecessary class declarations.
        
        * loader/SubresourceLoader.h:

2008-03-20  David Hyatt  <hyatt@apple.com>

        Add a new value to background-clip, "text", that allows backgrounds to be clipped to foreground text (and
        associated text decorations like shadows and underlines).

        Reviewed by Beth

        * css/CSSParser.cpp:
        (WebCore::CSSParser::parseBackgroundProperty):
        * css/CSSPrimitiveValueMappings.h:
        (WebCore::CSSPrimitiveValue::CSSPrimitiveValue):
        (WebCore::CSSPrimitiveValue::operator EBackgroundBox):
        * platform/graphics/GraphicsContext.cpp:
        (WebCore::GraphicsContext::clipToImageBuffer):
        * platform/graphics/GraphicsContext.h:
        * platform/graphics/cg/GraphicsContextCG.cpp:
        (WebCore::GraphicsContext::clipToImageBuffer):
        * rendering/InlineBox.cpp:
        (WebCore::InlineBox::paint):
        * rendering/InlineFlowBox.cpp:
        (WebCore::InlineFlowBox::paintBackgrounds):
        (WebCore::InlineFlowBox::paintBackground):
        (WebCore::InlineFlowBox::paintBoxDecorations):
        * rendering/InlineFlowBox.h:
        * rendering/InlineTextBox.cpp:
        (WebCore::InlineTextBox::paint):
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::paintColumns):
        (WebCore::RenderBlock::paintObject):
        (WebCore::RenderBlock::paintFloats):
        * rendering/RenderBlock.h:
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::paintRootBoxDecorations):
        (WebCore::RenderBox::paintBoxDecorations):
        (WebCore::RenderBox::paintBackgrounds):
        (WebCore::RenderBox::paintBackground):
        (WebCore::RenderBox::paintBackgroundExtended):
        * rendering/RenderBox.h:
        * rendering/RenderFieldset.cpp:
        (WebCore::RenderFieldset::paintBoxDecorations):
        * rendering/RenderFlow.cpp:
        (WebCore::RenderFlow::paintLines):
        * rendering/RenderObject.h:
        (WebCore::RenderObject::paintBackgroundExtended):
        * rendering/RenderStyle.h:
        * rendering/RenderTable.cpp:
        (WebCore::RenderTable::paintBoxDecorations):
        * rendering/RenderTableCell.cpp:
        (WebCore::RenderTableCell::paintBackgroundsBehindCell):

2008-03-20  Adam Roben  <aroben@apple.com>

        Allow pausing/blocking of JS execution by plugins

        Part of Bug 17133: Should support pausing JavaScript execution without
        hanging the process

        <http://bugs.webkit.org/show_bug.cgi?id=17133>
        <rdar://problem/5719551>

        This patch doesn't affect Mac, which doesn't use the shared PluginView
        code.

        Note that this patch doesn't prevent plugins from executing JS via an
        NPObject they've already gotten hold of. It just blocks obtaining new
        NPObjects and pauses any requests to evaluate javascript: URIs. This
        is probably good enough for now because most plugins seem to always
        obtain the Window object each time they want to execute JS.

        Reviewed by Tim Hatcher.

        * plugins/PluginView.cpp:
        (WebCore::PluginView::getValue): Return an error if JS is paused.
        (WebCore::PluginView::setJavaScriptPaused): Stop the request timer if
        we're pausing, and resume it if we're unpausing.
        (WebCore::PluginView::PluginView): Initialize new members.
        * plugins/PluginView.h:

2008-03-20  Adam Roben  <aroben@apple.com>

        Allow pausing of callOnMainThread callbacks

        Part of Bug 17133: Should support pausing JavaScript execution without
        hanging the process

        <http://bugs.webkit.org/show_bug.cgi?id=17133>
        <rdar://problem/5719551>

        Reviewed by Tim Hatcher.

        * platform/MainThread.cpp:
        (WebCore::dispatchFunctionsFromMainThread): If callbacks are paused,
        don't dispatch the functions.
        (WebCore::setMainThreadCallbacksPaused): Added. If we're being
        unpaused, call scheduleDispatchFunctionsOnMainThread so that any
        queued callbacks will get dispatched in the near future.
        * platform/MainThread.h:

2008-03-20  Adam Roben  <aroben@apple.com>

        Allow blocking of JS event handlers/javascript: URIs per-Frame

        Part of Bug 17133: Should support pausing JavaScript execution without
        hanging the process

        <http://bugs.webkit.org/show_bug.cgi?id=17133>
        <rdar://problem/5719551>

        Two new methods are added to KJSProxy: setPaused and isPaused. When
        setPaused(true) is called, JS event handlers are blocked and
        javascript: URIs will not be evaluated.

        Reviewed by Tim Hatcher.

        * bindings/js/kjs_events.cpp:
        (WebCore::JSAbstractEventListener::handleEvent):
          - Removed some old KJS_DEBUGGER code
          - Don't run the handler if the KJSProxy is paused.
        * bindings/js/kjs_proxy.cpp:
        (WebCore::KJSProxy::KJSProxy): Initialize new member.
        * bindings/js/kjs_proxy.h: Added new methods.
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::executeScript): Don't execute the script if the
        KJSProxy is paused.

2008-03-20  Jon Honeycutt  <jhoneycutt@apple.com>

        Reviewed by Anders.

        Fix Windows warning / leak: warning C4150: deletion of pointer to
        incomplete type 'WebCore::PluginRequest'; no destructor called

        * plugins/PluginView.cpp: Move PluginRequest class to PluginView.h so
        Windows PluginView destructor can use WTF::deleteAllValues to clean up
        m_requests.
        * plugins/PluginView.h:
        (WebCore::PluginRequest::PluginRequest):
        (WebCore::PluginRequest::frameLoadRequest):
        (WebCore::PluginRequest::notifyData):
        (WebCore::PluginRequest::sendNotification):
        (WebCore::PluginRequest::shouldAllowPopups):

2008-03-20  Mark Rowe  <mrowe@apple.com>

        Reviewed by Sam Weinig.

        Ensure that the defines in FEATURE_DEFINES are sorted so that they will match the default settings of build-webkit.
        This will prevent the world from being rebuilt if you happen to switch between building in Xcode and with build-webkit on the
        command-line.

        * Configurations/WebCore.xcconfig:

2008-03-20  Jon Honeycutt  <jhoneycutt@apple.com>

        Reviewed by Anders.

        <rdar://problem/5809600> REGRESSION:
        http/tests/plugins/cross-frame-object-access.html hangs Windows Layout
        Tests

        r30897 changed the way we conditionalize this feature.

        * plugins/PluginView.cpp:
        (WebCore::PluginView::getValue): Test ENABLE(NETSCAPE_PLUGIN_API)
        instead of USE(NPOBJECT).
        (WebCore::PluginView::bindingInstance): Same.

2008-03-20  Adam Roben  <aroben@apple.com>

        Highlight nodes when you hover over them in the Console

        Part of Bug 16532: Inspector should highlight nodes in page when
        hovering over nodes in Inspector's interface

        <http://bugs.webkit.org/show_bug.cgi?id=16532>
        <rdar://problem/5712896>

        Reviewed by Tim Hatcher.

        * page/inspector/ConsolePanel.js:
        (WebInspector.ConsolePanel._formatnode): Add mouseover/mouseout event
        listeners to highlight the node and clear the highlight.

2008-03-20  Adam Roben  <aroben@apple.com>

        Highlight nodes in the page when you hover over their DOM breadcrumbs

        Part of Bug 16532: Inspector should highlight nodes in page when
        hovering over nodes in Inspector's interface

        <http://bugs.webkit.org/show_bug.cgi?id=16532>
        <rdar://problem/5712896>

        Reviewed by Tim Hatcher.

        * page/inspector/DocumentPanel.js:
        (WebInspector.DocumentPanel): Add an mouseout event listener to the
        breadcrumbs element to clear the highlighted node.
        (WebInspector.DocumentPanel.updateBreadcrumbs): Change the mouseover
        event listener to highlight the node represented by the hovered
        breadcrumb.

2008-03-20  Adam Roben  <aroben@apple.com>

        Highlight nodes in the page when you hover over them in the DOM tree

        Part of Bug 16532: Inspector should highlight nodes in page when
        hovering over nodes in Inspector's interface

        <http://bugs.webkit.org/show_bug.cgi?id=16532>
        <rdar://problem/5712896>

        The inspected node is no longer highlighted (unless, of course, you
        hover over it).

        Reviewed by Tim Hatcher.

        * page/inspector/DocumentPanel.js:
        (WebInspector.DocumentPanel):
          - Don't highlight the focused node when the DOM tree is shown
          - Added mousemove/mouseout event listeners to set/clear the
            highlighted node. These are added to the root of the DOM tree
            instead of to each individual list item to avoid flashing as the
            mouse moves between nodes.
        (WebInspector.DocumentPanel.set focusedDOMNode): Don't highlight the
        focused node.
        (WebInspector.DocumentPanel._onmousemove): Highlight the node under
        the mouse.

2008-03-20  Adam Roben  <aroben@apple.com>

        Show nodes' content/padding/border/margin boxes in the node highlight

        Part of Bug 17221: Node highlight should show node metrics

        <http://bugs.webkit.org/show_bug.cgi?id=17221>
        <rdar://problem/5732822>

        Outstanding issues:
          1) We don't show padding/border/margins for inlines
          2) We don't show any numeric metrics, we just draw the boxes
          3) We'll probably want to tweak the look of the highlight some, at
             least to make the boxes better distinguishable

        Reviewed by Tim Hatcher.

        * page/InspectorController.cpp:
        (WebCore::drawOutlinedRect): Added. Just draws a single rect.
        (WebCore::drawHighlightForBoxes): Added. Takes the rects we calculated
        for the node and draws the highlight.
        (WebCore::InspectorController::drawNodeHighlight): Calculates the
        content/padding/border/margin boxes for blocks and passes them off to
        drawHighlightForBoxes. The behavior for inlines is for now unchanged.

2008-03-20  Adam Roben  <aroben@apple.com>

        Fix RenderContainer's override of addLineBoxRects to match RenderObject's

        RenderContainer::addLineBoxRects was never getting called because its
        parameters didn't match those of RenderObject::addLineBoxRects.

        Reviewed by Mitz Pettel.

        No test possible.

        * rendering/RenderContainer.cpp: Added an optional bool
        useSelectionHeight parameter to match RenderObject's method.
        * rendering/RenderContainer.h: Ditto.

2008-03-20  Marco Barisione  <marco.barisione@collabora.co.uk>

        Reviewed by Alp Toker.

        http://bugs.webkit.org/show_bug.cgi?id=17946
        [GTK] Widgets are not clipped

        * platform/gtk/RenderThemeGtk.cpp:
        (WebCore::paintMozWidget): pass the clipping rectangle to
        moz_gtk_widget_paint() instead of just the widget rectangle.

2008-03-20  David Hyatt  <hyatt@apple.com>

        Fix for http://bugs.webkit.org/show_bug.cgi?id=9279

        Make :hover work with the adjacent sibling selector.  This fix makes all forms of dynamic changes
        (class name changes, :hover, :focus, etc.) work properly when used with the + selector.

        Reviewed by weinig

        Added fast/css/dynamic-sibling-selector.html

        * dom/Element.cpp:
        (WebCore::Element::recalcStyle):

2008-03-20  Aaron Golden  <aegolden@gmail.com>

        Reviewed by Darin and David Kilzer.

        Addresses <http://bugs.webkit.org/show_bug.cgi?id=15263>, which caused certain marquees to not display.

        Test: fast/html/marquee-scroll.html

        * html/HTMLMarqueeElement.cpp:
        (WebCore::HTMLMarqueeElement::parseMappedAttribute):

2008-03-20  Adam Roben  <aroben@apple.com>

        Export InspectorController::drawNodeHighlight

        Reviewed by Tim Hatcher.

        * WebCore.base.exp: Also sorted this file.

2008-03-19  Stephanie Lewis  <slewis@apple.com>

        Rubber-stamped by Anders.

        Fix Windows Build

        * platform/cf/SharedBufferCF.cpp:
        (WebCore::SharedBuffer::createCFData):

2008-03-19  Stephanie Lewis <slewis@apple.com>

        Rubber-stamped by Anders.

        Fix Windows Build

        * platform/SharedBuffer.h:

2008-03-19  Justin Garcia  <justin.garcia@apple.com>

        Reviewed by Oliver.
        
        <rdar://problem/5780697> Copying content with CSS property values that are percentages can cause fidelity issues
         
        Elements with height: x%; overflow: visible; overlap what's below them when they are copied from
        a document in quirksmode and pasted into to one in standards mode.  This fix uses the computed 
        the value for a property if its value is a percentage.
        
        * css/CSSMutableStyleDeclaration.cpp:
        (WebCore::CSSMutableStyleDeclaration::addParsedProperty): Added so that we don't have to use
        setProperty from appendStartMarkup.  We already have a parsed property value, so we shouldn't
        use setProperty, since it takes in a String.  If we did, we would have to call CSSValue::cssText()
        for a String only to re-parse it in setProperty.  This wasn't extremely important now, but it will 
        be as we compute more properties to fix the rest of the copy/paste fidelity bugs.
        * css/CSSMutableStyleDeclaration.h:
        * editing/markup.cpp:
        (WebCore::appendStartMarkup): Compute values for properties that have percentage values.  We could
        perhaps narrow this special case to only include properties that are effected by quirksmode.

2008-03-19  Sam Weinig  <sam@webkit.org>

        Reviewed by Anders Carlsson.

        Fix for <rdar://problem/5785694>
        Crash occurs at KJS::Collector::collect() when loading web clip widgets with a PAC file

        Make the activeExecStates stack per JSGlobalObject instead of static to ensure
        thread safety.

        * bindings/objc/WebScriptObject.mm:
        (+[WebScriptObject throwException:]): Change to throw an exception on the current
        GlobalObject instead of the top of the static activeExecStates stack.
        (-[WebScriptObject setException:]): Change to use the top of the rootObjects GlobalObject
        instead of the top of the static activeExecStates stack.

        * bridge/c/c_instance.cpp:
        * bridge/c/c_instance.h:
        * bridge/jni/jni_instance.cpp:
        (JavaInstance::virtualBegin):
        (JavaInstance::virtualEnd):
        * bridge/jni/jni_instance.h:
        * bridge/objc/objc_instance.h:
        * bridge/objc/objc_instance.mm:
        (ObjcInstance::~ObjcInstance):
        (ObjcInstance::virtualBegin):
        (ObjcInstance::virtualEnd):
        * bridge/runtime.cpp:
        (KJS::Bindings::Instance::setDidExecuteFunction):
        (KJS::Bindings::Instance::didExecuteFunction):
        (KJS::Bindings::Instance::setCurrentGlobalObject): Added.
        (KJS::Bindings::Instance::currentGlobalObject): Added.
        (KJS::Bindings::Instance::begin):
        (KJS::Bindings::Instance::end):
        * bridge/runtime.h:
        (KJS::Bindings::Instance::virtualBegin): Renamed from begin().
        (KJS::Bindings::Instance::virtualEnd): Renamed from end().
        We now store the currently active globalObject everytime we cross the runtime
        object boundary.  To do this, we take advantage of the existing begin/end
        methods that are called when crossing this boundary, making begin set the current
        globalObject and then call the old begin, now called virtualBegin.

2008-03-19  Brady Eidson  <beidson@apple.com>

        Reviewed by Anders

        Change SharedBuffer so the wrapping platform data aspect can be shared with all CoreFoundation platforms
        (Mac and Windows instead of just Mac)

        * WebCore.vcproj/WebCore.vcproj: Add SharedBufferCF.cpp
        * WebCore.xcodeproj/project.pbxproj: Ditto

        * platform/SharedBuffer.cpp:
        * platform/SharedBuffer.h: Change the private c'tor from NSData to CFDataRef, other PLATFORM tweaks

        * platform/cf/SharedBufferCF.cpp: Added.
        (WebCore::SharedBuffer::SharedBuffer):
        (WebCore::SharedBuffer::createCFData): Non-Mac version of createCFData
        (WebCore::SharedBuffer::hasPlatformData):
        (WebCore::SharedBuffer::platformData):
        (WebCore::SharedBuffer::platformDataSize):
        (WebCore::SharedBuffer::maybeTransferPlatformData):
        (WebCore::SharedBuffer::clearPlatformData):

        * platform/mac/SharedBufferMac.mm:
        (WebCore::SharedBuffer::wrapNSData): Use the CFDataRef constructor via toll-free bridging
        (WebCore::SharedBuffer::createCFData): Mac-specific version of createCFData

2008-03-19  Oliver Hunt  <oliver@apple.com>

        Reviewed by Antti.

        Bug 17954: Canvas arc() with radius of 0 throws exception
        http://bugs.webkit.org/show_bug.cgi?id=17954

        Simple fix -- use >= instead of > when validating the radius.

        * html/CanvasRenderingContext2D.cpp:
        (WebCore::CanvasRenderingContext2D::arc):

2008-03-19  Justin Garcia  <justin.garcia@apple.com>

        Reviewed by Oliver.

        <rdar://problem/5794920> Acid3: Assertion failure in VisiblePosition::previous when clicking on results (17004)
        
        The position inside an empty inline-block was a candidate, but upstream and downstream
        would move across it without stopping.  This confused canonicalPosition, since no more
        than two candidates should have the same upstream/downstream (be visually equivalent).
        
        Code was added intentionally in isCandidate to make VisiblePositions inside empty 
        inline-blocks, so we need to make upstream/downstream understand that.

        * dom/Position.cpp:
        (WebCore::endsOfNodeAreVisuallyDistinctPositions): upstream and downstream used to only
        stop when entering or leaving a non-inline element (referred to as a "block").  We must also 
        avoid entering or leaving an empty inline-block.  This will allow a VisiblePosition there, to 
        match up with what the code in isCandidate intended.
        (WebCore::enclosingVisualBoundary): Removed enclosingBlock and replaced it with this.
        (WebCore::Position::upstream): Added better comments, called the new functions.
        (WebCore::Position::downstream): Ditto.
        * dom/Position.h:

2008-03-19  Dan Bernstein  <mitz@apple.com>

        Rubber-stamped by John Sullivan.

        - change CSS property and value keyword constants from all-caps with
          underscores to intra-caps.

        * css/makeprop.pl:
        * css/makevalues.pl:
        * All files using the constants

2008-03-19  Adam Roben  <aroben@apple.com>

        Make clicking anywhere in a row in the DOM tree select that row's node

        We now have mousedown and dblclick event listeners on the root of the
        tree that forward the event to the node on the row the mouse is over.

        Reviewed by Tim Hatcher.

        * page/inspector/DocumentPanel.js:
        (WebInspector.DocumentPanel): Added a dblclick and mousedown event
        listeners to the root of the tree.
        (WebInspector.DocumentPanel._treeElementFromEvent): Added. Finds the
        tree element for the row underneath the mouse.
        (WebInspector.DocumentPanel._ondblclick): Added. Sends the dblclick
        event on to the tree element in the current row.
        (WebInspector.DocumentPanel._onmousedown): Added. Selects the tree
        element in the current row.
        * page/inspector/treeoutline.js:
        (TreeOutline.treeElementFromPoint): Added.
        (TreeElement.treeElementSelected): Changed to call
        TreeElement.isEventWithinDisclosureTriangle, and added an early return.
        (TreeElement.treeElementToggled): Ditto.
        (TreeElement.isEventWithinDisclosureTriangle): Added.
        * page/inspector/utilities.js:
        (Node.enclosingNodeOrSelfWithNodeNameInArray): Added.
        (Node.enclosingNodeOrSelfWithNodeName): Now just calls
        enclosingNodeOrSelfWithNodeNameInArray.
        (Elemnt.get totalOffsetLeft): Added.
        (Elemnt.get totalOffsetTop): Added.

2008-03-19  Dan Bernstein  <mitz@apple.com>

        Reviewed by Sam Weinig.

        - fix assertion failure in RenderBlock::determineStartPosition() at http://www.wired.com/techbiz/it/magazine/16-04/bz_apple

        Test: fast/repaint/line-flow-with-floats-10.html

        * rendering/bidi.cpp:
        (WebCore::RenderBlock::determineStartPosition): Removed bogus assertion.
        If the float's top margin has changed and it has not been repositioned
        yet, we do not have its new y position.

2008-03-19  David Hyatt  <hyatt@apple.com>

        New implementation of full page zoom.  Because of how much doesn't transform when zooming, and because
        of the need to obey viewport constraints, I decided to take a completely different approach.  Now CSS
        lengths and intrinsic sizes are simply adjusted by the zoom factor.  This approach works much better and
        avoids pixel cracks more than the old approach.   In addition widgets "just work", namely plugins zoom
        and scrollbars do not.

        This patch also implements the IE zoom CSS property.  This property allows fine-grained control over
        zooming at the element level.  It takes values of normal | <number> | <percentage> to match WinIE.  In
        addition, in the vein of text-size-adjust for text zooming, I have extended the zoom property with an
        extra value, reset.  The reset keyword can be used to prevent a section of the page from scaling at all
        when a zoom is applied.

        Reviewed by olliej

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::CSSComputedStyleDeclaration::getPropertyCSSValue):
        Support the new 'zoom' property for getComputedStyle.

        * css/CSSParser.cpp:
        (WebCore::CSSParser::parseValue):
        Code that parses the 'zoom' property.

        * css/CSSPrimitiveValue.cpp:
        (WebCore::CSSPrimitiveValue::computeLengthInt):
        (WebCore::CSSPrimitiveValue::computeLengthIntForLength):
        (WebCore::CSSPrimitiveValue::computeLengthShort):
        (WebCore::CSSPrimitiveValue::computeLengthFloat):
        (WebCore::CSSPrimitiveValue::computeLengthDouble):
        * css/CSSPrimitiveValue.h:
        Extend all of the computeLength methods to take a multiplier so that lengths can be adjusted by the
        zoom factor.

        * css/CSSPropertyNames.in:
        Add the new zoom property to the list of properties we understand.

        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::applyDeclarations):
        (WebCore::CSSStyleSelector::applyProperty):
        (WebCore::CSSStyleSelector::mapBackgroundSize):
        (WebCore::CSSStyleSelector::mapBackgroundXPosition):
        (WebCore::CSSStyleSelector::mapBackgroundYPosition):
        (WebCore::CSSStyleSelector::getComputedSizeFromSpecifiedSize):
        * css/CSSStyleSelector.h:
        (WebCore::CSSStyleSelector::setStyle):
        Pass in the zoom factor when computing all lengths in CSS.

        * css/CSSValueKeywords.in:
        Add support for the 'reset' keyword of the zoom property.

        * dom/Document.cpp:
        (WebCore::Document::recalcStyle):
        Set the 'zoom' CSS property on the RenderView.  This is how we implement full page zoom.

        * html/CanvasRenderingContext2D.cpp:
        (WebCore::size):
        Make sure the back end canvas size ignores zooming when rendering images.

        * html/HTMLImageElement.cpp:
        (WebCore::HTMLImageElement::width):
        (WebCore::HTMLImageElement::height):
        (WebCore::HTMLImageElement::naturalWidth):
        (WebCore::HTMLImageElement::naturalHeight):
        Use the unzoomed width/height if we have no style information in HTMLImageElement.cpp.

        * loader/CachedImage.cpp:
        (WebCore::CachedImage::ref):
        (WebCore::CachedImage::imageSize):
        (WebCore::CachedImage::imageRect):
        * loader/CachedImage.h:
        (WebCore::CachedImage::canRender):
        Force access to the CachedImage metrics to take a multiplier so that people have to think about
        the zoom factor.  The "intrinsic size" of the image then takes that into account.

        * loader/ImageDocument.cpp:
        (WebCore::ImageTokenizer::finish):
        (WebCore::ImageDocument::scale):
        (WebCore::ImageDocument::resizeImageToFit):
        (WebCore::ImageDocument::imageChanged):
        (WebCore::ImageDocument::restoreImageSize):
        (WebCore::ImageDocument::imageFitsInWindow):
        Make sure image documents respect the zoom.

        * page/AnimationController.cpp:
        (WebCore::ImplicitAnimation::animate):
        Make the 'zoom' CSS property work with CSS transitions.

        * page/Frame.h:
        (WebCore::Frame::pageZoomFactor):
        (WebCore::Frame::textZoomFactor):
        Add accessors for obtaining the pageZoom vs. textZoom.

        * page/FrameView.cpp:
        (WebCore::FrameView::adjustViewSize):
        Remove the old zoom implementation that used transforms.

        * page/mac/WebCoreAXObject.mm:
        (-[WebCoreAXObject accessibilityIsIgnored]):
        Pass in the zoom factor.

        * rendering/InlineFlowBox.cpp:
        (WebCore::InlineFlowBox::paintBackground):
        (WebCore::InlineFlowBox::paintBoxDecorations):
        Pass in the zoom factor when testing for size.

        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::calculateBackgroundSize):
        (WebCore::RenderBox::imageChanged):
        (WebCore::RenderBox::paintBackgroundExtended):
        (WebCore::RenderBox::calcHeight):
        * rendering/RenderFrameSet.cpp:
        (WebCore::RenderFrameSet::layout):
        * rendering/RenderHTMLCanvas.cpp:
        (WebCore::RenderHTMLCanvas::canvasSizeChanged):
        * rendering/RenderHTMLCanvas.h:
        (WebCore::RenderHTMLCanvas::renderName):
        (WebCore::RenderHTMLCanvas::intrinsicSizeChanged):
        * rendering/RenderImage.cpp:
        (WebCore::RenderImage::setImageSizeForAltText):
        (WebCore::RenderImage::imageChanged):
        (WebCore::RenderImage::calcReplacedWidth):
        (WebCore::RenderImage::calcReplacedHeight):
        * rendering/RenderImage.h:
        (WebCore::RenderImage::intrinsicSizeChanged):
        * rendering/RenderListMarker.cpp:
        (WebCore::RenderListMarker::layout):
        (WebCore::RenderListMarker::imageChanged):
        (WebCore::RenderListMarker::getRelativeMarkerRect):
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::mustRepaintBackgroundOrBorder):
        (WebCore::RenderObject::paintBorder):
        Pass in the zoom factor when testing for size.

        * rendering/RenderReplaced.cpp:
        (WebCore::RenderReplaced::RenderReplaced):
        (WebCore::RenderReplaced::setStyle):
        (WebCore::RenderReplaced::intrinsicSizeChanged):
        * rendering/RenderReplaced.h:
        Added a new call when the zoom factor changes, intrinsicSizeChanged().  Replaced element subclasses
        respond to this via overrides.

        * rendering/RenderStyle.cpp:
        (WebCore::StyleVisualData::StyleVisualData):
        (WebCore::StyleInheritedData::StyleInheritedData):
        (WebCore::StyleInheritedData::operator==):
        (WebCore::RenderStyle::diff):
        * rendering/RenderStyle.h:
        (WebCore::StyleVisualData::operator==):
        (WebCore::RenderStyle::zoom):
        (WebCore::RenderStyle::zoomInEffect):
        (WebCore::RenderStyle::setZoom):
        (WebCore::RenderStyle::setZoomInEffect):
        (WebCore::RenderStyle::initialZoom):
        Support for 'zoom' in the RenderStyle.  "zoomInEffect" represents the computed zoom taking into account
        all the zooms specified on ancestors.

        * rendering/RenderTableCol.cpp:
        (WebCore::RenderTableCol::imageChanged):
        * rendering/RenderTableRow.cpp:
        (WebCore::RenderTableRow::imageChanged):
        * rendering/RenderTableSection.cpp:
        (WebCore::RenderTableSection::imageChanged):
        * rendering/RenderVideo.h:
        (WebCore::RenderVideo::intrinsicSizeChanged):
        Pass in the zoom factor.

        * rendering/RenderView.cpp:
        (WebCore::RenderView::calcHeight):
        (WebCore::RenderView::calcWidth):
        (WebCore::RenderView::layout):
        (WebCore::RenderView::viewHeight):
        (WebCore::RenderView::viewWidth):
        * rendering/RenderView.h:
        (WebCore::RenderView::zoomFactor):
        Back out the old implementation.

2008-03-19  Adam Roben  <aroben@apple.com>

        Rename firstParent* methods to enclosingNode*

        Rubberstamped by John Sullivan.

        * page/inspector/ConsolePanel.js:
        * page/inspector/DocumentPanel.js:
        * page/inspector/NetworkPanel.js:
        * page/inspector/inspector.js:
        * page/inspector/utilities.js:

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-19  Mark Rowe  <mrowe@apple.com>

        Reviewed by Oliver Hunt.

        Use WTF::Unicode abstraction rather than using ICU functions directly.

        * html/PreloadScanner.cpp:
        (WebCore::PreloadScanner::tokenize):

2008-03-19  Mark Rowe  <mrowe@apple.com>

        Attempt to fix the Gtk build.

        * platform/network/curl/ResourceHandleCurl.cpp:
        (WebCore::ResourceHandle::setHostAllowsAnyHTTPSCertificate):

2008-03-18  Darin Adler  <darin@apple.com>

        Reviewed by Maciej.

        - Speed up JavaScript built-in properties by changing the
          hash table to take advantage of the identifier objects

        5% speedup for Acid3 test 26

        * bindings/js/JSDOMWindowBase.cpp:
        (WebCore::JSDOMWindowBase::getOwnPropertySlot): Update for change to HashTable.
        (WebCore::JSDOMWindowBase::put): Ditto.
        * bindings/js/JSDOMWindowCustom.cpp:
        (WebCore::JSDOMWindow::customGetOwnPropertySlot): Ditto.
        * bindings/js/JSHTMLInputElementBase.cpp:
        (WebCore::JSHTMLInputElementBase::getOwnPropertySlot): Ditto.
        * bindings/js/JSHistoryCustom.cpp:
        (WebCore::JSHistory::customGetOwnPropertySlot): Ditto.
        * bindings/js/JSLocation.cpp:
        (WebCore::JSLocation::customGetOwnPropertySlot): Ditto.
        (WebCore::JSLocation::put): Ditto.
        * bindings/js/kjs_binding.cpp:
        (WebCore::nonCachingStaticFunctionGetter): Ditto.

        * bindings/scripts/CodeGeneratorJS.pm: Same changes as in the
        create_hash_table script.

2008-03-18  Matt Lilek  <webkit@mattlilek.com>

        Fix the Gtk build for real this time.

        * platform/network/curl/AuthenticationChallenge.h:

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-18  Matt Lilek  <webkit@mattlilek.com>

        Not reviewed, build fix.

        * platform/network/curl/AuthenticationChallenge.h:

2008-03-18  Brent Fulgham  <bfulgham@gmail.com>

        Reviewed by Adam Roben.

        Provide some stub implementations for things that WebKit
        uses for performing authentication/challenge activities.  This
        is in support of http://bugs.webkit.org/show_bug.cgi?id=17837

        * platform/network/ResourceHandle.h:
        * platform/network/curl/AuthenticationChallenge.h:
        (WebCore::AuthenticationChallenge::AuthenticationChallenge):
        (WebCore::AuthenticationChallenge::sourceHandle):

2008-03-18  Eric Seidel  <eric@webkit.org>

        Reviewed by Oliver.

        Fix SVGImage crash seen once, and obvious via code inspection.
        
        I was not able to find a test case for this.

        * svg/graphics/SVGImage.cpp:
        (WebCore::SVGImage::setContainerSize):
        (WebCore::SVGImage::usesContainerSize):
        (WebCore::SVGImage::hasRelativeWidth):
        (WebCore::SVGImage::hasRelativeHeight):

2008-03-18  Rodney Dawes  <dobey@wayofthemonkey.com>

        Fix Qt build after r31123.

        Add PluginView methods to TemporaryLinkStubs.

        * platform/qt/TemporaryLinkStubs.cpp:

2008-03-18  Sam Weinig  <sam@webkit.org>

        Reviewed by Darin Adler.

        - Speed up JavaScript prototype and constructor object creation
          using a static Identifier in the self() methods to avoid the
          cost of creating one from a c-string each time.

        5% speedup for Acid3 test 26

        * bindings/scripts/CodeGeneratorJS.pm:

2008-03-18  Antti Koivisto  <antti@apple.com>

        Reviewed by Mark Rowe.

        Enable preloading for other platforms besides Mac.

        * GNUmakefile.am:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCoreSources.bkl:
        * html/HTMLTokenizer.cpp:
        * html/HTMLTokenizer.h:
        * html/PreloadScanner.cpp:
        (WebCore::PreloadScanner::tokenize):

2008-03-18  Dan Bernstein  <mitz@apple.com>

        Reviewed by Adele Peterson.

        - fix <rdar://problem/5805127> REGRESSION (r31116): Assertion failure (floatIndex < floats.size()) in RenderBlock::determineStartPosition() at digg.com

        Test: fast/dynamic/floating-to-positioned.html

        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::setStyle): Added code to remove a float from
        object lists if its position property changes to something other than
        static, since then it ceases to be a float.

2008-03-18  Adam Roben  <aroben@apple.com>

        Windows build fix after r31123

        * plugins/win/PluginViewWin.cpp: Add back MozillaUserAgent.

2008-03-18  Dan Bernstein  <mitz@apple.com>

        Reviewed by Darin Adler.

        - eliminate RenderFlow::m_clear

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::layoutBlock): Removed code to set m_clear.
        (WebCore::RenderBlock::newLine): Added a 'clear' parameter.
        * rendering/RenderBlock.h:
        * rendering/RenderFlow.h:
        (WebCore::RenderFlow::RenderFlow): Removed initialization of m_clear.
        * rendering/bidi.cpp:
        (WebCore::RenderBlock::layoutInlineChildren): Added a local 'clear'
        variable, passing a pointer to it to findNextLineBreak() and its value
        to newLine(). 
        (WebCore::RenderBlock::findNextLineBreak): Added a 'clear' parameter,
        which this method adjusts when it encounters a <br>.

2008-03-18  Simon Hausmann  <hausmann@webkit.org>

        Reviewed by Holger.

        Fix the Qt build and clean up the invoke mechanism for dispatching
        functions in the main thread by using QMetaObject::invokeMethod
        instead of posting a null event.

        * platform/qt/MainThreadQt.cpp:

2008-03-18  Rodney Dawes  <dobey@wayofthemonkey.com>

        Fix Mac build from commit of r31123.

        Add a typedef for NSView* to PlatformWidget, remove duplicate PluginMessageThrottlerWin definition.

        * platform/Widget.h:
        * WebCore.vcproj/WebCore.vcproj:

2008-03-18  Rodney Dawes  <dobey@wayofthemonkey.com>

        Reviewed by Jon Honeycutt.

        Add PluginView.cpp and npapi.cpp to build files.
        Copy win/PluginViewWin.cpp to PluginView.cpp for shared code.
        Split Windows specific code out of PluginView.cpp.
        Add #if USE(NPOBJECT) around dependant code.
        Use npruntime_internal.h instead of npapi.h.
        Add PlatformWidget typedef to Widget.h.
        Update WidgetGtk.cpp for the PlatformWidget usage.
        Add needed methods to TemporaryLinkStubs for GTK+ port.

        * GNUmakefile.am:
        * WebCore.pro:
        * WebCoreSources.bkl:
        * WebCore.vcproj/WebCore.vcproj:
        * plugins/win/PluginViewWin.cpp:
        * plugins/PluginView.cpp:
        * plugins/PluginView.h:
        * plugins/npapi.cpp:
        * platform/Widget.h:
        * platform/gtk/WidgetGtk.cpp:
        * platform/gtk/TemporaryLinkStubs.cpp:

2008-03-17  Darin Adler  <darin@apple.com>

        Reviewed by Maciej.

        - speed up document property fetching (eliminate the AtomicString
          objects made during document property lookup)

        3% speedup for Acid3 test 26

        * bindings/js/JSDOMWindowBase.cpp:
        (WebCore::JSDOMWindowBase::getOwnPropertySlot): Use AtomicString::find to
        locate the AtomicString, only if already present. Also call the new faster
        versions of the hasNamedItem and hasElementWithId functions that don't
        ref/deref the AtomicStringImpl, get inlined, etc.
        * bindings/js/JSHTMLDocumentCustom.cpp:
        (WebCore::JSHTMLDocument::canGetItemsForName): Ditto.
        (WebCore::writeHelper): Use a Vector instead of a String to build up
        the string to avoid the bad performance of string append.

        * dom/Document.cpp: Tweaked code and comments a bit. Nothing substantive.
        * dom/Document.h: Added new hasElementWithId function that's faster than
        getElementById because it doesn't ref/deref the AtomicStringImpl*, gets
        inlined, doesn't have to handle the 0 case, and doesn't try to return the
        element pointer (just a boolean).

        * html/HTMLAppletElement.cpp:
        (WebCore::HTMLAppletElement::parseMappedAttribute): Use AtomicString
        consistently. Also renamed the data member for clarity.
        (WebCore::HTMLAppletElement::insertedIntoDocument): Ditto.
        (WebCore::HTMLAppletElement::removedFromDocument): Ditto.
        * html/HTMLAppletElement.h: Ditto.

        * html/HTMLDocument.cpp:
        (WebCore::addItemToMap): Use AtomicString instead of String.
        (WebCore::removeItemFromMap): Ditto.
        (WebCore::HTMLDocument::addNamedItem): Updated for member name change.
        (WebCore::HTMLDocument::removeNamedItem): Ditto.
        (WebCore::HTMLDocument::addExtraNamedItem): Ditto.
        (WebCore::HTMLDocument::removeExtraNamedItem): Ditto.
        (WebCore::HTMLDocument::clear): Added. Moved code here from the JavaScript
        bindings. If we're going to have an empty placeholder function, there's no
        reason to have it in the bindings instead of here.
        * html/HTMLDocument.h: Added clear. Changed the named item function
        arguments to AtomicString insted of String. Changed the NameCountMap to
        use AtomicStringImpl* instead of StringImpl*. Renamed the data members
        to add a m_ prefix and remove the needless doc prefix. Added hasNamedItem
        and hasExtraNamedItem functions that are inlined and faster than the old
        idiom because they doesn't ref/deref the AtomicStringImpl*, get inlined,
        and don't have to handle the 0 case.
        * html/HTMLDocument.idl: Removed the [Custom] attribute on clear and took
        it out of the JavaScript-specific section.

        * html/HTMLEmbedElement.cpp:
        (WebCore::HTMLEmbedElement::parseMappedAttribute): Use AtomicString
        consistently. Also renamed the data member for clarity.
        (WebCore::HTMLEmbedElement::insertedIntoDocument): Ditto.
        (WebCore::HTMLEmbedElement::removedFromDocument): Ditto.
        * html/HTMLFormElement.cpp:
        (WebCore::HTMLFormElement::insertedIntoDocument): Ditto.
        (WebCore::HTMLFormElement::removedFromDocument): Ditto.
        (WebCore::HTMLFormElement::parseMappedAttribute): Ditto.
        * html/HTMLFormElement.h: Ditto.

        * html/HTMLFrameElementBase.cpp:
        (WebCore::HTMLFrameElementBase::openURL): Renamed m_name to m_frameName for
        clarity, since the frame name is not the same as the name attribute.
        (WebCore::HTMLFrameElementBase::parseMappedAttribute): Ditto.
        (WebCore::HTMLFrameElementBase::setNameAndOpenURL): Ditto.
        * html/HTMLFrameElementBase.h: Ditto.

        * html/HTMLIFrameElement.cpp:
        (WebCore::HTMLIFrameElement::parseMappedAttribute): Use AtomicString
        consistently. Also renamed the data member for clarity.
        (WebCore::HTMLIFrameElement::insertedIntoDocument): Ditto.
        (WebCore::HTMLIFrameElement::removedFromDocument): Ditto.
        * html/HTMLIFrameElement.h: Ditto.
        * html/HTMLImageElement.cpp:
        (WebCore::HTMLImageElement::parseMappedAttribute): Ditto.
        (WebCore::HTMLImageElement::insertedIntoDocument): Ditto.
        (WebCore::HTMLImageElement::removedFromDocument): Ditto.
        * html/HTMLImageElement.h: Ditto.
        * html/HTMLObjectElement.cpp:
        (WebCore::HTMLObjectElement::parseMappedAttribute): Ditto.
        (WebCore::HTMLObjectElement::insertedIntoDocument): Ditto.
        (WebCore::HTMLObjectElement::removedFromDocument): Ditto.
        (WebCore::HTMLObjectElement::updateDocNamedItem): Ditto.
        * html/HTMLObjectElement.h: Ditto.

        * html/HTMLParamElement.cpp:
        (WebCore::HTMLParamElement::isURLAttribute): Use equalIgnoringCase instead
        of callling lower().

        * html/HTMLPlugInElement.h: Changed the type of m_name. The code that
        uses this is in HTMLAppletElement, HTMLEmbedElement, and HTMLObjectElement.

        * platform/text/AtomicString.cpp:
        (WebCore::equal): Moved to an inline so we can share this code between a
        few different functions. It could move to a header too if we want to use
        it elsewhere.
        (WebCore::UCharBufferTranslator::equal): Change to use inline.
        (WebCore::HashAndCharactersTranslator::hash): Added.
        (WebCore::HashAndCharactersTranslator::equal): Added.
        (WebCore::HashAndCharactersTranslator::translate): Added.
        (WebCore::AtomicString::add): Improved the Identifier and UString overloads
        to use the already-computed hash code instead of rehashing the string.
        (WebCore::AtomicString::find): Added.
        * platform/text/AtomicString.h: Added a find function so we can avoid
        allocating memory just to look up a string in an atomic string set or map.

        * platform/text/StringImpl.h: Added declarations needed for the
        AtomicString changes.

2008-03-17  Timothy Hatcher  <timothy@apple.com>

        Reviewed by Mark Rowe.

        Bug 17908: Various bugs in the Console completion code
        http://bugs.webkit.org/show_bug.cgi?id=17908

        * page/inspector/ConsolePanel.js:
        (WebInspector.ConsolePanel.complete): Moved the code that checked for the caret being at the end
        of the prompt into the _caretAtEndOfPrompt helper function.
        (WebInspector.ConsolePanel.messagesSelectStart): Clear and redo the auto complete when the selection changes.
        (WebInspector.ConsolePanel._caretInsidePrompt): Fixed a logic error that always caused a false result.
        (WebInspector.ConsolePanel._caretAtEndOfPrompt): Added. Tests if the selection is a caret at the
        end of the prompt.
        (WebInspector.ConsolePanel._moveCaretToEndOfPrompt): Changed the offset to use the childNodes length.
        This makes sure the caret is at the end when there are multiple text nodes in the prompt.

2008-03-17  Dan Bernstein  <mitz@apple.com>

        Rubber-stamped by Dave Hyatt.

        - FloatingObject cleanup

        Renamed FloatingObject's data members as follows: node -> m_renderer,
        startY -> m_top, endY -> m_bottom, left -> m_left, width -> m_width,
        and noPaint -> !m_shouldPaint, reversing the meaning of the flag.

        Also addressed the FIXME in RenderBlock::containsFloat().

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::repaintOverhangingFloats):
        (WebCore::RenderBlock::paintFloats):
        (WebCore::RenderBlock::insertFloatingObject):
        (WebCore::RenderBlock::removeFloatingObject):
        (WebCore::RenderBlock::positionNewFloats):
        (WebCore::RenderBlock::leftRelOffset):
        (WebCore::RenderBlock::rightRelOffset):
        (WebCore::RenderBlock::nextFloatBottomBelow):
        (WebCore::RenderBlock::floatBottom):
        (WebCore::RenderBlock::floatRect):
        (WebCore::RenderBlock::lowestPosition):
        (WebCore::RenderBlock::rightmostPosition):
        (WebCore::RenderBlock::leftmostPosition):
        (WebCore::RenderBlock::leftBottom):
        (WebCore::RenderBlock::rightBottom):
        (WebCore::RenderBlock::clearFloats):
        (WebCore::RenderBlock::addOverhangingFloats):
        (WebCore::RenderBlock::addIntrudingFloats):
        (WebCore::RenderBlock::containsFloat): Changed to return false if the
        floats lists exists but is empty, since line layout code no longer
        relies on the buggy behavior.
        (WebCore::RenderBlock::nodeAtPoint):
        (WebCore::RenderBlock::adjustForBorderFit):
        * rendering/RenderBlock.h:
        (WebCore::RenderBlock::containsFloats):
        (WebCore::RenderBlock::FloatingObject::FloatingObject):
        * rendering/bidi.cpp:
        (WebCore::RenderBlock::layoutInlineChildren):
        (WebCore::RenderBlock::matchedEndLine):

2008-03-17  Dan Bernstein  <mitz@apple.com>

        Reviewed by Dave Hyatt.

        - allow incremental relayout of blocks that contain floats

        Tests: fast/repaint/line-flow-with-floats-[1-9].html

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::clearFloatsIfNeeded): Cleaned up by moving most
        of the function body out of an if statement which was replaced with an
        early return.
        (WebCore::RenderBlock::insertFloatingObject): Cleaned up by moving most
        of the function body out of an if statement and moving the ASSERT, which
        is a crash in release builds, to the beginning. Made this function set
        the m_isDescendant flag of floating objects it creates.
        (WebCore::RenderBlock::removeFloatingObject): Added a call to
        markLinesDirtyInVerticalRange() when removing a float from a block with
        inline children.
        (WebCore::RenderBlock::markLinesDirtyInVerticalRange): Added. Marks the
        lines in the given range as dirty.
        (WebCore::RenderBlock::clearFloats): Added code to detect changes to
        the geometry of floats intruding into this block from other blocks and
        mark any lines whose available width has changed as a result as dirty.

        * rendering/RenderBlock.h:
        (WebCore::RenderBlock::FloatWithRect::FloatWithRect): Added a structure
        to cache a float with its position and size.
        (WebCore::RenderBlock::FloatingObject::FloatingObject): Added an
        m_isDescendant flag, used by clearFloats() to distinguish between floats
        entering the block from outside and floats internal to the block.

        * rendering/RootInlineBox.h:
        (WebCore::RootInlineBox::floats): Added.
        (WebCore::RootInlineBox::floatsPtr): Added.
        (WebCore::RootInlineBox::Overflow::Overflow): Added a data member to
        hold the floats originating on the line.

        * rendering/bidi.cpp:
        (WebCore::RenderBlock::layoutInlineChildren): Made the existence of
        floats not force a full layout. Changed to cache the geometry of floats
        in the block and detect changes to it. If a float's size or position
        changes, all lines from that point on are treated as dirty. An exception
        is a change in the dimensions of a float on an otherwise-clean line,
        which only dirties lines potentially affected by the change (see
        determineStartPosition()). Added code to update each RootInlineBox's
        set of floats as lines are laid out. Added code to shift floats
        belonging to clean lines in the end along with the lines.
        (WebCore::RenderBlock::determineStartPosition): Made this function look
        for changes to floats' dimensions and mark lines as dirty accordingly.
        Also look for new floats and if found, cause a full layout. Added code
        to re-add floats belonging to clean lines.
        (WebCore::RenderBlock::matchedEndLine): Added checking that the clean
        lines in the end can be shifted vertically as needed, i.e. that the
        available width along the way is uniform.

2008-03-17  Eric Seidel  <eric@webkit.org>

        Reviewed by darin.

        Fix _NPN_IntFromIdentifier (and export the symbol for use!)

        Test: plugins/netscape-identifier-conversion.html

        * WebCore.NPAPI.exp:
        * bridge/npruntime.cpp:
        (_NPN_IntFromIdentifier):

2008-03-17  Sam Weinig  <sam@webkit.org>

        Reviewed by Dan Bernstein.

        Add HTMLCollection constructor to the Window object. (Omission noticed by Harri Porten)

        * page/DOMWindow.idl: 

2008-03-17  Holger Hans Peter Freyther  <zecke@selfish.org>

        Unreviewed Gtk+ build fix.

        * platform/gtk/ScrollViewGtk.cpp: remove const

2008-03-17  Julien Chaffraix  <julien.chaffraix@gmail.com>

        Reviewed by Holger.

        <http://bugs.webkit.org/show_bug.cgi?id=17754>

        - Implement ResourceHandle::loadResourceSynchronously to dispatch synchronous
          requests.

        - Implement WebCoreSynchronousLoader, the ResourceHandleClient which holds
          the network data, response and error for us during the transfert.

        * platform/network/ResourceHandleInternal.h: Remove trailing white space.
        * platform/network/curl/ResourceHandleCurl.cpp: Add WebCoreSynchronousLoader
        (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::ResourceHandle::loadResourceSynchronously): Implement method
        using WebCoreSynchronousLoader.

        * platform/network/curl/ResourceHandleManager.cpp:
        (WebCore::ResourceHandleManager::dispatchSynchronousJob):
        (WebCore::ResourceHandleManager::startJob):
        (WebCore::ResourceHandleManager::initializeHandle): Handle initialization
        method used both for synchronous and asynchronous job.

        * platform/network/curl/ResourceHandleManager.h:

2008-03-17  Darin Adler  <darin@apple.com>

        - try to fix GTK build

        * platform/ScrollView.h: Make setGtkAdjustments adjustment.
        And non-virtual (why was it virtual?).

2008-03-17  Rodney Dawes  <dobey@wayofthemonkey.com>

        Fix Bug 17898: Split PluginMessageThrottlerWin into its own files

        <http://bugs.webkit.org/show_bug.cgi?id=17898>

        Move the PluginMessageThrottlerWin class into its own files, in
        preparation for refactoring PluginView code to be shared.

        Reviewed and tweaked by Adam Roben.

        * WebCore.vcproj/WebCore.vcproj:
        * plugins/PluginView.h:
        * plugins/win/PluginMessageThrottlerWin.cpp: Added.
        * plugins/win/PluginMessageThrottlerWin.h: Added.
        * plugins/win/PluginViewWin.cpp:

2008-03-17  Adam Roben  <aroben@apple.com>

        More Windows build fixes after r31098

        * platform/ScrollView.h: Make some more methods public.

2008-03-17  Adam Roben  <aroben@apple.com>

        Windows and Qt build fixes after r31098

        * platform/ScrollView.h: Mark methods public that still need to be so.

2008-03-16  Timothy Hatcher  <timothy@apple.com>

        Reviewed by Darin Adler.

        Bug 17883: Console completion should support bracket notation
        http://bugs.webkit.org/show_bug.cgi?id=17883

        Also fixes a bug where the Inspector's window object was used instead of the
        inspected window object.

        * page/inspector/ConsolePanel.js:
        (WebInspector.ConsolePanel.complete): Add a comment about the _backwardsRange call.
        (WebInspector.ConsolePanel.completions): Add a comment about the _backwardsRange call.
        Check the last character of the expression for a dot or bracket. Fallback
        to the InspectorController.inspectedWindow() instead of window, this was a bad bug.
        If the expression caused an exception, just consider the prefix a window property.
        When bracket notation is used remember what quote was used and compared property names
        with that quote surrounding it. Also escape the property name for the quote and backslash.

2008-03-17  Robert Blaut  <webkit@blaut.biz>

        Reviewed by Darin.

        Fix for bug http://bugs.webkit.org/show_bug.cgi?id=17696
        Set default margin-bottom for form element in quirk mode
        and be compatible with Gecko.

        Tests: fast/css/margin-bottom-form-element-quirk.html
               fast/css/margin-bottom-form-element-strict.html

        * css/html4.css:
        * css/quirks.css:

2008-03-17  Antti Koivisto  <antti@apple.com>

        Reviewed by Darin.

        Speculative fix for http://bugs.webkit.org/show_bug.cgi?id=17878
        Bug 17878: REGRESSION: Acid3 sometimes crashes Webkit under WebCore::Loader::Host::cancelRequests
        
        I can't reproduce the crash or make a test case for this one but I'm pretty sure this
        is the problem. Essentially the same bug as http://bugs.webkit.org/show_bug.cgi?id=17862
        except in didFail() instead of didFinishLoading().

        * loader/loader.cpp:
        (WebCore::Loader::Host::didFail):

2008-03-17  Jan Michael Alonzo  <jmalonzo@unpluggable.com>

        Reviewed and tweaked by Darin.

        http://bugs.webkit.org/show_bug.cgi?id=17172
        Refactor platform checks in ScrollView.h

        * platform/ScrollView.h: Change #ifs around.

2008-03-17  Yuzhu Shen  <yuzhu.shen@gmail.com>

        Reviewed by Darin.

        Fix the bug: http://bugs.webkit.org/show_bug.cgi?id=17760
        It is necessary to load the image even when src="".

        Test: fast/images/load-img-with-empty-src.html

        * html/HTMLImageLoader.cpp:
        (WebCore::HTMLImageLoader::updateFromElement): isNull rather than isEmpty.

2008-03-17  Rodney Dawes  <dobey@wayofthemonkey.com>

        Fix GTK+ build from r31094.

        * plugins/gtk/PluginDatabaseGtk.cpp:
        (PluginDatabase::getPluginsInPaths):

2008-03-17  Adam Roben  <aroben@apple.com>

        Fix Bug 17876: REGRESSION (r31060): Attempting to visit Ofcom page causes crash

        <http://bugs.webkit.org/show_bug.cgi?id=17876>

        Reviewed by John.

        Test: fast/dom/remove-named-attribute-crash.html

        * dom/NamedAttrMap.cpp:
        (WebCore::NamedAttrMap::removeAttribute): Store the Attribute we're
        going to remove from the m_attributes Vector in a RefPtr so it doesn't
        get deleted when it is removed from the Vector.

2008-03-17  Rodney Dawes  <dobey@wayofthemonkey.com>

        Reviewed by Adam Roben.

        Implement PluginDatabase for GTK+ with PluginDatabaseGtk.cpp.
        Remove implemented methods from TemporaryLinkStubs.

        * GNUmakefile.am:
        * plugins/gtk:
        * plugins/gtk/PluginDatabaseGtk.cpp:
        * platform/gtk/TemporaryLinkStubs.cpp:

2008-03-17  Simon Hausmann  <hausmann@webkit.org>

        Fix the Qt build.

        * platform/text/qt/TextCodecQt.cpp:
        (WebCore::TextCodecQt::encode):
        * platform/text/qt/TextCodecQt.h:

2008-03-16  Maciej Stachowiak  <mjs@apple.com>

        Not reviewed, just fixing an incomplete comment from the last commit.

        * dom/Range.cpp:
        (WebCore::Range::surroundContents):

2008-03-16  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Darin.

        - fixed "Acid3 expects different exceptions for surroundContents calls involving comment nodes (affects Acid3 test 11)"
        http://bugs.webkit.org/show_bug.cgi?id=17509
        
        This gets us to 92/100

        * dom/Range.cpp:
        (WebCore::Range::surroundContents): Check for
        HIERARCHY_REQUEST_ERR before BAD_BOUNDARYPOINTS_ERR, since Acid3
        expects exceptional conditions to be tested in the order that the
        spec lists them. Also, adjust the HIERARCHY_REQUEST_ERR check. If
        the start point of the range is in a comment node, the node that
        would be the parent of a partial replacement is actually the
        comment node's parent (since comment nodes have character
        indices), so we should do the HIERARCHY_REQUEST_ERR check based on
        the parent of the comment node, as for text nodes, even though it
        will fail later with a different exception because it is not
        allowed to surround a partially selected non-text node.

2008-03-16  Brett Wilson  <brettw@chromium.org>

        Reviewed by Darin.

        Fix bug 15119: URL query characters that are unencodable in the
        request's character set should be converted to XML entities with
        non-alphanumeric characters escaped.

        Test: http/tests/uri/escaped-entity.html

        * html/FormDataList.cpp:
        (WebCore::FormDataList::appendString):
        * html/HTMLFormElement.cpp:
        (WebCore::HTMLFormElement::formData):
        * platform/KURL.cpp:
        (WebCore::encodeRelativeString):
        * platform/text/String.cpp:
        (WebCore::String::latin1):
        (WebCore::String::utf8):
        * platform/text/TextCodec.cpp:
        (WebCore::TextCodec::unencodableCharReplacement):
        * platform/text/TextCodec.h:
        * platform/text/TextCodecICU.cpp:
        (WebCore::urlEscapedEntityCallback):
        (WebCore::gbkUrlEscapedEntityCallack):
        (WebCore::TextCodecICU::encode):
        * platform/text/TextCodecICU.h:
        (WebCore::TextCodecICU::setNeedsGBKFallbacks):
        * platform/text/TextCodecLatin1.cpp:
        (WebCore::encodeComplexWindowsLatin1):
        (WebCore::TextCodecLatin1::encode):
        * platform/text/TextCodecLatin1.h:
        * platform/text/TextCodecUTF16.cpp:
        (WebCore::TextCodecUTF16::encode):
        * platform/text/TextCodecUTF16.h:
        * platform/text/TextCodecUserDefined.cpp:
        (WebCore::encodeComplexUserDefined):
        (WebCore::TextCodecUserDefined::encode):
        * platform/text/TextCodecUserDefined.h:
        * platform/text/TextEncoding.cpp:
        (WebCore::TextEncoding::encode):
        * platform/text/TextEncoding.h:
        * platform/text/mac/TextCodecMac.cpp:
        (WebCore::TextCodecMac::encode):
        * platform/text/mac/TextCodecMac.h:
        * xml/XMLHttpRequest.cpp:
        (WebCore::XMLHttpRequest::send):

2008-03-16  Kevin Ollivier  <kevino@theolliviers.com>

        Rubber stamped by Darin.

        Add set-webkit-configuration support for wx port, and centralize
        build dir location setting.

        http://bugs.webkit.org/show_bug.cgi?id=17790

        * webcore-base.bkl:

2008-03-16  Darin Adler  <darin@apple.com>

        Reviewed by Mark Rowe.

        - http://bugs.webkit.org/show_bug.cgi?id=17881
          a little cleanup for HTMLTextAreaElement

        Tests: fast/forms/textarea-default-value-leading-newline.html
               fast/forms/textarea-linewrap-dynamic.html

        * html/HTMLTextAreaElement.cpp:
        (WebCore::HTMLTextAreaElement::HTMLTextAreaElement): Tweaked names/
        (WebCore::HTMLTextAreaElement::selectionStart): Ditto, also use early return
        and check for < 0 rather than -1 specifically.
        (WebCore::HTMLTextAreaElement::selectionEnd): Ditto.
        (WebCore::HTMLTextAreaElement::setSelectionStart): Early return.
        (WebCore::HTMLTextAreaElement::setSelectionEnd): Ditto.
        (WebCore::HTMLTextAreaElement::select): Ditto.
        (WebCore::HTMLTextAreaElement::setSelectionRange): Ditto.
        (WebCore::HTMLTextAreaElement::parseMappedAttribute): Changed value parsing
        to treat unknown values as meaning "default" rather than "leave value as-is".
        Only call setNeedsLayoutAndPrefWidthsRecalc when mode changed.
        (WebCore::HTMLTextAreaElement::createRenderer): Removed name of unused argument.
        (WebCore::HTMLTextAreaElement::appendFormData): Updated for name changes.
        (WebCore::HTMLTextAreaElement::isKeyboardFocusable): Got rid of unnneeded explicit
        class name in isFocusable call.
        (WebCore::HTMLTextAreaElement::isMouseFocusable): Ditto.
        (WebCore::HTMLTextAreaElement::updateFocusAppearance): Tweaked formatting.
        (WebCore::HTMLTextAreaElement::defaultEventHandler): Ditto.
        (WebCore::HTMLTextAreaElement::updateValue): Early return.
        (WebCore::HTMLTextAreaElement::setValue): Got rid of intermediate value to
        eliminate on small refcount churn.
        (WebCore::HTMLTextAreaElement::defaultValue): Got rid of unneeded redundant
        string length checks, since String already checks all indexing and returns 0.
        (WebCore::HTMLTextAreaElement::setDefaultValue): Added code to normalize
        line endings and add a leading line ending to fix cases where the first
        character is a newline.
        (WebCore::HTMLTextAreaElement::accessKeyAction): Removed name of unused arg.
        (WebCore::HTMLTextAreaElement::accessKey): Changed return value to avoid
        refcount churn.
        (WebCore::HTMLTextAreaElement::selection): Updated names and use < 0 instead
        of -1 specifically.

        * html/HTMLTextAreaElement.h: Replaced wrap function with more-specific
        shouldWrapText one. Changed return value of accessKey. Made WrapMethod enum
        provate and renamed the values. Renamed cachedSelStart and cachedSelEnd to
        m_cachedSelectionStart and m_cachedSelectionEnd.

        * rendering/RenderTextControl.cpp:
        (WebCore::RenderTextControl::createInnerTextStyle): Updated for change to
        HTMLTextAreaElement wrap function.

2008-03-16  Antti Koivisto  <antti@apple.com>

        Reviewed by Mitz.

        Fix http/tests/security/frame-loading-via-document-write.html
        which was broken by the preload patch.
        
        Don't print error message when preload fails local file security check.
        Some minor refactoring.

        * html/PreloadScanner.cpp:
        (WebCore::PreloadScanner::emitTag):
        (WebCore::PreloadScanner::emitCSSRule):
        * loader/Cache.cpp:
        (WebCore::Cache::requestResource):
        * loader/Cache.h:
        * loader/DocLoader.cpp:
        (WebCore::DocLoader::requestResource):
        (WebCore::DocLoader::preload):
        (WebCore::DocLoader::printPreloadStats):
        * loader/DocLoader.h:

2008-03-16  Antti Koivisto  <antti@apple.com>

        Reviewed by Darin.
        
        Fix http://bugs.webkit.org/show_bug.cgi?id=17862
        REGRESSION (r31038): Reproducible crash under DocLoader::checkForReload() at marware.com
        
        This was a memory smasher introduced by the preloading patch. 
        If a script resource was marked uncacheable, early deletion of the 
        Request object would cause deletion of the CachedResource too if
        it was referred more than once in a single document.

        Test: http/tests/misc/uncacheable-script-repeated.html

        * loader/loader.cpp:
        (WebCore::Loader::Host::servePendingRequests):
        (WebCore::Loader::Host::didFinishLoading):

2008-03-16  Yuzhu Shen  <yuzhu.shen@gmail.com>

        Reviewed by Darin.

        Fix bug http://bugs.webkit.org/show_bug.cgi?id=17714
        <img href="#"> should go to top of the page.

        Test: fast/html/empty-fragment-id-goto-top.html

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::gotoAnchor):

2008-03-16  Thiago Macieira  <thiago.macieira@trolltech.com>

        Reviewed by Darin.

        Don't use RefPtr in classes you haven't seen the implementation of.

        Forward-declaration and declaration of RefPtr<Foo> is ok. But you
        cannot *use* said objects until Foo is defined. This is true even for
        initialisation with a 0.

        Seems the HP aCC compiler is more strict here than gcc.

        * editing/SplitTextNodeCommand.h:
        * page/FrameTree.h:
        * xml/XPathExpressionNode.h:

2008-03-16  Darin Adler  <darin@apple.com>

        Reviewed by Mitz.

        - fix http://bugs.webkit.org/show_bug.cgi?id=14941
          <rdar://problem/5404093> textarea value from JavaScript includes extra newline

        Test: fast/forms/textarea-trailing-newline.html

        * rendering/RenderTextControl.cpp:
        (WebCore::RenderTextControl::finishText): Added code to strip the trailing
        newline. It's possible there are some obscure cases where this is not wanted,
        but I couldn't find any. If someone finds a case where this is bad, we can
        make the code conditional.

2008-03-16  Darin Adler  <darin@apple.com>

        Reviewed by Mitz.

        - fix http://bugs.webkit.org/show_bug.cgi?id=17876
          Attempting to visit Ofcom page causes crash

        This is causing intermittent crashes on some existing test cases on the buildbot
        too; I don't have a 100% test case right now, but it should be easy to add one later
        and this does fix a crash in a test we already have.

        * dom/CharacterData.cpp:
        (WebCore::CharacterData::CharacterData): Initialize m_data to the empty string,
        not the null string. The class assumes the string can never being null.
        (WebCore::CharacterData::setData): If asked to set the data to the null string,
        set it to the empty string instead. This matches what the (non-empty) constructor
        has always done.

2008-03-15  Timothy Hatcher  <timothy@apple.com>

        Reviewed by Adam Roben.

        Bug 17870: Web Inspector console should feel more like a terminal
        http://bugs.webkit.org/show_bug.cgi?id=17870

        Bug 14390: Console input area should be more noticeable
        http://bugs.webkit.org/show_bug.cgi?id=14390
        <rdar://5712831>

        Bug 17237: Inspector should tab-complete object properties in the Console
        http://bugs.webkit.org/show_bug.cgi?id=17237
        <rdar://5732842>

        Adds tab completion, auto completion and a blended input prompt.
        The prompt is also focused when the console is shown.
           Implements a new look, that will be part of the UI refresh.

        * page/inspector/ConsolePanel.js: 
        (WebInspector.ConsolePanel): Renamed a few properties.
        (WebInspector.ConsolePanel.get/set promptText): Property to set
        and get the current prompt text. Does not affect command history.
        (WebInspector.ConsolePanel.show): Make the prompt focus on show.
        (WebInspector.ConsolePanel.acceptAutoComplete): Accepts any
        pending auto complete text.
        (WebInspector.ConsolePanel.clearAutoComplete): Cancels any pending
        auto complete text.
        (WebInspector.ConsolePanel.autoCompleteSoon): Sets a timeout to auto
        complete in 250 ms, only if there isn't a pending auto complete.
        (WebInspector.ConsolePanel.complete): 
        (WebInspector.ConsolePanel.completions): Generate a list of possible
        completions based on the prefix and the previous expression ranges.
        (WebInspector.ConsolePanel._backwardsRange): Helper to scan backwards
        from a node and offset to find a start node and offset of the first
        character found in the characters string.
        (WebInspector.ConsolePanel._evalInInspectedWindow): Helper to eval in the
        inspected window.
        (WebInspector.ConsolePanel._caretInsidePrompt): Returns true if the selection
        is collapsed and is inside the prompt element.
        (WebInspector.ConsolePanel._moveCaretToEndOfPrompt): Moves the selection
        to the end of the prompt.
        (WebInspector.ConsolePanel._onTabPressed): Calls complete on
        tab press.
        (WebInspector.ConsolePanel._onEnterPressed): Call clearAutoComplete so the
        autocompletion text is not evaluated.

        * page/inspector/Images/errorIcon.png: New image.
        * page/inspector/Images/userInputIcon.png: Added.
        * page/inspector/Images/userInputPreviousIcon.png: Added.
        * page/inspector/Images/warningIcon.png: New image.
        * page/inspector/inspector.css: New refreshed UI.

2008-03-15  Mark Mentovai  <mark@moxienet.com>

        Reviewed and landed by Darin.

        - http://bugs.webkit.org/show_bug.cgi?id=17833
          use file extensions instead of explicit file types in WebCore's Xcode project

        * WebCore.xcodeproj/project.pbxproj: Remove unnecessary
          uses of explicitFileType, preferring lastKnownFileType ("File Type:
          Default for File" in Xcode's File Info's General tab).  Files below
          that relied on an explicit file type setting other than what would
          be implied by their extensions have been renamed to have correct
          extensions.
        * bridge/jni/jni_jsobject.cpp: Removed.
        * bridge/jni/jni_jsobject.mm: Copied from bridge/jni/jni_jsobject.cpp.
        * loader/mac/LoaderNSURLExtras.m: Removed.
        * loader/mac/LoaderNSURLExtras.mm: Copied from loader/mac/LoaderNSURLExtras.m.
        * platform/mac/SharedTimerMac.cpp: Removed.
        * platform/mac/SharedTimerMac.mm: Copied from platform/mac/SharedTimerMac.cpp.

2008-03-15  Darin Adler  <darin@apple.com>

        Reviewed by Sam.

        - fix http://bugs.webkit.org/show_bug.cgi?id=11997
          Ranges are not fixed after mutation (affects Acid3 test 13)

        Test: fast/dom/Range/mutation.html

        * WebCore.xcodeproj/project.pbxproj: Added NodeWithIndex.h, NodeWithIndexAfter.h,
        and NodeWithIndexBefore.h.

        * dom/CharacterData.cpp:
        (WebCore::CharacterData::setData): Replaced call to Document::removeMarkers
        with call to Document::textRemoved.
        (WebCore::CharacterData::insertData): Replaced call to Document::shiftMarkers
        with call to Document::textInserted.
        (WebCore::CharacterData::deleteData): Replaced call to Document::removeMarkers
        and Document::shiftMarkers with call to Document::textRemoved.
        (WebCore::CharacterData::replaceData): Replaced call to Document::removeMarkers
        and Document::shiftMarkers with call to Document::textRemoved and
        Document::textInserted.
        (WebCore::CharacterData::containsOnlyWhitespace): Tweaked a bit.

        * dom/ContainerNode.cpp:
        (WebCore::ContainerNode::childrenChanged): Added a call to
        Document::nodeChildrenChanged when the nmber of children was changed (and not
        by the parser).
        (WebCore::dispatchChildRemovalEvents): Updated for name change.

        * dom/Document.cpp:
        (WebCore::Document::~Document): Assert that all ranges are gone.
        (WebCore::Document::nodeChildrenChanged): Added. Calls nodeChildrenChanged on
        all ranges.
        (WebCore::Document::nodeWillBeRemoved): Renamed from notifyBeforeNodeRemoval.
        Added code to call nodeWillBeRemoved on all ranges.
        (WebCore::Document::textInserted): Added. Calls textInserted on all ranges and
        also calls shiftMarkers.
        (WebCore::Document::textRemoved): Added. Calls textRemoved on all ranges and also
        calls removeMarkers and shiftMarkers.
        (WebCore::Document::textNodesMerged): Added. Calls textNodesMerged on all ranges.
        (WebCore::Document::textNodeSplit): Added. Calls textNodeSplit on all ranges.
        (WebCore::Document::attachRange): Added. Adds range to the HashSet of all ranges
        for this document.
        (WebCore::Document::detachRange): Added. Removes range from the HashSet.
        * dom/Document.h: Added the new functions and the data member.

        * dom/Element.cpp:
        (WebCore::Element::normalizeAttributes): Added. Contains the part of the
        normalize function that's specific to Element. Better encapsulation to have it
        here rather than in Node::normalize.
        * dom/Element.h: Added the new function.

        * dom/Node.cpp:
        (WebCore::Node::normalize): Rewrote so it's no longer recursive. Also added
        a call to textNodesMerged after each pair of nodes is merged but before the
        second node is removed.
        (WebCore::Node::traverseNextNodePostOrder): Added. Helper function used by
        normalize, but also useful elsewhere.
        * dom/Node.h: Added the new function.

        * dom/NodeIterator.cpp:
        (WebCore::NodeIterator::nodeWillBeRemoved): Renamed from notifyBeforeNodeRemoval.
        * dom/NodeIterator.h: Ditto.

        * dom/ProcessingInstruction.cpp:
        (WebCore::ProcessingInstruction::setData): Call textRemoved.

        * dom/Range.cpp:
        (WebCore::NodeWithIndex::index): Added. Computes and stores index.
        (WebCore::NodeWithIndexBefore::indexBefore): Added. Computes and stores index.
        (WebCore::NodeWithIndexAfter::indexAfter): Added. Computes and stores index.
        (WebCore::Range::Range): Call attachRange.
        (WebCore::Range::~Range): Call detachRange unless the range is already detached.
        (WebCore::Range::commonAncestorContainer): Removed check for WRONG_DOCUMENT_ERR.
        It's no longer possible to create a range where the two containers are non-zero
        and have no common ancestor.
        (WebCore::Range::isPointInRange): Rewrote expression to be more readable.
        (WebCore::Range::compareNode): Changed local variable to use int for consistency.
        (WebCore::Range::compareBoundaryPoints): Replaced ASSERT with ASSERT_NOT_REACHED.
        (WebCore::Range::deleteContents): Removed check for INVALID_STATE_ERR and
        initialization of ec to 0; both are now inside checkDeleteExtract.
        (WebCore::Range::intersectsNode): Changed local variable to use int for consistency.
        Also changed comparison to use < 0 and >= 0 rather than checking explicitly for 1
        and -1.
        (WebCore::Range::processContents): Changed code to not get the nodeType multiple
        times on the same node, and tweaked formatting. Removed code to update the range
        on deletion, because the normal delete logic will take care of that now.
        (WebCore::Range::extractContents): Removed check for INVALID_STATE_ERR and
        initialization of ec to 0; both are now inside checkDeleteExtract.
        (WebCore::Range::insertNode): Changed local variable to use int for consistency.
        (WebCore::Range::toString): Changed variable name to pastLast.
        (WebCore::Range::detach): Call detachRange.
        (WebCore::Range::checkDeleteExtract): Added check for detached range and code to
        set ec to 0; moved here from the two callers. Also changed variable name to pastLast.
        (WebCore::endpointNodeChildrenChanged): Added.
        (WebCore::Range::nodeChildrenChanged): Added.
        (WebCore::endpointNodeWillBeRemoved): Added.
        (WebCore::Range::nodeWillBeRemoved): Added.
        (WebCore::endpointTextInserted): Added.
        (WebCore::Range::textInserted): Added.
        (WebCore::endpointTextRemoved): Added.
        (WebCore::Range::textRemoved): Added.
        (WebCore::endpointTextNodesMerged): Added.
        (WebCore::Range::textNodesMerged): Added.
        (WebCore::endpointTextNodesSplit): Added.
        (WebCore::Range::textNodeSplit): Added.

        * dom/Range.h: Added new member functions.

        * dom/NodeWithIndex.h: Added. Makes it so we won't find the index for the same
        node more than once.
        * dom/NodeWithIndexAfter.h: Added. Similar to NodeWithIndex but gives the index after a
        node and treats a node pointer of 0 as meaning "before first node in parent container".
        * dom/NodeWithIndexBefore.h: Added.  Similar to NodeWithIndex but treats a node pointer of 0
        as meaning "after last node in parent container".

        * dom/Text.cpp:
        (WebCore::Text::splitText): Call textNodeSplit.

        * editing/ApplyStyleCommand.cpp:
        (WebCore::ApplyStyleCommand::applyInlineStyle): Changed variable name to pastLast.

2008-03-15  Julien Chaffraix  <julien.chaffraix@gmail.com>

        Reviewed by Holger.

        [CURL] Crash below ResourceHandleManager::setupPOST when job->request().httpBody() is NULL
        http://bugs.webkit.org/show_bug.cgi?id=16906

        Add null checks for httpBody() to match other ports.

        Test: http/tests/xmlhttprequest/xmlhttprequest-post-crash.html

        * platform/network/curl/ResourceHandleManager.cpp:
        (WebCore::readCallback): Add null check.
        (WebCore::ResourceHandleManager::setupPOST): Ditto.

2008-03-14  Steve Falkenburg  <sfalken@apple.com>

        PGO build fixes.

        * WebCore.vcproj/WebCore.vcproj:

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-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-14  Adam Roben  <aroben@apple.com>

        Fix it right this time

        * platform/MainThread.cpp: Cast to unsigned so we can use %u in the
        format string.
        * platform/mac/MainThreadMac.mm:

2008-03-14  Adam Roben  <aroben@apple.com>

        Mac build fix

        * platform/mac/MainThreadMac.mm: Corrected a typo.

2008-03-14  Dan Bernstein  <mitz@apple.com>

        Reviewed by Darin Adler.

        - fix http://bugs.webkit.org/show_bug.cgi?id=17834
          REGRESSION: floated first-letter does not work when included in table

        Test: fast/css/first-letter-float.html

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::updateFirstLetter): Changed the search for the
        first text node to stop at a float if that float is an existing first-
        letter.

2008-03-14  Sam Weinig  <sam@webkit.org>

        Fix Mac build

        * WebCore.xcodeproj/project.pbxproj:

2008-03-13  Adam Roben  <aroben@apple.com>

        Make most of callOnMainThread's implementation be cross-platform

        I took the non-platform-specific parts of MainThreadWin.cpp and moved
        them to a new MainThread.cpp. Each platform is now responsible for
        implementing one function, scheduleDispatchFunctionsOnMainThread,
        which is supposed to set things up so that
        dispatchFunctionsFromMainThread gets called from the main thread in
        the near future.

        Reviewed by Alexey.

        * GNUmakefile.am: Added MainThread.cpp to the project.
        * WebCore.pro: Ditto.
        * WebCore.vcproj/WebCore.vcproj: Ditto.
        * WebCore.xcodeproj/project.pbxproj: Ditto.
        * WebCoreSources.bkl: Ditto.
        * platform/MainThread.cpp:
          - Copied from WebCore/platform/win/MainThreadWin.cpp.
          - Removed the Windows-specific parts.
        (WebCore::callOnMainThread): Changed to call
        scheduleDispatchFunctionsOnMainThread instead of PostMessage.
        * platform/gtk/MainThreadGtk.cpp:
        (WebCore::timeoutFired): Renamed from callFunctionOnMainThread. Now
        just calls dispatchFunctionsFromMainThread.
        (WebCore::scheduleDispatchFunctionsOnMainThread): Added. Calls through
        to g_timeout_add.
        * platform/mac/MainThreadMac.mm: Renamed WebCoreFunctionWrapper to
        WebCoreMainThreadCaller.
        (-[WebCoreMainThreadCaller call]): Calls through to
        dispatchFunctionsFromMainThread.
        (WebCore::scheduleDispatchFunctionsOnMainThread): Makes a new
        WebCoreMainThreadCaller and calls performSelectorOnMainThread on it.
        * platform/qt/MainThreadQt.cpp: Removed PerformFunctionEvent.
        (WebCore::MainThreadInvoker::event): Chagned to call through to
        dispatchFunctionsFromMainThread.
        (WebCore::scheduleDispatchFunctionsOnMainThread): Sends an empty event
        to the MainThreadInvoker.
        * platform/win/MainThreadWin.cpp:
          - Removed the non-Windows-specific parts.
          - Removed some unnecessary initialization of static variables to 0.
        (WebCore::ThreadingWindowWndProc): Changed to call
        dispatchFunctionsFromMainThread.
        (WebCore::scheduleDispatchFunctionsOnMainThread): Calls through to
        PostMessage.
        * platform/wx/MainThreadWx.cpp:
        (WebCore::scheduleDispatchFunctionsOnMainThread): Added.

2008-03-14  Beth Dakin  <bdakin@apple.com>

        Reviewed by Geoff.

        Fix for <rdar://problem/5728171> Potential PLT speedup: don't 
        realloc every time inside NamedAttrMap::addAttribute

        The speed-up for this turned out to be so small that it is mostly 
        imperceptible. It is likely that it is a tiny boost, though, and 
        the new code is much cleaner.

        * dom/Element.cpp:
        (WebCore::Element::setAttributeMap): attrs is now called 
        m_attributes
        * dom/NamedAttrMap.cpp: The array attrs is now the Vector of 
        RefPtrs called m_attributes, and there is no longer any need for 
        the len member variable. 
        (WebCore::NamedAttrMap::NamedAttrMap): 
        (WebCore::NamedAttrMap::item):
        (WebCore::NamedAttrMap::getAttributeItem):
        (WebCore::NamedAttrMap::clearAttributes):
        (WebCore::NamedAttrMap::operator=):
        (WebCore::NamedAttrMap::addAttribute):
        (WebCore::NamedAttrMap::removeAttribute):
        (WebCore::NamedAttrMap::mapsEquivalent):
        * dom/NamedAttrMap.h: Same.
        (WebCore::NamedAttrMap::length):
        (WebCore::NamedAttrMap::attributeItem):
        (WebCore::NamedAttrMap::shrinkToLength):
        (WebCore::NamedAttrMap::reserveCapacity):
        * html/HTMLTokenizer.cpp: One of the benefits of the old array was 
        that it never took up more memory than it needed to. So the 
        tokenizer utilizes new member functions on NamedAttrMap 
        (shrinkToLength and reserveCapacity) to try to keep memory usage at 
        a minimum. 
        (WebCore::Token::addAttribute):
        (WebCore::HTMLTokenizer::processToken):

2008-03-14  David D. Kilzer  <ddkilzer@apple.com>

        BUILD FIX when ENABLE(MAC_JAVA_BRIDGE) set to 0.

        * page/mac/FrameMac.mm: Move up #if ENABLE(MAC_JAVA_BRIDGE) guard
        to comment out unused code.

2008-03-14  David D. Kilzer  <ddkilzer@apple.com>

        Unify concept of enabling the Mac Java bridge.

        Reviewed by Darin and Anders.

        No test cases added since there is no change in functionality.

        * DerivedSources.make: Added check for ENABLE_MAC_JAVA_BRIDGE macro.
        If defined as "1", add WebCore.JNI.exp to WEBCORE_EXPORT_DEPENDENCIES.
        * WebCore.JNI.exp: Added.
        * WebCore.base.exp: Moved exported JNI methods to WebCore.JNI.exp.

        * bridge/jni/jni_class.cpp: Added #if ENABLE(MAC_JAVA_BRIDGE) guard.
        * bridge/jni/jni_class.h: Ditto.
        * bridge/jni/jni_instance.cpp: Ditto.
        * bridge/jni/jni_instance.h: Ditto.
        * bridge/jni/jni_jsobject.cpp: Ditto.
        * bridge/jni/jni_jsobject.h: Ditto.
        * bridge/jni/jni_objc.mm: Ditto.
        * bridge/jni/jni_runtime.cpp: Ditto.
        * bridge/jni/jni_runtime.h: Ditto.
        * bridge/jni/jni_utility.cpp: Ditto.
        * bridge/jni/jni_utility.h: Ditto.

        * bridge/runtime.cpp: Removed unused #include statements.
        * bridge/runtime.h:
        (KJS::Bindings::Instance::BindingLanguage): Added #if ENABLE(MAC_JAVA_BRIDGE)
        guard for JavaLanguage enum.  Also added #if PLATFORM(MAC) guard for
        ObjectiveCLanguage enum to match corresponding code in runtime.cpp.

        * config.h: Removed definition of HAVE_JNI.

        * loader/FrameLoaderClient.h:
        (WebCore::FrameLoaderClient::javaApplet): Added #if ENABLE(MAC_JAVA_BRIDGE) guard.
        * page/Frame.cpp:
        (WebCore::Frame::Frame): Ditto.
        * page/Frame.h:
        (WebCore::Frame::initJavaJSBindings): Ditto.
        * page/mac/FrameMac.mm:
        (WebCore::Frame::createScriptInstanceForWidget): Ditto.
        (WebCore::Frame::initJavaJSBindings): Ditto.

2008-03-13  Darin Adler  <darin@apple.com>

        * html/PreloadScanner.h: Corrected license.
        * html/PreloadScanner.cpp: Corrected license.

2008-03-13  Mark Mentovai  <mark@moxienet.com>

        Reviewed by darin.  Landed by eseidel.

        * platform/FloatConversion.h: Include a header to get CoreGraphics
        types when using CoreGraphics types.

2008-03-13  Mark Mentovai  <mark@moxienet.com>

        Reviewed by eseidel.  Landed by eseidel.

        * WebCore.xcodeproj/project.pbxproj:
        * css/CSSParser.cpp:
        * css/makeprop.pl:
        Move CSSPropertyNames.c to CSSPropertyNames.cpp

2008-03-13  Mark Mentovai  <mark@moxienet.com>

        Reviewed by eseidel.  Landed by eseidel.

        * platform/Arena.h: Use statement1;statement2 instead of
        (statement1,statement2) in CLEAR_UNUSED.

2008-03-13  Tommi Komulainen  <tommi.komulainen@iki.fi>

        Reviewed by Alp Toker.

        http://bugs.webkit.org/show_bug.cgi?id=17821
        [SOUP] POST requests are empty

        Send the HTTP request body as well.

        * platform/network/soup/ResourceHandleSoup.cpp:
        (WebCore::ResourceHandle::start):

2008-03-13  Dan Bernstein  <mitz@apple.com>

        Reviewed by Dave Hyatt.

        - fix http://bugs.webkit.org/show_bug.cgi?id=17819
          Border-collapse: collapse later cell wins on PC, earlier cell on Mac

        Test: fast/table/border-collapsing/equal-precedence-resolution.html

        * rendering/RenderTableCell.cpp:
        (WebCore::RenderTableCell::collapsedLeftBorder): When calling
        compareBorders() with borders that may have the same precedence, made
        sure to pass the border belonging to the earlier (in document order)
        element first, since compareBorders() prefers the first argument when
        there is a tie.
        (WebCore::RenderTableCell::collapsedRightBorder): Ditto.
        (WebCore::RenderTableCell::collapsedTopBorder): Ditto.

2008-03-13  Adam Roben  <aroben@apple.com>

        wx build fix and Windows leak fix after r31034

        * platform/graphics/wx/ImageWx.cpp:
        (WebCore::Image::loadPlatformResource): Use SharedBuffer::create.
        * platform/win/SharedBufferWin.cpp:
        (WebCore::SharedBuffer::createWithContentsOfFile): Ditto (we were
        leaking the SharedBuffer here before).

2008-03-13  Antti Koivisto  <antti@apple.com>

        Reviewed by Eric.

        Correct a few issues spotted by Mike Belshe. 

        * html/PreloadScanner.cpp:
        (WebCore::PreloadScanner::tokenize):
        * loader/loader.cpp:
        (WebCore::Loader::cancelRequests):

2008-03-13  Rodney Dawes  <dobey@wayofthemonkey.com>

        Fix GTK+ build for SharedBuffer changes.

        * platform/graphics/gtk/ImageGtk.cpp:
        (Image::loadPlatformResource):

2008-03-13  Steve Falkenburg  <sfalken@apple.com>

        More PGO build fixes.

        * WebCorePrefix.cpp:

2008-03-13  Antti Koivisto  <antti@apple.com>

        Reviewed by Darin.
        
        Make page loads go fast.
        
        http://bugs.webkit.org/show_bug.cgi?id=17480

        - Implement speculative preloading. When a script load blocks the main parser, use a side 
          parser to pick up more resources.
        - Implement per-host load queues, prioritize scripts and stylesheets over images.
        
        Depending on content and network latency this may speed things up quite a bit.

        * WebCore.xcodeproj/project.pbxproj:
        * dom/Document.cpp:
        (WebCore::Document::implicitClose):
        Clear the preloads after laoding completes.
        
        * html/HTMLLinkElement.cpp:
        (WebCore::HTMLLinkElement::parseMappedAttribute):
        (WebCore::HTMLLinkElement::tokenizeRelAttribute):
        * html/HTMLLinkElement.h:
        Make tokenizeRelAttribute() public static so it can be used from elsewhere.
        Eliminate a pointless bitfield so I can get references.
        
        * html/HTMLTokenizer.cpp:
        (WebCore::HTMLTokenizer::scriptHandler):
        (WebCore::HTMLTokenizer::scriptExecution):
        (WebCore::HTMLTokenizer::write):
        * html/HTMLTokenizer.h:
        Spin up the preload scanner whenever a script load blocks the parser. One scanner tracks the end of 
        the document while temporary ones are created as needed to scan document.write() output.
        
        * html/PreloadScanner.cpp: Added.
        (WebCore::PreloadScanner::PreloadScanner):
        (WebCore::PreloadScanner::~PreloadScanner):
        (WebCore::PreloadScanner::begin):
        (WebCore::PreloadScanner::end):
        (WebCore::PreloadScanner::reset):
        (WebCore::PreloadScanner::write):
        (WebCore::isWhitespace):
        (WebCore::PreloadScanner::clearLastCharacters):
        (WebCore::PreloadScanner::rememberCharacter):
        (WebCore::PreloadScanner::lastCharactersMatch):
        (WebCore::legalEntityFor):
        (WebCore::PreloadScanner::consumeEntity):
        (WebCore::PreloadScanner::tokenize):
        (WebCore::PreloadScanner::processAttribute):
        (WebCore::PreloadScanner::emitCharacter):
        (WebCore::PreloadScanner::tokenizeCSS):
        (WebCore::PreloadScanner::emitTag):
        (WebCore::PreloadScanner::emitCSSRule):
        * html/PreloadScanner.h: Added.
        (WebCore::PreloadScanner::inProgress):
        (WebCore::PreloadScanner::):
        HTML5 tokenization plus some glue code. Fake CSS parsing thrown in just for fun.
        
        * loader/Cache.cpp:
        (WebCore::Cache::pruneDeadResources):
        Preloads have zero refcount, avoid kicking them out too early.
        
        * loader/CachedResource.cpp:
        (WebCore::CachedResource::CachedResource):
        (WebCore::CachedResource::ref):
        * loader/CachedResource.h:
        (WebCore::CachedResource::):
        (WebCore::CachedResource::preloadResult):
        (WebCore::CachedResource::setRequestedFromNetworkingLayer):
        (WebCore::CachedResource::canDelete):
        (WebCore::CachedResource::isPreloaded):
        (WebCore::CachedResource::increasePreloadCount):
        (WebCore::CachedResource::decreasePreloadCount):
        Keep track which resources are preloads. Avoid deleting them. Track
        at which point of the loading preloads get utilized to enable some interesting 
        statistics.
        
        * loader/DocLoader.cpp:
        (WebCore::DocLoader::~DocLoader):
        (WebCore::DocLoader::checkForReload):
        (WebCore::DocLoader::registerPreload):
        (WebCore::DocLoader::clearPreloads):
        (WebCore::DocLoader::printPreloadStats):
        * loader/DocLoader.h:
        Ensure we utilize preloaded resources during reloads.
        Keep a list of all preloads in the document. Clear the preloads after
        parsing is complete. Some debug statistics.
        
        * loader/DocumentLoader.cpp:
        (WebCore::DocumentLoader::isLoadingInAPISense):
        Avoid signaling that loading is complete too early. 
        
        * loader/loader.cpp:
        (WebCore::Loader::Loader):
        (WebCore::Loader::~Loader):
        (WebCore::Loader::determinePriority):
        (WebCore::Loader::load):
        (WebCore::Loader::scheduleServePendingRequests):
        (WebCore::Loader::requestTimerFired):
        (WebCore::Loader::servePendingRequests):
        (WebCore::Loader::cancelRequests):
        (WebCore::Loader::Host::Host):
        (WebCore::Loader::Host::~Host):
        (WebCore::Loader::Host::addRequest):
        (WebCore::Loader::Host::hasRequests):
        (WebCore::Loader::Host::servePendingRequests):
        (WebCore::Loader::Host::didFinishLoading):
        (WebCore::Loader::Host::didFail):
        (WebCore::Loader::Host::didReceiveResponse):
        (WebCore::Loader::Host::didReceiveData):
        (WebCore::Loader::Host::cancelPendingRequests):
        (WebCore::Loader::Host::cancelRequests):
        * loader/loader.h:
        (WebCore::Loader::):
        Distribute load requests to per-host priority queues. Limit the number of loads issued to the 
        networking layer so we have better changes of getting important requests through first.
        Prioritize scripts > stylesheets > images.

2008-03-13  David Hyatt  <hyatt@apple.com>

        This patch makes full page zoom work pretty well. It fixes repainting so that it works when transforms
        are set on the RenderView. It also implements the "smart layout" behavior that other browsers support when
        zooming. The page will still try to constrain to the viewport size even when zoomed.

        Reviewed by john

        * dom/Document.cpp:
        (WebCore::Document::recalcStyle):
        Make sure to test for transform changes even when there is no zoom.  This fixes repainting issues
        caused by jumping from a zoomed state back to the standard size.

        * page/FrameView.cpp:
        (WebCore::FrameView::adjustViewSize):
        Adjust for the zoom factor (the render tree is in unzoomed coordinates, but the scrollbars of the view
        need to handle zoomed coordinates).

        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::calcHeight):
        Fix the body-sizing-to-the-view-height quirk so that it takes the zoom factor into account when
        stretching to fill the viewport.

        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::updateLayerPositions):
        (WebCore::RenderLayer::setHasVisibleContent):
        Remove the FIXMEs now that absoluteClippedOverflowRect works with transforms on the RenderView.

        * rendering/RenderView.cpp:
        (WebCore::RenderView::calcHeight):
        (WebCore::RenderView::calcWidth):
        Make sure the calculated width/height take the zoom factor into account in order to get the "smart layout"
        behavior.

        (WebCore::RenderView::layout):
        When deciding whether children have to get a relayout, we need to check the zoomed width/height and not just
        the viewport size.

        (WebCore::RenderView::computeAbsoluteRepaintRect):
        Patched to take into account transforms set on the RenderView.

        (WebCore::RenderView::docHeight):
        (WebCore::RenderView::docWidth):
        Patched to just always use m_width and m_height initially, since those have already been adjusted for
        the zoom factor.

        (WebCore::RenderView::zoomedHeight):
        (WebCore::RenderView::zoomedWidth):
        * rendering/RenderView.h:
        New helper methods for obtaining the adjusted width/height of the viewport taking into account the
        zoom factor.

2008-03-13  Anders Carlsson  <andersca@apple.com>

        Build fix.

        * WebCore.base.exp:

2008-03-13  Anders Carlsson  <andersca@apple.com>

        Reviewed by Adam.

        Get rid of actualRequest, it is not used anymore. Also, get rid of 
        initialRequest and replace all uses with originalRequest because those are
        the same thing.
        
        * loader/DocumentLoader.cpp:
        * loader/DocumentLoader.h:
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::initialRequest):
        (WebCore::FrameLoader::originalRequestURL):

2008-03-13  Brady Eidson  <beidson@apple.com>

        Reviewed by Anders

        Convert SharedBuffer to start with a refCount of 1

        * loader/ImageDocument.cpp:
        (WebCore::ImageTokenizer::finish):

        * loader/ResourceLoader.cpp:
        (WebCore::ResourceLoader::addData):
        (WebCore::ResourceLoader::willStopBufferingData):

        * loader/icon/IconDatabase.cpp:
        (WebCore::IconDatabase::defaultIcon):
        (WebCore::IconDatabase::getImageDataForIconURLFromSQLDatabase):

        * loader/loader.cpp:
        (WebCore::Loader::didReceiveData):

        * platform/SharedBuffer.h:
        (WebCore::SharedBuffer::create): Make all constructors private, add ::create() calls
        * platform/SharedBuffer.cpp:
        (WebCore::SharedBuffer::SharedBuffer): Revert to default RefCounted constructor to start with a ref count of 1
        (WebCore::SharedBuffer::copy):
        * platform/mac/SharedBufferMac.mm:
        (WebCore::SharedBuffer::wrapNSData):
        (WebCore::SharedBuffer::SharedBuffer): Revert to default RefCounted constructor to start with a ref count of 1

2008-03-13  Steve Falkenburg  <sfalken@apple.com>

        PGO build fixes.
        
        Disable PGO for normal release builds.
        Added work-in-progress Release_PGOInstrument/Release_PGOOptimize targets.

        * WebCore.vcproj/WebCore.vcproj:

2008-03-13  Anders Carlsson  <andersca@apple.com>

        Reviewed by Darin.

        Make a bunch of DocumentLoader setters/getters inline.
        
        * loader/DocumentLoader.cpp:
        * loader/DocumentLoader.h:
        (WebCore::DocumentLoader::isStopping):
        (WebCore::DocumentLoader::setCommitted):
        (WebCore::DocumentLoader::isCommitted):
        (WebCore::DocumentLoader::isLoading):
        (WebCore::DocumentLoader::setLoading):
        (WebCore::DocumentLoader::response):
        (WebCore::DocumentLoader::mainDocumentError):
        (WebCore::DocumentLoader::setResponse):
        (WebCore::DocumentLoader::isClientRedirect):
        (WebCore::DocumentLoader::setIsClientRedirect):
        (WebCore::DocumentLoader::overrideEncoding):
        (WebCore::DocumentLoader::responses):
        (WebCore::DocumentLoader::triggeringAction):
        (WebCore::DocumentLoader::setTriggeringAction):
        (WebCore::DocumentLoader::setOverrideEncoding):
        (WebCore::DocumentLoader::setLastCheckedRequest):
        (WebCore::DocumentLoader::lastCheckedRequest):
        (WebCore::DocumentLoader::title):
        (WebCore::DocumentLoader::setLoadingFromCachedPage):
        (WebCore::DocumentLoader::isLoadingFromCachedPage):

2008-03-13  Rodney Dawes  <dobey@wayofthemonkey.com>

        Fix builds without SVG enabled.

        * page/Frame.cpp:
        (Frame::shouldApplyTextZoom):
        (Frame::shouldApplyPageZoom):

2008-03-13  Simon Hausmann  <hausmann@webkit.org>

        Fix the Qt build.

        * bridge/qt/qt_instance.cpp:
        (KJS::Bindings::QtInstance::getQtInstance):
        (KJS::Bindings::QtInstance::getRuntimeObject):
        * bridge/qt/qt_instance.h:
        (KJS::Bindings::QtInstance::create):
        * bridge/qt/qt_runtime.cpp:
        (KJS::Bindings::convertQVariantToValue):
        (KJS::Bindings::QtConnectionObject::execute):
        * page/qt/FrameQt.cpp:
        (WebCore::Frame::createScriptInstanceForWidget):

2008-03-12  Sam Weinig  <sam@webkit.org>

        Reviewed by Darin Adler.

        Fix <rdar://problem/5784773>
        Crash loading QT movies @ apple.com/ipodtouch/features.html with a PAC file (WebKitThreadingException)

        Make bridged RuntimeObjects get collected on the main thread only. This is necessary
        because clients of the bridged objects are unlikely to prepared for a collection on 
        non-main thread, which can happen with a PAC file.

        * bridge/runtime_object.cpp:
        (RuntimeObjectImp::RuntimeObjectImp):

2008-03-12  Adam Roben  <aroben@apple.com>

        Fix Bug 17815: Inspector's DOM tree should descend into subframes

        <http://bugs.webkit.org/show_bug.cgi?id=17815>

        Reviewed by Tim.

        * page/inspector/DocumentPanel.js:
        (WebInspector.DocumentPanel.revealNode): Changed to provide
        _isAncestorIncludingParentFramesWithinPanel and
        _parentNodeOrFrameElementWithinPanel for the isAncestor and getParent
        parameters to findTreeElement so that parent frames will be searched.
        (WebInspector.DocumentPanel.updateBreadcrumb):
          - Changed while loop to for loop
          - Use _parentNodeOrFrameElementWithinPanel instead of
            Node.parentNode to move to the next node
          - The loop now ends when we reach the DocumentPanel's document node
          - Traversal past other Document nodes is now allowed
          - We add the "start" class to the final crumb after the loop exits
        (WebInspector.DocumentPanel._getDocumentForNode): Added. Simple helper
        that returns the node itself if the node is a Document node, or the
        node's ownerDocument otherwise.
        (WebInspector.DocumentPanel._parentNodeOrFrameElementWithinPanel):
        Added. Returns the node's parent node or, in the case of a Document
        node, the node's window's owning frame element, but will not return a
        node that is in a parent frame of the DocumentPanel's Document.
        (WebInspector.DocumentPanel._isAncestorIncludingParentFramesWithinPanel):
        Added. Returns true if a is an ancestor of b if a is an ancestor of a
        frame element whose subframe(s) contain b.
        (WebInspector.DOMNodeTreeElement): We now consider ourselves to have
        children if we have a contentDocument.
        (WebInspector.DOMNodeTreeElement.onpopulate): Moved the appendChild
        loop into a function so that we can add both children of our
        contentDocument and children of our node to the tree.
        (WebInspector.DOMNodeTreeElement.ondblclick): Changed so that we get
        the rootDOMNode by traversing the tree outline hierarchy instead of
        the DOM hierarchy so that we can easily jump up to a parent frame.

2008-03-12  Adam Roben  <aroben@apple.com>

        Update the styles/metrics panes and breadcrumb after editing DOM
        attributes

        Reviewed by Tim.

        * page/inspector/DocumentPanel.js:
        (WebInspector.DocumentPanel.set focusedDOMNode): Moved code to update
        the parts of the DocumentPanel other than the DOM tree into a new
        function, _focusedNodeChanged.
        (WebInspector.DocumentPanel._focusedNodeChanged): Added. The
        forceUpdate parameter specifies whether the update should occur even
        if the focused node hasn't changed since the last update.
        (WebInspector.DocumentPanel.updateBreadcrumb): Added a forceUpdate
        parameter. If forceUpdate is true, we always rebuild the breadcrumbs.
        (WebInspector.DocumentPanel.updateStyles): Added a forceUpdate
        parameter. If forceUpdate is true, we always rebuild the styles pane.
        (WebInspector.DOMNodeTreeElement._attributeEditingCommitted): Added a
        call to DocumentPanel._focusedNodeChanged. We have to force the update
        because we haven't changed the focused node (the attributes of the
        node have changed).
        * page/inspector/StylesSidebarPane.js:
        (WebInspector.StylesSidebarPane.update): Added a forceUpdate
        parameter. If forceUpdate is true we always rebuild the styles.

2008-03-12  Mark Rowe  <mrowe@apple.com>

        Further Gtk and Qt build fixes.

        * bridge/runtime.cpp:
        (KJS::Bindings::Instance::createRuntimeObject): Adapt Qt-only code for change to PassRefPtr.
        * page/gtk/FrameGtk.cpp: Add missing include.

2008-03-12  Mark Rowe  <mrowe@apple.com>

        Fix Gtk and Qt builds.

        * page/gtk/FrameGtk.cpp:
        * page/qt/FrameQt.cpp:

2008-03-12  Mark Rowe  <mrowe@apple.com>

        Mac build fix.

        * WebCore.base.exp:  Remove symbol.

2008-03-12  Steve Falkenburg  <sfalken@apple.com>

        Build fix.

        * page/win/FrameWin.cpp:

2008-03-12  Steve Falkenburg  <sfalken@apple.com>

        Build fix.

        * plugins/win/PluginViewWin.cpp:
        (WebCore::PluginView::bindingInstance):

2008-03-12  Darin Adler  <darin@apple.com>

        Reviewed by Anders.

        - http://bugs.webkit.org/show_bug.cgi?id=17640
          eliminate WebCoreFrameBridge

        * WebCore.base.exp: Added more exports, needed by code moved from WebCoreFrameBridge
        to WebFrame in WebKit.
        * WebCore.xcodeproj/project.pbxproj: Added more headers, same reason. Also deleted
        WebCoreFrameBridge.h and WebCoreFrameBridge.mm.

        * page/Frame.cpp:
        (WebCore::Frame::Frame): Added call to initJavaJSBindings(), formerly handled by
        the WebCoreFrameBridge.
        * page/Frame.h: Added initJavaJSBindings function.

        * page/mac/FrameMac.mm:
        (WebCore::updateRenderingForBindings): Moved here from WebCoreFrameBridge.
        (WebCore::Frame::initJavaJSBindings): Ditto; code was in the init function.

        * page/mac/WebCoreFrameBridge.h: Removed.
        * page/mac/WebCoreFrameBridge.mm: Removed.

2008-03-12  Sam Weinig  <sam@webkit.org>

        Reviewed by Anders Carlsson.

        Don't go through the Document just to get the frame Element.

        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::frameElement):

2008-03-12  Anders Carlsson  <andersca@apple.com>

        Reviewed by Geoff and Sam.

        More Instance cleanup:
        
        * Make Instance inherit from RefCounted instead of doing its own refcounting.        
        * Make all Instance subclasses private, add static create methods.         
        * Have Instance start out with a refcount of 1.
        * Get rid of Instance::createBindingForLanguageInstance and call the individual 
          instance constructor methods instead.
        * Fix many methods to take and return PassRefPtr<Instance> to ensure that the
          refcounting is done correctly.
         
        * bridge/c/c_instance.h:
        (KJS::Bindings::CInstance::create):
        * bridge/c/c_utility.cpp:
        (KJS::Bindings::convertNPVariantToValue):
        * bridge/jni/jni_instance.cpp:
        (JavaInstance::invokeMethod):
        * bridge/jni/jni_instance.h:
        (KJS::Bindings::JavaInstance::create):
        * bridge/jni/jni_jsobject.cpp:
        (JavaJSObject::convertJObjectToValue):
        * bridge/jni/jni_runtime.cpp:
        (JavaField::valueFromInstance):
        (JavaArray::valueAt):
        * bridge/objc/objc_instance.h:
        (KJS::Bindings::ObjcInstance::create):
        * bridge/objc/objc_utility.mm:
        (KJS::Bindings::convertObjcValueToValue):
        * bridge/qt/qt_instance.cpp:
        (KJS::Bindings::QtRuntimeObjectImp::QtRuntimeObjectImp):
        (KJS::Bindings::QtInstance::getQtInstance):
        (KJS::Bindings::QtInstance::getRuntimeObject):
        * bridge/qt/qt_instance.h:
        * bridge/runtime.cpp:
        (KJS::Bindings::Instance::Instance):
        (KJS::Bindings::Instance::createRuntimeObject):
        * bridge/runtime.h:
        * bridge/runtime_object.cpp:
        (RuntimeObjectImp::RuntimeObjectImp):
        * bridge/runtime_object.h:
        * page/Frame.h:
        * page/mac/FrameMac.mm:
        (WebCore::Frame::createScriptInstanceForWidget):
        * page/win/FrameWin.cpp:
        (WebCore::Frame::createScriptInstanceForWidget):
        * plugins/PluginView.h:
        * plugins/win/PluginViewWin.cpp:
        (WebCore::PluginView::bindingInstance):

2008-03-12  Dan Bernstein  <mitz@apple.com>

        Suggested by Darin Adler. Reviewed by Dave Hyatt.

        - speed up BidiIterator::direction()

        * rendering/bidi.cpp:
        (WebCore::BidiIterator::current): Made inline and corrected the
        out-of-bounds condition to work with 0-length text and offsets beyond
        the end of the text.
        (WebCore::BidiIterator::direction): Changed to call current() and not
        call the virtual method isListMarker() most of the time.
        (WebCore::addMidpoint): Removed unnecessary null-check of smidpoints.
        (WebCore::appendRunsForObject): Ditto.

2008-03-12  Adam Roben  <aroben@apple.com>

        Make URLs not be underlined while editing them in the DOM view

        Reviewed by Tim.

        * page/inspector/inspector.css:

2008-03-12  Adam Roben  <aroben@apple.com>

        Part of Bug 17224: DOM nodes/attributes should be editable

        <http://bugs.webkit.org/show_bug.cgi?id=17224>
        <rdar://problem/5732825>

        We now start editing if the user single-clicks on an attribute,
        attribute value, or text node while the parent element is selected.
        Previously, we started editing on double-click regardless of the
        selection state of the element.

        URLs in the DOM tree are now followed on Alt/Option-click, rather than
        on just click.

        Reviewed by Tim.

        * English.lproj/InspectorLocalizedStrings.js: Added four new localized
        strings.
        * page/inspector/DocumentPanel.js:
        (WebInspector.DOMNodeTreeElement.onattach): Call new
        _makeURLSActivateOnModifiedClick.
        (WebInspector.DOMNodeTreeElement._makeURLsActivateOnModifiedClick):
        Added. Changes the tooltip of each link in this element to indicate
        that Alt/Option-click will follow the URL, and sets the
        followOnAltClick property on each link.
        (WebInspector.DOMNodeTreeElement.onselect): Mark that we're being
        selected.
        (WebInspector.DOMNodeTreeElement.onmousedown): If we're not currently
        being selected, start editing.
        (WebInspector.DOMNodeTreeElement.ondblclick): We no longer start
        editing here. We block re-rooting of the tree if we're currently
        editing.
        (WebInspector.DOMNodeTreeElement._startEditing):
          - Don't do anything if we're not focused
          - Pass the event down to _startEditingAttribute.
        (WebInspector.DOMNodeTreeElement._startEditingAttribute): Don't do
        anything if the event target is a URL and the Alt/Option key is
        pressed -- in this case we want to follow the link.
        (WebInspector.DOMNodeTreeElement._updateTitle): Call
        _makeURLsActivateOnClick again since the anchor elements have all been
        recreated.
        * page/inspector/inspector.js:
        (WebInspector.documentClick): If the anchor as a followOnAltClick
        property and the Alt/Option key is not pressed, do nothing.

2008-03-12  Ada Chan  <adachan@apple.com>

        Fixed the initial value of zoom factor.

        Reviewed by Adam.

        * page/Frame.cpp:
        (WebCore::FramePrivate::FramePrivate):

2008-03-12  David Hyatt  <hyatt@apple.com>

        Make full page zoom vaguely work.  This patch uses the CSS transform system to turn on full page zoom at the
        document level.  There are many many bugs that I'm going to file to track all the issues (most of the issues
        are just bugs with transforms themselves).

        Reviewed by Adam Roben

        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::applyProperty):
        (WebCore::CSSStyleSelector::getComputedSizeFromSpecifiedSize):
        * dom/Document.cpp:
        (WebCore::Document::recalcStyle):
        * page/Frame.cpp:
        (WebCore::Frame::shouldApplyTextZoom):
        (WebCore::Frame::shouldApplyPageZoom):
        * page/Frame.h:
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::updateLayerPositions):
        (WebCore::RenderLayer::setHasVisibleContent):
        (WebCore::RenderLayer::paintLayer):
        (WebCore::RenderLayer::hitTestLayer):
        * rendering/RenderLayer.h:

2008-03-12  David Hyatt  <hyatt@apple.com>

        Make the zoom factor a float and not a percent.

        Reviewed by antti

        * WebCore.base.exp:
        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::applyProperty):
        (WebCore::CSSStyleSelector::getComputedSizeFromSpecifiedSize):
        * page/Frame.cpp:
        (WebCore::Frame::zoomFactor):
        (WebCore::Frame::setZoomFactor):
        * page/Frame.h:
        * page/FramePrivate.h:
        * svg/SVGSVGElement.cpp:
        (WebCore::SVGSVGElement::currentScale):
        (WebCore::SVGSVGElement::setCurrentScale):

2008-03-12  David Hyatt  <hyatt@apple.com>

        Eliminate setTextMultiplier from the bridge.  Make Webkit just call setZoomFactor on the frame directly.

        Reviewed by Tim H.

        * WebCore.base.exp:
        * page/mac/WebCoreFrameBridge.h:
        * page/mac/WebCoreFrameBridge.mm:

2008-03-12  Dan Bernstein  <mitz@apple.com>

        Reviewed by Darin Adler and Sam Weinig.

        - <rdar://problem/4433248> use CoreText API instead of SPI on Leopard

        Use CTFontCopyGraphicsFont and CTFontGetPlatformFont on Leopard instead
        of wkGetCGFontFromNSFont and wkGetNSFontATSUFontId, relying on NSFont
        and CTFontRef being toll-free bridged.

        * WebCore.Tiger.exp:
        * WebCore.base.exp:
        * platform/graphics/mac/FontMac.mm:
        (WebCore::Font::drawGlyphs): Changed to use the cgFont() accessor.
        * platform/graphics/mac/FontPlatformData.h:
        Made m_cgFont a RetainPtr on Leopard.
        (WebCore::toCTFontRef): Added a function that encapsulates the
        toll-free bridging.
        (WebCore::FontPlatformData::FontPlatformData):
        (WebCore::FontPlatformData::cgFont): Added this accessor method.
        * platform/graphics/mac/FontPlatformDataMac.mm:
        (WebCore::FontPlatformData::FontPlatformData): Changed to use
        CoreText API on Leopard.
        (WebCore::FontPlatformData::setFont): Ditto.
        * platform/graphics/mac/SimpleFontDataMac.mm:
        (WebCore::initFontData):
        (WebCore::pathFromFont):
        (WebCore::SimpleFontData::platformInit):
        (WebCore::SimpleFontData::platformWidthForGlyph):
        * platform/mac/WebCoreSystemInterface.mm:

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-12  Xan Lopez  <xan@gnome.org>

        Reviewed by Alp Toker.

        http://bugs.webkit.org/show_bug.cgi?id=15229

        Add Pango font backend.

        Original patch by Sven Herzberg <sven@imendio.com>

        * GNUmakefile.am:
        * platform/graphics/gtk/FontCacheGtk.cpp:
        (WebCore::FontCache::fontExists):
        * platform/graphics/gtk/FontCustomPlatformDataPango.cpp: Added.
        (WebCore::FontCustomPlatformData::~FontCustomPlatformData):
        (WebCore::FontCustomPlatformData::fontPlatformData):
        (WebCore::releaseData):
        (WebCore::createFontCustomPlatformData):
        * platform/graphics/gtk/FontPlatformData.h:
        (WebCore::FontPlatformData::FontPlatformData):
        (WebCore::FontPlatformData::hash):
        * platform/graphics/gtk/FontPlatformDataPango.cpp: Added.
        (WebCore::FontPlatformData::FontPlatformData):
        (WebCore::FontPlatformData::init):
        (WebCore::FontPlatformData::~FontPlatformData):
        (WebCore::FontPlatformData::isFixedPitch):
        (WebCore::FontPlatformData::setFont):
        (WebCore::FontPlatformData::operator==):
        * platform/graphics/gtk/GlyphPageTreeNodePango.cpp: Added.
        (WebCore::pango_font_get_glyph):
        (WebCore::GlyphPage::fill):
        * platform/graphics/gtk/SimpleFontDataPango.cpp: Added.
        (WebCore::SimpleFontData::platformInit):
        (WebCore::SimpleFontData::platformDestroy):
        (WebCore::SimpleFontData::smallCapsFontData):
        (WebCore::SimpleFontData::containsCharacters):
        (WebCore::SimpleFontData::determinePitch):
        (WebCore::SimpleFontData::platformWidthForGlyph):
        (WebCore::SimpleFontData::setFont):

2008-03-12  Justin Garcia  <justin.garcia@apple.com>

        Reviewed by Oliver.
        
        <rdar://problem/5770834> Crash at InsertTextCommand::prepareForTextInsertion() doing RemoveFormat in a certain list
        
        Fixes some (but not all) of the instances of:
        <rdar://problem/5659795> CrashTracer: [REGRESSION] 187 crashes in Safari at com.apple.WebCore: WebCore::InsertTextCommand::prepareForTextInsertion + 241
        <rdar://problem/5779631> CrashTracer: [USER] 25 crashes in Mail at WebCore::InsertTextCommand::prepareForTextInsertion

        * editing/InsertLineBreakCommand.cpp:
        (WebCore::InsertLineBreakCommand::doApply): applyStyle may have destroyed content that held
        the old endingSelection(), so we must recompute it.  Added a FIXME.  Added a few comments.
        * editing/RemoveFormatCommand.cpp:
        (WebCore::RemoveFormatCommand::doApply): Added a FIXME.

2008-03-11  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Darin.

        <rdar://problem/5640615> REGRESSION (Safari 2-3): Changing subframe encoding rules broke
        some sites.

        Other browsers' behavior keeps changing; let's implement what Firefox and Opera do now:
        if the frame and subframe belong to the same site, then the encoding is inherited from parent
        frame to subframe. Otherwise, it is not.

        Always inheriting the encoding would cause a security problem.

        Tests: http/tests/misc/frame-default-enc-different-domain.html
               http/tests/misc/frame-default-enc-same-domain.html
               fast/encoding/frame-default-enc.html

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::write): Also removed a check for m_frame->document() being non-null -
        this function also has code that uses it without checking, so it must be safe.

2008-03-12  Mark Rowe  <mrowe@apple.com>

        Gtk build fix.

        * page/Frame.h: Forward-declare FramePrivate.

2008-03-11  Steve Falkenburg  <sfalken@apple.com>

        Disable LTCG/PGO for all of WebCore for now.
        We'll re-enable this as part of follow-on PGO work.
        
        Reviewed by Oliver.

        * WebCore.vcproj/WebCore.vcproj:

2008-03-11  Darin Adler  <darin@apple.com>

        Reviewed by Sam.

        - remove all bridge-related things from WebCore except the bridge itself

        * WebCore.base.exp: Removed the bridge and setBridge functions.

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::detachFromParent): Removed call to the bridge's
        close method.

        * page/Frame.cpp:
        (WebCore::Frame::~Frame): Removed call to setBridge(0).
        (WebCore::FramePrivate::FramePrivate): Removed initialization of m_bridge.
        * page/Frame.h: Removed setBridge and bridge functions.
        * page/FramePrivate.h: Removed m_bridge pointer.
        * page/mac/FrameMac.mm: Removed setBridge and bridge functions.

        * page/mac/WebCoreFrameBridge.h: Added setWebCoreFrame: method.
        Removed bridgeForDOMDocument: and clearFrame methods.
        * page/mac/WebCoreFrameBridge.mm: Ditto.
        (-[WebCoreFrameBridge close]): Changed to set m_frame to 0 directly.
        (-[WebCoreFrameBridge setWebCoreFrame:]): Added.

2008-03-11  Darin Adler  <darin@apple.com>

        - restored some code I removed in the Range change; this code can't go
          until the rest of the Range fix is in

        * dom/Range.cpp:
        (WebCore::Range::commonAncestorContainer): Added back the check for 0
        that I removed erroneously in the Range patch.
        (WebCore::Range::processContents): Left in assertions I used to debug
        this.

2008-03-11  Darin Adler  <darin@apple.com>

        - fix Release build

        * platform/mac/ScrollViewMac.mm:
        (WebCore::ScrollView::setContentsPos): Don't use NSMakePoint.

2008-03-11  Darin Adler  <darin@apple.com>

        Reviewed by Anders.

        - simplify Mac code for ScrollView, since it's used only for FrameView
          and not in two different modes like it was historically
        - remove code depending on the bridge to get from an NSView to a WebCore::Frame

        * bindings/objc/DOMHTML.mm:
        (-[DOMHTMLInputElement _rectOnScreen]): getDocumentView -> documentView.

        * bridge/jni/jni_jsobject.cpp:
        (createRootObject): Instead of using WebCoreViewFactory to find the frame given
        and NSView, use the WebCoreFrameView interface to do it.

        * editing/mac/EditorMac.mm:
        (WebCore::Editor::paste): getDocumentView -> documentView.
        * editing/mac/SelectionControllerMac.mm:
        (WebCore::SelectionController::notifyAccessibilityForSelectionChange): Ditto.

        * page/FrameView.h: Fixed comment.

        * page/InspectorController.cpp:
        (WebCore::InspectorController::drawNodeHighlight): Removed uneeded typecasts
        to ScrollView* since FrameView is derived from ScrollView.

        * page/mac/EventHandlerMac.mm:
        (WebCore::EventHandler::focusDocumentView): getDocumentView -> documentView.
        * page/mac/FrameMac.mm:
        (WebCore::Frame::imageFromRect): Ditto.
        * page/mac/WebCoreAXObject.mm:
        (-[WebCoreAXObject position]): Ditto.
        (-[WebCoreAXObject doAXTextMarkerForPosition:]): Ditto.
        (-[WebCoreAXObject rendererForView:]): Updated code that used to use
        WebCoreBridgeHolder to use WebCoreFrameView instead.

        * page/mac/WebCoreFrameBridge.mm:
        (-[WebCoreFrameBridge computePageRectsWithPrintWidthScaleFactor:printHeight:]):
        getDocumentView -> documentView.

        * page/mac/WebCoreFrameView.h: Removed the WebCoreScrollbarMode type; we just
        use WebCore::ScrollbarMode directly. Renamed the WebCoreFrameView protocol to
        WebCoreFrameScrollView, since it's a protocol for the scroll view, not the
        frame view itself. Replaced WebCoreBridgeHolder protocol with WebCoreFrameView
        protocol, which returns a WebCore::Frame directly rather than a bridge.

        * page/mac/WebCoreViewFactory.h: Eliminated the bridgeForView method.

        * platform/ScrollView.h: Moved the constructor and destructor out of the
        class-specific #if blocks. Renamed Mac-specific function that gets the
        NSView for from getDocumentView to documentView and a scrollView function
        that returns an appropriately classed NSScrollView.

        * platform/graphics/MediaPlayer.h: Changed type of parentWidget to FrameView
        instead of Widget.
        * platform/graphics/mac/MediaPlayerPrivateQTKit.mm:
        (WebCore::MediaPlayerPrivate::createQTMovieView): Removed unnecessary cast.

        * platform/mac/PopupMenuMac.mm:
        (WebCore::PopupMenu::show): getDocumentView -> documentView.
        * platform/mac/ScrollViewMac.mm:
        (WebCore::ScrollView::ScrollView): Added.
        (WebCore::ScrollView::~ScrollView): Added.
        (WebCore::ScrollView::scrollView): Added.
        (WebCore::ScrollView::visibleWidth): Removed unused non-NSScrollView case.
        (WebCore::ScrollView::visibleHeight): Ditto.
        (WebCore::ScrollView::visibleContentRect): Ditto.
        (WebCore::ScrollView::visibleContentRectConsideringExternalScrollers): Ditto.
        (WebCore::ScrollView::contentsWidth): Ditto.
        (WebCore::ScrollView::contentsHeight): Ditto.
        (WebCore::ScrollView::contentsX): Ditto.
        (WebCore::ScrollView::contentsY): Ditto.
        (WebCore::ScrollView::scrollOffset): Ditto.
        (WebCore::ScrollView::scrollRectIntoViewRecursively): Ditto.
        (WebCore::ScrollView::setContentsPos): Ditto.
        (WebCore::ScrollView::setVScrollbarMode): Ditto.
        (WebCore::ScrollView::setHScrollbarMode): Ditto.
        (WebCore::ScrollView::setScrollbarsMode): Ditto.
        (WebCore::ScrollView::vScrollbarMode): Ditto.
        (WebCore::ScrollView::hScrollbarMode): Ditto.
        (WebCore::ScrollView::suppressScrollbars): Ditto.
        (WebCore::ScrollView::addChild): Ditto.
        (WebCore::ScrollView::resizeContents): Ditto.
        (WebCore::ScrollView::updateContents): Ditto.
        (WebCore::ScrollView::contentsToWindow): Ditto.
        (WebCore::ScrollView::windowToContents): Ditto.
        (WebCore::ScrollView::setStaticBackground): Ditto.
        (WebCore::ScrollView::documentView): Renamed and removed unused case.
        (WebCore::ScrollView::scrollbarUnderMouse): Removed incorrect comment.

        * platform/mac/WidgetMac.mm:
        (WebCore::Widget::getOuterView): Update for protocol name change.

        * rendering/RenderThemeMac.mm:
        (WebCore::RenderThemeMac::paintCheckbox): getDocumentView -> documentView.
        (WebCore::RenderThemeMac::paintRadio): Ditto.
        (WebCore::RenderThemeMac::paintButton): Ditto.
        (WebCore::RenderThemeMac::paintMenuList): Ditto.
        (WebCore::RenderThemeMac::paintSliderThumb): Ditto.
        (WebCore::RenderThemeMac::paintSearchField): Ditto.
        (WebCore::RenderThemeMac::paintSearchFieldCancelButton): Ditto.
        (WebCore::RenderThemeMac::paintSearchFieldResultsDecoration): Ditto.
        (WebCore::RenderThemeMac::paintSearchFieldResultsButton): Ditto.

2008-03-11  Brent Fulgham  <bfulgham@gmail.com>

        Reviewed by Adam Roben.

        Split CookieJarWin.cpp into CFNet and non-CFNet versions to
        reduce the massive amount of conditionalization in the file.
        (see http://bugs.webkit.org/show_bug.cgi?id=17788)

        * WebCore.vcproj/WebCore.vcproj:
        * platform/network/win/CookieJarCFNetWin.cpp: Copied from WebCore/platform/network/win/CookieJarWin.cpp.
        (WebCore::setCookies):
        (WebCore::cookies):
        (WebCore::cookiesEnabled):
        * platform/network/win/CookieJarWin.cpp:
        (WebCore::setCookies):
        (WebCore::cookies):
        (WebCore::cookiesEnabled):

2008-03-11  Darin Adler  <darin@apple.com>

        Reviewed by Sam.

        - eliminate the remaining parts of WebCoreBridge used for calls to WebKit from WebCore

        * page/ChromeClient.h: Added new client functions to replace calls up to WebKit
        that were formerly handled by the bridge.

        * page/Frame.h: Removed unneeded declarations. Moved declarations of script-specific
        functions to a ScriptController section. Removed willPopupMenu.

        * page/mac/ChromeMac.mm:
        (WebCore::Chrome::focusNSView): Changed to call firstResponder and makeFirstResponder
        via the client instead of the bridge.

        * page/mac/EventHandlerMac.mm:
        (WebCore::EventHandler::passMouseDownEventToWidget): Changed to call firstResponder
        and makeFirstResponder via the chrome client instead of the bridge.

        * page/mac/FrameMac.mm: Removed willPopupMenu.

        * page/mac/WebCoreFrameBridge.h: Removed WebCoreFrameBridge protocol and
        SubclassResponsibility category. Also removed some unneeded imports.

        * platform/mac/PopupMenuMac.mm:
        (WebCore::PopupMenu::show): Call willPopUpMenu on chrome client instead of frame.

        * platform/mac/WidgetMac.mm:
        (WebCore::Widget::setIsSelected): Call functions directly on the view rather than
        calling via the bridge.

2008-03-11  Darin Adler  <darin@apple.com>

        Reviewed by Mitz.

        - make some Range improvements (preparation for Range support for DOM mutation)

        Made constructors private, added create functions.
        Made refcount start at 1 rather than starting at 0 and being incremented.
        Made Range use two Position objects for the start/end container/offset pairs.

        * WebCore.base.exp: Updated.

        * dom/Document.cpp:
        (WebCore::Document::createRange): Changed to use Range::create.
        (WebCore::Document::removeMarkers): Updated for Range::first/pastLastNode name change.

        * dom/Position.cpp:
        (WebCore::Position::formatForDebugger): Updated for member variable name change.
        (WebCore::Position::showTreeForThis): Ditto.
        (WebCore::startPosition): Changed to use Range::startPosition.
        (WebCore::endPosition): Changed to use Range::endPosition.

        * dom/Position.h: Made the data members public and renamed them to container
        and offset. But since offset() is already a function, temporarily used posOffset
        for the data member. Later we'll get rid of offset(). Made more functions inline.
        Removed the constructor that takes a PositionIterator.

        * dom/PositionIterator.cpp:
        (WebCore::PositionIterator::operator Position): Added. Replaces the constructor
        that used to be in Position.
        * dom/PositionIterator.h: Added conversion operator to produce a Position.
        Removed friend declaration for Position.

        * dom/Range.cpp:
        (WebCore::Range::Range): Updated constructors for data member changes and made
        them use a refcount of 1.
        (WebCore::Range::create): Added.
        (WebCore::Range::startContainer): Updated to eliminate use of m_detached; detached
        is now indicated by m_start.container of 0. Also updated to use m_start instead
        of the old m_startContainer.
        (WebCore::Range::startOffset): Ditto.
        (WebCore::Range::endContainer): Ditto.
        (WebCore::Range::endOffset): Ditto.
        (WebCore::Range::commonAncestorContainer): Ditto.
        (WebCore::Range::collapsed): Ditto.
        (WebCore::Range::setStart): Ditto.
        (WebCore::Range::setEnd): Ditto.
        (WebCore::Range::collapse): Ditto.
        (WebCore::Range::isPointInRange): Ditto.
        (WebCore::Range::comparePoint): Ditto.
        (WebCore::Range::compareNode): Ditto.
        (WebCore::Range::compareBoundaryPoints): Ditto.
        (WebCore::Range::boundaryPointsValid): Ditto.
        (WebCore::Range::deleteContents): Ditto.
        (WebCore::Range::intersectsNode): Ditto.
        (WebCore::Range::processContents): Ditto.
        (WebCore::Range::extractContents): Ditto.
        (WebCore::Range::cloneContents): Ditto.
        (WebCore::Range::insertNode): Ditto.
        (WebCore::Range::toString): Ditto.
        (WebCore::Range::text): Ditto.
        (WebCore::Range::createContextualFragment): Ditto.
        (WebCore::Range::detach): Ditto.
        (WebCore::Range::checkNodeBA): Changed to use switch statements instead of
        multiple calls to the virtual nodeType() function.
        (WebCore::Range::cloneRange): Ditto.
        (WebCore::Range::setStartAfter): Ditto.
        (WebCore::Range::setEndBefore): Ditto.
        (WebCore::Range::setEndAfter): Ditto.
        (WebCore::Range::selectNode): Ditto.
        (WebCore::Range::selectNodeContents): Ditto.
        (WebCore::Range::surroundContents): Ditto.
        (WebCore::Range::setStartBefore): Ditto.
        (WebCore::Range::checkDeleteExtract): Ditto.
        (WebCore::Range::containedByReadOnly): Ditto.
        (WebCore::Range::firstNode): Ditto.
        (WebCore::Range::editingStartPosition): Ditto.
        (WebCore::Range::pastLastNode): Ditto.
        (WebCore::Range::addLineBoxRects): Ditto.
        (WebCore::Range::formatForDebugger): Ditto.
        (WebCore::operator==): Ditto.
        (WebCore::rangeOfContents): Ditto.
        (WebCore::Range::maxStartOffset): Ditto.
        (WebCore::Range::maxEndOffset): Ditto.

        * dom/Range.h: Made constructors private. Added create functions.
        Added getters for startContainer/Offset and endContainer/Offset that
        return 0 instead of an exception for detached ranges that are inline
        and don't require an ExceptionCode out parameter. Changed the parameters
        to setStart and setEnd to PassRefPtr. Removed isDetached function.
        Made ActionType and processContents private. Made startPosition and
        endPosition inlines and have then return const&. Renamed startNode and
        pastEndNode to firstNode and pastLastNode to reduce the chance of
        confusion with startContainer/endContainer. Used Position for m_start
        and m_end instead of separate container and offset members. Changed
        maxStartOffset and maxEndOffset into int to match other offsets.

        * editing/ApplyStyleCommand.cpp:
        (WebCore::ApplyStyleCommand::applyBlockStyle): Changed to use Range::create.
        (WebCore::ApplyStyleCommand::applyInlineStyle): Ditto.
        * editing/CompositeEditCommand.cpp:
        (WebCore::CompositeEditCommand::inputText): Ditto.
        (WebCore::CompositeEditCommand::moveParagraphs): Ditto.
        * editing/DeleteSelectionCommand.cpp:
        (WebCore::DeleteSelectionCommand::mergeParagraphs): Ditto.
        * editing/Editor.cpp:
        (WebCore::Editor::fontForSelection): Changed for pastLastNode name change.
        (WebCore::Editor::setComposition): Changed to use Range::create.
        (WebCore::paragraphAlignedRangeForRange): Ditto.
        (WebCore::markMisspellingsOrBadGrammar): Changed to get rid of check for
        isDetached and check for 0 from startContainer instead.
        (WebCore::Editor::compositionRange): Changed to use Range::create.
        * editing/EditorCommand.cpp:
        (WebCore::unionDOMRanges): Ditto.
        * editing/Selection.cpp:
        (WebCore::Selection::toRange): Ditto.
        * editing/TextIterator.cpp:
        (WebCore::TextIterator::TextIterator): Changed for firstNode and pastLastNode
        name change.
        (WebCore::TextIterator::range): Changed to use Range::create.
        (WebCore::SimplifiedBackwardsTextIterator::range): Ditto.
        (WebCore::TextIterator::subrange): Ditto.
        * editing/VisiblePosition.cpp:
        (WebCore::makeRange): Ditto.
        * editing/VisiblePosition.h: Added now-needed include.
        * editing/htmlediting.cpp:
        (WebCore::indexForVisiblePosition): Changed to use Range::create.
        (WebCore::avoidIntersectionWithNode): Changed to get rid of check for
        isDetached and check for 0 instead and to use Range::create.
        * editing/markup.cpp:
        (WebCore::renderedText): Changed to use Range::create.
        (WebCore::createMarkup): Changed to no longer use isDetached and also
        for new firstNode/pastEndNode names.
        (WebCore::createFragmentFromText): Ditto.
        * editing/visible_units.cpp:
        (WebCore::previousBoundary): Changed to use Range::create.
        * page/mac/WebCoreFrameBridge.mm:
        (-[WebCoreFrameBridge convertToNSRange:]): Changed to no longer use
        isDetached().
        * rendering/RenderTextControl.cpp:
        (WebCore::RenderTextControl::visiblePositionForIndex): Changed to use Range::create.
        (WebCore::RenderTextControl::indexForVisiblePosition): Ditto.

2008-03-11  Daniel Zucker <zucker@wake3.com>

        Reviewed by Adam Roben.

        There are a handful of placed where the use of CFNetwork-specific
        calls are protected by PLATFORM(CF).  Revise to use the more specific
        USE(CFNETWORK) macro.  (See http://bugs.webkit.org/show_bug.cgi?id=17783) 

        * platform/network/ProtectionSpace.cpp:  Change PLATFORM(CF) to USE(CFNETWORK)
        * platform/network/ResourceHandle.cpp: Change PLATFORM(CF) to USE(CFNETWORK)
        * platform/network/win/CookieJarWin.cpp:  Correct error in
          InternetGetCookie call.  Conditionalize 'cookiesEnabled' the same
          as all other implementations in this file.

2008-03-11  Xan Lopez  <xan@gnome.org>

        Reviewed by Alp Toker.

        http://bugs.webkit.org/show_bug.cgi?id=16476

        Add libsoup HTTP backend.
        
        * GNUmakefile.am:
        * platform/network/ResourceHandleInternal.h:
        (WebCore::ResourceHandleInternal::ResourceHandleInternal):
        * platform/network/soup/AuthenticationChallenge.h: Added.
        (WebCore::AuthenticationChallenge::AuthenticationChallenge):
        * platform/network/soup/ResourceError.h: Added.
        (WebCore::ResourceError::ResourceError):
        * platform/network/soup/ResourceHandleSoup.cpp: Added.
        (WebCore::ResourceHandleInternal::~ResourceHandleInternal):
        (WebCore::ResourceHandle::~ResourceHandle):
        (WebCore::dataCallback):
        (WebCore::parseDataUrl):
        (WebCore::ResourceHandle::start):
        (WebCore::ResourceHandle::cancel):
        (WebCore::ResourceHandle::bufferedData):
        (WebCore::ResourceHandle::supportsBufferedData):
        (WebCore::ResourceHandle::setDefersLoading):
        (WebCore::ResourceHandle::loadsBlocked):
        (WebCore::ResourceHandle::willLoadFromCache):
        * platform/network/soup/ResourceRequest.h: Copied from WebCore/platform/network/curl/ResourceRequest.h.
        (WebCore::ResourceRequest::ResourceRequest):
        (WebCore::ResourceRequest::doUpdatePlatformRequest):
        * platform/network/soup/ResourceResponse.h: Added.
        (WebCore::ResourceResponse::ResourceResponse):
        (WebCore::ResourceResponse::setResponseFired):
        (WebCore::ResourceResponse::responseFired):
        (WebCore::ResourceResponse::doUpdateResourceResponse):

2008-03-11  Rodney Dawes  <dobey@wayofthemonkey.com>

        Fix Qt build.

        * plugins/qt/PluginDataQt.cpp:
        (PluginData::initPlugins)

2008-03-11  Adam Roben  <aroben@apple.com>

        Make attribute quoting in DOM view more consistent with source view

        Two changes which make the DOM view more consistent with source view:
         1) We now quote all attribute values, including URLs
         2) The quotes around the values are now purple, matching the left and
            right angle brackets that surround the tag

        One bug fixed by these changes:
         1) The entire URL is selected for editing when you double-click a URL
            that is an attribute value. Previously, the first and last
            characters were not included in the selection.

        Reviewed by Darin.

        * page/inspector/DocumentPanel.js:
        (WebInspector.DOMNodeTreeElement._startEditingAttribute): Don't need
        to account for the quotes around attribute values anymore because the
        quotes are now outside the webkit-html-attribute-value span.
        * page/inspector/utilities.js:
        (nodeTitleInfo): Quote all attribute values, including URLs, and place
        the quotes outside the webkit-html-attribute-value span.

2008-03-11  Adam Roben  <aroben@apple.com>

        Stop including pthread.h in WebCore on Windows

        Reviewed by Darin.

        * WebCore.vcproj/WebCore.vcproj:
          - Changed the include path to not contain pthreads/
          - Let VS remove a duplicate FileConfiguration element
          - Let VS have its way with the file ordering
        * WebCorePrefix.h: Made the #include of pthread.h be compiled out on
        Windows.
        * loader/FTPDirectoryDocument.cpp: Added a Windows-specific #define of
        localtime_r (pthread.h was providing a macro that substituted plain
        old localtime before, but localtime_s is "more secure", so I went with
        that).
        * loader/FTPDirectoryParser.cpp: Ditto for gmtime_r.

2008-03-11  Adam Roben  <aroben@apple.com>

        Roll out r30961 since it broke the default site icon on Windows

        * loader/icon/IconDatabase.cpp:
        (WebCore::IconDatabase::defaultIcon):

2008-03-11  Dan Bernstein  <mitz@apple.com>

        Reviewed by Darin Adler.

        - clean up line layout code

        * platform/graphics/GraphicsContext.cpp:
        (WebCore::TextRunIterator::increment): Removed the resolver parameter.
        (WebCore::GraphicsContext::drawBidiText): Adjusted for changes to
        createBidiRunsForLine(), which no longer takes a start parameter.
        * platform/text/BidiResolver.h:
        (WebCore::BidiResolver::): Made Noncopyable and removed the
        m_adjustEmbedding member variable.
        (WebCore::BidiResolver::position): Added. Returns the resolver's current
        position.
        (WebCore::BidiResolver::setPosition): Added. Sets the resolver's current
        position without changing any other state.
        (WebCore::BidiResolver::increment): Added. Advances the resolver to the
        next position, allowing the iterator to push and pop embedding.
        (WebCore::BidiResolver::appendRun): Removed the resolver parameter in
        the call to increment().
        (WebCore::BidiResolver::embed): Removed code to save, set and restore
        m_adjustEmbedding.
        (WebCore::BidiResolver::createBidiRunsForLine): Changed to not take a
        'start' iterator. Instead, start at the current position. Removed code
        to set m_adjustEmbedding. Changed for noncopyability.
        * rendering/RenderBlock.h:
        * rendering/bidi.cpp:
        (WebCore::bidiNext): Made the resolver parameter optional. Changed to
        null-check the 'end of inline' pointer only twice.
        (WebCore::bidiFirst): Made the resolver parameter optional.
        (WebCore::BidiIterator::increment): Ditto.
        (WebCore::BidiState::increment): Added. Overrides the default
        BidiResolver::increment() method by passing the resolver to
        BidiIterator::increment().
        (WebCore::checkMidpoints): Removed the resolver parameter.
        (WebCore::BidiState::appendRun): Removed code to save, set and restore
        m_adjustEmbedding. Adjusted for change to increment().
        (WebCore::RenderBlock::bidiReorderLine): Removed the 'start' parameter
        and unreachable code.
        (WebCore::buildCompactRuns): Adjusted for changes to BidiResolver/
        (WebCore::RenderBlock::layoutInlineChildren): Moved code to initialize
        the resolver from this method to determineStartPosition(). Unified the
        resolver with the 'start' iterator. Removed unreachable code. Moved one
        statement from the beginning of the while loop to the end.
        (WebCore::RenderBlock::determineStartPosition): Moved code to initialize
        the resolver from layoutInlineChildren() into this method.
        (WebCore::RenderBlock::matchedEndLine): Adjusted for the resolver and
        the 'start' iterator being one object.
        (WebCore::skipNonBreakingSpace): Made the parameter const.
        (WebCore::requiresLineBox): Ditto.
        (WebCore::RenderBlock::generatesLineBoxesForInlineChild): Adjusted for
        the change to BidiIterator::increment().
        (WebCore::RenderBlock::skipWhitespace): Made two versions of this
        method, one for BidiIterator and one for BidiState.
        (WebCore::shouldSkipWhitespaceAfterStartObject): Removed the resolver
        parameter.
        (WebCore::RenderBlock::findNextLineBreak): Removed the resolver
        parameter. Removed calls to setAdjustEmbedding(). Removed the 'previous'
        variable and changed the 'last' variable to do its job.
        * rendering/bidi.h:

2008-03-10  Adam Roben  <aroben@apple.com>

        Part of Bug 17224: DOM nodes/attributes should be editable

        <http://bugs.webkit.org/show_bug.cgi?id=17224>
        <rdar://problem/5732825>

        This patch makes text nodes editable via double-click.

        Reviewed by Tim.

        * page/inspector/DocumentPanel.js:
        (WebInspector.DOMNodeTreeElement._startEditing):
          - Moved most of this code to _startEditingAttribute
          - Calls _startEditingTextNode or _startEditingAttribute as
            appropriate
        (WebInspector.DOMNodeTreeElement._startEditingAttribute): Added. Code
        came from _startEditing.
        (WebInspector.DOMNodeTreeElement._startEditingTextNode): Added.
        (WebInspector.DOMNodeTreeElement._textNodeEditingCommitted): Added.
        (WebInspector.DOMNodeTreeElement._editingCancelled): Renamed from
        _attributeEditingCancelled.
        * page/inspector/utilities.js:
        (nodeTitleInfo): Wrap text nodes in a webkit-html-text-node span so
        that we can easily recognize/edit them.

2008-03-11  Holger Hans Peter Freyther  <zecke@selfish.org>

        Reviewed by Darin.

        r25512 inlined the urlIcon to improve the startup time of Safari on Mac. Inlining is
        not suitable for platforms where this icon is themable. E.g. the Qt platform is allowing
        to theme this icon and the Gtk+ platform will probably end up with themable icons
        as well.
        
        Remove dead code from the windows port and move the urlIcon from the windows
        directory to the Resource directory to be used by Qt and other ports.
        
        Ifdef the usage of the built-in icon in IconDatabase.cpp and for Qt do not use
        it. Gtk+ currently has no proper implementation of Image::loadPlatformResource but
        once it does it wants to use this for getting the urlIcon as well.

        * Resources/urlIcon.png: Renamed from WebKit/win/WebKit.vcproj/urlIcon.png.
        * loader/icon/IconDatabase.cpp:
        (WebCore::IconDatabase::defaultIcon):

2008-03-11  Tor Arne Vestbø  <tavestbo@trolltech.com>

        Reviewed by Darin.

        Implemented HTML media element support for QtWebKit, using Phonon.

        http://bugs.webkit.org/show_bug.cgi?id=17766

        * WebCore.pro:
        * platform/graphics/MediaPlayer.cpp:
        * platform/graphics/qt/MediaPlayerPrivatePhonon.cpp: Added.
        (debugMediaObject):
        (WebCore::MediaPlayerPrivate::MediaPlayerPrivate):
        (WebCore::MediaPlayerPrivate::~MediaPlayerPrivate):
        (WebCore::MediaPlayerPrivate::getSupportedTypes):
        (WebCore::MediaPlayerPrivate::hasVideo):
        (WebCore::MediaPlayerPrivate::load):
        (WebCore::MediaPlayerPrivate::cancelLoad):
        (WebCore::MediaPlayerPrivate::play):
        (WebCore::MediaPlayerPrivate::pause):
        (WebCore::MediaPlayerPrivate::paused):
        (WebCore::MediaPlayerPrivate::seek):
        (WebCore::MediaPlayerPrivate::seeking):
        (WebCore::MediaPlayerPrivate::duration):
        (WebCore::MediaPlayerPrivate::currentTime):
        (WebCore::MediaPlayerPrivate::setEndTime):
        (WebCore::MediaPlayerPrivate::maxTimeBuffered):
        (WebCore::MediaPlayerPrivate::maxTimeSeekable):
        (WebCore::MediaPlayerPrivate::bytesLoaded):
        (WebCore::MediaPlayerPrivate::totalBytesKnown):
        (WebCore::MediaPlayerPrivate::totalBytes):
        (WebCore::MediaPlayerPrivate::setRate):
        (WebCore::MediaPlayerPrivate::setVolume):
        (WebCore::MediaPlayerPrivate::setMuted):
        (WebCore::MediaPlayerPrivate::dataRate):
        (WebCore::MediaPlayerPrivate::networkState):
        (WebCore::MediaPlayerPrivate::readyState):
        (WebCore::MediaPlayerPrivate::updateStates):
        (WebCore::MediaPlayerPrivate::setVisible):
        (WebCore::MediaPlayerPrivate::setRect):
        (WebCore::MediaPlayerPrivate::loadStateChanged):
        (WebCore::MediaPlayerPrivate::rateChanged):
        (WebCore::MediaPlayerPrivate::sizeChanged):
        (WebCore::MediaPlayerPrivate::timeChanged):
        (WebCore::MediaPlayerPrivate::volumeChanged):
        (WebCore::MediaPlayerPrivate::didEnd):
        (WebCore::MediaPlayerPrivate::loadingFailed):
        (WebCore::MediaPlayerPrivate::naturalSize):
        (WebCore::MediaPlayerPrivate::eventFilter):
        (WebCore::MediaPlayerPrivate::repaint):
        (WebCore::MediaPlayerPrivate::paint):
        (WebCore::MediaPlayerPrivate::stateChanged):
        (WebCore::MediaPlayerPrivate::tick):
        (WebCore::MediaPlayerPrivate::metaDataChanged):
        (WebCore::MediaPlayerPrivate::seekableChanged):
        (WebCore::MediaPlayerPrivate::hasVideoChanged):
        (WebCore::MediaPlayerPrivate::bufferStatus):
        (WebCore::MediaPlayerPrivate::finished):
        (WebCore::MediaPlayerPrivate::currentSourceChanged):
        (WebCore::MediaPlayerPrivate::aboutToFinish):
        (WebCore::MediaPlayerPrivate::prefinishMarkReached):
        (WebCore::MediaPlayerPrivate::totalTimeChanged):
        * platform/graphics/qt/MediaPlayerPrivatePhonon.h: Added.
        (WebCore::MediaPlayerPrivate::):
        (WebCore::MediaPlayerPrivate::isAvailable):

2008-03-10  Sam Weinig  <sam@webkit.org>

        Reviewed by Beth Dakin.

        Throw a SECURITY_ERR when accessing a tainted canvas
        by CanvasRenderingContext2D::getImageData() and
        HTMLCanvasElement::toDataURL().

        * html/CanvasRenderingContext2D.cpp:
        (WebCore::CanvasRenderingContext2D::getImageData):
        * html/CanvasRenderingContext2D.h:
        * html/CanvasRenderingContext2D.idl:
        * html/HTMLCanvasElement.cpp:
        (WebCore::HTMLCanvasElement::toDataURL):
        * html/HTMLCanvasElement.h:
        * html/HTMLCanvasElement.idl:

2008-03-10  Justin Garcia  <justin.garcia@apple.com>

        Reviewed by Sam.

        <rdar://problem/5779984> REGRESSION (r30391): GMail: Safari won't display the Edit Link dialog

        * bindings/js/JSCSSStyleDeclarationCustom.cpp:
        (WebCore::hasCSSPropertyNamePrefix): Fixed a typo.  The code was only
        comparing the first character of the prefix to the first character
        of the property name.

2008-03-10  Andre Boule  <aboule@apple.com>

        Reviewed by Beth.

        Hold off on initializing the frame to avoid the RenderView getting 
        a null FrameView. This could potentially cause problems.

        * svg/graphics/SVGImage.cpp:
        (WebCore::SVGImage::dataChanged):

2008-03-10  Darin Adler  <darin@apple.com>

        - try to fix Qt build

        * bridge/qt/qt_runtime.cpp:
        (KJS::Bindings::convertQVariantToValue): Change KJS::UChar to UChar.

2008-03-10  Darin Adler  <darin@apple.com>

        Reviewed by Antti.

        - fix <rdar://problem/3059610> VIP: links opened in new frame, window, or tab
          should be redrawn as visited immediately
        - fix <rdar://problem/4382809> Going "back" a page doesn't change the color of
          the visited URL at directory.umi
        - fix http://bugs.webkit.org/show_bug.cgi?id=4941
          Visited links should be marked as visited
        - fix http://bugs.webkit.org/show_bug.cgi?id=7960
          REGRESSION: Visited link color doesn't displayed after loading page from cache

        We now mark all links on a page as "changed" at the appropriate times.

        * WebCore.base.exp: Update since I made completeURL be a const member function.

        * css/CSSStyleSelector.cpp: Got rid of some unneeded globals that could be turned
        into locals. Also changed some static data members to file-scoped globals with
        internal linkage. Renamed the globals to get rid of the m_ prefix. Changed the
        prefix on m_styleNotYetAvailable to s_styleNotYetAvailable.
        (WebCore::CSSStyleSelector::CSSStyleSelector): Updated for name changes.
        (WebCore::parseUASheet): Tweak the comment.
        (WebCore::CSSStyleSelector::loadDefaultStyle): Updated for name changes and to
        use local variables instead of globals where possible.
        (WebCore::CSSStyleSelector::checkPseudoState): Made this a member function so
        it can store the link in a hash. Also changed it to have a return value instead
        of having it modify a global variable. Added code to put the hash into a set so
        we can tell later if this is one of the links that affects this page.
        (WebCore::CSSStyleSelector::canShareStyleWithElement): Updated for the change to
        checkPseudoState.
        (WebCore::CSSStyleSelector::matchUARules): Updated for name changes.
        (WebCore::CSSStyleSelector::styleForElement): Ditto.
        (WebCore::CSSStyleSelector::adjustRenderStyle): Ditto.
        (WebCore::CSSStyleSelector::pseudoStyleRulesForElement): Changed code to read
        the SVG style sheet to use a boolean global and put it right here in the function
        since this is the only code that needs to know about it.
        (WebCore::CSSStyleSelector::checkOneSelector): Updated for name changes.
        (WebCore::colorForCSSValue): Moved code inside the function that is not needed
        anywhere else.
        (WebCore::CSSStyleSelector::getColorFromPrimitiveValue): Updaed for the change
        to checkPseudoState.
        (WebCore::CSSStyleSelector::allVisitedStateChanged): Added. Calls setChanged on
        all links if there were any in the set.
        (WebCore::CSSStyleSelector::visitedStateChanged): Added. Calls setChanged on all
        links if the one that changed is in the set.

        * css/CSSStyleSelector.h: Removed unused StyleSelector class and State enum. Made
        CSSStyleSelector derive from Noncopyable. Made lots of member functions private that
        didn't need to be public, and removed others that could be made into non-member
        functions. Changed pseudoStyleRulesForElement to take a const String& instead of
        a StringImpl*. Added new allVisitedStateChanged and visitedStateChanged functions.
        Got rid of unneeded friend declarations.

        * dom/Document.cpp:
        (WebCore::Document::completeURL): Made const.
        (WebCore::findSlashDotDotSlash): Moved here from PageGroup.
        (WebCore::findSlashSlash): Ditto.
        (WebCore::findSlashDotSlash): Ditto.
        (WebCore::containsColonSlashSlash):
        (WebCore::cleanPath): Ditto.
        (WebCore::matchLetter): Ditto.
        (WebCore::needsTrailingSlash): Ditto.
        (WebCore::Document::visitedLinkHash): Moved this here from PageGroup. This is
        the poor-man's completeURL function. The idea of putting it here is that this
        way it can be alongside the real completeURL function. Later we should figure out
        a way to make this function share more code with the real thing and match behavior.

        * dom/Document.h: Marked completeURL function const. Added visitedLinkHash function.

        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::getMatchedCSSRules): Updated for change to CSSStyleSelector.

        * page/Page.cpp:
        (WebCore::Page::allVisitedStateChanged): Added. Calls allVisitedStateChanged on all
        style selectors.
        (WebCore::Page::visitedStateChanged): Ditto.
        * page/Page.h: Added the above functions.

        * page/PageGroup.cpp:
        (WebCore::PageGroup::isLinkVisited): Changed to take a visitedLinkHash parameter.
        The CSSStyleSelector now handles actually computing the hash, and it does so by
        calling code in Document.
        (WebCore::PageGroup::addVisitedLink): Refactored so the two overloaded copies share
        a bit more code. Added code that calls visitedStateChanged if a new link was added.
        (WebCore::PageGroup::removeVisitedLinks): Added code to call allVisitedStateChanged
        if any visited links are removed.
        * page/PageGroup.h: Include StringHash.h instead of having the AlreadyHashed struct
        definition here.

        * platform/text/StringHash.h:
        (WebCore::CaseFoldingHash::hash): Tweaked to make this a bit more consistent with
        the StringImpl::computeHash function, using the same technique for avoiding 0.
        (WebCore::AlreadyHashed::hash): Added. Was formerly in PageGroup.h.
        (WebCore::AlreadyHashed::avoidDeletedValue): Added. Was formerly in PageGroup.cpp.

        * rendering/RenderStyle.cpp:
        (WebCore::RenderStyle::isStyleAvailable): Changed to use an inline function instead
        of getting directly at a data member so the data member could be made private.

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::scrollToAnchor): Added call to updateHistoryForAnchorScroll.
        (WebCore::FrameLoader::updateHistoryForAnchorScroll): Added.
        * loader/FrameLoader.h: Added updateHistoryForAnchorScroll.

2008-03-10  Adam Roben  <aroben@apple.com>

        Part of Bug 17224: DOM nodes/attributes should be editable

        <http://bugs.webkit.org/show_bug.cgi?id=17224>
        <rdar://problem/5732825>

        This patch makes DOM attributes editable via double-click.

        Reviewed by Tim.

        * page/inspector/DocumentPanel.js:
        (WebInspector.DOMNodeTreeElement.onmousedown): Don't do anything if
        we're being edited, since we want default editing behaviors to work.
        (WebInspector.DOMNodeTreeElement.ondblclick): Try to start editing
        before doing anything else.
        (WebInspector.DOMNodeTreeElement._startEditing): Added. Currently only
        lets you edit attributes.
        (WebInspector.DOMNodeTreeElement._attributeEditingCommitted): Added.
        Uses a scratch element to get the new attribute(s) parsed, then sets
        the attribute(s) on the node in the inspected document.
        (WebInspector.DOMNodeTreeElement._attributeEditingCancelled): Added.
        (WebInspector.DOMNodeTreeElement._updateTitle): Added. Refreshes the
        representation of the node in the Inspector's DOM tree to reflect
        the node's current state.
        * page/inspector/inspector.css: Made the .editing class apply
        everywhere.
        * page/inspector/utilities.js:
        (nodeTitleInfo): Changed to surround attribute name/value pairs in a
        webkit-html-attribute span so that we can easily edit the pair as a
        whole.

2008-03-10  David Kilzer  <ddkilzer@apple.com>

        Fix 64-bit builds.

        Reviewed by Stephanie.

        WebCore.exp only gets generated once for both 32-bit and 64-bit builds,
        so we must exclude the _NPN symbols when creating WebCore.LP64.exp.

        * WebCore.xcodeproj/project.pbxproj: Reverted build phase shell code to
        r30826 to remove _NPN symbols from 64-bit builds in WebCore.LP64.exp.

2008-03-10  Eric Seidel  <eric@webkit.org>

        Reviewed by Darin.

        Remove KJS::UChar, use ::UChar instead
        http://bugs.webkit.org/show_bug.cgi?id=17017

        To functional changes, thus no tests.

        * bindings/js/JSCSSStyleDeclarationCustom.cpp:
        (WebCore::hasCSSPropertyNamePrefix):
        (WebCore::cssPropertyName):
        * bindings/js/JSDOMWindowBase.cpp:
        (WebCore::windowProtoFuncAToB):
        (WebCore::windowProtoFuncBToA):
        * bindings/js/JSSVGPODTypeWrapper.h:
        * bindings/js/kjs_proxy.cpp:
        (WebCore::KJSProxy::evaluate):
        * bridge/objc/objc_utility.mm:
        (KJS::Bindings::throwError):
        * dom/Document.cpp:
        (WebCore::Document::parseQualifiedName):
        * platform/text/AtomicString.cpp:
        (WebCore::AtomicString::add):
        * platform/text/String.cpp:
        (WebCore::String::String):
        (WebCore::String::operator Identifier):
        (WebCore::String::operator UString):
        * platform/text/TextCodecICU.cpp:
        (WebCore::TextCodecICU::decode):
        * svg/SVGAnimatedTemplate.h:

2008-03-10  Darin Adler  <darin@apple.com>

        Reviewed by Sam.

        - eliminate keyboard UI mode method from WebCoreFrameBridge

        * page/ChromeClient.h: Added keyboardUIMode function.
        (WebCore::ChromeClient::keyboardUIMode): Ditto.
        * page/mac/EventHandlerMac.mm:
        (WebCore::EventHandler::tabsToAllControls): Call chrome client function instead
        of bridge function.
        * page/mac/WebCoreFrameBridge.h: Removed keyboardUIMode method, and other unused
        ones.

        * WebCore.xcodeproj/project.pbxproj: Allowed Xcode to change the project.
        Do not try to fight the Xcode.

2008-03-10  Darin Adler  <darin@apple.com>

        - oops, forgot to save last couple changes from the editor

        * bindings/js/JSDOMWindowCustom.cpp:
        (WebCore::markDOMObjectWrapper): Tweaked a tiny bit.
        (WebCore::JSDOMWindow::mark): Sorted alphabetically.

2008-03-10  Darin Adler  <darin@apple.com>

        Reviewed by Geoff.

        - fix failing regression test (window.navigator is getting garbage
          collected and thus losing its custom properties)

        * bindings/js/JSDOMWindowCustom.cpp:
        (WebCore::markDOMObject): Added helper function.
        (WebCore::JSDOMWindow::mark): Added. Marks the wrappers for all the objects that hang
        off the window object.

        * page/DOMWindow.h:
        (WebCore::DOMWindow::optionalScreen): Added so we can get the Screen object without
        creating it if it's already there.
        (WebCore::DOMWindow::optionalSelection): Ditto.
        (WebCore::DOMWindow::optionalHistory): Ditto.
        (WebCore::DOMWindow::optionalLocationbar): Ditto.
        (WebCore::DOMWindow::optionalMenubar): Ditto.
        (WebCore::DOMWindow::optionalPersonalbar): Ditto.
        (WebCore::DOMWindow::optionalScrollbars): Ditto.
        (WebCore::DOMWindow::optionalStatusbar): Ditto.
        (WebCore::DOMWindow::optionalToolbar): Ditto.
        (WebCore::DOMWindow::optionalConsole): Ditto.
        (WebCore::DOMWindow::optionalNavigator): Ditto.

        * page/DOMWindow.idl: Added the CustomMarkFunction flag. Sorted the flags in
        alphabetical order since there are a lot of them.

2008-03-10  Darin Adler  <darin@apple.com>

        Reviewed by Sam.

        - eliminate Java applet methods from WebCoreFrameBridge

        * loader/FrameLoaderClient.h: Added a javaApplet function.
        * page/mac/FrameMac.mm:
        (WebCore::Frame::createScriptInstanceForWidget): Streamlined the code.
        Use the loader client instead of the bridge to get the applet.
        * page/mac/WebCoreFrameBridge.h: Removed the getAppletInView and
        pollForAppletInView methods. Also removed other unused things.

2008-03-10  Marc-Antoine Ruel  <maruel@gmail.com>

        Reviewed by Eric, landed by Darin.

        http://bugs.webkit.org/show_bug.cgi?id=16095
        Move GraphicsContextPrivate to its own header file.

        Moves GraphicsContextState and GraphicsContextPrivate to its
        own header

        * WebCore.vcproj/WebCore.vcproj:
        * platform/graphics/GraphicsContext.cpp:
        * platform/graphics/GraphicsContextPrivate.h: Added.
        (WebCore::GraphicsContextState::GraphicsContextState):
        (WebCore::GraphicsContextPrivate::GraphicsContextPrivate):

2008-03-10  Julien Chaffraix  <julien.chaffraix@gmail.com>

        Reviewed and landed by Darin.

        bug 12182 : XMLHttpRequest should raise SECURITY_ERR for same-origin policy violations

        Removed reference to PERMISSION_DENIED (previous non standard exception) and replaced it
        by DOM exception SECURITY_ERR. Updated XMLHttpRequest::open to raise SECURITY_ERR.

        * bindings/js/kjs_binding.cpp:
        (WebCore::setDOMException): Removed PERMISSION_DENIED code.
        * dom/ExceptionCode.cpp: Added SECURITY_ERR exception.
        * dom/ExceptionCode.h: Ditto.
        * xml/XMLHttpRequest.cpp:
        (WebCore::XMLHttpRequest::open): Returns SECURITY_ERR now.
        * xml/XMLHttpRequestException.h: Removed PERMISSION_DENIED.

2008-03-09  Adam Roben  <aroben@apple.com>

        Refactor CSS editing code so we can share it with DOM editing

        Add WebInspector.startEditing, which takes the element to be edited, a
        committedCallback, a cancelledCallback, and a context parameter. This
        function takes care of setting up the element for editing, and calls
        either the cancelledCallback or committedCallback when editing ends.

        Reviewed by Tim.

        * page/inspector/StylesSidebarPane.js:
        (WebInspector.StylePropertyTreeElement.startEditing):
          - Call WebInspector.isBeingEdited and WebInspector.startEditing
          - Removed code now handled by WebInspector.startEditing
        (WebInspector.StylePropertyTreeElement.editingEnded):
          - Renamed from endEditing
          - Removed code now handled by WebInspector.startEditing
        (WebInspector.StylePropertyTreeElement.editingCancelled):
          - Renamed from cancelEditing
          - Changed parameters to match WebInspector.startEditing's
            cancelledCallback
        (WebInspector.StylePropertyTreeElement.editingCommitted):
          - Renamed from commitEditing
          - Changed parameters to match WebInspector.startEditing's
            committedCallback
        * page/inspector/inspector.js:
        (WebInspector.changeFocus): Changed a call to firstParentWithClassName
        to firstParentOrSelfWithClassName so that if the focusable element
        itself is the target it will be recognized. I don't know why this
        change wasn't needed before this.
        (WebInspector.isBeingEdited): Added.
        (WebInspector.startEditing): Added.

2008-03-10  Adam Roben  <aroben@apple.com>

        Windows build fix

        * WebCore.vcproj/WebCore.vcproj: Pick up generated source files out of
        $(WebKitOutputDir) instead of hard-coding WebKitBuild.

2008-03-10  Darin Adler  <darin@apple.com>

        * DerivedSources.make: Merge plug-in-related changes with the new way of handling
        autogenerated DOM classes.

2008-03-10  Johnny Ding  <johnnyding.webkit@gmail.com>

        Reviewed, tweaked and landed by Alexey.

        - fix http://bugs.webkit.org/show_bug.cgi?id=17732        

        We didn't have a fallback to frame encoding in the case of loading a script via
        changing its src attribute.

        Test: fast/dom/HTMLScriptElement/script-decoding-error-after-setting-src.html

        * html/HTMLScriptElement.cpp:
        (WebCore::HTMLScriptElement::parseMappedAttribute): Use a helper function to get proper
        charset for correct decoding of script content.
        (WebCore::HTMLScriptElement::insertedIntoDocument):
        (WebCore::HTMLScriptElement::scriptCharset): A helper function for getting proper charset
        for the script (as much as can be determined prior to loading it).
        * html/HTMLScriptElement.h:
        * html/HTMLTokenizer.cpp:
        (WebCore::HTMLTokenizer::parseTag): Use a helper function to get proper charset for correct
        decoding of script content.

2008-03-10  Simon Hausmann  <hausmann@webkit.org>

        Reviewed by Lars.

        Fix reference counting of returned MimeType and Plugin objects
        created in the array wrappers.

        * plugins/MimeTypeArray.cpp:
        * plugins/MimeTypeArray.h:
        * plugins/Plugin.cpp:
        * plugins/Plugin.h:
        * plugins/PluginArray.cpp:
        * plugins/PluginArray.h:

2008-03-10  Simon Hausmann  <hausmann@webkit.org>

        Wx linking fix.

        Added missing stubs for PluginData.

        * platform/wx/TemporaryLinkStubs.cpp:

2008-03-10  Simon Hausmann  <hausmann@webkit.org>

        Windows build fix that I forgot to merge earlier ;(

        Forward declare Page as class, not struct.

        * plugins/PluginData.h:

2008-03-10  Simon Hausmann  <hausmann@webkit.org>

        Attempt to fix the Wx build.

        * WebCoreSources.bkl:

2008-03-07  Simon Hausmann  <hausmann@webkit.org>

        Reviewed by Darin.

        Done with Lars.

        http://bugs.webkit.org/show_bug.cgi?id=16815

        Ported the manually written JS bindings of window.navigator,
        window.navigator.plugins and window.navigator.mimeTypes to
        auto-generated bindings.

        Moved the globally cached plugin and mimetype information to a
        per WebCore::Page shared PluginData structure.

        Implemented window.navigator.plugins.refresh() in a
        platform-independent way.

        * DerivedSources.make:
        * GNUmakefile.am:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSDOMWindowBase.cpp:
        (WebCore::JSDOMWindowBase::getValueProperty):
        * bindings/js/JSMimeTypeArrayCustom.cpp: Added.
        (WebCore::JSMimeTypeArray::canGetItemsForName):
        (WebCore::JSMimeTypeArray::nameGetter):
        * bindings/js/JSNavigatorCustom.cpp: Added.
        (WebCore::needsYouTubeQuirk):
        (WebCore::JSNavigator::appVersion):
        * bindings/js/JSPluginArrayCustom.cpp: Added.
        (WebCore::JSPluginArray::canGetItemsForName):
        (WebCore::JSPluginArray::nameGetter):
        * bindings/js/JSPluginCustom.cpp: Added.
        (WebCore::JSPlugin::canGetItemsForName):
        (WebCore::JSPlugin::nameGetter):
        * bindings/js/kjs_navigator.cpp: Removed.
        * bindings/js/kjs_navigator.h: Removed.
        * dom/Clipboard.cpp:
        * dom/DOMImplementation.cpp:
        (WebCore::DOMImplementation::createDocument):
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::shouldUsePlugin):
        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::clear):
        (WebCore::DOMWindow::navigator):
        * page/DOMWindow.h:
        * page/DOMWindow.idl:
        * page/DragController.cpp:
        * page/Frame.cpp:
        * page/Frame.h:
        * page/Navigator.cpp: Added.
        (WebCore::Navigator::Navigator):
        (WebCore::Navigator::~Navigator):
        (WebCore::Navigator::disconnectFrame):
        (WebCore::Navigator::appCodeName):
        (WebCore::Navigator::appName):
        (WebCore::Navigator::appVersion):
        (WebCore::Navigator::language):
        (WebCore::Navigator::userAgent):
        (WebCore::Navigator::platform):
        (WebCore::Navigator::plugins):
        (WebCore::Navigator::mimeTypes):
        (WebCore::Navigator::product):
        (WebCore::Navigator::productSub):
        (WebCore::Navigator::vendor):
        (WebCore::Navigator::vendorSub):
        (WebCore::Navigator::cookieEnabled):
        (WebCore::Navigator::javaEnabled):
        * page/Navigator.h: Added.
        (WebCore::Navigator::create):
        (WebCore::Navigator::frame):
        * page/Navigator.idl: Added.
        * page/Page.cpp:
        (WebCore::Page::refreshPlugins):
        (WebCore::Page::pluginData):
        * page/Page.h:
        * page/Plugin.h: Removed.
        * page/mac/FrameMac.mm:
        * page/mac/WebCoreFrameBridge.mm:
        (-[WebCoreFrameBridge canProvideDocumentSource]):
        * page/mac/WebCoreViewFactory.h:
        * page/qt/FrameQt.cpp:
        * page/win/FrameWin.cpp:
        * platform/gtk/TemporaryLinkStubs.cpp:
        * platform/mac/PlugInInfoStoreMac.mm: Removed.
        * platform/qt/MIMETypeRegistryQt.cpp:
        (WebCore::MIMETypeRegistry::getMIMETypeForExtension):
        * plugins/MimeType.cpp: Added.
        (WebCore::MimeType::MimeType):
        (WebCore::MimeType::~MimeType):
        (WebCore::MimeType::type):
        (WebCore::MimeType::suffixes):
        (WebCore::MimeType::description):
        (WebCore::MimeType::enabledPlugin):
        * plugins/MimeType.h: Added.
        (WebCore::MimeType::create):
        * plugins/MimeType.idl: Added.
        * plugins/MimeTypeArray.cpp: Added.
        (WebCore::MimeTypeArray::MimeTypeArray):
        (WebCore::MimeTypeArray::~MimeTypeArray):
        (WebCore::MimeTypeArray::length):
        (WebCore::MimeTypeArray::item):
        (WebCore::MimeTypeArray::canGetItemsForName):
        (WebCore::MimeTypeArray::nameGetter):
        (WebCore::MimeTypeArray::getPluginData):
        * plugins/MimeTypeArray.h: Added.
        (WebCore::MimeTypeArray::create):
        (WebCore::MimeTypeArray::disconnectFrame):
        * plugins/MimeTypeArray.idl: Added.
        * plugins/Plugin.cpp: Added.
        (WebCore::Plugin::Plugin):
        (WebCore::Plugin::~Plugin):
        (WebCore::Plugin::name):
        (WebCore::Plugin::filename):
        (WebCore::Plugin::description):
        (WebCore::Plugin::length):
        (WebCore::Plugin::item):
        (WebCore::Plugin::canGetItemsForName):
        (WebCore::Plugin::nameGetter):
        * plugins/Plugin.h: Added.
        (WebCore::Plugin::create):
        * plugins/Plugin.idl: Added.
        * plugins/PluginArray.cpp: Added.
        (WebCore::PluginArray::PluginArray):
        (WebCore::PluginArray::~PluginArray):
        (WebCore::PluginArray::length):
        (WebCore::PluginArray::item):
        (WebCore::PluginArray::canGetItemsForName):
        (WebCore::PluginArray::nameGetter):
        (WebCore::PluginArray::refresh):
        (WebCore::PluginArray::getPluginData):
        * plugins/PluginArray.h: Added.
        (WebCore::PluginArray::create):
        (WebCore::PluginArray::disconnectFrame):
        * plugins/PluginArray.idl: Added.
        * plugins/PluginData.cpp: Added.
        (WebCore::PluginData::PluginData):
        (WebCore::PluginData::~PluginData):
        (WebCore::PluginData::supportsMimeType):
        (WebCore::PluginData::pluginNameForMimeType):
        * plugins/PluginData.h: Added.
        (WebCore::PluginData::create):
        (WebCore::PluginData::disconnectPage):
        (WebCore::PluginData::page):
        (WebCore::PluginData::plugins):
        (WebCore::PluginData::mimes):
        * plugins/mac/PluginDataMac.mm: Added.
        (WebCore::PluginData::initPlugins):
        (WebCore::PluginData::refresh):
        * plugins/qt/PluginDataQt.cpp: Added.
        (WebCore::PluginData::initPlugins):
        * plugins/win/PluginDataWin.cpp: Added.
        (WebCore::PluginData::initPlugins):
        (WebCore::PluginData::refresh):

2008-03-10  Simon Hausmann  <hausmann@webkit.org>

        Reviewed by Holger.

        Replace two printfs() in the Qt port with notImplemented().

        * html/CanvasRenderingContext2D.cpp:
        (WebCore::CanvasRenderingContext2D::applyStrokePattern):
        (WebCore::CanvasRenderingContext2D::applyFillPattern):

2008-03-10  Simon Hausmann  <hausmann@webkit.org>

        Reviewed by Alp.

        Compilation fix with gcc 4.3: Include stdio.h for printf.

        * html/CanvasRenderingContext2D.cpp:
        * html/HTMLCanvasElement.cpp:

2008-03-09  Steve Falkenburg  <sfalken@apple.com>

        Stop Windows build if an error occurs in a prior project.

        Rubber stamped by Darin.

        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.vcproj/WebCoreGenerated.vcproj:

2008-03-09  Darin Adler  <darin@apple.com>

        * DerivedSources.make: Third try at fixing the build.
        * bindings/js/JSRGBColor.cpp: And touching this file.

2008-03-09  Darin Adler  <darin@apple.com>

        * DerivedSources.make: One *more* try at fixing the build.

2008-03-09  Darin Adler  <darin@apple.com>

        * DerivedSources.make: One more try at fixing the build.

2008-03-09  Darin Adler  <darin@apple.com>

        * DerivedSources.make: Re-land the change, fixed, and with an attempt to fix the
        bots by removing the incorrect file.

2008-03-09  Oliver Hunt  <oliver@apple.com>

        RS=Mark Rowe

        Roll out r30909 -- it breaks the build and is a non-trivial fix (according to weinig)

        * DerivedSources.make:

2008-03-09  Darin Adler  <darin@apple.com>

        Reviewed by Adam.

        * DerivedSources.make: Put the list of DOM classes into its own
        variable, and generate the JavaScript bindings and Objective-C
        bindings dependencies from that. Added some separators to make it
        a little easier to see the sections of the file. Moved all the
        Mac-specific rules (except for the SVG conditional part) down
        to the bottom of the file in a separate section.

2008-03-09  Adam Roben  <aroben@apple.com>

        Windows build fix

        * WebCore.vcproj/WebCore.vcproj: Make sure all Cairo files are
        excluded from all three CG-based configurations: Debug, Release, and
        Debug_Internal.

2008-03-08  Mark Rowe  <mrowe@apple.com>

        Attempt to fix the Qt build.

        * platform/MIMETypeRegistry.cpp:  Add missing include.

2008-03-08  Oliver Hunt  <oliver@apple.com>

        Reviewed by Sam W.

        Bug 16516: canvas image patterns stop working with some transformations

        Simple fix.  We used x/yStep of FLT_MAX to fake a no-repeat-x/y pattern
        with CG.  However any transforms involving FLT_MAX immediately get
        consumed by the introduced floating point error.  yStep had already been
        clamped to a much smaller arbitrary value, and this patch makes us use
        that clamp value for xStep as well.

        * html/CanvasPattern.cpp:
        (WebCore::CanvasPattern::createPattern):

2008-03-08  Oliver Hunt  <oliver@apple.com>

        Reviewed by Mitz.

        Bug 17728: Canvas.createPattern with null repeat argument throws an exception

        Trivial fix, we were calling toString on null which produces the string "null",
        we just needed to switch to using valueToStringWithNullCheck rather than 
        JSValue::toString directly

        Test: fast/canvas/canvas-pattern-behaviour.html

        * WebCore/bindings/js/JSCanvasRenderingContext2DCustom.cpp:
        (WebCore::JSCanvasRenderingContext2D::createPattern):

2008-03-08  Mark Rowe  <mrowe@apple.com>

        Reviewed by Darin Adler.

        Fix 64-bit build with GCC 4.2.

        * bindings/objc/WebScriptObject.mm: Use NSUInteger in place of unsigned where required.
        * platform/mac/SharedBufferMac.mm: Ditto.

2008-03-08  Dan Bernstein  <mitz@apple.com>

        Reviewed by Oliver Hunt.

        - fix garbage in transparent areas in canvas.toDataURL results

        * platform/graphics/cg/ImageBufferCG.cpp:
        (WebCore::ImageBuffer::toDataURL): Clear the bitmap context before
        painting the canvas image onto it.

2008-03-08  Darin Adler  <darin@apple.com>

        Reviewed by Adele.

        - eliminate custom highlight methods from WebCoreFrameBridge

        * page/Chrome.cpp:
        (WebCore::ChromeClient::customHighlightRect): Added.
        (WebCore::ChromeClient::paintCustomHighlight): Added.
        * page/ChromeClient.h: Added custom highlight functions.
        * page/Frame.h: Removed custom highlight functions.
        * page/mac/FrameMac.mm: Ditto.
        * page/mac/WebCoreFrameBridge.h: Removed custom highlight methods.
        * rendering/InlineTextBox.cpp:
        (WebCore::InlineTextBox::paintCustomHighlight): Changed code to use
        the ChromeClient instead of WebCoreFrameBridge to do the custom highlight.
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::paintCustomHighlight): Ditto.
        * rendering/RootInlineBox.cpp:
        (WebCore::RootInlineBox::addHighlightOverflow): Ditto.
        (WebCore::RootInlineBox::paintCustomHighlight): Ditto.

2008-03-07  Stephanie Lewis  <slewis@apple.com>

        Reviewed by Oliver.

        Fix Windows build.

        * platform/graphics/cg/ImageBufferCG.cpp:
        (WebCore::ImageBuffer::toDataURL):

2008-03-07  David D. Kilzer  <ddkilzer@apple.com>

        Unify concept of enabling Netscape Plug-in API (NPAPI).

        Reviewed by Darin.

        No test cases since there is no change in functionality.

        * DerivedSources.make: Added check for ENABLE_NETSCAPE_PLUGIN_API macro.
        If defined as "1", add WebCore.NPAPI.exp to WEBCORE_EXPORT_DEPENDENCIES.
        * WebCore.NPAPI.exp: Added.
        * WebCore.base.exp: Moved exported NPAPI methods to WebCore.NPAPI.exp.
        * WebCore.xcodeproj/project.pbxproj: Removed changes in r30826 (except
        comments) since we now handle exported NPAPI methods via DerivedSources.make.

        * config.h: Removed USE(NPOBJECT) since we now use ENABLE(NETSCAPE_PLUGIN_API) as
        defined in Platform.h.

        * bindings/objc/DOM.mm: Replaced USE(NPOBJECT) with ENABLE(NETSCAPE_PLUGIN_API).
        (-[DOMElement _NPObject]):

        * bridge/NP_jsobject.cpp: Replaced !PLATFORM(DARWIN) || !defined(__LP64__) with
        ENABLE(NETSCAPE_PLUGIN_API).
        * bridge/NP_jsobject.h: Ditto.
        * bridge/c/c_class.cpp: Ditto.
        * bridge/c/c_class.h: Ditto.
        * bridge/c/c_instance.cpp: Ditto.
        * bridge/c/c_instance.h: Ditto.
        * bridge/c/c_runtime.cpp: Ditto.
        * bridge/c/c_runtime.h: Ditto.
        * bridge/c/c_utility.cpp: Ditto.
        * bridge/c/c_utility.h: Ditto.
        * bridge/npruntime.cpp: Ditto.
        * bridge/npruntime_impl.h: Ditto.
        * bridge/npruntime_priv.h: Ditto.
        * bridge/runtime.cpp: Ditto.
        (KJS::Bindings::Instance::createBindingForLanguageInstance):

        * html/HTMLPlugInElement.cpp: Replaced USE(NPOBJECT) with ENABLE(NETSCAPE_PLUGIN_API).
        (WebCore::HTMLPlugInElement::HTMLPlugInElement):
        (WebCore::HTMLPlugInElement::~HTMLPlugInElement):
        * html/HTMLPlugInElement.h: Ditto.

        * page/Frame.cpp: Replaced USE(NPOBJECT) with ENABLE(NETSCAPE_PLUGIN_API).
        (WebCore::Frame::clearScriptObjects):
        (WebCore::FramePrivate::FramePrivate): Also added #if ENABLE(NETSCAPE_PLUGIN_API)
        guard around m_windowScriptNPObject.
        * page/Frame.h: Replaced USE(NPOBJECT) with ENABLE(NETSCAPE_PLUGIN_API).
        * page/FramePrivate.h: Added #if ENABLE(NETSCAPE_PLUGIN_API) guard around
        m_windowScriptNPObject.
        * page/mac/FrameMac.mm: Replaced USE(NPOBJECT) with ENABLE(NETSCAPE_PLUGIN_API).
        (WebCore::Frame::createScriptInstanceForWidget):

2008-03-07  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Darin.

        REGRESSION: Korean decoding doesn't support extended EUC-KR.

        Test: fast/encoding/char-decoding.html

        * platform/text/TextCodecICU.cpp:
        (WebCore::TextCodecICU::registerExtendedEncodingNames): Untangle the system of duplicate ICU
        encoding names by manually registering windows-939-2000, and mapping all other related
        encodings to it.

2008-03-07  Dan Bernstein  <mitz@apple.com>

        Reviewed by Stephanie.

        - try to fix leaks seen on Tiger after r30840

        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::~CSSStyleSelector): Use the default operator
        delete, rather than arena delete, to deallocate the root default style.

2008-03-07  Pierre-Luc Beaudoin  <pierre-luc.beaudoin@collabora.co.uk>

        Reviewed by Alp Toker.

        http://bugs.webkit.org/show_bug.cgi?id=17681
        GtkLauncher fails to render an element with position: fixed

        Implement the required parts of PlatformScreenGtk.

        * ChangeLog:
        * platform/gtk/PlatformScreenGtk.cpp:
        (WebCore::screenDepth):
        (WebCore::screenIsMonochrome):
        (WebCore::screenRect):

2008-03-07  Oliver Hunt  <oliver@apple.com>

        Reviewed by Darin Adler.

        Bug 16610: <canvas> restore() removes path segments created before it

        The problem here is that WebKit stored the Path as part of the state, so
        restore would incorrectly lose changes made to the canvas path.  To match
        Firefox and HTML5 we make two real changes:
          * Move the context path from the state object directly onto the context.
            This is responsible for all the changes to the path manipulation functions
          * Add transform tracking to each state -- this is needed to correctly transform
            the current path when restore()-ing to a prior state.

        Test: fast/canvas/canvas-save-restore-with-path.html

        * html/CanvasRenderingContext2D.cpp:
        (WebCore::CanvasRenderingContext2D::restore):
        (WebCore::CanvasRenderingContext2D::scale):
        (WebCore::CanvasRenderingContext2D::rotate):
        (WebCore::CanvasRenderingContext2D::translate):
        (WebCore::CanvasRenderingContext2D::transform):
        (WebCore::CanvasRenderingContext2D::beginPath):
        (WebCore::CanvasRenderingContext2D::closePath):
        (WebCore::CanvasRenderingContext2D::moveTo):
        (WebCore::CanvasRenderingContext2D::lineTo):
        (WebCore::CanvasRenderingContext2D::quadraticCurveTo):
        (WebCore::CanvasRenderingContext2D::arcTo):
        (WebCore::CanvasRenderingContext2D::arc):
        (WebCore::CanvasRenderingContext2D::rect):
        (WebCore::CanvasRenderingContext2D::clearPathForDashboardBackwardCompatibilityMode):
        (WebCore::CanvasRenderingContext2D::fill):
        (WebCore::CanvasRenderingContext2D::stroke):
        (WebCore::CanvasRenderingContext2D::clip):
        (WebCore::CanvasRenderingContext2D::isPointInPath):
        * html/CanvasRenderingContext2D.h:

2008-03-07  Oliver Hunt  <oliver@apple.com>

        Reviewed by Ada.

        Fix for crash caused by FrameLoader incorrectly assuming it has
        a RenderWidget

        In some circumstances an application embedding a WebView may 
        choose to prevent a webview from loading a resource.  If that
        resource was requested by an <object> element then we may 
        fallback to different content which may not produce a RenderWidget.
        Unfortunately FrameLoader::loadSubframe was assuming that if a
        renderer was produced it would always be a RenderWidget, and arbitrarily
        performed what could be an incorrect cast.  This could then lead to
        a crash.

        We currently don't have anyway of making a test for this.

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::loadSubframe):

2008-03-07  Samuel Weinig  <sam@webkit.org>

        Reviewed by Oliver Hunt.

        Fix for http://bugs.webkit.org/show_bug.cgi?id=16673
        <canvas> lacks toDataURL()

        Tests: fast/canvas/toDataURL-noData.html
               fast/canvas/toDataURL-supportedTypes.html

        * html/CanvasRenderingContext2D.cpp:
        (WebCore::CanvasRenderingContext2D::printSecurityExceptionMessage): Make message non-global.
        * html/HTMLCanvasElement.cpp:
        (WebCore::HTMLCanvasElement::printSecurityExceptionMessage): Log error message indicating that toDataURL has
        been called on a tainted canvas. 
        (WebCore::HTMLCanvasElement::toDataURL): This does the tainted canvas check, ensures that the canvas has pixel
        data, checks to see if the MIME type is supported.  Unsupported MIME types and the null string (which is made
        by passing no argument/null/undefined in JavaScript) are treated as being PNG, as per the spec.  The actual 
        toDataURL logic is actually done in the ImageBuffer class.
        * html/HTMLCanvasElement.h: Add function declarations.
        * html/HTMLCanvasElement.idl: Add function declaration.

        * platform/MIMETypeRegistry.cpp:
        (WebCore::initializeSupportedImageMIMETypes):
        (WebCore::initializeSupportedImageMIMETypesForEncoding):
        (WebCore::initializeSupportedJavaScriptMIMETypes):
        (WebCore::initializeSupportedNonImageMimeTypes):
        (WebCore::initializeSupportedMediaMIMETypes):
        (WebCore::initializeMIMETypeRegistry):
        (WebCore::MIMETypeRegistry::getMIMETypeForPath):
        (WebCore::MIMETypeRegistry::isSupportedImageMIMEType):
        (WebCore::MIMETypeRegistry::isSupportedImageResourceMIMEType):
        (WebCore::MIMETypeRegistry::isSupportedImageMIMETypeForEncoding):
        (WebCore::MIMETypeRegistry::isSupportedJavaScriptMIMEType):
        (WebCore::MIMETypeRegistry::isSupportedNonImageMIMEType):
        (WebCore::MIMETypeRegistry::isSupportedMediaMIMEType):
        (WebCore::MIMETypeRegistry::isJavaAppletMIMEType):
        (WebCore::MIMETypeRegistry::getSupportedImageMIMETypes):
        (WebCore::MIMETypeRegistry::getSupportedImageResourceMIMETypes):
        (WebCore::MIMETypeRegistry::getSupportedImageMIMETypesForEncoding):
        (WebCore::MIMETypeRegistry::getSupportedNonImageMIMETypes):
        (WebCore::MIMETypeRegistry::getSupportedMediaMIMETypes):
        * platform/MIMETypeRegistry.h:
        Clean up and add new supportedImageMIMETypesForEncoding set which contains the set of
        MIME types the platform knows how to encode. Currently only implemented for CG and Qt.

        * platform/graphics/ImageBuffer.h: Add toDataURL method.
        * platform/graphics/cairo/ImageBufferCairo.cpp:
        (WebCore::ImageBuffer::toDataURL): Add stub.
        * platform/graphics/cg/ImageBufferCG.cpp:
        (WebCore::ImageBuffer::create):
        (WebCore::ImageBuffer::getImageData):
        (WebCore::ImageBuffer::putImageData):
        (WebCore::ImageBuffer::toDataURL):
        Converts the current context to a data: url of the specified MIME type.  This method
        unfortunately has to flip the context, resulting in less than optimal code.

        * platform/graphics/qt/ImageBufferQt.cpp:
        (WebCore::ImageBuffer::toDataURL): Add stub.
        * platform/graphics/wx/ImageBufferWx.cpp:
        (WebCore::ImageBuffer::toDataURL): Add stub.

2008-03-07  Steve Falkenburg  <sfalken@apple.com>

        Build fix.

        * WebCore.vcproj/WebCore.vcproj:

2008-03-07  Brent Fulgham  <bfulgham@gmail.com>

        Reviewed by Mark Rowe.

        Correct build intermediary output
        (http://bugs.webkit.org/show_bug.cgi?id=17713)

        * WebCore/WebCore.vcproj:  Correct intermediary paths

2008-03-07  Brent Fulgham  <bfulgham@gmail.com>

        Reviewed by Steve Falkenburg.

        Add Cairo build requirements to WebCore.vcproj under a new
        set of targets.  Exclude Cairo elements from normal CG build.
        Exclude CG elements from Cairo builds.
        (http://bugs.webkit.org/show_bug.cgi?id=17300)

        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.vcproj/webcore.vsprops: Added.

2008-03-07  Darin Adler  <darin@apple.com>

        Reviewed by Adam.

        - eliminated WebCoreFrameBridge runOpenPanel

        * page/ChromeClient.h: Added runOpenPanel function.
        * page/mac/ChromeMac.mm:
        (WebCore::ChromeClient::runOpenPanel): Added.
        * platform/FileChooser.cpp:
        (WebCore::FileChooser::FileChooser): Moved this here. It's no longer platform-specific.
        Also start the refcount at 1.
        (WebCore::FileChooser::create): Added adoptRef since the refcount no starts at one.
        (WebCore::FileChooser::~FileChooser): Moved here. No longer platform-specific.
        * platform/FileChooser.h: Removed m_controller, which was Macintosh-specific.
        * platform/gtk/FileChooserGtk.cpp: Removed FileChooser constructor and destructor,
        since they are no longer platform-specific.
        * platform/qt/FileChooserQt.cpp: Ditto.
        * platform/win/FileChooserWin.cpp: Ditto.
        * platform/wx/TemporaryLinkStubs.cpp: Ditto.
        * platform/mac/FileChooserMac.mm:
        (WebCore::FileChooser::openFileChooser): Call the chrome client instead of the
        bridge to run the open panel. Allows us to get rid of the WebCoreOpenPanelController
        class and m_controller data member and move the cosntrutor/destructor to platform-
        independent code.

2008-03-07  Adam Roben  <aroben@apple.com>

        Add JavaScriptDebugServer

        This class is a singleton which allows one or more
        JavaScriptDebugListeners to receive callbacks during JavaScript
        execution.

        Right now all listeners receive callbacks for all Pages in the
        process. Eventually we will want to support listeners registering for
        callbacks for specific Pages (e.g., the Inspector will want to listen
        for execution in just the Page it's inspecting).

        Pages notify the JavaScriptDebugServer when they are created so that
        it can install itself as the Page's debugger.

        Reviewed by Darin.

        * GNUMakefile.am: Added new files to project.
        * WebCore.pro: Ditto.
        * WebCore.vcproj/WebCore.vcproj: Ditto.
        * WebCore.xcodeproj/project.pbxproj: Ditto.
        * WebCoreSources.bkl: Ditto.
        * page/JavaScriptDebugListener.h: Added.
        * page/JavaScriptDebugServer.cpp: Added.
        (WebCore::toFrame):
        (WebCore::JavaScriptDebugServer::shared):
        (WebCore::JavaScriptDebugServer::JavaScriptDebugServer):
        (WebCore::JavaScriptDebugServer::~JavaScriptDebugServer):
        (WebCore::JavaScriptDebugServer::addListener): Registers as the
        debugger for all Pages if we're adding our first listener.
        (WebCore::JavaScriptDebugServer::removeListener): Deregisters as the
        debugger for all Pages if we're removing our last listner.
        (WebCore::JavaScriptDebugServer::pageCreated): Registers as the
        debugger for the newly created Page if we have any listeners.
        (WebCore::dispatchDidParseSource): Helper function.
        (WebCore::dispatchFailedToParseSource): Ditto.
        (WebCore::JavaScriptDebugServer::sourceParsed): Call
        dispatchDidParseSource or dispatchFailedToParseSource depending on
        whether there was an error or not.
        (WebCore::JavaScriptDebugServer::dispatchFunctionToListeners): Calls
        the passed-in JavaScriptExecutionCallback on each listener, guarding
        against re-entry.
        (WebCore::JavaScriptDebugServer::callEvent): Dispatch didEnterCallFrame.
        (WebCore::JavaScriptDebugServer::atStatement): Dispatch willExecuteStatement.
        (WebCore::JavaScriptDebugServer::returnEvent): Dispatch willLeaveCallFrame.
        (WebCore::JavaScriptDebugServer::exception): Dispatch exceptionWasRaised.
        * page/JavaScriptDebugServer.h: Added.
        * page/Page.cpp:
        (WebCore::Page::Page): Tell the shared JavaScriptDebugServer we were
        created so it can register as our debugger if needed.

2008-03-07  Darin Adler  <darin@apple.com>

        Reviewed by Brady.

        - fix a theoretical problem with the visited-link hash table by avoiding collision
          with the special "deleted" value
        - improve efficiency of with the visited-link hash table by not hashing twice

        * page/PageGroup.cpp:
        (WebCore::avoidDeletedValue): Added. Makes sure we never try to use the "all ones"
        value, since the hash table uses that for deleted hash table entries.
        (WebCore::PageGroup::isLinkVisited): Call avoidDeletedValue before using the hash
        value with the HashSet.
        (WebCore::PageGroup::addVisitedLink): Ditto.

        * page/PageGroup.h: Added a new hash function, AlreadyHashed, for unsigned integer
        values. This assumes that the value is already a hash value, and doesn't try to
        hash it again. Used this for m_visitedLinkHashes.

2008-03-07  Simon Hausmann  <hausmann@webkit.org>

        Fix the Qt build.

        * WebCore.pro:

2008-03-06  Sam Weinig  <sam@webkit.org> with a little help from Oliver Hunt  <oliver@apple.com>

        Reviewed by Mitz.

        Implement the HTML5 canvas tainting rules to prevent potential data leakage

        Added originClean to HTMLCanvasElement and CanvasPattern
        to track whether a canvas (or pattern) is tainted by remote
        data.
        Use originClean flag to determine whether getImageData should
        return, well, image data.

        Test: http/tests/security/canvas-remote-read-remote-image.html

        * html/CanvasPattern.cpp:
        (WebCore::CanvasPattern::CanvasPattern):
        * html/CanvasPattern.h:
        * html/CanvasRenderingContext2D.cpp:
        (WebCore::CanvasRenderingContext2D::setStrokeStyle):
        (WebCore::CanvasRenderingContext2D::setFillStyle):
        (WebCore::CanvasRenderingContext2D::checkOrigin):
        (WebCore::CanvasRenderingContext2D::drawImage):
        (WebCore::CanvasRenderingContext2D::drawImageFromRect):
        (WebCore::CanvasRenderingContext2D::createPattern):
        (WebCore::CanvasRenderingContext2D::printSecurityExceptionMessage):
        (WebCore::CanvasRenderingContext2D::getImageData):
        * html/CanvasRenderingContext2D.h:
        * html/HTMLCanvasElement.cpp:
        (WebCore::HTMLCanvasElement::HTMLCanvasElement):
        * html/HTMLCanvasElement.h:
        (WebCore::HTMLCanvasElement::setOriginTainted):
        (WebCore::HTMLCanvasElement::originClean):

2008-03-06  Anders Carlsson  <andersca@apple.com>

        Reviewed by Jon.

        Templatize the JNI call code to reduce the amount of code that has
        to be duplicated.

        * bridge/jni/jni_class.cpp:
        (JavaClass::JavaClass):
        * bridge/jni/jni_instance.cpp:
        (JavaInstance::stringValue):
        (JavaInstance::numberValue):
        (JavaInstance::booleanValue):
        (JavaInstance::invokeMethod):
        * bridge/jni/jni_jsobject.cpp:
        (JavaJSObject::convertJObjectToValue):
        * bridge/jni/jni_runtime.cpp:
        (JavaField::JavaField):
        (JavaMethod::JavaMethod):
        * bridge/jni/jni_utility.cpp:
        * bridge/jni/jni_utility.h:
        (KJS::Bindings::):
        (KJS::Bindings::callJNIMethodIDA):
        (KJS::Bindings::callJNIMethodV):
        (KJS::Bindings::callJNIMethod):
        (KJS::Bindings::callJNIStaticMethod):

2008-03-06  Darin Adler  <darin@apple.com>

        Reviewed by Mitz.

        - fix regression test failures from the visited-link change

        * WebCore.base.exp: Export PageGroup::setShouldTrackVisitedLinks.
        * page/PageGroup.cpp:
        (WebCore::PageGroup::addVisitedLink): Do nothing and return early
        if shouldTrackVisitedLinks is false.
        (WebCore::PageGroup::removeVisitedLinks): Reset m_visitedLinksPopulated
        so the next time a link is queried this will be populated from history.
        (WebCore::PageGroup::setShouldTrackVisitedLinks): Added.
        * page/PageGroup.h: Added setShouldTrackVisitedLinks. This is global
        for now, but it would be better if it was per-page-group instead.

2008-03-06  Adele Peterson  <adele@apple.com>

        Reviewed by Darin.

        Fixes for for <rdar://problem/5785892> Implement activeElement attribute for HTMLDocument (HTML5)
        and <rdar://problem/5785895> Implement hasFocus() for HTMLDocument (HTML5)

        Tests: fast/dom/HTMLDocument/activeElement.html
               fast/dom/HTMLDocument/hasFocus.html

        * html/HTMLDocument.cpp:
        (WebCore::HTMLDocument::activeElement): Added. Returns the focused element, or the body element if nothing's focused.
        (WebCore::HTMLDocument::hasFocus): Added. Returns whether or not the document has focus (inclusive of sub-frames).
        * html/HTMLDocument.h: Added methods for activeElement and hasFocus.
        * html/HTMLDocument.idl: Added definitions for activeElement and hasFocus.

2008-03-06  Dan Bernstein  <mitz@apple.com>

        Reviewed by Darin Adler.

        - fix <rdar://problem/5741981> 154008 WebKit: Some asian language font glyphs are not shown (in Mail and Entourage)

        Test: fast/text/soft-hyphen-3.html

        * rendering/bidi.cpp:
        (WebCore::checkMidpoints):
        (WebCore::RenderBlock::findNextLineBreak): Made 'pos' unsigned. Made the
        midpoint after a hyphen always be a valid iterator, not allowing an
        offset past the end of a text node. Changed the check for consecutive
        soft hyphens to account for that.

2008-03-06  Darin Adler  <darin@apple.com>

        - try to fix Wx build

        * WebCoreSources.bkl: Added PageGroup.cpp.

2008-03-06  Darin Adler  <darin@apple.com>

        - fix some builds

        * GNUmakefile.am: Added PageGroup.cpp.
        * WebCore.base.exp: Removed WebCoreHistory.
        * WebCore.pro: Added PageGroup.cpp.

2008-03-06  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Darin.

        <rdar://problem/5687269> Need to create a Collator abstraction for WebCore and JavaScriptCore
        
        * ForwardingHeaders/wtf/unicode/Collator.h: Added.
        * xml/XSLTUnicodeSort.cpp:
        (WebCore::xsltUnicodeSortFunction):
        * xml/XSLTUnicodeSort.h:

2008-03-06  Darin Adler  <darin@apple.com>

        Reviewed by Mitz.

        - fix http://bugs.webkit.org/show_bug.cgi?id=17526
          REGRESSION: iframes are added to Safari's History menu
          by separating the visited link machinery from global history

        This should also make page loading faster due to more efficient visited link coloring.

        * WebCore.base.exp: Updated.
        * WebCore.vcproj/WebCore.vcproj: Added PageGroup.h/cpp, removed GlobalHistory.h/cpp.
        * WebCore.xcodeproj/project.pbxproj: Ditto. Also removed WebCoreHistory.h/m.

        * css/CSSStyleSelector.cpp: Updated includes.
        (WebCore::CSSStyleSelector::initElementAndPseudoState): Eliminated code to set
        currentEncodedURL.
        (WebCore::checkPseudoState): Moved most of the code inside a new
        PageGroup::isLinkVisited function.
        (WebCore::CSSStyleSelector::canShareStyleWithElement): Tightened code a bit by using
        references and only getting colors when needed.
        (WebCore::CSSStyleSelector::getColorFromPrimitiveValue): Ditto.
        * css/CSSStyleSelector.h: Removed EncodedURL, m_encodedURL, and setEncodedURL.

        * dom/Document.cpp:
        (WebCore::Document::attach): Removed call to setEncodedURL.
        (WebCore::Document::setURL): Ditto.
        (WebCore::Document::recalcStyleSelector): Ditto.

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::addBackForwardItemClippedAtTarget): Changed code to use
        early exit idiom to be a little more readable.
        (WebCore::FrameLoader::urlsMatchItem): Change to use a reference for slightly
        better efficiency.
        (WebCore::FrameLoader::goToItem): Use early exit idiom to be a little more
        readable.
        (WebCore::FrameLoader::updateHistoryForStandardLoad): Moved history code back
        in here and got rid of the helper function updateGlobalHistory, restoring the
        logic before r30549. Also added a call to the new addVisitedLink function.
        (WebCore::FrameLoader::updateHistoryForClientRedirect): Added code to call
        addVisitedLink here.
        (WebCore::FrameLoader::updateHistoryForBackForwardNavigation): Removed comment.
        (WebCore::FrameLoader::updateHistoryForReload): Removed call to
        updateGlobalHistory; we can just go without updating global history or
        visited links here, at least for now, since it's not clear that a reload
        is a "history event".
        (WebCore::FrameLoader::updateHistoryForRedirectWithLockedHistory): Moved
        history code back where it was, and added the call to addVisitedLink, just
        as in updateHistoryForStandardLoad above.
        * loader/FrameLoader.h: Removed updateGlobalHistory function.

        * page/Chrome.cpp:
        (WebCore::ChromeClient::populateVisitedLinks): Added. Empty placeholder so we
        don't have to implement this for every port all at once.
        (WebCore::PageGroupLoadDeferrer::PageGroupLoadDeferrer): Changed to use the
        new PageGroup class.
        * page/ChromeClient.h: Added populateVisitedLinks function, used to fill the
        visited links set from the global history at application startup time.

        * page/FrameTree.cpp:
        (WebCore::FrameTree::find): Updated to use the new PageGroup class.

        * page/GlobalHistory.h: Removed.
        * page/win/GlobalHistoryWin.cpp: Removed.
        * page/mac/GlobalHistoryMac.mm: Removed.
        * platform/mac/WebCoreHistory.h: Removed.
        * platform/mac/WebCoreHistory.m: Removed.
        * platform/win/WebCoreHistory.cpp: Removed.
        * platform/win/WebCoreHistory.h: Removed.

        * page/Page.cpp:
        (WebCore::Page::Page): Set m_group to 0.
        (WebCore::Page::setGroupName): Set up m_group. If the page is not in any
        group, set it to 0 for now to postpone the cost of creating a group.
        (WebCore::Page::initGroup): Added. Sets m_group to point to a single-page
        group; used when getting a group.
        (WebCore::Page::removeAllVisitedLinks): Added. Calls removeVisitedLinks
        on all page groups.
        * page/Page.h: Moved enums inside the WebCore namespace. Removed the
        frameNamespace function and instead added the group and groupPtr functions.

        * page/PageGroup.cpp: Added. Contains all the visited code from the
        CSSStyleSelector in the isVisitedLink function, but more efficient because
        we don't allocate memory for the buffer.
        * page/PageGroup.h: Added.

        * platform/gtk/TemporaryLinkStubs.cpp: Removed historyContains.
        * platform/qt/TemporaryLinkStubs.cpp: Removed unneeded include.
        * platform/wx/TemporaryLinkStubs.cpp: Removed historyContains.

2008-03-06  Mark Rowe  <mrowe@apple.com>

        Fix 64-bit Mac build.

        * WebCore.xcodeproj/project.pbxproj:  Exclude _NPN symbols from the exports list as they
        are compiled out of 64-bit builds.

2008-03-06  Mark Rowe  <mrowe@apple.com>

        Leopard build fix.

        * WebCore.base.exp:

2008-03-05  Kevin Ollivier  <kevino@theolliviers.com>

        Fix the wx build after the bindings move.

        * WebCoreSources.bkl:
        * webcore-base.bkl:
        * webcore-wx.bkl:

2008-03-05  Dan Bernstein  <mitz@apple.com>

        Reviewed by Adele Peterson.

        - fix "background-position: inherit"

        * css/CSSStyleSelector.cpp:
        Made HANDLE_MULTILAYER_INHERIT_AND_INITIAL fall through and added
        a return statement in HANDLE_MULTILAYER_VALUE. Also removed an unused
        macro.

2008-03-05  Alp Toker  <alp@atoker.com>

        Add a missing make dependency for derived sources to improve
        autotools build dependency tracking.

        Issue spotted by Ori Bernstein.

        * GNUmakefile.am:

2008-03-05  Alp Toker  <alp@atoker.com>

        GTK+ build fix for breakage introduced in r30800.

        Track moved bridge sources from JavaScriptCore to WebCore.

        * GNUmakefile.am:

2008-03-05  Justin Garcia  <justin.garcia@apple.com>

        Reviewed by Darin.

        One part of fix for:
        <rdar://problem/5780697> Copying content with percentage based rules in a style sheet will cause fidelity issues

        * editing/markup.cpp:
        (WebCore::appendStartMarkup): Styles from matched rules should take precedence over those in
        inline style declarations, not the other way around. 

2008-03-05  Anders Carlsson  <andersca@apple.com>

        Reviewed by Darin.

        Move JNI specific code from runtime_root over to jni_jsobject, where it is used.

        * bridge/jni/jni_jsobject.cpp:
        (completedJavaScriptAccess):
        (initializeJavaScriptAccessLock):
        (lockJavaScriptAccess):
        (unlockJavaScriptAccess):
        (dispatchToJavaScriptThread):
        (performJavaScriptAccess):
        (JavaJSObject::initializeJNIThreading):
        (isJavaScriptThread):
        (JavaJSObject::invoke):
        * bridge/jni/jni_jsobject.h:
        * bridge/runtime_root.cpp:
        * bridge/runtime_root.h:
        * page/mac/WebCoreFrameBridge.mm:
        (-[WebCoreFrameBridge init]):

2008-03-05  Darin Adler  <darin@apple.com>

        Reviewed by Sam.

        - add functions giving offsets within a KURL, slated to replace the
          EncodedURL object in CSSStyleSelector (in a future "visited link" change)
        - changed all KURL data members names to use the traditional m_ prefix
        - initialize all members to 0 in invalid KURLs rather than having all
          functions check m_isValid

        * platform/KURL.cpp:
        (WebCore::KURL::invalidate): Added. Initializes all the fields except for
        m_string to the "invalid" values. For use in the empty constructor and
        in the init and parse functions.
        (WebCore::KURL::init): Tweaked comments. Changed all code paths that return
        early to use the invalidate() function. Updated for member variable name
        changes.
        (WebCore::KURL::hasPath): Updated for member variable name changes.
        Remove now-unneeded check of m_isValid.
        (WebCore::KURL::lastPathComponent): Ditto.
        (WebCore::KURL::protocol): Ditto.
        (WebCore::KURL::host): Ditto.
        (WebCore::KURL::port): Ditto.
        (WebCore::KURL::pass): Ditto.
        (WebCore::KURL::user): Ditto.
        (WebCore::KURL::ref): Ditto.
        (WebCore::KURL::hasRef): Ditto.
        (WebCore::KURL::protocolIs): Ditto.
        (WebCore::KURL::query): Ditto.
        (WebCore::KURL::path): Ditto.
        (WebCore::KURL::setProtocol): Ditto.
        (WebCore::KURL::setHost): Ditto.
        (WebCore::KURL::setPort): Ditto.
        (WebCore::KURL::setHostAndPort): Ditto.
        (WebCore::KURL::setUser): Ditto.
        (WebCore::KURL::setPass): Ditto.
        (WebCore::KURL::setRef): Ditto.
        (WebCore::KURL::setQuery): Ditto.
        (WebCore::KURL::setPath): Ditto.
        (WebCore::KURL::prettyURL): Ditto.
        (WebCore::copyPathRemovingDots): Removed braces to match our code style.
        (WebCore::KURL::parse): Changed all code paths that return early to use
        the invalidate function. Moved code to set m_isValid to true to the very
        end of the function. Removed braces to match our code style. Removed an
        extra copy of the path/query/fragment code (there were two identical copies
        in the two sides of an if statement). Removed some commented-out code.
        Reversed an if statment. Added code to set the new m_pathAfterLastSlash
        field. Updated for member variable name changes.
        (WebCore::equalIgnoringRef): Updated for member variable name changes.
        (WebCore::KURL::isHierarchical): Ditto.

        * platform/KURL.h: Added a FIXME about ref vs. fragment. Made the empty
        constructor inline and called the new invalidate function. Added new
        pathStart, pathEnd, and pathAfterLastSlash functions, for use in the
        new visited link code. Added an invalidate function. Renamed all the
        data members to use the m_ prefix.

        * WebCore.base.exp: Updated.

2008-03-05  Anders Carlsson  <andersca@apple.com>

        Reviewed by Sam.

        * WebCore.xcodeproj/project.pbxproj:
        Change jni_jsobject.cpp to be Obj-C++ for now. The plan is to merge 
        this with jni_objc.mm and create jni_jsobject.mm.
        
        * bridge/jni/jni_jsobject.cpp:
        (createRootObject):
        Move createRootObject here from WebCoreFrameBridge.
        
        (JavaJSObject::createNative):
        Call the newly added createRootObject function.
        
        * bridge/runtime_root.cpp:
        (KJS::Bindings::RootObject::initializeJNIThreading):
        * bridge/runtime_root.h:
        setCreateRootObject no longer takes a root object, rename it to initializeJNIThreading.

        * page/mac/FrameMac.mm:
        (WebCore::Frame::createScriptInstanceForWidget):
        Just call Frame::createRootObject here.
        
        * page/mac/WebCoreFrameBridge.mm:
        (-[WebCoreFrameBridge init]):
        Call initializeJNIThreading.

2008-03-05  Anders Carlsson  <andersca@apple.com>

        Reviewed by Sam.

        Change some static class variables to be regular static variables,
        making it easier to move the chunk of mac-specific code out of runtime_root.[cpp|h]

        * bridge/runtime_root.cpp:
        (KJS::Bindings::completedJavaScriptAccess):
        (KJS::Bindings::RootObject::dispatchToJavaScriptThread):
        (KJS::Bindings::performJavaScriptAccess):
        (KJS::Bindings::RootObject::createRootObject):
        (KJS::Bindings::RootObject::runLoop):
        (KJS::Bindings::RootObject::setCreateRootObject):
        * bridge/runtime_root.h:

2008-03-05  Brent Fulgham <bfulgham@gmail.com>

        Reviewed by Adam Roben.

        Modify source files to use the USE(SAFARI_THEME) macro, rather than
        USE_SAFARI_THEME.  (http://bugs.webkit.org/show_bug.cgi?id=17683)

        * WebCore/platform/win/PlatformScrollBarSafari.cpp
        * WebCore/rendering/RenderThemeSafari.cpp
        * WebCore/rendering/RenderThemeSafari.h
        * config.h: Move definition of WTF_USE_SAFARI_THEME here 

2008-03-05  Brady Eidson  <beidson@apple.com>

        Reviewed by Alexey and Mark Rowe

        Fix for <rdar://problem/5778247> - Reproducible crash on storage/execute-sql-args.html

        DatabaseThread::unscheduleDatabaseTasks() manually filters through a MessageQueue,
        removing particular items for Databases that were shutting down.

        This filtering operation is not atomic, and therefore causes a race condition with the
        database thread waking up and reading from the message queue.  

        The end result was an attempt to dereference a null DatabaseTask.  Timing-wise, this never
        seemed to happen in a debug build, otherwise an assertion would've caught it.  Replacing that
        assertion with a crash in a release build is what revealed this bug.

        The fix for the above symptom was entirely in WTF::MessageQueue in JSCore.  With this fix in 
        place, another crash popped up in the layout tests that was related to dereferencing a 
        deallocated object - simply because SQLTransaction had a raw pointer to it's Database object 
        when it needed to be a ref pointer.

        * storage/SQLTransaction.cpp:
        (WebCore::SQLTransaction::runCurrentStatement):
        * storage/SQLTransaction.h: Change m_database to be a RefPtr
        (WebCore::SQLTransaction::database):

2008-03-05  Mark Rowe  <mrowe@apple.com>

        Build fix.

        * WebCore.base.exp:  Remove symbol that no longer exists from the exports file.

2008-03-05  Adam Roben  <aroben@apple.com>

        Export a header/symbol for WebKit

        Reviewed by Kevin M.

        * WebCore.base.exp:
        * WebCore.xcodeproj/project.pbxproj:

2008-03-05  Adam Roben  <aroben@apple.com>

        Move WebCoreScriptDebugger up to WebKit

        Reviewed by Darin.

        * WebCore.base.exp: Exported some functions used by
        WebCoreScriptDebugger, and sorted the list.
        * WebCore.xcodeproj/project.pbxproj: Removed
        WebCoreScriptDebugger.{h,mm} from the project and marked
        a few headers private so that WebKit can use them.
        * page/mac/WebCoreScriptDebugger.h: Removed.
        * page/mac/WebCoreScriptDebugger.mm: Removed.

2008-03-05  Anders Carlsson  <andersca@apple.com>

        Build bridge/. Copy some headers over to WebKit as part of the post-build step.
        
        * WebCore.vcproj/WebCore.vcproj:

2008-03-05  Anders Carlsson  <andersca@apple.com>

        Reviewed by Geoff.

        * WebCore.base.exp:
        Add the NPN and KJS methods.
        
        * WebCore.xcodeproj/project.pbxproj:
        Bring in bridge/

        * config.h:
        Add HAVE_JNI define.
        
        * bindings/js/kjs_html.cpp:
        * bindings/objc/DOMInternal.mm:
        * bindings/objc/DOMUtility.mm:
        * bindings/objc/WebScriptObject.mm:
        * html/HTMLAppletElement.cpp:
        * html/HTMLEmbedElement.cpp:
        * html/HTMLObjectElement.cpp:
        * html/HTMLPlugInElement.cpp:
        * page/Frame.cpp:
        * page/mac/FrameMac.mm:
        * page/mac/WebCoreFrameBridge.mm:
        * page/mac/WebCoreScriptDebugger.mm:
        * plugins/win/PluginViewWin.cpp:
        Include file changes.

2008-03-04  Anders Carlsson  <andersca@apple.com>

        Reviewed by Sam.

        Rewrite NPRuntime string conversion routines to use WebCore::String
        
        * bridge/NP_jsobject.cpp:
        (_NPN_Evaluate):
        * bridge/c/c_utility.cpp:
        (KJS::Bindings::convertUTF8ToUTF16WithLatin1Fallback):
        (KJS::Bindings::convertNPVariantToValue):
        (KJS::Bindings::convertNPStringToUTF16):
        (KJS::Bindings::identifierFromNPIdentifier):
        * bridge/c/c_utility.h:

2008-03-05  Oliver Hunt  <oliver@apple.com>

        Reviewed by Alexey P.

        Small performance improvement to putImageData (3-5% on assignment in my tests)

        * html/CanvasPixelArray.h:
        (WebCore::CanvasPixelArray::set):

2008-03-04  Sam Weinig  <sam@webkit.org>

        Reviewed by Adele.

        * bindings/js/JSXMLHttpRequest.h: Remove unnecessary override of toBoolean.

2008-03-04  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Sam and Oliver.

        - fixed http://bugs.webkit.org/show_bug.cgi?id=16289
        - fixed Acid3 tests 26 and 27 (not exactly the same issue but related)

        * bindings/js/JSNodeCustom.cpp:
        (WebCore::JSNode::mark): When marking a node that's in-document,
        mark the owner document if it hasn't been already. This means holding on
        to a single node from an unreferenced document now keeps the whole document alive.
        
        We are now at 90/100 on Acid3.

2008-03-04  Sam Weinig  <sam@webkit.org>

        Qt build fix.

        * page/qt/FrameQt.cpp:

2008-03-04  Sam Weinig  <sam@webkit.org>

        Reviewed by Mark Rowe.

        Rename kjs_window to JSDOMWindowBase.

        - Remove all unnecessary includes of JSDOMWindowBase.h, we prefer including
          JSDOMWindow.h

        * ChangeLog:
        * DerivedSources.make:
        * GNUmakefile.am:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * WebCoreSources.bkl:
        * bindings/js/JSCustomVoidCallback.cpp:
        * bindings/js/JSCustomXPathNSResolver.cpp:
        * bindings/js/JSDOMWindowBase.cpp: Copied from bindings/js/kjs_window.cpp.
        * bindings/js/JSDOMWindowBase.h: Copied from bindings/js/kjs_window.h.
        * bindings/js/JSDOMWindowCustom.cpp:
        * bindings/js/JSDatabaseCustom.cpp:
        * bindings/js/JSEventTargetBase.cpp:
        * bindings/js/JSEventTargetBase.h:
        * bindings/js/JSEventTargetNode.cpp:
        * bindings/js/JSHTMLDocumentCustom.cpp:
        * bindings/js/JSHTMLFrameSetElementCustom.cpp:
        * bindings/js/JSHistoryCustom.cpp:
        * bindings/js/JSLocation.cpp:
        * bindings/js/JSSQLTransactionCustom.cpp:
        * bindings/js/JSXMLHttpRequest.cpp:
        * bindings/js/ScheduledAction.cpp:
        * bindings/js/kjs_binding.cpp:
        * bindings/js/kjs_events.cpp:
        * bindings/js/kjs_navigator.cpp:
        * bindings/js/kjs_proxy.cpp:
        * bindings/js/kjs_window.cpp: Removed.
        * bindings/js/kjs_window.h: Removed.
        * bindings/scripts/CodeGeneratorJS.pm:
        * history/CachedPage.cpp:
        * loader/FrameLoader.cpp:
        * page/Chrome.cpp:
        * page/InspectorController.cpp:
        * page/mac/FrameMac.mm:
        * page/mac/WebCoreFrameBridge.mm:
        * page/qt/FrameQt.cpp:
        * page/win/FrameWin.cpp:
        * plugins/win/PluginViewWin.cpp:

2008-03-04  Mark Rowe  <mrowe@apple.com>

        Speculative Qt build fix.

        * platform/qt/PasteboardQt.cpp:

2008-03-04  Anders Carlsson  <andersca@apple.com>

        Reviewed by Sam.

        Update include paths. This code is not used yet.

        * bridge/NP_jsobject.cpp:
        * bridge/c/c_class.cpp:
        * bridge/c/c_instance.cpp:
        * bridge/c/c_utility.cpp:
        (KJS::Bindings::convertUTF8ToUTF16WithLatin1Fallback):
        #if 0 this out for now. 
        
        * bridge/jni/jni_class.cpp:
        * bridge/jni/jni_jsobject.cpp:
        * bridge/jni/jni_objc.mm:
        * bridge/jni/jni_runtime.cpp:
        * bridge/jni/jni_utility.cpp:
        * bridge/jni/jni_utility.h:
        * bridge/npruntime.cpp:
        * bridge/objc/WebScriptObject.h:
        * bridge/objc/objc_class.h:
        * bridge/objc/objc_instance.h:
        * bridge/objc/objc_runtime.h:
        * bridge/objc/objc_utility.h:
        * bridge/objc/objc_utility.mm:
        * bridge/runtime.cpp:
        * bridge/runtime.h:
        * bridge/runtime_array.cpp:
        * bridge/runtime_array.h:
        * bridge/runtime_method.cpp:
        * bridge/runtime_method.h:
        * bridge/runtime_object.cpp:
        * bridge/runtime_object.h:
        * bridge/runtime_root.cpp:
        * bridge/runtime_root.h:

2008-03-04  Dan Bernstein  <mitz@apple.com>

        Reviewed by Darin Adler.

        - fix http://bugs.webkit.org/show_bug.cgi?id=17676
          <rdar://problem/5781091> REGRESSION (r30240-r30267): href attribute values with non-ASCII characters in the host part do not work

        Test: fast/encoding/url-host-name-non-ascii.html

        * platform/KURL.cpp:
        (WebCore::appendEncodedHostname): Added an early return in the all-ASCII
        case to avoid copying the host name twice and corrected the error
        checking after calling uidna_IDNToASCII().

2008-03-04  Sam Weinig  <sam@webkit.org>

        Reviewed by Dan Bernstein.

        Use JSDOMWindow exclusively instead of JSDOMWindowBase.

        * bindings/js/ScheduledAction.cpp:
        (WebCore::ScheduledAction::execute):
        * bindings/js/ScheduledAction.h:
        * bindings/js/kjs_window.cpp:
        (WebCore::JSDOMWindowBase::timerFired):

2008-03-04  Timothy Hatcher  <timothy@apple.com>

        Reviewed by Darin Adler.

        <rdar://problem/5720160> Browser windows "do nothing" while modal
        dialog or menu is up due to run loop modes (or while scrolling)

        Adds a new SchedulePair object that holds a runloop and the mode to use.
        A HashSet of SchedulePairs is tracked by Page so it can be used for resource
        loading and, in the future, maybe SharedTimerMac.

        * WebCore.base.exp: Add new exports for WebKit.
        * WebCore.xcodeproj/project.pbxproj: Add new files.
        * loader/mac/DocumentLoaderMac.cpp: Added.
        (WebCore::scheduleAll): Call schedule all the ResourceLoader handles.
        (WebCore::unscheduleAll): Call unschedule all the ResourceLoader handles.
        (WebCore::DocumentLoader::schedule): Schedule all the ResourceLoaders owned by the DocumentLoader.
        (WebCore::DocumentLoader::unschedule): Unschedule all the ResourceLoaders owned by the DocumentLoader.
        * loader/DocumentLoader.h:
        * page/Page.h:
        (WebCore::Page::scheduledRunLoopPairs): Return m_scheduledRunLoopPairs.
        * page/mac/PageMac.cpp:
        (WebCore::Page::addSchedulePair): Add a SchedulePair to m_scheduledRunLoopPairs.
        (WebCore::Page::removeSchedulePair): Removes a SchedulePair from m_scheduledRunLoopPairs.
        * platform/cf/SchedulePair.cpp: Added.
        * platform/cf/SchedulePair.h: Added.
        * platform/mac/SchedulePairMac.mm: Added.
        * platform/network/ResourceHandle.h:
        * platform/network/mac/FormDataStreamMac.mm:
        (WebCore::advanceCurrentStream): Use the new SchedulePair.
        (WebCore::formCreate): Ditto.
        (WebCore::formFinalize): Ditto.
        (WebCore::formSchedule): Ditto.
        (WebCore::formUnschedule): Ditto.
        * platform/network/mac/ResourceHandleMac.mm:
        (WebCore::ResourceHandle::start): Schedule the connection with all the SchedulePairs
        that Page holds. If Page has no SchedulePairs, schedule with the current runloop, and
        pick the mode based on ResourceHandle::loadsDuringCommonRunLoopModes.
        (WebCore::ResourceHandle::schedule):
        (WebCore::ResourceHandle::unschedule):

2008-03-04  Sam Weinig  <sam@webkit.org>

        Reviewed by Darin Adler.

        Rename kjs_css to JSRGBColor.

        * DerivedSources.make:
        * GNUmakefile.am:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * WebCoreSources.bkl:
        * bindings/js/JSRGBColor.cpp: Copied from bindings/js/kjs_css.cpp.
        * bindings/js/JSRGBColor.h: Copied from bindings/js/kjs_css.h.
        * bindings/js/kjs_css.cpp: Removed.
        * bindings/js/kjs_css.h: Removed.
        * bindings/js/kjs_window.cpp:
        * bindings/objc/DOMUtility.mm:
        * bindings/scripts/CodeGeneratorJS.pm:

2008-03-04  Anders Carlsson  <andersca@apple.com>

        Fix 64-bit build.
        
        * html/HTMLPlugInElement.cpp:

2008-03-04  Nikolas Zimmermann  <zimmermann@kde.org>

        Reviewed by Eric & David.

        Fixes: http://bugs.webkit.org/show_bug.cgi?id=17078

        Fix getSubStringLength() handling, verified by Acid3 test 77.
        Brings up Acid3 score to 88/100.

        Added test: svg/custom/acid3-test-77.html
                    svg/custom/getSubStringLength.html

        * svg/SVGTextContentElement.cpp:
        (WebCore::cummulatedCharacterRangeLength): Simplify some code.
        (WebCore::SVGTextContentElement::getSubStringLength):

2008-03-04  Anders Carlsson  <andersca@apple.com>

        Mac build fix. Neither me, Sam nor Adam know why we need to do this though :(

        * bindings/js/kjs_proxy.cpp:
        (WebCore::KJSProxy::attachDebugger):
        * page/Page.cpp:
        (WebCore::Page::setDebuggerForAllPages):
        (WebCore::Page::setDebugger):

2008-03-04  Adam Roben  <aroben@apple.com>

        Add ExecState.h to ForwardingHeaders

        Reviewed by Anders.

        * ForwardingHeaders/kjs/ExecState.h: Added.
        * page/Page.cpp: Touch this to force WebCore to build and the headers
        to be copied.

2008-03-04  Adam Roben  <aroben@apple.com>

        Make it possible to set a KJS::Debugger on all Frames in a Page and
        all Pages in the process

        Reviewed by Kevin M.

        * ForwardingHeaders/kjs/debugger.h: Added.
        * bindings/js/kjs_proxy.cpp:
        (WebCore::KJSProxy::initScript): Attach the Page's debugger if there
        is one.
        (WebCore::KJSProxy::attachDebugger): Attach the passed-in debugger, or
        detach any existing debugger if none was passed in.
        * bindings/js/kjs_proxy.h:
        * page/Page.cpp:
        (WebCore::Page::Page): Initialize new member.
        (WebCore::Page::setDebuggerForAllPages): Call setDebugger on each Page
        in the process.
        (WebCore::Page::setDebugger): Store the debugger and pass it off to
        all our Frames.
        * page/Page.h:

2008-03-04  Sam Weinig  <sam@webkit.org>

        Reviewed by Darin Adler.

        Add ClassInfo to custom constructors so that they toString properly

        - Take this chance to remove the "Imp" from the end of JSXMLHttpRequestConstructorImp,
          and XSLTProcessorConstructorImp and prefix all the classes with JS. 

        * bindings/js/JSAudioConstructor.cpp:
        (WebCore::): Added ClassInfo definition.
        (WebCore::JSAudioConstructor::JSAudioConstructor):
        (WebCore::JSAudioConstructor::construct): Cleanup.
        * bindings/js/JSAudioConstructor.h: Rename m_doc to m_document.
        (WebCore::JSAudioConstructor::classInfo): Added.

        * bindings/js/JSHTMLInputElementBase.cpp: Rename HTMLInputElementBasePrototype 
        to JSHTMLInputElementBasePrototype as seen if toString'ed.

        * bindings/js/JSHTMLOptionElementConstructor.cpp:
        (WebCore::): Added ClassInfo definition.
        * bindings/js/JSHTMLOptionElementConstructor.h:
        (WebCore::JSHTMLOptionElementConstructor::classInfo): Added.

        * bindings/js/JSImageConstructor.cpp:
        (WebCore::): Added ClassInfo definition.
        (WebCore::JSImageConstructor::implementsConstruct): Moved here from header.
        * bindings/js/JSImageConstructor.h:
        (WebCore::JSImageConstructor::classInfo): Added.

        * bindings/js/JSXMLHttpRequest.cpp:
        (WebCore::): Rename XMLHttpRequestPrototype  to JSXMLHttpRequestPrototype 
        as seen if toString'ed.
        (WebCore::JSXMLHttpRequestConstructor::JSXMLHttpRequestConstructor):
        (WebCore::JSXMLHttpRequestConstructor::implementsConstruct):
        (WebCore::JSXMLHttpRequestConstructor::construct):
        * bindings/js/JSXMLHttpRequest.h: Renamed JSXMLHttpRequestConstructorImp to
        JSXMLHttpRequestConstructor and doc to m_document and 
        (WebCore::JSXMLHttpRequestConstructor::classInfo): Added.

        * bindings/js/JSXSLTProcessor.cpp:
        (WebCore::): Renamed XSLTProcessorPrototype to JSXSLTProcessorPrototype and 
        XSLTProcessorConstructorImp to JSXSLTProcessorConstructor.
        (WebCore::JSXSLTProcessorConstructor::JSXSLTProcessorConstructor):
        (WebCore::JSXSLTProcessorConstructor::implementsConstruct):
        (WebCore::JSXSLTProcessorConstructor::construct):
        * bindings/js/JSXSLTProcessor.h:
        (WebCore::JSXSLTProcessorConstructor::classInfo): Added.

        * bindings/js/kjs_window.cpp:
        (WebCore::JSDOMWindowBase::getValueProperty): Fixed to work with the new class names.

2008-03-04  Dan Bernstein  <mitz@apple.com>

        Reviewed by Oliver Hunt and Geoffrey Garen.

        - fix http://bugs.webkit.org/show_bug.cgi?id=17667
          <rdar://problem/5779658> REGRESSION (r30587): Document::implicitClose() not called when done loading page (Image does not get scaled to fit)

        * loader/loader.cpp:
        (WebCore::Loader::didFinishLoading): Changed to call
        setLoadInProgress(false) even for 4xx errors, because that triggers
        load completion check.

2008-03-04  Adele Peterson  <adele@apple.com>

        Reviewed by Beth.

        Fix for <rdar://problem/5779718> focus() does not work for anchor elements with no content

        If an anchor has zero size, don't exclude it from being focusable from JS, just exclude it
        from being keyboard focusable (using the tab key).

        * html/HTMLAnchorElement.cpp:
        (WebCore::HTMLAnchorElement::isFocusable):
        (WebCore::HTMLAnchorElement::isKeyboardFocusable):

2008-03-04  Chris Fleizach  <cfleizach@apple.com>

        Reviewed by Darin Adler.

        - fix <rdar://problem/5119360> ER - Seed: Google results do not have AXHeading information

        * page/mac/WebCoreAXObject.mm:
        (headingLevel):
        (-[WebCoreAXObject accessibilityIsIgnored]):

2008-03-04  Sam Weinig  <sam@webkit.org>

        GTK+ build fix.

        * GNUmakefile.am:

2008-03-04  Sam Weinig  <sam@webkit.org>

        Reviewed by Darin Adler.

        Remame ImageConstructorImp to JSImageConstructor and move it into its
        own file.

        * GNUmakefile.am:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * WebCoreSources.bkl:
        * bindings/js/JSImageConstructor.cpp: Copied from bindings/js/kjs_html.cpp.
        (WebCore::JSImageConstructor::JSImageConstructor):
        (WebCore::JSImageConstructor::construct):
        * bindings/js/JSImageConstructor.h: Copied from bindings/js/kjs_html.h.
        * bindings/js/kjs_html.cpp:
        (WebCore::getRuntimeObject): Make this function static since it is only used
        in this file.
        * bindings/js/kjs_html.h:
        * bindings/js/kjs_window.cpp:
        (WebCore::JSDOMWindowBase::getValueProperty):

2008-03-04  Adam Roben  <aroben@apple.com>

        Fix an uninitialized value warning in CodeGeneratorJS.pm

        * bindings/scripts/CodeGeneratorJS.pm: Remove reference to
        non-existent $maybeOkParam (this was removed in r30753).

2008-03-04  Sam Weinig  <sam@webkit.org>

        Reviewed by Darin Adler.

        Remove kjs_dom.{h,cpp}.

        - Removed custom toAttr, which took a boolean ok, and teach CodeGeneratorJS.pm
          to us a null return value as an indication of failure. (This new logic is used
          for toVoidCallback as well.)
        - Move getRuntimeObject to kjs_html where a bunch of other runtime object related
          functions currently live.
        - Move checkNodeSecurity to kjs_binding, where other frame security functions 
          currently live.
        - Remove getNodeConstructor.  It had no implementation.

        * GNUmakefile.am:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * WebCoreSources.bkl:
        * bindings/js/JSAttrCustom.cpp:
        * bindings/js/JSCustomVoidCallback.cpp:
        (WebCore::toVoidCallback):
        * bindings/js/JSCustomVoidCallback.h:
        * bindings/js/JSDatabaseCustom.cpp:
        (WebCore::JSDatabase::changeVersion):
        (WebCore::JSDatabase::transaction):
        * bindings/js/JSElementCustom.cpp:
        (WebCore::JSElement::setAttributeNode):
        (WebCore::JSElement::setAttributeNodeNS):
        * bindings/js/JSEventTargetBase.cpp:
        (WebCore::toJS):
        * bindings/js/JSEventTargetBase.h:
        * bindings/js/JSHTMLAppletElementCustom.cpp:
        * bindings/js/JSHTMLElementCustom.cpp:
        * bindings/js/JSHTMLEmbedElementCustom.cpp:
        * bindings/js/JSHTMLFormElementCustom.cpp:
        * bindings/js/JSHTMLFrameElementCustom.cpp:
        * bindings/js/JSHTMLIFrameElementCustom.cpp:
        * bindings/js/JSHTMLObjectElementCustom.cpp:
        * bindings/js/JSNamedNodeMapCustom.cpp:
        * bindings/js/JSNamedNodesCollection.cpp:
        * bindings/js/JSNodeFilterCustom.cpp:
        * bindings/js/JSXSLTProcessor.cpp:
        * bindings/js/kjs_binding.cpp:
        (WebCore::checkNodeSecurity):
        * bindings/js/kjs_binding.h:
        * bindings/js/kjs_css.cpp:
        * bindings/js/kjs_dom.cpp: Removed.
        * bindings/js/kjs_dom.h: Removed.
        * bindings/js/kjs_events.cpp:
        * bindings/js/kjs_html.cpp:
        (WebCore::getRuntimeObject):
        * bindings/js/kjs_html.h:
        * bindings/js/kjs_window.cpp:
        * bindings/scripts/CodeGeneratorJS.pm:
        * dom/Attr.idl:
        * html/HTMLPlugInElement.cpp:
        * page/InspectorController.cpp:

2008-03-04  Adam Roben  <aroben@apple.com>

        Win/Qt/GTK+/wx build fix after r30740

        * editing/Editor.cpp: Added missing #include.
        * page/qt/FrameQt.cpp: Removed Frame::dashboardRegionsChanged.
        * page/win/FrameWin.cpp: Ditto.
        * platform/wx/TemporaryLinkStubs.cpp: Ditto.

2008-03-04  Alp Toker  <alp@atoker.com>

        GTK+ build fix for breakage introduced in r30740.

        Remove Frame::dashboardRegionsChanged(). There's now a default
        implementation at ChromeClient::dashboardRegionsChanged().

        * page/gtk/FrameGtk.cpp:

2008-03-04  Alp Toker  <alp@atoker.com>

        GTK+ build fix suggested by aroben. Remove an unused Mac-specific
        included introduced in r30740.

        * page/ChromeClient.h:

2008-03-04  Dan Bernstein  <mitz@apple.com>

        Reviewed by Sam Weinig.

        - fix <rdar://problem/5622336> Burmese text does not render on http://www.myanmarbible.com/bible/Judson/html/index.html

        Test: platform/win/fast/text/uniscribe-missing-glyph.html

        Note that default installations of Windows do not have Myanmar fonts.
        What this patch does is ensure that the Myanmar and other complex
        scripts are rendered as missing glyphs rather than not rendered at all.
        The particular page in the bug measures the relative widths of two
        rendered strings and, if they are rendered as missing glyphs, detects
        that a Myanmar fonts is not available and substitutes the text with
        images. By not rendering (and measuring) missing glyphs, WebKit was
        throwing the page's detection code off.

        * platform/graphics/win/UniscribeController.cpp:
        (WebCore::UniscribeController::shape): Removed an early return in case
        shaping resulted in missing glyphs. This is now expected if font
        fallback failed to produce a font containing glyphs for the character.
        Also changed two resize()s to shrink()s.

2008-03-04  Darin Adler  <darin@apple.com>

        Reviewed by Adam.

        - remove WebCoreFrameBridge reapplyStyles method

        * WebCore.base.exp: Added exports.
        * page/mac/WebCoreFrameBridge.h: Removed WebCoreDeviceType and
        reapplyStylesForDeviceType: method.
        * page/mac/WebCoreFrameBridge.mm: Ditto.

2008-03-04  Darin Adler  <darin@apple.com>

        Reviewed by Adam.

        - eliminate WebCoreFrameBridge createFrameViewWithNSView

        * WebCore.base.exp: Added some more exports.
        * page/mac/WebCoreFrameBridge.h: Deleted createFrameViewWithNSView.
        * page/mac/WebCoreFrameBridge.mm: Ditto.

2008-03-04  Darin Adler  <darin@apple.com>

        Reviewed by Adam.

        - removed WebCoreFrameBridge scrollOverflowInDirection

        * WebCore.base.exp: Export function needed by WebKit.
        * page/mac/WebCoreFrameBridge.h: Removed WebScrollDirection, WebScrollGranularity,
        and scrollOverflowInDirection.
        * page/mac/WebCoreFrameBridge.mm: Removed method.

2008-03-04  Darin Adler  <darin@apple.com>

        Reviewed by Adam.

        - remove WebCoreFrameBridge installInFrame: method

        * WebCore.base.exp: Export a few symbols.
        * WebCore.xcodeproj/project.pbxproj: Export a few files.
        * page/mac/WebCoreFrameBridge.h: Remove installInFrame:.
        * page/mac/WebCoreFrameBridge.mm: Ditto.

2008-03-04  Darin Adler  <darin@apple.com>

        Reviewed by Adam.

        - remove WebCoreFrameBridge window method

        * page/mac/EventHandlerMac.mm:
        (WebCore::EventHandler::sendFakeEventsAfterWidgetTracking): Get the window by calling
        window on the NSView instead of using the bridge. The WebKit side wasn't doing anything
        special, so a call to -[NSView window] is fine.

        * page/mac/WebCoreFrameBridge.h: Removed the window method.

2008-03-04  Darin Adler  <darin@apple.com>

        Reviewed by Adam.

        - remove -[WebCoreFrameBridge dashboardRegionsChanged:]

        * WebCore.base.exp: Updated.
        * page/Chrome.cpp:
        (WebCore::ChromeClient::dashboardRegionsChanged): Added.
        * page/ChromeClient.h: Added virtual function for dashboardRegionsChanged.
        * page/Frame.h: Removed dashboardRegionsChanged function.
        * page/FrameView.cpp:
        (WebCore::FrameView::updateDashboardRegions): Changed to call dashboardRegionsChanged
        on ChromeClient and to only call it when the regions actually changed.
        * page/mac/FrameMac.mm: Removed dashboardRegionsChanged function.
        * page/mac/WebCoreFrameBridge.h: Removed dashboardRegionsChanged: method.

2008-03-04  Darin Adler  <darin@apple.com>

        Reviewed by Adam.

        - remove WebCoreFrameBridge issuePasteComand method

        * editing/Editor.cpp:
        (WebCore::Editor::paste): Moved the Mac-specific part of this to EditorMac.
        * editing/mac/EditorMac.mm:
        (WebCore::Editor::paste): Added. Calls paste: on the document view (normally a
        WebHTMLView). We should get rid of this eventually.
        * page/Frame.h: Removed issuePasteCommand.
        * page/mac/FrameMac.mm: Ditto.
        * page/mac/WebCoreFrameBridge.h: Ditto.

2008-03-04  Alexey Proskuryakov  <ap@webkit.org>

        Suggested by Darin, rubber-stamped by Mark.

        http://bugs.webkit.org/show_bug.cgi?id=17569
        REGRESSION (r30571): Buzzword.com doesn't load

        Rolling out r30571, as determining what is wrong with it proved tricky.

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::load):
        (WebCore::FrameLoader::tokenizerProcessedData):
        (WebCore::FrameLoader::continueFragmentScrollAfterNavigationPolicy):

2008-03-04  Sam Weinig  <sam@webkit.org>

        Build fix.

        * bindings/js/kjs_events.cpp:

2008-03-03  Sam Weinig  <sam@webkit.org>

        Reviewed by Mark Rowe.

        Move JSClipboard into its own file.

        * DerivedSources.make:
        * GNUmakefile.am:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * WebCoreSources.bkl:
        * bindings/js/JSAttrCustom.cpp:
        * bindings/js/JSClipboardCustom.cpp: Added.
        (WebCore::JSClipboard::types):
        (WebCore::JSClipboard::clearData):
        (WebCore::JSClipboard::getData):
        (WebCore::JSClipboard::setData):
        (WebCore::JSClipboard::setDragImage):
        * bindings/js/JSElementCustom.cpp:
        * bindings/js/JSEventCustom.cpp:
        * bindings/js/JSHTMLFrameElementCustom.cpp:
        * bindings/js/JSHTMLIFrameElementCustom.cpp:
        * bindings/js/kjs_events.cpp:
        * bindings/js/kjs_events.h:
        * bindings/js/kjs_window.cpp:
        * bindings/scripts/CodeGeneratorJS.pm:
        * dom/Clipboard.cpp:
        (WebCore::Clipboard::setDropEffect):
        (WebCore::Clipboard::setEffectAllowed):
        * dom/Clipboard.idl: Added.

2008-03-03  Sam Weinig  <sam@webkit.org>

        Windows build-fix.

        * page/Chrome.cpp:
        * plugins/win/PluginViewWin.cpp:

2008-03-03  Sam Weinig  <sam@webkit.org>

        Reviewed by Darin Adler.

        Cleanup and plumbing in preparation for the great Window split.

        - Rename KJS::Window to WebCore::JSDOMWindowBase.
        - Remove KJS::Window::retrieve() and KJS::Window::retrieveWindow() and replace
          with the new toJSDOMWindow().
        - Remove KJS::Window::retrieveActive() and replace with explicit call to 
          exec->dynamicGlobalObject() and toJSDOMWindow().

        * bindings/js/JSCustomVoidCallback.cpp:
        (WebCore::toVoidCallback):.
        * bindings/js/JSCustomXPathNSResolver.cpp:
        (WebCore::JSCustomXPathNSResolver::create):
        * bindings/js/JSDatabaseCustom.cpp:
        (WebCore::JSDatabase::changeVersion):
        (WebCore::JSDatabase::transaction):
        * bindings/js/JSDocumentCustom.cpp:
        (WebCore::JSDocument::location):
        (WebCore::toJS):
        * bindings/js/JSEventTargetBase.cpp:
        (WebCore::jsEventTargetAddEventListener):
        (WebCore::jsEventTargetRemoveEventListener):
        * bindings/js/JSEventTargetNode.cpp:
        (WebCore::JSEventTargetNode::setListener):
        * bindings/js/JSHTMLDocumentCustom.cpp:
        (WebCore::JSHTMLDocument::nameGetter):
        (WebCore::JSHTMLDocument::open):
        * bindings/js/JSHTMLFrameSetElementCustom.cpp:
        (WebCore::JSHTMLFrameSetElement::nameGetter):
        * bindings/js/JSLocation.cpp:
        (WebCore::JSLocation::put):
        (WebCore::jsLocationProtoFuncReplace):
        (WebCore::jsLocationProtoFuncReload):
        (WebCore::jsLocationProtoFuncAssign):
        * bindings/js/JSLocation.h:
        * bindings/js/JSSQLTransactionCustom.cpp:
        (WebCore::JSSQLTransaction::executeSql):
        * bindings/js/JSSVGLazyEventListener.cpp:
        (WebCore::JSSVGLazyEventListener::JSSVGLazyEventListener):
        (WebCore::JSSVGLazyEventListener::eventParameterName):
        * bindings/js/JSSVGLazyEventListener.h:
        * bindings/js/JSXMLHttpRequest.cpp:
        (WebCore::JSXMLHttpRequest::putValueProperty):
        (WebCore::jsXMLHttpRequestPrototypeFunctionOpen):
        (WebCore::jsXMLHttpRequestPrototypeFunctionAddEventListener):
        (WebCore::jsXMLHttpRequestPrototypeFunctionRemoveEventListener):
        * bindings/js/ScheduledAction.cpp:
        (WebCore::ScheduledAction::execute):
        * bindings/js/ScheduledAction.h:
        * bindings/js/kjs_binding.cpp:
        (WebCore::allowsAccessFromFrame):
        (WebCore::printErrorMessageForFrame):
        * bindings/js/kjs_events.cpp:
        (WebCore::JSAbstractEventListener::handleEvent):
        (WebCore::JSUnprotectedEventListener::JSUnprotectedEventListener):
        (WebCore::JSUnprotectedEventListener::~JSUnprotectedEventListener):
        (WebCore::JSUnprotectedEventListener::windowObj):
        (WebCore::JSEventListener::JSEventListener):
        (WebCore::JSEventListener::~JSEventListener):
        (WebCore::JSEventListener::windowObj):
        (WebCore::JSLazyEventListener::JSLazyEventListener):
        (WebCore::JSLazyEventListener::parseCode):
        * bindings/js/kjs_events.h:
        * bindings/js/kjs_navigator.cpp:
        (WebCore::MimeType::getValueProperty):
        * bindings/js/kjs_proxy.cpp:
        (WebCore::KJSProxy::evaluate):
        (WebCore::KJSProxy::createHTMLEventHandler):
        (WebCore::KJSProxy::createSVGEventHandler):
        * bindings/js/kjs_window.cpp:
        (WebCore::JSDOMWindowBasePrivate::JSDOMWindowBasePrivate):
        (WebCore::DOMWindowTimer::DOMWindowTimer):
        (WebCore::DOMWindowTimer::action):
        (WebCore::DOMWindowTimer::takeAction):
        (WebCore::JSDOMWindowBase::JSDOMWindowBase):
        (WebCore::JSDOMWindowBase::~JSDOMWindowBase):
        (WebCore::JSDOMWindowBase::location):
        (WebCore::JSDOMWindowBase::mark):
        (WebCore::allowPopUp):
        (WebCore::createWindow):
        (WebCore::showModalDialog):
        (WebCore::JSDOMWindowBase::getValueProperty):
        (WebCore::JSDOMWindowBase::childFrameGetter):
        (WebCore::JSDOMWindowBase::indexGetter):
        (WebCore::JSDOMWindowBase::namedItemGetter):
        (WebCore::JSDOMWindowBase::getOwnPropertySlot):
        (WebCore::JSDOMWindowBase::put):
        (WebCore::JSDOMWindowBase::allowsAccessFrom):
        (WebCore::JSDOMWindowBase::allowsAccessFromNoErrorMessage):
        (WebCore::JSDOMWindowBase::allowsAccessFromPrivate):
        (WebCore::JSDOMWindowBase::crossDomainAccessErrorMessage):
        (WebCore::JSDOMWindowBase::printErrorMessage):
        (WebCore::JSDOMWindowBase::globalExec):
        (WebCore::JSDOMWindowBase::shouldInterruptScript):
        (WebCore::JSDOMWindowBase::setListener):
        (WebCore::JSDOMWindowBase::getListener):
        (WebCore::JSDOMWindowBase::findJSEventListener):
        (WebCore::JSDOMWindowBase::findOrCreateJSEventListener):
        (WebCore::JSDOMWindowBase::findJSUnprotectedEventListener):
        (WebCore::JSDOMWindowBase::findOrCreateJSUnprotectedEventListener):
        (WebCore::JSDOMWindowBase::clearHelperObjectProperties):
        (WebCore::JSDOMWindowBase::clear):
        (WebCore::JSDOMWindowBase::setCurrentEvent):
        (WebCore::JSDOMWindowBase::currentEvent):
        (WebCore::windowProtoFuncAToB):
        (WebCore::windowProtoFuncBToA):
        (WebCore::windowProtoFuncOpen):
        (WebCore::windowProtoFuncSetTimeout):
        (WebCore::windowProtoFuncClearTimeout):
        (WebCore::windowProtoFuncSetInterval):
        (WebCore::windowProtoFuncAddEventListener):
        (WebCore::windowProtoFuncRemoveEventListener):
        (WebCore::windowProtoFuncShowModalDialog):
        (WebCore::windowProtoFuncNotImplemented):
        (WebCore::JSDOMWindowBase::setReturnValueSlot):
        (WebCore::JSDOMWindowBase::clearAllTimeouts):
        (WebCore::JSDOMWindowBase::installTimeout):
        (WebCore::JSDOMWindowBase::pauseTimeouts):
        (WebCore::JSDOMWindowBase::resumeTimeouts):
        (WebCore::JSDOMWindowBase::clearTimeout):
        (WebCore::JSDOMWindowBase::timerFired):
        (WebCore::JSDOMWindowBase::disconnectFrame):
        (WebCore::JSDOMWindowBase::jsEventListeners):
        (WebCore::JSDOMWindowBase::jsHTMLEventListeners):
        (WebCore::JSDOMWindowBase::jsUnprotectedEventListeners):
        (WebCore::JSDOMWindowBase::jsUnprotectedHTMLEventListeners):
        (WebCore::toJS):
        (WebCore::toJSDOMWindow):
        (WebCore::toJSDOMWindow):
        * bindings/js/kjs_window.h:
        (WebCore::JSDOMWindowBase::impl):
        (WebCore::JSDOMWindowBase::classInfo):
        (WebCore::JSDOMWindowBase::):
        * bindings/objc/DOMUtility.mm:
        (KJS::createDOMWrapper):
        * bindings/scripts/CodeGeneratorJS.pm:
        * history/CachedPage.cpp:
        (WebCore::CachedPage::CachedPage):
        (WebCore::CachedPage::restore):
        * page/Chrome.cpp:
        (WebCore::PageGroupLoadDeferrer::PageGroupLoadDeferrer):
        (WebCore::PageGroupLoadDeferrer::~PageGroupLoadDeferrer):
        * page/DOMWindow.idl:
        * page/Frame.cpp:
        (WebCore::Frame::~Frame):
        (WebCore::Frame::windowScriptNPObject):
        (WebCore::Frame::pageDestroyed):
        * page/InspectorController.cpp:
        (WebCore::inspectedWindow):
        * page/mac/FrameMac.mm:
        (WebCore::Frame::windowScriptObject):
        * page/mac/WebCoreFrameBridge.mm:
        (updateRenderingForBindings):
        * platform/SecurityOrigin.cpp:
        (WebCore::SecurityOrigin::canAccess):

2008-03-03  Kevin Ollivier  <kevino@theolliviers.com>

        wx build fixes after recent Frame-related changes.

        * platform/wx/PasteboardWx.cpp:
        * platform/wx/TemporaryLinkStubs.cpp:

2008-03-03  Dan Bernstein  <mitz@apple.com>

        Reviewed by Darin Adler.

        - make :first-letter apply to the first letter in normal flow, skipping
          floats and positioned objects

        Test: fast/css/first-letter-skip-out-of-flow.html

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::updateFirstLetter):

2008-03-03  Ada Chan  <adachan@apple.com>

        Fix build.

        * plugins/win/PluginViewWin.cpp:

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-03  Anders Carlsson  <andersca@apple.com>

        Reviewed by Darin and Sam.

        Include fixes, in preparation of using the headers in WebCore/bridge.
        
        * bindings/js/kjs_binding.h:
        * bindings/js/kjs_dom.cpp:
        * bindings/objc/DOMInternal.mm:
        * bindings/objc/DOMUtility.mm:
        * bindings/objc/WebScriptObject.mm:
        * bindings/objc/WebScriptObjectPrivate.h:
        * bridge/objc/objc_class.h:
        * bridge/objc/objc_instance.h:
        * bridge/objc/objc_runtime.h:
        * bridge/objc/objc_utility.h:
        * bridge/runtime.h:
        * bridge/runtime_object.h:
        * bridge/runtime_root.h:
        * html/HTMLAppletElement.cpp:
        * html/HTMLAppletElement.h:
        * html/HTMLEmbedElement.cpp:
        * html/HTMLEmbedElement.h:
        * html/HTMLObjectElement.cpp:
        * html/HTMLPlugInElement.cpp:
        * html/HTMLPlugInElement.h:
        * page/mac/FrameMac.mm:
        * page/mac/WebCoreFrameBridge.h:
        * page/mac/WebCoreFrameBridge.mm:
        * page/mac/WebCoreScriptDebugger.mm:

2008-03-03  David Hyatt  <hyatt@apple.com>

        Full page zoom plumbing.  Add a notion of whether or not a zoom is text only or a full zoom to the
        Frame.  setTextSizeMultiplier does a text only zoom.

        Reviewed by Tim H.

        * page/Frame.cpp:
        (WebCore::Frame::zoomFactor):
        (WebCore::Frame::isZoomFactorTextOnly):
        (WebCore::Frame::setZoomFactor):
        (WebCore::FramePrivate::FramePrivate):
        * page/Frame.h:
        * page/FramePrivate.h:
        * page/mac/WebCoreFrameBridge.mm:
        (-[WebCoreFrameBridge setTextSizeMultiplier:]):
        * svg/SVGSVGElement.cpp:
        (WebCore::SVGSVGElement::setCurrentScale):

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  David D. Kilzer  <ddkilzer@webkit.org>

        Dynamically inserting CSS rule with @media query fails with DOM Exception 12
        <http://bugs.webkit.org/show_bug.cgi?id=15986>

        Reviewed by Darin.

        Allow any valid rule (@font-face, @import, @media, @page or style) to be
        parsed when using CSSStyleSheet.insertRule().  Previously only import and
        style rules were allowed.  Note that @page rules always throw an exception
        because they're not implemented yet, so no test case was added for them.

        Tests: fast/css/insertRule-font-face.html
               fast/css/insertRule-media.html

        * css/CSSGrammar.y: Extracted 'valid_rule' out of 'rule'.  Renamed
        'ruleset_or_import' to 'valid_rule_or_import' and changed its definition.

2008-03-03  Anders Carlsson  <andersca@apple.com>

        Reviewed by Sam.

        Copy JSC bindings directory over to WebCore/bridge.

        * bridge: Copied from ../JavaScriptCore/bindings.

2008-03-03  Dan Bernstein  <mitz@apple.com>

        Reviewed by Darin Adler.

        - remove CSSMutableStyleDeclaration::setChanged()'s change type
          parameter

        * css/CSSMutableStyleDeclaration.cpp:
        (WebCore::CSSMutableStyleDeclaration::setChanged): Removed the change
        type parameter and made this function determine the correct change type
        based on whether this is an inline style declaration.
        (WebCore::CSSMutableStyleDeclaration::setProperty):
        * css/CSSMutableStyleDeclaration.h:
        (WebCore::CSSMutableStyleDeclaration::clear): Removed this unused
        method.
        (WebCore::CSSMutableStyleDeclaration::setChanged): Made private.

2008-03-03  Darin Adler  <darin@apple.com>

        Reviewed by Adam.

        - some "cleanup" on the path to removing WebCoreFrameBridge

        * WebCore.base.exp: Exported some stuff we either already use or
        I am about to use in an upcoming patch.

        * WebCore.xcodeproj/project.pbxproj: Made FileChooser.h private rather
        than project, for future use in WebKit.

        * bindings/objc/WebScriptObject.mm: Removed some dead code.

        * dom/ContainerNode.cpp: Added a now-needed or soon-to-be-needed include.
        * editing/Editor.cpp: Ditto.

        * editing/Editor.h: Removed many unneeded declarations and includes.
        Removed the unused userVisibleString function.

        * editing/EditorCommand.cpp:
        (WebCore::executeYank): Added parameter for triggeringEvent, which no
        longer has a default value.
        (WebCore::executeYankAndSelect): Ditto.

        * editing/mac/EditorMac.mm: Removed userVisibleString.

        * page/mac/EventHandlerMac.mm:
        (WebCore::isKeyboardOptionTab): Tweaked formattin.

        * page/mac/WebCoreFrameBridge.mm:
        (-[WebCoreFrameBridge dragSourceMovedTo:]): Get window from -[NSView window]
        rather than from the bridge. There's no special value in the bridge's window
        method and we can use NSView directly.
        (-[WebCoreFrameBridge dragSourceEndedAt:operation:]): Ditto.

        * platform/graphics/mac/ImageMac.mm:
        (WebCore::Image::loadPlatformResource): Use a new WebCoreBundleFinder class to
        find the bundle rather than using WebCoreFrameBridge.

        * platform/mac/ClipboardMac.mm: Added a now-needed or soon-to-be-needed include.
        * platform/mac/PasteboardMac.mm: Ditto.

        * rendering/RenderObject.h:
        (WebCore::DashboardRegionValue::operator==): Fixed mistake where this wasn't
        comparing the clip rectangle.
        (WebCore::DashboardRegionValue::operator!=): Added. Needed by my future work.

2008-03-03  Oliver Hunt  <oliver@apple.com>

        Reviewed by Mark Rowe.

        Bug 17620: getImageData lies
        http://bugs.webkit.org/show_bug.cgi?id=17620

        Correct logic to actually iterate over the source row

        * platform/graphics/cg/ImageBufferCG.cpp:
        (WebCore::ImageBuffer::getImageData):

2008-03-03  Oliver Hunt  <oliver@apple.com>

        Reviewed by Mark Rowe.

        Correct incorrect assertion

        * platform/graphics/cg/ImageBufferCG.cpp:
        (WebCore::ImageBuffer::putImageData):

2008-03-02  Alp Toker  <alp@atoker.com>

        Another fix for non-database builds after changes in r30331.

        Conditionalize a stopDatabases() call.

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::stopLoading):

2008-03-02  Kevin Ollivier  <kevino@theolliviers.com>

        Reviewed by Alp Toker.

        Scrolling fixes. Implement page scrolling, initialize mouse wheel
        event variables, and remove duplicate event binding for TOP
        scrolling event.

        http://bugs.webkit.org/show_bug.cgi?id=17643

        * platform/wx/MouseWheelEventWx.cpp:
        (WebCore::PlatformWheelEvent::PlatformWheelEvent):
        * platform/wx/ScrollViewWx.cpp:
        (WebCore::ScrollView::ScrollViewPrivate::bindEvents):
        (WebCore::ScrollView::ScrollViewPrivate::OnScrollWinEvents):

2008-03-02  Alp Toker  <alp@atoker.com>

        Fix building without database support after changes in r30331.

        * dom/Document.cpp:

2008-03-02  Kevin Ollivier  <kevino@theolliviers.com>

        wx build fix for Windows after PageWin.cpp move.

        * webcore-wx.bkl:

2008-03-02  Kevin Ollivier  <kevino@theolliviers.com>

        Reviewed by Dave Hyatt.

        Gracefully handle a CSS rule containing an invalid value.
        (Fixes http://bugs.webkit.org/show_bug.cgi?id=16898)

        * css/CSSGrammar.y:

2008-03-02  Alp Toker  <alp@atoker.com>

        Reviewed by Mark Rowe.

        Improve the Cairo Path::isEmpty() function

        Use cairo_has_current_point() where available.

        * platform/graphics/cairo/PathCairo.cpp:
        (WebCore::Path::isEmpty):

2008-03-01  Mark Rowe  <mrowe@apple.com>

        Reviewed by Tim Hatcher.

        Update Xcode configuration to support building debug and release from the mysterious future.

        * Configurations/DebugRelease.xcconfig:

2008-03-01  Oliver Hunt  <oliver@apple.com>

        Reviewed by Sam Weinig.

        Bug 16954: Support putImageData
        
        Implement support for HTML5's putImageData for the CG port.  All other ports
        are currently just using stubs for the final blit.

        Test: fast/canvas/canvas-putImageData.html

        * bindings/js/JSCanvasRenderingContext2DCustom.cpp:
        (WebCore::JSCanvasRenderingContext2D::putImageData):
        * html/CanvasRenderingContext2D.cpp:
        (WebCore::CanvasRenderingContext2D::putImageData):
        * html/CanvasRenderingContext2D.h:
        * platform/graphics/ImageBuffer.h:
        * platform/graphics/cairo/ImageBufferCairo.cpp:
        * platform/graphics/cg/ImageBufferCG.cpp:
        (WebCore::ImageBuffer::putImageData):
        * platform/graphics/qt/ImageBufferQt.cpp:
        * platform/graphics/wx/ImageBufferWx.cpp:

2008-03-01  Jon Honeycutt  <jhoneycutt@apple.com>

        Reviewed by Darin.

        <rdar://problem/5772987> Crashing viewing page with two VLC plug-in
        instances

        The VLC Netscape plug-in crashes if more than one instance is created.

        Added a quirk that disallows a plug-in from having more than one
        instance and set this for the VLC plug-in.

        In addition, we now sort plug-ins that handle the same MIME
        type to choose the most appropriate one. This sorting first sorts by
        whether a plug-in has an issue that should put it at the end of the
        list, then whether it appears in a "preferred" plug-in directory.

        * plugins/PluginQuirkSet.h: Added PluginQuirkDontAllowMultipleInstances.
        * plugins/PluginDatabase.cpp:
        (WebCore::PluginDatabase::preferredPluginCompare): Comparator for
        sorting plug-ins; calls PluginPackage::compare().
        (WebCore::PluginDatabase::pluginForMIMEType): Add all of the plug-ins
        that handle this MIME type to a list, sort the list, and return the
        first item.
        (WebCore::PluginDatabase::MIMETypeForExtension): Add all of the plug-ins
        that handle this extension to a list, sort the list, and return the MIME
        type used by the plug-in at the beginning of the list.
        * plugins/PluginDatabase.h:
        * plugins/PluginPackage.h:
        (WebCore::PluginPackage::version): Added; returns the module version.
        * plugins/win/PluginDatabaseWin.cpp:
        (WebCore::PluginDatabase::isPreferredPluginPath): Made static; removed
        const.
        * plugins/win/PluginPackageWin.cpp:
        (WebCore::PluginPackage::compare): Sorts plug-ins with known issues to
        the end, then plug-ins in preferred directories to the beginning, then
        alphabetically by file name, numerically by version, and alphabetically
        by parent directory.
        (WebCore::PluginPackage::determineQuirks): Set the "don't allow multiple
        instances" quirk for VLC.
        (WebCore::PluginPackage::load): Return false if the plug-in library has
        already been loaded and the "don't allow multiple instances" quirk is
        set.
        * platform/gtk/TemporaryLinkStubs.cpp:
        (PluginPackage::compare): Added stub.
        (PluginDatabase::IsPreferredPluginPath): Update the GTK stub.
        * platform/qt/TemporaryLinkStubs.cpp:
        (PluginPackage::compare): Added stub.
        (PluginDatabase::IsPreferredPluginPath): Update the Qt stub.
        * platform/wx/TemporaryLinkStubs.cpp:
        (PluginPackage::compare): Added stub.
        (PluginDatabase::IsPreferredPluginPath): Update the wx stub.

2008-03-01  Sam Weinig  <sam@webkit.org>

        Rubber-stamped by Mark Rowe.

        Remove reference to the now non-existent bridge directory.

        * WebCore.xcodeproj/project.pbxproj:

2008-03-01  Sam Weinig  <sam@webkit.org>

        Reviewed by Darin Adler.

        Search the entire prototype chain when doing early prototype lookup in
        the Window's getOwnPropertySlot method.

        Makes fast/dom/Window/window-function-name-getter-precedence.html pass all tests.

        * bindings/js/kjs_window.cpp:
        (KJS::Window::getOwnPropertySlot):

2008-03-01  Nikolas Zimmermann  <zimmermann@kde.org>

        Reviewed by Oliver.

        Fixes: http://bugs.webkit.org/show_bug.cgi?id=17568 (SVGForeignObjectElement can't react to width/height SVG DOM changes)

        As the bug title says, fix all dynamic update problems that occour with SVGForeignObjectElement.

        Tests: svg/dynamic-updates/SVGForeignObjectElement-dom-height-attr.html
               svg/dynamic-updates/SVGForeignObjectElement-dom-width-attr.html
               svg/dynamic-updates/SVGForeignObjectElement-dom-x-attr.html
               svg/dynamic-updates/SVGForeignObjectElement-dom-y-attr.html
               svg/dynamic-updates/SVGForeignObjectElement-svgdom-height-prop.html
               svg/dynamic-updates/SVGForeignObjectElement-svgdom-width-prop.html
               svg/dynamic-updates/SVGForeignObjectElement-svgdom-x-prop.html
               svg/dynamic-updates/SVGForeignObjectElement-svgdom-y-prop.html

        * svg/SVGForeignObjectElement.cpp:
        (WebCore::SVGForeignObjectElement::parseMappedAttribute):
        (WebCore::addCSSPropertyAndNotifyAttributeMap):
        (WebCore::SVGForeignObjectElement::svgAttributeChanged):
        * svg/SVGForeignObjectElement.h:

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  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-29  Brent Fulgham  <bfulgham@gmail.com>

        http://bugs.webkit.org/show_bug.cgi?id=17483
        Implement scrollbars on Windows (Cairo)

        Reviewed by Adam Roben.

        * platform/win/PlatfromScrollBarWin.cpp: Duplicate implementation
          from PlatformScrollBarWinSafari.cpp, then modify to use the
          native Windows theme engine.  Use SOFT_LINK.  Use platform
          'GetSystemMetrics' call to decide size of scrollbars and buttons.

2008-02-29  Adam Roben  <aroben@apple.com>

        Windows build fix

        * WebCore.vcproj/WebCore.vcproj: Remove bridge/* from the include path
        and the post-build event, and add page/win to each. Also let VS have
        its way with the order of the files.
        * page/win/PageWin.cpp: Copied from bridge/win/PageWin.cpp in r30673
        * page/win/GlobalHistoryWin.cpp: Copied from
        bridge/win/GlobalHistoryWin.cpp in r30673

2008-02-29  Anders Carlsson  <andersca@apple.com>

        Build fix.

        * WebCore.xcodeproj/project.pbxproj:

2008-02-29  Mark Rowe  <mrowe@apple.com>

        Reviewed by Tim Hatcher.

        64-bit build fix.

        * platform/graphics/mac/SimpleFontDataMac.mm:
        (WebCore::pathFromFont): Provide stub implementation of pathFromFont for 64-bit as
        FMGetATSFontRefFromFont is not available.

2008-02-29  Mark Rowe  <mrowe@apple.com>

        Build fix.  Only declare pathFromFont in debug builds as it is unused in release builds.

        * platform/graphics/mac/SimpleFontDataMac.mm:

2008-02-29  Anders Carlsson  <andersca@apple.com>

        Reviewed by Adam.
        
        Copy the remaining files in bridge/ over to page/

        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * bridge: Removed.
        * bridge/AXObjectCache.h: Removed.
        * bridge/EditorClient.h: Removed.
        * bridge/GlobalHistory.h: Removed.
        * bridge/win: Removed.
        * bridge/win/FrameCGWin.cpp: Removed.
        * bridge/win/FrameCairoWin.cpp: Removed.
        * bridge/win/FrameWin.cpp: Removed.
        * bridge/win/FrameWin.h: Removed.
        * bridge/win/GlobalHistoryWin.cpp: Removed.
        * bridge/win/PageWin.cpp: Removed.
        * page/AXObjectCache.h: Copied from bridge/AXObjectCache.h.
        * page/EditorClient.h: Copied from bridge/EditorClient.h.
        * page/GlobalHistory.h: Copied from bridge/GlobalHistory.h.
        * page/win/FrameCGWin.cpp: Copied from bridge/win/FrameCGWin.cpp.
        * page/win/FrameCairoWin.cpp: Copied from bridge/win/FrameCairoWin.cpp.
        * page/win/FrameWin.cpp: Copied from bridge/win/FrameWin.cpp.
        * page/win/FrameWin.h: Copied from bridge/win/FrameWin.h.

2008-02-29  Robert Blaut  <webkit@blaut.biz>

        Reviewed by Darin Adler.

        - fix http://bugs.webkit.org/show_bug.cgi?id=17532
          Webkit imports styles from <link> element which doesn't have rel=stylesheet defined

        Test: fast/html/link-rel-stylesheet.html

        * html/HTMLLinkElement.cpp:
        (WebCore::HTMLLinkElement::process):

2008-02-29  Mark Rowe  <mrowe@apple.com>

        Reviewed by Anders Carlsson.

        Replace use of WKPathFromFont with implementation in terms of public API.

        * WebCore.base.exp: Remove unused symbol.
        * platform/graphics/mac/SimpleFontDataMac.mm:
        (WebCore::initFontData):
        (WebCore::pathFromFont): Implement pathFromFont in terms of public API.
        (WebCore::SimpleFontData::platformInit):
        * platform/mac/WebCoreSystemInterface.h: Remove unused symbol.
        * platform/mac/WebCoreSystemInterface.mm: Ditto.

2008-02-29  Anders Carlsson  <andersca@apple.com>

        Reviewed by Adam.

        Move a bunch of files from bridge/mac to page/mac.
        
        * WebCore.xcodeproj/project.pbxproj:
        * bridge/mac: Removed.
        * bridge/mac/AXObjectCacheMac.mm: Removed.
        * bridge/mac/GlobalHistoryMac.mm: Removed.
        * bridge/mac/WebCoreAXObject.h: Removed.
        * bridge/mac/WebCoreAXObject.mm: Removed.
        * bridge/mac/WebCoreScriptDebugger.h: Removed.
        * bridge/mac/WebCoreScriptDebugger.mm: Removed.
        * page/mac/AXObjectCacheMac.mm: Copied from bridge/mac/AXObjectCacheMac.mm.
        * page/mac/GlobalHistoryMac.mm: Copied from bridge/mac/GlobalHistoryMac.mm.
        * page/mac/WebCoreAXObject.h: Copied from bridge/mac/WebCoreAXObject.h.
        * page/mac/WebCoreAXObject.mm: Copied from bridge/mac/WebCoreAXObject.mm.
        * page/mac/WebCoreScriptDebugger.h: Copied from bridge/mac/WebCoreScriptDebugger.h.
        * page/mac/WebCoreScriptDebugger.mm: Copied from bridge/mac/WebCoreScriptDebugger.mm.

2008-02-29  David Hyatt  <hyatt@apple.com>

        Fix for http://bugs.webkit.org/show_bug.cgi?id=17559, media query tests crashing under
        guard malloc.  Pass along the style selector so it can be accessed, since it has not yet
        been assigned into the document's member variable.

        Reviewed by aroben

        * css/CSSStyleSelector.cpp:
        (WebCore::CSSRuleSet::addRulesFromSheet):
        * css/MediaQueryEvaluator.cpp:
        (WebCore::MediaQueryEvaluator::eval):
        * css/MediaQueryEvaluator.h:

2008-02-29  David Hyatt  <hyatt@apple.com>

        <rdar://problem/5755916> REGRESSION: Loading HTML5 spec is 5x slower on TOT than in 3.0.4

        Improve the performance of dynamic sibling and CSS3 selectors so that there is no slowdown any more.
        Be more precise in terms of what nodes we mark dirty.

        Reviewed by Beth

        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::checkSelector):
        * dom/Element.cpp:
        (WebCore::Element::recalcStyle):
        (WebCore::checkForSiblingStyleChanges):
        (WebCore::Element::childrenChanged):
        (WebCore::Element::finishParsingChildren):
        * rendering/RenderStyle.cpp:
        (WebCore::RenderStyle::RenderStyle):
        * rendering/RenderStyle.h:
        (WebCore::RenderStyle::childrenAffectedByPositionalRules):
        (WebCore::RenderStyle::childrenAffectedByDirectAdjacentRules):
        (WebCore::RenderStyle::setChildrenAffectedByDirectAdjacentRules):

2008-02-29  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Darin.

        <rdar://problem/5766352> REGRESSION (r27151): XMLHttpRequest.abort() resets response status

        Test: http/tests/xmlhttprequest/status-after-abort.html

        * xml/XMLHttpRequest.cpp:
        (WebCore::XMLHttpRequest::getStatus):
        (WebCore::XMLHttpRequest::getStatusText):
        Changed to match Firefox more closely (IE just raises an exception in most of those cases).

2008-02-29  Dan Bernstein  <mitz@apple.com>

        Reviewed by Darin Adler.

        - fix a bug where explicit embedding past the end of a line could
          affect text that line

        Test: fast/text/embed-at-end-of-pre-wrap-line.html

        * rendering/bidi.cpp:
        (WebCore::RenderBlock::skipWhitespace): Removed calls to
        setAdjustEmbedding().
        (WebCore::RenderBlock::findNextLineBreak): Added calls to
        setAdjustEmbedding() around skipWhitespace() only where needed.

2008-02-29  Mark Rowe  <mrowe@apple.com>

        Reviewed by Oliver Hunt.

        Don't use WKSupportsMultipartXMixedReplace on Leopard as multipart/x-mixed-replace is always handled by NSURLRequest.

        * platform/mac/WebCoreSystemInterface.h: Don't declare WKSupportsMultipartXMixedReplace on Leopard.
        * platform/mac/WebCoreSystemInterface.mm: Ditto.
        * platform/network/mac/ResourceRequestMac.mm:
        (WebCore::ResourceRequest::doUpdatePlatformRequest): Don't call WKSupportsMultipartXMixedReplace on Leopard.
        * WebCore.Tiger.exp: Move Tiger-only symbol here.
        * WebCore.base.exp:

2008-02-29  Mark Rowe  <mrowe@apple.com>

        Rubber-stamped by Eric Seidel.

        Remove unneeded includes of WebCoreSystemInterface.h.

        * loader/mac/LoaderNSURLExtras.m:
        * page/mac/FrameMac.mm:
        * page/mac/WebCoreFrameBridge.mm:
        * platform/MIMETypeRegistry.cpp:
        * platform/graphics/mac/ImageMac.mm:
        * platform/mac/PasteboardMac.mm:

2008-02-29  Mark Rowe  <mrowe@apple.com>

        Reviewed by Oliver Hunt and Oliver Hunt.

        <rdar://problem/4753845> WebKit should use CGEventSourceSecondsSinceLastEventType in place of WKSecondsSinceLastInputEvent SPI.

        * platform/mac/SystemTimeMac.cpp:  Replace use of WKSecondsSinceLastInputEvent with CGEventSourceSecondsSinceLastEventType.
        * platform/mac/WebCoreSystemInterface.h:  Remove unused symbol.
        * platform/mac/WebCoreSystemInterface.mm:  Ditto.
        * WebCore.base.exp:  Ditto.

2008-02-28  Mark Rowe  <mrowe@apple.com>

        Reviewed by Dave Hyatt.

        Make use of new CGFont APIs on Leopard rather than making a WebKitSystemInterface call.

        * DerivedSources.make:  Add Tiger-only symbols to the export file when running on Tiger.
        * WebCore.Tiger.exp:  Added.  Move Tiger-only symbol here from WebCore.base.exp.
        * WebCore.base.exp:
        * platform/graphics/mac/SimpleFontDataMac.mm:
        (WebCore::SimpleFontData::platformInit):  Use Leopard APIs when building on Leopard.
        * platform/mac/WebCoreSystemInterface.h:  Don't declare wkGetFontMetrics on Leopard as it is unused.
        * platform/mac/WebCoreSystemInterface.mm:  Ditto.

2008-02-28  Matt Lilek  <webkit@mattlilek.com>

        Reviewed by Tim Hatcher.

        Bug 16535: Stylesheets loaded with @import are not editable
        http://bugs.webkit.org/show_bug.cgi?id=16535
        <rdar://problem/5712899>

        Sheets loaded using @import were incorrectly being flagged as non-editable
        user agent sheets because their parent sheet doesn't have an ownerNode. We now
        check to make sure sheets also don't have a href before restricting their editability.

        * page/inspector/StylesSidebarPane.js:

2008-02-28  Rodney Dawes  <dobey@wayofthemonkey.com>

        Reviewed by Adam Roben.

        Copy PluginPackageWin.cpp to shared PluginPackage.cpp.
        Add PluginPackage.cpp to build configurations.
        Remove PluginPackage destructor from TemporaryLinkStubs.cpp.
        Use cross-platform pathGetFilename method.
        Remove platform-specific code from shared PluginPackage implementation.
        Remove shared code from PluginPackageWin.cpp.

        * GNUmakefile.am:
        * WebCore.pro:
        * WebCoreSources.bkl:
        * WebCore.vcproj/WebCore.vcproj:
        * platform/gtk/TemporaryLinkStubs.cpp:
        * platform/qt/TemporaryLinkStubs.cpp:
        * platform/wx/TemporaryLinkStubs.cpp:
        * plugins/PluginPackage.cpp:
        * plugins/win/PluginPackageWin.cpp:

2008-02-28  Justin Garcia  <justin.garcia@apple.com>

        Reviewed by Darin Adler.

        <rdar://problem/4930986> REGRESSION: Paste As Quotation pastes black text instead of blue
        
        Add a second style span at copy time to hold document default styles.  This helps us
        differentiate between those and user applied styles at paste time, where we'll want
        to let Mail's Paste As Quotation blockquote override document default styles, but
        not others.

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::CSSComputedStyleDeclaration::getPropertyCSSValue): Changed the unit type used 
        for -webkit-text-stroke-width from CSS_NUMBER to CSS_PX, to match other properties that 
        are thick | medium | thin | <length>.  Before, there was a mismatch between the unit 
        type of -webkit-text-stroke-width property values in a CSSComputedStyleDeclaration for 
        an element and that element's inlineStyleDecl(), causing identical values to always appear 
        different to diff().
        * editing/ReplaceSelectionCommand.cpp:
        (WebCore::ReplaceSelectionCommand::handlePasteAsQuotationNode): Fixed.  Don't just change
        the class to an empty string, completely remove it, it's no longer needed.
        (WebCore::handleStyleSpansBeforeInsertion): Moved the optimization from doApply here.
        (WebCore::ReplaceSelectionCommand::handleStyleSpans): 
        Added, replaces removeRedundantStyles.
        We aren't (yet) removing all redundant styles, just those on style spans, so I removed the
        unused code and renamed the function.
        There won't be more than two style spans that we need to consider, the one with the 
        source document's default styles and styles on the commonAncestor of the copied Range, 
        so don't look for more than two.
        Let elements that wrap the incoming fragment override the source document's styles.
        (WebCore::ReplaceSelectionCommand::doApply): Moved code to handleStyleSpansBeforeInsertion
        and call the renamed handleStyleSpans.
        * editing/ReplaceSelectionCommand.h:
        * editing/markup.cpp:
        (WebCore::removeDefaultStyles): Added.  Don't add document defaults to the style span
        that holds user applied styles, since they'll be added to their own style span.
        (WebCore::createMarkup):
        Add a second style span that holds just the document defaults. This lets us differentiate
        between those and user applied styles at paste time.
        Mail blockquotes are just another type of special element, moved their handling there. This
        also lets paste code make assumptions about the position of the two style spans (they are 
        *always* parent-child).

2008-02-28  Brent Fulgham <bfulgham@gmail.com>

        http://bugs.webkit.org/show_bug.cgi?id=17576
        Modify RenderThemeWin to use SOFT_LINK

        Reviewed by Adam Roben.

        * rendering/RenderThemeWin.h: Remove unneeded library handle
        * rendering/RenderThemeWin.cpp: Change to use SOFT_LINK
          rather than hand-coded load library calls.

2008-02-28  Dan Bernstein  <mitz@apple.com>

        Reviewed by Darin Adler.

        - fix http://bugs.webkit.org/show_bug.cgi?id=17590
          ASSERTION FAILED: subject in jsRegExpExecute()

        * page/mac/FrameMac.mm:
        (WebCore::Frame::matchLabelsAgainstElement): Added an early return in
        case the element name is empty.

2008-02-28  Justin Garcia  <justin.garcia@apple.com>

        Reviewed by Dan Bernstein
        
        Small editing speed up.
        
        * dom/Position.cpp:
        (WebCore::Position::upstream): Don't check for a change in editability
        if the current node hasn't changed.
        (WebCore::Position::downstream): Ditto.

2008-02-27  Dan Bernstein  <mitz@apple.com>

        Reviewed by John Sullivan.

        - fix <rdar://problem/5607547> Single letter surrounded by soft hyphens can disappear

        Test: fast/text/soft-hyphen-2.html

        * rendering/bidi.cpp:
        (WebCore::chopMidpointsAt): Changed to iterate midpoints backwards, so
        that if there are two midpoints at the given position, only the last one
        will be chopped off.

2008-02-27  Dan Bernstein  <mitz@apple.com>

        Reviewed by Darin Adler.

        - make centered text in right-to-left blocks spill over to the left

        Test: fast/text/align-center-rtl-spill.html

        * rendering/bidi.cpp:
        (WebCore::RenderBlock::computeHorizontalPositionsForLine):

2008-02-27  Dan Bernstein  <mitz@apple.com>

        Reviewed by Darin Adler.

        - more bidi.cpp cleanup

        * platform/text/BidiResolver.h:
        (WebCore::BidiCharacterRun::destroy): Added. Overridden by BidiRun .
        (WebCore::BidiResolver<Iterator, Run>::addRun): Moved BidiState::addRun()
        here.
        (WebCore::BidiResolver<Iterator, Run>::appendRun): Changed to use
        addRun().
        (WebCore::BidiResolver<Iterator, Run>::deleteRuns): Changed to use
        destroy(), avoiding the need to specialize this method in BidiState.
        * rendering/bidi.cpp:
        (WebCore::BidiRun::destroy): Removed the RenderArena parameter.
        (WebCore::BidiState::deleteRuns): Removed now-unnecessary specialization.
        (WebCore::BidiState::addRun): Removed now-unnecessary specialization.
        (WebCore::RenderBlock::createLineBoxes): 
        (WebCore::RenderBlock::constructLine):
        (WebCore::RenderBlock::computeHorizontalPositionsForLine): Added a FIXME.
        (WebCore::RenderBlock::computeVerticalPositionsForLine):
        (WebCore::buildCompactRuns):
        (WebCore::RenderBlock::layoutInlineChildren):
        (WebCore::RenderBlock::determineStartPosition):
        (WebCore::RenderBlock::determineEndPosition):
        (WebCore::RenderBlock::matchedEndLine):
        (WebCore::skipNonBreakingSpace):
        (WebCore::RenderBlock::skipWhitespace):
        (WebCore::shouldSkipWhitespaceAfterStartObject):
        * rendering/bidi.h:
        (WebCore::BidiRun): Added m_ prefixes to several member variables. 

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-27  David Hyatt  <hyatt@apple.com>

        More cleanup in preparation for fixing the HTML5 spec performance regression.

        Reviewed by Sam Weinig

        * dom/Attr.cpp:
        (WebCore::Attr::childrenChanged):
        * dom/Attr.h:
        * dom/ContainerNode.cpp:
        (WebCore::ContainerNode::insertBefore):
        (WebCore::ContainerNode::replaceChild):
        (WebCore::ContainerNode::removeChild):
        (WebCore::ContainerNode::removeChildren):
        (WebCore::ContainerNode::appendChild):
        (WebCore::ContainerNode::addChild):
        (WebCore::ContainerNode::childrenChanged):
        * dom/ContainerNode.h:
        * dom/Document.cpp:
        (WebCore::Document::childrenChanged):
        * dom/Document.h:
        * dom/Element.cpp:
        (WebCore::Element::childrenChanged):
        * dom/Element.h:
        * dom/Node.h:
        (WebCore::Node::childrenChanged):
        * html/HTMLObjectElement.cpp:
        (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/HTMLScriptElement.cpp:
        (WebCore::HTMLScriptElement::childrenChanged):
        * html/HTMLScriptElement.h:
        * html/HTMLSelectElement.cpp:
        (WebCore::HTMLSelectElement::childrenChanged):
        * html/HTMLSelectElement.h:
        * html/HTMLStyleElement.cpp:
        (WebCore::HTMLStyleElement::childrenChanged):
        * html/HTMLStyleElement.h:
        * html/HTMLTextAreaElement.cpp:
        (WebCore::HTMLTextAreaElement::childrenChanged):
        * html/HTMLTextAreaElement.h:
        * html/HTMLTitleElement.cpp:
        (WebCore::HTMLTitleElement::childrenChanged):
        * html/HTMLTitleElement.h:
        * svg/SVGClipPathElement.cpp:
        (WebCore::SVGClipPathElement::childrenChanged):
        * svg/SVGClipPathElement.h:
        * svg/SVGDefinitionSrcElement.cpp:
        (WebCore::SVGDefinitionSrcElement::childrenChanged):
        * svg/SVGDefinitionSrcElement.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::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-27  Julien Chaffraix <julien.chaffraix@gmail.com>

        Reviewed by Alexey.

        http://bugs.webkit.org/show_bug.cgi?id=17481
        Several consecutive calls to XMLHttpRequest::open should dispatch only one readyState event

        Test: http/tests/xmlhttprequest/xmlhttprequest-multiple-open.html

        * xml/XMLHttpRequest.cpp:
        (WebCore::XMLHttpRequest::open):

2008-02-27  Sriram Neelakandan  <sriram.neelakandan@gmail.com>

        Reviewed, tweaked and landed by ap.

        http://bugs.webkit.org/show_bug.cgi?id=17487
        HTMLInput mysteriously fails to work if ICU dat file is missing

        * platform/text/TextBreakIteratorICU.cpp: (WebCore::setUpIterator): Assert that the iterator
        has been opened.

2008-02-27  Adam Roben  <aroben@apple.com>

        Windows build fix after r30616

        * platform/win/ClipboardWin.cpp:

2008-02-27  Nikolas Zimmermann  <zimmermann@kde.org>

        Reviewed by Simon.

        Small style cleanup, and obvious fix: SVGGElement reacted on
        'clipPathUnits' changes, which is a funny copy&paste error.

        * svg/SVGGElement.cpp:
        (WebCore::SVGGElement::parseMappedAttribute):
        (WebCore::SVGGElement::svgAttributeChanged):
        (WebCore::SVGGElement::createRenderer):

2008-02-27  Nikolas Zimmermann  <zimmermann@kde.org>

        Reviewed by Simon.

        Cleanup coding style. Still on my way to fix dynamic updates of all SVG elements.
        Currently at SVGF*. SVGDefs/DescElement don't need any dyn update fixes but cleanups.

        * svg/SVGDefsElement.cpp:
        (WebCore::SVGDefsElement::createRenderer):
        * svg/SVGDefsElement.h:
        * svg/SVGDescElement.h:

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-26  Sam Weinig  <sam@webkit.org>

        Reviewed by Dave Hyatt.

        - remove DeprecatedCString, DeprecatedArray, and ArrayImpl.

        * GNUmakefile.am:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * WebCoreSources.bkl:
        * platform/ArrayImpl.cpp: Removed.
        * platform/ArrayImpl.h: Removed.
        * platform/DeprecatedArray.h: Removed.
        * platform/DeprecatedCString.cpp: Removed.
        * platform/DeprecatedCString.h: Removed.
        * platform/text/CString.cpp:
        (WebCore::CString::length):
        * platform/text/CString.h:

2008-02-26  David Hyatt  <hyatt@apple.com>

        Cleanup of childrenChanged in preparation for fixing the HTML5 spec slowdown.

        Reviewed by Sam Weinig

        * dom/Attr.cpp:
        (WebCore::Attr::childrenChanged):
        * dom/ContainerNode.cpp:
        (WebCore::ContainerNode::insertBefore):
        (WebCore::ContainerNode::replaceChild):
        (WebCore::ContainerNode::removeChild):
        (WebCore::ContainerNode::removeChildren):
        (WebCore::ContainerNode::appendChild):
        (WebCore::ContainerNode::addChild):
        (WebCore::ContainerNode::childrenChanged):
        * dom/ContainerNode.h:
        * dom/EventTargetNode.cpp:
        (WebCore::EventTargetNode::dispatchSubtreeModifiedEvent):
        * dom/EventTargetNode.h:
        * dom/NamedAttrMap.cpp:
        (WebCore::NamedAttrMap::addAttribute):
        (WebCore::NamedAttrMap::removeAttribute):

2008-02-26  Darin Adler  <darin@apple.com>

        Reviewed by Sam.

        - remove use of DeprecatedCString from Windows pasteboard code

        * platform/win/ClipboardUtilitiesWin.cpp:
        (WebCore::createGlobalData): Added an overload for Vector<char>.
        Streamlined the logic a bit.
        (WebCore::append): Added. Helper functions for appending to a
        Vector<char>.
        (WebCore::markupToCF_HTML): Rewrote to use Vector<char> instead
        of DeprecatedCString. Also simplified the logic a bit and used
        macros to handle the integer width.
        (WebCore::urlToMarkup): Use Vector<UChar> instead of String.
        (WebCore::replaceNewlinesWithWindowsStyleNewlines): Tweaked.
        * platform/win/ClipboardUtilitiesWin.h: Update type of return
        value from markupToCF_HTML. Did a bit of streamlining too.
        * platform/win/ClipboardWin.cpp:
        (WebCore::writeURL): Update for above changes.
        (WebCore::ClipboardWin::declareAndWriteDragImage): Ditto.
        (WebCore::ClipboardWin::writeRange): Ditto.
        * platform/win/PasteboardWin.cpp:
        (WebCore::Pasteboard::writeSelection): Ditto.
        (WebCore::Pasteboard::writeURL): Ditto.

2008-02-26  Timothy Hatcher  <timothy@apple.com>

        Reviewed by Adam Roben.

        <rdar://problem/5712777> REGRESSION: Arrow up/down in inspector
        source list does not scroll when item at edge is reached (16572)

        Use scrollIntoViewIfNeeded() instead of the hand-rolled scrollToElement
        we were using in utilities.js.

        * page/inspector/DocumentPanel.js: Use scrollIntoViewIfNeeded instead of scrollToElement.
        * page/inspector/Resource.js: Ditto.
        * page/inspector/inspector.js: Ditto.
        * page/inspector/SourcePanel.js: Use scrollIntoViewIfNeeded instead
        of scrollIntoView, so the source line is centered in the view if needed.
        * page/inspector/utilities.js: Removed scrollToElement().

2008-02-26  David Hyatt  <hyatt@apple.com>

        Reviewed by Dan

        http://bugs.webkit.org/show_bug.cgi?id=17485

        Refine our behavior for empty inlines so that they work more correctly with margins/borders/padding.
        Fixes a regression on huffingtonpost.com.

        New tests added to fast/inline

        * rendering/InlineFlowBox.cpp:
        (WebCore::InlineFlowBox::computeLogicalBoxHeights):
        (WebCore::InlineFlowBox::placeBoxesVertically):
        (WebCore::InlineFlowBox::shrinkBoxesWithNoTextChildren):
        * rendering/RenderFlow.cpp:
        (WebCore::RenderFlow::calcMargins):
        * rendering/RenderFlow.h:
        * rendering/RenderObject.h:
        (WebCore::RenderObject::hasHorizontalBordersPaddingOrMargin):
        (WebCore::RenderObject::hasHorizontalBordersOrPadding):
        * rendering/bidi.cpp:
        (WebCore::getBorderPaddingMargin):
        (WebCore::RenderBlock::layoutInlineChildren):
        (WebCore::inlineFlowRequiresLineBox):

2008-02-26  Sam Weinig  <sam@webkit.org>

        Fix Windows build.

        * platform/text/PlatformString.h:
        (WebCore::reverseFind):

2008-02-26  Dan Bernstein  <mitz@apple.com>

        Reviewed by Darin Adler.

        - fix http://bugs.webkit.org/show_bug.cgi?id=17555
          <rdar://problem/5766016> REGRESSION (r27351): Thumbnails positioned wrong on Getty Images results page

        Test: fast/dynamic/subtree-table-cell-height.html

        * rendering/RenderObject.cpp:
        (WebCore::objectIsRelayoutBoundary): Exclude table cells, since their
        height depends on their contents even if the CSS height property is
        fixed.

2008-02-25  Sam Weinig  <sam@webkit.org>

        Reviewed by Dan Bernstein.

        Make the cleanPath function in CSSStyleSelector more efficient by using
        a Vector<UChar>.

        * css/CSSStyleSelector.cpp:
        (WebCore::cleanPath): Make this function work on a Vector<UChar> instead
        of a String.  Also remove unnecessary reverseFind call that could be acomplished
        with two compares.
        (WebCore::checkPseudoState): Remove reserveCapacity calls now that we are using
        a stack buffer.
        * platform/text/PlatformString.h:
        (WebCore::find): Make this find generic enough that it can be used for
        String::find.
        (WebCore::reverseFind): Implement reverseFind so that it can be used
        for with a UChar* and length.
        * platform/text/StringImpl.cpp:
        (WebCore::StringImpl::find): Use implementation in PlatformString.cpp
        (WebCore::StringImpl::reverseFind): Ditto,

2008-02-26  Satoshi Nakagawa  <artension@gmail.com>

        Reviewed by Darin. Tweaked and landed by Alexey.

        http://bugs.webkit.org/show_bug.cgi?id=17411
        Ideographic comma and full stop should be treated as line-breakable characters

        Test: fast/text/line-breaks-after-ideographic-comma-or-full-stop.html

        * platform/text/CharacterNames.h: Added ideographicComma and ideographicFullStop.
        * rendering/break_lines.cpp: (WebCore::shouldBreakAfter): Added a workaround for an issue in
        Unicode 5.0 that is causing this.

2008-02-26  Darin Fisher  <darin@chromium.org>

        Reviewed by eseidel.  Landed by eseidel

        Fix improperly initialized m_isUpToDate member variable.
        Fixs 50+ layout tests when run on Tiger.
        http://bugs.webkit.org/show_bug.cgi?id=17549

        * platform/network/cf/ResourceResponse.h:
        (WebCore::ResourceResponse::ResourceResponse):
        * platform/network/mac/ResourceResponse.h:
        (WebCore::ResourceResponse::ResourceResponse):

2008-02-25  Dan Bernstein  <mitz@apple.com>

        Reviewed by Sam Weinig.

        - fix http://bugs.webkit.org/show_bug.cgi?id=17152
          Paragraphs indented with :first-letter and text-align CSS render incorrectly

        Test: fast/text/apply-start-width-after-skipped-text.html

        * rendering/bidi.cpp:
        (WebCore::RenderBlock::findNextLineBreak): Improved the logic for when
        to figure in the padding, border and margin before a text node when the
        line begins inside a text node.

2008-02-25  Kevin Ollivier  <kevino@theolliviers.com>

        Windows build fix for wx port.

        * loader/FTPDirectoryDocument.cpp:

2008-02-25  Mark Rowe  <mrowe@apple.com>

        Windows build fix.

        * platform/network/cf/ResourceResponseCFNet.cpp:
        (WebCore::ResourceResponse::platformCompare):  Implement platformCompare for ResourceResponseCFNet.cpp.

2008-02-25  Beth Dakin  <bdakin@apple.com>

        Reviewed by Geoff.

        Fixed for <rdar://problem/5760530> REGRESSION: Assertion failure in 
        Document::removePendingSheet() from r30438

        r30438 added a call to CachedResource::error() from inside 
        Loader::didReceiveData() if a CSS file 4xxs. There was an 
        assumption in the loader, though, that either error() would be 
        called, or didFinishLoading() would be called, so some work is 
        duplicated in each. Now that we are calling an error() on files 
        that will also make it to didFinishLoading() (since they succeeded 
        in the network layer), we need to make sure we do not duplicate the 
        work. CachedCSSStyleSheet::error() calls checkNotify, which ends up 
        decrementing the document's pending style sheet counter. 
        checkNotify() was still getting called, though, through the normal  
        didFinishLoading code path, and the counter was being decremented 
        twice. Bad!

        * loader/loader.cpp:
        (WebCore::Loader::didFinishLoading):
        (WebCore::Loader::didReceiveData):

2008-02-25  Mark Rowe  <mrowe@apple.com>

        Fix the Gtk, wx and Qt builds.

        * GNUmakefile.am: Add new files.
        * WebCore.pro: Ditto.
        * WebCoreSources.bkl: Ditto.
        * platform/network/AuthenticationChallengeBase.h: Fix up argument types.

2008-02-25  Darin Fisher  <darin@chromium.org>

        Reviewed by Darin Adler.

        Eliminate some #ifdefs from headers in platform/network.
        http://bugs.webkit.org/show_bug.cgi?id=17210

        * WebCore.base.exp:
        * WebCore.order:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * dom/XMLTokenizer.cpp:
        * loader/ResourceLoader.h:
        * platform/network/AuthenticationChallenge.cpp: Removed.
        * platform/network/AuthenticationChallenge.h: Removed.
        * platform/network/AuthenticationChallengeBase.cpp: Copied from platform/network/AuthenticationChallenge.cpp.
        (WebCore::AuthenticationChallengeBase::AuthenticationChallengeBase):
        (WebCore::AuthenticationChallengeBase::previousFailureCount):
        (WebCore::AuthenticationChallengeBase::proposedCredential):
        (WebCore::AuthenticationChallengeBase::protectionSpace):
        (WebCore::AuthenticationChallengeBase::failureResponse):
        (WebCore::AuthenticationChallengeBase::error):
        (WebCore::AuthenticationChallengeBase::isNull):
        (WebCore::AuthenticationChallengeBase::nullify):
        (WebCore::AuthenticationChallengeBase::compare):
        * platform/network/AuthenticationChallengeBase.h: Copied from platform/network/AuthenticationChallenge.h.
        (WebCore::AuthenticationChallengeBase::platformCompare):
        (WebCore::operator==):
        (WebCore::operator!=):
        * platform/network/ResourceError.cpp: Removed.
        * platform/network/ResourceError.h: Removed.
        * platform/network/ResourceErrorBase.cpp: Copied from platform/network/ResourceError.cpp.
        (WebCore::ResourceErrorBase::lazyInit):
        (WebCore::ResourceErrorBase::compare):
        * platform/network/ResourceErrorBase.h: Copied from platform/network/ResourceError.h.
        (WebCore::ResourceErrorBase::isNull):
        (WebCore::ResourceErrorBase::domain):
        (WebCore::ResourceErrorBase::errorCode):
        (WebCore::ResourceErrorBase::failingURL):
        (WebCore::ResourceErrorBase::localizedDescription):
        (WebCore::ResourceErrorBase::ResourceErrorBase):
        (WebCore::ResourceErrorBase::platformLazyInit):
        (WebCore::ResourceErrorBase::platformCompare):
        (WebCore::operator==):
        * platform/network/ResourceResponseBase.cpp:
        (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::lazyInit):
        (WebCore::ResourceResponseBase::compare):
        * platform/network/ResourceResponseBase.h:
        (WebCore::ResourceResponseBase::ResourceResponseBase):
        (WebCore::ResourceResponseBase::platformLazyInit):
        (WebCore::ResourceResponseBase::platformCompare):
        (WebCore::operator==):
        * platform/network/cf/AuthenticationCF.cpp:
        (WebCore::AuthenticationChallenge::AuthenticationChallenge):
        (WebCore::AuthenticationChallenge::platformCompare):
        * platform/network/cf/AuthenticationChallenge.h: Added.
        (WebCore::AuthenticationChallenge::AuthenticationChallenge):
        (WebCore::AuthenticationChallenge::sourceHandle):
        (WebCore::AuthenticationChallenge::cfURLAuthChallengeRef):
        * platform/network/cf/ResourceError.h: Added.
        (WebCore::ResourceError::ResourceError):
        * platform/network/cf/ResourceErrorCF.cpp:
        (WebCore::ResourceError::ResourceError):
        (WebCore::ResourceError::platformLazyInit):
        (WebCore::ResourceError::platformCompare):
        (WebCore::ResourceError::operator CFStreamError):
        * platform/network/cf/ResourceResponse.h:
        (WebCore::ResourceResponse::ResourceResponse):
        * platform/network/cf/ResourceResponseCFNet.cpp:
        (WebCore::ResourceResponse::platformLazyInit):
        * platform/network/curl/AuthenticationChallenge.h: Added.
        (WebCore::AuthenticationChallenge::AuthenticationChallenge):
        * platform/network/curl/ResourceError.h: Added.
        (WebCore::ResourceError::ResourceError):
        * platform/network/curl/ResourceResponse.h:
        (WebCore::ResourceResponse::ResourceResponse):
        * platform/network/mac/AuthenticationChallenge.h: Added.
        (WebCore::AuthenticationChallenge::AuthenticationChallenge):
        (WebCore::AuthenticationChallenge::sender):
        (WebCore::AuthenticationChallenge::nsURLAuthenticationChallenge):
        * platform/network/mac/AuthenticationMac.mm:
        (WebCore::AuthenticationChallenge::AuthenticationChallenge):
        (WebCore::AuthenticationChallenge::platformCompare):
        * platform/network/mac/ResourceError.h: Added.
        (WebCore::ResourceError::ResourceError):
        * platform/network/mac/ResourceErrorMac.mm:
        (WebCore::ResourceError::platformLazyInit):
        (WebCore::ResourceError::platformCompare):
        * platform/network/mac/ResourceResponse.h:
        (WebCore::ResourceResponse::ResourceResponse):
        * platform/network/mac/ResourceResponseMac.mm:
        (WebCore::ResourceResponse::platformLazyInit):
        (WebCore::ResourceResponse::platformCompare):
        * platform/network/qt/AuthenticationChallenge.h: Added.
        (WebCore::AuthenticationChallenge::AuthenticationChallenge):
        * platform/network/qt/ResourceError.h: Added.
        (WebCore::ResourceError::ResourceError):
        * platform/network/qt/ResourceResponse.h:
        (WebCore::ResourceResponse::ResourceResponse):
        * xml/XSLTProcessor.cpp:

2008-02-25  Anders Carlsson  <andersca@apple.com>

        Reviewed by Darin.

        Move remaining render style objects over to start with a refcount of 1 and get
        rid of DeprecatedDataRef.
        
        * rendering/DataRef.h:
        (WebCore::DataRef::operator*):
        (WebCore::DataRef::operator->):
        * rendering/RenderStyle.h:
        * rendering/SVGRenderStyle.cpp:
        (WebCore::SVGRenderStyle::SVGRenderStyle):
        * rendering/SVGRenderStyle.h:
        (WebCore::SVGRenderStyle::create):
        (WebCore::SVGRenderStyle::copy):
        * rendering/SVGRenderStyleDefs.cpp:
        (StyleFillData::StyleFillData):
        (StyleStrokeData::StyleStrokeData):
        (StyleStopData::StyleStopData):
        (StyleTextData::StyleTextData):
        (StyleClipData::StyleClipData):
        (StyleMaskData::StyleMaskData):
        (StyleMarkerData::StyleMarkerData):
        (StyleMiscData::StyleMiscData):
        * rendering/SVGRenderStyleDefs.h:
        (WebCore::StyleFillData::create):
        (WebCore::StyleFillData::copy):
        (WebCore::StyleStrokeData::create):
        (WebCore::StyleStrokeData::copy):
        (WebCore::StyleStopData::create):
        (WebCore::StyleStopData::copy):
        (WebCore::StyleTextData::create):
        (WebCore::StyleTextData::copy):
        (WebCore::StyleClipData::create):
        (WebCore::StyleClipData::copy):
        (WebCore::StyleMaskData::create):
        (WebCore::StyleMaskData::copy):
        (WebCore::StyleMarkerData::create):
        (WebCore::StyleMarkerData::copy):
        (WebCore::StyleMiscData::create):
        (WebCore::StyleMiscData::copy):

2008-02-25  Dan Bernstein  <mitz@apple.com>

        Reviewed by Dave Hyatt.

        - remove file-static BidiRun variables from bidi.cpp

        * platform/text/BidiResolver.h:
        (WebCore::BidiResolver::): Initialize m_logicallyLastRun.
        (WebCore::BidiResolver::logicallyLastRun): Added.
        (WebCore::BidiResolver::runCount): Made unsigned.
        (WebCore::::reverseRuns): Changed ints to unsigned.
        (WebCore::::createBidiRunsForLine): Made this function set
        m_logicallyLastRun.
        * rendering/RenderBlock.h:
        * rendering/bidi.cpp:
        (WebCore::BidiState::addRun): Removed setting of sLogicallyLastBidiRun.
        (WebCore::RenderBlock::constructLine): Removed unused start parameter
        and added run count and first and last run parameters. Replaced end
        parameter with lastLine boolean and endObject pointer.
        (WebCore::RenderBlock::computeHorizontalPositionsForLine): Added first
        and logically last run parameters.
        (WebCore::RenderBlock::computeVerticalPositionsForLine): Added firstRun
        parameter.
        (WebCore::RenderBlock::bidiReorderLine): Removed setting of static
        variables.
        (WebCore::RenderBlock::layoutInlineChildren): Changed to use BidiState
        accessors instead of file statics.

2008-02-25  Rodney Dawes  <dobey@wayofthemonkey.com>

        Reviewed by Jon Honeycutt.

        http://bugs.webkit.org/show_bug.cgi?id=16924
        Bug 16924: Shared PluginDatabase, PluginPackage, and PlugInInfoStore implementations

        Add PluginInfoStore.cpp and new PluginDatabase.cpp to GTK+ and Qt ports.
        Remove old PlugInInfoStoreQt.cpp as it is obsoleted by shared code.
        Add PluginInfoStore, PluginDatabase, and PluginStream files to Wx build.
        Add new PluginDatabase.cpp to Windows build.
        Add temporary stubs for new PluginDatabase and PluginPackage.
        shared classes to GTK+, Qt, and Wx ports.
        Copy PluginDatabaseWin.cpp to PluginDatabase.cpp to preserve history.
        Remove shared code from PluginDatabaseWin.cpp.
        Remove Windows-specific code from PluginDatabase.cpp.
        Use PlatformModule and PlatformFileTime instead of HMODULE and FILETIME.
        Remove extraneous PluginPackage:: from hash() class method prototype.
        Subsume storeFileVersion into PluginPackage::fetchInfo.
        Add cross-platform PlatformModuleVersion type definition.
        Use PlatformModuleVersion to store the module version.
        Rename m_fileVersion[ML]S to m_moduleVersion.
        Change compareFileVersion to use PlatformModuleVersion as the argument.
        Move PluginView::determineQuirks and m_quirks to PluginPackage.
        Updated determineQuirks for the PlatformModuleVersion.

        * GNUmakefile.am:
        * WebCore.pro:
        * WebCoreSources.bkl:
        * webcore-base.bkl:
        * WebCore.vcproj/WebCore.vcproj:
        * Platform/FileSystem.h:
        * platform/qt/PlugInInfoStoreQt.cpp:
        * platform/gtk/TemporaryLinkStubs.cpp:
        * platform/qt/TemporaryLinkStubs.cpp:
        * platform/wx/TemporaryLinkStubs.cpp:
        * plugins/PluginDatabase.cpp:
        * plugins/PluginDatabase.h:
        * plugins/win/PluginDatabaseWin.cpp:
        * plugins/PluginPackage.h:
        * plugins/win/PluginPackageWin.cpp:
        * plugins/PluginView.h:
        * plugins/win/PluginViewWin.cpp:

2008-02-25  Anders Carlsson  <andersca@apple.com>

        Reviewed by Darin.

        Make more style objects start out with a refcount of 1.
        
        * rendering/RenderStyle.cpp:
        (WebCore::StyleSurroundData::StyleSurroundData):
        (WebCore::StyleBoxData::StyleBoxData):
        (WebCore::StyleVisualData::StyleVisualData):
        (WebCore::StyleBackgroundData::StyleBackgroundData):
        (WebCore::StyleRareNonInheritedData::StyleRareNonInheritedData):
        (WebCore::StyleRareInheritedData::StyleRareInheritedData):
        (WebCore::StyleInheritedData::StyleInheritedData):
        * rendering/RenderStyle.h:
        (WebCore::StyleSurroundData::create):
        (WebCore::StyleSurroundData::copy):
        (WebCore::StyleBoxData::create):
        (WebCore::StyleBoxData::copy):
        (WebCore::StyleVisualData::create):
        (WebCore::StyleVisualData::copy):
        (WebCore::StyleBackgroundData::create):
        (WebCore::StyleBackgroundData::copy):
        (WebCore::StyleBackgroundData::~StyleBackgroundData):
        (WebCore::StyleRareNonInheritedData::create):
        (WebCore::StyleRareNonInheritedData::copy):
        (WebCore::StyleRareInheritedData::create):
        (WebCore::StyleRareInheritedData::copy):
        (WebCore::StyleInheritedData::create):
        (WebCore::StyleInheritedData::copy):

2008-02-25  Anders Carlsson  <andersca@apple.com>

        Reviewed by Darin.

        Make some of the refcounted style objects start out with a refcount of 1.

        * rendering/DataRef.h:
        Make a DeprecatedDataRef class which is just a copy of the old DataRef class.
        Change DataRef to use ::create() and ::copy() instead of the constructors.
        Change DataRef's pointer to be a RefPtr instead.

        * rendering/RenderStyle.cpp:
        (WebCore::StyleMarqueeData::StyleMarqueeData):
        (WebCore::StyleFlexibleBoxData::StyleFlexibleBoxData):
        (WebCore::StyleMultiColData::StyleMultiColData):
        (WebCore::StyleTransformData::StyleTransformData):
        Start with a RefCount of 1.
        
        * rendering/RenderStyle.h:
        * rendering/SVGRenderStyle.h:
        Add ::create() and ::copy() methods. Make not yet converted classes use DeprecatedDataRef.

2008-02-25  Darin Adler  <darin@apple.com>

        Reviewed by Anders.
        Based on a patch by Tim Steele <timsteele41@gmail.com>.

        - fix http://bugs.webkit.org/show_bug.cgi?id=17186
          Fragment navigation within a page permanently cancels meta refresh

        Test: fast/loader/meta-refresh-anchor-click.html

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::load): When load type is FrameLoadTypeRedirectWithLockedHistory,
        always do a real load. This makes sure that meta refresh loads are treated as real loads
        rather than anchor scrolls. Also tweaked formatting a bit.
        (WebCore::FrameLoader::continueFragmentScrollAfterNavigationPolicy): This function is
        an alternate way to complete a load, so it needs to start the redirection timer if
        redirection has already been scheduled.

2008-02-25  Dan Bernstein  <mitz@apple.com>

        Reviewed by Darin Adler.

        - avoid counting spaces in non-justified text

        * rendering/bidi.cpp:
        Removed file-static numSpaces.
        (WebCore::BidiState::addRun): Removed space counting.
        (WebCore::RenderBlock::computeHorizontalPositionsForLine): Added space
        counting, conditional on the block having the text-align: justify
        property value.
        (WebCore::RenderBlock::bidiReorderLine): Removed initialization of
        numSpaces.

2008-02-25  Darin Adler  <darin@apple.com>

        Requested by Steve.

        * platform/graphics/cg/ImageSourceCG.cpp:
        (WebCore::ImageSource::createFrameAtIndex): Put the string into a global
        variable (because CFSTR is inefficient on Windows).

2008-02-25  Darin Adler  <darin@apple.com>

        Reviewed by Adam.

        * WebCore.base.exp: Export blankURL, and sort the file.

2008-02-25  Simon Hausmann  <hausmann@webkit.org>

        Reviewed by Mark Rowe.

        Fix compilation with gcc 4.3, added stdio.h and unistd.h inclusions.

        * dom/Position.cpp:
        * dom/Range.cpp:
        * editing/Selection.cpp:
        * editing/SelectionController.cpp:
        * editing/VisiblePosition.cpp:
        * history/HistoryItem.cpp:
        * loader/Cache.cpp:
        * loader/FTPDirectoryParser.cpp:
        * platform/KURL.cpp:
        * platform/gtk/FileSystemGtk.cpp:
        * platform/image-decoders/jpeg/JPEGImageDecoder.cpp:
        * platform/text/TextCodecLatin1.cpp:
        * platform/text/TextCodecUserDefined.cpp:
        * rendering/CounterNode.cpp:
        * rendering/RenderObject.cpp:

2008-02-25  Johnny Ding  <johnnyding.webkit@gmail.com>

        Reviewed by Darin Adler.

        - fix http://bugs.webkit.org/show_bug.cgi?id=17444

        In HTMLTokenizer::write, the code checks 'pendingScripts.isEmpty()' to decide
        whether to save prependingSrc or not. However, in HTMLTokenizer::scriptHandler
        and HTMLTokenizer::scriptExecution, the code checks testBit:LoadingExtScript
        to decide whether to save prependingSrc or not. The later behavior is not right
        because, in scriptHandler and scriptExecution, even the pendingScripts queue is
        empty, the testBit:LoadingExtScript might be TRUE.

        Test: fast/tokenizer/nested-multiple-scripts.html

        * html/HTMLTokenizer.cpp:
        (WebCore::HTMLTokenizer::scriptHandler): check pendingScripts.isEmpty() instead of
        checking state.loadingExtScript().
        (WebCore::HTMLTokenizer::scriptExecution): check pendingScripts.isEmpty() instead of
        checking state.loadingExtScript().

2008-02-24  Darin Adler  <darin@apple.com>

        * dom/Document.h: Removed stray duplicate declaration of
        RegisteredEventListenerList.

2008-02-24  Darin Adler  <darin@apple.com>

        * dom/Range.cpp:
        (WebCore::Range::surroundContents): Removed incorrect comment.
        I added it a while ago, and I was just mixed up.

2008-02-24  Darin Adler  <darin@apple.com>

        - quick follow-up to that last check-in

        * platform/graphics/cg/ImageSourceCG.cpp:
        (WebCore::ImageSource::createFrameAtIndex): Use CFEqual instead of
        WebCore::String's == for speed.

2008-02-24  Michael Knaup  <michael.knaup@mac.com>

        Reviewed by Darin.

        Bug 8749: XBM rendered incorrectly as black on white

        xbm images are now created and rendered using black on a
        transparent background (same behavior as in Firefox)

        Test: platform/mac/fast/canvas/canvas-draw-xbm-image.html

        * platform/graphics/cg/ImageSourceCG.cpp:
        (WebCore::ImageSource::createFrameAtIndex):

2008-02-24  Dan Bernstein  <mitz@apple.com>

        Reviewed by Darin Adler.

        - fix http://bugs.webkit.org/show_bug.cgi?id=17471
          REGRESSION (r30438): Crash in deleteLineBoxes in cursor-adjusting code browsing Acid3

        Test: http/tests/misc/object-image-error.html

        * html/HTMLObjectElement.cpp:
        (WebCore::HTMLObjectElement::attach): Added an early return in case
        updateFromElement() has changed the object to use fallback content.

2008-02-24  Dan Bernstein  <mitz@apple.com>

        Reviewed by Darin Adler.

        - fix float positioning when a float that does not fit on the line is
          followed by a float that does

        Test: fast/block/float/narrow-after-wide.html

        * rendering/bidi.cpp:
        (WebCore::RenderBlock::findNextLineBreak): Changed to not position any
        more floats on the line once a float that does not fit is encountered.
        That float should be pushed to the next line, and so should all floats
        that follow, regardless of whether they can fit on the current line.

2008-02-24  Darin Adler  <darin@apple.com>

        Reviewed by Sam.

        - fix http://bugs.webkit.org/show_bug.cgi?id=16770
          Acid3 expects :visited styled links to restyle on iframe load

        Disentangle global history updating from the back/forward history.
        There are many cases where we don't want to create a new back/forward
        item, but we do still want to add to the global history (used for visited
        link coloring) in those cases.

        Test: fast/history/subframe-is-visited.html

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::updateGlobalHistory): Renamed from
        addHistoryForCurrentLocation and removed the back/forward handling.
        (WebCore::FrameLoader::updateHistoryForStandardLoad): Streamlined logic a
        bit. Replaced call to addHistoryForCurrentLocation with a call to
        addBackForwardItemClippedAtTarget. Added an unconditional call to
        updateGlobalHistory.
        (WebCore::FrameLoader::updateHistoryForClientRedirect): Added a FIXME;
        why doesn't this function update global history?
        (WebCore::FrameLoader::updateHistoryForBackForwardNavigation): Ditto.
        (WebCore::FrameLoader::updateHistoryForReload): Replaced the direct call
        the client with a call to the new updateGlobalHistory function.
        (WebCore::FrameLoader::updateHistoryForRedirectWithLockedHistory): Did
        the same changes as for updateHistoryForStandardLoad.
        * loader/FrameLoader.h: More of the same.

        * loader/FrameLoaderClient.h: Removed updateGlobalHistoryForReload and
        renamed updateGlobalHistoryForStandardLoad to updateGlobalHistory.

        * svg/graphics/SVGImageEmptyClients.h:
        (WebCore::SVGEmptyFrameLoaderClient::updateGlobalHistory): Updated to
        match the above.

2008-02-23  Darin Adler  <darin@apple.com>

        Reviewed by Sam.

        - fix http://bugs.webkit.org/show_bug.cgi?id=17508
          REGRESSION (r30535): mailto regression tests failing

        * html/HTMLFormElement.cpp:
        (WebCore::HTMLFormElement::submit): Restore the old logic, with its unpleasant
        trip through String do to the replace operation. It's inefficient, but there's
        no real reason to worry about the efficiency of mailto forms, since that feature
        is nearly obsolete.

2008-02-23  Darin Adler  <darin@apple.com>

        Reviewed by Sam.

        - replace SegmentedString's use of DeprecatedValueList with Deque

        Testing indicates this is a slight speed-up for page loading.

        * platform/text/SegmentedString.cpp:
        (WebCore::SegmentedString::length): Update to use Deque.
        (WebCore::SegmentedString::setExcludeLineNumbers): Ditto.
        (WebCore::SegmentedString::append): Ditto.
        (WebCore::SegmentedString::prepend): Ditto.
        (WebCore::SegmentedString::advanceSubstring): Ditto.
        (WebCore::SegmentedString::toString): Ditto.
        * platform/text/SegmentedString.h: Tweak formatting. Don't bother making an entire
        class private with a single friend. Change m_sbstrings from a DeprecatedValueList
        to a Deque.

2008-02-23  Darin Adler  <darin@apple.com>

        Reviewed by Anders.

        - fix http://bugs.webkit.org/show_bug.cgi?id=17506
          REGRESSION (r30535): ASSERTION FAILED: i < size()

        * loader/TextResourceDecoder.cpp:
        (WebCore::findTextEncoding): Fix off-by-one in code that null-terminates
        the C string here.

2008-02-23  Matt Lilek  <webkit@mattlilek.com>

        Not reviewed, build fix.

        * platform/network/cf/FormDataStreamCFNet.cpp:
        (WebCore::httpBodyFromRequest):
        * plugins/win/PluginViewWin.cpp:
        (WebCore::PluginView::handlePost):

2008-02-23  Dan Bernstein  <mitz@apple.com>

        - fix a typo

        * platform/graphics/win/GlyphPageTreeNodeCGWin.cpp:
        (WebCore::GlyphPage::fill):
        * platform/graphics/win/GlyphPageTreeNodeCairoWin.cpp:
        (WebCore::GlyphPage::fill):

2008-02-23  Dan Bernstein  <mitz@apple.com>

        Reviewed by Anders Carlsson.

        - fix GlyphPage::fill() logic for partial page fills

        * platform/graphics/win/GlyphPageTreeNodeCGWin.cpp:
        (WebCore::GlyphPage::fill): Changed the test for non-BMP characters to
        work correctly when the length parameter is less than a full page size.
        Also updated the comment.
        * platform/graphics/win/GlyphPageTreeNodeCairoWin.cpp:
        (WebCore::GlyphPage::fill): Ditto.

2008-02-23  Kevin Ollivier  <kevino@theolliviers.com>

        Reviewed by Darin Adler.

        Move text drawing into wxcode, as we need platform-dependent
        APIs for drawing non-kerned text, which wx doesn't yet have.
        (But hopefully will, once these APIs are fleshed out on all
        platforms!)

        http://bugs.webkit.org/show_bug.cgi?id=17396

        * platform/graphics/wx/FontWx.cpp:
        (WebCore::Font::drawGlyphs):
        * platform/wx/wxcode/gtk/non-kerned-drawing.cpp: Added.
        * platform/wx/wxcode/mac/carbon/non-kerned-drawing.cpp: Added.
        * platform/wx/wxcode/non-kerned-drawing.h: Added.
        * platform/wx/wxcode/win/non-kerned-drawing.cpp: Added.
        * webcore-wx.bkl:

2008-02-23  Darin Adler  <darin@apple.com>

        Pointed out by Mitz.

        * loader/TextResourceDecoder.cpp:
        (WebCore::find): Fix a "==" that was supposed to be ">".
        (WebCore::findIgnoringCase): Ditto.

2008-02-23  Darin Adler  <darin@apple.com>

        Reviewed by Sam.

        * html/HTMLFormElement.cpp:
        (WebCore::appendEncodedString): Fix buffer overrun in the code I just landed.

2008-02-23  Darin Adler  <darin@apple.com>

        Reviewed by Sam.

        - remove all but 1 remaining use of DeprecatedCString
        - change FormData to start refcount at 1

        * html/HTMLFormElement.cpp:
        (WebCore::appendString): Added. Helpers for Vector<char>.
        (WebCore::appendEncodedString): Renamed from encodeCString and changed to
        append to an existing Vector<char> to cut down a bit on memory allocation.
        (WebCore::HTMLFormElement::formData): Replace the DeprecatedCString called
        enc_string with a Vector<char> called encodedData. Change to use the new
        FormData::create function.
        (WebCore::HTMLFormElement::submit): Same thing, for the mailto form code.

        * loader/TextResourceDecoder.cpp:
        (WebCore::find): Added. Helper for searching in char* with length.
        (WebCore::findIgnoringCase): Ditto.
        (WebCore::findTextEncoding): Added. Helper for looking up a text encoding
        when we have a char* with length rather than a null-terminated char*.
        (WebCore::findXMLEncoding): Changed to use char* and length rather than
        DeprecatedCString. Also fixed some things that would be one-character
        buffer overruns in a string that's not null-terminated.
        (WebCore::TextResourceDecoder::checkForCSSCharset): Change to use
        findTextEncoding rather than constructing a CString to pass to the
        TextEncodingconstructor.
        (WebCore::TextResourceDecoder::checkForHeadCharset): Ditto.

        * platform/network/FormData.cpp:
        (WebCore::FormData::FormData): Changed to start refcount at 1.
        (WebCore::FormData::create): Added.
        (WebCore::FormData::copy): Call adoptRef since refcount starts at 1.
        * platform/network/FormData.h: Made constructor private. Added create functions.

        * platform/network/mac/ResourceRequestMac.mm:
        (WebCore::ResourceRequest::doUpdateResourceRequest): Call FormData::create.
        * xml/XMLHttpRequest.cpp:
        (WebCore::XMLHttpRequest::send): Ditto.

2008-02-23  Darin Adler  <darin@apple.com>

        Reviewed by Anders.

        - http://bugs.webkit.org/show_bug.cgi?id=17067
          eliminate attributes parameter from JSObject::put for speed/clarity

        * bindings/js/JSCSSStyleDeclarationCustom.cpp:
        (WebCore::JSCSSStyleDeclaration::customPut): Remove attributes argument.

        * bindings/js/JSCanvasPixelArrayCustom.cpp:
        (WebCore::JSCanvasPixelArray::indexGetter): Use early exit idiom.
        (WebCore::JSCanvasPixelArray::indexSetter): Moved length check into the
        CanvasPixelArray object, for consistency with the getter. Removed attributes
        argument.

        * bindings/js/JSDOMWindowCustom.cpp:
        (WebCore::JSDOMWindow::customPut): Removed special case for variable
        initialization, which is not needed since that does use put any more.
        Removed attributes argument.

        * bindings/js/JSEventTargetBase.h:
        (WebCore::JSEventTargetBase::putValueProperty): Removed attributes argument.
        (WebCore::JSEventTargetBase::put): Ditto.
        (WebCore::JSEventTargetPrototype::self): Removed Internal flag.
        * bindings/js/JSEventTargetNode.cpp:
        (WebCore::JSEventTargetNode::put): Removed attributes argument.
        (WebCore::JSEventTargetNode::putValueProperty): Ditto.
        * bindings/js/JSEventTargetNode.h: Ditto.
        * bindings/js/JSHTMLAppletElementCustom.cpp:
        (WebCore::JSHTMLAppletElement::customPut): Ditto.
        * bindings/js/JSHTMLEmbedElementCustom.cpp:
        (WebCore::JSHTMLEmbedElement::customPut): Ditto.
        * bindings/js/JSHTMLInputElementBase.cpp:
        (WebCore::JSHTMLInputElementBase::put): Ditto.
        (WebCore::JSHTMLInputElementBase::putValueProperty): Ditto.
        * bindings/js/JSHTMLInputElementBase.h: Ditto.
        * bindings/js/JSHTMLObjectElementCustom.cpp:
        (WebCore::JSHTMLObjectElement::customPut): Ditto.
        * bindings/js/JSHTMLOptionsCollectionCustom.cpp:
        (WebCore::JSHTMLOptionsCollection::indexSetter): Ditto.
        * bindings/js/JSHTMLSelectElementCustom.cpp:
        (WebCore::JSHTMLSelectElement::indexSetter): Ditto.
        * bindings/js/JSHistoryCustom.cpp:
        (WebCore::JSHistory::customPut): Ditto.
        * bindings/js/JSLocation.cpp:
        (WebCore::JSLocation::put): Ditto.
        * bindings/js/JSLocation.h: Ditto.
        * bindings/js/JSXMLHttpRequest.cpp:
        (WebCore::JSXMLHttpRequest::put): Ditto.
        (WebCore::JSXMLHttpRequest::putValueProperty): Ditto.
        * bindings/js/JSXMLHttpRequest.h: Ditto.

        * bindings/js/kjs_dom.cpp:
        (WebCore::getRuntimeObject): Changed return type to JSObject*.
        * bindings/js/kjs_dom.h: Ditto.

        * bindings/js/kjs_events.cpp:
        (WebCore::JSClipboard::put): Removed attributes argument.
        (WebCore::JSClipboard::putValueProperty): Ditto.
        * bindings/js/kjs_events.h: Ditto.

        * bindings/js/kjs_html.cpp:
        (WebCore::runtimeObjectGetter): Updated for change to getRuntimeObject to
        return a JSObject. Used early exit idiom.
        (WebCore::runtimeObjectPropertyGetter): Ditto.
        (WebCore::runtimeObjectCustomGetOwnPropertySlot): Ditto.
        (WebCore::runtimeObjectCustomPut): Use hasProperty to check for properties
        that we should put with the property syntax instead of canPut.
        (WebCore::runtimeObjectImplementsCall): Ditto.
        (WebCore::runtimeObjectCallAsFunction): Ditto.
        * bindings/js/kjs_html.h: Removed attributes argument to runtimeObjectCustomPut.

        * bindings/js/kjs_window.cpp:
        (KJS::Window::put): Removed attributes argument.
        * bindings/js/kjs_window.h: Ditto.

        * bindings/scripts/CodeGeneratorJS.pm: Removed attributes argument from put,
        putValueProperty, customPut, and indexSetter.

        * html/CanvasPixelArray.h:
        (WebCore::CanvasPixelArray::set): Added index checking here, as in the get
        function. Before, the checking was done in the JavaScript bindings for set.

2008-02-23  Brent Fulgham  <bfulgham@gmail.com>

        Reviewed by Adam and Darin.

        http://bugs.webkit.org/show_bug.cgi?id=17442
        Correct the Windows Cairo implementation of GraphicsContext so
        that Windows 'WorldTransform' is kept in sync with the Cairo
        transormations.

        Also corrects an uninitialized variable in the Cairo Windows
        image drag handler.

        WARNING: NO TEST CASES ADDED OR CHANGED

        * platform/graphics/cairo/GraphicsContextCairo.cpp:  Modify
          methods to call GraphicsContextPlatformPrivate calls, just
          as is done for the CoreGraphics version.  These calls are
          nop's for everything but Windows.
        (WebCore::GraphicsContext::savePlatformState):
        (WebCore::GraphicsContext::restorePlatformState):
        (WebCore::GraphicsContext::clip):
        (WebCore::GraphicsContext::drawLineForMisspellingOrBadGrammar):
        (WebCore::GraphicsContext::translate):
        (WebCore::GraphicsContext::concatCTM): Re-enable for Windows
        (WebCore::GraphicsContext::beginTransparencyLayer):
        (WebCore::GraphicsContext::endTransparencyLayer):
        (WebCore::GraphicsContext::rotate):
        (WebCore::GraphicsContext::scale):
        * platform/graphics/cairo/GraphicsContextPlatformPrivateCairo.h:
        * platform/graphics/win/GraphicsContextCGWin.cpp:  Move common
          code for handling WorldTransform calls to parent class.
        * platform/graphics/win/GraphicsContextCairoWin.cpp:  Add common
          code for handling WorldTransform calls.
          (WebCore::GraphicsContextPlatformPrivate::concatCTM):  Change
          implementation so that it only handles WorldTransform.  The
          Cairo update is done in GraphicsContextCairo.cpp
        * platform/graphics/win/GraphicsContextWin.cpp:  Call platform-private
          methods to keep WorldTransform in sync.
        (WebCore::GraphicsContextPlatformPrivate::save):
        (WebCore::GraphicsContextPlatformPrivate::restore):
        (WebCore::GraphicsContextPlatformPrivate::clip):
        (WebCore::GraphicsContextPlatformPrivate::scale):
        (WebCore::GraphicsContextPlatformPrivate::rotate):
        (WebCore::GraphicsContextPlatformPrivate::translate):
        * platform/win/DragImageCairoWin.cpp:
        (WebCore::createDragImageFromImage):  Correct uninitialized value

2008-02-23  Dan Bernstein  <mitz@apple.com>

        Reviewed by Dave Hyatt.

        - make non-autowrapping text clear floats

        Test: fast/text/whitespace/nowrap-clear-float.html

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::nextFloatBottomBelow): Renamed nearestFloat() to
        this and changed to avoid comparing bottom to 0 in each iteration.
        (WebCore::RenderBlock::getClearDelta): Updated comment for the rename.
        * rendering/RenderBlock.h:
        * rendering/bidi.cpp:
        (WebCore::RenderBlock::fitBelowFloats): Added. Factored out of
        findNextLineBreak() and simplified.
        (WebCore::RenderBlock::findNextLineBreak): Changed to call
        fitBelowFloats(). Fixed the bug by trying to fit below floats in the
        case of non-wrapping text. Removed some redundancy.

2008-02-23  Sam Weinig  <sam@webkit.org>

        Reviewed by Oliver Hunt.

        Fix for http://bugs.webkit.org/show_bug.cgi?id=17504
        Speed up DOM lists array subscription syntax by using the fast 
        getOwnPropertySlot and set paths

        - 6x speed improvement on Oliver's ImageData put test.

        * bindings/scripts/CodeGeneratorJS.pm: Add fast path for getOwnPropertySlot
        and put when an indexGetter or indexSetter is used.  We can not use the fast
        path if an overridingNameGetter is used as there would be no way to override.

2008-02-23  Kevin Ollivier  <kevino@theolliviers.com>

        wx build fix after JSImageData.cpp was added.

        * WebCoreSources.bkl:

2008-02-23  Alexey Proskuryakov  <ap@webkit.org>

        Windows build fix - move ThreadCondition implementation from WebCore to WTF.

        * WebCore.vcproj/WebCore.vcproj:
        * platform/win/ThreadConditionWin.cpp: Removed.

2008-02-23  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Darin.

        Move basic threading support from WebCore to WTF.

        One call that remains in WebCore is callOnMainThread(), and it has its own header now.

        * ForwardingHeaders/wtf/Locker.h: Added.
        * ForwardingHeaders/wtf/MessageQueue.h: Added.
        * ForwardingHeaders/wtf/Threading.h: Added.
        * GNUmakefile.am:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * WebCoreSources.bkl:
        * bindings/js/JSCustomSQLTransactionCallback.cpp:
        * dom/XMLTokenizer.cpp:
        * loader/icon/IconDatabase.cpp:
        (WebCore::iconDatabase):
        * loader/icon/IconDatabase.h:
        * platform/Locker.h: Removed.
        * platform/MainThread.h: Copied from WebCore/platform/Threading.h.
        (WebCore::initializeThreadingAndMainThread):
        * platform/MessageQueue.h: Removed.
        * platform/SecurityOrigin.h:
        * platform/Threading.h: Removed.
        * platform/ThreadingNone.cpp: Removed.
        * platform/gtk/MainThreadGtk.cpp: Copied from WebCore/platform/gtk/ThreadingGtk.cpp.
        * platform/gtk/ThreadingGtk.cpp: Removed.
        * platform/mac/MainThreadMac.mm: Copied from WebCore/platform/mac/Threading.mm.
        * platform/mac/Threading.mm: Removed.
        * platform/pthreads: Removed.
        * platform/pthreads/ThreadingPthreads.cpp: Removed.
        * platform/qt/MainThreadQt.cpp: Copied from WebCore/platform/qt/ThreadingQt.cpp.
        * platform/qt/ThreadingQt.cpp: Removed.
        * platform/sql/SQLValue.h:
        * platform/sql/SQLiteAuthorizer.h:
        * platform/sql/SQLiteDatabase.h:
        * platform/win/MainThreadWin.cpp: Copied from WebCore/platform/win/ThreadingWin.cpp.
        (WebCore::initializeThreadingAndMainThread):
        * platform/win/MutexWin.cpp: Removed.
        * platform/win/ThreadingWin.cpp: Removed.
        * platform/wx/MainThreadWx.cpp: Copied from WebCore/platform/wx/ThreadingWx.cpp.
        * platform/wx/ThreadingWx.cpp: Removed.
        * storage/Database.cpp:
        (WebCore::Database::Database):
        * storage/Database.h:
        * storage/DatabaseTask.h:
        * storage/DatabaseThread.h:
        * storage/DatabaseTracker.cpp:
        * storage/OriginQuotaManager.h:
        * storage/SQLError.h:
        * storage/SQLResultSet.h:
        * storage/SQLStatement.h:
        * storage/SQLStatementCallback.h:
        * storage/SQLStatementErrorCallback.h:
        * storage/SQLTransaction.h:
        * storage/SQLTransactionCallback.h:
        * storage/SQLTransactionErrorCallback.h:
        * webcore-wx.bkl:

2008-02-23  David Kilzer  <ddkilzer@apple.com>

        Please clarify licensing for some files
        <http://bugs.webkit.org/show_bug.cgi?id=14970>

        Reviewed by Darin.

        * bindings/objc/WebScriptObject.h: Added Apple BSD-style license.
        * bindings/objc/WebScriptObjectPrivate.h: Ditto.
        * platform/text/mac/ShapeArabic.c: Added ICU license from WebCore/icu/LICENSE.

2008-02-22  Justin Garcia  <justin.garcia@apple.com>

        Reviewed by Anders Carlsson.

        <rdar://problem/5714333> Add document.getSelection()
        
        Add a synonym for window.getSelection() that FF supports.  There were requests in
        this bugs dupes to also support the IE only document.selection, but IE's Selection
        object is too different than ours currently for that to be safe (specifically, we
        don't support enough of IE's TextRange methods on our DOM Range object yet). I
        filed <rdar://problem/5761233> to cover that.

        * dom/Document.cpp:
        (WebCore::Document::getSelection): Added.
        * dom/Document.h:
        * dom/Document.idl: Ditto.  JS only since this is about web compatibility.

2008-02-22  Oliver Hunt  <oliver@apple.com>

        WX build fixes

        * WebCoreSources.bkl:

2008-02-22  Oliver Hunt  <oliver@apple.com>

        Once more with the cairo/qt/wx build fixing

        * platform/graphics/cairo/ImageBufferCairo.cpp:
        * platform/graphics/qt/ImageBufferQt.cpp:
        * platform/graphics/wx/ImageBufferWx.cpp:

2008-02-22  Mark Rowe  <mrowe@apple.com>

        Windows build fix.  Add missing include of DeprecatedCString.h and sort existing includes.

        * platform/win/PasteboardWin.cpp:

2008-02-22  Mark Rowe  <mrowe@apple.com>

        Speculative Windows build fix.

        * platform/win/ClipboardUtilitiesWin.cpp:  Add missing include of DeprecatedCString.h and sort existing includes.
        * platform/win/ClipboardWin.cpp:  Ditto.

2008-02-22  Oliver Hunt  <oliver@apple.com>

        Build fix for windows, wx and qt

        * html/CanvasPixelArray.h:
        (WebCore::CanvasPixelArray::set):

2008-02-22  Oliver Hunt  <oliver@apple.com>

        Unbreak windows vcproj

        * WebCore.vcproj/WebCore.vcproj:

2008-02-22  Oliver Hunt  <oliver@apple.com>

        Reviewed by Sam W.

        Support Canvas.getImageData and Canvas.createImageData
        
        This patch adds support for all the pixel reading portions
        of the HTML5 Canvas spec.  There are two new types ImageData
        and CanvasPixelArray which are used to provide the HTML5
        ImageData object, and the required semantics for assignment
        to the ImageData data array.
        
        We only implement the CG version of ImageBuffer::getImageData,
        but the logic is null safe, so this will not introduce any
        crashes into other platforms, unfortunately it will result in
        JS Object detection "lying" on non-CG platforms.

        Tests: fast/canvas/canvas-ImageData-behaviour.html
               fast/canvas/canvas-getImageData.html

        * DerivedSources.make:
        * GNUmakefile.am:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSCanvasPixelArrayCustom.cpp: Added.
        (WebCore::JSCanvasPixelArray::indexGetter):
        (WebCore::JSCanvasPixelArray::indexSetter):
        (WebCore::toJS):
        * bindings/js/JSCanvasRenderingContext2DCustom.cpp:
        * bindings/scripts/CodeGeneratorJS.pm:
        * html/CanvasPixelArray.cpp: Added.
        (WebCore::CanvasPixelArray::create):
        * html/CanvasPixelArray.h: Added.
        (WebCore::CanvasPixelArray::data):
        (WebCore::CanvasPixelArray::length):
        (WebCore::CanvasPixelArray::set):
        (WebCore::CanvasPixelArray::get):
        * html/CanvasPixelArray.idl: Added.
        * html/CanvasRenderingContext2D.cpp:
        (WebCore::createEmptyImageData):
        (WebCore::CanvasRenderingContext2D::createImageData):
        (WebCore::CanvasRenderingContext2D::getImageData):
        * html/CanvasRenderingContext2D.h:
        * html/CanvasRenderingContext2D.idl:
        * html/HTMLCanvasElement.cpp:
        (WebCore::HTMLCanvasElement::convertLogicalToDevice):
        (WebCore::HTMLCanvasElement::createImageBuffer):
        * html/HTMLCanvasElement.h:
        * html/ImageData.cpp: Added.
        (WebCore::ImageData::create):
        (WebCore::ImageData::ImageData):
        * html/ImageData.h: Added.
        (WebCore::ImageData::width):
        (WebCore::ImageData::height):
        (WebCore::ImageData::data):
        * html/ImageData.idl: Added.
        * platform/graphics/ImageBuffer.h:
        * platform/graphics/cairo/ImageBufferCairo.cpp:
        (WebCore::ImageBuffer::getImageData):
        * platform/graphics/cg/ImageBufferCG.cpp:
        (WebCore::ImageBuffer::getImageData):
        * platform/graphics/qt/ImageBufferQt.cpp:
        (WebCore::ImageBuffer::getImageData):
        * platform/graphics/wx/ImageBufferWx.cpp:
        (WebCore::ImageBuffer::getImageData):

2008-02-22  Sam Weinig  <sam@webkit.org>

        Rubber-stamped by Adam Roben.

        Rid the project of the Devil known as DeprecatedString!

        * GNUmakefile.am:
        * WebCore.base.exp:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * WebCoreSources.bkl:
        * dom/Node.h:
        * html/HTMLFormElement.cpp:
        * platform/DeprecatedString.cpp: Removed.
        * platform/DeprecatedString.h: Removed.
        * platform/graphics/qt/IconQt.cpp:
        * platform/graphics/win/MediaPlayerPrivateQuickTimeWin.cpp:
        * platform/gtk/CookieJarGtk.cpp:
        * platform/gtk/CursorGtk.cpp:
        * platform/gtk/KeyEventGtk.cpp:
        * platform/mac/DeprecatedStringMac.mm: Removed.
        * platform/network/qt/ResourceHandleQt.cpp:
        * platform/network/win/CookieJarWin.cpp:
        (WebCore::cookies):
        * platform/qt/ClipboardQt.cpp:
        * platform/qt/CookieJarQt.cpp:
        * platform/qt/CursorQt.cpp:
        * platform/symbian/DeprecatedStringSymbian.cpp: Removed.
        * platform/text/AtomicString.cpp:
        * platform/text/AtomicString.h:
        * platform/text/PlatformString.h:
        * platform/text/String.cpp:
        * platform/text/StringImpl.cpp:
        * platform/text/qt/StringQt.cpp:
        (WebCore::String::String):
        * platform/text/wx/StringWx.cpp:
        * platform/win/BString.cpp:
        * platform/win/BString.h:
        * platform/win/PasteboardWin.cpp:

2008-02-22  Sam Weinig  <sam@webkit.org>

        Reviewed by Geoff Garen.

        - Remove use of DeprecatedString in CSSStyleSelector.

        * css/CSSStyleSelector.cpp:
        (WebCore::findHash): Removed.  Use find instead.
        (WebCore::findSlashDotDotSlash): Changed to take a UChar* and a length.
        (WebCore::findSlashSlash): Ditto.
        (WebCore::findSlashDotSlash): Ditto.
        (WebCore::containsColonSlashSlash): Ditto.
        (WebCore::cleanPath): Change to operate on a String.
        (WebCore::checkPseudoState): Changed to use a Vector as a buffer.

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  Darin Adler  <darin@apple.com>

        Reviewed, tweaked and landed by Sam.

        - Make RegularExpression operate on Strings instead of DeprecatedStrings.

        * dom/DOMImplementation.cpp:
        (WebCore::DOMImplementation::isXMLMIMEType): Use string instead of DeprecatedString
        to build up the RegularExpression.
        * page/Frame.cpp:
        (WebCore::createRegExpForLabels): Use String instead of DeprecatedString.
        (WebCore::Frame::searchForLabelsAboveCell): Ditto.
        (WebCore::Frame::searchForLabelsBeforeElement): Ditto.
        (WebCore::Frame::matchLabelsAgainstElement): Ditto.
        * page/Frame.h:
        * page/mac/FrameMac.mm:
        (WebCore::regExpForLabels): Ditto.
        (WebCore::Frame::searchForNSLabelsAboveCell): Ditto.
        (WebCore::Frame::searchForLabelsBeforeElement): Ditto.
        (WebCore::Frame::matchLabelsAgainstElement): Ditto.

        * platform/text/RegularExpression.cpp:
        (WebCore::RegularExpression::Private::Private):
        (WebCore::RegularExpression::Private::compile):
        (WebCore::RegularExpression::RegularExpression):
        (WebCore::RegularExpression::operator=):
        (WebCore::RegularExpression::pattern):
        (WebCore::RegularExpression::match):
        (WebCore::RegularExpression::search):
        (WebCore::RegularExpression::searchRev):
        (WebCore::replace): Added.
        * platform/text/RegularExpression.h:
        Change functions to take Strings as input instead of DeprecatedStrings and
        reduce the complexity of the class by removing unneeded globbing support.

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  Darin Adler  <darin@apple.com>

        Reviewed and tweaked by Jon Honeycutt. Reviewed and landed by Sam.

        - Remove uses of DeprecatedString in Windows plugin code.

        * plugins/win/PluginPackageWin.cpp:
        (WebCore::getVersionInfo): Cleanup formatting.
        (WebCore::PluginPackage::freeLibraryTimerFired): Remove un-needed variable name.
        (WebCore::PluginPackage::storeFileVersion): Move casts.
        (WebCore::PluginPackage::fetchInfo): Use OwnArrayPtr and switch to more efficient
        use of Vectors.
        (WebCore::PluginPackage::load): Fix whitespace.
        (WebCore::PluginPackage::hash): Make the hashCodes const
        * plugins/win/PluginViewWin.cpp:
        (WebCore::makeURL): Use String instead of DeprecatedString.
        (WebCore::parseRFC822HeaderFields): Ditto.
        (WebCore::PluginView::handlePost): Ditto.
        (WebCore::PluginView::status): Ditto.

2008-02-22  Darin Adler  <darin@apple.com>

        Reviewed, tweaked and landed by Sam.

        - Don't use DeprecatedString in HTMLTokenizer.

        * html/HTMLTokenizer.cpp:
        (WebCore::HTMLTokenizer::finish):
        * platform/text/PlatformString.h:
        (WebCore::find):

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-21  Ada Chan  <adachan@apple.com>

        <rdar://problem/5757873> Buffer overrun in DeprecatedCString::find() in WebCore
        We could get a buffer overrun in DeprecatedCString::find() if the end of the
        string matches a beginning portion of the substring, for example, if string is
        "a" but the substring is "ab".
        The code as is also will not match things correctly under certain situations
        since the inner while loop increments the index. For example, we wouldn't find
        a match if the string is "aab..." and the substring is "ab".  Changed the 
        inner while loop to increment a temporary index into str.
        
        Test: fast/loader/charset-parse.html

        Reviewed by Dan Berstein.

        * platform/DeprecatedCString.cpp:
        (WebCore::DeprecatedCString::find):

2008-02-21  David Hyatt  <hyatt@apple.com>

        Fix for bug 17301.  CSS media queries need to use the correct viewport
        when contained in documents inside iframes (rather than always using the
        top-level document's viewport).  CSS media queries based on the viewport
        also needed to be dynamic and update as you resize the window (this is
        a HOT feature). :)

        This patch gets Acid3 up to 86/100 with 3 colored boxes filled in.

        Reviewed by olliej

        Added fast/media/viewport-media-query.html

        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::CSSStyleSelector):
        (WebCore::CSSStyleSelector::addViewportDependentMediaQueryResult):
        (WebCore::CSSStyleSelector::affectedByViewportChange):
        * css/CSSStyleSelector.h:
        (WebCore::MediaQueryResult::MediaQueryResult):
        * css/MediaQueryEvaluator.cpp:
        (WebCore::MediaQueryEvaluator::MediaQueryEvaluator):
        (WebCore::MediaQueryEvaluator):
        (WebCore::MediaQueryEvaluator::eval):
        (WebCore::colorMediaFeatureEval):
        (WebCore::monochromeMediaFeatureEval):
        (WebCore::device_aspect_ratioMediaFeatureEval):
        (WebCore::device_pixel_ratioMediaFeatureEval):
        (WebCore::gridMediaFeatureEval):
        (WebCore::device_heightMediaFeatureEval):
        (WebCore::device_widthMediaFeatureEval):
        (WebCore::heightMediaFeatureEval):
        (WebCore::widthMediaFeatureEval):
        (WebCore::min_colorMediaFeatureEval):
        (WebCore::max_colorMediaFeatureEval):
        (WebCore::min_monochromeMediaFeatureEval):
        (WebCore::max_monochromeMediaFeatureEval):
        (WebCore::min_device_aspect_ratioMediaFeatureEval):
        (WebCore::max_device_aspect_ratioMediaFeatureEval):
        (WebCore::min_device_pixel_ratioMediaFeatureEval):
        (WebCore::max_device_pixel_ratioMediaFeatureEval):
        (WebCore::min_heightMediaFeatureEval):
        (WebCore::max_heightMediaFeatureEval):
        (WebCore::min_widthMediaFeatureEval):
        (WebCore::max_widthMediaFeatureEval):
        (WebCore::min_device_heightMediaFeatureEval):
        (WebCore::max_device_heightMediaFeatureEval):
        (WebCore::min_device_widthMediaFeatureEval):
        (WebCore::max_device_widthMediaFeatureEval):
        * css/MediaQueryEvaluator.h:
        * css/MediaQueryExp.cpp:
        (WebCore::MediaQueryExp::~MediaQueryExp):
        * css/MediaQueryExp.h:
        (WebCore::MediaQueryExp::value):
        (WebCore::MediaQueryExp::isViewportDependent):
        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::pickMedia):
        * page/FrameView.cpp:
        (WebCore::FrameView::layout):

2008-02-21  Anders Carlsson  <andersca@apple.com>

        Reviewed by Sam.

        Make more classes start out with a refcount of 1.

        * dom/QualifiedName.cpp:
        (WebCore::QNameComponentsTranslator::translate):
        (WebCore::QualifiedName::QualifiedName):
        * dom/QualifiedName.h:
        (WebCore::QualifiedName::QualifiedNameImpl::create):
        (WebCore::QualifiedName::QualifiedNameImpl::QualifiedNameImpl):
        * history/BackForwardList.cpp:
        (WebCore::BackForwardList::BackForwardList):
        * history/BackForwardList.h:
        (WebCore::BackForwardList::create):
        * page/Page.cpp:
        (WebCore::Page::Page):
        * platform/text/CString.cpp:
        (WebCore::CString::init):
        (WebCore::CString::newUninitialized):
        (WebCore::CString::copyBufferIfNeeded):
        * platform/text/CString.h:
        (WebCore::CStringBuffer::create):
        (WebCore::CStringBuffer::CStringBuffer):

2008-02-21  Kevin Ollivier  <kevino@theolliviers.com>

        wx build fix for the domString() -> string() rename in r30443.

        * platform/graphics/wx/FontPlatformDataWx.cpp:
        (WebCore::FontPlatformData::FontPlatformData):

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  Dan Bernstein  <mitz@apple.com>

        Reviewed by Sam Weinig.

        - minor cleanup

        * rendering/bidi.cpp:
        (WebCore::bidiNext): Removed redundant isBR() check -- isText() returns
        true for RenderLineBreak.
        (WebCore::bidiFirst): Ditto.
        (WebCore::shouldSkipWhitespaceAfterStartObject):
        (WebCore::RenderBlock::findNextLineBreak):

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  Rodney Dawes  <dobey@wayofthemonkey.com>

        GTK+ build fix. s/domString()/string()/

        * platform/graphics/gtk/FontPlatformDataGtk.cpp:
        (FontPlatformData::FontPlatformData):

2008-02-20  Dan Bernstein  <mitz@apple.com>

        Reviewed by Dave Hyatt.

        - fix http://bugs.webkit.org/show_bug.cgi?id=17465
          REGRESSION: <DIV> tokenized into Div if still searching for DOCTYPE

        Test: fast/tokenizer/doctype-search-reset.html

        * html/HTMLTokenizer.cpp:
        (WebCore::HTMLTokenizer::parseTag):

2008-02-20  Dan Bernstein  <mitz@apple.com>

        Reviewed by Dave Hyatt.

        - fix http://bugs.webkit.org/show_bug.cgi?id=17464
          REGRESSION: Crash in RenderBlock::findNextLineBreak reading r30444 commit email in GMail

        Test: fast/text/wbr-in-pre-crash.html

        * rendering/bidi.cpp:
        (WebCore::RenderBlock::findNextLineBreak):

2008-02-20  Oliver Hunt  <oliver@apple.com>

        Reviewed by Hyatt.

        Bug 17303: Canvas crash in ImageBuffer

        We handle a null GraphicsContext everywhere, but we weren't checking for 
        a null ImageBuffer, which is what will result in a null GraphicsContext in
        the first place.

        Test: fast/canvas/access-zero-sized-canvas.html

        * html/HTMLCanvasElement.cpp:

2008-02-20  David Hyatt  <hyatt@apple.com>

        Fix the layout test failure that never should have passed in the first
        place by making changes to media lists actually result in the recomputation
        of the style selector.  Now it passes for the right reasons and not because
        of dumb luck.

        Reviewed by Sam Weinig

        * css/MediaList.cpp:
        (WebCore::MediaList::deleteMedium):
        (WebCore::MediaList::setMediaText):
        (WebCore::MediaList::appendMedium):
        (WebCore::MediaList::notifyChanged):
        * css/MediaList.h:
        * dom/Document.cpp:
        (WebCore::Document::attach):

2008-02-20  Darin Adler  <darin@apple.com>

        Reviewed, tweaked and landed by Sam.

        - make markup functions not use DeprecatedString.

        * editing/markup.cpp:
        (WebCore::append): Added.
        (WebCore::escapeContentText): Build up string using a Vector.
        (WebCore::appendStartMarkup): Use String instead of DeprecatedString.

2008-02-20  Darin Adler  <darin@apple.com>

        Reviewed, tweaked and landed by Sam.

        - make TextIterator use a Vector instead of a DeprecatedString.

        * editing/TextIterator.cpp:
        (WebCore::CharacterIterator::string): Build up the String using a
        Vector.
        (WebCore::WordAwareIterator::advance): Switch to using Vector functions.
        (WebCore::WordAwareIterator::length): Ditto.
        (WebCore::WordAwareIterator::characters): Ditto.
        * editing/TextIterator.h: Use a Vector<UChar> for the buffer instead
        of DeprecatedString.

2008-02-20  Darin Adler  <darin@apple.com>

        Reviewed, tweaked and landed by Sam.

        - make HTMLInterchange return a String instead of a DeprecatedString

        * editing/HTMLInterchange.cpp:
        (WebCore::): Return a String from convertedSpaceString.
        (WebCore::convertHTMLTextToInterchangeFormat): Use a Vector instead of
        a DeprecatedString to build up the return String.
        * editing/HTMLInterchange.h:

2008-02-20  Eric Seidel  <eric@webkit.org>

        Reviewed by Oliver.

        Remove m_drawingContext and change m_data to m_imageBuffer

        * html/HTMLCanvasElement.cpp:
        (WebCore::HTMLCanvasElement::HTMLCanvasElement):
        (WebCore::HTMLCanvasElement::reset):
        (WebCore::HTMLCanvasElement::paint):
        (WebCore::HTMLCanvasElement::createImageBuffer):
        (WebCore::HTMLCanvasElement::buffer):
        (WebCore::HTMLCanvasElement::createPlatformImage):
        * html/HTMLCanvasElement.h:

2008-02-20  Anders Carlsson  <andersca@apple.com>

        Reviewed by Sam.

        Rename AtomicString::domString() to AtomicString::string().
        
        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::CSSComputedStyleDeclaration::getPropertyCSSValue):
        * css/CSSFontSelector.cpp:
        (WebCore::CSSFontSelector::getFontData):
        * dom/Attr.cpp:
        (WebCore::Attr::createTextChild):
        * dom/Comment.cpp:
        (WebCore::Comment::nodeName):
        * dom/Document.cpp:
        (WebCore::Document::recalcStyleSelector):
        (WebCore::Document::setHTMLWindowEventListener):
        (WebCore::Document::formElementsState):
        * dom/StyledElement.cpp:
        (WebCore::StyledElement::parseMappedAttribute):
        * dom/Text.cpp:
        (WebCore::Text::nodeName):
        * editing/SelectionController.cpp:
        (WebCore::SelectionController::debugRenderer):
        * html/HTMLCollection.cpp:
        (WebCore::HTMLCollection::checkForNameMatch):
        * html/HTMLElement.cpp:
        (WebCore::HTMLElement::nodeName):
        (WebCore::HTMLElement::setHTMLEventListener):
        * html/HTMLFormCollection.cpp:
        (WebCore::HTMLFormCollection::getNamedFormItem):
        * html/HTMLImageElement.cpp:
        (WebCore::HTMLImageElement::parseMappedAttribute):
        (WebCore::HTMLImageElement::isURLAttribute):
        * html/HTMLLinkElement.cpp:
        (WebCore::HTMLLinkElement::parseMappedAttribute):
        (WebCore::HTMLLinkElement::tokenizeRelAttribute):
        * html/HTMLObjectElement.cpp:
        (WebCore::HTMLObjectElement::isURLAttribute):
        (WebCore::HTMLObjectElement::containsJavaApplet):
        * html/HTMLParamElement.cpp:
        (WebCore::HTMLParamElement::isURLAttribute):
        * html/HTMLParser.cpp:
        (WebCore::HTMLParser::handleIsindex):
        * html/HTMLScriptElement.cpp:
        (WebCore::HTMLScriptElement::insertedIntoDocument):
        (WebCore::HTMLScriptElement::shouldExecuteAsJavaScript):
        * html/HTMLStyleElement.cpp:
        (WebCore::HTMLStyleElement::parseMappedAttribute):
        * html/HTMLTokenizer.cpp:
        (WebCore::HTMLTokenizer::parseTag):
        * html/HTMLViewSourceDocument.cpp:
        (WebCore::HTMLViewSourceDocument::addViewSourceToken):
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::saveDocumentState):
        * page/FrameTree.cpp:
        (WebCore::FrameTree::uniqueChildName):
        * platform/text/AtomicString.h:
        (WebCore::AtomicString::string):
        (WebCore::AtomicString::contains):
        (WebCore::AtomicString::find):
        (WebCore::AtomicString::startsWith):
        (WebCore::AtomicString::endsWith):
        * rendering/RenderPartObject.cpp:
        (WebCore::RenderPartObject::updateWidget):
        * svg/SVGElement.cpp:
        (WebCore::SVGElement::addSVGEventListener):
        * svg/SVGSVGElement.cpp:
        (WebCore::SVGSVGElement::addSVGWindowEventListener):
        * xml/XPathFunctions.cpp:
        (WebCore::XPath::FunLocalName::evaluate):
        (WebCore::XPath::FunNamespaceURI::evaluate):
        (WebCore::XPath::FunName::evaluate):

2008-02-20  Brent Fulgham  <bfulgham@gmail.com>

        Reviewed by Dan.

        http://bugs.webkit.org/show_bug.cgi?id=17336
        Provide implementations for Windows (Cairo) build of WebKit that
        handles font formatting.
        - Split font implementation files to allow maximal code sharing
          between CG and Cairo back-ends. 

        * WebCore.vcproj/WebCore.vcproj:
        * platform/graphics/SimpleFontData.h:   Add signatures for private win
          initialization functions.
        * platform/graphics/win/FontCacheWin.cpp:
        (WebCore::FontCache::platformInit):
        (WebCore::FontCache::createFontPlatformData):
        * platform/graphics/win/FontCairoWin.cpp: Removed.  Universal version
          is now part of platform/graphics/cairo.
        * platform/graphics/win/FontCustomPlatformDataCairo.cpp: Added.
        (WebCore::FontCustomPlatformDataCairo::~FontCustomPlatformDataCairo):
        (WebCore::FontCustomPlatformDataCairo::fontPlatformData):
        (WebCore::releaseData):
        (WebCore::createFontCustomPlatformData):
        * platform/graphics/win/FontCustomPlatformDataCairo.h: Added.
        (WebCore::FontCustomPlatformDataCairo::FontCustomPlatformDataCairo):
        * platform/graphics/win/FontPlatformData.h:
        (WebCore::FontPlatformData::FontPlatformData):
        (WebCore::FontPlatformData::fontFace):
        (WebCore::FontPlatformData::scaledFont):
        (WebCore::FontPlatformData::operator==):
        * platform/graphics/win/FontPlatformDataCGWin.cpp: Copied from WebCore/platform/graphics/win/FontPlatformDataWin.cpp.
        (WebCore::FontPlatformData::platformDataInit):
        * platform/graphics/win/FontPlatformDataCairoWin.cpp: Added.
        (WebCore::FontPlatformData::platformDataInit):
        (WebCore::FontPlatformData::FontPlatformData):
        (WebCore::FontPlatformData::setFont):
        * platform/graphics/win/FontPlatformDataWin.cpp:  Moved CG-specific
          code to FontPlatformDataCG.cpp.
        (WebCore::FontPlatformData::FontPlatformData):
        * platform/graphics/win/GlyphPageTreeNodeCGWin.cpp: Copied from WebCore/platform/graphics/win/GlyphPageTreeNodeWin.cpp.
        * platform/graphics/win/GlyphPageTreeNodeCairoWin.cpp: Copied from WebCore/platform/graphics/win/GlyphPageTreeNodeWin.cpp.
        (WebCore::GlyphPage::fill):
        * platform/graphics/win/GlyphPageTreeNodeWin.cpp: Removed.  Replaced
          with CG- and Cairo-specific versions.
        * platform/graphics/win/SimpleFontDataCGWin.cpp:
        (WebCore::SimpleFontData::platformInit):
        (WebCore::SimpleFontData::platformDestroy):
        (WebCore::SimpleFontData::platformWidthForGlyph):
        * platform/graphics/win/SimpleFontDataCairoWin.cpp:
        (WebCore::SimpleFontData::platformInit):
        (WebCore::SimpleFontData::platformDestroy):
        (WebCore::SimpleFontData::platformWidthForGlyph):
        (WebCore::SimpleFontData::setFont):
        * platform/graphics/win/SimpleFontDataWin.cpp:
        (WebCore::SimpleFontData::initGDIFont):
        (WebCore::SimpleFontData::platformCommonDestroy):
        (WebCore::SimpleFontData::widthForGDIGlyph):

2008-02-20  Darin Adler  <darin@apple.com>

        Reviewed by Sam.

        * dom/Node.h: Took out unneeded forward declaration of TextStream.

2008-02-20  Darin Adler  <darin@apple.com>

        Reviewed by Sam.

        * rendering/RenderObject.h: Took out unneeded forward declaration of TextStream.

2008-02-20  David Hyatt  <hyatt@apple.com>

        Fix for bug 16760, incorrect <object> MIME type handling and fallback
        handling.

        Reviewed by darin

        * html/HTMLImageLoader.cpp:
        (WebCore::HTMLImageLoader::notifyFinished):
        If the image had an error, make sure to do <object> fallback.

        * html/HTMLObjectElement.cpp:
        (WebCore::HTMLObjectElement::renderFallbackContent):
        Before doing fallback check if there is a MIME type mismatch between
        an image type and a non-image type.  If so, detach and re-attach after
        storing the correct MIME type.

        * loader/loader.cpp:
        (WebCore::Loader::didReceiveData):
        Consider it an error when a 404 is encountered on a CachedResource load.

2008-02-20  Anders Carlsson  <andersca@apple.com>

        Reviewed by Sam.

        StringImpl constructors used by AtomicString should start with a refcount of 1.
        
        * platform/text/AtomicString.cpp:
        (WebCore::AtomicString::add):
        * platform/text/AtomicString.h:
        * platform/text/StringImpl.cpp:
        (WebCore::StringImpl::StringImpl):

2008-02-20  Darin Adler  <darin@apple.com>

        * bindings/js/kjs_navigator.cpp:
        (WebCore::needsYouTubeQuirk): Tweak comments.

2008-02-20  Anders Carlsson  <andersca@apple.com>

        Reviewed by Darin.

        Change all refcounted classes in page/ to start with a refcount of 1.

        * page/BarInfo.cpp:
        (WebCore::BarInfo::BarInfo):
        * page/BarInfo.h:
        (WebCore::BarInfo::create):
        * page/Console.cpp:
        (WebCore::Console::Console):
        * page/Console.h:
        (WebCore::Console::create):
        * page/DOMSelection.cpp:
        (WebCore::DOMSelection::DOMSelection):
        * page/DOMSelection.h:
        (WebCore::DOMSelection::create):
        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::DOMWindow):
        (WebCore::DOMWindow::screen):
        (WebCore::DOMWindow::history):
        (WebCore::DOMWindow::locationbar):
        (WebCore::DOMWindow::menubar):
        (WebCore::DOMWindow::personalbar):
        (WebCore::DOMWindow::scrollbars):
        (WebCore::DOMWindow::statusbar):
        (WebCore::DOMWindow::toolbar):
        (WebCore::DOMWindow::console):
        (WebCore::DOMWindow::getSelection):
        * page/DOMWindow.h:
        (WebCore::DOMWindow::create):
        * page/Frame.cpp:
        (WebCore::Frame::domWindow):
        * page/History.cpp:
        (WebCore::History::History):
        * page/History.h:
        (WebCore::History::create):
        * page/InspectorController.cpp:
        (WebCore::InspectorResource::create):
        (WebCore::InspectorResource::InspectorResource):
        (WebCore::InspectorDatabaseResource::create):
        (WebCore::InspectorDatabaseResource::InspectorDatabaseResource):
        (WebCore::InspectorController::didLoadResourceFromMemoryCache):
        (WebCore::InspectorController::identifierForInitialRequest):
        (WebCore::InspectorController::didOpenDatabase):
        * page/Plugin.h:
        (WebCore::Plugin::create):
        (WebCore::Plugin::Plugin):
        * page/Screen.cpp:
        (WebCore::Screen::Screen):
        * page/Screen.h:
        (WebCore::Screen::create):

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  David Hyatt  <hyatt@apple.com>

        Fix for bug 12751, doctype nodes aren't part of the Document (Acid3).

        Reviewed by Sam Weinig

        Many tests added in fast/doctypes.

        * dom/DOMImplementation.cpp:
        (WebCore::DOMImplementation::createDocument):
        (WebCore::DOMImplementation::createHTMLDocument):
        * dom/Document.cpp:
        (WebCore::Document::Document):
        (WebCore::Document::setDocType):
        (WebCore::Document::attach):
        (WebCore::Document::getImageMap):
        * dom/Document.h:
        (WebCore::Document::doctype):
        (WebCore::Document::):
        (WebCore::Document::determineParseMode):
        (WebCore::Document::setParseMode):
        (WebCore::Document::parseMode):
        (WebCore::Document::inCompatMode):
        (WebCore::Document::inAlmostStrictMode):
        (WebCore::Document::inStrictMode):
        * dom/DocumentType.cpp:
        (WebCore::DocumentType::cloneNode):
        (WebCore::DocumentType::insertedIntoDocument):
        (WebCore::DocumentType::removedFromDocument):
        * dom/DocumentType.h:
        * dom/Node.cpp:
        (WebCore::Node::childAllowed):
        * dom/StyledElement.cpp:
        (WebCore::StyledElement::attributeChanged):
        * dom/XMLTokenizer.cpp:
        (WebCore::XMLTokenizer::internalSubset):
        * editing/markup.cpp:
        (WebCore::appendStartMarkup):
        * html/HTMLAppletElement.cpp:
        (WebCore::HTMLAppletElement::createRenderer):
        * html/HTMLDocument.cpp:
        (WebCore::HTMLDocument::HTMLDocument):
        (WebCore::HTMLDocument::childAllowed):
        (WebCore::HTMLDocument::determineParseMode):
        * html/HTMLDocument.h:
        * html/HTMLMapElement.cpp:
        (WebCore::HTMLMapElement::parseMappedAttribute):
        * html/HTMLParamElement.cpp:
        (WebCore::HTMLParamElement::parseMappedAttribute):
        * html/HTMLParser.cpp:
        (WebCore::HTMLParser::parseDoctypeToken):
        * html/HTMLParser.h:
        * html/HTMLTokenizer.cpp:
        (WebCore::HTMLTokenizer::reset):
        (WebCore::HTMLTokenizer::parseDoctype):
        (WebCore::HTMLTokenizer::parseTag):
        (WebCore::HTMLTokenizer::write):
        (WebCore::HTMLTokenizer::finish):
        (WebCore::HTMLTokenizer::processDoctypeToken):
        * html/HTMLTokenizer.h:
        (WebCore::DoctypeToken::DoctypeToken):
        (WebCore::DoctypeToken::reset):
        (WebCore::DoctypeToken::state):
        (WebCore::DoctypeToken::setState):
        (WebCore::HTMLTokenizer::State::inDoctype):
        (WebCore::HTMLTokenizer::State::setInDoctype):
        (WebCore::HTMLTokenizer::State::needsSpecialWriteHandling):
        (WebCore::HTMLTokenizer::State::):
        * html/HTMLViewSourceDocument.cpp:
        (WebCore::HTMLViewSourceDocument::addViewSourceToken):
        (WebCore::HTMLViewSourceDocument::addViewSourceDoctypeToken):
        * html/HTMLViewSourceDocument.h:
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::write):
        (WebCore::FrameLoader::switchOutLowBandwidthDisplayIfReady):
        * page/Frame.cpp:
        (WebCore::Frame::documentTypeString):
        * page/inspector/utilities.js:
        * xml/XSLTProcessor.cpp:
        (WebCore::XSLTProcessor::createDocumentFromSource):

2008-02-20  Anders Carlsson  <andersca@apple.com>

        Reviewed by Darin.

        Change most SVG related classes to start out with a ref count of 1.
        
        * bindings/js/JSSVGPointListCustom.cpp:
        (WebCore::JSSVGPointList::initialize):
        (WebCore::JSSVGPointList::insertItemBefore):
        (WebCore::JSSVGPointList::replaceItem):
        (WebCore::JSSVGPointList::appendItem):
        * bindings/js/JSSVGTransformListCustom.cpp:
        (WebCore::JSSVGTransformList::initialize):
        (WebCore::JSSVGTransformList::insertItemBefore):
        (WebCore::JSSVGTransformList::replaceItem):
        (WebCore::JSSVGTransformList::appendItem):
        * rendering/SVGCharacterLayoutInfo.h:
        (WebCore::SVGCharOnPath::create):
        (WebCore::SVGCharOnPath::SVGCharOnPath):
        * rendering/SVGRootInlineBox.cpp:
        (WebCore::SVGRootInlineBox::buildLayoutInformationForTextBox):
        * svg/SVGAnimationElement.cpp:
        (WebCore::SVGAnimationElement::parseBeginOrEndValue):
        * svg/SVGClipPathElement.cpp:
        (WebCore::SVGClipPathElement::canvasResource):
        * svg/SVGElementInstance.cpp:
        (WebCore::SVGElementInstance::childNodes):
        * svg/SVGElementInstanceList.cpp:
        (WebCore::SVGElementInstanceList::SVGElementInstanceList):
        * svg/SVGElementInstanceList.h:
        (WebCore::SVGElementInstanceList::create):
        * svg/SVGFitToViewBox.cpp:
        (WebCore::SVGFitToViewBox::SVGFitToViewBox):
        * svg/SVGGradientElement.cpp:
        (WebCore::SVGGradientElement::SVGGradientElement):
        (WebCore::SVGGradientElement::canvasResource):
        * svg/SVGImageElement.cpp:
        (WebCore::SVGImageElement::SVGImageElement):
        * svg/SVGLengthList.h:
        (WebCore::SVGLengthList::create):
        * svg/SVGList.h:
        (WebCore::SVGList::SVGList):
        (WebCore::SVGPODListItem::create):
        (WebCore::SVGPODListItem::copy):
        (WebCore::SVGPODListItem::SVGPODListItem):
        (WebCore::SVGPODList::initialize):
        (WebCore::SVGPODList::insertItemBefore):
        (WebCore::SVGPODList::replaceItem):
        (WebCore::SVGPODList::appendItem):
        (WebCore::SVGPODList::SVGPODList):
        * svg/SVGMarkerElement.cpp:
        (WebCore::SVGMarkerElement::canvasResource):
        * svg/SVGMaskElement.cpp:
        (WebCore::SVGMaskElement::canvasResource):
        * svg/SVGNumberList.h:
        (WebCore::SVGNumberList::create):
        * svg/SVGPathElement.cpp:
        (WebCore::SVGPathElement::createSVGPathSegClosePath):
        (WebCore::SVGPathElement::createSVGPathSegMovetoAbs):
        (WebCore::SVGPathElement::createSVGPathSegMovetoRel):
        (WebCore::SVGPathElement::createSVGPathSegLinetoAbs):
        (WebCore::SVGPathElement::createSVGPathSegLinetoRel):
        (WebCore::SVGPathElement::createSVGPathSegCurvetoCubicAbs):
        (WebCore::SVGPathElement::createSVGPathSegCurvetoCubicRel):
        (WebCore::SVGPathElement::createSVGPathSegCurvetoQuadraticAbs):
        (WebCore::SVGPathElement::createSVGPathSegCurvetoQuadraticRel):
        (WebCore::SVGPathElement::createSVGPathSegArcAbs):
        (WebCore::SVGPathElement::createSVGPathSegArcRel):
        (WebCore::SVGPathElement::createSVGPathSegLinetoHorizontalAbs):
        (WebCore::SVGPathElement::createSVGPathSegLinetoHorizontalRel):
        (WebCore::SVGPathElement::createSVGPathSegLinetoVerticalAbs):
        (WebCore::SVGPathElement::createSVGPathSegLinetoVerticalRel):
        (WebCore::SVGPathElement::createSVGPathSegCurvetoCubicSmoothAbs):
        (WebCore::SVGPathElement::createSVGPathSegCurvetoCubicSmoothRel):
        (WebCore::SVGPathElement::createSVGPathSegCurvetoQuadraticSmoothAbs):
        (WebCore::SVGPathElement::createSVGPathSegCurvetoQuadraticSmoothRel):
        (WebCore::SVGPathElement::pathSegList):
        * svg/SVGPathElement.h:
        * svg/SVGPathSeg.h:
        (WebCore::SVGPathSeg::SVGPathSeg):
        * svg/SVGPathSegArc.h:
        (WebCore::SVGPathSegArcAbs::create):
        (WebCore::SVGPathSegArcRel::create):
        * svg/SVGPathSegClosePath.h:
        (WebCore::SVGPathSegClosePath::create):
        * svg/SVGPathSegCurvetoCubic.h:
        (WebCore::SVGPathSegCurvetoCubicAbs::create):
        (WebCore::SVGPathSegCurvetoCubicRel::create):
        * svg/SVGPathSegCurvetoCubicSmooth.h:
        (WebCore::SVGPathSegCurvetoCubicSmoothAbs::create):
        (WebCore::SVGPathSegCurvetoCubicSmoothRel::create):
        * svg/SVGPathSegCurvetoQuadratic.h:
        (WebCore::SVGPathSegCurvetoQuadraticAbs::create):
        (WebCore::SVGPathSegCurvetoQuadraticRel::create):
        * svg/SVGPathSegCurvetoQuadraticSmooth.h:
        (WebCore::SVGPathSegCurvetoQuadraticSmoothAbs::create):
        (WebCore::SVGPathSegCurvetoQuadraticSmoothRel::create):
        * svg/SVGPathSegLineto.h:
        (WebCore::SVGPathSegLinetoAbs::create):
        (WebCore::SVGPathSegLinetoRel::create):
        * svg/SVGPathSegLinetoHorizontal.h:
        (WebCore::SVGPathSegLinetoHorizontalAbs::create):
        (WebCore::SVGPathSegLinetoHorizontalRel::create):
        * svg/SVGPathSegLinetoVertical.h:
        (WebCore::SVGPathSegLinetoVerticalAbs::create):
        (WebCore::SVGPathSegLinetoVerticalRel::create):
        * svg/SVGPathSegList.h:
        (WebCore::SVGPathSegList::create):
        * svg/SVGPathSegMoveto.h:
        (WebCore::SVGPathSegMovetoAbs::create):
        (WebCore::SVGPathSegMovetoRel::create):
        * svg/SVGPatternElement.cpp:
        (WebCore::SVGPatternElement::SVGPatternElement):
        (WebCore::SVGPatternElement::canvasResource):
        * svg/SVGPointList.h:
        (WebCore::SVGPointList::create):
        * svg/SVGPolyElement.cpp:
        (WebCore::SVGPolyElement::points):
        * svg/SVGPreserveAspectRatio.cpp:
        (WebCore::SVGPreserveAspectRatio::SVGPreserveAspectRatio):
        * svg/SVGPreserveAspectRatio.h:
        (WebCore::SVGPreserveAspectRatio::create):
        * svg/SVGRenderingIntent.h:
        (WebCore::SVGRenderingIntent::SVGRenderingIntent):
        * svg/SVGStringList.h:
        (WebCore::SVGStringList::create):
        * svg/SVGStyledTransformableElement.cpp:
        (WebCore::SVGStyledTransformableElement::SVGStyledTransformableElement):
        * svg/SVGTests.cpp:
        (WebCore::SVGTests::requiredFeatures):
        (WebCore::SVGTests::requiredExtensions):
        (WebCore::SVGTests::systemLanguage):
        * svg/SVGTextElement.cpp:
        (WebCore::SVGTextElement::SVGTextElement):
        * svg/SVGTextPositioningElement.cpp:
        (WebCore::SVGTextPositioningElement::SVGTextPositioningElement):
        * svg/SVGTransformList.h:
        (WebCore::SVGTransformList::create):
        * svg/SVGUnitTypes.h:
        (WebCore::SVGUnitTypes::SVGUnitTypes):
        * svg/SVGViewElement.cpp:
        (WebCore::SVGViewElement::viewTarget):
        * svg/SVGViewSpec.cpp:
        (WebCore::SVGViewSpec::SVGViewSpec):
        * svg/graphics/SVGPaintServer.cpp:
        (WebCore::SVGPaintServer::sharedSolidPaintServer):
        * svg/graphics/SVGPaintServer.h:
        * svg/graphics/SVGPaintServerGradient.h:
        (WebCore::SVGPaintServerGradient::SharedStopCache::create):
        (WebCore::SVGPaintServerGradient::SharedStopCache::SharedStopCache):
        * svg/graphics/SVGPaintServerLinearGradient.h:
        (WebCore::SVGPaintServerLinearGradient::create):
        * svg/graphics/SVGPaintServerPattern.h:
        (WebCore::SVGPaintServerPattern::create):
        * svg/graphics/SVGPaintServerRadialGradient.h:
        (WebCore::SVGPaintServerRadialGradient::create):
        * svg/graphics/SVGPaintServerSolid.h:
        (WebCore::SVGPaintServerSolid::create):
        * svg/graphics/SVGResource.cpp:
        (WebCore::SVGResource::SVGResource):
        * svg/graphics/SVGResource.h:
        * svg/graphics/SVGResourceClipper.h:
        (WebCore::SVGResourceClipper::create):
        * svg/graphics/SVGResourceMarker.h:
        (WebCore::SVGResourceMarker::create):
        * svg/graphics/SVGResourceMasker.h:
        (WebCore::SVGResourceMasker::create):
        * svg/graphics/cg/SVGPaintServerGradientCg.cpp:
        (WebCore::SVGPaintServerGradient::updateQuartzGradientStopsCache):

2008-02-20  Darin Adler  <darin@apple.com>

        Reviewed by Sam.

        - make conversion from CSS ParseString to String and AtomicString
          automatic and remove all the explicit calls to do the conversion

        - fix CSS parsing to do fewer allocations, mostly by using the
          equalIgnoringCase function in CSSParser

        * css/CSSGrammar.y: Take out all the explicit atomicString and
        domString calls now that ParseString knows how to convert itself.

        * css/CSSParser.cpp:
        (WebCore::equal): Added.
        (WebCore::equalIgnoringCase): Allow non-lettters.
        (WebCore::ParseString::lower): Used charactersAreAllASCII.
        (WebCore::unitFromString): Use equal.
        (WebCore::CSSParser::parseValue): Removed unneeded call to domString.
        (WebCore::CSSParser::parseContent): Use equalIgnoringCase.
        (WebCore::CSSParser::parseBackgroundImage): Removed unneeded call to domString.
        (WebCore::CSSParser::parseTransitionTimingFunction): Use equalIgnoringCase.
        (WebCore::CSSParser::parseDashboardRegions): More of the same.
        (WebCore::CSSParser::parseCounterContent): Ditto.
        (WebCore::CSSParser::parseShape): Use equalIgnoringCase.
        (WebCore::CSSParser::parseFontFamily): Removed unneeded calls to domString.
        (WebCore::CSSParser::parseFontFaceSrc): More.
        (WebCore::CSSParser::parseFontFaceUnicodeRange): More.
        (WebCore::CSSParser::parseColor): Don't lowercase here -- setNamedColor now
        handles the case folding.
        (WebCore::CSSParser::parseColorFromValue): More.
        (WebCore::CSSParser::parseBorderImage): More.
        (WebCore::CSSParser::parseCounter): More.
        (WebCore::TransformOperationInfo::TransformOperationInfo): More.
        (WebCore::CSSParser::parseTransform): More.
        (WebCore::CSSParser::createCharsetRule): More.
        (WebCore::CSSParser::createImportRule): More.

        * css/CSSParser.h: Removed domString and atomicString functions.
        (WebCore::ParseString::operator String): Added. Allows conversion to String
        without an explicit function call.
        (WebCore::ParseString::operator AtomicString): Ditto.

        * css/MediaQueryExp.cpp:
        (WebCore::MediaQueryExp::MediaQueryExp): Removed a call to domString.
        * css/SVGCSSParser.cpp:
        (WebCore::CSSParser::parseSVGValue): Removed calls to domString.

        * platform/graphics/Color.cpp:
        (WebCore::findNamedColor): Call toASCIILower on each character as we copy
        it into the 8-bit character buffer to make the operation fold case.

2008-02-20  Justin Garcia  <justin.garcia@apple.com>

        Reviewed by Darin Adler.

        <rdar://problem/5694920> Typing (esp. deleting) is slower due to TOT WebCore changes

        * editing/DeleteSelectionCommand.cpp:
        (WebCore::DeleteSelectionCommand::initializeStartEnd): The common case here
        is where there are no special elements.  Avoid creating VisiblePositions in
        that case.  Additionally, this change postpones the more expensive creation
        of an upstream VisiblePosition until the last possible moment.
        (WebCore::DeleteSelectionCommand::saveTypingStyleState):
        (WebCore::DeleteSelectionCommand::calculateTypingStyleAfterDelete): Add an 
        early return for a common case: deleting characters that are all inside the 
        same text node. In that case the style at the start of the selection will 
        not change during the delete, so there is no need to save/recompute it.
        (WebCore::DeleteSelectionCommand::saveFullySelectedAnchor): Early return
        before VisiblePosition creation if the ends of the selection aren't enclosed
        by an anchor.
        * editing/TypingCommand.cpp:
        (WebCore::TypingCommand::markMisspellingsAfterTyping): Early return if spell
        checking isn't enabled.

2008-02-20  Alexey Proskuryakov  <ap@webkit.org>

        Incorporates some improvements made by Dan Bernstein.

        Reviewed by Darin.

        http://bugs.webkit.org/show_bug.cgi?id=17106
        <rdar://problem/5750722> Debug build ASSERTs on page load

        Test: fast/encoding/GBK/close-gbk-converter.html

        * platform/text/TextCodecICU.cpp:
        (WebCore::getGbkEscape): Changed to use a switch instead of a HashMap, as there
        are only four values.
        (WebCore::gbkCallbackEscape): Check the reason why the function is called, and do not attempt
        getting an escape character if it's not UCNV_UNASSIGNED.
        (WebCore::gbkCallbackSubstitute): Ditto.

2008-02-20  Alexey Proskuryakov  <ap@webkit.org>

        Build fix.

        * xml/XMLHttpRequest.cpp:
        (WebCore::isSafeRequestHeader):
        (WebCore::XMLHttpRequest::setRequestHeader):

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-19  Darin Adler  <darin@apple.com>

        Reviewed by Sam.

        - removed use of DeprecatedString for font family names

        * css/CSSFontSelector.cpp:
        (WebCore::CSSFontSelector::addFontFaceRule): Update for name change.
        * css/CSSParser.cpp:
        (WebCore::CSSParser::parseFontFamily): Update to use new appendSpaceSeparated
        function and String rather than DeprecatedString.
        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::applyProperty): Updated for name change.
        * css/FontFamilyValue.cpp:
        (WebCore::FontFamilyValue::FontFamilyValue): Replaced code using a regular
        expression with code that does the same thing more efficiently.
        (WebCore::FontFamilyValue::appendSpaceSeparated): Added.
        (WebCore::FontFamilyValue::cssText): Updated for name change.
        * css/FontFamilyValue.h: Changed DeprecatedString to String. Renamed fontName
        to familyName and parsedFontName to m_familyName. Removed unused genericFamilyType
        and m_genericFamilyType. Added appendSpaceSeparated so that m_familyName can
        be private instead of public.

2008-02-19  Darin Adler  <darin@apple.com>

        - fix build when SVG is not enabled

        * rendering/RenderTreeAsText.cpp: Added include of "TextStream.h".

2008-02-19  Anders Carlsson  <andersca@apple.com>

        Reviewed by Darin.

        Change all classes in xml/ to start out with a ref count of 1.
        
        * bindings/js/JSCustomXPathNSResolver.h:
        * bindings/js/JSXMLHttpRequest.cpp:
        (WebCore::JSXMLHttpRequest::JSXMLHttpRequest):
        * bindings/js/JSXSLTProcessor.cpp:
        (WebCore::JSXSLTProcessor::JSXSLTProcessor):
        * bindings/objc/DOMCustomXPathNSResolver.h:
        (WebCore::DOMCustomXPathNSResolver::create):
        * bindings/scripts/CodeGeneratorJS.pm:
        * bindings/scripts/CodeGeneratorObjC.pm:
        * dom/Document.cpp:
        (WebCore::Document::applyXSLTransform):
        (WebCore::Document::createExpression):
        (WebCore::Document::createNSResolver):
        (WebCore::Document::evaluate):
        * xml/DOMParser.h:
        (WebCore::DOMParser::create):
        (WebCore::DOMParser::DOMParser):
        * xml/NativeXPathNSResolver.h:
        (WebCore::NativeXPathNSResolver::create):
        * xml/XMLHttpRequest.cpp:
        (WebCore::XMLHttpRequest::XMLHttpRequest):
        * xml/XMLHttpRequest.h:
        (WebCore::XMLHttpRequest::create):
        * xml/XMLSerializer.h:
        (WebCore::XMLSerializer::create):
        (WebCore::XMLSerializer::XMLSerializer):
        * xml/XPathEvaluator.cpp:
        (WebCore::XPathEvaluator::createNSResolver):
        * xml/XPathEvaluator.h:
        (WebCore::XPathEvaluator::create):
        (WebCore::XPathEvaluator::XPathEvaluator):
        * xml/XPathExpression.cpp:
        (WebCore::XPathExpression::createExpression):
        (WebCore::XPathExpression::evaluate):
        * xml/XPathExpression.h:
        (WebCore::XPathExpression::create):
        (WebCore::XPathExpression::XPathExpression):
        * xml/XPathNSResolver.h:
        * xml/XPathResult.cpp:
        (WebCore::XPathResult::XPathResult):
        * xml/XPathResult.h:
        (WebCore::XPathResult::create):
        * xml/XPathValue.cpp:
        (WebCore::XPath::Value::modifiableNodeSet):
        * xml/XPathValue.h:
        (WebCore::XPath::ValueData::create):
        (WebCore::XPath::ValueData::ValueData):
        (WebCore::XPath::Value::Value):
        * xml/XSLTProcessor.h:
        (WebCore::XSLTProcessor::create):
        (WebCore::XSLTProcessor::XSLTProcessor):

2008-02-19  Darin Adler  <darin@apple.com>

        Reviewed by Sam.

        - Trimmed down TextStream and weaned it from DeprecatedString.

        * page/mac/WebCoreFrameBridge.mm:
        (-[WebCoreFrameBridge renderTreeAsExternalRepresentation]):
        Removed now-unneeded call to getNSString.

        * platform/text/TextStream.cpp: Removed unused functions.
        Use snprintf instead of sprintf, for better security.
        (WebCore::TextStream::release): Added.
        * platform/text/TextStream.h: Removed lots of unneeded stuff.

        * rendering/RenderTreeAsText.cpp:
        (WebCore::externalRepresentation): Changed to use String instead
        of DeprecatedString.
        * rendering/RenderTreeAsText.h: Ditto.

        * rendering/SVGRenderTreeAsText.cpp:
        (WebCore::writeSVGInlineTextBox): Use "\n" instead of endl.
        (WebCore::write): Ditto.
        (WebCore::writeRenderResources): Ditto.

2008-02-19  Justin Garcia  <justin.garcia@apple.com>

        Reviewed by Darin Adler.

        <rdar://problem/5694920> Typing (esp. deleting) is slower due to TOT WebCore changes
        
        This brings performance on the phone back to old levels.  Andre and I are doing
        some formal testing to see exactly where we stand.

        * dom/Position.cpp:
        (WebCore::enclosingBlockIgnoringEditability): Added.  This is enclosingBlock
        without the expensive editability checks. upstream and downstream can avoid 
        those because they do their own editability checking.
        (WebCore::Position::upstream):
        (WebCore::Position::downstream):

2008-02-19  Chris Fleizach  <cfleizach@apple.com>

        Reviewed by Darin.

        <rdar://problem/3663560> AXLink for a "name" (anchor) on same page should include an AXLinkedUIElementAttribute

        * bridge/mac/WebCoreAXObject.mm:
        (-[WebCoreAXObject linkedUIElement]):
        Returns the linked-to AX object (if the specified one is ignored by accessibility, returns the next un-ignored one by traversing the DOM).
        
        (-[WebCoreAXObject accessibilityAttributeNames]):
        (-[WebCoreAXObject accessibilityAttributeValue:]):
        Support NSAccessibilityLinkedUIElementsAttribute.

2008-02-19  Darin Adler  <darin@apple.com>

        Reviewed by Sam.

        - Removed old debugging aids, Node::dump, RenderObject::dump, and
          RenderObject::information, that used DeprecatedString.

        * dom/CharacterData.cpp: Removed override of Node::dump.
        * dom/CharacterData.h: Ditto.
        * dom/Element.cpp: Ditto.
        * dom/Element.h: Ditto.
        * dom/EventTargetNode.cpp: Ditto.
        * dom/EventTargetNode.h: Ditto.
        * dom/Node.cpp: Removed Node::dump.
        * dom/Node.h: Ditto.

        * rendering/RenderBlock.cpp: Removed override of RenderObject::dump.
        * rendering/RenderBlock.h: Ditto.
        * rendering/RenderFrameSet.cpp: Ditto.
        * rendering/RenderFrameSet.h: Ditto.
        * rendering/RenderObject.cpp: Removed RenderObject::dump and
        RenderObject::information.
        * rendering/RenderObject.h: Ditto.
        * rendering/RenderTable.cpp: Removed override of RenderObject::dump.
        * rendering/RenderTable.h: Ditto.
        * rendering/RenderTableCell.cpp: Ditto.
        * rendering/RenderTableCell.h: Ditto.
        * rendering/RenderTableCol.cpp: Ditto.
        * rendering/RenderTableCol.h: Ditto.
        * rendering/RenderTableSection.cpp: Ditto.
        * rendering/RenderTableSection.h: Ditto.

        * rendering/RenderTreeAsText.h: Removed unneeded include of TextStream.h
        and added forward declarations as appropriate.

        * svg/SVGSVGElement.cpp: Removed unneeded include of TextStream.h.
        * svg/graphics/SVGResourceClipper.cpp: And here.
        * svg/graphics/SVGResourceFilter.cpp: Ditto.
        * svg/graphics/filters/SVGFEBlend.cpp: Ditto.
        * svg/graphics/filters/SVGFEComponentTransfer.cpp: Ditto.
        * svg/graphics/filters/SVGFEComposite.cpp: Ditto.
        * svg/graphics/filters/SVGFEDiffuseLighting.cpp: Ditto.
        * svg/graphics/filters/SVGFEGaussianBlur.cpp: Ditto.
        * svg/graphics/filters/SVGFEImage.cpp: Ditto.
        * svg/graphics/filters/SVGFEMerge.cpp: Ditto.
        * svg/graphics/filters/SVGFEMorphology.cpp: Ditto.
        * svg/graphics/filters/SVGFEOffset.cpp: Ditto.
        * svg/graphics/filters/SVGFESpecularLighting.cpp: Ditto.
        * svg/graphics/filters/SVGFETurbulence.cpp: Ditto.
        * svg/graphics/filters/SVGFilterEffect.cpp: Ditto.

2008-02-19  Beth Dakin  <bdakin@apple.com>

        Reviewed by Sam.

        Fix for <rdar://problem/5729674> Seed: Crash in 
        RenderButton::setStyle at http://www.dinorpg.com

        Inputs should not honor first-letter.

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::updateFirstLetter):

2008-02-19  Dan Bernstein  <mitz@apple.com>

        Reviewed by Darin Adler.

        - fix <rdar://problem/5637569> CrashTracer: [REGRESSION] 620 crashes in Safari at com.apple.WebCore: WebCore::RenderBox::setStaticY + 15

        Test: fast/text/wbr-styled.html

        Changed RenderWordBreak to inherit from RenderText instead of
        RenderInline.

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::calcInlinePrefWidths):
        * rendering/RenderFlow.h:
        * rendering/RenderText.cpp:
        (WebCore::RenderText::renderName):
        (WebCore::RenderText::isTextFragment):
        (WebCore::RenderText::isWordBreak):
        * rendering/RenderText.h:
        * rendering/RenderWordBreak.cpp:
        (WebCore::RenderWordBreak::RenderWordBreak):
        * rendering/RenderWordBreak.h:
        * rendering/bidi.cpp:
        (WebCore::RenderBlock::findNextLineBreak):

2008-02-19  Anders Carlsson  <andersca@apple.com>

        Reviewed by Darin.

        * WebCore.base.exp:
        * loader/mac/LoaderNSURLExtras.h:
        * loader/mac/LoaderNSURLExtras.m:
        Move unused functions to WebKit (where they are used)
        
        (vectorContainsString):
        Use const references.
        
        * platform/mac/WebCoreSystemInterface.h:
        * platform/mac/WebCoreSystemInterface.mm:
        Remove wkNSURLProtocolClassForReqest.
        
2008-02-19  Justin Garcia  <justin.garcia@apple.com>

        Reviewed by Darin Adler.

        <rdar://problem/5694920> Typing (esp. deleting) is slower due to TOT WebCore 
        
        These changes bring deleting performance back to old levels on the phone
        except for deleting the first space to the right of a word, which we are
        still working on.

        * dom/Position.cpp:
        (WebCore::Position::upstream): Avoid the use of enclosingBlock when determining
        if we have left the original enclosing block or entered a new one, and avoid
        rootEditableElement for determining if we have changed editability.  These
        operations are expensive.
        (WebCore::Position::downstream): Ditto.

2008-02-19  Darin Adler  <darin@apple.com>

        Rubber stamped by Anders.

        - removed explicit initialization to 1 for RefCounted; that's now the default

        * loader/ResourceLoader.cpp:
        (WebCore::ResourceLoader::ResourceLoader): Removed RefCounted initializer.
        * platform/network/ResourceHandle.cpp:
        (WebCore::ResourceHandle::ResourceHandle): Ditto.
        * platform/text/StringImpl.cpp:
        (WebCore::StringImpl::StringImpl): Ditto.

2008-02-18  Anders Carlsson  <andersca@apple.com>

        Reviewed by Darin.

        Make ResourceLoader and ResourceHandle start out with a refcount of 1.

        * loader/MainResourceLoader.cpp:
        (WebCore::MainResourceLoader::create):
        * loader/NetscapePlugInStreamLoader.cpp:
        (WebCore::NetscapePlugInStreamLoader::create):
        * loader/ResourceLoader.cpp:
        (WebCore::ResourceLoader::ResourceLoader):
        * loader/SubresourceLoader.cpp:
        (WebCore::SubresourceLoader::create):
        * platform/network/ResourceHandle.cpp:
        (WebCore::ResourceHandle::ResourceHandle):
        (WebCore::ResourceHandle::create):

2008-02-19  Alp Toker  <alp@atoker.com>

        Reviewed by Mark Rowe.

        http://bugs.webkit.org/show_bug.cgi?id=16863
        [GTK] tab focusing doesn't work

        GDK_MOD2_MASK doesn't always mean meta so we can't use it to identify
        the meta key state.

        Use GDK_META_MASK where available, otherwise do not support the meta
        key. This matches the behaviour of other applications.

        Also add a comment noting that the platform event constructors need to
        be kept in sync (it's not obvious that there are multiple places that
        check the key state).

        * platform/gtk/KeyEventGtk.cpp:
        (WebCore::PlatformKeyboardEvent::PlatformKeyboardEvent):
        * platform/gtk/MouseEventGtk.cpp:
        (WebCore::PlatformMouseEvent::PlatformMouseEvent):
        * platform/gtk/WheelEventGtk.cpp:
        (WebCore::PlatformWheelEvent::PlatformWheelEvent):

2008-02-18  Brady Eidson  <beidson@apple.com>

        Reviewed by Sam Weinig's white rhino tusk stamp

        SQLiteTransaction::stop() should also reset the transaction-in-progress flag in its parent SQLiteDatabase

        * platform/sql/SQLiteTransaction.cpp:
        (WebCore::SQLiteTransaction::stop):

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  Darin Adler  <darin@apple.com>

        Reviewed by Sam.

        - reduce use of DeprecatedString and memory allocations in processing of CSS
        - remove unnecessary double -> float -> double trip in the CSS parser
        - cleaned up names and structure in CSS grammar

        * css/CSSGrammar.y: Remove getPropertyID and getValueID. Both are now in CSSParser.cpp
        instead, and they now work on ParseString and String objects and don't require the caller
        to put the string into a char*. Gave members of the %union more sensible names, removed
        duplicates, and sorted into a logical order. Put the %expect back in, rather than leaving
        it commented out.
        * css/CSSParser.cpp:
        (WebCore::equalIgnoringCase): Added.
        (WebCore::hasPrefix): Added.
        (WebCore::CSSParser::parseTransitionProperty): Changed to call the new cssPropertyID,
        which obviates the need to call lower() and utf8() or to allocate memory at all. Also
        used equalIgnoringCase rather than putting the value into a String just to compare it.
        (WebCore::CSSParser::lex): Replaced convertASCIIToFloat with charactersToDouble. This change
        along with the CSSGrammar.y change, removes the double -> float -> double round trip, and
        affects the result of one layout test.
        (WebCore::cssPropertyID): Added. Gets the property ID from the gperf hash table, but
        without allocating any memory.
        (WebCore::cssValueKeywordID): Ditto.
        * css/CSSParser.h: Removed declaration for deprecatedString function (now used only in
        CSSParser.cpp; soon to be deleted). Added cssPropertyID and cssValueKeywordID functions.

        * css/CSSStyleDeclaration.cpp:
        (WebCore::CSSStyleDeclaration::getPropertyCSSValue): Call cssPropertyID instead of propertyID.
        (WebCore::CSSStyleDeclaration::getPropertyValue): Ditto.
        (WebCore::CSSStyleDeclaration::getPropertyPriority): Ditto.
        (WebCore::CSSStyleDeclaration::getPropertyShorthand): Ditto.
        (WebCore::CSSStyleDeclaration::isPropertyImplicit): Ditto.
        (WebCore::CSSStyleDeclaration::setProperty): Ditto.
        (WebCore::CSSStyleDeclaration::removeProperty): Ditto.
        (WebCore::CSSStyleDeclaration::isPropertyName): Ditto.
        * css/CSSStyleDeclaration.h: Removed unnecessary includes, unnecessary Noncopyable boilerplate,
        and the getPropertyID function declaration along with its associated apology comment.

        * css/makevalues.pl: Generate constants instead of macros for CSS value numbers (but not an
        enumeration, like properties, since you rarely have any reason to handle all values, but
        often have a reason to handle all properties). Renamed the constant for the number of CSS
        value keywords from CSS_VAL_TOTAL to numCSSValueKeywords, and added maxCSSValueKeywordLength.

        * platform/text/String.cpp:
        (WebCore::charactersToDouble): Made this function more efficient by using a stack buffer
        rather than a CString.

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  Darin Adler  <darin@apple.com>

        Reviewed by Sam.

        * bindings/js/JSCSSStyleDeclarationCustom.cpp:
        (WebCore::hasCSSPropertyNamePrefix): Added.
        (WebCore::cssPropertyName): Reimplement to not use DeprecatedString. Also made faster
        by using a Vector<UChar> and eliminating all the string operations.

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  Samuel Weinig  <sam@webkit.org>

        Reviewed by Geoff Garen.

        Fix for http://bugs.webkit.org/show_bug.cgi?id=17419
        Remove CompatMode from JavaScriptCore as it is never set to anything other than NativeMode

        * bindings/js/kjs_proxy.cpp:
        (WebCore::KJSProxy::initScript):

2008-02-18  Alp Toker  <alp@atoker.com>

        Reviewed by Mark Rowe.

        http://bugs.webkit.org/show_bug.cgi?id=17381
        [CURL] Regression: data URL parsing broken after DeprecatedString removal (Acid2)

        This patch resolves the regression for the GTK+ port.

        * platform/network/curl/ResourceHandleManager.cpp:
        (WebCore::parseDataUrl):

2008-02-18  Darin Adler  <darin@apple.com>

        Reviewed by Sam.

        * platform/network/win/ResourceHandleWin.cpp:
        (WebCore::ResourceHandle::onHandleCreated): Use String instead of DeprecatedString.
        (WebCore::ResourceHandle::start): Ditto.

2008-02-18  Darin Adler  <darin@apple.com>

        Reviewed by Sam.

        * platform/network/win/CookieJarWin.cpp:
        (WebCore::setCookies): Use String instead of DeprecatedString.
        (WebCore::cookies): Ditto.

2008-02-18  Darin Adler  <darin@apple.com>

        Reviewed by Sam.

        - removed use of DeprecatedString in the Color class

        * platform/graphics/Color.cpp:
        (WebCore::Color::parseHexColor): Streamlined logic a bit with early returns.
        Used toASCIIHexValue a character at a time rather than using toIntStrict
        in base 16 mode.
        (WebCore::findNamedColor): Added. Uses a fixed-size char buffer to look up
        a color using the gperf-generated findColor function. Saves a memory allocation
        vs. the old version that called DeprecatedString::latin1().
        (WebCore::Color::setNamedColor): Changed to use findNamedColor.

2008-02-18  Darin Adler  <darin@apple.com>

        Reviewed by Sam.

        * editing/htmlediting.cpp:
        (WebCore::stringWithRebalancedWhitespace): Changed to use String instead of
        DeprecatedString.

2008-02-18  Darin Adler  <darin@apple.com>

        Reviewed by Sam.

        * editing/SelectionController.cpp:
        (WebCore::SelectionController::debugRenderer): Changed to use String instead of
        DeprecatedString.

2008-02-18  Darin Adler  <darin@apple.com>

        Reviewed and landed by Sam.

        Remove DeprecatedStringList.

        * GNUmakefile.am:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * WebCoreSources.bkl:
        * editing/markup.cpp:
        * platform/DeprecatedStringList.cpp: Removed.
        * platform/DeprecatedStringList.h: Removed.
        * platform/mac/DeprecatedStringListMac.mm: Removed.

2008-02-18  Darin Adler  <darin@apple.com>

        Reviewed by Sam.

        * css/CSSPrimitiveValueMappings.h: Add default cases to all the switch statements.
        This will ease the way some day if we decide to use an enum instead of int; otherwise
        we'll have a ton of "unhandled enum value" warnings here.

2008-02-18  Alp Toker  <alp@atoker.com>

        Build fix for GTK+ < 2.10. Fall back to simple text clipboard copy
        with older GTK+ versions for now.

        * platform/gtk/PasteboardGtk.cpp:
        (WebCore::Pasteboard::writeSelection):

2008-02-18  Darin Adler  <darin@apple.com>

        Reviewed by Sam.

        * WebCore.base.exp: Export a couple of WebCore::String functions we plan to use
        in the future in WebKit.

2008-02-18  Darin Adler  <darin@apple.com>

        Reviewed by Sam.

        * DerivedSources.make: Added the scripts to the ENABLE_SVG versions of the rules
        for CSSPropertyNames.h and CSSValueKeywords.h. Somehow that got left out, so the
        files would not be regenerated if the scripts were changed (but would if SVG was
        disabled).

2008-02-18  Alexey Proskuryakov  <ap@webkit.org>

        Suggested by Darin.

        * platform/KURL.h: (WebCore::KURL::operator const String&): Added, to avoid unexpected
        conversion via UString (as in bug 17418).

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-18  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Darin.

        http://bugs.webkit.org/show_bug.cgi?id=17418
        REGRESSION: Assertion failure dragging image (JSLock::lockCount() > 0)

        * platform/win/ClipboardWin.cpp:
        (WebCore::ClipboardWin::declareAndWriteDragImage): Explicitly convert from KURL to String,
        as an implicit conversion uses UString and thus needs a JSLock.

2008-02-17  Sam Weinig  <sam@webkit.org>

        Roll out r30360.

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::changeLocation):

2008-02-17  Sam Weinig  <sam@webkit.org>

        Mac build fix.

        * WebCore.xcodeproj/project.pbxproj:

2008-02-17  Alp Toker  <alp@atoker.com>

        Attempt to fix the Wx build (has been broken all weekend).

        Stub out some graphics functions.

        * platform/graphics/wx/GraphicsContextWx.cpp:
        (WebCore::GraphicsContext::beginPath):
        (WebCore::GraphicsContext::addPath):
        * platform/graphics/wx/PathWx.cpp:
        (WebCore::Path::isEmpty):

2008-02-17  Julien Chaffraix  <julien.chaffraix@gmail.com>

        Reviewed by Alexey Proskuryakov.

        http://bugs.webkit.org/show_bug.cgi?id=16989
        bug 16989 : Add send() flag checks in XmlHttpRequest

        Splitted XmlHttpRequest::abort into abort (called from JavaScript) and internalAbort that
        perform the cancellation and is called mainly from internal methods.

        Tests: http/tests/xmlhttprequest/xmlhttprequest-abort-readyState-shouldDispatchEvent.html
               http/tests/xmlhttprequest/xmlhttprequest-abort-readyState-shouldNotDispatchEvent.html
               http/tests/xmlhttprequest/xmlhttprequest-test-send-flag.html

        * xml/XMLHttpRequest.cpp:
        (WebCore::XMLHttpRequest::open): Now call internalAbort() and moved readyState change into method
        (WebCore::XMLHttpRequest::send): Added m_loader check
        (WebCore::XMLHttpRequest::abort): Now update readyState and clear the request headers as specified
        in the spec

        (WebCore::XMLHttpRequest::internalAbort): Perform cancellation internal operations (no readyState update)
        (WebCore::XMLHttpRequest::setRequestHeader): Added m_loader check

        (WebCore::XMLHttpRequest::processSyncLoadResults): Now call internalAbort() instead of abort()
        (WebCore::XMLHttpRequest::willSendRequest): Ditto
        (WebCore::XMLHttpRequest::cancelRequests): Ditto
        (WebCore::XMLHttpRequest::detachRequests): Ditto
        * xml/XMLHttpRequest.h: Added the private internalAbort method

2008-02-17  Sam Weinig  <sam@webkit.org>

        Reviewed by Dan Bernstein.

        Fix for http://bugs.webkit.org/show_bug.cgi?id=17365
        document.createEvent("MessageEvent") throws NOT_SUPPORTED_ERR

        - Updated fast/events/event-instanceof.html to test document.createEvent("MessageEvent").

        * DerivedSources.make:
        Generate Objective-C binding for DOMProgressEvent which was missing.

        * WebCore.xcodeproj/project.pbxproj:
        Add missing DOMProgressEvent files to the project.

        * bindings/js/JSEventCustom.cpp:
        (WebCore::toJS):
        Clean up and add case for SVGZoomEvent that was missing.

        * bindings/objc/DOMEvents.mm:
        (+[DOMEvent _wrapEvent:WebCore::]):
        Clean up and add cases for ProgressEvent and MessageEvent that were missing.

        * dom/Document.cpp:
        (WebCore::Document::createEvent):
        Add case for MessageEvent.

2008-02-17  Adam Treat  <treat@kde.org>

        Reviewed by Eric Seidel.

        http://bugs.webkit.org/show_bug.cgi?id=17008
        Meta refresh does not work with cache turned off

        Fix for issue noticed on http://adserver.vivox.com/2

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::changeLocation):

2008-02-17  Alp Toker  <alp@atoker.com>

        Reviewed by Sam Weinig.

        Fix for change made in r30355. Issue noticed by İsmail Dönmez.

        Verify SSL certs by default, but allow checks to be disabled with an
        environment variable (WEBKIT_IGNORE_SSL_ERRORS) for now.

        * platform/network/curl/ResourceHandleManager.cpp:
        (WebCore::ResourceHandleManager::startJob):

2008-02-17  Bin Chen  <binary.chen@gmail.com>

        Reviewed by Alp Toker.

        http://bugs.webkit.org/show_bug.cgi?id=17404
        Bug 17404: curl certification problem

        Disable SSL cert verification until we have a way of distributing
        certs and/or reporting SSL errors to the user.

        * platform/network/curl/ResourceHandleManager.cpp:
        (WebCore::ResourceHandleManager::startJob):

2008-02-17  Alp Toker  <alp@atoker.com>

        Reviewed by Mark Rowe.

        DevHelp fails to load local files; URL truncated by one character.

        Fix a file:// URL regression introduced in KURL.cpp r30243.

        * platform/KURL.cpp:
        (WebCore::KURL::KURL):

2008-02-17  Dan Bernstein  <mitz@apple.com>

        Reviewed by Darin Adler.

        - fix http://bugs.webkit.org/show_bug.cgi?id=17033
          <rdar://problem/5709315> REGRESSION: Really long <option> causes unnecessary page scroll bars to accommodate content

        Test: fast/forms/control-clip-overflow.html

        * rendering/RenderFlow.cpp:
        (WebCore::RenderFlow::lowestPosition): Account for control clipping.
        (WebCore::RenderFlow::rightmostPosition): Ditto.
        (WebCore::RenderFlow::leftmostPosition): Ditto.

2008-02-16  Oliver Hunt  <oliver@apple.com>

        Reviewed by Eric S.

        Bug 17269: Deobfuscate CanvasRenderingContext2D.cpp

        Use cross-platform code to determine the dirty rects for
        fill and stroke operations

        * html/CanvasRenderingContext2D.cpp:
        (WebCore::CanvasRenderingContext2D::fill):
        (WebCore::CanvasRenderingContext2D::stroke):
          Added a FIXME as code inspection shows a trivial under-painting
          bug, although we currently ignore dirty rect tracking on canvas
          and repaint the whole thing anyway.
        (WebCore::CanvasRenderingContext2D::fillRect):

2008-02-16  Sam Weinig  <sam@webkit.org>

        Reviewed by Darin Adler.

        Take another step in the direction of getting rid of DeprecatedString
        by moving all the to{NumericType} off of it.

        - Create free functions that take a UChar* buffer and length to do
          the string-to-number conversions.  This allows us to avoid two allocations
          if we don't already have a String and is consistent with the design we would
          like going forward.
        - Since the toInt (and family) functions on DeprecatedString were slightly
          different than the ones on String (they didn't allow trailing garbage),
          an extra set of 'Strict' toInt functions were added that have this behavior.

        * platform/graphics/Color.cpp:
        (WebCore::Color::parseHexColor):
        * platform/text/PlatformString.h:
        * platform/text/String.cpp:
        (WebCore::String::percentage):
        (WebCore::String::toIntStrict):
        (WebCore::String::toUIntStrict):
        (WebCore::String::toInt64Strict):
        (WebCore::String::toUInt64Strict):
        (WebCore::String::toUInt):
        (WebCore::String::toDouble):
        (WebCore::isCharacterAllowedInBase):
        (WebCore::toIntegralType):
        (WebCore::lengthOfCharactersAsInteger):
        (WebCore::charactersToIntStrict):
        (WebCore::charactersToUIntStrict):
        (WebCore::charactersToInt64Strict):
        (WebCore::charactersToUInt64Strict):
        (WebCore::charactersToInt):
        (WebCore::charactersToUInt):
        (WebCore::charactersToInt64):
        (WebCore::charactersToUInt64):
        (WebCore::charactersToDouble):
        (WebCore::charactersToFloat):
        * platform/text/StringImpl.cpp:
        (WebCore::parseLength):
        (WebCore::StringImpl::toIntStrict):
        (WebCore::StringImpl::toUIntStrict):
        (WebCore::StringImpl::toInt64Strict):
        (WebCore::StringImpl::toUInt64Strict):
        (WebCore::StringImpl::toInt):
        (WebCore::StringImpl::toUInt):
        (WebCore::StringImpl::toInt64):
        (WebCore::StringImpl::toUInt64):
        (WebCore::StringImpl::toDouble):
        (WebCore::StringImpl::toFloat):
        * platform/text/StringImpl.h:
        * svg/SVGAnimationElement.cpp:
        (WebCore::SVGAnimationElement::parseClockValue):
        * svg/SVGFETurbulenceElement.cpp:
        (WebCore::SVGFETurbulenceElement::parseMappedAttribute):

2008-02-16  Dan Bernstein  <mitz@apple.com>

        Reviewed by Sam Weinig.

        - fix fixed-pitch font measurement of control characters that render
          as zero-width space

        Test: fast/text/fixed-pitch-control-characters.html

        * rendering/RenderText.cpp:
        (WebCore::RenderText::widthFromCache):

2008-02-16  Kevin Ollivier  <kevino@theolliviers.com>

        wx build fix.

        * platform/graphics/wx/GraphicsContextWx.cpp:
        (WebCore::GraphicsContext::drawImage):

2008-02-16  Jan Michael Alonzo  <jmalonzo@unpluggable.com>

        Reviewed by Alp Toker.

        Cross document messaging GTK+/autotools build fix.

        * GNUmakefile.am:

2008-02-15  Oliver Hunt  <oliver@apple.com>

        Build fix for Qt and Cairo builds

        * platform/graphics/cairo/GraphicsContextCairo.cpp:
        (WebCore::GraphicsContext::drawImage):
        * platform/graphics/qt/GraphicsContextQt.cpp:

2008-02-15  Oliver Hunt  <oliver@apple.com>

        Reviewed by Dan B.

        Bug 17269: Deobfuscate CanvasRenderingContext2D.cpp
        Refactor CanvasRenderingContext2D::drawImage(HTMLCanvasElement) to remove evil ifdefs

        Add logic draw(ImageBuffer*) method to GraphicsContext to handle
        painting the source canvas content.

        * html/CanvasRenderingContext2D.cpp:
        (WebCore::CanvasRenderingContext2D::drawImage):
        * html/HTMLCanvasElement.cpp:
        (WebCore::HTMLCanvasElement::buffer):
        * html/HTMLCanvasElement.h:
        * platform/graphics/GraphicsContext.h:
        * platform/graphics/cairo/GraphicsContextCairo.cpp:
        (WebCore::GraphicsContext::drawImage):
        * platform/graphics/cg/GraphicsContextCG.cpp:
        (WebCore::GraphicsContext::paintBuffer):
        (WebCore::GraphicsContext::drawImage):
        * platform/graphics/qt/GraphicsContextQt.cpp:
        (WebCore::GraphicsContext::drawImage):

2008-02-15  Kevin Ollivier  <kevino@theolliviers.com>

        Reviewed by David Hyatt.

        Using GetNativeFontInfoDesc() to generate the hash value was
        leading to duplicate entries in the HashMap. Use the font object's
        pointer instead.

        http://bugs.webkit.org/show_bug.cgi?id=17371

        * platform/graphics/wx/FontPlatformData.h:
        (WebCore::FontPlatformData::computeHash):

2008-02-15  Ada Chan  <adachan@apple.com>

        When parsing url we get from a CFURLRef, we need to null terminate 
        the string for the case when url ends with a '/'.

        Reviewed by Darin.

        * platform/cf/KURLCFNet.cpp:
        (WebCore::KURL::KURL):

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-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-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-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-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-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 KSJProxy 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-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  Dan Bernstein  <mitz@apple.com>

        Reviewed by Dave Hyatt.

        - fix http://bugs.webkit.org/show_bug.cgi?id=17306
          <rdar://problem/5737923> Transitions between styles that have different transition-* properties behave inconsistently

        * manual-tests/transitions.html: Added.
        * page/AnimationController.cpp:
        (WebCore::CompositeImplicitAnimation::animate): Changed to use the
        transition properties of the current style rather than the target style.
        (WebCore::AnimationControllerPrivate::get): Changed to not create an
        animation if the style does not have transitions.
        (WebCore::AnimationController::updateImplicitAnimations): Added code to
        return the target style if the current style is not animating.
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::setAnimatableStyle): Changed to call
        updateImplicitAnimations() even if the current style does not have
        transitions, because we may be animating out of a style that had them.

2008-02-15  Alexey Proskuryakov  <ap@webkit.org>

        Rubber-stamped by Darin.

        Remove an obsolete WebCore readme file.

        * README: Removed.

2008-02-15  Sam Weinig  <sam@webkit.org>

        Reviewed by Darin Adler.

        Remove more uses of DeprecatedString in preparation of getting rid of it.

        * bridge/mac/WebCoreScriptDebugger.mm:
        * css/CSSCursorImageValue.cpp:
        (WebCore::isSVGCursorIdentifier):
        (WebCore::CSSCursorImageValue::updateIfSVGCursorIsUsed):
        * css/CSSStyleSelector.h:
        * dom/Element.cpp:
        (WebCore::Element::dump):
        (WebCore::Element::formatForDebugger):
        * dom/Position.cpp:
        (WebCore::Position::debugPosition):
        (WebCore::Position::formatForDebugger):
        * dom/Range.cpp:
        (WebCore::Range::formatForDebugger):
        * dom/Text.cpp:
        (WebCore::Text::formatForDebugger):
        * editing/Selection.cpp:
        (WebCore::Selection::debugPosition):
        (WebCore::Selection::formatForDebugger):
        * editing/SelectionController.cpp:
        (WebCore::SelectionController::debugRenderer):
        * editing/VisiblePosition.cpp:
        (WebCore::VisiblePosition::debugPosition):
        * html/HTMLTokenizer.cpp:
        (WebCore::HTMLTokenizer::scriptHandler):
        (WebCore::HTMLTokenizer::parseTag):
        (WebCore::HTMLTokenizer::processToken):
        (WebCore::HTMLTokenizer::notifyFinished):
        * svg/SVGFontFaceElement.cpp:
        (WebCore::mapAttributeToCSSProperty):

2008-02-15  Adam Roben  <aroben@apple.com>

        * bindings/scripts/CodeGenerator.pm: Touch this to force bindings to
        regenerate.

2008-02-15  Adam Roben  <aroben@apple.com>

        Try to fix Qt/GTK+ builds

        * WebCore.pro: Remove MessageEvent.{idl,cpp} from the unconditional
        parts of this file.

2008-02-15  Darin Adler  <darin@apple.com>

        - another Qt build fix

        * platform/qt/KURLQt.cpp:
        (WebCore::KURL::operator QUrl): Use the characters directly, not ascii().
        Eliminate references to urlString.

2008-02-15  Darin Adler  <darin@apple.com>

        - another Qt build fix

        * platform/qt/ClipboardQt.cpp:
        (WebCore::ClipboardQt::declareAndWriteDragImage): Use KURL instead of String.

2008-02-14  Darin Adler  <darin@apple.com>

        - another round of build fixes

        * platform/KURL.cpp:
        (WebCore::appendEncodedHostname): Fix spelling (strLen, not strlen).
        * platform/network/curl/ResourceHandleManager.cpp:
        (WebCore::parseDataUrl): Fix a ".." typo and call data instead of characters.

2008-02-14  Darin Adler  <darin@apple.com>

        - added back accidentally-removed files

        * platform/DeprecatedStringList.cpp: Copied from platform/DeprecatedStringList.cpp.
        * platform/DeprecatedStringList.h: Copied from platform/DeprecatedStringList.h.
        * platform/mac/DeprecatedStringListMac.mm: Copied from platform/mac/DeprecatedStringListMac.mm.

2008-02-14  Darin Adler  <darin@apple.com>

        - more build fixes

        * platform/KURL.cpp:
        (WebCore::appendEncodedHostname): Use String to make a QString.
        * platform/network/cf/ResourceRequest.h:
        (WebCore::ResourceRequest::ResourceRequest): Removed a stray deprecatedString() call.
        * platform/network/curl/ResourceHandleManager.cpp:
        (WebCore::parseDataUrl): Updated to String rather than DeprecatedString functions.

2008-02-14  Darin Adler  <darin@apple.com>

        - next Qt build fix

        * platform/network/qt/ResourceRequest.h:
        (WebCore::ResourceRequest::ResourceRequest): Removed a stray deprecatedString() call.

2008-02-14  Darin Adler  <darin@apple.com>

        - another build fix

        * platform/network/curl/ResourceRequest.h:
        (WebCore::ResourceRequest::ResourceRequest): Removed a stray deprecatedString() call.

2008-02-14  Darin Adler  <darin@apple.com>

        - first Qt build fix

        * dom/XMLTokenizer.cpp:
        (WebCore::XMLTokenizer::endElementNs): Added a missing string() call.

2008-02-14  Darin Adler  <darin@apple.com>

        Reviewed by Eric Seidel.

        Based on work by Brett Wilson <brettw@chromium.org>

        - fix http://bugs.webkit.org/show_bug.cgi?id=16538
          KURL should use String instead of DeprecatedString

        - fix http://bugs.webkit.org/show_bug.cgi?id=16485
          DocLoader::checkForReload will crash if the URL isNull
          and a similar problem in IconDatabase

        - fix http://bugs.webkit.org/show_bug.cgi?id=16487
          KURL doesn't preserve isNull when constructed with a DeprecatedString

        - changed completeURL and various DOM getters to return KURL, to avoid
          conversion back and forth from KURL to String

        - changed the conversion of KURL to NSURL or NSString to be automatic,
          to ease the use of KURL in Objective C DOM bindings, and eliminated
          the getNSURL function

        - because I had to visit the DOM bindings anyway, eliminated almost all
          the use of the KJS namespace for things in WebCore

        - fixed HTMLOptionElement constructor to check for undefined rather
          than size of the arguments array

        - eliminated some other unnecessary uses of DeprecatedString

        - changed String::split to take a Vector parameter instead of returning
          a Vector, for better performance

        - added a couple of missing calls to do layout in SVG image handling;
          I was able to reproduce these only because I had broken URLs for a
          while -- not sure how to reproduce them now but the changes are
          clearly needed

        Performance testing shows this to be at least a 1% speedup.

        Added a new function protocols to efficiently compare protocols
        without case errors and a blankURL function so we don't have to
        code "about:blank" in multiple places in the code and don't have to
        construct a frash KURL each time. Moved decode_string and encode_string
        out of KURL and gave them clearer names.

        Made KURL constructors explicit to highlight potentially-expensive
        operations and the poor semantics of KURL's constructor that takes
        a String.

        * WebCore.base.exp: Updated.

        * bindings/js/JSAttrCustom.cpp:
        (WebCore::JSAttr::setValue): Use protocolIs.
        * bindings/js/JSAudioConstructor.h: KJS namespace change.
        * bindings/js/JSCSSRuleCustom.cpp:
        (WebCore::toJS): Ditto.
        * bindings/js/JSCSSValueCustom.cpp:
        (WebCore::toJS): Ditto.
        * bindings/js/JSDocumentCustom.cpp:
        (WebCore::JSDocument::location): Ditto.
        (WebCore::JSDocument::setLocation): Updated for KURL change.
        (WebCore::toJS): KJS namespace change.
        * bindings/js/JSElementCustom.cpp:
        (WebCore::allowSettingSrcToJavascriptURL): Use protocolIs.
        (WebCore::JSElement::setAttribute): KJS namespace change.
        (WebCore::JSElement::setAttributeNode): Ditto.
        (WebCore::JSElement::setAttributeNS): Ditto.
        (WebCore::JSElement::setAttributeNodeNS): Ditto.
        * bindings/js/JSHTMLFrameElementCustom.cpp:
        (WebCore::allowSettingJavascriptURL): Use protocolIs.
        (WebCore::JSHTMLFrameElement::setSrc): KJS namespace change.
        (WebCore::JSHTMLFrameElement::setLocation): Ditto.
        * bindings/js/JSHTMLIFrameElementCustom.cpp:
        (WebCore::JSHTMLIFrameElement::setSrc): Use protocolIs.
        * bindings/js/JSHTMLOptionElementConstructor.cpp:
        (WebCore::JSHTMLOptionElementConstructor::JSHTMLOptionElementConstructor):
        (WebCore::JSHTMLOptionElementConstructor::construct): Cleaned up the
        structure a bit and changed checking to check for undefined rather than
        number of arguments.
        * bindings/js/JSHTMLOptionElementConstructor.h: KJS namespace change.
        * bindings/js/JSLocation.cpp:
        (WebCore::JSLocation::put): Eliminated some DeprecatedString use,
        and use protocolIs.
        (WebCore::jsLocationProtoFuncReplace): Ditto.
        (WebCore::jsLocationProtoFuncReload): Ditto.
        (WebCore::jsLocationProtoFuncAssign): Ditto.
        * bindings/js/JSLocation.h: KJS namespace change.
        * bindings/js/JSNamedNodeMapCustom.cpp:
        (WebCore::JSNamedNodeMap::canGetItemsForName): Ditto.
        (WebCore::JSNamedNodeMap::nameGetter): Ditto.
        * bindings/js/JSNamedNodesCollection.cpp:
        (WebCore::JSNamedNodesCollection::JSNamedNodesCollection): Ditto.
        * bindings/js/JSNamedNodesCollection.h: Ditto.
        * bindings/js/JSXMLHttpRequest.cpp:
        (WebCore::jsXMLHttpRequestPrototypeFunctionOpen): Removed
        DeprecatedString use.
        (WebCore::jsXMLHttpRequestPrototypeFunctionSend): Ditto.
        * bindings/js/JSXMLHttpRequest.h: Moved this class into the WebCore
        namespace.
        * bindings/js/JSXSLTProcessor.cpp: Namespace change.
        * bindings/js/JSXSLTProcessor.h: Ditto.

        * bindings/js/kjs_binding.cpp: Updated for namespace change.
        (WebCore::jsStringOrNull): Added an overload for KURL to allow DOM
        classes to return KURL even if the DOM expects a string.
        (WebCore::jsStringOrUndefined): Ditto.
        (WebCore::jsStringOrFalse): Ditto.
        * bindings/js/kjs_binding.h: Moved everything into the WebCore
        namespace.

        * bindings/js/kjs_css.h: Namespace change.
        * bindings/js/kjs_events.cpp: Removed an include.
        * bindings/js/kjs_events.h: Namespace change.
        * bindings/js/kjs_html.h: Namespace change.

        * bindings/js/kjs_navigator.cpp: Moved everything into the
        WebCore namespace.
        * bindings/js/kjs_navigator.h: Ditto.

        * bindings/js/kjs_window.cpp:
        (KJS::parseModalDialogFeatures): Updated for String::split change.
        (KJS::createWindow): Use protocolIs and removed some DeprecatedString.
        (KJS::Window::put): Ditto.
        (KJS::Window::allowsAccessFrom): Ditto.
        (KJS::windowProtoFuncOpen): Ditto.

        * bindings/objc/DOM.mm:
        (-[DOMElement _getURLAttribute:]): Removed getNSURL call.
        * bindings/objc/DOMHTML.mm:
        (-[DOMHTMLDocument _createDocumentFragmentWithMarkupString:baseURLString:]): Ditto.

        * bindings/scripts/CodeGeneratorCOM.pm: Updated includes so conversions from
        KURL will work.
        * bindings/scripts/CodeGeneratorJS.pm: Updated for namespace changes, and also
        updated includes so conversions from KURL will work.
        * bindings/scripts/CodeGeneratorObjC.pm: Updated includes so conversions from
        KURL will work.

        * bridge/mac/WebCoreAXObject.mm:
        (-[WebCoreAXObject accessibilityAttributeValue:]): Removed getNSURL call.
        Also streamlined the logic.
        (AXAttributedStringAppendText): Ditto.

        * bridge/mac/WebCoreScriptDebugger.mm:
        (toNSString): Tweaked.
        (toNSURL): Removed getNSURL call.

        * css/CSSImageValue.cpp:
        (WebCore::CSSImageValue::image): Removed DeprecatedString use.
        * css/CSSImportRule.cpp:
        (WebCore::CSSImportRule::insertedIntoParent): Ditto.
        * css/CSSParser.cpp:
        (WebCore::CSSParser::parseValue): Ditto.
        (WebCore::CSSParser::parseContent): Ditto.
        (WebCore::CSSParser::parseBackgroundImage): Ditto.
        (WebCore::CSSParser::parseFontFaceSrc): Ditto.
        (WebCore::CSSParser::parseBorderImage): Ditto.
        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::setEncodedURL): Ditto.
        (WebCore::checkPseudoState): Ditto.
        * css/CSSStyleSelector.h: Ditto.

        * css/MediaList.cpp:
        (WebCore::MediaList::setMediaText): Updated for String::split change.

        * css/StyleBase.cpp:
        (WebCore::StyleBase::baseURL): Return KURL.
        * css/StyleBase.h: DItto.

        * dom/Document.cpp:
        (WebCore::Document::~Document): Updated for namespace change.
        (WebCore::Document::documentURI): Return KURL.
        (WebCore::Document::setDocumentURI): Removed DeprecatedString use.
        (WebCore::Document::baseURI): Return KURL.
        (WebCore::Document::open): Updated to use blankURL.
        (WebCore::Document::setURL): Take KURL.
        (WebCore::Document::shouldBeAllowedToLoadLocalResources): Updated for
        change to use KURL
        (WebCore::Document::setBaseURL): Take KURL.
        (WebCore::Document::elementSheet): Updated for KURL change.
        (WebCore::Document::mappedElementSheet): Ditto.
        (WebCore::Document::processHttpEquiv): Ditto.
        (WebCore::Document::recalcStyleSelector): Removed use of
        DeprecatedString -- also noticed some dead code here!
        (WebCore::Document::setCookie): Ditto.
        (WebCore::Document::completeURL): Return KURL.
        * dom/Document.h: Use KURL instead of String in a few places.

        * dom/DocumentType.cpp:
        (WebCore::DocumentType::baseURI): Return KURL.
        * dom/DocumentType.h: Ditto.

        * dom/Element.cpp:
        (WebCore::Element::baseURI): Return KURL.
        * dom/Element.h: Ditto.

        * dom/Node.cpp:
        (WebCore::Node::setDocument): Namespace change.
        (WebCore::Node::baseURI): Return KURL.
        * dom/Node.h: Ditto.

        * dom/ProcessingInstruction.cpp:
        (WebCore::ProcessingInstruction::checkStyleSheet): Updated for KURL change.
        * dom/StyleElement.cpp:
        (WebCore::StyleElement::process): Changed to use Vector<UChar> instead of
        String for better performance.
        (WebCore::StyleElement::createSheet): Removed use of DeprecateString.
        * dom/XMLTokenizer.cpp:
        (WebCore::XMLTokenizer::endElementNs): Updated for KURL change.
        (WebCore::XMLTokenizer::end): Ditto.
        (WebCore::xmlDocPtrForString): Removed use of DeprecateString.
        * dom/XMLTokenizer.h: Ditto.

        * editing/markup.cpp: Moved appendString to PlatformString.h.
        (WebCore::appendQuotedURLAttributeValue): Use protocolIs.
        (WebCore::completeURLs): Removed DeprecatedString use.
        (WebCore::createFragmentFromMarkup): Use blankURL.
        (WebCore::fillContainerFromString): Removed DeprecatedString use.
        (WebCore::createFragmentFromText): Ditto.

        * history/HistoryItem.cpp:
        (WebCore::HistoryItem::url): Removed DeprecatedString use.
        (WebCore::HistoryItem::originalURL): Ditto.
        * history/HistoryItem.h: Removed include.

        * html/HTMLAnchorElement.cpp:
        (WebCore::HTMLAnchorElement::defaultEventHandler): Removed use of
        DeprecatedString.
        (WebCore::HTMLAnchorElement::href): Return KURL.
        (WebCore::HTMLAnchorElement::hash): Removed DeprecatedString use.
        (WebCore::HTMLAnchorElement::host): Ditto.
        (WebCore::HTMLAnchorElement::hostname): Ditto.
        (WebCore::HTMLAnchorElement::pathname): Ditto.
        (WebCore::HTMLAnchorElement::port): Ditto.
        (WebCore::HTMLAnchorElement::protocol): Ditto.
        (WebCore::HTMLAnchorElement::search): Ditto.
        (WebCore::HTMLAnchorElement::toString): Ditto.
        * html/HTMLAnchorElement.h: Ditto.
        * html/HTMLAppletElement.cpp:
        (WebCore::HTMLAppletElement::createRenderer): Updated for KURL change.
        * html/HTMLAreaElement.cpp:
        (WebCore::HTMLAreaElement::href): Return KURL.
        * html/HTMLAreaElement.h: Ditto.
        * html/HTMLBaseElement.cpp:
        (WebCore::HTMLBaseElement::removedFromDocument): Updated for KURL change.
        (WebCore::HTMLBaseElement::process): Removed DeprecatedString use.
        * html/HTMLBodyElement.cpp:
        (WebCore::HTMLBodyElement::parseMappedAttribute): Updated for KURL change.
        * html/HTMLEmbedElement.cpp:
        (WebCore::HTMLEmbedElement::parseMappedAttribute): Removed use of
        DeprecatedString.
        * html/HTMLEmbedElement.h: Removed DeprecatedString use.
        * html/HTMLFormElement.cpp:
        (WebCore::HTMLFormElement::formWouldHaveSecureSubmission): Use protocolIs.
        (WebCore::encodeCString): Updated for change to String::split.
        (WebCore::HTMLFormElement::dataEncoding): Ditto.
        (WebCore::HTMLFormElement::formData): Removed DeprecatedString use.
        (WebCore::HTMLFormElement::isMailtoForm): Use protocolIs.
        (WebCore::HTMLFormElement::submit): Updated for KURL change.
        (WebCore::HTMLFormElement::reset): Ditto.
        * html/HTMLFrameElementBase.cpp:
        (WebCore::HTMLFrameElementBase::isURLAllowed): Updated for KURL change
        and use equalIgnoringRef instead of doing a setRef to get the same effect.
        (WebCore::HTMLFrameElementBase::openURL): Use blankURL.
        (WebCore::HTMLFrameElementBase::location): Return KURL.
        (WebCore::HTMLFrameElementBase::src): Return KURL.
        * html/HTMLFrameElementBase.h: Ditto.
        * html/HTMLImageElement.cpp:
        (WebCore::HTMLImageElement::parseMappedAttribute): Updated for KURL change.
        (WebCore::HTMLImageElement::longDesc): Return KURL.
        (WebCore::HTMLImageElement::lowsrc): Return KURL.
        (WebCore::HTMLImageElement::src): Return KURL.
        * html/HTMLImageElement.h: Ditto. Also removed imageMap() function.
        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::src): Return KURL.
        * html/HTMLInputElement.h: Ditto.
        * html/HTMLLinkElement.cpp:
        (WebCore::HTMLLinkElement::parseMappedAttribute): Updated for KURL change.
        (WebCore::HTMLLinkElement::tokenizeRelAttribute): Updated for String::split change.
        (WebCore::HTMLLinkElement::href): Return KURL.
        * html/HTMLLinkElement.h: Ditto.
        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::src): Return KURL.
        (WebCore::HTMLMediaElement::pickMedia): Updated for KURL change.
        * html/HTMLMediaElement.h: Ditto.
        * html/HTMLObjectElement.cpp:
        (WebCore::HTMLObjectElement::isImageType): Use protocolIs.
        (WebCore::HTMLObjectElement::data): Return KURL.
        * html/HTMLObjectElement.h: Ditto.
        * html/HTMLOptGroupElement.cpp:
        (WebCore::HTMLOptGroupElement::groupLabelText): Removed DeprecatedString use.
        * html/HTMLParser.cpp:
        (WebCore::HTMLParser::reportErrorToConsole): Updated for KURL change.
        * html/HTMLScriptElement.cpp:
        (WebCore::HTMLScriptElement::insertedIntoDocument): Ditto.
        (WebCore::HTMLScriptElement::text): Changed to use Vector<UChar> instead of
        String for better performance.
        (WebCore::HTMLScriptElement::src): Return KURL.
        * html/HTMLScriptElement.h: Ditto.
        * html/HTMLSourceElement.cpp:
        (WebCore::HTMLSourceElement::src): Return KURL.
        * html/HTMLSourceElement.h: Ditto.
        * html/HTMLTableElement.cpp:
        (WebCore::HTMLTableElement::parseMappedAttribute): Updated for KURL change.
        * html/HTMLTablePartElement.cpp:
        (WebCore::HTMLTablePartElement::parseMappedAttribute): Updated for KURL change.
        * html/HTMLTextAreaElement.cpp:
        (WebCore::HTMLTextAreaElement::setValue): Removed DeprecatedString use.
        * html/HTMLTokenizer.cpp:
        (WebCore::HTMLTokenizer::scriptExecution): Ditto.
        (WebCore::HTMLTokenizer::notifyFinished): Use protocolIs.
        * html/HTMLVideoElement.cpp:
        (WebCore::HTMLVideoElement::poster): Return KURL.
        * html/HTMLVideoElement.h: Ditto.
        * html/HTMLViewSourceDocument.cpp:
        (WebCore::HTMLViewSourceDocument::addText): Updated for String::split change.

        * loader/DocLoader.cpp:
        (WebCore::DocLoader::checkForReload): Add an explicit check for an empty URL
        here to avoid problems using its string as a hash table key later.
        (WebCore::DocLoader::requestResource): Removed DeprecatedString use.

        * loader/FTPDirectoryDocument.cpp:
        (WebCore::FTPDirectoryTokenizer::createTDForFilename): Updated for KURL change.
        (WebCore::FTPDirectoryTokenizer::parseAndAppendOneLine): Removed use of
        DeprecatedString.

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::requestFrame): Use protocolIs.
        (WebCore::FrameLoader::loadSubframe): Use blankURL.
        (WebCore::FrameLoader::submitForm): Use protocolIs and removed use of
        DeprecatedString.
        (WebCore::FrameLoader::iconURL): Return KURL. Use protcolIs.
        (WebCore::FrameLoader::didOpenURL): Use protocolIs.
        (WebCore::FrameLoader::didExplicitOpen): Use blankURL.
        (WebCore::FrameLoader::executeIfJavaScriptURL): Use protocolIs.
        Update for name change to decodeURLEscapeSequences.
        (WebCore::FrameLoader::receivedFirstData): Updated for KURL changes.
        (WebCore::FrameLoader::begin): Removed DeprecatedString use.
        Renamed baseurl to baseURL. Updated to use KURL more.
        (WebCore::FrameLoader::gotoAnchor): Removed use of encodedHtmlRef
        function, which is no different from ref.
        (WebCore::FrameLoader::completeURL): Updated for KURL change.
        (WebCore::FrameLoader::scheduleLocationChange): Ditto.
        (WebCore::FrameLoader::canCachePage): Use protocolIs.
        (WebCore::FrameLoader::updatePolicyBaseURL): Update for KURL change.
        (WebCore::FrameLoader::setPolicyBaseURL): Take KURL.
        (WebCore::FrameLoader::startRedirectionTimer): Removed use of
        DeprecatedString.
        (WebCore::FrameLoader::load): Use protocolIs.
        (WebCore::FrameLoader::shouldHideReferrer): Use protocolIs.
        (WebCore::FrameLoader::shouldAllowNavigation): Updated for KURL change.
        (WebCore::FrameLoader::commitProvisionalLoad): Use blankURL.
        (WebCore::FrameLoader::open): Use protcolIs.
        (WebCore::FrameLoader::createHistoryItem): Use blankURL.
        (WebCore::FrameLoader::createJavaAppletWidget): Updated for KURL change.
        (WebCore::FrameLoader::switchOutLowBandwidthDisplayIfReady): Removed
        DeprecatedString use.
        * loader/FrameLoader.h: Ditto.

        * loader/ImageDocument.cpp:
        (WebCore::ImageDocument::createDocumentStructure): Updated for KURL change.
        * loader/PluginDocument.cpp:
        (WebCore::PluginTokenizer::createDocumentStructure): Ditto.

        * loader/icon/IconDatabase.cpp:
        (WebCore::IconDatabase::iconForPageURL): Added a check for an empty URL
        before trying to use it as a hash table key.

        * loader/icon/IconLoader.h: Tweaked includes.

        * loader/loader.cpp:
        (WebCore::Loader::servePendingRequests): Use protcolIs. Also removed some
        code to set up a local variable that is never used (and a DeprecatedString
        on to boot!).

        * loader/mac/LoaderNSURLExtras.m:
        (suggestedFilenameWithMIMEType): Removed unnecessary typecast.

        * page/ContextMenuController.cpp: Removed include.

        * page/mac/EventHandlerMac.mm:
        (WebCore::EventHandler::needsKeyboardEventDisambiguationQuirks):
        Use protocolIs.

        * page/mac/WebCoreFrameBridge.mm:
        (-[WebCoreFrameBridge URLWithAttributeString:]): Removed getNSURL call.
        (-[WebCoreFrameBridge baseURL]): Ditto.

        * platform/KURL.cpp:
        (WebCore::isSchemeFirstChar): Fixed bug in handling of values >= 0x80.
        (WebCore::isSchemeChar): Ditto.
        (WebCore::isPathSegmentEndChar): Ditto.
        (WebCore::hexDigitValue): Changed parameter type to UChar.
        (WebCore::copyASCII): Added.
        (WebCore::findFirstOf): Added.
        (WebCore::KURL::protocolIs): Added.
        (WebCore::KURL::KURL): Tightened logic up quite a bit. Changed parameter
        types from DeprecatedString to String.
        (WebCore::KURL::init): Changed parameter type to String. Preserved the
        passed-in string even if the base is invalid. Cleaned up logic to determine
        if the originalString should be pased in to the parse function. Simplified
        by calling the new parse overload that takes String in many cases.
        (WebCore::KURL::lastPathComponent): Return String.
        (WebCore::KURL::protocol): Ditto.
        (WebCore::KURL::host): Ditto.
        (WebCore::KURL::port): Changed logic to use early return for clarity.
        (WebCore::KURL::pass): Return String.
        (WebCore::KURL::user): Ditto.
        (WebCore::KURL::ref): Ditto.
        (WebCore::assertProtocolIsGood): Added.
        (WebCore::KURL::protocolIs): Added.
        (WebCore::KURL::query): Return String.
        (WebCore::KURL::path): Ditto.
        (WebCore::KURL::setProtocol): Take String.
        (WebCore::KURL::setHost): Ditto.
        (WebCore::KURL::setPort): Use String.
        (WebCore::KURL::setHostAndPort): Take String.
        (WebCore::KURL::setUser): Ditto.
        (WebCore::KURL::setPass): Ditto.
        (WebCore::KURL::setRef): Ditto.
        (WebCore::KURL::setQuery): Ditto.
        (WebCore::KURL::setPath): Ditto.
        (WebCore::KURL::prettyURL): Return String. Use Vector<UChar> to build it.
        (WebCore::decodeURLEscapeSequences): Renamed from KURL::decode_string.
        Return String. Use Vector<UChar> to build it.
        (WebCore::KURL::isLocalFile): Use protocolIs.
        (WebCore::KURL::parse): Added an overload that takes a String to replace
        the use of DeprecatedString::ascii at various call sites. Updated for
        name change (urlString -> m_string).
        (WebCore::equalIgnoringRef): Wrote a new implementation that doesn't
        do any allocation.
        (WebCore::encodeWithURLEscapeSequences): Renamed from KURL::encode_string.
        Return String.
        (WebCore::appendEncodedHostname): Added. Replaces encodeHostname and
        avoids the need to allocate a string.
        (WebCore::findHostnamesInMailToURL): Update to use findFirstOf instead of
        regular expressions.
        (WebCore::findHostnameInHierarchicalURL): Ditto.
        (WebCore::encodeHostnames): Use protocolIs and the other helpers above.
        (WebCore::encodeRelativeString): Changed to put result into a CharBuffer.
        (WebCore::substituteBackslashes): Updated to use String.
        (WebCore::KURL::copyToBuffer): Added.
        (WebCore::protocolIs): Added.
        (WebCore::blankURL): Added.
        (WebCore::KURL::print): Updated.
        * platform/KURL.h: Added a number of comments. Reorganized the header a bit.
        Made the string constructors explicit. Changed to use String instead of
        DeprecatedString. Removed encodedHTMLRef. Renamed and added a few functions.

        * platform/cf/KURLCFNet.cpp:
        (WebCore::KURL::KURL): Streamlined the logic a bit.
        (WebCore::KURL::createCFURL): Changed to use copyToBuffer.

        * platform/graphics/mac/MediaPlayerPrivateQTKit.mm:
        (WebCore::MediaPlayerPrivate::createQTMovie): Removed getNSURL call.
        Use protocolIs.
        * platform/mac/ClipboardMac.mm:
        (WebCore::ClipboardMac::declareAndWriteDragImage): Removed getNSURL call.
        * platform/mac/CookieJar.mm:
        (WebCore::cookies): Removed getNSURL call.
        (WebCore::setCookies): Removed getNSURL call.
        * platform/mac/KURLMac.mm:
        (WebCore::KURL::KURL): Streamlined the logic a bit.
        * platform/mac/PasteboardMac.mm:
        (WebCore::Pasteboard::writeURL): Removed getNSURL call.
        (WebCore::Pasteboard::writeImage): Ditto.
        * platform/mac/SSLKeyGeneratorMac.mm:
        (WebCore::signedPublicKeyAndChallengeString): Ditto.

        * platform/network/HTTPParsers.cpp:
        (WebCore::filenameFromHTTPContentDisposition): Updated for String::split.
        * platform/network/ResourceHandle.cpp:
        (WebCore::ResourceHandle::portAllowed): Use protocolIs.

        * platform/network/cf/ResourceErrorCF.cpp:
        (WebCore::ResourceError::operator CFErrorRef): Removed deprecatedString call.
        * platform/network/curl/ResourceHandleManager.cpp:
        (WebCore::headerCallback): Ditto.
        (WebCore::parseDataUrl): Use String instead of DeprecatedString.
        (WebCore::ResourceHandleManager::startJob): Updated for KURL changes.
        * platform/network/mac/ResourceErrorMac.mm:
        (WebCore::ResourceError::operator NSError*): Removed getNSURL call.
        * platform/network/mac/ResourceRequest.h:
        (WebCore::ResourceRequest::ResourceRequest): Removed DeprecatedString use.
        * platform/network/mac/ResourceRequestMac.mm:
        (WebCore::ResourceRequest::doUpdatePlatformRequest): Removed getNSURL call.
        * platform/network/mac/ResourceResponseMac.mm:
        (WebCore::ResourceResponse::nsURLResponse): Removed getNSURL call.

        * platform/qt/ClipboardQt.cpp:
        (WebCore::ClipboardQt::writeURL): Removed deprecatedString call.

        * platform/text/CString.h:
        (WebCore::CStringBuffer::length): Fixed size_t/unsigned mismatch to make it
        possible to compile this on Windows with higher warning level

        * platform/text/PlatformString.h: Updated split to modify a result parameter
        rather than returning a Vector. Added charactersAreAllASCII and an append
        function that appends a String to a Vector<UChar>.
        * platform/text/String.cpp:
        (WebCore::String::split): Updated.

        * platform/win/BString.cpp:
        (WebCore::BString::BString): Added conversion from KURL.
        * platform/win/BString.h: Ditto.

        * platform/win/ClipboardUtilitiesWin.cpp:
        (WebCore::markupToCF_HTML): Removed use of deprecatedString.
        * platform/win/ClipboardWin.cpp:
        (WebCore::filesystemPathFromUrlOrTitle): Ditto.
        (WebCore::createGlobalHDropContent): Ditto.
        (WebCore::ClipboardWin::setData): Ditto.
        (WebCore::ClipboardWin::writeRange): Ditto.
        * platform/win/PasteboardWin.cpp:
        (WebCore::Pasteboard::writeSelection): Ditto.
        * plugins/PluginStream.cpp:
        (WebCore::PluginStream::startStream): Ditto.
        (WebCore::PluginStream::destroyStream): Ditto.
        * plugins/win/PluginViewWin.cpp:
        (WebCore::scriptStringIfJavaScriptURL): Ditto.
        (WebCore::PluginView::performRequest): Ditto.
        (WebCore::PluginView::PluginView): Ditto.

        * rendering/HitTestResult.cpp:
        (WebCore::HitTestResult::absoluteImageURL): Removed DeprecatedString use.
        (WebCore::HitTestResult::absoluteLinkURL): Ditto.

        * rendering/RenderFrameSet.cpp:
        (WebCore::RenderFrameSet::layOutAxis): Fixed comment wording.
        * rendering/RenderImage.cpp:
        (WebCore::RenderImage::paintReplaced): Removed use of DeperecatedString,
        (WebCore::RenderImage::imageMap): Changed to call useMap instead of imageMap;
        both do the same thing, and the first is standard DOM.

        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::addPDFURLRect): Rewrote and streamlined to remove
        DeprecatedString use.
        * rendering/RenderObject.h: Changed addPDFURLRect to take const IntRect&.

        * rendering/RenderPartObject.cpp:
        (WebCore::isURLAllowed): Updated for KURL change and use equalIgnoringRef
        instead of doing a setRef to get the same effect.
        (WebCore::RenderPartObject::updateWidget): Updated for KURL change.

        * rendering/RenderText.cpp:
        (WebCore::charactersAreAllASCII): Moved the guts to PlatformString.h.

        * rendering/SVGRenderSupport.cpp:
        (WebCore::renderSubtreeToImage): Added missing call to do layout. I ran
        into this while doing some layout tests while URL processing was broken.

        * rendering/SVGRenderTreeAsText.h: Removed include.

        * svg/SVGImageLoader.cpp:
        (WebCore::SVGImageLoader::updateFromElement): Removed DeprecatedString use.

        * svg/graphics/SVGImage.cpp:
        (WebCore::SVGImage::draw): Added missing call to do layout. I ran
        into this while doing some layout tests while URL processing was broken.
        (WebCore::SVGImage::dataChanged): Use a null URL rather than an arbitrary
        string for the document.

        * xml/XMLHttpRequest.cpp:
        (WebCore::XMLHttpRequest::getResponseXML): Removed DeprecatedString use.
        (WebCore::XMLHttpRequest::urlMatchesDocumentDomain): Ditto.
        (WebCore::XMLHttpRequest::open): Ditto.
        (WebCore::XMLHttpRequest::send):  Namespace change.
        (WebCore::XMLHttpRequest::dropProtection): Ditto.
        * xml/XMLHttpRequest.h: Removed DeprecatedString use.

        * xml/XSLImportRule.cpp:
        (WebCore::XSLImportRule::loadSheet): Removed DeprecatedString use.
        * xml/XSLStyleSheet.cpp:
        (WebCore::XSLStyleSheet::loadChildSheets): Ditto.
        (WebCore::XSLStyleSheet::loadChildSheet): Ditto.
        * xml/XSLStyleSheet.h: Ditto.
        * xml/XSLTProcessor.cpp:
        (WebCore::docLoaderFunc): Ditto.
        (WebCore::xsltStylesheetPointer): Ditto.
        (WebCore::xmlDocPtrFromNode): Ditto.

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-14  Stephanie Lewis  <slewis@apple.com>

        Reviewed by Geoff.

        Update order files.

        * WebCore.order:

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-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-14  Alp Toker  <alp@atoker.com>

        Reviewed by Darin.

        http://bugs.webkit.org/show_bug.cgi?id=17353
        XMLTokenizer installs global libxml2 callbacks that can break client applications

        Patch by Mark Rowe (with a few changes).

        The xmlRegisterInputCallbacks/xmlRegisterOutputCallbacks done at
        init are global so we need to make sure these callbacks only get used
        by XMLTokenizer and never by libxml2 calls in user applications.

        This patch modifies the match and open functions to only apply when we
        are certain the caller is XMLTokenizer by checking globalDocLoader and
        ensuring we're on the correct thread.

        Some possible issues remain. See the bug report for details.

        * dom/XMLTokenizer.cpp:
        (WebCore::matchFunc):
        (WebCore::openFunc):
        (WebCore::createStringParser):

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-14  Adam Roben  <aroben@apple.com>

        Turn on cross-document messaging support by default

        Reviewed by Darin.

        * Configurations/WebCore.xcconfig:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:

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-14  Adam Roben  <aroben@apple.com>

        Improve the efficiency of SecurityOriginHash

        Reviewed by Alexey.

        * platform/SecurityOriginHash.h:
        (WebCore::SecurityOriginHash::hash): Now takes a const
        RefPtr<SecurityOrigin>& to reduce ref-count churn.
        (WebCore::SecurityOriginHash::equal): Ditto.

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-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.
        * plugins/win/PluginViewWin.cpp:
        (WebCore::PluginView::stop): Selectively call NPP_SetWindow.
        (WebCore::PluginView::determineQuirks): Set new quirk for VLC plug-in.

2008-02-13  Rodney Dawes  <dobey@wayofthemonkey.com>

        Reviewed by Alp Toker.

        Fix non-SVG builds.

        * css/CSSCursorImageValue.cpp:

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-13  Nikolas Zimmermann  <zimmermann@kde.org>

        Reviewed by Oliver.

        Actually fix the manual-tests/svg-cursor-changes.svg testcase.
        I only reran layout tests when fixing the last issues with the patch,
        instead of trying the manual-test :( Fixed.

        * css/CSSCursorImageValue.cpp:
        (WebCore::CSSCursorImageValue::CSSCursorImageValue):
        (WebCore::CSSCursorImageValue::~CSSCursorImageValue):
        (WebCore::CSSCursorImageValue::updateIfSVGCursorIsUsed):
        * css/CSSCursorImageValue.h:

2008-02-13  Adam Roben  <aroben@apple.com>

        Windows build fix

        * css/CSSCursorImageValue.cpp: #include MathExtras.h to get roundf.

2008-02-13  Nikolas Zimmermann  <zimmermann@kde.org>

        Reviewed by Darin & Eric.

        Fixes: http://bugs.webkit.org/show_bug.cgi?id=17258 (SVG uses erroneous cursor implementation)

        SVG cursors are not well-integrated within the CSS(3) cursor support in WebCore.
        SVGCursorElement duplicates CSSCursorImageValue functionality and inherits from
        CachedResourceClient itself, handling remote-image acquisation on its own.

        RenderStyle's CursorData class holds "IntPoint hotSpot", "CachedImage* image"
        and just for SVG a 'String cursorFragmentId' (a reference to a SVG <cursor> element, by id).

        SVG stores a reference to a SVGCursorElement, which holds a CachedImage pointer itself -
        instead of storing the CachedImage in the CursorData class, as it's supposed to be.
        Because of that several places in WebCore contain special SVG cursor handling - which
        is unneeded.

        Fix all issues by integrating within CSSCursorImageValue, remove 'String cursorFragmentId'
        from RenderStyle, kill any special SVG cursor handling in WebCore and fix dynamic attribute
        changes through DOM / SVG DOM (scripting of 'x' / 'y' / 'xlink:href' attribute). Now you
        can script the mouse cursor location using SVG - the feature anyone has waited for.

        Added manual test case: manual-tests/svg-cursor-changes.svg (no support for cursors in DRT)

        * css/CSSCursorImageValue.cpp:
        (WebCore::isSVGCursorIdentifier):
        (WebCore::resourceReferencedByCursorElement):
        (WebCore::CSSCursorImageValue::~CSSCursorImageValue):
        (WebCore::CSSCursorImageValue::updateIfNeeded):
        (WebCore::CSSCursorImageValue::image):
        * css/CSSCursorImageValue.h:
        * css/CSSImageValue.cpp:
        (WebCore::CSSImageValue::image):
        * css/CSSImageValue.h:
        * css/CSSParser.cpp:
        (WebCore::CSSParser::parseValue):
        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::applyProperty):
        * manual-tests/svg-cursor-changes.svg: Added.
        * page/EventHandler.cpp:
        (WebCore::EventHandler::selectCursor):
        * rendering/RenderStyle.cpp:
        * rendering/RenderStyle.h:
        (WebCore::CursorData::operator==):
        * svg/SVGCursorElement.cpp:
        (WebCore::SVGCursorElement::SVGCursorElement):
        (WebCore::SVGCursorElement::~SVGCursorElement):
        (WebCore::SVGCursorElement::parseMappedAttribute):
        (WebCore::SVGCursorElement::addClient):
        (WebCore::SVGCursorElement::removeClient):
        (WebCore::SVGCursorElement::svgAttributeChanged):
        * svg/SVGCursorElement.h:
        (WebCore::SVGCursorElement::isValid):

2008-02-13  Alp Toker  <alp@atoker.com>

        Reviewed by Adam Roben.

        Split out pure-cairo Font code to FontCairo.cpp.

        Part of the ongoing work to share code with the Win port.

        * GNUmakefile.am:
        * WebCore.pro:
        * platform/graphics/cairo/FontCairo.cpp: Added.
        (WebCore::Font::drawGlyphs):
        * platform/graphics/gtk/FontGtk.cpp:

2008-02-13  Kevin Ollivier <kevino@theolliviers.com>

        Reviewed by Darin Adler.

        Import wx/defs.h to keep windows.h from using ANSI functions
        (see note in file for more info) and use the 8-bit string friendly
        version of StringImpl::computeHash since we're passing it un UTF8
        string. Also, don't cache the hash result.
        
        http://bugs.webkit.org/show_bug.cgi?id=17321

        * config.h:
        * platform/graphics/wx/FontPlatformData.h:
        (WebCore::FontPlatformData::hash):
        (WebCore::FontPlatformData::computeHash):

2008-02-13  Rodney Dawes  <dobey@wayofthemonkey.com>

        Fix Bug 17220: Illogical dependency between PluginView and
        PluginDatabase
        
        <http://bugs.webkit.org/show_bug.cgi?id=17220>

        Reviewed by Adam and Darin.

        Rename PluginDatabase::createPluginView to PluginView::create, to make
        the illogical dependency between the two, logical
        Make PluginDatabase::findPlugin a public method
        Update the includes in PluginView and PluginDatabase for the change

        * plugins/PluginDatabase.h:
        * plugins/PluginView.h:
        * plugins/win/PluginDatabaseWin.cpp:
        * plugins/win/PluginViewWin.cpp:

2008-02-13  Adam Roben  <aroben@apple.com>

        Build fix

        * platform/graphics/cg/GraphicsContextCG.cpp: Added missing #include.

2008-02-13  Matt Lilek  <webkit@mattlilek.com>

        Not reviewed, build fix.

        * platform/graphics/cg/GraphicsContextCG.cpp:
        (WebCore::GraphicsContext::paintBuffer):

2008-02-13  Darin Adler  <darin@apple.com>

        - try to fix Wx build

        * platform/graphics/wx/GraphicsContextWx.cpp:
        (WebCore::GraphicsContext::paintBuffer): Added.

        * platform/graphics/cairo/GraphicsContextCairo.cpp:
        (WebCore::GraphicsContext::paintBuffer): Added missing paintingDisabled() check.
        * platform/graphics/cg/GraphicsContextCG.cpp:
        (WebCore::GraphicsContext::paintBuffer): Ditto.
        * platform/graphics/qt/GraphicsContextQt.cpp:
        (WebCore::GraphicsContext::paintBuffer): Ditto.

2008-02-13  Darin Adler  <darin@apple.com>

        - try to fix Wx build

        * platform/wx/LocalizedStringsWx.cpp: Add missing include.

2008-02-11  Darin Adler  <darin@apple.com>

        - roll out fix for <rdar://problem/5726016> REGRESSION: Xcode News window renders
          incorrectly due to visibility fix

        Removed the Xcode-specific quirk at the request of some folks on the Xcode team.

        * WebCore.base.exp: Rolled out change.
        * css/CSSMutableStyleDeclaration.cpp:
        (WebCore::CSSMutableStyleDeclaration::setProperty): Ditto.
        * page/Settings.cpp:
        (WebCore::Settings::Settings): Ditto. But keep the initialization of
        m_fontRenderingMode.
        (WebCore::Settings::setNeedsXcodeVisibilityQuirk): Removed.
        * page/Settings.h:
        (WebCore::Settings::needsXcodeVisibilityQuirk): Removed.

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-12  Bernhard Rosenkraenzer  <bero@arklinux.org>

        Reviewed by Darin.

        - fix http://bugs.webkit.org/show_bug.cgi?id=17340
          WebCore/platform/Timer.cpp fails to build with gcc 4.3

        * platform/Timer.cpp: Add include of <limits.h> since this file uses UINT_MAX.

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-12  Oliver Hunt  <oliver@apple.com>

        Endeavour to fix qt and gtk builds

        * platform/graphics/cairo/GraphicsContextCairo.cpp:
        * platform/graphics/qt/GraphicsContextQt.cpp:

2008-02-12  Oliver Hunt  <oliver@apple.com>

        Reviewed by Eric S.

        Bug 17269: Deobfuscate CanvasRenderingContext2D.cpp
        Remove ifdef's from canvas paint code

        By making GraphicsContext aware of the crossplatform ImageBuffer
        type we can migrate the ifdef-ified paint code in HTMLCanvasElement
        into platform implementations of GraphicsContext.

        * html/HTMLCanvasElement.cpp:
        (WebCore::HTMLCanvasElement::paint):
        * platform/graphics/GraphicsContext.h:
        * platform/graphics/cairo/GraphicsContextCairo.cpp:
        (WebCore::GraphicsContext::paintBuffer):
        * platform/graphics/cg/GraphicsContextCG.cpp:
        (WebCore::GraphicsContext::paintBuffer):
        * platform/graphics/qt/GraphicsContextQt.cpp:
        (WebCore::GraphicsContext::paintBuffer):

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-12  Steve Falkenburg  <sfalken@apple.com>

        Changes to support merged MIDL output.
        
        All COM interfaces are now generated to WebKit.h.
        
        Reviewed by Sam, Ada.

        * bindings/scripts/CodeGeneratorCOM.pm:

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-12  Rodney Dawes  <dobey@wayofthemonkey.com>

        Reviewed by Alp Toker.

        Add -DMAEMO_CHANGES when the hildon CONFIG option is specified
        Add hildon-1 to PKGCONFIG when hildon CONFIG option is specified

        * WebCore.pro:

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-12  Brady Eidson  <beidson@apple.com>

        Release build fix

        * storage/DatabaseTask.cpp:

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-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-12  Anders Carlsson  <andersca@apple.com>

        Build fix.
        
        * loader/ImageDocument.cpp:

2008-02-12  Anders Carlsson  <andersca@apple.com>

        Reviewed by Mitz.

        Make the code that sets the image title cross platform.

        * WebCore.xcodeproj/project.pbxproj:
        Remove ImageDocumentMac.
        
        * loader/ImageDocument.cpp:
        (WebCore::ImageTokenizer::finish):

        * loader/mac/ImageDocumentMac.h: Removed.
        * loader/mac/ImageDocumentMac.mm: Removed.
        
        * page/mac/WebCoreFrameBridge.h:
        * page/mac/WebCoreViewFactory.h:
        Move imageTitleForFilename:size from the bridge to
        the view factory.
        
        * platform/LocalizedStrings.h:
        Add imageTitle.
        
        * platform/mac/LocalizedStringsMac.mm:
        (WebCore::imageTitle):
        Have imageTitle call the view factory.
        
        * platform/qt/Localizations.cpp:
        (WebCore::imageTitle):
        * platform/wx/LocalizedStringsWx.cpp:
        (WebCore::imageTitle):
        * platform/gtk/LocalizedStringsGtk.cpp:
        (WebCore::imageTitle):
        Add stubs.
        
2008-02-12  Oliver Hunt  <oliver@apple.com>

        more Qt fixes

        * html/HTMLCanvasElement.cpp:
        (WebCore::HTMLCanvasElement::paint):

2008-02-12  Oliver Hunt  <oliver@apple.com>

        And another attempt to fixerate Qt

        * html/HTMLCanvasElement.cpp:
        (WebCore::HTMLCanvasElement::paint):

2008-02-12  Oliver Hunt  <oliver@apple.com>

        Attempt to fix Qt build

        * html/HTMLCanvasElement.h:

2008-02-11  Oliver Hunt  <oliver@apple.com>

        Reviewed by Alp Toker.

        Make canvas use an ImageBuffer for its backing store

        In order to make the canvas implementation less platform dependent
        (and thus reduce the current quagmire of ifdefs) we now use an 
        ImageBuffer to provide the backing buffer, an immediate consequence
        of this is to remove multiple ifdefs in the construction of the
        buffer.  This patch allows us to further reduce the platform
        dependencies in later patches.


        * html/CanvasRenderingContext2D.cpp:
        (WebCore::CanvasRenderingContext2D::drawImage):
        * html/HTMLCanvasElement.cpp:
        (WebCore::HTMLCanvasElement::HTMLCanvasElement):
        (WebCore::HTMLCanvasElement::~HTMLCanvasElement):
        (WebCore::HTMLCanvasElement::reset):
        (WebCore::HTMLCanvasElement::paint):
        (WebCore::HTMLCanvasElement::createDrawingContext):
        (WebCore::HTMLCanvasElement::drawingContext):
        (WebCore::HTMLCanvasElement::createPlatformImage):
        * html/HTMLCanvasElement.h:

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-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-11  Darin Adler  <darin@apple.com>

        Reviewed by Mitz.

        - fix <rdar://problem/5726016> REGRESSION: Xcode News window renders
          incorrectly due to visibility fix

        Added an Xcode-specific quirk.

        * WebCore.base.exp: Added export for new Settings function.
        * css/CSSMutableStyleDeclaration.cpp:
        (WebCore::CSSMutableStyleDeclaration::setProperty): Here's the crazy quirk.
        If you try to change the visibilty on a node with the class name tab_content,
        instead it will use display:none.
        * page/Settings.cpp:
        (WebCore::Settings::Settings): Initialize m_needsXcodeVisibilityQuirk. Also
        initialize m_fontRenderingMode! This seems like it was a bug before, but we
        probably were getting lucky and always getting 0 on Windows, which is the
        only place the setting matters.
        (WebCore::Settings::setNeedsXcodeVisibilityQuirk): Added.
        * page/Settings.h:
        (WebCore::Settings::needsXcodeVisibilityQuirk): Added.

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-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-11  Rob Buis  <buis@kde.org>

        Reviewed by David Kilzer.

        http://bugs.webkit.org/show_bug.cgi?id=17201
        Bug 17201: Use RefPtr in CSSParser::parseFont() to get rid of goto silliness

        Gets rid of goto usage in parseFont.

        * css/CSSParser.cpp:
        (WebCore::CSSParser::parseFont):

2008-02-11  David Hyatt  <hyatt@apple.com>

        Fix for bug 17298, Acid3 text should be black and not red.  Make sure stylesheets with the wrong MIME type
        are not accepted in strict mode.

        Reviewed by darin

        Added http/tests/misc/css-reject-in-strict-mode.html

        * css/CSSImportRule.cpp:
        (WebCore::CSSImportRule::setCSSStyleSheet):
        * css/CSSImportRule.h:
        * dom/Document.cpp:
        (WebCore::Document::setCSSStyleSheet):
        * dom/Document.h:
        * dom/ProcessingInstruction.cpp:
        (WebCore::ProcessingInstruction::setCSSStyleSheet):
        * dom/ProcessingInstruction.h:
        * html/HTMLLinkElement.cpp:
        (WebCore::HTMLLinkElement::setCSSStyleSheet):
        * html/HTMLLinkElement.h:
        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::pickMedia):
        * loader/CachedCSSStyleSheet.cpp:
        (WebCore::CachedCSSStyleSheet::ref):
        (WebCore::CachedCSSStyleSheet::checkNotify):
        (WebCore::CachedCSSStyleSheet::canUseSheet):
        * loader/CachedCSSStyleSheet.h:
        (WebCore::CachedCSSStyleSheet::sheetText):
        * loader/CachedResourceClient.h:
        (WebCore::CachedResourceClient::setCSSStyleSheet):
        * loader/mac/UserStyleSheetLoader.cpp:
        (UserStyleSheetLoader::setCSSStyleSheet):
        * loader/mac/UserStyleSheetLoader.h:

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-11  Alp Toker  <alp@atoker.com>

        Wx build fix for breakage introduced in r30142. Spotted by Darin.

        * platform/network/curl/ResourceHandleManager.cpp:
        (WebCore::parseDataUrl):

2008-02-11  Brent Fulgham  <bfulgham@gmail.com>

        Reviewed and tweaked by Darin

        - http://bugs.webkit.org/show_bug.cgi?id=17299
          a couple compilation fixes for Cairo/Win32 configuration

        * platform/graphics/cairo/ImageSourceCairo.cpp:
        (WebCore::createDecoder): Turn off XBMImageDecoder for PLATFORM(WIN) configuration.
        * rendering/RenderThemeWin.cpp:
        (WebCore::prepareForDrawing): Added IntRect parameter.
        (WebCore::doneDrawing): Ditto.
        (WebCore::RenderThemeWin::paintButton): Ditto.
        (WebCore::RenderThemeWin::paintTextField): Ditto.
        (WebCore::RenderThemeWin::paintMenuListButton): Ditto.
        (WebCore::RenderThemeWin::systemFont): Added.

2008-02-11  Alp Toker  <alp@atoker.com>

        Reviewed by Alexey.

        Acid3 data URL parsing fix for the GTK+ port.

        Avoid WebCore's base64Decode() when possible since it's not a
        general-purpose Base64 decoder and fails on newlines.

        * platform/network/curl/ResourceHandleManager.cpp:
        (WebCore::parseDataUrl):

2008-02-11  Darin Adler  <darin@apple.com>

        - another Qt build fix

        * platform/qt/PopupMenuQt.cpp:
        (WebCore::PopupMenu::PopupMenu): Added explicit RefCounted constructor.

2008-02-10  Darin Adler  <darin@apple.com>

        - another Qt build fix (wish the Qt bot wouldn't stop on the first error)

        * platform/qt/FileChooserQt.cpp:
        (WebCore::FileChooser::FileChooser): Added explicit RefCounted constructor.

2008-02-10  Darin Adler  <darin@apple.com>

        - another Qt build fix

        * platform/graphics/qt/IconQt.cpp:
        (WebCore::Icon::Icon): Added explicit RefCounted constructor.

2008-02-10  Alp Toker  <alp@atoker.com>

        Another Win build fix for r30133 breakage.

        * plugins/win/PluginPackageWin.cpp:
        (WebCore::PluginPackage::PluginPackage):

2008-02-10  Alp Toker  <alp@atoker.com>

        Build fix GTK+ and prospective build fix for Win breakage introduced
        in r30133.

        * platform/Cursor.h:
        (WebCore::SharedCursor::SharedCursor):
        * platform/graphics/gtk/IconGtk.cpp:
        (WebCore::Icon::Icon):
        * platform/gtk/FileChooserGtk.cpp:
        (WebCore::FileChooser::FileChooser):
        * platform/gtk/PopupMenuGtk.cpp:
        (WebCore::PopupMenu::PopupMenu):

2008-02-10  Darin Adler  <darin@apple.com>

        - try to fix Win, Qt, GTK, and WX builds

        * platform/Cursor.h:
        (WebCore::SharedCursor::SharedCursor): Added explicit RefCounted constructor.
        * platform/graphics/win/IconWin.cpp:
        (WebCore::Icon::Icon): Ditto.
        * platform/win/FileChooserWin.cpp:
        (WebCore::FileChooser::FileChooser): Ditto.
        * platform/win/PopupMenuWin.cpp:
        (WebCore::PopupMenu::PopupMenu): Ditto.
        * platform/wx/TemporaryLinkStubs.cpp:
        (FileChooser::FileChooser): Ditto.
        (PopupMenu::PopupMenu): Ditto.
        (Icon::Icon): Ditto.
        * plugins/PluginStream.cpp:
        (WebCore::PluginStream::PluginStream): Ditto.

2008-02-10  David Hyatt  <hyatt@apple.com>

        Fix for bug 17082, cssRules should be live.

        Reviewed by olliej

        Added fast/css/live-cssrules.html

        * css/CSSRuleList.cpp:
        (WebCore::CSSRuleList::CSSRuleList):
        (WebCore::CSSRuleList::length):
        (WebCore::CSSRuleList::item):
        (WebCore::CSSRuleList::deleteRule):
        (WebCore::CSSRuleList::insertRule):
        * css/CSSRuleList.h:

2008-02-10  David Hyatt  <hyatt@apple.com>

        Fix for bug 17253.  <iframe> contents need to be reflected into the DOM as a single text node.

        Reviewed by olliej

        fast/frames/iframe-text-contents.html

        * html/HTMLParser.cpp:
        (WebCore::HTMLParser::getNode):
        * html/HTMLTokenizer.cpp:
        (WebCore::HTMLTokenizer::parseSpecial):
        (WebCore::HTMLTokenizer::parseComment):
        (WebCore::HTMLTokenizer::parseTag):
        * html/HTMLTokenizer.h:
        (WebCore::HTMLTokenizer::State::inIFrame):
        (WebCore::HTMLTokenizer::State::setInIFrame):
        (WebCore::HTMLTokenizer::State::inAnySpecial):
        (WebCore::HTMLTokenizer::State::needsSpecialWriteHandling):
        (WebCore::HTMLTokenizer::State::):

2008-02-10  Andrew Wellington  <proton@wiretapped.net>

        Reviewed and tweaked by Darin.
        
        DOMRange.surroundContents throws wrong exception (Acid3 bug)
        http://bugs.webkit.org/show_bug.cgi?id=16749
        
        Throw BAD_BOUNDARYPOINTS_ERR if attempting to split a non-text node that
        has offsets in characters.

        * dom/Range.cpp:
        (WebCore::Range::surroundContents):

2008-02-10  Darin Adler  <darin@apple.com>

        Reviewed by Eric.

        - http://bugs.webkit.org/show_bug.cgi?id=17256
          Make clients of RefCounted explicitly set the count to 0.

        * bindings/js/JSSVGPODTypeWrapper.h:
        (WebCore::JSSVGPODTypeWrapper::JSSVGPODTypeWrapper):
        * css/CSSFontFace.h:
        (WebCore::CSSFontFace::CSSFontFace):
        * css/CSSRuleList.cpp:
        (WebCore::CSSRuleList::CSSRuleList):
        * css/CSSSegmentedFontFace.cpp:
        (WebCore::CSSSegmentedFontFace::CSSSegmentedFontFace):
        * css/Counter.h:
        (WebCore::Counter::Counter):
        * css/Pair.h:
        (WebCore::Pair::Pair):
        * css/Rect.h:
        (WebCore::Rect::Rect):
        * css/StyleBase.h:
        (WebCore::StyleBase::StyleBase):
        * css/StyleSheetList.cpp:
        (WebCore::StyleSheetList::StyleSheetList):
        * dom/Attr.cpp:
        (WebCore::Attr::Attr):
        * dom/Attr.h:
        * dom/Attribute.h:
        (WebCore::Attribute::Attribute):
        * dom/Clipboard.cpp:
        (WebCore::Clipboard::Clipboard):
        * dom/DOMImplementation.h:
        (WebCore::DOMImplementation::DOMImplementation):
        * dom/Event.cpp:
        (WebCore::Event::Event):
        * dom/EventListener.h:
        (WebCore::EventListener::EventListener):
        * dom/ExceptionBase.cpp:
        (WebCore::ExceptionBase::ExceptionBase):
        * dom/NamedAttrMap.h:
        (WebCore::NamedAttrMap::insertAttribute):
        * dom/NamedNodeMap.h:
        (WebCore::NamedNodeMap::NamedNodeMap):
        * dom/NodeFilter.h:
        (WebCore::NodeFilter::NodeFilter):
        * dom/NodeFilterCondition.h:
        (WebCore::NodeFilterCondition::NodeFilterCondition):
        * dom/NodeList.h:
        (WebCore::NodeList::NodeList):
        * dom/QualifiedName.h:
        (WebCore::QualifiedName::QualifiedNameImpl::QualifiedNameImpl):
        (WebCore::QualifiedName::ref):
        * dom/Range.cpp:
        (WebCore::Range::Range):
        * dom/RegisteredEventListener.cpp:
        (WebCore::RegisteredEventListener::RegisteredEventListener):
        * dom/StyledElement.h:
        * dom/Traversal.cpp:
        (WebCore::Traversal::Traversal):
        * editing/EditCommand.cpp:
        (WebCore::EditCommand::EditCommand):
        * history/BackForwardList.cpp:
        (WebCore::BackForwardList::BackForwardList):
        * history/CachedPage.cpp:
        (WebCore::CachedPage::CachedPage):
        * history/HistoryItem.cpp:
        (WebCore::HistoryItem::HistoryItem):
        * html/CanvasGradient.cpp:
        (WebCore::CanvasGradient::CanvasGradient):
        * html/CanvasPattern.cpp:
        (WebCore::CanvasPattern::CanvasPattern):
        * html/CanvasRenderingContext2D.cpp:
        (WebCore::CanvasRenderingContext2D::CanvasRenderingContext2D):
        * html/CanvasStyle.cpp:
        (WebCore::CanvasStyle::CanvasStyle):
        * html/HTMLCollection.cpp:
        (WebCore::HTMLCollection::HTMLCollection):
        * html/MediaError.h:
        (WebCore::MediaError::MediaError):
        * html/TimeRanges.cpp:
        (TimeRanges::TimeRanges):
        * html/TimeRanges.h:
        (WebCore::TimeRanges::TimeRanges):
        * html/VoidCallback.h:
        (WebCore::VoidCallback::VoidCallback):
        * loader/DocumentLoader.cpp:
        (WebCore::DocumentLoader::DocumentLoader):
        * loader/FormState.cpp:
        (WebCore::FormState::FormState):
        * loader/ResourceLoader.cpp:
        (WebCore::ResourceLoader::ResourceLoader):
        * loader/TextResourceDecoder.cpp:
        (WebCore::TextResourceDecoder::TextResourceDecoder):
        * loader/icon/IconRecord.cpp:
        (WebCore::IconRecord::IconRecord):
        * page/BarInfo.cpp:
        (WebCore::BarInfo::BarInfo):
        * page/Console.cpp:
        (WebCore::Console::Console):
        * page/DOMSelection.cpp:
        (WebCore::DOMSelection::DOMSelection):
        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::DOMWindow):
        * page/Frame.cpp:
        (WebCore::Frame::Frame):
        * page/History.cpp:
        (WebCore::History::History):
        * page/InspectorController.cpp:
        (WebCore::InspectorResource::InspectorResource):
        (WebCore::InspectorDatabaseResource::InspectorDatabaseResource):
        * page/Plugin.h:
        (WebCore::Plugin::Plugin):
        * page/Screen.cpp:
        (WebCore::Screen::Screen):
        * platform/ArrayImpl.cpp:
        (WebCore::ArrayImpl::ArrayPrivate::ArrayPrivate):
        * platform/DeprecatedValueListImpl.cpp:
        (WebCore::DeprecatedValueListImpl::Private::Private):
        * platform/ScrollBar.cpp:
        (WebCore::Scrollbar::Scrollbar):
        * platform/SharedBuffer.cpp:
        (WebCore::SharedBuffer::SharedBuffer):
        * platform/graphics/FontFallbackList.cpp:
        (WebCore::FontFallbackList::FontFallbackList):
        * platform/graphics/FontFamily.cpp:
        (WebCore::FontFamily::FontFamily):
        * platform/graphics/FontFamily.h:
        (WebCore::FontFamily::FontFamily):
        * platform/graphics/FontSelector.h:
        (WebCore::FontSelector::FontSelector):
        (WebCore::FontSelector::~FontSelector):
        * platform/graphics/GlyphPageTreeNode.h:
        (WebCore::GlyphPage::GlyphPage):
        * platform/graphics/mac/IconMac.mm:
        (WebCore::Icon::Icon):
        * platform/mac/FileChooserMac.mm:
        (WebCore::FileChooser::FileChooser):
        * platform/mac/PopupMenuMac.mm:
        (WebCore::PopupMenu::PopupMenu):
        * platform/mac/SharedBufferMac.mm:
        (WebCore::SharedBuffer::SharedBuffer):
        * platform/network/FormData.cpp:
        (WebCore::FormData::FormData):
        * platform/network/FormData.h:
        (WebCore::FormData::FormData):
        * platform/network/ResourceHandle.cpp:
        (WebCore::ResourceHandle::ResourceHandle):
        * platform/text/CString.h:
        (WebCore::CStringBuffer::CStringBuffer):
        * platform/text/RegularExpression.cpp:
        (WebCore::RegularExpression::Private::Private):
        * 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:
        (WebCore::TransformOperation::TransformOperation):
        (WebCore::CursorList::CursorList):
        * rendering/SVGCharacterLayoutInfo.h:
        (WebCore::SVGCharOnPath::SVGCharOnPath):
        * rendering/SVGRenderStyle.cpp:
        (WebCore::SVGRenderStyle::SVGRenderStyle):
        * rendering/SVGRenderStyle.h:
        (WebCore::SVGRenderStyle::SVGRenderStyle):
        * rendering/SVGRenderStyleDefs.cpp:
        (StyleFillData::StyleFillData):
        (StyleStrokeData::StyleStrokeData):
        (StyleStopData::StyleStopData):
        (StyleTextData::StyleTextData):
        (StyleClipData::StyleClipData):
        (StyleMaskData::StyleMaskData):
        (StyleMarkerData::StyleMarkerData):
        (StyleMiscData::StyleMiscData):
        * storage/SQLResultSetRowList.h:
        (WebCore::SQLResultSetRowList::SQLResultSetRowList):
        * svg/SVGAngle.cpp:
        (WebCore::SVGAngle::SVGAngle):
        * svg/SVGAnimatedTemplate.h:
        (WebCore::SVGAnimatedTemplate::SVGAnimatedTemplate):
        * svg/SVGElementInstanceList.cpp:
        (WebCore::SVGElementInstanceList::SVGElementInstanceList):
        * svg/SVGList.h:
        (WebCore::SVGList::SVGList):
        (WebCore::SVGPODListItem::SVGPODListItem):
        * svg/SVGPathSeg.h:
        (WebCore::SVGPathSeg::SVGPathSeg):
        * svg/SVGPreserveAspectRatio.cpp:
        (WebCore::SVGPreserveAspectRatio::SVGPreserveAspectRatio):
        * svg/SVGRenderingIntent.h:
        (WebCore::SVGRenderingIntent::SVGRenderingIntent):
        * svg/SVGUnitTypes.h:
        (WebCore::SVGUnitTypes::SVGUnitTypes):
        * svg/graphics/SVGPaintServerGradient.h:
        (WebCore::SVGPaintServerGradient::SharedStopCache::SharedStopCache):
        * svg/graphics/SVGResource.cpp:
        (WebCore::SVGResource::SVGResource):
        * xml/DOMParser.h:
        (WebCore::DOMParser::DOMParser):
        * xml/XMLHttpRequest.cpp:
        (WebCore::XMLHttpRequest::XMLHttpRequest):
        * xml/XMLSerializer.h:
        (WebCore::XMLSerializer::XMLSerializer):
        * xml/XPathEvaluator.h:
        (WebCore::XPathEvaluator::XPathEvaluator):
        * xml/XPathExpression.h:
        (WebCore::XPathExpression::XPathExpression):
        * xml/XPathNSResolver.h:
        (WebCore::XPathNSResolver::XPathNSResolver):
        * xml/XPathResult.cpp:
        (WebCore::XPathResult::XPathResult):
        * xml/XPathValue.h:
        (WebCore::XPath::ValueData::ValueData):
        * xml/XSLTProcessor.h:
        (WebCore::XSLTProcessor::XSLTProcessor):

2008-02-09  Kevin Ollivier  <kevino@theolliviers.com>

        Reviewed by Eric Seidel.

        Calling select() when all the file descriptors are NULL
        stops the file download on Windows. As a result, do not
        call select() when there are no valid descriptors.

        http://bugs.webkit.org/show_bug.cgi?id=17178

        * platform/network/curl/ResourceHandleManager.cpp:
        (WebCore::ResourceHandleManager::downloadTimerCallback):

2008-02-09  Dan Bernstein  <mitz@apple.com>

        Reviewed by Sam Weinig.

        - fix http://bugs.webkit.org/show_bug.cgi?id=17259
          Element::recalcStyle() needlessly null-checks the result of styleForElement()

        * dom/Element.cpp:
        (WebCore::Element::recalcStyle): Removed unneeded null checks.
        styleForElement() can never return null.

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-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):
        * 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-09  Holger Hans Peter Freyther  <holger.freyther@trolltech.com>

        Unreviewed build fix

        Somehow the removal of adjustSliderThumbSize(RenderObject*) sneaked
        into the patch.

        * platform/qt/RenderThemeQt.h:

2008-02-09  Holger Hans Peter Freyther  <holger.freyther@trolltech.com>

        Reviewed by Adele.

        paintResizeControl is dead, remove the code. This painting
        is done by the RenderLayer.

        * platform/qt/RenderThemeQt.cpp:
        * platform/qt/RenderThemeQt.h:
        * rendering/RenderThemeMac.h:
        * rendering/RenderThemeMac.mm:

2008-02-07  Kevin Ollivier <kevino@theolliviers.com>

        Reviewed by Eric Seidel, Adam Roben.

        MSVC7 fixes.
        http://bugs.webkit.org/show_bug.cgi?id=17211

        * platform/Threading.h:
        - On MSVC7, when the Interlocked* functions are used, the ref count gets out of sync.
          (MSVC8 seems not to have this problem.) Use the old implementation which works correctly.
        * platform/win/SharedTimerWin.cpp:
        - USER_TIMER_MINIMUM/MAXIMUM aren't defined in winuser.h for the MSVC 2003 Platform SDK
          so define them if they are not already defined.

2008-02-08  Brent Fulgham  <bfulgham@gmail.com>

        Reviewed by Adam Roben.

        Bug 17226: Fix Windows (Cairo) build of image-decoders
        http://bugs.webkit.org/show_bug.cgi?id=17226

        * platform/image-decoders/gif/GIFImageDecoder.cpp:
        * platform/image-decoders/png/PNGImageDecoder.cpp:

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-08  Darin Adler  <darin@apple.com>

        Reviewed by Eric.

        - fix http://bugs.webkit.org/show_bug.cgi?id=15003
          Function.prototype.constructor should not be DontDelete/ReadOnly (Acid3 bug)

        Test: fast/js/constructor-attributes.html

        * bindings/scripts/CodeGeneratorJS.pm: Remove unwanted attributes from "constructor".

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-08  Kevin Ollivier  <kevino@theolliviers.com>

        wx port build fix. Add time.h to define time_t.

        * platform/FileSystem.h:

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 debug build.

        Covered by existing tests.

        * dom/Document.cpp:
        (WebCore::Document::userStyleSheet):

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-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-08  David Hyatt  <hyatt@apple.com>

        Fix for bug 16798, button should default to type=submit.

        Reviewed by darin

        * html/HTMLButtonElement.cpp:
        (WebCore::HTMLButtonElement::type):
        (WebCore::HTMLButtonElement::parseMappedAttribute):

2008-02-08  Rodney Dawes  <dobey@wayofthemonkey.com>

        Reviewed by Jon Honeycutt.

        Redefine some platform-specific types as cross-platform types
        Add pathGetFileName method to get the filename from a path string
        Add unloadModule method to unload a loadable module from the process
        Implement new methods for GTK+ and Windows
        Implement missing homeDirectoryPath method for GTK+
        Add stub methods for new and missing methods for Wx and Qt

        * platform/FileSystem.h:
        * platform/gtk/FileSystemGtk.cpp:
        * platform/qt/FileSystemQt.cpp:
        * platform/win/FileSystemWin.cpp:
        * platform/wx/FileSystemWx.cpp:

2008-02-08  Adam Roben  <aroben@apple.com>

        Windows build fix after r30088

        * bindings/scripts/CodeGeneratorCOM.pm: Touch this to force the COM
        bindings to rebuild.

2008-02-08  Pierre-Luc Beaudoin  <pierre-luc.beaudoin@collabora.co.uk>

        Reviewed by Alp Toker.

        http://bugs.webkit.org/show_bug.cgi?id=17009
        [Gtk] Webkit strips accents from some dead-key combinations

        KeyEvents have to go through the gtk input method.

        Also implement the isKeypad check and make disambiguateKeyDownEvent
        behave more like other ports.

        * platform/PlatformKeyboardEvent.h:
        * platform/gtk/KeyEventGtk.cpp:
        (WebCore::PlatformKeyboardEvent::PlatformKeyboardEvent):
        (WebCore::PlatformKeyboardEvent::disambiguateKeyDownEvent):
        (WebCore::PlatformKeyboardEvent::gdkEventKey):

2008-02-08  Darin Adler  <darin@apple.com>

        Reviewed by Eric.

        - fix http://bugs.webkit.org/show_bug.cgi?id=3492
          TreeWalker implementation needs to be fixed (affects Acid3)
        - fix http://bugs.webkit.org/show_bug.cgi?id=4714
          NodeIterator does not handle exceptions from the filter function (affects Acid3)
        - fix http://bugs.webkit.org/show_bug.cgi?id=4716
          NodeIterator will crash if the filter function removes the current node from the document

        Test: traversal/exception-forwarding.html

        This turned into a near-rewrite of NodeIterator and TreeWalker.

        * bindings/js/JSNodeFilterCondition.h:
        * bindings/js/JSNodeFilterCondition.cpp:
        (WebCore::takeException): Added.
        (WebCore::JSNodeFilterCondition::acceptNode): Added an out parameter to return
        a JavaScript exception.

        * bindings/js/JSNodeFilterCustom.cpp:
        (WebCore::JSNodeFilter::acceptNode): Wrote a custom binding for this that raises
        a JavaScript exception if the out parameter is set.

        * bindings/js/JSNodeIteratorCustom.cpp:
        (WebCore::JSNodeIterator::nextNode): Wrote a custom binding for this that raises
        a JavaScript exception if the out parameter is set.
        (WebCore::JSNodeIterator::previousNode): Ditto.

        * bindings/js/JSTreeWalkerCustom.cpp:
        (WebCore::JSTreeWalker::parentNode): Wrote a custom binding for this that raises
        a JavaScript exception if the out parameter is set.
        (WebCore::JSTreeWalker::firstChild): Ditto.
        (WebCore::JSTreeWalker::lastChild): Ditto.
        (WebCore::JSTreeWalker::nextSibling): Ditto.
        (WebCore::JSTreeWalker::previousSibling): Ditto.
        (WebCore::JSTreeWalker::previousNode): Ditto.
        (WebCore::JSTreeWalker::nextNode): Ditto.

        * bindings/objc/DOM.mm:
        (WebCore::ObjCNodeFilterCondition::acceptNode): Updated to include new exception
        out parameter.
        (-[DOMDocument createNodeIterator:whatToShow:filter:expandEntityReferences:]):
        Use RefPtr to make object lifetimes clearer.
        (-[DOMDocument createTreeWalker:whatToShow:filter:expandEntityReferences:]):
        Ditto.

        * bindings/scripts/CodeGeneratorJS.pm: Added include of NodeFilter.h for
        JSDocument.cpp.

        * dom/Document.h:
        * dom/Document.cpp:
        (WebCore::Document::createNodeIterator): Changed to use PassRefPtr.
        (WebCore::Document::createTreeWalker): Ditto.

        * dom/NodeFilter.h:
        * dom/NodeFilter.cpp:
        (WebCore::NodeFilter::NodeFilter): Changed to use PassRefPtr.
        (WebCore::NodeFilter::acceptNode): Added an out parameter to return
        a JavaScript exception.
        * dom/NodeFilter.idl: Custom binding for acceptNode.

        * dom/NodeFilterCondition.h:
        * dom/NodeFilterCondition.cpp:
        (WebCore::NodeFilterCondition::acceptNode): Added an out parameter to return
        a JavaScript exception.

        * dom/NodeIterator.cpp:
        (WebCore::NodeIterator::NodeIterator): Changed to use PassRefPtr more.
        Eliminated m_doc, using the root node instead, and unnecessary check for
        null -- rootNode must be non-null and all nodes have a non-null document.
        (WebCore::NodeIterator::~NodeIterator): Changed to get document from root.
        (WebCore::NodeIterator::nextNode): Rewrote to use a RefPtr since the
        acceptNode function could do anything, including removing the last
        reference to the current node. Also folded findNextNode into this function
        since it's the only one that needs to call it.
        (WebCore::NodeIterator::previousNode): Same thing, but the other direction.
        (WebCore::NodeIterator::detach): Changed to use the root node as the indication
        that we're detached rather than a separate boolean.
        (WebCore::NodeIterator::notifyBeforeNodeRemoval): Removed some unnneeded
        checks. Removed incorrect use of findNextNode/findPreviousNode -- those
        functions call acceptNode and the DOM standard is quite clear that these
        functions do not take that into account, allowing the current node to become
        one that's not accepted.

        * dom/NodeIterator.h: Changed constructor to use PassRefPtr more. Changed
        nextNode and previousNode to have an out parameter with a JavaScript exception.
        Removed helper functions setReferenceNode, setPointerBeforeReferenceNode,
        detached, setDetached, document, findNextNode, and findPreviousNode. All were
        unnecessary. Removed data member m_doc which was just rootNode()->document().

        * dom/NodeIterator.idl: Custom binding for nextNode and previousNode.

        * dom/Traversal.cpp:
        (WebCore::Traversal::Traversal): Use PassRefPtr more.
        (WebCore::Traversal::acceptNode): Added out parameter for JavaScript exception.
        Also rearranged the function a little bit for clarity.

        * dom/Traversal.h: Changed acceptNode to have an out parameter with a JavaScript
        exception and made it protected, since it's only for use by the derived classes.

        * dom/TreeWalker.cpp:
        (WebCore::TreeWalker::TreeWalker): Updated to use PassRefPtr.
        (WebCore::TreeWalker::setCurrentNode): Updated to use PassRefPtr and deleted
        the overloaded version since it's not needed.
        (WebCore::TreeWalker::parentNode): Rewrote to propagate the exception and also
        to implement rules about when to check things like whether we're in the tree.
        The previous fix where we called isDescendantOf was not entirely correct, because
        the specification allows you to walk outside the tree if you get there somehow.
        What it doesn't allow is walking outside the tree from inside. The new
        implementation handles this correctly.
        (WebCore::TreeWalker::firstChild): Ditto.
        (WebCore::TreeWalker::lastChild): Ditto.
        (WebCore::TreeWalker::previousSibling): Ditto.
        (WebCore::TreeWalker::nextSibling): Ditto.
        (WebCore::TreeWalker::previousNode): Ditto. Because of the need to check the
        acceptNode function on parents, this can't use traversePreviousNode (more's the
        pity, because it's a bit complicated).
        (WebCore::TreeWalker::nextNode): Ditto.

        * dom/TreeWalker.h: Changed constructor and setCurrentNode to use PassRefPtr
        more. Changed the navigation functions to have an out parameter with a JavaScript
        exception. Removed helper functions setCurrentNode and ancestorRejected.

        * dom/TreeWalker.idl: Custom binding for navigation functions.

2008-02-08  Eric Seidel  <eric@webkit.org>

        Reviewed by darin.

        Add support for Text.wholeText and Text.replaceWholeText
        http://bugs.webkit.org/show_bug.cgi?id=17125

        Test EntityReferences to make sure they're always treated as read-only
        In doing so I discovered a bug in document.adoptNode(readonlyNode) (and fixed it)

        * dom/Document.cpp:
        (WebCore::Document::adoptNode): throw NO_MODIFICATION_ALLOWED_ERR when passed a readonly node
        * dom/Node.cpp:
        * dom/Node.cpp:
        (WebCore::Node::textContent):
        * dom/Text.cpp:
        (WebCore::earliestLogicallyAdjacentTextNode):
        (WebCore::latestLogicallyAdjacentTextNode):
        (WebCore::Text::wholeText):
        (WebCore::Text::replaceWholeText):
        * dom/Text.h:
        * dom/Text.idl:

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-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-07  Adam Roben  <aroben@apple.com>

        Qt build fix

        * platform/SharedBuffer.cpp: Removed a stub implementation of
        createWithContentsOfFile, now that each platform has its own stub.

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-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-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-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-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-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-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-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>

        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
        * 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:
        * 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::insertControlCharacter):
        (WebCore::createAndAppendUnicodeSubMenu):
        (WebCore::ContextMenu::populate):
        (ContextMenu::checkOrEnableIfNeeded):
        * platform/ContextMenuItem.h:
        * 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::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::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::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::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:
        * 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  <pkasting@google.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::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::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::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::::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  Darin Fisher  <darin@chromium.org>

        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):
        * 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  Brett Wilson  <brettw@chromium.org>

        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:
        * 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  <pkasting@google.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  <pkasting@google.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 <feng@chromium.org>

        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  <pkasting@google.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):
        * 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  <pkasting@google.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:
        * bindings/js/JSHTMLInputElementBase.cpp:
        * bindings/js/JSNamedNodesCollection.cpp:
        * bindings/js/JSXMLHttpRequest.cpp:
        * bindings/js/JSXSLTProcessor.cpp:
        * bindings/js/kjs_css.cpp:
        * bindings/js/kjs_events.cpp:
        * bindings/js/kjs_navigator.cpp:
        * bindings/js/kjs_window.cpp:
        * 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  <pkasting@google.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):
        * 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::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::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  <pkasting@google.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  <pkasting@google.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  <pkasting@google.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 ==
