2007-07-16  Adam Roben  <aroben@apple.com>

        Replace Frame::print with Chrome::print

        This also adds a Frame* parameter to Chrome::print and
        ChromeClient::print so that it knows which Frame to print.

        Reviewed by Darin.

        All tests pass.

        * bindings/js/kjs_window.cpp:
        (KJS::WindowFunc::callAsFunction): Call Chrome::print.
        * editing/JSEditor.cpp: Ditto.

        * bridge/win/FrameWin.cpp: Removed Frame::print.
        * page/Frame.h: Ditto.
        * page/mac/FrameMac.mm: Ditto.
        * page/qt/FrameQt.cpp: Ditto.
        * platform/gdk/FrameGdk.cpp: Ditto.
        * page/mac/WebCoreFrameBridge.h: Removed -print.

        * page/Chrome.cpp: Added Frame* parameter to Chrome::print and pass it
        up to the ChromeClient.
        * page/Chrome.h: Ditto.
        * page/ChromeClient.h: Ditto.
        * platform/gdk/TemporaryLinkStubs.cpp: Ditto.
        * platform/graphics/svg/SVGImageEmptyClients.h: Ditto.

2007-07-16  Adele Peterson  <adele@apple.com>

        Reviewed by Brady.

        Fix for <rdar://problem/5321490> REGRESSION: visibility:hidden property doesn't hide parts of file input element and listbox
        http://bugs.webkit.org/show_bug.cgi?id=14565

        Tests:
        fast/forms/hidden-input-file.html
        fast/forms/hidden-listbox.html

        * rendering/RenderFileUploadControl.cpp: (WebCore::RenderFileUploadControl::paintObject):
        Only paint if the control is supposed to be visible.
        * rendering/RenderListBox.cpp: (WebCore::RenderListBox::paintObject):
        ditto.  We already had checks to prevent drawing the text that considered the option's style too, but if visibility: hidden
        was just set on the listbox then a lot of extra work was being done, and the scrollbar was drawing too.  This change fixes that.

2007-07-16  David Hyatt  <hyatt@apple.com>

        Fix for Radar 5338081, text-shadow should be reset on form controls so that
        it doesn't inherit in when set e.g., on the <body>.

        Reviewed by beth

        * css/html4.css:

2007-07-16  Holger Hans Peter Freyther  <zecke@selfish.org>

        Reviewed by Niko.

        FrameView, PlatformScrollbar and changes to the way we draw

        Fix the lifetime of PlatformScrollbar, use a default width and
        height and fix drawing of the PlatformScrollbar and other widgets
        the following way: FrameGdk handles the expose events of the Frame
        and will make the frame redraw and now it will draw the childrent of
        the FrameView as well. This approach has the issue of honoring the
        z-order of elements inside the RenderTree. Honoring the z-order will
        be a bit more work

        Widget can now handle Widget::setGtkWidget call where the GtkWidget
        has not yet a GdkWindow allocated. We will lazily set the GdkDrawable.

        In preparation of honoring the z-order of the RenderTree for RenderWidgets
        it is started to store native objects inside the GraphicsContext. Doing this
        nicely eliminates the need of RenderThemeGdk to do any drawing to a temporary
        GdkPixmap. This should fix themes with rounded buttons.

        ScrollView implement add- and removeChild to get a working PlatformScrollbar


        * platform/Widget.h:
        * platform/gdk/FrameGdk.cpp:
        (frame_gdk_expose_child): Will send the expose to all children
        (WebCore::FrameGdk::handleGdkEvent): Painting changes, move to mouseMoved
        * platform/gdk/PlatformScreenGdk.cpp:
        (WebCore::screenDepth): gdkDrawable
        * platform/gdk/PlatformScrollBarGdk.cpp:
        (PlatformScrollbar::PlatformScrollbar): Fix ownership
        (PlatformScrollbar::~PlatformScrollbar): Fix ownership
        (PlatformScrollbar::paint): Widget::paint will do the right thing soon
        * platform/gdk/RenderThemeGdk.cpp: No need for using a GdkPixmap, draw directly
        (WebCore::RenderThemeGdk::paintCheckbox): No need for using a GdkPixmap, draw directly
        (WebCore::RenderThemeGdk::paintRadio): No need for using a GdkPixmap, draw directly
        (WebCore::RenderThemeGdk::paintButton): No need for using a GdkPixmap, draw directly
        * platform/gdk/RenderThemeGdk.h: remove the copyContext call
        * platform/gdk/ScrollViewGdk.cpp: gdkDrawable
        (WebCore::ScrollView::updateView): gdkDrawable
        (WebCore::ScrollView::update): clear the area to fix repainting issues
        (WebCore::ScrollView::setGtkWidget): gdkDrawable
        (WebCore::ScrollView::addChild): implement
        (WebCore::ScrollView::removeChild): implement
        * platform/gdk/TemporaryLinkStubs.cpp: Not needed header removed
        * platform/gdk/WidgetGdk.cpp:
        (WebCore::Widget::gdkDrawable): Renamed from drawable
        (WebCore::Widget::setGtkWidget): use gdkDrawable
        (WebCore::Widget::setCursor): gdkDrawable
        (WebCore::Widget::show): gdkDrawable
        (WebCore::Widget::hide): gdkDrawable
        * platform/graphics/GraphicsContext.h: Allow to set the GdkDrawable, e.g. used inside a expose event
        * platform/graphics/cairo/GraphicsContextCairo.cpp:
        (WebCore::GraphicsContextPlatformPrivate::GraphicsContextPlatformPrivate):
        (WebCore::GraphicsContext::setGdkDrawable):
        (WebCore::GraphicsContext::gdkDrawable):

2007-07-16  Holger Hans Peter Freyther  <zecke@selfish.org>

        Reviewed by Maciej.

        Lazily update the scrollbars (e.g. on loading a page) to
        generate less expose events, which will lead to laying out less often
         and will fix http://bugs.webkit.org/show_bug.cgi?id=14020.

        * platform/gdk/ScrollViewGdk.cpp:
        (WebCore::ScrollView::ScrollViewPrivate::ScrollViewPrivate):
        (WebCore::ScrollView::update):
        (WebCore::ScrollView::resizeContents):
        (WebCore::ScrollView::updateScrollbars):

2007-07-16  Rob Buis  <buis@kde.org>

        Reviewed by Maciej.

        http://bugs.webkit.org/show_bug.cgi?id=14462
        non empty <style> element doesn't work

        Return an empty sheet for empty <style> elements
        instead of a null sheet. Clean up StyleElement a bit.

        * dom/StyleElement.cpp:
        (WebCore::StyleElement::StyleElement):
        (WebCore::StyleElement::sheet):
        (WebCore::StyleElement::childrenChanged):
        (WebCore::StyleElement::createSheet):
        * dom/StyleElement.h:
        (WebCore::StyleElement::setLoading):
        * html/HTMLStyleElement.cpp:
        (WebCore::HTMLStyleElement::HTMLStyleElement):
        (WebCore::HTMLStyleElement::sheet):
        * html/HTMLStyleElement.h:
        (WebCore::HTMLStyleElement::setLoading):
        * ksvg2/svg/SVGStyleElement.cpp:
        (WebCore::SVGStyleElement::sheet):
        (WebCore::SVGStyleElement::sheetLoaded):
        * ksvg2/svg/SVGStyleElement.h:

2007-07-15  Oliver Hunt  <oliver@apple.com>

        Reviewed by Adam.

        Fix for fix for <rdar://problem/5336602> REGRESSION: tab characters
                        cannot be entered into text fields
                        http://bugs.webkit.org/show_bug.cgi?id=14032

        Need to use UChar not char.

        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::constrainValue):

2007-07-15  Sam Weinig  <sam@webkit.org>

        Reviewed by Geoff Garen.

        Remove redundant calls to isSafeScript()

        * bindings/js/JSDOMWindowCustom.cpp:
        (WebCore::JSDOMWindow::customPut):
        * bindings/js/kjs_window.cpp:
        (KJS::Window::put):

2007-07-15  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Maciej Stachowiak.
        
        Removed incorrect error log, seen while running layout tests.
        
        Perhaps at some point FrameLoadTypeInteral had a specific meaning
        that prevented it from being used in non-child frame, non-redirect
        situations. However, that meaning has been lost and nobody remembers
        how to get it back.
        
        We currently use FrameLoadTypeInternal for any load that is not
        initiated by a user gesture, so it's trivial to produce this error
        log, even though nothing has gone wrong.

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

2007-07-15  Oliver Hunt  <oliver@apple.com>

        Reviewed by Maciej

        Fix for <rdar://problem/5336602> REGRESSION: tab characters cannot be entered into text fields
                http://bugs.webkit.org/show_bug.cgi?id=14032

        constrainValue attempted to block control characters from being inserted 
        by a simple less than ' ' check, which prevent tab characters from being
        inserted.  This patch adds an additional check to allow the tab character 
        again

        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::constrainValue):

2007-07-14  Brady Eidson  <beidson@apple.com>

        Third shot at blind Qt/GDK build fix

        * platform/gdk/TemporaryLinkStubs.cpp:
        (FTPDirectoryDocument::createTokenizer):
        * platform/qt/TemporaryLinkStubs.cpp:
        (FTPDirectoryDocument::createTokenizer):

2007-07-14  Brady Eidson  <beidson@apple.com>

        Reviewed by Sam

        Windows build fix

        * WebCore.vcproj/WebCore.vcproj:

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

        Fix Tiger build.

        * config.h:

2007-07-14  Brady Eidson  <beidson@apple.com>

        Blind attempt at (hopefully) fixing the Qt and GDK builds

        * platform/gdk/TemporaryLinkStubs.cpp:
        (FTPDirectoryDocument::FTPDirectoryDocument):
        * platform/qt/TemporaryLinkStubs.cpp:
        (FTPDirectoryDocument::FTPDirectoryDocument):

2007-07-14  Brady Eidson  <beidson@apple.com>

        Reviewed by Sam Weinig

        Initial check-in for <rdar://problem/3154486> - Supporting FTP directory listings in the browser

        Development has taken place on both Leopard and Windows (windows enabling patch will follow shortly)
        Support will only exist on platforms whose network layers (ie, ResourceHandle) support piping the raw
        FTP Directory data into the engine.  

        This is known to include Leopard, Windows, and CURL based platforms - probably others
        Known incompatible platforms include Tiger.

        The FTP listing page is built in HTML.  An external HTML document can be provided as a template for the 
        directory listing.  This document is parsed, and expected to have a <table> with a certain class in it.
        As FTP directory listings come in, each entry is added to this table as a row.

        If no HTML template is provided to work with, a very basic empty document is hard coded that contains only 
        this special table.

        Upgrades to the look and feel of the directory listings can take place largely in this HTML template which,
        admittedly, is conspicuously absent in this initial checkin

        * WebCore.exp: New Settings symbols for WebKit
        * WebCore.xcodeproj/project.pbxproj:

        * config.h: If BUILDING_ON_TIGER, disable FTP directory listing support

        * dom/DOMImplementation.cpp:
        (WebCore::DOMImplementation::createDocument): Create an FTPDirectoryDocument if the mime type is 
          "application/x-ftp-directory"

        * loader/FTPDirectoryDocument.cpp: Added.
        (WebCore::FTPDirectoryTokenizer::isWaitingForScripts):
        (WebCore::FTPDirectoryTokenizer::checkBuffer):
        (WebCore::FTPDirectoryTokenizer::FTPDirectoryTokenizer): Building on HTML tokenizer, this facilitates 
          parsing FTP Directory listings in the engine
        (WebCore::FTPDirectoryTokenizer::appendEntry): Add a table row for a directory listing to the document
        (WebCore::FTPDirectoryTokenizer::createTDForFilename): Create the TD for the filename with the anchor in it

        (WebCore::processFilesizeString): Prettify the filesize
        (WebCore::wasLastDayOfMonth):
        (WebCore::processFileDateString): Prettify the date
        (WebCore::FTPDirectoryTokenizer::parseAndAppendOneLine):
        (WebCore::FTPDirectoryTokenizer::loadDocumentTemplate): Loads the HTML template that FTP directory listings
          can build on top of
        (WebCore::FTPDirectoryTokenizer::createBasicDocument): Creates a most basic document (body and one table) to
          append the rows to in case the document template is not loaded and parsed
        (WebCore::FTPDirectoryTokenizer::write): Add the FTP listing to the buffer and parse entries out of it
        (WebCore::FTPDirectoryTokenizer::finish): 

        (WebCore::FTPDirectoryDocument::FTPDirectoryDocument): Special document-type for FTP directory listings
        (WebCore::FTPDirectoryDocument::createTokenizer):
        * loader/FTPDirectoryDocument.h: Added.
        (WebCore::FTPDirectoryDocument::isImageDocument):
        
        * loader/FTPDirectoryParser.cpp: Added.
        (WebCore::parseOneFTPLine): Adapted from ParseFTPList.cpp from Firefox - parses most known
          FTP directory listing styles into discrete FTP directory entries
        * loader/FTPDirectoryParser.h: Added.
        (WebCore::ListState::ListState): Maintains FTP Parser state
        (WebCore::ListResult::ListResult): Represents one FTP directory listing
        (WebCore::ListResult::clear):

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::checkContentPolicy): If the Settings say to bypass the policy check for 
          "application/x-ftp-directory", skip it.  This will allow people to test this feature even if their 
          browser/WebKit app would otherwise not allow it

        * page/Settings.cpp:
        (WebCore::Settings::Settings):
        (WebCore::Settings::setFTPDirectoryTemplatePath): Set the path to the FTP listing document template
        (WebCore::Settings::setForceFTPDirectoryListings): Set to bypass the policy delegate check for mime type
          "application/x-ftp-directory"
        * page/Settings.h:
        (WebCore::Settings::ftpDirectoryTemplatePath):
        (WebCore::Settings::forceFTPDirectoryListings):

        * platform/Logging.cpp: Add an "LogFTP" logging channel
        * platform/Logging.h:
        * platform/mac/LoggingMac.mm:
        (WebCore::InitializeLoggingChannelsIfNecessary):

        * platform/MimeTypeRegistry.cpp:
        (WebCore::initialiseSupportedNonImageMimeTypes): Add "application/x-ftp-directory"

        * platform/SharedBuffer.cpp:
        (WebCore::SharedBuffer::createWithContentsOfFile): Stub for now
        * platform/SharedBuffer.h:

        * platform/mac/SharedBufferMac.mm:
        (WebCore::SharedBuffer::createWithContentsOfFile): Load contents of the file into an NSData, then
          wrap that NSData

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

        Reviewed by Darin.

        http://bugs.webkit.org/show_bug.cgi?id=14618
        REGRESSION(13464): drivehq.com login form doesn't work

        Test: http/tests/misc/post-submit-button.html

        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::appendFormData): Append a submit even if its value is empty.

2007-07-13  Oliver Hunt  <oliver@apple.com>

        Reviewed by Sam.

        Fix for 
            <rdar://problem/5335265> REGRESSION: WebCore::DragController crashes if WebDragSourceActionDHTML cleared
            http://bugs.webkit.org/show_bug.cgi?id=13652

        Reorder logic for drag initiation: we can always preflight the clipboard, regardless as to whether 
        we are performing any dhtml drag handling    

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

2007-07-13  Matt Lilek  <pewtermoose@gmail.com>

        Reviewed by Tim Hatcher.

        Bug 14401: Semi-regression: Can no longer copy anything from the inspector
        http://bugs.webkit.org/show_bug.cgi?id=14401

        * page/inspector/inspector.css:

2007-07-13  Beth Dakin  <bdakin@apple.com>

        Reviewed by Hyatt.

        Fix for <rdar://problem/5304742> A hang occurs when attempting to 
        display web clip banner at http://www.signonsandiego.com/sports/
        chargers/index.html

        Here is the actual fix. 
        * rendering/RenderInline.cpp:
        (WebCore::RenderInline::absoluteRects): Set topLevel to 
        false when we recurse to get our children's absoluteRects.
        * rendering/RenderInline.h: New boolean parameter 
        topLevel that defaults to true.
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::absoluteRects):
        * rendering/RenderObject.h:

        And these are just other implementations/declarations of this 
        (virtual) function that have to add the parameter. No behavior 
        change here.
        * rendering/RenderPath.cpp:
        (WebCore::RenderPath::absoluteRects):
        * rendering/RenderPath.h:
        * rendering/RenderSVGContainer.cpp:
        (WebCore::RenderSVGContainer::absoluteRects):
        * rendering/RenderSVGContainer.h:
        * rendering/RenderSVGHiddenContainer.cpp:
        (WebCore::RenderSVGHiddenContainer::absoluteRects):
        * rendering/RenderSVGHiddenContainer.h:
        * rendering/RenderSVGImage.cpp:
        (WebCore::RenderSVGImage::absoluteRects):
        * rendering/RenderSVGImage.h:
        * rendering/RenderSVGInlineText.cpp:
        (WebCore::RenderSVGInlineText::absoluteRects):
        * rendering/RenderSVGInlineText.h:
        * rendering/RenderSVGTSpan.cpp:
        (WebCore::RenderSVGTSpan::absoluteRects):
        * rendering/RenderSVGTSpan.h:
        * rendering/RenderSVGText.cpp:
        (WebCore::RenderSVGText::absoluteRects):
        * rendering/RenderSVGText.h:
        * rendering/RenderText.cpp:
        (WebCore::RenderText::absoluteRects):
        * rendering/RenderText.h:
        * rendering/RenderView.cpp:
        (WebCore::RenderView::absoluteRects):
        * rendering/RenderView.h:

2007-07-13  Mitz Pettel  <mitz@webkit.org>

        Reviewed by Hyatt.

        - fix http://bugs.webkit.org/show_bug.cgi?id=13438 <rdar://problem/5153030>
              Run rounding makes word-break:break-all/word not functional

        Test: fast/text/word-break-run-rounding.html

        * rendering/RenderText.cpp:
        (WebCore::RenderText::calcPrefWidths): Update the maximum width only on word
        boundaries to avoid rounding errors.
        * rendering/bidi.cpp:
        (WebCore::RenderBlock::findNextLineBreak): Integrated breakAll with the
        midWordBreak/wrapW mechanism. Also made the wrapW upper bound more accurate
        by resetting it when tmpW is committed.

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

        Reviewed by Geoff Garen.

        Patch for <rdar://problem/5318394>
        http site can read/write content of https site in same domain

        Add protocol and port checks in isSafeScript.

        * bindings/js/kjs_window.cpp:
        (KJS::Window::isSafeScript):

2007-07-13  Anders Carlsson  <andersca@apple.com>

        Reviewed by Mitz Pettel.

        <rdar://problem/5298870> 
        REGRESSION: In Yahoo Mail modal dialog, OK and Cancel buttons do not work, and descriptive text is missing (14327)
        
        http://bugs.webkit.org/show_bug.cgi?id=14327
        REGRESSION (r21367): dialogArguments not set in window generated by showModalDialog

        When creating popup windows/dialogs, prevent the window properties from being cleared by the initial frame load.
        
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::FrameLoader):
        (WebCore::FrameLoader::createWindow):
        (WebCore::FrameLoader::clear):
        (WebCore::FrameLoader::begin):
        (WebCore::FrameLoader::open):
        * loader/FrameLoader.h:
        (WebCore::FrameLoader::setShouldClearWindowProperties):
        * manual-tests/modal-dialog-arguments.html: Added.

2007-07-13  Steve Falkenburg  <sfalken@apple.com>

        Update ResourceError related code to account for changes in CF interfaces.

        Reviewed by Darin, Ada.

        * platform/network/ResourceError.h: Change Mac conditionals to CF to share more code.
        * platform/network/cf/ResourceErrorCF.cpp:
        (WebCore::ResourceError::ResourceError): Modified based on CFErrorRef changes
        (WebCore::ResourceError::unpackPlatformError): Ported from ResourceErrorMac.mm.
        (WebCore::ResourceError::operator CFErrorRef): Ported from ResourceErrorMac.mm.
        (WebCore::ResourceError::operator CFStreamError): Modified based on CFErrorRef changes.

2007-07-13  Antti Koivisto  <antti@apple.com>

        Reviewed by Adele.
        
        Fix <rdar://problem/5192256>
        click() in onchange handler causes another change event (causes hang at http://forums.whirlpool.net.au/)
        
        Guard against generating a simulated event from within a simulated event in the same node. Try to
        match Firefox behavior.

        * dom/EventTargetNode.cpp:
        (WebCore::EventTargetNode::dispatchSimulatedMouseEvent):
        (WebCore::EventTargetNode::dispatchSimulatedClick):
        * dom/Node.cpp:
        (WebCore::Node::Node):
        * dom/Node.h:

2007-07-13  Antti Koivisto  <antti@apple.com>

        Reviewed by Darin.
        
        Fix <rdar://problem/5333387>
        Combination of selection and click() on checkbox crashes
        
        Ensure there is no pending style update before doing synchronous paint. Under certain
        circumstances this ends up doing style recalc in middle of paint() which may
        for example tear down the rendering tree being painted, with bad results.

        * dom/ContainerNode.cpp:
        (WebCore::ContainerNode::setActive):

2007-07-13  Antti Koivisto  <antti@apple.com>

        Reviewed by Adele.
        
        Fix <rdar://problem/5333365>
        Calling click() is very slow
        
        There is a 100ms delay in ContainerNode::setActive() to do an activation effect. It is used for
        simulated mouse activations (using keyboard for example). However, it shouldn't be done when calling from javascript 
        (through click() interface) since it hangs script execution.

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

2007-07-13  Mitz Pettel  <mitz@webkit.org>

        Reviewed by Dave Hyatt.

        - fix http://bugs.webkit.org/show_bug.cgi?id=13873
          Incomplete repaint of replaced element's box shadow

        Tests: fast/repaint/box-shadow-h.html
               fast/repaint/box-shadow-v.html

        * rendering/RenderHTMLCanvas.cpp:
        (WebCore::RenderHTMLCanvas::layout): Added a call to adjustOverflowForBoxShadow().
        * rendering/RenderImage.cpp:
        (WebCore::RenderImage::layout): Ditto.
        * rendering/RenderPartObject.cpp:
        (WebCore::RenderPartObject::layout): Ditto.
        * rendering/RenderReplaced.cpp:
        (WebCore::RenderReplaced::RenderReplaced): Initialize m_hasOverflow.
        (WebCore::RenderReplaced::~RenderReplaced): Added. Removes this object from the
        overflow rect map if it has overflow.
        (WebCore::RenderReplaced::shouldPaint): Account for overflow.
        (WebCore::RenderReplaced::adjustOverflowForBoxShadow): Added. Creates or
        removes an entry for this object in the global overflow rect map.
        (WebCore::RenderReplaced::overflowHeight): Added.
        (WebCore::RenderReplaced::overflowWidth): Added.
        (WebCore::RenderReplaced::overflowLeft): Added.
        (WebCore::RenderReplaced::overflowTop): Added.
        (WebCore::RenderReplaced::overflowRect): Added.
        * rendering/RenderReplaced.h:

2007-07-13  Mitz Pettel  <mitz@webkit.org>

        Reviewed by Dave Hyatt.

        - fix http://bugs.webkit.org/show_bug.cgi?id=14395
          When a <p> is inside <li> two <BR>s are rendered

        Test: fast/lists/marker-before-empty-inline.html

        * rendering/RenderBlock.h:
        * rendering/RenderListItem.cpp:
        (WebCore::getParentOfFirstLineBox): Changed to skip empty inline flows that
        do not actually generate any line boxes. Limited the nested lists quirk to
        the case where the list is a child of the list item, to match Firefox.
        * rendering/bidi.cpp:
        (WebCore::requiresLineBox): Added. Factored out of skipWhitespace.
        (WebCore::RenderBlock::generatesLineBoxesForInlineChild): Added. Checkes
        whether the child or any of its siblings following it will generate a line
        box in the flow.
        (WebCore::RenderBlock::skipWhitespace):

2007-07-13  Holger Hans Peter Freyther  <zecke@selfish.org>

        Reviewed by Alexey.

        Move HTTP methods to parse Content-Type from xmlhttprequest.cpp
        which is LGPL to HTTPParsers.cpp. As both files were written by the
        same author and the advice to move them came from him I think this move
        is what is meant to be done.

        Move filenameFromHTTPContentDisposition to HTTPParsers as well. This parse
        function uses Vector<String>::split and doesn't honor quoting. This needs
        to be fixed in later versions.

        http://bugs.webkit.org/show_bug.cgi?id=5954 and http://bugs.webkit.org/show_bug.cgi?id=14059
        benefit from this change.

        * platform/network/HTTPParsers.cpp:
        (WebCore::filenameFromHTTPContentDisposition):
        (WebCore::extractMIMETypeFromMediaType):
        (WebCore::extractCharsetFromMediaType):
        * platform/network/HTTPParsers.h:
        * platform/network/cf/ResourceResponseCFNet.cpp:
        * xml/xmlhttprequest.cpp:
        (WebCore::XMLHttpRequest::responseMIMEType):
        (WebCore::XMLHttpRequest::didReceiveResponse):

2007-07-13  Mark Rowe  <mrowe@apple.com>

        Reviewed by Mitz.

        Build fix.  Stub out ChromeClientGdk::print and SVGEmptyChromeClient::print.

        * platform/gdk/ChromeClientGdk.h:
        * platform/gdk/TemporaryLinkStubs.cpp:
        (ChromeClientGdk::print):
        * platform/graphics/svg/SVGImageEmptyClients.h:
        (WebCore::SVGEmptyChromeClient::print):

2007-07-12  Alice Liu  <alice.liu@apple.com>

        Reviewed by Maciej and Steve.

        fixed <rdar://4982432> window.print() needs to be implemented

        * bridge/win/FrameWin.cpp:
        (WebCore::Frame::print):
        * page/Chrome.cpp:
        (WebCore::Chrome::print):
        * page/Chrome.h:
        * page/ChromeClient.h:
        * platform/win/TemporaryLinkStubs.cpp:

2007-07-11  Justin Garcia  <justin.garcia@apple.com>

        Reviewed by Harrison.
        
        <rdar://problem/5300379> Mail hung on option-delete
        
        We were starting backward iteration at [container, 0] and
        emitting for container over and over.

        * editing/TextIterator.cpp:
        (WebCore::SimplifiedBackwardsTextIterator::advance): Don't 
        emit characters for a node if we're starting iteration at 
        [container, 0].  Don't emit characters for exiting containers
        if we've already done so.

2007-07-12  Kevin Decker  <kdecker@apple.com>

        Reviewed by Mark Rowe.

        <rdar://problem/5039463> find a good gray that works well for full frame plug-ins; consistent look for plugins

        * loader/PluginDocument.cpp:
        (WebCore::PluginTokenizer::createDocumentStructure): Changed values to a darker gray, per request from the HI team.

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

        Reviewed by Maciej.

        Patch for <rdar://problem/5329841>
        Calling window.closed on a closed window causes Safari to crash

        - Replaces the Frame member variable in KJS::Window for more appropriate DOMWindow
        - Adds additional new null checks as necessary
        - Removes bogus toBoolean method
        - Removes unused scheduleClose method

        Test: fast/dom/Window/window-closed-crash.html

        * bindings/js/JSCustomXPathNSResolver.cpp:
        (WebCore::JSCustomXPathNSResolver::create):
        * bindings/js/JSDOMWindowCustom.cpp:
        (WebCore::JSDOMWindow::customGetOwnPropertySlot):
        (WebCore::JSDOMWindow::customPut):
        * bindings/js/JSXMLHttpRequest.cpp:
        (KJS::JSXMLHttpRequestPrototypeFunction::callAsFunction):
        * bindings/js/kjs_events.cpp:
        (WebCore::JSAbstractEventListener::handleEvent):
        (WebCore::JSLazyEventListener::parseCode):
        * bindings/js/kjs_window.cpp:
        (KJS::Window::Window):
        (KJS::Window::impl):
        (KJS::Window::interpreter):
        (KJS::Window::location):
        (KJS::Window::find):
        (KJS::allowPopUp):
        (KJS::createWindow):
        (KJS::canShowModalDialog):
        (KJS::canShowModalDialogNow):
        (KJS::showModalDialog):
        (KJS::Window::getValueProperty):
        (KJS::Window::childFrameGetter):
        (KJS::Window::indexGetter):
        (KJS::Window::namedItemGetter):
        (KJS::Window::getOwnPropertySlot):
        (KJS::Window::put):
        (KJS::Window::isSafeScript):
        (KJS::Window::setListener):
        (KJS::Window::getListener):
        (KJS::Window::clear):
        (KJS::WindowFunc::callAsFunction):
        (KJS::Window::updateLayout):
        (KJS::ScheduledAction::execute):
        (KJS::Window::disconnectFrame):
        (KJS::Location::put):
        (KJS::LocationFunc::callAsFunction):
        * bindings/js/kjs_window.h:
        * page/mac/WebCoreFrameBridge.mm:
        (updateRenderingForBindings):

2007-07-12  Mark Rowe  <mrowe@apple.com>

        Reviewed by Ada.

        <rdar://problem/5329877> REGRESSION: Document::setTransformSource leaks an xmlDocPtr if called more than once per document

        * dom/Document.cpp:
        (WebCore::Document::setTransformSource): Free any existing m_transformSource before overwriting it, rather than simply leaking it.
        * dom/Document.h:

2007-07-12  Holger Hans Peter Freyther  <zecke@selfish.org>

        Reviewed by Mark Rowe.

        Fix compilation of the CURL backend after the removing of accessors from ResourceHandle in r24202

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

2007-07-12  Mark Rowe  <mrowe@apple.com>

        Reviewed by Darin.

        <rdar://problem/5327189> Logic error in DeprecatedString::to{,U}Int{,64} can lead to reading past end of buffer

        The fix for reading past the end of the buffer is to verify we are not at the end of the string before checking
        for a leading '+' character.  Rather than fixing the logic error in four nearly-identical functions I chose to
        extract the common functionality into the toIntegralType helper function which the four functions call through to.

        * platform/DeprecatedString.cpp:
        (WebCore::isCharacterAllowedInBase):
        (WebCore::toIntegralType):
        (WebCore::DeprecatedString::toInt):
        (WebCore::DeprecatedString::toInt64):
        (WebCore::DeprecatedString::toUInt):
        (WebCore::DeprecatedString::toUInt64):

2007-07-12  George Staikos  <staikos@kde.org>

        Reviewed by Alexey.

        Remove unused variables and fix rendering of comoboxes.

        * platform/graphics/qt/ImageQt.cpp:
        (WebCore::BitmapImage::draw):
        * platform/qt/RenderThemeQt.cpp:
        (WebCore::RenderThemeQt::paintMenuList):

2007-07-11  Oliver Hunt  <oliver@apple.com>

        Reviewed by Maciej

        Fix for <rdar://problem/5329712> GMail crash when trying to compose new message

        * platform/win/FontDataWin.cpp:
        (WebCore::FontData::containsCharacters):

2007-07-11  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Darin.

        http://bugs.webkit.org/show_bug.cgi?id=14584
        XMLHttpRequest treats null login/password incorrectly

        Test: http/tests/xmlhttprequest/null-auth.php

        * xml/xmlhttprequest.cpp:
        (WebCore::XMLHttpRequest::open):
        * xml/xmlhttprequest.h:
        Split the open() method into three to distinguish between missing and null credentials.

        * bindings/js/JSXMLHttpRequest.cpp:
        (KJS::JSXMLHttpRequestPrototypeFunction::callAsFunction): Call the appropriate open().

2007-07-11  Oliver Hunt  <oliver@apple.com>

        Build fix for windows

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

2007-07-11  Oliver Hunt  <oliver@apple.com>

        Reviewed by Maciej.

        Fix <rdar://problem/5329481> Character range rect code for IME support needs to be crossplatform

        Move -[WebCoreFrameBridge firstRectForDOMRange:] to Frame::firstRectForRange

        * page/Frame.cpp:
        (WebCore::Frame::firstRectForRange):
        * page/Frame.h:
        * page/mac/WebCoreFrameBridge.mm:
        (-[WebCoreFrameBridge firstRectForDOMRange:]):

2007-07-11  Steve Falkenburg  <sfalken@apple.com>

        Static analysis build fix.
        
        Only specify /analyze (PREfast) if it is available.
        Prevents entire project from rebuilding each time.        

        Reviewed by Hyatt.

        * WebCore.vcproj/WebCore.vcproj:

2007-07-11  George Staikos  <staikos@kde.org>

        Reviewed by Olliej.

        Make comboboxes update when the current item is changed.

        * platform/qt/PopupMenuQt.cpp:
        (WebCore::PopupMenu::updateFromElement):
        * platform/qt/QWebPopup.cpp:
        (WebCore::QWebPopup::activeChanged):

2007-07-11  George Staikos  <staikos@kde.org>

        Reviewed by Brady.

        Add a destructor to cleanup the SQL handle.

        * loader/icon/SQLDatabase.h:
        (WebCore::SQLDatabase::~SQLDatabase):

2007-07-11  Holger Hans Peter Freyther  <zecke@selfish.org>

        Reviewed by Darin.

        As of http://bugs.webkit.org/show_bug.cgi?id=14527 move the
        WebCore/ForwardingHeader/JavaScriptCore to JavaScriptCore

        * ForwardingHeaders/JavaScriptCore: Removed.
        * ForwardingHeaders/JavaScriptCore/APICast.h: Removed.
        * ForwardingHeaders/JavaScriptCore/JSBase.h: Removed.
        * ForwardingHeaders/JavaScriptCore/JSContextRef.h: Removed.
        * ForwardingHeaders/JavaScriptCore/JSLock.h: Removed.
        * ForwardingHeaders/JavaScriptCore/JSObjectRef.h: Removed.
        * ForwardingHeaders/JavaScriptCore/JSStringRef.h: Removed.
        * ForwardingHeaders/JavaScriptCore/JSStringRefCF.h: Removed.
        * ForwardingHeaders/JavaScriptCore/JSValueRef.h: Removed.
        * ForwardingHeaders/JavaScriptCore/JavaScriptCore.h: Removed.

2007-07-11  Anders Carlsson  <andersca@apple.com>

        Fix build.
        
        * platform/network/cf/ResourceHandleCFNet.cpp:
        (WebCore::willSendRequest):
        (WebCore::didReceiveResponse):
        (WebCore::didReceiveData):
        (WebCore::didFinishLoading):
        (WebCore::didFail):
        (WebCore::didReceiveChallenge):

2007-07-11  George Staikos  <staikos@kde.org>

        Repair the build.

        * platform/network/qt/ResourceHandleQt.cpp:
        (WebCore::ResourceHandle::start):

2007-07-11  Adele Peterson  <adele@apple.com>

        Reviewed by Darin.

        Fix for <rdar://problem/5230188> REGRESSION: Active/inactive marked text is not distinguished in textfields and textareas

        We were previously trying to leave room for 1px of space between the text and the underline.
        This change removes that requirement so that if we don't have room for the extra space, we still draw the thick underline
        touching the text.

        * rendering/InlineTextBox.cpp: (WebCore::InlineTextBox::paintMarkedTextUnderline):

2007-07-11  Anders Carlsson  <andersca@apple.com>

        Reviewed by Darin and Geoff.

        <rdar://problem/5313508>
        REGRESSION (Leopard): http/tests/xmlhttprequest/basic-auth.html hangs
        
        Leopard Foundation now ignores credentials passed in as part of the URL so we need to pass them ourselves.
        
        For the asynchronous case, we simply keep track of the URL and if it has a user name and password, we
        pass those if we're asked to authenticate.
                
        For the synchronous case, implement a new connection delegate and run it in a separate mode so 
        no other sources will fire.

        * platform/network/mac/ResourceHandleMac.mm:
        (WebCore::ResourceHandle::loadResourceSynchronously):
        (-[WebCoreResourceHandleAsDelegate dealloc]):
        (-[WebCoreResourceHandleAsDelegate connection:willSendRequest:redirectResponse:]):
        (-[WebCoreResourceHandleAsDelegate connection:didReceiveAuthenticationChallenge:]):
        (-[WebCoreSynchronousLoader _isDone]):
        (-[WebCoreSynchronousLoader dealloc]):
        (-[WebCoreSynchronousLoader connection:willSendRequest:redirectResponse:]):
        (-[WebCoreSynchronousLoader connection:didReceiveAuthenticationChallenge:]):
        (-[WebCoreSynchronousLoader connection:didReceiveResponse:]):
        (-[WebCoreSynchronousLoader connection:didReceiveData:]):
        (-[WebCoreSynchronousLoader connectionDidFinishLoading:]):
        (-[WebCoreSynchronousLoader connection:didFailWithError:]):
        (-[WebCoreSynchronousLoader _data]):
        (-[WebCoreSynchronousLoader _response]):
        (-[WebCoreSynchronousLoader _error]):
        (+[WebCoreSynchronousLoader loadRequest:returningResponse:error:]):

2007-07-11  Darin Adler  <darin@apple.com>

        Reviewed by Sam Weinig.

        - fix <rdar://problem/5315265> REGRESSION: Leopard launch time -
          there are about 190 stats of icudt36b files during launch

        * platform/TextEncodingRegistry.cpp: (WebCore::atomicCanonicalTextEncodingName):
        Add a special case for the empty string so we don't load the extended text
        encodings just so we can return 0 for that case.

2007-07-11  Anders Carlsson  <andersca@apple.com>

        Reviewed by Darin.

        Remove a bunch of unneeded accessors from ResourceHandle.
        
        * loader/icon/IconLoader.cpp:
        (WebCore::IconLoader::didReceiveResponse):
        (WebCore::IconLoader::didFail):
        (WebCore::IconLoader::didFinishLoading):
        * platform/network/ResourceHandle.cpp:
        * platform/network/ResourceHandle.h:

2007-07-09  Justin Garcia  <justin.garcia@apple.com>

        Reviewed by Darin.
        
        <rdar://problem/5234383> REGRESSION: Sentence breaker method returning entire document length
        
        The functions for moving the caret to the next/previous sentence boundary
        were in many cases moving to the beginning/end of the document.  The functions that 
        should move the caret to an equivalent position in the next/previous sentence behaved
        like the aforementioned functions ought to.  Put the code from the second two functions
        in the first and made sure that the second two are properly FIXMEd.  They're rarely 
        used (filed 5323691).
        
        * editing/SelectionController.cpp:
        (WebCore::SelectionController::modify): Added an option for sentenceBoundary granularity,
        so that we can test the functions that were broken from JS.
        * editing/visible_units.cpp:
        (WebCore::startOfSentence): Removed the FIXME about 5234383.
        (WebCore::endSentenceBoundary): Make this function do what nextSentencePositionBoundary
        current does.
        (WebCore::endOfSentence): Removed the FIXME about 5234383.
        (WebCore::previousSentencePosition): Removed an incorrect FIXME.
        (WebCore::nextSentencePositionBoundary): Tweaked FIXME.  This function is
        identical, not close to endSentenceBoundary.
        (WebCore::nextSentencePosition): Removed an incorrect FIXME.

2007-07-11  Rob Buis  <buis@kde.org>

        Reviewed by Darin.

        http://bugs.webkit.org/show_bug.cgi?id=14453
        REGRESSION: www.nzherald.co.nz almost all the formating is gone
 
        Be less strict for the hex color definition.

        * css/CSSGrammar.y:
        * css/cssparser.cpp:
        (WebCore::CSSParser::lex):
        (WebCore::CSSParser::text):
        * css/tokenizer.flex:

2007-07-11  Rob Buis  <buis@kde.org>

        Reviewed by Oliver.

        Forgot to commit this as part of commit r24146. Now we are sure
        createElement creates elements in the xhtml namespace only.

        * ksvg2/svg/SVGDocument.cpp:
        * ksvg2/svg/SVGDocument.h:

2007-07-10  Sam Weinig  <sam@webkit.org>

        Reviewed by Oliver.

        Move more attributes from the pure JS bindings in KJS::Window
        to the implementation in DOMWindow and autogenerate the new bindings

        Test: fast/dom/Window/get-set-properties.html

        * bindings/js/JSDOMWindowCustom.cpp:
        (WebCore::JSDOMWindow::customGetOwnPropertySlot): Change to use propHashTable in
        JSDOMWindow instead of KJS::Window
        * bindings/js/kjs_window.cpp:
        (KJS::Window::getValueProperty):
        (KJS::Window::put):
        * bindings/js/kjs_window.h:
        (KJS::Window::):
        * bindings/scripts/CodeGeneratorJS.pm: Cleanup getValueProperty and put generation
        to reduce code duplication. 
        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::closed):
        (WebCore::DOMWindow::length):
        (WebCore::DOMWindow::name):
        (WebCore::DOMWindow::setName):
        (WebCore::DOMWindow::status):
        (WebCore::DOMWindow::setStatus):
        (WebCore::DOMWindow::defaultStatus):
        (WebCore::DOMWindow::setDefaultStatus):
        * page/DOMWindow.h:
        (WebCore::DOMWindow::defaultstatus):
        (WebCore::DOMWindow::setDefaultstatus):
        * page/DOMWindow.idl:

2007-07-10  Sam Weinig  <sam@webkit.org>

        Reviewed by Geoff.

        Fix for <rdar://problem/5326791> XSS vulnerability: ability to set window.defaultStatus,
        window.defaultstatus and window.status cross domains

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

        * bindings/js/kjs_window.cpp:
        (KJS::Window::put): Adds isSafeScript check for defaultStatus,
        defaultstatus and status cases.

2007-07-10  Sam Weinig  <sam@webkit.org>

        Fix build for BuildBot.

        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::outerHeight):
        (WebCore::DOMWindow::outerWidth):
        (WebCore::DOMWindow::screenX):
        (WebCore::DOMWindow::screenY):

2007-07-10  Brady Eidson  <beidson@apple.com>

        Reviewed by Sam

        <rdar://problem/5326653> - REGRESSION: [WebBackForwardList forwardListCount] might return incorrect result

        No layout test because this is an API issue that can't be tested in DRT or the browser

        * history/BackForwardList.cpp:
        (WebCore::BackForwardList::forwardListCount): If the index is NoCurrentItemIndex, return 0

2007-07-10  Sam Weinig  <sam@webkit.org>

        Reviewed by Darin.

        Move more readonly attributes from pure JS bindings in KJS::Window
        to the implementation in DOMWindow and autogenerate the new bindings.

        * bindings/js/kjs_window.cpp:
        (KJS::Window::getValueProperty):  Sort the hashmap comment into categories
        to make further migration easier.
        * bindings/js/kjs_window.h: Sort the enum into categories to make further
        migration easier.
        (KJS::Window::):
        * page/DOMWindow.cpp: Add new methods.
        (WebCore::DOMWindow::focus):
        (WebCore::DOMWindow::blur):
        (WebCore::DOMWindow::offscreenBuffering):
        (WebCore::DOMWindow::outerHeight):
        (WebCore::DOMWindow::outerWidth):
        (WebCore::DOMWindow::innerHeight):
        (WebCore::DOMWindow::innerWidth):
        (WebCore::DOMWindow::screenX):
        (WebCore::DOMWindow::screenY):
        (WebCore::DOMWindow::scrollX):
        (WebCore::DOMWindow::scrollY):
        (WebCore::DOMWindow::getComputedStyle):
        (WebCore::DOMWindow::getMatchedCSSRules): Add null Document assertion.
        (WebCore::DOMWindow::devicePixelRatio): Add null Frame and Page checks.
        * page/DOMWindow.h:
        (WebCore::DOMWindow::screenLeft):
        (WebCore::DOMWindow::screenTop):
        (WebCore::DOMWindow::pageXOffset):
        (WebCore::DOMWindow::pageYOffset):
        * page/DOMWindow.idl:

2007-07-10  Oliver Hunt  <oliver@apple.com>

        Reviewed by Maciej.

        Fix for <rdar://problem/5326417> Editor::unmarkText needs to be crossplatform

        Missed this in earlier patch to make text marking platform independent.

        * editing/Editor.cpp:
        (WebCore::Editor::unmarkText):
           Add platform independent impl
        * editing/mac/EditorMac.mm:
           Remove the old mac path.

2007-07-10  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Tim Hatcher.

        Added a Page counter. This helped me while investigating 
        <rdar://problem/5314463> 40MB of WebKit memory still allocated after 
        closing large email in Mail

        * WebCore.xcodeproj/project.pbxproj:
        * page/Page.cpp:
        (WebCore::):
        (WebCore::PageCounter::~PageCounter):
        (WebCore::Page::Page):
        (WebCore::Page::~Page):

2007-07-10  Timothy Hatcher  <timothy@apple.com>

        Reviewed by Geoff.

        <rdar://problem/5326126> InspectorResource holds onto more data than it needs

        Reduces the fixed size of InspectorResource from 630 bytes to 224 bytes. Now
        selectively pick out parts of the ResourceRequest and ResourceResponse objects
        for the info needed and store that directly in InspectorResource.

        The ResourceRequest and ResourceResponse objects hold a reference to the original
        NSURL object, so almost double the data was being kept around. So the struct size
        reduction is just the tip of the ice burg on what this really saves.

        In a test of 100,000 XMLHTTPRequests using a 85 byte long data URL, I see ~21 MB less
        RSIZE compared to Safari running without this change.

        * page/InspectorController.cpp:
        (WebCore::InspectorResource::InspectorResource):
        (WebCore::InspectorResource::type):
        (WebCore::addSourceToFrame):
        (WebCore::scriptObjectForRequest):
        (WebCore::scriptObjectForResponse):
        (WebCore::InspectorController::addScriptResource):
        (WebCore::InspectorController::addAndUpdateScriptResource):
        (WebCore::updateResourceRequest):
        (WebCore::updateResourceResponse):
        (WebCore::InspectorController::updateScriptResourceRequest):
        (WebCore::InspectorController::updateScriptResourceResponse):
        (WebCore::InspectorController::didLoadResourceFromMemoryCache):
        (WebCore::InspectorController::identifierForInitialRequest):
        (WebCore::InspectorController::willSendRequest):
        (WebCore::InspectorController::didReceiveResponse):
        (WebCore::InspectorController::didFailLoading):
        * page/InspectorController.h:

2007-07-10  Darin Adler  <darin@apple.com>

        Reviewed by Brady.

        - fix crash introduced by my patch for 5318732, only seen in release builds

        * page/Page.cpp: (WebCore::Page::~Page): Added a missing null check.

2007-07-10  Andrea Cavalli  <amc82@cam.ac.uk>

        Reviewed by George Staikos.

        Fixed render theme for text field.

        * platform/qt/RenderThemeQt.cpp:
        (WebCore::RenderThemeQt::paintTextField):

2007-07-10  Qing Zhao  <qing@staikos.net>

        Reviewed by George Staikos.

        Draw focus rings for nodes that are not rendered by QStyle.

        * platform/graphics/qt/GraphicsContextQt.cpp:
        (WebCore::focusRingColor):
        (WebCore::GraphicsContext::drawFocusRing):
        * platform/qt/RenderThemeQt.cpp:
        (WebCore::RenderThemeQt::supportsFocusRing):
        (WebCore::RenderThemeQt::supportsFocus):

2007-07-10  Nikolas Zimmermann  <zimmermann@kde.org>

        Reviewed by Geoff.

        Fix 'unsigned int' overflow in CodeGeneratorJS.pm.
        This fixes hashing of "SVG_FEBLEND_MODE_NORMAL". Its hashvalue exceeded 2^32, which
        is no problem in perl but in the cpp code. Emulate C/C++ behaviour by using "% 2^32" in
        the perl code. Testcase available in feature-branch soon (js-svg-constructors.svg).

        * bindings/scripts/CodeGeneratorJS.pm:

2007-07-10  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Maciej Stachowiak.

        Disabled Arena recycling in RenderArena. PLT shows no regression 
        (possibly a small speedup), and this can reduce allocated memory in 
        WebKit clients by about 120K (4K per Arena * 30 Arenas).
        
        I happened upon this optimization while investigating 
        <rdar://problem/5314463> WebKit hangs on to 40MB RAM after closing 
        large email in Mail (appears to be render tree arena allocator), 
        although I don't think it will come close to fixing that bug 
        completely.

        * rendering/RenderArena.cpp:
        (WebCore::RenderArena::~RenderArena): Use FinishArenaPool, which frees
        the ArenaPool's Arenas immediately.

2007-07-10  Mitz Pettel  <mitz@webkit.org>

        Reviewed by Hyatt.

        - fix http://bugs.webkit.org/show_bug.cgi?id=14449
          REGRESSION (r14345-r14375): Absolutely positioned image does not scale to containing element's height

        Test: fast/replaced/absolute-position-percentage-height.html

        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::calcReplacedHeightUsing): For positioned elements, evaluate
        the percentage with respect to the container's final height.

2007-07-10  Brady Eidson  <beidson@apple.com>

        Reviewed by Mark Rowe

        Add 64-bit integer converters to our string classes for future work

        * platform/DeprecatedString.cpp:
        (WebCore::DeprecatedString::toInt64):
        (WebCore::DeprecatedString::toUInt64):
        * platform/DeprecatedString.h:

        * platform/PlatformString.h:
        * platform/String.cpp:
        (WebCore::String::toInt64):
        (WebCore::String::toUInt64):

        * platform/StringImpl.cpp:
        (WebCore::StringImpl::toInt64):
        (WebCore::StringImpl::toUInt64):
        * platform/StringImpl.h:

2007-07-10  Darin Adler  <darin@apple.com>

        Reviewed by Anders.

        - fix <rdar://problem/5318732> REGRESSION: In Mail, a crash occurs when attempting to send
          a HTML based message (nytimes.com, washingtonpost.com, latimes.com)

        Did an audit of calls to get the inspector and most other uses of Page* and added null
        checks since Frame* can outlast its Page*.

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::createWindow): Added null check.
        (WebCore::FrameLoader::loadSubframe): Ditto.
        (WebCore::FrameLoader::load): Ditto.
        (WebCore::FrameLoader::transitionToCommitted): Ditto.
        (WebCore::FrameLoader::checkLoadCompleteForThisFrame): Ditto.
        (WebCore::FrameLoader::continueLoadAfterWillSubmitForm): Ditto.
        (WebCore::FrameLoader::addExtraFieldsToRequest): Ditto.
        (WebCore::FrameLoader::loadResourceSynchronously): Ditto.
        (WebCore::FrameLoader::continueLoadAfterNavigationPolicy): Ditto.
        (WebCore::FrameLoader::requestFromDelegate): Ditto.
        (WebCore::FrameLoader::canGoBackOrForward): Ditto.
        (WebCore::FrameLoader::getHistoryLength): Ditto.
        (WebCore::FrameLoader::historyURL): Ditto.
        (WebCore::FrameLoader::cachePageForHistoryItem): Ditto.
        (WebCore::FrameLoader::addBackForwardItemClippedAtTarget): Ditto.
        (WebCore::FrameLoader::goToItem): Ditto.
        (WebCore::FrameLoader::dispatchWindowObjectAvailable): Ditto.
        (WebCore::FrameLoader::dispatchDidCommitLoad): Ditto.
        (WebCore::FrameLoader::dispatchAssignIdentifierToInitialRequest): Ditto.
        (WebCore::FrameLoader::dispatchWillSendRequest): Ditto.
        (WebCore::FrameLoader::dispatchDidReceiveResponse): Ditto.
        (WebCore::FrameLoader::dispatchDidReceiveContentLength): Ditto.
        (WebCore::FrameLoader::dispatchDidFinishLoading): Ditto.
        (WebCore::FrameLoader::dispatchDidLoadResourceFromMemoryCache): Ditto.

        * page/ContextMenuController.h:
        * page/ContextMenuController.cpp:
        (WebCore::ContextMenuController::ContextMenuController): Removed unneeded and
        unused Page* parameter.
        (WebCore::openNewWindow): Added null check.
        (WebCore::ContextMenuController::contextMenuItemSelected): Ditto.

        * page/InspectorController.h:
        (WebCore::InspectorController::pageDestroyed): Added. Since this object is
        owned by the Page and has a back-pointer to it, it needs an explicit disconnect.
        There's already a higher-level one, but this is more reliable than that.
        * page/InspectorController.cpp:
        (WebCore::InspectorController::windowScriptObjectAvailable): Added null check.
        (WebCore::InspectorController::windowUnloading): Ditto.

        * page/Page.cpp:
        (WebCore::Page::Page): Updated for change in parameters of ContextMenuController 
        constructor.
        (WebCore::Page::~Page): Added call to InspectorController pageDestroyed().

        * page/Chrome.cpp: Updated includes.
        * page/DragController.cpp: Ditto.

2007-07-10  Adam Treat  <adam@staikos.net>

        Reviewed by George Staikos.

        Bring scroll wheel out of Ludicrous Speed.

        * platform/qt/WheelEventQt.cpp:
        (WebCore::PlatformWheelEvent::PlatformWheelEvent):

2007-07-09  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Maciej Stachowiak.

        Fixed http://bugs.webkit.org/show_bug.cgi?id=13241 | <rdar://problem/5126396>
        onload fires before content is finished loading (woot.com)
        
        * dom/Document.cpp:
        (WebCore::Document::close): Try to go through the normal "Am I done loading?"
        machinery before dispatching the load event. As the comment indicates, 
        we can't do this in all cases, so the fix isn't perfect. However, a perfect 
        solution would require much riskier sweeping changes to the loader, which 
        are best left for later, I think.

        * xml/XSLTProcessor.cpp:
        (WebCore::XSLTProcessor::createDocumentFromSource): Removed a slightly
        worse solution to the same problem.

2007-07-10  Rob Buis  <buis@kde.org>

        Reviewed by Maciej.

        http://bugs.webkit.org/show_bug.cgi?id=8007
        createElement() and XHTML (A dynamically created table not rendered as such)

        Follow the HTML5 rules of making the name lowercase and then
        creating the element in the xhtml namespace.

        * dom/Document.cpp:
        (WebCore::Document::createElement):
        * dom/Document.h:
        * html/HTMLDocument.cpp:
        * html/HTMLDocument.h:

2007-07-09  Qing Zhao  <qing@staikos.net>

        Reviewed by George Staikos.

        Add qt context menu support.

        * WebCore.pro:
        * platform/ContextMenu.h:
        * platform/ContextMenuItem.h:
        (WebCore::PlatformMenuItemDescriptionType::PlatformMenuItemDescriptionType):
        * platform/qt/ContextMenuItemQt.cpp:
        (WebCore::ContextMenuItem::ContextMenuItem):
        (WebCore::ContextMenuItem::~ContextMenuItem):
        (WebCore::ContextMenuItem::releasePlatformDescription):
        (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):
        (WebCore::ContextMenuItem::enabled):
        * 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-07-09  Anders Carlsson  <andersca@apple.com>

        Build fix.
        
        * plugins/win/PluginViewWin.cpp:
        (WebCore::PluginViewWin::performRequest):

2007-07-09  Anders Carlsson  <andersca@apple.com>

        Reviewed by Geoff.

        Get rid of the node argument in our various script execution functions.
        
        * bindings/js/kjs_proxy.cpp:
        (WebCore::KJSProxy::evaluate):
        * bindings/js/kjs_proxy.h:
        * bindings/js/kjs_window.cpp:
        (KJS::ScheduledAction::execute):
        * dom/XMLTokenizer.cpp:
        (WebCore::XMLTokenizer::endElementNs):
        (WebCore::XMLTokenizer::notifyFinished):
        * html/HTMLScriptElement.cpp:
        (WebCore::HTMLScriptElement::evaluateScript):
        * html/HTMLTokenizer.cpp:
        (WebCore::HTMLTokenizer::scriptExecution):
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::changeLocation):
        (WebCore::FrameLoader::urlSelected):
        (WebCore::FrameLoader::submitForm):
        (WebCore::FrameLoader::replaceContentsWithScriptResult):
        (WebCore::FrameLoader::executeScript):
        * loader/FrameLoader.h:
        * page/mac/WebCoreFrameBridge.mm:
        (-[WebCoreFrameBridge stringByEvaluatingJavaScriptFromString:forceUserGesture:]):
        (-[WebCoreFrameBridge aeDescByEvaluatingJavaScriptFromString:]):

2007-07-09  Justin Garcia  <justin.garcia@apple.com>

        Rolling the fix for 5290534 back in now that 5310404 has been fixed in Mail.

        * editing/DeleteSelectionCommand.cpp:
        (WebCore::DeleteSelectionCommand::handleGeneralDelete):

2007-07-09  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Anders Carlsson.

        A little more FrameLoader cleanup while working on <rdar://problem/5126396>.
        
        Rename: "checkEmitLoadEvent" => "checkCallImplicitClose" because the function
        doesn't emit the load event; it just calls implicitClose.
        
        Rename: "m_wasLoadEventEmitted" => "m_didCallImplicitClose" because the variable
        tracks whether implicitClose was called.

        * dom/Document.cpp:
        (WebCore::Document::implicitClose): Turned 12 lines of code into 6, adding ASSERT.
        * loader/FrameLoader.h: Removed bogus declaration of non-existent emitLoadEvent().

2007-07-09  Justin Garcia  <justin.garcia@apple.com>

        Reviewed by John.
        
        REGRESSION: Crash when deleting table content in Leopard Mail

        * editing/DeleteSelectionCommand.cpp:
        (WebCore::DeleteSelectionCommand::handleGeneralDelete): Use a RefPtr
        for the next node to delete, in case it is destroyed when the
        current node is deleted.  In the crash reported in the radar, we
        crash because the next node is the div that holds the delete button
        and it's destroyed when the node that contains the selection is removed.

2007-07-09  Adam Treat  <adam@staikos.net>

        Reviewed by George Staikos.

        Convert QWebFrame from a QFrame to a pure QObject to eliminate all
        traces of widgets.

        * page/qt/EventHandlerQt.cpp:
        (WebCore::EventHandler::passSubframeEventToSubframe):
        * platform/ScrollView.h:
        * platform/Widget.h:
        * platform/qt/PlatformScrollBarQt.cpp:
        (WebCore::PlatformScrollbar::handleMouseMoveEvent):
        (WebCore::PlatformScrollbar::handleMousePressEvent):
        (WebCore::PlatformScrollbar::handleMouseReleaseEvent):
        * platform/qt/PopupMenuQt.cpp:
        (WebCore::PopupMenu::show):
        * platform/qt/ScrollViewQt.cpp:
        (WebCore::ScrollView::ScrollViewPrivate::ScrollViewPrivate):
        (WebCore::ScrollView::ScrollViewPrivate::scrollBackingStore):
        (WebCore::ScrollView::ScrollViewPrivate::windowClipRect):
        (WebCore::ScrollView::updateContents):
        (WebCore::ScrollView::update):
        (WebCore::ScrollView::geometryChanged):
        (WebCore::ScrollView::windowToContents):
        (WebCore::ScrollView::contentsToWindow):
        (WebCore::ScrollView::convertChildToSelf):
        (WebCore::ScrollView::convertSelfToChild):
        (WebCore::ScrollView::scrollbarUnderMouse):
        (WebCore::ScrollView::addChild):
        (WebCore::ScrollView::paint):
        * platform/qt/WidgetQt.cpp:
        (WebCore::WidgetPrivate::WidgetPrivate):
        (WebCore::WidgetPrivate::~WidgetPrivate):
        (WebCore::WidgetPrivate::setGeometry):
        (WebCore::WidgetPrivate::geometry):
        (WebCore::Widget::frameGeometry):
        (WebCore::Widget::setFocus):
        (WebCore::Widget::setCursor):
        (WebCore::Widget::show):
        (WebCore::Widget::hide):
        (WebCore::Widget::qwebframe):
        (WebCore::Widget::setQWebFrame):
        (WebCore::Widget::qwidget):
        (WebCore::Widget::setQWidget):
        (WebCore::Widget::setFrameGeometry):
        (WebCore::Widget::isEnabled):
        (WebCore::Widget::setEnabled):
        (WebCore::Widget::setIsSelected):
        (WebCore::Widget::invalidate):
        (WebCore::Widget::invalidateRect):
        (WebCore::Widget::removeFromParent):
        (WebCore::Widget::geometryChanged):
        (WebCore::Widget::convertToContainingWindow):
        (WebCore::Widget::convertFromContainingWindow):
        (WebCore::Widget::convertChildToSelf):
        (WebCore::Widget::convertSelfToChild):
        (WebCore::Widget::containingWindow):

2007-07-09  Anders Carlsson  <andersca@apple.com>

        Reviewed by Oliver.

        Add DocumentLoader::isLoadingMainResource.

        * WebCore.exp:

2007-07-09  John Sullivan  <sullivan@apple.com>

        Reviewed by Darin

        * WebCore.exp:
        * WebCore.xcodeproj/project.pbxproj:
        exported String::createCFString, needed for <rdar://problem/5320208>

2007-07-09  Mitz Pettel  <mitz@webkit.org>

        Reviewed by Maciej.

        Test case for the bug below, which is http://bugs.webkit.org/show_bug.cgi?id=14207

        * manual-tests/flash-unload-tab.html: Added.

2007-07-09  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Oliver.

        <rdar://problem/5295734> Repro crash closing tab/window @ maps.google.com in
        WTF::HashSet<KJS::RuntimeObjectImp*, WTF::PtrHash<KJS::RuntimeObjectImp*>,
        WTF::HashTraits<KJS::RuntimeObjectImp*> >::add + 11
        
        Automated test case is not possible. Did not bother with manual test this time.

        * bindings/js/kjs_dom.cpp:
        (WebCore::getRuntimeObject): Check that runtime root isn't null, as well as instance;
        this should cover the case where the plugin is already shut down and onunload time.

2007-07-08  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Sam.

        - fixed <rdar://problem/5220706> REGRESSION (TOT): repro crash in -[WebView(WebViewInternal) _addObject:forIdentifier:] [14425]
        http://bugs.webkit.org/show_bug.cgi?id=14425

        * bindings/js/kjs_window.cpp:
        (KJS::createWindow): No longer take an immediate argument - always do immediate loads
        on a newly created Window. Also, do a load of "" to make sure that the right info makes
        it to the app.
        (KJS::showModalDialog): Updated for above.
        (KJS::WindowFunc::callAsFunction): Updated for above.
        * dom/Document.cpp:
        (WebCore::Document::shouldBeAllowedToLoadLocalResources): If our URL is about:blank,
        we're allowed if our opener is (since the opener must have written the contents).
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::changeLocation): Add a variant which takes a KURL, which it
        expects to be pre-completed. This is to avoid completing "" to the opener URL.
        (WebCore::FrameLoader::urlSelected): Allow loading empty URLs.
        * loader/FrameLoader.h:
        
        Test case is manual only, since it takes particular app behavior to reproduce:
        
        * manual-tests/new-window-subresource-crash.html: Added.

2007-07-08  Mitz Pettel  <mitz@webkit.org>

        Reviewed by Maciej.

        - fix leaks introduced in r24099

        * dom/Element.cpp:
        (WebCore::Element::~Element): Do not delete the cached computed style here.
        (WebCore::Element::detach): Delete the computed style here instead.
        (WebCore::Element::computedStyle): Removed a redundant ref() which was
        causing the leak. Changed to return 0 if the element is not attached,
        because in that case there is currently no way to tell when to delete the computed
        style.

2007-07-08  Mitz Pettel  <mitz@webkit.org>

        Reviewed by Darin.

        - fix http://bugs.webkit.org/show_bug.cgi?id=12384
          getComputedStyle with td.style.display='none' reports '' for all properties except display

        Test: fast/css/computed-style-without-renderer.html

        Implement rich computed style for elements that do not have a renderer.

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::getPositionOffsetValue): Changed to take a RenderStyle instead of
        a RenderObject.
        (WebCore::CSSComputedStyleDeclaration::getPropertyCSSValue): Changed to
        use the computed style returned by the node instead of going through the
        renderer. Changed properties that compute by measuring the renderer to
        fall back on returning the length from the RenderStyle if a renderer does
        not exist.
        (WebCore::CSSComputedStyleDeclaration::length): Changed to return the number
        of properties we can compute even if the element has no renderer.
        (WebCore::CSSComputedStyleDeclaration::copyInheritableProperties): Changed
        to use the computed style returned by the node instead of going through the
        renderer.
        * dom/Element.cpp:
        (WebCore::ElementRareData::ElementRareData): Added a computed style member,
        used to cache computed style for elements that do not have a renderer.
        (WebCore::ElementRareData::resetComputedStyle): Added.
        (WebCore::Element::~Element): Delete the cached computed style.
        (WebCore::Element::recalcStyle): Added code to delete the cached computed
        style when necessary.
        (WebCore::Element::computedStyle): Added. Returns the style used in rendering
        the element, if available. Otherwise uses the style selector to compute style
        for the element.
        * dom/Element.h:
        * dom/Node.cpp:
        (WebCore::Node::computedStyle): Added. This method returns either the style
        used in rendering the node, or the style that would be used if the node
        had a renderer.
        * dom/Node.h:

2007-07-08  Mitz Pettel  <mitz@webkit.org>

        Reviewed by Darin.

        - fix http://bugs.webkit.org/show_bug.cgi?id=14544
          Scroll wheel events are ignored when the cursor is over an iframe's border

        * page/mac/EventHandlerMac.mm:
        (WebCore::EventHandler::passWheelEventToWidget): Changed to return false if
        the event coordinates are not inside the widget's NSView hierarchy.

2007-07-08  Rob Buis  <buis@kde.org>

        Reviewed by Mitz.

        http://bugs.webkit.org/show_bug.cgi?id=10752
        The inspector should not respond to Make Text Smaller/Bigger commands

        Use the -webkit-text-size-adjust property to ignore text sizing        
        and do not take the zoom factor into account for line height when
        -webkit-text-size-adjust is set to none.

        * css/cssstyleselector.cpp:
        (WebCore::CSSStyleSelector::applyProperty):
        * page/inspector/inspector.css:

2007-07-08  Darin Adler  <darin@apple.com>

        Reviewed by Maciej.

        - fix <rdar://problem/5318994> Integer overflow in WebCore's Base64.cpp:base64Encode

        * platform/Base64.cpp:
        (WebCore::base64Encode): Check against a maximum size.
        (WebCore::base64Decode): Ditto.

2007-07-08  Darin Adler  <darin@apple.com>

        Reviewed by Maciej.

        - fix <rdar://problem/5124665> WebCore secondary-thread assertion should use linked-on-or-after check instead of building on Tiger check

        * platform/ThreadCheck.h: Renamed _WebCoreThreadViolationCheck to reportThreadViolation
        since it's in the WebCore namespace and also we shouldn't use leading underscores since
        those are reserved for the compiler and standard library. Added a new function named
        setDefaultThreadViolationBehavior and an enum for the parameter. Removed the
        threadViolationIsException parameter from WebCoreReportThreadViolation since we use
        a global variable for it now. Got rid of the unnecessary use of do while (0) in the
        WebCoreThreadViolationCheck macro -- since it's only a single function call it's already
        a statement and doesn't need to be turned into one with the do while (0) trick.

        * platform/mac/ThreadCheck.mm:
        (WebCore::readThreadViolationBehaviorFromUserDefaults): Moved the code to read from
        NSUserDefaults into this helper function. Changed it to use stringForKey instead of
        objectForKey so we don't get a "method not found" if someone puts something other than
        a string in there. Updated to use the new globals.
        (WebCore::setDefaultThreadViolationBehavior): Added.
        (WebCore::reportThreadViolation): Simplified, now that most of the work is in the
        readThreadViolationBehaviorFromUserDefaults function.
        (WebCoreReportThreadViolation): Changed to use a global variable instead of parameter
        to determine how to report a violation. Added LogOnFirstThreadViolation, which will
        log only once for each function that violates.

        * WebCore.exp: Updated for above changes.

2007-07-08  Mitz Pettel  <mitz@webkit.org>

        Reviewed by Darin.

        - fix http://bugs.webkit.org/show_bug.cgi?id=14221
          Repro crash (ASSERTION FAILED: oldText in RenderBlock::updateFirstLetter() during relayout of :before content with first-letter style)

        Test: fast/css-generated-content/before-with-first-letter.html

        * rendering/RenderContainer.cpp:
        (WebCore::RenderContainer::updateBeforeAfterContentForContainer): If a child
        of the existing 'before' container is not text, do not assume that it is an
        image, since it can also be an inline wrapping a first-letter. In that case,
        do not update its style (so in particular, keep it a FIRST_LETTER type style)
        and leave it to updateFirstLetter() to take care of.

2007-07-07  Sam Weinig  <sam@webkit.org>

        Reviewed by Oliver Hunt.

        Bailout early in Window::put() if attribute is readonly to avoid
        extra calls to isSafeScript().

        * bindings/js/kjs_window.cpp:
        (KJS::Window::put):

2007-07-07  Darin Adler  <darin@apple.com>

        Reviewed by Oliver Hunt.

        - fix <rdar://problem/5292364> REGRESSION: ZX Spectrum 3.0 widget - graphic anomalies in widget window frame

        Updated Dashboard quirk so it affects fill, stroke, and clip, rather than just stroke.

        Test: fast/canvas/fill-stroke-clip-reset-path.html

        * html/CanvasRenderingContext2D.h: Added clearPathForDashboardBackwardCompatibilityMode.
        * html/CanvasRenderingContext2D.cpp:
        (WebCore::CanvasRenderingContext2D::clearPathForDashboardBackwardCompatibilityMode): Added.
        (WebCore::CanvasRenderingContext2D::fill): Call the new function.
        (WebCore::CanvasRenderingContext2D::stroke): Replaced in-line code with a call to the new function.
        (WebCore::CanvasRenderingContext2D::clip): Call the new function.

2007-07-07  Rob Buis  <buis@kde.org>

        Reviewed and tweaked by Darin.

        http://bugs.webkit.org/show_bug.cgi?id=8994
        Canvas doesn't reset on resize

        Also reset the rendering context when resetting the canvas.

        * html/HTMLCanvasElement.cpp:
        (WebCore::HTMLCanvasElement::reset):
        (WebCore::HTMLCanvasElement::drawingContext):

2007-07-07  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Maciej.

        http://bugs.webkit.org/show_bug.cgi?id=14525
        Support exslt:node-set()

        Test: fast/xsl/exslt-node-set.xml

        * xml/XSLTExtensions.cpp: Added.
        (WebCore::exsltNodeSetFunction): A copy of exslt:node-set() implementation
        from libexslt 1.1.11 (shipped with Tiger).
        (WebCore::registerXSLTExtensions): This function registers any WebCore-provided
        extensions on a context. Currently, the only extension is exslt:node-set().
        * xml/XSLTExtensions.h: Added.

        * xml/XSLTProcessor.cpp:
        (WebCore::XSLTProcessor::transformToString):
        Register extensions when creating a context.

        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * WebCoreSources.bkl:
        Add XSLTExtensions.{h,cpp} to projects.

2007-07-06  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Oliver.

        - fixed <rdar://problem/5133420> ASSERT in WebDocumentLoaderMac::decreaseLoadCount() un-discarding Gmail message
        
        test case: fast/loader/early-load-cancel.html

        * loader/ResourceLoader.cpp:
        (WebCore::ResourceLoader::didCancel): Don't send cancel-related client callbacks
        if we never even sent willSendRequest because we were deferred.

2007-07-06  Oliver Hunt  <oliver@apple.com>

        Reviewed by Maciej.

        Pulled a number of methods from WebKit and WebCoreFrameBridge into 
        C++ objects.

        * WebCore.exp:
        * WebCore.xcodeproj/project.pbxproj:
        * editing/Editor.cpp:
        (WebCore::Editor::replaceMarkedText):
            From -[WebCoreFrameBridge replaceMarkedTextWithText:]
        * editing/Editor.h:
        * page/Frame.cpp:
        (WebCore::Frame::setMarkedTextRange):
            Pulled platform independent logic from Mac specific implementation
        (WebCore::Frame::selectRangeInMarkedText):
            Converted from -[WebHTMLView _selectRangeInMarkedText:]
        * page/Frame.h:
        * page/mac/FrameMac.mm:
        (WebCore::Frame::setMarkedTextRange):
            Now only does Mac specific logic when manipulating initial
            NSAttributedString
        * page/mac/WebCoreFrameBridge.h:
        * page/mac/WebCoreFrameBridge.mm:
            Removed -[WebCoreFrameBridge replaceMarkedTextWithText:]

2007-07-06  Mitz Pettel  <mitz@webkit.org>

        Reviewed by Darin.

        - fix http://bugs.webkit.org/show_bug.cgi?id=14545
          REGRESSION (r21854-r21869): Repro crash in RenderBlock::updateFirstLetter @ nola.com/rose/

        Test: fast/css/first-letter-capitalized.html

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::updateFirstLetter): Moved the call to setFirstLetter
        further down so that the first letter is not destroyed if a text transform
        is applied to the remaining text fragment when it is add to the render tree.
        * rendering/RenderText.cpp:
        (WebCore::RenderText::previousCharacter): Factored out of setTextInternal.
        (WebCore::RenderText::setTextInternal): Changed to call previousCharacter().
        * rendering/RenderText.h:
        * rendering/RenderTextFragment.cpp:
        (WebCore::RenderTextFragment::previousCharacter): Override to return the
        character in the original string before the start of the fragment. 
        * rendering/RenderTextFragment.h:

2007-07-06  Mitz Pettel  <mitz@webkit.org>

        Reviewed by Beth.

        - fix http://bugs.webkit.org/show_bug.cgi?id=14536
          Unnecessary layout done when mousing down in text field

        No test possible because there is no change in functionality.

        * rendering/RenderTextControl.cpp:
        (WebCore::RenderTextControl::setStyle): Reset the height and the width in
        the old style to avoid getting a layout hint as a result of having mutated
        the old style during layout.
        (WebCore::RenderTextControl::layout): Update children's layout if an inner
        block's dimensions should change. This need for layout was previously masked
        by the bug.

2007-07-06  Brady Eidson  <beidson@apple.com>

        Fix builds that use IconDatabaseNone.cpp - better, this time

        * loader/icon/IconDatabaseNone.cpp:
        (WebCore::IconDatabase::isOpen):

2007-07-06  Brady Eidson  <beidson@apple.com>

        Fix builds that use IconDatabaseNone.cpp

        * loader/icon/IconDatabaseNone.cpp:
        (WebCore::IconDatabase::databasePath): 

2007-07-06  John Sullivan  <sullivan@apple.com>

        Reviewed by Brady
        
        - WebCore part of fix for: 
          <rdar://problem/5310739> Time Machine shouldn't back up WebKit's icon database files
        
        * loader/icon/IconDatabase.h:
        * loader/icon/IconDatabase.cpp:
        (WebCore::IconDatabase::isOpen): 
        made this method const (necessary to make IconDatabase::databasePath const)
        (WebCore::IconDatabase::databasePath): 
        new method, returns SQLDatabase's path if open, otherwise empty string
        
        * loader/icon/SQLDatabase.cpp:
        (WebCore::SQLDatabase::open):
        don't append a null character to the m_path ivar. The appended null character was making the path()
        method return a String with a trailing null, which is bad. However, there were no callers to the
        path() method until now. Instead of appending a null character to the ivar, use charactersWithNullTermination()
        instead of characters() when opening the database.
        
        * loader/icon/SQLDatabase.h:
        (WebCore::SQLDatabase::isOpen):
        made this method const (necessary to make IconDatabase::databasePath const)
        (WebCore::SQLDatabase::path):
        made this method const (not required for these changes, but seemed worth doing at the same time)

        * WebCore.exp:
        added symbol for IconDatabase::databasePath

2007-07-06  George Staikos  <staikos@kde.org>

        No real functional change - just move the localizations out and
        stick some placeholder text in.

        * platform/qt/Localizations.cpp: Added.
        (WebCore::submitButtonDefaultLabel):
        (WebCore::inputElementAltText):
        (WebCore::resetButtonDefaultLabel):
        (WebCore::defaultLanguage):
        (WebCore::searchableIndexIntroduction):
        (WebCore::fileButtonChooseFileLabel):
        (WebCore::fileButtonNoFileSelectedLabel):
        (WebCore::contextMenuItemTagOpenLinkInNewWindow):
        (WebCore::contextMenuItemTagDownloadLinkToDisk):
        (WebCore::contextMenuItemTagCopyLinkToClipboard):
        (WebCore::contextMenuItemTagOpenImageInNewWindow):
        (WebCore::contextMenuItemTagDownloadImageToDisk):
        (WebCore::contextMenuItemTagCopyImageToClipboard):
        (WebCore::contextMenuItemTagOpenFrameInNewWindow):
        (WebCore::contextMenuItemTagCopy):
        (WebCore::contextMenuItemTagGoBack):
        (WebCore::contextMenuItemTagGoForward):
        (WebCore::contextMenuItemTagStop):
        (WebCore::contextMenuItemTagReload):
        (WebCore::contextMenuItemTagCut):
        (WebCore::contextMenuItemTagPaste):
        (WebCore::contextMenuItemTagNoGuessesFound):
        (WebCore::contextMenuItemTagIgnoreSpelling):
        (WebCore::contextMenuItemTagLearnSpelling):
        (WebCore::contextMenuItemTagSearchWeb):
        (WebCore::contextMenuItemTagLookUpInDictionary):
        (WebCore::contextMenuItemTagOpenLink):
        (WebCore::contextMenuItemTagIgnoreGrammar):
        (WebCore::contextMenuItemTagSpellingMenu):
        (WebCore::contextMenuItemTagShowSpellingPanel):
        (WebCore::contextMenuItemTagCheckSpelling):
        (WebCore::contextMenuItemTagCheckSpellingWhileTyping):
        (WebCore::contextMenuItemTagCheckGrammarWithSpelling):
        (WebCore::contextMenuItemTagFontMenu):
        (WebCore::contextMenuItemTagBold):
        (WebCore::contextMenuItemTagItalic):
        (WebCore::contextMenuItemTagUnderline):
        (WebCore::contextMenuItemTagOutline):
        (WebCore::contextMenuItemTagWritingDirectionMenu):
        (WebCore::contextMenuItemTagDefaultDirection):
        (WebCore::contextMenuItemTagLeftToRight):
        (WebCore::contextMenuItemTagRightToLeft):
        (WebCore::contextMenuItemTagInspectElement):
        (WebCore::searchMenuNoRecentSearchesText):
        (WebCore::searchMenuRecentSearchesText):
        (WebCore::searchMenuClearRecentSearchesText):
        (WebCore::AXWebAreaText):
        (WebCore::AXLinkText):
        (WebCore::AXListMarkerText):
        (WebCore::AXImageMapText):
        (WebCore::AXHeadingText):
        * platform/qt/TemporaryLinkStubs.cpp:

2007-07-06  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Anders Carlsson.

        A little more FrameLoader cleanup while working on <rdar://problem/5126396>.
        
        Moved url() and URL() methods next to each other to highlight their subtlety.

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::url):
        * loader/FrameLoader.h:

2007-07-06  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Anders Carlsson.

        A little FrameLoader cleanup while working on <rdar://problem/5126396>.
        
        Renamed endIfNotLoading() to endIfNotLoadingMainResource() because "loading"
        and "loadingMainResource" have distinct meanings and this function
        honors the latter.

        (WebCore::FrameLoader::endIfNotLoadingMainResource): Protect after the
        early return to avoid ref count churn.
        * loader/FrameLoader.h:
        (WebCore::FrameLoader::isLoadingMainResource): Inlined this function.

2007-07-06  Adam Treat  <adam@staikos.net>

        Reviewed by George Staikos.

        Convert QWebFrame to a QFrame from a scroll area.

        * page/qt/EventHandlerQt.cpp:
        (WebCore::EventHandler::passSubframeEventToSubframe):
        (WebCore::EventHandler::passWheelEventToWidget):
        (WebCore::EventHandler::createDraggingClipboard):
        (WebCore::EventHandler::passMousePressEventToScrollbar):
        * platform/ScrollView.h:
        * platform/Widget.h:
        * platform/qt/PlatformScrollBar.h:
        * platform/qt/PlatformScrollBarQt.cpp:
        (WebCore::PlatformScrollbar::setRect):
        (WebCore::PlatformScrollbar::frameGeometry):
        (WebCore::PlatformScrollbar::setFrameGeometry):
        (WebCore::PlatformScrollbar::handleMouseMoveEvent):
        (WebCore::PlatformScrollbar::handleMousePressEvent):
        (WebCore::PlatformScrollbar::handleMouseReleaseEvent):
        * platform/qt/ScrollViewQt.cpp:
        (WebCore::ScrollView::ScrollViewPrivate::ScrollViewPrivate):
        (WebCore::ScrollView::ScrollViewPrivate::~ScrollViewPrivate):
        (WebCore::ScrollView::ScrollViewPrivate::setHasHorizontalScrollbar):
        (WebCore::ScrollView::ScrollViewPrivate::setHasVerticalScrollbar):
        (WebCore::ScrollView::ScrollViewPrivate::valueChanged):
        (WebCore::ScrollView::ScrollViewPrivate::scrollBackingStore):
        (WebCore::ScrollView::ScrollViewPrivate::windowClipRect):
        (WebCore::ScrollView::ScrollView):
        (WebCore::ScrollView::~ScrollView):
        (WebCore::ScrollView::setScrollArea):
        (WebCore::ScrollView::horizontalScrollBar):
        (WebCore::ScrollView::verticalScrollBar):
        (WebCore::ScrollView::updateContents):
        (WebCore::ScrollView::update):
        (WebCore::ScrollView::visibleWidth):
        (WebCore::ScrollView::visibleHeight):
        (WebCore::ScrollView::visibleContentRect):
        (WebCore::ScrollView::setContentsPos):
        (WebCore::ScrollView::resizeContents):
        (WebCore::ScrollView::setFrameGeometry):
        (WebCore::ScrollView::geometryChanged):
        (WebCore::ScrollView::contentsX):
        (WebCore::ScrollView::contentsY):
        (WebCore::ScrollView::contentsWidth):
        (WebCore::ScrollView::contentsHeight):
        (WebCore::ScrollView::windowToContents):
        (WebCore::ScrollView::contentsToWindow):
        (WebCore::ScrollView::scrollOffset):
        (WebCore::ScrollView::maximumScroll):
        (WebCore::ScrollView::scrollBy):
        (WebCore::ScrollView::scrollRectIntoViewRecursively):
        (WebCore::ScrollView::hScrollbarMode):
        (WebCore::ScrollView::vScrollbarMode):
        (WebCore::ScrollView::suppressScrollbars):
        (WebCore::ScrollView::setHScrollbarMode):
        (WebCore::ScrollView::setVScrollbarMode):
        (WebCore::ScrollView::setScrollbarsMode):
        (WebCore::ScrollView::setStaticBackground):
        (WebCore::ScrollView::inWindow):
        (WebCore::ScrollView::updateScrollbars):
        (WebCore::ScrollView::scrollbarUnderMouse):
        (WebCore::ScrollView::addChild):
        (WebCore::ScrollView::removeChild):
        (WebCore::ScrollView::paint):
        (WebCore::ScrollView::wheelEvent):
        (WebCore::ScrollView::scroll):
        (WebCore::ScrollView::windowResizerRect):
        (WebCore::ScrollView::resizerOverlapsContent):
        (WebCore::ScrollView::adjustOverlappingScrollbarCount):
        (WebCore::ScrollView::setParent):
        (WebCore::ScrollView::addToDirtyRegion):
        (WebCore::ScrollView::scrollBackingStore):
        (WebCore::ScrollView::updateBackingStore):
        * platform/qt/WidgetQt.cpp:
        (WebCore::WidgetPrivate::canvas):
        (WebCore::WidgetPrivate::setGeometry):
        (WebCore::WidgetPrivate::geometry):
        (WebCore::Widget::setQWidget):
        (WebCore::Widget::paint):
        (WebCore::Widget::originalGeometry):
        (WebCore::Widget::geometryChanged):

2007-07-06  Anders Carlsson  <andersca@apple.com>

        Reviewed by Mitz.

        <rdar://problem/5280532> 
        REGRESSION: Can't access nested embed by document.name if object is not immediate parent
        
        Traverse up the tree looking for an object element.
        
        * html/HTMLEmbedElement.cpp:
        (WebCore::HTMLEmbedElement::getInstance):

2007-07-06  George Staikos  <staikos@kde.org>

        Qt build fix: Don't clobber qmake variables that are already set.

        * WebCore.pro:

2007-07-05  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Antti.

        - <rdar://problem/5311093> JavaScriptCore fails to build with strict-aliasing warnings

        * platform/StringHash.h:
        (WTF::): Adapt to newer way to do storage types.

2007-07-06  Bernhard Rosenkraenzer  <bero@arklinux.org>

        Reviewed by Sam.

        Fix for http://bugs.webkit.org/show_bug.cgi?id=13985
        Bug 13985: WebCore/rendering/RenderTable.cpp fails to compile with gcc 4.2.x

        * rendering/RenderTable.cpp:
        (WebKit::RenderTable::calcBorderLeft)
        (WebKit::RenderTable::calcBorderRight)

2007-07-06  Maxime Britto  <mbritto@pleyo.com>

        Reviewed by Maciej.

        Fix http://bugs.webkit.org/show_bug.cgi?id=13038
        Bug 13038: ASSERTION FAILED: item->target().isEmpty() || m_mainFrame->tree()->find(item->target()) == m_mainFrame

        Modify an ASSERT in goToItem related to going back/forward in history.  We don't need to check the frameset if the target is _blank.
        The attached test case is a manual one since it relies on having pages opened in tabs in Safari.

        * manual-tests/goBack-blank-tab-page.html: Added.
        * manual-tests/resources/before-go-back.html: Added.
        * manual-tests/resources/will-go-back.html: Added.
        * page/Page.cpp:
        (WebCore::Page::goToItem):

2007-07-06  Mitz Pettel  <mitz@webkit.org>

        Reviewed by Maciej.

        - fix http://bugs.webkit.org/show_bug.cgi?id=14400
          Assertion failure (SHOULD NEVER BE REACHED) going back on YouTube

        Test: fast/forms/button-state-restore.html

        * dom/Document.h:
        (WebCore::Document::isFormElementRegistered): Added.
        * html/HTMLGenericFormElement.cpp:
        (WebCore::HTMLGenericFormElement::closeRenderer): Restore saved form
        element state only if the element is registered with the document to
        have its state saved.

2007-07-06  Mitz Pettel  <mitz@webkit.org>

        Reviewed by Maciej.

        - fix http://bugs.webkit.org/show_bug.cgi?id=14487
          Incomplete repaint of background and border of boxes with -webkit-border-fit:lines

        Test: fast/repaint/border-fit-lines.html

        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::repaintAfterLayoutIfNeeded): Do a full repaint if
        -webkit-border-fit:lines was specified.

2007-07-06  Tony Chang  <idealisms@gmail.com>

        Reviewed by Maciej.

        http://bugs.webkit.org/show_bug.cgi?id=14516
        Bug 14516: crash loading multipart/x-mixed-replace data on windows safari

        NULL check m_resourceData to prevent a crash in Safari on Windows.

        * loader/ResourceLoader.cpp:
        (WebCore::ResourceLoader::clearResourceData):

2007-07-06  Jungshik Shin  <jungshik.shin@gmail.com>

        Reviewed by Alexey.

        - Add UTF-32 encoding support 
          http://bugs.webkit.org/show_bug.cgi?id=13415

        Test:
         - fast/encoding/utf-32-big-endian-bom.html
         - fast/encoding/utf-32-big-endian-nobom.xml
         - fast/encoding/utf-32-little-endian-bom.html
         - fast/encoding/utf-32-little-endian-nobom.xml

        * loader/TextResourceDecoder.cpp:
        (WebCore::TextResourceDecoder::checkForBOM):
        (WebCore::TextResourceDecoder::checkForHeadCharset):
        * platform/TextDecoder.cpp:
        (WebCore::TextDecoder::checkForBOM):
        * platform/TextDecoder.h:
        * platform/TextEncoding.cpp:
        (WebCore::UTF32BigEndianEncoding):
        (WebCore::UTF32LittleEndianEncoding):
        * platform/TextEncoding.h:

2007-07-06  Holger Hans Peter Freyther  <zecke@selfish.org>

        Reviewed by Maciej.

        Start implementening RenderThemeGdk/Gtk using GtkStyle. The approach is
        to allocate one native control for each widget type. And use margins, spacing,
        style properties from the Widget. And for drawing use GtkStyle on the rect supplied.

        This should allow nice integration and be relative resource friendly. Mozilla is using
        a similiar approach. They seem to share the GdkPixmap among several operations and this
        will be an obvious candidate for improvements. Create a normally big enough GdkPixmap and
        use that for drawing and then set clip regions for cairo to make sure to not go beyond the
        width and height.

        The next steps will be to introduce states for the widgets, add more widgets, handle focus,
        and various other style attributes, honor the size and margin and use that to propagate this
        back to RenderStyle*.

        * platform/gdk/RenderThemeGdk.cpp:
        (WebCore::RenderThemeGdk::RenderThemeGdk):
        (WebCore::RenderThemeGdk::setCheckboxSize):
        (WebCore::RenderThemeGdk::paintCheckbox):
        (WebCore::RenderThemeGdk::setRadioSize):
        (WebCore::RenderThemeGdk::paintRadio):
        (WebCore::RenderThemeGdk::paintButton):
        (WebCore::RenderThemeGdk::copyToContext):
        (WebCore::RenderThemeGdk::gtkButton):
        (WebCore::RenderThemeGdk::gtkCheckbox):
        (WebCore::RenderThemeGdk::gtkRadioButton):
        (WebCore::RenderThemeGdk::gtkWindowContainer):
        * platform/gdk/RenderThemeGdk.h:

2007-07-06  Rob Buis  <buis@kde.org>

        Reviewed by Adam.

        http://bugs.webkit.org/show_bug.cgi?id=14442
        Adding a stop with value 1.0 to a gradient that has already been used has no effect

        Implement start and end stop handling differently so they are not
        in the color stop array.

        * html/CanvasGradient.cpp:
        (WebCore::compareStops):
        (WebCore::CanvasGradient::getColor):
        (WebCore::CanvasGradient::findStop):

2007-07-06  Adam Roben  <aroben@apple.com>

        Fix <rdar://problem/5301994> Garbled text still showing on some sites

        Replace calls to GetGlyphIndices with wkGetGlyphs.

        Reviewed by Alice.

        * platform/win/GlyphPageTreeNodeWin.cpp:
        (WebCore::GlyphPage::fill): Use wkGetGlyphs.
        * platform/win/FontDataWin.cpp:
        (WebCore::FontData::containsCharacters):

2007-07-06  Matt Lilek  <pewtermoose@gmail.com>

        Not reviewed - Windows build fix.

        * bridge/win/FrameWin.cpp:
        (WebCore::imageFromSelection):

2007-07-06  George Staikos  <staikos@kde.org>

        Reviewed by Maciej.

        Switch USE(ICONDATABASE) to ENABLE(ICONDATABASE) and activate the
        flag via the .pro file

        * WebCore.pro:
        * loader/icon/IconDatabase.h:

2007-07-05  John Sullivan  <sullivan@apple.com>

        Reviewed by Adam

        - WebCore part of fix for <rdar://problem/5315033>

        * rendering/RenderObject.h:
        replaced PaintRestrictionSelectionOnlyWhiteText with PaintRestrictionSelectionOnlyBlackText
        (WebCore::RenderObject::PaintInfo::PaintInfo):
        replaced forceWhiteText with forceBlackText

        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::addLineBoxRects):
        added a useSelectionHeight parameter, which defaults to false; this method is unimplemented
        at this level so this has no effect.

        * rendering/RenderText.h:
        * rendering/RenderText.cpp:
        (WebCore::RenderText::addLineBoxRects):
        added a useSelectionHeight parameter, which defaults to false. If true, use the vertical position
        and height returned by selectionRect rather than replacing it with the more tight-fitting position
        and height of the line box.

        * dom/Range.h:
        * dom/Range.cpp:
        (WebCore::Range::addLineBoxRects):
        added a useSelectionHeight parameter, which defaults to false. Passes this along to RenderObject.        

        * page/Frame.h:
        renamed parameter to selectionImage
        * page/Frame.cpp:
        (WebCore::Frame::selectionTextRects):
        pass true for addLineBoxRects new useSelectionHeight parameter, so the rects returned by this new
        method will match the height that the selection would be painted here
        (WebCore::Frame::paint):
        updated for white->black name changes
        
        * page/mac/FrameMac.mm:
        (WebCore::Frame::selectionImage):
        updated for white->black name changes
        
        * rendering/InlineFlowBox.cpp:
        (WebCore::InlineFlowBox::paintTextDecorations):
        updated for white->black name changes

        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::paintLayer):
        updated for white->black name changes

        * rendering/InlineTextBox.cpp:
        (WebCore::InlineTextBox::paint):
        updated for white->black name changes, and actually use black instead of white. This was the goal
        of all the name changes.

2007-07-05  Anders Carlsson  <andersca@apple.com>

        Reviewed by Oliver.

        Fix layout test failures.
        
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::commitProvisionalLoad):
        Don't make a representation if we're creating the initial document.

2007-07-05  Alp Toker  <alp.toker@collabora.co.uk>

        Fix Bug 14388: Input in text fields limited to 1024 characters
        http://bugs.webkit.org/show_bug.cgi?id=14388

        Slightly modified by Adam Roben.

        Reviewed by Adele.

        Tests: fast/forms/input-implicit-length-limit.html
               fast/forms/input-maxlength.html

        * html/HTMLInputElement.cpp: Bump limit to 524288.
        (WebCore::HTMLInputElement::init):
        (WebCore::HTMLInputElement::parseMappedAttribute):
        * html/HTMLInputElement.h:

2007-07-05  Anders Carlsson  <andersca@apple.com>

        Build fix.
        
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::init):

2007-07-05  Sam Weinig  <sam@webkit.org>

        Reviewed by Geoff.

        Add focus, blur and close functions to DOMWindow implementation class
        and move bindings from Window to JSDOMWindow.

        * bindings/js/JSDOMWindowCustom.cpp:
        (WebCore::JSDOMWindow::customGetOwnPropertySlot):
        * bindings/js/kjs_window.cpp:
        (KJS::Window::getOwnPropertySlot):
        (KJS::WindowFunc::callAsFunction):
        * bindings/js/kjs_window.h:
        (KJS::Window::):
        * bindings/scripts/CodeGeneratorJS.pm: Move prototype function declaration from
        the implementation to the header.
        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::focus):
        (WebCore::DOMWindow::blur):
        (WebCore::DOMWindow::close):
        * page/DOMWindow.h:
        * page/DOMWindow.idl:

2007-07-05  Justin Garcia  <justin.garcia@apple.com>

        Reviewed by Harrison.

        <rdar://problem/5279521> REGRESSION: In Mail, a crash occurs at WebCore::Range::startPosition() when attempting to apply alignment to selected image/text in message body

        * editing/TextIterator.cpp:
        (WebCore::TextIterator::exitNode): Previously emitted content shouldn't have
        to come from a text node in order to emit a '\n' as we exit block containers.

2007-07-05  Anders Carlsson  <andersca@apple.com>

        Reviewed by Geoff.

        <rdar://problem/5315284> REGRESSION: Leopard Launch Time - plugins are being accessed at startup.

        Set a response that has a MIME type of "text/html" on the document loader so WebKit won't refresh the 
        plugin database looking for a plug-in that can handle the document's MIME type (which will be null anyway).
                 
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::init):

2007-07-05  Anders Carlsson  <andersca@apple.com>

        Reviewed by Oliver.

        <rdar://problem/5106788>
        WebKit loads user style sheets too late as seen in Mail (breaks DataDetectors; Mail flashes wrong font)

        Let the document know when the user style sheet is loading so that it try not to display anything
        until the user style sheet has finished loading.
        
        * page/Frame.cpp:
        (WebCore::UserStyleSheetLoader::UserStyleSheetLoader):
        (WebCore::UserStyleSheetLoader::~UserStyleSheetLoader):
        (WebCore::UserStyleSheetLoader::setCSSStyleSheet):
        (WebCore::Frame::setUserStyleSheetLocation):

2007-07-05  Sam Weinig  <sam@webkit.org>

        Reviewed by Darin.

        Move JSDOMWindow overriding getOwnPropertySlot logic from KJS::Window
        up into JSDOMWindow.  No change in functionality so no testcase required. 

        * bindings/js/JSDOMWindowCustom.cpp:
        (WebCore::JSDOMWindow::customGetOwnPropertySlot):
        * bindings/js/kjs_window.cpp:
        (KJS::Window::getOwnPropertySlot):
        * bindings/js/kjs_window.h:

2007-07-05  Mitz Pettel  <mitz@webkit.org>

        Reviewed and Landed by Sam.

        - fix bug 14465 for window.showModalDialog

        * bindings/js/kjs_window.cpp:
        (KJS::parseModalDialogFeatures):
        (KJS::showModalDialog):

2007-07-05  Sam Weinig  <sam@webkit.org>

        Reviewed by Mitz.

        Patch for http://bugs.webkit.org/show_bug.cgi?id=14465
        window.open() uses the literal "undefined" as the URL

        * bindings/js/kjs_window.cpp:
        (KJS::WindowFunc::callAsFunction): add checks for undefined and null values when setting the url.
        * manual-tests/open-url-undefined.html: Added.

2007-07-05  Holger Hans Peter Freyther  <zecke@selfish.org>

        Reviewed by Rob Buis.

        Rework FontData and FontPlatformData for the Gdk work to make valgrind
        happy.

        Move destroying of FontConfig and Cairo objects held in FontPlatformData
        to FontData::platformDestroy. The ownership of these objects is held by
        FontData. This is following the Mac and Qt port at least.

        Currently it is possible that FontPlatformData will not create cairo resources
        in this case at least make sure the variables are initialized to 0.
        Initialize x,y of the cairo_glyph_t with zero to avoid extents.x_advance depending
        on subtracing with not defined values.

        FontPlatformData::hash. Using FontDescription is a bad idea as we don't have a clue
        about how it is packed, if holes are present, etc. The FcPattern and the m_fontMatrix
        should be good enough to describe the Font. All other objects are created using these
        variables

        Replace C-style casts with C++ casts, in this case reinterpret_cast.

        * platform/gdk/FontDataGdk.cpp:
        (WebCore::FontData::platformInit): Don't assert
        (WebCore::FontData::platformDestroy): Take over ownership
        (WebCore::FontData::platformWidthForGlyph): initialize
        (WebCore::FontData::setFont): be paranoid and assert
        * platform/gdk/FontPlatformData.h:
        (WebCore::FontPlatformData::FontPlatformData): Initialize everything
        (WebCore::FontPlatformData::hash): make valgrind happy and don't use m_fontDescription
        * platform/gdk/FontPlatformDataGdk.cpp:
        (WebCore::FontPlatformData::FontPlatformData):
        (WebCore::FontPlatformData::~FontPlatformData): FontData::platformDestroy will do this
        (WebCore::FontPlatformData::list): Don't use C-style casts.
        (WebCore::FontPlatformData::setFont): m_fontFace, m_fontMatrix, m_options might not be initialized
        (WebCore::FontPlatformData::operator==): Don't use C-style casts.

2007-07-05  Alp Toker  <alp.toker@collabora.co.uk>

        Reviewed by Mark Rowe.

        http://bugs.webkit.org/show_bug.cgi?id=14445
        GraphicsContextCairo code style cleanup

        Follow the cr naming convention for cairo_t*.
        Remove trailing whitespace.
        Replace C casts with C++ casts.
        Avoid needless casts.

        * platform/graphics/cairo/GraphicsContextCairo.cpp:
        (WebCore::GraphicsContextPlatformPrivate::GraphicsContextPlatformPrivate):
        (WebCore::GraphicsContextPlatformPrivate::~GraphicsContextPlatformPrivate):
        (WebCore::GraphicsContext::GraphicsContext):
        (WebCore::GraphicsContext::platformContext):
        (WebCore::GraphicsContext::savePlatformState):
        (WebCore::GraphicsContext::restorePlatformState):
        (WebCore::GraphicsContext::drawRect):
        (WebCore::adjustLineToPixelBoundaries):
        (WebCore::GraphicsContext::drawLine):
        (WebCore::GraphicsContext::drawEllipse):
        (WebCore::GraphicsContext::strokeArc): Save/restore the graphics state.
        (WebCore::GraphicsContext::drawConvexPolygon):
        (WebCore::GraphicsContext::fillRect):
        (WebCore::GraphicsContext::clip):
        (WebCore::GraphicsContext::drawFocusRing):
        (WebCore::GraphicsContext::roundToDevicePixels):
        (WebCore::GraphicsContext::translate):
        (WebCore::GraphicsContext::origin):
        (WebCore::GraphicsContext::setPlatformStrokeThickness):
        (WebCore::GraphicsContext::setPlatformStrokeStyle):
        (WebCore::GraphicsContext::setPlatformFont):
        (WebCore::GraphicsContext::concatCTM):
        (WebCore::GraphicsContext::addInnerRoundedRectClip):
        (WebCore::GraphicsContext::beginTransparencyLayer):
        (WebCore::GraphicsContext::endTransparencyLayer):
        (WebCore::GraphicsContext::clearRect):
        (WebCore::GraphicsContext::setLineCap):
        (WebCore::GraphicsContext::setLineJoin):
        (WebCore::GraphicsContext::setMiterLimit):
        (WebCore::GraphicsContext::setCompositeOperation):
        (WebCore::GraphicsContext::beginPath):
        (WebCore::GraphicsContext::addPath):
        (WebCore::GraphicsContext::rotate):
        (WebCore::GraphicsContext::scale):
        * platform/graphics/cairo/ImageBufferCairo.cpp:
        (WebCore::ImageBuffer::ImageBuffer):
        * platform/graphics/cairo/ImageCairo.cpp: Avoid the confusing ctxt/context naming scheme.
        (WebCore::BitmapImage::draw):
        (WebCore::Image::drawPattern):

2007-07-05  Alp Toker  <alp.toker@collabora.co.uk>

        Reviewed by Mark Rowe.

        http://bugs.webkit.org/show_bug.cgi?id=14531
        Cairo SVGImage::nativeImageForCurrentFrame() has no return

        Return the Cairo surface from the frame cache.

        Also add a fall-through else macro with notImplemented() so that future
        ports do not make the same mistake.

        * platform/graphics/svg/SVGImage.cpp:
        (WebCore::SVGImage::nativeImageForCurrentFrame):

2007-07-05  Alp Toker  <alp.toker@collabora.co.uk>

        Reviewed by Mark Rowe.

        http://bugs.webkit.org/show_bug.cgi?id=14513
        Cairo animated GIF support is broken

        Implement ImageSource::frameIsCompleteAtIndex() to enable animated GIFs.

        * platform/graphics/cairo/ImageSourceCairo.cpp:
        (WebCore::ImageSource::frameIsCompleteAtIndex):

2007-07-04  Matt Perry  <mpComplete@gmail.com>

        Reviewed by Adam.

        Fix for http://bugs.webkit.org/show_bug.cgi?id=13400
        Bug 13400: REGRESSION (r20809-20814): No back entry created for navigations created by assigning to document.location
        <rdar://problem/5153025>

        Treat userGesture as always true for setLocation, forcing a back/forward
        entry to be created.

        * bindings/js/JSHTMLDocumentCustom.cpp:
        (WebCore::JSHTMLDocument::setLocation):

2007-07-04  Adam Roben  <aroben@apple.com>

        Restore MouseEventWithHitTestResults::targetNode's old behavior

        Reviewed by Mark.

        Fixes fast/images/imagemap-case and fast/replace/image-map.

        * page/MouseEventWithHitTestResults.cpp:
        (WebCore::MouseEventWithHitTestResults::targetNode): Use the inner
        node, not the inner non-shared node.

2007-07-04  Adam Roben  <aroben@apple.com>

        Mac, Qt, and Gdk build fixes.

        * page/EventHandler.h:
        * page/gdk/EventHandlerGdk.cpp:
        * page/mac/EventHandlerMac.mm:
        (WebCore::EventHandler::passSubframeEventToSubframe):
        * page/qt/EventHandlerQt.cpp:

2007-07-04  Adam Roben  <aroben@apple.com>

        Fix the Qt/Gdk builds.

        * page/gdk/EventHandlerGdk.cpp:
        * page/qt/EventHandlerQt.cpp:

2007-07-04  Adam Roben  <aroben@apple.com>

        Move tooltip logic down into WebCore so that it can be shared cross-platform

        Reviewed by Sam.

        * page/Chrome.cpp:
        (WebCore::Chrome::setToolTip): Added.
        * page/Chrome.h:
        * page/ChromeClient.h:
        * page/EventHandler.cpp:
        (WebCore::EventHandler::mouseMoved): Call Chrome::setToolTip.
        * platform/graphics/svg/SVGImageEmptyClients.h:

        Added stubs for Gdk:

        * platform/gdk/ChromeClientGdk.h:
        * platform/gdk/TemporaryLinkStubs.cpp:
        (ChromeClientGdk::setToolTip):

2007-07-04  Adam Roben  <aroben@apple.com>

        Add Settings::showsURLsInToolTips

        Reviewed by Sam.

        * WebCore.exp:
        * page/Settings.cpp:
        (WebCore::Settings::Settings):
        * page/Settings.h:

2007-07-04  Adam Roben  <aroben@apple.com>

        Move logic for calling mouseDidMoveOverElement into WebCore

        Reviewed by Sam.

        * page/EventHandler.cpp:
        (WebCore::EventHandler::mouseMoved): Added. Calls Chrome::mouseDidMoveOverElement.
        (WebCore::EventHandler::handleMouseMoveEvent): Now takes an optional
        HitTestResult* parameter which is used to communicate to the caller the
        node the mouse is over.
        * page/EventHandler.h:
        * page/mac/EventHandlerMac.mm:
        (WebCore::EventHandler::mouseMoved): Changed to call the overloaded
        mouseMoved().
        (WebCore::EventHandler::passMouseMoveEventToSubframe): Pass hoveredNode
        through to the subframe so we can get the deepest node hovered, not
        just the node's parent frame.
        * page/win/EventHandlerWin.cpp:
        (WebCore::EventHandler::passMouseMoveEventToSubframe): Ditto.

2007-07-04  Adam Roben  <aroben@apple.com>

        Add Chrome::mouseDidMoveOverElement

        This does the work of calling up to the ChromeClient (which will call
        the UI delegate).

        Reviewed by Sam.

        * page/Chrome.cpp:
        (WebCore::Chrome::mouseDidMoveOverElement): Added.
        * page/Chrome.h:
        * page/ChromeClient.h:
        * platform/graphics/svg/SVGImageEmptyClients.h: Updated for change to
        ChromeClient.
        * platform/gdk/ChromeClientGdk.h:
        * platform/gdk/TemporaryLinkStubs.cpp:
        (ChromeClientGdk::mouseDidMoveOverElement):

2007-07-04  Adam Roben  <aroben@apple.com>

        Changed PlatformMouseEvent to store the modifier flags of the event

        Reviewed by Sam.

        * platform/PlatformMouseEvent.h:
        (WebCore::PlatformMouseEvent::PlatformMouseEvent):
        * platform/mac/PlatformMouseEventMac.mm:
        (WebCore::PlatformMouseEvent::PlatformMouseEvent):
        * platform/win/PlatformMouseEventWin.cpp:
        (WebCore::PlatformMouseEvent::PlatformMouseEvent):

2007-07-04  Adam Roben  <aroben@apple.com>

        Add HitTestResult::setToNonShadowAncestor

        Reviewed by Sam.

        * page/EventHandler.cpp:
        (WebCore::EventHandler::hitTestResultAtPoint): Moved logic into
        HitTestResult::setToNonShadowAncestor.
        * rendering/HitTestResult.cpp:
        (WebCore::HitTestResult::setToNonShadowAncestor):
        * rendering/HitTestResult.h:

2007-07-04  Adam Roben  <aroben@apple.com>

        Change MouseEventWithHitTestResults to hold onto a HitTestResult

        Reviewed by Sam.

        * dom/Document.cpp:
        (WebCore::Document::prepareMouseEvent):
        * page/MouseEventWithHitTestResults.cpp:
        (WebCore::MouseEventWithHitTestResults::MouseEventWithHitTestResults):
        (WebCore::MouseEventWithHitTestResults::targetNode):
        (WebCore::MouseEventWithHitTestResults::localPoint):
        (WebCore::MouseEventWithHitTestResults::scrollbar):
        * page/MouseEventWithHitTestResults.h:
        (WebCore::MouseEventWithHitTestResults::event):
        (WebCore::MouseEventWithHitTestResults::hitTestResult):

2007-07-04  Matt Lilek  <pewtermoose@gmail.com>

        Not reviewed, gdk build fix.

        * platform/gdk/FrameGdk.cpp:

2007-07-05  Antti Koivisto  <antti@apple.com>

        Reviewed by John.
        
        Fix Repro crash due to infinite recursion in HTMLParser::handleError @ youos.com
        <rdar://problem/5237811>
        
        It is possible to add table parts (thead etc) without table ancestor to a document fragment. If a new table element
        was added to such a part, as in
        
        div.innerHTML = '<tbody><table>';
        
        the parser error handling code would try to pop the previous table as normal. However since
        the table does not actually exist nothing would happen and parser would go to infinite recursion.
        
        Solution here is to pop table parts one by one when handling the error inside a fragment instead of trying to pop
        the table straight away (as it might not exist).

        * html/HTMLParser.cpp:
        (WebCore::HTMLParser::handleError):

2007-07-04  Qing Zhao  <qing@staikos.net>

        Reviewed by George Staikos.

        Draw menulist (comboboxes) without text overlap on the button.

        * platform/qt/RenderThemeQt.cpp:
        (WebCore::RenderThemeQt::setPopupPadding):

2007-07-04  George Staikos  <staikos@kde.org>

        Compile

        * page/qt/FrameQt.cpp:
        * WebCore.pro:

2007-07-04  Sam Weinig  <sam@webkit.org>

        Reviewed by Mitz.

        Patch for http://bugs.webkit.org/show_bug.cgi?id=14504
        REGRESSION (r23573): Amazon Book Excerpt can not be viewed in recent nightly

        - Made it possible (again) to shadow window properties with local variable names.

        Test: fast/dom/Window/window-property-shadowing.html

        * bindings/js/JSDOMWindowCustom.cpp:
        (WebCore::JSDOMWindow::customPut):
        * bindings/js/kjs_window.cpp:
        (KJS::Window::put):
        * bindings/scripts/CodeGeneratorJS.pm:
        * page/DOMWindow.idl:

2007-07-03  Alice Liu  <alice.liu@apple.com>

        Reviewed by Adam.

        Fixed <rdar://problem/5225119> support smart pasting on Windows

        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
            Added new files
        * editing/SmartReplace.cpp: Added.
        (WebCore::isCharacterSmartReplaceExempt):
            Added non-CF implementation placeholder
        * editing/SmartReplace.h: Added.
        * editing/SmartReplaceCF.cpp: Added.
        (WebCore::getSmartSet):
        (WebCore::isCharacterSmartReplaceExempt):
            Added new implementation

        * bridge/win/FrameWin.cpp:
        * page/Frame.h:
        * page/mac/FrameMac.mm:
            Removed old declaration and implementation

        * editing/ReplaceSelectionCommand.cpp:
        (WebCore::ReplaceSelectionCommand::doApply):
            Changed to call the new function instead of old

        * page/mac/WebCoreFrameBridge.h:
        * page/mac/WebCoreFrameBridge.mm:
            Removed old declaration and implementation
        (-[WebCoreFrameBridge smartInsertForString:replacingRange:beforeString:afterString:]):
            Changed to call the new function instead of old

        * platform/win/PasteboardWin.cpp:
        (WebCore::Pasteboard::Pasteboard):
            Register new clipboard format
        (WebCore::Pasteboard::writeSelection):
            Set data for smartpaste format on clipboard
        (WebCore::Pasteboard::canSmartReplace):
            Added non-stub implementation

2007-07-04  Qing Zhao  <qing@staikos.net>

        Reviewed by George Staikos.

        Similar to the PlatformScrollbar fixes, adjust the painter to make the
        styler draw all subcontrols, and in this case the focus rect, in the
        proper location

        * platform/qt/RenderThemeQt.cpp:
        (WebCore::RenderThemeQt::paintMenuList):

2007-07-04  Mitz Pettel  <mitz@webkit.org>

        Reviewed by Maciej.

        - fix http://bugs.webkit.org/show_bug.cgi?id=14495
          REGRESSION: Wrong cursor is displayed during drag and drop when text is selected
          <rdar://problem/5312384>

        No test possible because DumpRenderTree cannot query the current cursor.

        * page/EventHandler.cpp:
        (WebCore::EventHandler::selectCursor): Changed into a member function and
        added that if the last mouse down event could not have started a
        selection, then the cursor should not change to an I-beam unconditionally.
        (WebCore::EventHandler::handleMouseMoveEvent):
        * page/EventHandler.h:

2007-07-04  Holger Hans Peter Freyther  <zecke@selfish.org>

        Reviewed by Rob Buis.

        A little progress in tracking dependencies.

        * WebCore.pro: Add DEPENDPATH for the Gdk port.

2007-07-03  Darin Adler  <darin@apple.com>

        Reviewed by Tim Hatcher.

        - fix <rdar://problem/5221297> Font family name in the cssText for a DOMCSSStyleDeclaration needs quotes

        Test: editing/style/font-family-with-space.html

        * css/FontFamilyValue.cpp:
        (WebCore::isValidCSSIdentifier): Added. Implements the same rule that the CSS lexer does.
        (WebCore::quoteStringIfNeeded): Changed to call isValidCSSIdentifier instead of just
        checking for a leading "#" character.
        * editing/markup.cpp:
        (WebCore::escapeTextForMarkup): Changed to take a String parameter for better efficiency.
        (WebCore::renderedText): Changed to return a String for better efficiency.
        (WebCore::addNamespace): Updated to pass String to escapeTextForMarkup.
        (WebCore::startMarkup): Updated to pass String to escapeTextForMarkup. Added missing call
        to escapeTextForMarkup in the special case for the style property.
        (WebCore::createMarkup): Changed from single quotes to double quotes and also added missing
        call to escapeTextForMarkup in two special cases for the style property.

2007-07-03  Sam Weinig  <sam@webkit.org>

        Reviewed by Darin.

        Twelfth round of fixes for implicit 64-32 bit conversion errors.
        <rdar://problem/5292262>

        - Add casts and accompanying FIXMEs to avoid remaining compiler errors.

        * WebCore.xcodeproj/project.pbxproj:
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::opened):
        (WebCore::FrameLoader::sendRemainingDelegateMessages):
        * loader/FrameLoader.h:
        * loader/ResourceLoader.cpp:
        (WebCore::ResourceLoader::didReceiveData):
        * platform/network/mac/ResourceHandleMac.mm:
        (-[WebCoreResourceHandleAsDelegate connection:didReceiveData:lengthReceived:]):
        (-[WebCoreResourceHandleAsDelegate connection:willStopBufferingData:]):
        * platform/network/mac/ResourceResponseMac.mm:
        (WebCore::ResourceResponse::nsURLResponse):

2007-07-03  Anders Carlsson  <andersca@apple.com>

        Reviewed by Adam.

        <rdar://problem/5093862>
        Nothing shown in plugin area when trying to play content using the DivX plugin
        
        Defer calling SetWindow for the DivX plugin, just like we do with the WMP plugin.
                
        * plugins/win/PluginViewWin.cpp:
        (WebCore::PluginViewWin::determineQuirks):

2007-07-03  Sam Weinig  <sam@webkit.org>

        Reviewed by Brady Eidson.

        Ninth round of fixes for implicit 64-32 bit conversion errors.
        <rdar://problem/5292262>

        - Fix function signature to use unsigned long instead of unsigned long long.

        * loader/ProgressTracker.cpp:
        (WebCore::ProgressTracker::completeProgress):
        * loader/ProgressTracker.h:

2007-07-03  Sam Weinig  <sam@webkit.org>

        Reviewed by Oliver.

        Eighth round of fixes for implicit 64-32 bit conversion errors.
        <rdar://problem/5292262>

        - Convert SVG implementation files to use floats instead of doubles
          to match the spec/IDLs.

        * bindings/scripts/CodeGeneratorJS.pm:
        * ksvg2/svg/SVGAngle.cpp:
        * ksvg2/svg/SVGAnimatedTemplate.h:
        * ksvg2/svg/SVGAnimationElement.cpp:
        (WebCore::SVGAnimationElement::getEndTime):
        (WebCore::SVGAnimationElement::getStartTime):
        (WebCore::SVGAnimationElement::getCurrentTime):
        (WebCore::SVGAnimationElement::getSimpleDuration):
        * ksvg2/svg/SVGAnimationElement.h:
        * ksvg2/svg/SVGFitToViewBox.cpp:
        (WebCore::SVGFitToViewBox::parseViewBox):
        * ksvg2/svg/SVGLength.cpp:
        (WebCore::SVGLength::setValueAsString):
        * ksvg2/svg/SVGLinearGradientElement.cpp:
        (WebCore::SVGLinearGradientElement::buildGradient):
        * ksvg2/svg/SVGMatrix.idl:
        * ksvg2/svg/SVGNumber.idl:
        * ksvg2/svg/SVGParserUtilities.cpp:
        (WebCore::SVGPathParser::parseSVG):
        (WebCore::SVGPathParser::calculateArc):
        (WebCore::SVGPathParser::svgLineToHorizontal):
        (WebCore::SVGPathParser::svgLineToVertical):
        (WebCore::SVGPathParser::svgCurveToCubicSmooth):
        (WebCore::SVGPathParser::svgCurveToQuadratic):
        (WebCore::SVGPathParser::svgCurveToQuadraticSmooth):
        (WebCore::SVGPathParser::svgArcTo):
        * ksvg2/svg/SVGParserUtilities.h:
        * ksvg2/svg/SVGPathElement.cpp:
        (WebCore::SVGPathElement::SVGPathElement):
        (WebCore::SVGPathElement::getTotalLength):
        (WebCore::SVGPathElement::getPointAtLength):
        (WebCore::SVGPathElement::getPathSegAtLength):
        (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::svgMoveTo):
        (WebCore::SVGPathElement::svgLineTo):
        (WebCore::SVGPathElement::svgLineToHorizontal):
        (WebCore::SVGPathElement::svgLineToVertical):
        (WebCore::SVGPathElement::svgCurveToCubic):
        (WebCore::SVGPathElement::svgCurveToCubicSmooth):
        (WebCore::SVGPathElement::svgCurveToQuadratic):
        (WebCore::SVGPathElement::svgCurveToQuadraticSmooth):
        (WebCore::SVGPathElement::svgArcTo):
        (WebCore::SVGPathElement::parseMappedAttribute):
        * ksvg2/svg/SVGPathElement.h:
        * ksvg2/svg/SVGPathSegArc.cpp:
        (WebCore::SVGPathSegArcAbs::SVGPathSegArcAbs):
        (WebCore::SVGPathSegArcAbs::setX):
        (WebCore::SVGPathSegArcAbs::x):
        (WebCore::SVGPathSegArcAbs::setY):
        (WebCore::SVGPathSegArcAbs::y):
        (WebCore::SVGPathSegArcAbs::setR1):
        (WebCore::SVGPathSegArcAbs::r1):
        (WebCore::SVGPathSegArcAbs::setR2):
        (WebCore::SVGPathSegArcAbs::r2):
        (WebCore::SVGPathSegArcAbs::setAngle):
        (WebCore::SVGPathSegArcAbs::angle):
        (WebCore::SVGPathSegArcRel::SVGPathSegArcRel):
        (WebCore::SVGPathSegArcRel::setX):
        (WebCore::SVGPathSegArcRel::x):
        (WebCore::SVGPathSegArcRel::setY):
        (WebCore::SVGPathSegArcRel::y):
        (WebCore::SVGPathSegArcRel::setR1):
        (WebCore::SVGPathSegArcRel::r1):
        (WebCore::SVGPathSegArcRel::setR2):
        (WebCore::SVGPathSegArcRel::r2):
        (WebCore::SVGPathSegArcRel::setAngle):
        (WebCore::SVGPathSegArcRel::angle):
        * ksvg2/svg/SVGPathSegArc.h:
        * ksvg2/svg/SVGPathSegCurvetoCubic.cpp:
        (WebCore::SVGPathSegCurvetoCubicAbs::SVGPathSegCurvetoCubicAbs):
        (WebCore::SVGPathSegCurvetoCubicAbs::setX):
        (WebCore::SVGPathSegCurvetoCubicAbs::x):
        (WebCore::SVGPathSegCurvetoCubicAbs::setY):
        (WebCore::SVGPathSegCurvetoCubicAbs::y):
        (WebCore::SVGPathSegCurvetoCubicAbs::setX1):
        (WebCore::SVGPathSegCurvetoCubicAbs::x1):
        (WebCore::SVGPathSegCurvetoCubicAbs::setY1):
        (WebCore::SVGPathSegCurvetoCubicAbs::y1):
        (WebCore::SVGPathSegCurvetoCubicAbs::setX2):
        (WebCore::SVGPathSegCurvetoCubicAbs::x2):
        (WebCore::SVGPathSegCurvetoCubicAbs::setY2):
        (WebCore::SVGPathSegCurvetoCubicAbs::y2):
        (WebCore::SVGPathSegCurvetoCubicRel::SVGPathSegCurvetoCubicRel):
        (WebCore::SVGPathSegCurvetoCubicRel::setX):
        (WebCore::SVGPathSegCurvetoCubicRel::x):
        (WebCore::SVGPathSegCurvetoCubicRel::setY):
        (WebCore::SVGPathSegCurvetoCubicRel::y):
        (WebCore::SVGPathSegCurvetoCubicRel::setX1):
        (WebCore::SVGPathSegCurvetoCubicRel::x1):
        (WebCore::SVGPathSegCurvetoCubicRel::setY1):
        (WebCore::SVGPathSegCurvetoCubicRel::y1):
        (WebCore::SVGPathSegCurvetoCubicRel::setX2):
        (WebCore::SVGPathSegCurvetoCubicRel::x2):
        (WebCore::SVGPathSegCurvetoCubicRel::setY2):
        (WebCore::SVGPathSegCurvetoCubicRel::y2):
        * ksvg2/svg/SVGPathSegCurvetoCubic.h:
        * ksvg2/svg/SVGPathSegCurvetoCubicSmooth.cpp:
        (WebCore::SVGPathSegCurvetoCubicSmoothAbs::SVGPathSegCurvetoCubicSmoothAbs):
        (WebCore::SVGPathSegCurvetoCubicSmoothAbs::setX):
        (WebCore::SVGPathSegCurvetoCubicSmoothAbs::x):
        (WebCore::SVGPathSegCurvetoCubicSmoothAbs::setY):
        (WebCore::SVGPathSegCurvetoCubicSmoothAbs::y):
        (WebCore::SVGPathSegCurvetoCubicSmoothAbs::setX2):
        (WebCore::SVGPathSegCurvetoCubicSmoothAbs::x2):
        (WebCore::SVGPathSegCurvetoCubicSmoothAbs::setY2):
        (WebCore::SVGPathSegCurvetoCubicSmoothAbs::y2):
        (WebCore::SVGPathSegCurvetoCubicSmoothRel::SVGPathSegCurvetoCubicSmoothRel):
        (WebCore::SVGPathSegCurvetoCubicSmoothRel::setX):
        (WebCore::SVGPathSegCurvetoCubicSmoothRel::x):
        (WebCore::SVGPathSegCurvetoCubicSmoothRel::setY):
        (WebCore::SVGPathSegCurvetoCubicSmoothRel::y):
        (WebCore::SVGPathSegCurvetoCubicSmoothRel::setX2):
        (WebCore::SVGPathSegCurvetoCubicSmoothRel::x2):
        (WebCore::SVGPathSegCurvetoCubicSmoothRel::setY2):
        (WebCore::SVGPathSegCurvetoCubicSmoothRel::y2):
        * ksvg2/svg/SVGPathSegCurvetoCubicSmooth.h:
        * ksvg2/svg/SVGPathSegCurvetoQuadratic.cpp:
        (WebCore::SVGPathSegCurvetoQuadraticAbs::SVGPathSegCurvetoQuadraticAbs):
        (WebCore::SVGPathSegCurvetoQuadraticAbs::setX):
        (WebCore::SVGPathSegCurvetoQuadraticAbs::x):
        (WebCore::SVGPathSegCurvetoQuadraticAbs::setY):
        (WebCore::SVGPathSegCurvetoQuadraticAbs::y):
        (WebCore::SVGPathSegCurvetoQuadraticAbs::setX1):
        (WebCore::SVGPathSegCurvetoQuadraticAbs::x1):
        (WebCore::SVGPathSegCurvetoQuadraticAbs::setY1):
        (WebCore::SVGPathSegCurvetoQuadraticAbs::y1):
        (WebCore::SVGPathSegCurvetoQuadraticRel::SVGPathSegCurvetoQuadraticRel):
        (WebCore::SVGPathSegCurvetoQuadraticRel::setX):
        (WebCore::SVGPathSegCurvetoQuadraticRel::x):
        (WebCore::SVGPathSegCurvetoQuadraticRel::setY):
        (WebCore::SVGPathSegCurvetoQuadraticRel::y):
        (WebCore::SVGPathSegCurvetoQuadraticRel::setX1):
        (WebCore::SVGPathSegCurvetoQuadraticRel::x1):
        (WebCore::SVGPathSegCurvetoQuadraticRel::setY1):
        (WebCore::SVGPathSegCurvetoQuadraticRel::y1):
        * ksvg2/svg/SVGPathSegCurvetoQuadratic.h:
        (WebCore::SVGPathSegCurvetoQuadraticRel::toString):
        * ksvg2/svg/SVGPathSegCurvetoQuadraticSmooth.cpp:
        (WebCore::SVGPathSegCurvetoQuadraticSmoothAbs::SVGPathSegCurvetoQuadraticSmoothAbs):
        (WebCore::SVGPathSegCurvetoQuadraticSmoothAbs::setX):
        (WebCore::SVGPathSegCurvetoQuadraticSmoothAbs::x):
        (WebCore::SVGPathSegCurvetoQuadraticSmoothAbs::setY):
        (WebCore::SVGPathSegCurvetoQuadraticSmoothAbs::y):
        (WebCore::SVGPathSegCurvetoQuadraticSmoothRel::SVGPathSegCurvetoQuadraticSmoothRel):
        (WebCore::SVGPathSegCurvetoQuadraticSmoothRel::setX):
        (WebCore::SVGPathSegCurvetoQuadraticSmoothRel::x):
        (WebCore::SVGPathSegCurvetoQuadraticSmoothRel::setY):
        (WebCore::SVGPathSegCurvetoQuadraticSmoothRel::y):
        * ksvg2/svg/SVGPathSegCurvetoQuadraticSmooth.h:
        * ksvg2/svg/SVGPathSegLineto.cpp:
        (WebCore::SVGPathSegLinetoAbs::SVGPathSegLinetoAbs):
        (WebCore::SVGPathSegLinetoAbs::setX):
        (WebCore::SVGPathSegLinetoAbs::x):
        (WebCore::SVGPathSegLinetoAbs::setY):
        (WebCore::SVGPathSegLinetoAbs::y):
        (WebCore::SVGPathSegLinetoRel::SVGPathSegLinetoRel):
        (WebCore::SVGPathSegLinetoRel::setX):
        (WebCore::SVGPathSegLinetoRel::x):
        (WebCore::SVGPathSegLinetoRel::setY):
        (WebCore::SVGPathSegLinetoRel::y):
        * ksvg2/svg/SVGPathSegLineto.h:
        * ksvg2/svg/SVGPathSegLinetoHorizontal.cpp:
        (WebCore::SVGPathSegLinetoHorizontalAbs::SVGPathSegLinetoHorizontalAbs):
        (WebCore::SVGPathSegLinetoHorizontalAbs::setX):
        (WebCore::SVGPathSegLinetoHorizontalAbs::x):
        (WebCore::SVGPathSegLinetoHorizontalRel::SVGPathSegLinetoHorizontalRel):
        (WebCore::SVGPathSegLinetoHorizontalRel::setX):
        (WebCore::SVGPathSegLinetoHorizontalRel::x):
        * ksvg2/svg/SVGPathSegLinetoHorizontal.h:
        * ksvg2/svg/SVGPathSegLinetoVertical.cpp:
        (WebCore::SVGPathSegLinetoVerticalAbs::SVGPathSegLinetoVerticalAbs):
        (WebCore::SVGPathSegLinetoVerticalAbs::setY):
        (WebCore::SVGPathSegLinetoVerticalAbs::y):
        (WebCore::SVGPathSegLinetoVerticalRel::SVGPathSegLinetoVerticalRel):
        (WebCore::SVGPathSegLinetoVerticalRel::setY):
        (WebCore::SVGPathSegLinetoVerticalRel::y):
        * ksvg2/svg/SVGPathSegLinetoVertical.h:
        * ksvg2/svg/SVGPathSegList.cpp:
        (WebCore::SVGPathSegList::getPathSegAtLength):
        * ksvg2/svg/SVGPathSegList.h:
        * ksvg2/svg/SVGPathSegMoveto.cpp:
        (WebCore::SVGPathSegMovetoAbs::SVGPathSegMovetoAbs):
        (WebCore::SVGPathSegMovetoAbs::setX):
        (WebCore::SVGPathSegMovetoAbs::x):
        (WebCore::SVGPathSegMovetoAbs::setY):
        (WebCore::SVGPathSegMovetoAbs::y):
        (WebCore::SVGPathSegMovetoRel::SVGPathSegMovetoRel):
        (WebCore::SVGPathSegMovetoRel::setX):
        (WebCore::SVGPathSegMovetoRel::x):
        (WebCore::SVGPathSegMovetoRel::setY):
        (WebCore::SVGPathSegMovetoRel::y):
        * ksvg2/svg/SVGPathSegMoveto.h:
        * ksvg2/svg/SVGPolyElement.cpp:
        (WebCore::SVGPolyElement::svgPolyTo):
        * ksvg2/svg/SVGRadialGradientElement.cpp:
        (WebCore::SVGRadialGradientElement::buildGradient):
        * ksvg2/svg/SVGSVGElement.cpp:
        (WebCore::SVGSVGElement::viewport):
        (WebCore::SVGSVGElement::getCurrentTime):
        * ksvg2/svg/SVGStopElement.cpp:
        (WebCore::SVGStopElement::SVGStopElement):
        (WebCore::SVGStopElement::parseMappedAttribute):
        * ksvg2/svg/SVGStopElement.h:
        * ksvg2/svg/SVGTransform.cpp:
        (SVGTransform::translate):
        (SVGTransform::scale):
        * ksvg2/svg/SVGTransformDistance.cpp:
        (WebCore::SVGTransformDistance::addToSVGTransform):
        (WebCore::SVGTransformDistance::distance):
        * ksvg2/svg/SVGTransformable.cpp:
        (WebCore::SVGTransformable::parseTransformAttribute):

2007-07-03  Anders Carlsson  <andersca@apple.com>

        Reviewed by Darin.

        <rdar://problem/5289718>
        http://bugs.webkit.org/show_bug.cgi?id=14437
        CrashTracer: [REGRESSION] 76 crashes in Safari at com.apple.WebCore: WebCore::Frame::settings const + 6 (14437)
        
        Based on a patch from Maxime Britto.
        
        * page/mac/WebCoreFrameBridge.mm:
        (-[WebCoreFrameBridge stringByEvaluatingJavaScriptFromString:forceUserGesture:]):
        If the script caused the frame to go away, return nil. This can only happen if a plugin in a subframe destroys
        its frame.

        (-[WebCoreFrameBridge aeDescByEvaluatingJavaScriptFromString:]):
        ASSERT that this is only called on the main frame.

2007-07-03  John Sullivan  <sullivan@apple.com>

        Written by Darin, reviewed by me
        
        - fixed <rdar://problem/5249730> REGRESSION (Leopard, around 9A464): Safari opens the same local 
          documents more than once due to canonicalization change

        * loader/mac/LoaderNSURLExtras.m:
        (canonicalURL):
        pass URL through KURL so we get KURL's version of canonicalization as well as
        NSURLProtocol's version of canonicalization

2007-07-03  Sam Weinig  <sam@webkit.org>

        Reviewed by Darin.

        Seventh round of fixes for implicit 64-32 bit conversion errors.
        <rdar://problem/5292262>

        - Adds more narrowPrecision functions to FloatPoint, FloatSize and FloatRect.
        - Changes over more implicit conversions to use new functions.

        * bindings/js/kjs_window.cpp:
        (KJS::WindowFunc::callAsFunction):
        * platform/graphics/FloatPoint.cpp:
        (WebCore::FloatPoint::matrixTransform):
        (WebCore::FloatPoint::narrowPrecision):
        * platform/graphics/FloatPoint.h:
        * platform/graphics/FloatRect.cpp:
        (WebCore::FloatRect::narrowPrecision):
        * platform/graphics/FloatRect.h:
        * platform/graphics/FloatSize.cpp:
        (WebCore::FloatSize::narrowPrecision):
        * platform/graphics/FloatSize.h:
        * platform/graphics/Path.cpp:
        (WebCore::Path::createRoundedRectangle):
        (WebCore::Path::createRectangle):
        (WebCore::Path::createEllipse):
        * platform/graphics/mac/ColorMac.mm:
        (WebCore::nsColor):
        * platform/graphics/mac/IconMac.mm:
        (WebCore::Icon::paint):
        * platform/graphics/svg/cg/CgSupport.cpp:
        (WebCore::applyStrokeStyleToContext):
        * platform/graphics/svg/cg/SVGPaintServerGradientCg.cpp:
        (WebCore::CGShadingRefForRadialGradient):
        (WebCore::SVGPaintServerGradient::updateQuartzGradientStopsCache):
        (WebCore::SVGPaintServerGradient::handleBoundingBoxModeAndGradientTransformation):
        * platform/graphics/svg/cg/SVGResourceMaskerCg.mm:
        (WebCore::applyLuminanceToAlphaFilter):
        (WebCore::applyExpandAlphatoGrayscaleFilter):
        (WebCore::transformImageIntoGrayscaleMask):
        * platform/mac/WebCoreTextRenderer.mm:
        (WebCoreDrawTextAtPoint):
        * rendering/RenderPath.cpp:
        (WebCore::RenderPath::mapAbsolutePointToLocal):
        * rendering/RenderSVGContainer.cpp:
        (WebCore::RenderSVGContainer::calcViewport):
        * rendering/RenderSVGImage.cpp:
        (WebCore::RenderSVGImage::nodeAtPoint):
        * rendering/RenderSVGText.cpp:
        (WebCore::RenderSVGText::relativeBBox):

2007-07-03  Anders Carlsson  <andersca@apple.com>

        Reviewed by Adam.

        <rdar://problem/5261523>
        Crash playing MP11 on cnbc.com
        
        The WMP Netscape plugin still creates a window even when windowless mode is turned on. Work around this by
        always removing the "windowlessvideo" parameter before passing it to the plugin.
        According to http://msdn2.microsoft.com/en-us/library/bb249373.aspx, "The windowlessVideo property is not 
        supported for Netscape Navigator. Setting a value for this property in Navigator may yield unexpected results."
        
        * plugins/win/PluginViewWin.cpp:
        (WebCore::PluginViewWndProc):
        (WebCore::PluginViewWin::paint):
        (WebCore::PluginViewWin::invalidateRect):
        (WebCore::PluginViewWin::determineQuirks):
        (WebCore::PluginViewWin::setParameters):
        (WebCore::PluginViewWin::PluginViewWin):
        (WebCore::PluginViewWin::init):
        * plugins/win/PluginViewWin.h:
        (WebCore::):

2007-07-03  Qing Zhao  <qing@staikos.net>

        Reviewed by George Staikos.

        Only draw sunken state for appropriate widgets. Not, for example, for
        lineedits.

        * platform/qt/RenderThemeQt.cpp:
        (WebCore::RenderThemeQt::applyTheme):

2007-07-03  Antti Koivisto  <antti@apple.com>

        Reviewed by Maciej.
        
        REGRESSION: misplaced selection ring remains after link is no longer focused.
        <rdar://problem/5205580>
        
        Fix placement of selection ring when part of the ring is in a different layer.

        * rendering/RenderFlow.cpp:
        (WebCore::RenderFlow::addFocusRingRects): Get coordinates right when moving to a different layer.
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::setStyle): 
        Don't reset state variables when not necessary.  When repaint() was called at the end of setSyle() it would
        get repaint rects wrong in some cases.

2007-07-03  Antti Koivisto  <antti@apple.com>

        Reviewed by Maciej.

        Blind fix for CrashTracer: [USER] 25 crashes in Safari at com.apple.WebCore: WebCore::Frame::document const + 6
        <rdar://problem/5263939>
        
        No one has managed to reproduce this but it looks like null check is needed here. There are plausible ways
        m_frame could be null for a live FrameView object.

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

2007-07-02  Oliver Hunt  <oliver@apple.com>

        Reviewed by Darin.

        Fix for <rdar://problem/5098378> single-pixel image optimization needs to be rewritten to not depend on floating point bitmap
        Tested by fast/replaced/image-solid-color-with-alpha.html

        Switch from float to byte based bitmap when pulling the color from 1x1 pixel images so
        that we can use the single pixel image optimisation in WebKit/win.

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

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

        Fix Bug 14498: RenderContainer::positionForCoordinates contains an order of operations error
        http://bugs.webkit.org/show_bug.cgi?id=14498

        There were two bugs:
        1) xPos/yPos were flipped
        2) + binds tighter than ?:, so the order of operations was incorrect

        Reviewed by Darin.

        Test: fast/inline-block/14498-positionForCoordinates.html

        * rendering/RenderContainer.cpp:
        (WebCore::RenderContainer::positionForCoordinates):

2007-07-02  Darin Adler  <darin@apple.com>

        Reviewed by Kevin Decker and Tim Hatcher.

        - fix <rdar://problem/5307906> some classes need finalize methods because
          of non-trivial work done in dealloc methods

        * bindings/objc/DOMRGBColor.mm:
        (+[DOMRGBColor initialize]): Added. Tells finalizer to run on main thread,
        which is needed because we are sharing a CFDictionary here with no locking.

        * bridge/mac/WebCoreAXObject.mm:
        (+[WebCoreAXObject initialize]): Added. Tells finalizer to run on main thread.
        (-[WebCoreAXObject finalize]): Added. Calls detach.

        * WebCore.xcodeproj/project.pbxproj: Let Xcode do what it wants to do.

2007-07-02  Sam Weinig  <sam@webkit.org>

        Reviewed by Darin.

        Sixth round of fixes for implicit 64-32 bit conversion errors.
        <rdar://problem/5292262>

        Use new narrowPrecisionToFloat() and narrowPrecisionToCGFloat() where
        appropriate.

        * html/CanvasRenderingContext2D.cpp:
        (WebCore::CanvasRenderingContext2D::setShadow):
        (WebCore::CanvasRenderingContext2D::applyShadow):
        * html/CanvasStyle.cpp:
        (WebCore::CanvasStyle::applyStrokeColor):
        (WebCore::CanvasStyle::applyFillColor):
        * ksvg2/svg/SVGAngle.cpp:
        * ksvg2/svg/SVGAnimationElement.cpp:
        (WebCore::SVGAnimationElement::parseKeyNumbers):
        (WebCore::parseKeySplines):
        (WebCore::SVGAnimationElement::handleTimerEvent):
        (WebCore::SVGAnimationElement::updateAnimatedValueForElapsedSeconds):
        * ksvg2/svg/SVGPatternElement.cpp:
        (WebCore::SVGPatternElement::buildPattern):
        * ksvg2/svg/SVGRadialGradientElement.cpp:
        (WebCore::SVGRadialGradientElement::buildGradient):
        * platform/graphics/cg/AffineTransformCG.cpp:
        (WebCore::AffineTransform::AffineTransform):
        (WebCore::AffineTransform::setMatrix):
        (WebCore::AffineTransform::map):
        (WebCore::AffineTransform::setA):
        (WebCore::AffineTransform::setB):
        (WebCore::AffineTransform::setC):
        (WebCore::AffineTransform::setD):
        (WebCore::AffineTransform::setE):
        (WebCore::AffineTransform::setF):
        (WebCore::AffineTransform::scale):
        (WebCore::AffineTransform::rotate):
        (WebCore::AffineTransform::translate):
        (WebCore::AffineTransform::shear):

2007-07-02  John Sullivan  <sullivan@apple.com>

        * page/mac/WebCoreFrameBridge.mm:
        (-[WebCoreFrameBridge getAllResourceDatas:andResponses:]):
        added a comment

2007-07-02  Sam Weinig  <sam@webkit.org>

        Rubberstamped by Darin.

        Rename FloatConversionUtilities.h to FloatConversion.h.
        Fix Win32 build.

        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * platform/DeprecatedString.cpp:
        * platform/FloatConversion.h: Copied from platform/FloatConversionUtilities.h.
        * platform/FloatConversionUtilities.h: Removed.
        * platform/StringImpl.cpp:

2007-07-02  Sam Weinig  <sam@webkit.org>

        Reviewed by Darin.

        Fifth round of fixes for implicit 64-32 bit conversion errors.
        <rdar://problem/5292262>

        Add toFloat() method to string classes and use it where appropriate.

        * WebCore.xcodeproj/project.pbxproj:
        * css/cssparser.cpp:
        (WebCore::CSSParser::lex):
        * ksvg2/svg/SVGAngle.cpp:
        (WebCore::SVGAngle::setValueAsString):
        * platform/AtomicString.h:
        (WebCore::AtomicString::toFloat):
        * platform/DeprecatedString.cpp:
        (WebCore::DeprecatedString::toFloat):
        * platform/DeprecatedString.h:
        * platform/FloatConversionUtilities.h: Added.
        (WebCore::narrowPrecisionToFloat):
        (WebCore::narrowPrecisionToCGFloat):
        * platform/PlatformString.h:
        * platform/String.cpp:
        (WebCore::String::toFloat):
        * platform/StringImpl.cpp:
        (WebCore::StringImpl::toFloat):
        * platform/StringImpl.h:

2007-07-02  Sam Weinig  <sam@webkit.org>

        Reviewed by Kevin McCullough.

        Fourth round of fixes for implicit 64-32 bit conversion errors.
        <rdar://problem/5292262>

        Use new piDouble and piFloat constants instead of M_PI.

        * html/CanvasRenderingContext2D.cpp:
        (WebCore::CanvasRenderingContext2D::rotate):
        * ksvg2/svg/SVGParserUtilities.cpp:
        (WebCore::SVGPathParser::calculateArc):
        * platform/graphics/Path.cpp:
        (WebCore::pathLengthApplierFunction):
        (WebCore::Path::createEllipse):
        * platform/graphics/cg/GraphicsContextCG.cpp:
        (WebCore::GraphicsContext::drawEllipse):
        (WebCore::GraphicsContext::strokeArc):
        * platform/graphics/cg/PDFDocumentImage.cpp:
        (WebCore::PDFDocumentImage::setCurrentPage):
        * platform/graphics/svg/filters/cg/SVGFEHelpersCg.h:
        * rendering/RenderPath.cpp:
        (WebCore::drawMarkerWithData):

2007-07-01  Adam Roben  <aroben@apple.com>

        Clarify/fix {Shadow,BorderImage}ParseContext's memory management

        Prefast emitted warnings that drew my attention to
        {Shadow,BorderImage}ParseContext::failed().  It turned out that these
        methods were actually correct, but rather confusing. "failed" really
        meant "abort and clean up" rather than "did you fail?", which was
        unclear. However, once I figured that out, the "and clean up" part was
        still a bit confusing, because all failed() did was to set a flag that
        would later cause the ParseContext's members to be deleted in the
        destructor. To clear this up, I've gotten rid of the failed() method
        altogether. It always returned false, so I've replaced all calls to
        it with the value false.

        I also noticed that the lifetime management of the ParseContexts'
        members was in all cases confusing, and in some cases wrong. The
        m_border{Top,Right,Bottom,Left} members of BorderImageParseContext
        were leaked whenever a border-image property was successfully parsed.
        I fixed that by holding these members in OwnPtrs. The
        CSSPrimitiveValue members of {Shadow,BorderImage}ParseContext, which
        inherit from Shared, were being explicitly deleted, which is not a
        safe way to manage the lifetime of objects that inherit from Shared.
        To fix this, I put those members inside RefPtrs. These two changes
        allowed me to remove the destructors entirely.

        Reviewed by Darin.

        All regression tests pass.

        * css/cssparser.cpp:
        (WebCore::ShadowParseContext::commitValue): Use .release() to avoid
        ref-count churn.
        (WebCore::ShadowParseContext::commitLength): Use a RefPtr for the new
        value to avoid a leak.
        (WebCore::CSSParser::parseShadow): Use 'false' instead of
        'context.failed()', and use .release() to avoid ref-count churn.
        (WebCore::BorderImageParseContext::commitWidth): Updated to use
        OwnPtr.
        (WebCore::CSSParser::parseBorderImage): Use 'false' instead of
        'context.failed'.

2007-07-01  Anders Carlsson  <andersca@apple.com>

        Reviewed by John Sullivan.

        <rdar://problem/5297146>
        Crash in Mail at WebCore::Frame::setUserStyleSheetLocation (reproducible w/ particular message)
        
        * loader/Cache.cpp:
        (WebCore::Cache::requestResource):
        Only insert the resource in the LRU list if the cache is enabled.
        
        (WebCore::Cache::insertInLRUList):
        (WebCore::Cache::resourceAccessed):
        Assert that the resource is in the cache.

2007-07-01  Darin Adler  <darin@apple.com>

        * css/tokenizer.flex: Rolled out the fix for 14453.
        The layout test wasn't passing. We'll try again.

2007-07-01  Adam Roben  <aroben@apple.com>

        Fix a crash in ~PluginViewWin()

        This crash was introduced in r23827.

        Reviewed by Anders.

        Fixes dom/html/level2/html/HTMLAnchorElement01.html

        * plugins/win/PluginViewWin.cpp:
        (WebCore::PluginViewWin::~PluginViewWin): Allow m_plugin to be null.

2007-07-01  Rob Buis  <buis@kde.org>

        Reviewed by Darin.

        http://bugs.webkit.org/show_bug.cgi?id=14453
        REGRESSION: www.nzherald.co.nz almost all the formating is gone
 
        * css/tokenizer.flex: Allow hex colors with 2, 4, or 5 hex digits.

2007-07-01  Sam Weinig  <sam@webkit.org>

        Reviewed by Oliver.

        Third round of implicit 64-32 bit conversion errors fixes.
        <rdar://problem/5292262>

        - Use new CSSPrimitiveValue::getDoubleValue() and CSSPrimitiveValue::getIntValue()
          methods instead of CSSPrimitiveValue::getFloatValue() where appropriate.

        * css/CSSPrimitiveValue.cpp:
        (WebCore::CSSPrimitiveValue::computeLengthInt):
        (WebCore::CSSPrimitiveValue::computeLengthIntForLength):
        (WebCore::CSSPrimitiveValue::computeLengthShort):
        (WebCore::CSSPrimitiveValue::computeLengthFloat):
        (WebCore::CSSPrimitiveValue::computeLengthDouble):
        (WebCore::CSSPrimitiveValue::getDoubleValue):
        * css/CSSPrimitiveValue.h:
        (WebCore::CSSPrimitiveValue::getDoubleValue):
        (WebCore::CSSPrimitiveValue::getFloatValue):
        (WebCore::CSSPrimitiveValue::getIntValue):
        * css/Counter.h:
        (WebCore::Counter::listStyleNumber):
        * css/MediaQueryEvaluator.cpp:
        (WebCore::parseAspectRatio):
        * css/cssparser.cpp:
        (WebCore::BorderImageParseContext::commitBorderImage):
        * css/cssstyleselector.cpp:
        (WebCore::convertToLength):
        (WebCore::applyCounterList):
        (WebCore::CSSStyleSelector::applyProperty):
        (WebCore::CSSStyleSelector::mapBackgroundSize):
        (WebCore::CSSStyleSelector::mapBackgroundXPosition):
        (WebCore::CSSStyleSelector::mapBackgroundYPosition):
        * html/HTMLTableElement.cpp:
        (WebCore::HTMLTableElement::parseMappedAttribute):
        * ksvg2/css/SVGCSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::applySVGProperty):
        * ksvg2/misc/KCanvasRenderingStyle.cpp:
        (WebCore::KSVGPainterFactory::cssPrimitiveToLength):
        (WebCore::KSVGPainterFactory::dashArrayFromRenderingStyle):

2007-07-01  Pamela Greene  <pamg.bugs@gmail.com>

        Reviewed by Darin.

        Fix for <http://bugs.webkit.org/show_bug.cgi?id=14320>
        Bug 14320: <canvas> gradient stops at identical offsets are applied in the wrong order
        <rdar://problem/5290084>

        Use std::stable_sort() instead of qsort() to sort gradient stops.
        Adjust the comparison function accordingly.

        * html/CanvasGradient.cpp:
        (WebCore::compareStops):
        (WebCore::CanvasGradient::findStop):

2007-07-01  Holger Hans Peter Freyther  <zecke@selfish.org>

        Reviewed by Darin.

        m_usesPageCache was not initialized. As the b/f cache is only
        implemented in the Mac port and WebView.mm is taking care of calling
        Settings::setUsesPageCache I decided to make it false by default.

        * page/Settings.cpp:
        (WebCore::Settings::Settings): m_usesPageCache was not initialized

2007-07-01  Holger Hans Peter Freyther  <zecke@selfish.org>

        Reviewed by Darin.

        Inherited- and NonInheritedFlags is a bit field. But for comparsion
        the other part of the union _iflags/_niflags is used for comparions.
        This will compare 5 uninitialized bits of _iflags and 22 of _niflags.
        Make sure the unused bits have a specified value.

        * ksvg2/css/SVGRenderStyle.h:
        (WebCore::SVGRenderStyle::setBitDefaults): Make sure the unused bits
        have a value as well.

2007-06-30  Adam Roben  <aroben@apple.com>

        Compile WebCore with /W4 on Windows

        Some more warnings were disabled globally, including assignment within
        a conditional, unused variable, and various warnings related to
        inability to instantiate opaque structs.

        In addition, the "unreachable code" warning was turned off for
        CSSGrammar.cpp and XPathGrammar.cpp.

        Reviewed by Oliver.

        * WebCore.vcproj/WebCore.vcproj:

2007-06-29  Adam Roben  <aroben@apple.com>

        Give CString an equality operator to fix a bug in HTMLFormElement::formData

        The bug was spotted by MSVC /W4. The problem was that we were comparing
        a CString to a char* using ==, but CString had no equality operator.
        The result was that the CString was being cast to a const char* and a
        pointer comparison was being done, which would (essentially) always
        return false.

        There are two parts to the fix: get rid of CString's const char*
        casting operator, and add an equality operator. Previous uses of the
        casting operator have been changed to use CString::data().

        Test: http/misc/isindex-formdata.html

        Reviewed by Oliver.

        * dom/XMLTokenizer.cpp:
        (WebCore::parseXMLDocumentFragment):
        * html/HTMLDocument.cpp:
        (WebCore::HTMLDocument::determineParseMode):
        * html/HTMLFormElement.cpp:
        (WebCore::HTMLFormElement::formData):
        * loader/TextResourceDecoder.cpp:
        (WebCore::TextResourceDecoder::checkForCSSCharset):
        * platform/CString.cpp:
        (WebCore::operator==):
        * platform/CString.h:
        * platform/KURL.cpp:
        (WebCore::encodeRelativeString):
        * platform/StringImpl.cpp:
        (WebCore::StringImpl::toDouble):
        * platform/network/cf/FormDataStreamCFNet.cpp:
        (WebCore::setHTTPBody):
        * platform/network/mac/FormDataStreamMac.mm:
        (WebCore::setHTTPBody):
        * platform/win/ClipboardUtilitiesWin.cpp:
        (WebCore::markupToCF_HTML):
        * plugins/win/PluginPackageWin.cpp:
        (WebCore::splitString):
        * plugins/win/PluginStreamWin.cpp:
        (WebCore::PluginStreamWin::startStream):
        (WebCore::PluginStreamWin::destroyStream):
        (WebCore::PluginStreamWin::sendJavaScriptStream):
        (WebCore::PluginStreamWin::didFinishLoading):
        * plugins/win/PluginViewWin.cpp:
        (WebCore::PluginViewWin::start):
        (WebCore::createUTF8String):
        (WebCore::PluginViewWin::userAgent):
        * xml/XSLStyleSheet.cpp:
        (WebCore::XSLStyleSheet::locateStylesheetSubResource):
        * xml/XSLTProcessor.cpp:
        (WebCore::xsltParamArrayFromParameterMap):

2007-06-29  Adam Roben  <aroben@apple.com>

        Initialize two variables that MSVC /W4 isn't smart enough to realize always get initialized

        Reviewed by John.

        * editing/Editor.cpp:
        (WebCore::Editor::advanceToNextMisspelling):
        * html/HTMLParser.cpp:

2007-06-29  Adam Roben  <aroben@apple.com>

        Fix some possibly unitialized variables found by MSVC /W4

        Reviewed by John.

        * rendering/bidi.cpp:
        (WebCore::RenderBlock::layoutInlineChildren):

2007-06-29  Adam Roben  <aroben@apple.com>

        Remove bogus cast found by MSVC /W4

        Reviewed by John and Oliver.

        * ksvg2/css/SVGCSSParser.cpp:
        (WebCore::CSSParser::parseSVGValue):

2007-06-29  Adam Roben  <aroben@apple.com>

        Remove unused local functions uncovered by MSVC /W4

        Reviewed by John and Oliver.

        * platform/win/SearchPopupMenuWin.cpp:
        * rendering/RenderText.cpp:

2007-06-29  Adam Roben  <aroben@apple.com>

        Don't take the address of temporary values to appease MSVC /W4

        Reviewed by Oliver.

        No regression test possible.

        * platform/win/PopupMenuWin.cpp:
        (WebCore::PopupMenu::invalidateItem):
        (WebCore::PopupMenu::valueChanged):
        (WebCore::PopupWndProc):
        * platform/win/ScrollViewWin.cpp:
        (WebCore::ScrollView::ScrollViewPrivate::scrollBackingStore):
        * platform/win/UniscribeController.cpp:
        (WebCore::UniscribeController::shapeAndPlaceItem):
        * platform/win/WidgetWin.cpp:
        (WebCore::Widget::invalidateRect):

2007-06-29  Adam Roben  <aroben@apple.com>

        Make an int -> UINT conversion explicit that MSVC /W4 complains about

        Reviewed by John and Oliver.

        No regression test possible.

        * platform/win/SoundWin.cpp:

2007-06-29  Adam Roben  <aroben@apple.com>

        Remove unreachable code uncovered by MSVC /W4

        Reviewed by Oliver.

        No regression test possible.

        * html/CanvasRenderingContext2D.cpp:
        (WebCore::CanvasRenderingContext2D::createPattern):
        * html/HTMLAnchorElement.cpp:
        (WebCore::HTMLAnchorElement::isLiveLink):
        * html/HTMLElement.cpp:
        (WebCore::HTMLElement::contentEditable):
        * platform/DeprecatedString.cpp:
        (WebCore::allocateHandle):
        (WebCore::freeHandle):
        * plugins/win/npapi.cpp:
        (pluginViewForInstance):
        * rendering/RenderImage.cpp:
        (WebCore::RenderImage::isWidthSpecified):
        (WebCore::RenderImage::isHeightSpecified):
        * rendering/RenderTheme.cpp:
        (WebCore::RenderTheme::isControlStyled):

2007-06-29  John Sullivan  <sullivan@apple.com>

        Reviewed by Oliver Hunt.
        
        - WebCore support for accessing the set of rectangles that encompass the selected text
        
        * page/Frame.h:
        * page/Frame.cpp:
        (WebCore::Frame::selectionTextRects):
        new function, fills in a passed Vector with the line box rects that represent the selected range

        * rendering/RenderText.cpp:
        (WebCore::RenderText::addLineBoxRects):
        fixed off-by-one bug involving use of the confusing function InlineTextBox::end()

        * WebCore.exp:
        exported symbol for this new function

2007-06-29  Justin Garcia  <justin.garcia@apple.com>

        Reviewed by Harrison.
        
        <rdar://problem/5299513> REGRESSION: In Mail, a crash occurs when attempting to undo a newly created To Do
        
        Rolled out a change made in r23787.
        
        * editing/DeleteSelectionCommand.cpp:
        (WebCore::DeleteSelectionCommand::handleGeneralDelete):

2007-06-29  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Darin Adler, Anders Carlsson.
        
        Fixed <rdar://problem/5303567> REGRESSION: XMLHttpRequest.responseXML 
        returns NULL if response MIME type is not XML -- breaks Wikipedia widget
        
        The spec says that responseXML must return null for any HTTP response
        with a non-XML MIME type. Technically, that leaves non-HTTP responses
        free to do whatever they want.

        * xml/xmlhttprequest.cpp:
        (WebCore::XMLHttpRequest::getResponseXML): Only return null for non-XML
        MIME types if the response was HTTP.

2007-06-29  Sam Weinig  <sam@webkit.org>

        Reviewed by Darin.

        Second pass at fixing implicit 64-32 bit conversion errors.
        <rdar://problem/5292262>

        - Use new JSValue::toFloat() method instead of toNumber() where
          appropriate.

        * bindings/js/JSCanvasRenderingContext2DCustom.cpp:
        (WebCore::JSCanvasRenderingContext2D::setFillColor):
        (WebCore::JSCanvasRenderingContext2D::setStrokeColor):
        (WebCore::JSCanvasRenderingContext2D::strokeRect):
        (WebCore::JSCanvasRenderingContext2D::drawImage):
        (WebCore::JSCanvasRenderingContext2D::drawImageFromRect):
        (WebCore::JSCanvasRenderingContext2D::setShadow):
        * bindings/js/JSHTMLSelectElementCustom.cpp:
        (WebCore::JSHTMLSelectElement::remove):
        * bindings/js/JSSVGMatrixCustom.cpp:
        (WebCore::JSSVGMatrix::rotateFromVector):
        * bindings/js/kjs_events.cpp:
        (KJS::JSClipboardPrototypeFunction::callAsFunction):
        * bindings/scripts/CodeGeneratorJS.pm:
        * ksvg2/svg/SVGScriptElement.cpp:
        (WebCore::SVGScriptElement::executeScript):

2007-06-29  Adele Peterson  <adele@apple.com>

        Rolling out fix for <rdar://problem/5301322> since it broke layout tests.

        * html/HTMLInputElement.h:
        * html/HTMLTextAreaElement.h:

2007-06-29  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Oliver Hunt.

        Fixed <rdar://problem/4962298> REGRESSION: Synchronous XHR for missing 
        local file throws exception -- breaks Wikipedia widget

        * WebCore.xcodeproj/project.pbxproj:
        * xml/xmlhttprequest.cpp:
        (WebCore::XMLHttpRequest::send): Don't throw exceptions for local files.

2007-06-29  Ada Chan  <adachan@apple.com>

        Reviewed by Adam.

        Fixed a previous fix to a signed/unsigned mismatch.

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

2007-06-29  Adele Peterson  <adele@apple.com>

        Reviewed by Ada and Kevin McCullough.

        Fix for <rdar://problem/5301322> REGRESSION: Select All selects the whole page when used in readonly textareas

        Implemented canSelectAll and selectAll for text fields and textareas, since they're special cases even when they're not editable.

        Tests:
        fast/forms/input-readonly-select-all.html
        fast/forms/textarea-readonly-select-all.html

        * html/HTMLInputElement.h:
        (WebCore::HTMLInputElement::canSelectAll):
        (WebCore::HTMLInputElement::selectAll):
        * html/HTMLTextAreaElement.h:
        (WebCore::HTMLTextAreaElement::canSelectAll):
        (WebCore::HTMLTextAreaElement::selectAll):

2007-06-29  Adam Roben  <aroben@apple.com>

        Build fix

        This is what happens when you test your patch on two OSs and then
        commit from the wrong one.

        * rendering/RenderTextControl.cpp:
        (WebCore::RenderTextControl::valueChanged):
        (WebCore::RenderTextControl::itemText):
        (WebCore::RenderTextControl::itemIsSeparator):

2007-06-29  Adam Roben  <aroben@apple.com>

        Start compiling WebCore with /W3 under MSVC

        One warning was globally disabled: implicit conversion of int to bool.

        Reviewed by Darin.

        * WebCore.vcproj/WebCore.vcproj:

2007-06-29  Adam Roben  <aroben@apple.com>

        Turn DeprecatedStringData's copy constructor into a static method to appease MSVC /W3

        DeprecatedStringData now has no public copy constructor. The single
        call to the old one has been replaced with a call to the new
        DeprecatedStringData::createAndAdopt static method.

        Reviewed by Darin.

        All regression tests pass.

        * platform/DeprecatedString.cpp:
        (WebCore::DeprecatedStringData::createAndAdopt):
        (WebCore::DeprecatedStringData::adopt):
        (WebCore::DeprecatedString::detachIfInternal):
        * platform/DeprecatedString.h:

2007-06-29  Adam Roben  <aroben@apple.com>

        Fix more signed/unsigned mismatches uncovered by MSVC /W3

        Reviewed by John.

        No regression tests possible.

        * platform/network/cf/ResourceResponseCFNet.cpp:
        (WebCore::filenameHasSaneExtension):
        * platform/win/FontDataWin.cpp:
        (WebCore::FontData::containsCharacters):
        * platform/win/PlatformScrollBarSafari.cpp:
        (WebCore::):
        * platform/win/UniscribeController.cpp:
        (WebCore::UniscribeController::advance):
        (WebCore::UniscribeController::shapeAndPlaceItem):
        * platform/win/WebCoreTextRenderer.cpp:
        (WebCore::doDrawTextAtPoint):
        * plugins/win/PluginDatabaseWin.cpp:
        (WebCore::parseVersionString):
        * plugins/win/PluginPackageWin.cpp:
        (WebCore::splitString):
        * plugins/win/PluginViewWin.cpp:
        (WebCore::freeStringArray):
        (WebCore::PluginViewWin::invalidateTimerFired):

2007-06-29  Adam Roben  <aroben@apple.com>

        Change PopupMenuClient::listSize to return an int to appease warnings from MSVC /W3

        Reviewed by John.

        No regression test possible.

        * html/HTMLSelectElement.cpp:
        (WebCore::HTMLSelectElement::menuListDefaultEventHandler):
        * platform/PopupMenuClient.h:
        * platform/win/PopupMenuWin.cpp:
        (WebCore::PopupMenu::calculatePositionAndSize):
        (WebCore::PopupMenu::focusFirst):
        (WebCore::PopupMenu::focusLast):
        (WebCore::PopupMenu::down):
        (WebCore::PopupMenu::up):
        (WebCore::PopupMenu::paint):
        * rendering/RenderMenuList.cpp:
        * rendering/RenderMenuList.h:
        * rendering/RenderTextControl.cpp:
        * rendering/RenderTextControl.h:

2007-06-29  Adam Roben  <aroben@apple.com>

        Fix two typos spotted by MSVC /W3

        Both typos were a semicolon following the condition of an if. This
        would cause the intended body of the if to always execute.

        Unfortunately neither of these fixes are testable.
        BackForwardList::goForward is only called from WebBackForwardList, and
        the createDragImageFromImage bug would only manifest itself when
        CreateCompatibleDC failed.

        Reviewed by Mark.

        * history/BackForwardList.cpp:
        (WebCore::BackForwardList::goForward):
        * platform/win/DragImageWin.cpp:
        (WebCore::createDragImageFromImage):

2007-06-29  Adam Treat  <adam@staikos.net>

        Reviewed by george Staikos.

        Support horizontal and vertical scroll, and set the right units.

        * platform/qt/WheelEventQt.cpp:
        (WebCore::PlatformWheelEvent::PlatformWheelEvent):

2007-06-28  Adam Roben  <aroben@apple.com>

        Get WebCore compiling with /W2 on Windows

        Reviewed by Steve.

        No regression tests affected.

        * WebCore.vcproj/WebCore.vcproj: Turn the warning level up to 2, and
        disable two warnings: implicit int <=> float conversion, and class vs.
        struct inconsistency.
        * dom/CharacterData.cpp:
        (WebCore::CharacterData::deleteData): Cast to int before negating.
        * loader/Cache.cpp:
        (WebCore::Cache::remove): Ditto.
        * platform/graphics/Path.cpp:
        (WebCore::pathLengthApplierFunction): Consistently use floats.
        * platform/graphics/cg/GraphicsContextCG.cpp:
        (WebCore::GraphicsContext::drawEllipse): Ditto.
        * platform/win/GraphicsContextWin.cpp:
        (WebCore::GraphicsContext::drawLineForMisspellingOrBadGrammar): Ditto.

2007-06-28  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Maciej Stachowiak.
        
        Fixed <rdar://problem/5299005> DOM timers fire without a local autorelease 
        pool => pathologically high high water mark
        
        I couldn't measure any performance problems with iBench HTML or PLT.

        * WebCore.xcodeproj/project.pbxproj: Changed .cpp file to be ObjC++.
        * platform/mac/SharedTimerMac.cpp:
        (WebCore::timerFired): Added autorelease pool.

2007-06-28  Mitz Pettel  <mitz@webkit.org>

        Reviewed by Beth.

        - fix http://bugs.webkit.org/show_bug.cgi?id=14118
          ASSERTION FAILED: !needsLayout() seen again

        Test: fast/dynamic/recursive-layout.html

        * page/FrameView.cpp:
        (WebCore::FrameView::layout): Removed the midLayout guards around
        the calls to invalidateSelection() and updateWidgetPositions(). Those
        calls may dirty the layout, but in that case they also update it, so
        they should be allowed to do it. Added an ASSERT to make sure that when
        they return, the root is not marked for layout.

2007-06-28  Sam Weinig  <sam@webkit.org>

        Rubberstamped by Adam Roben.

        Roll out r23861.  It caused the buildbot to fail on intel.

        * page/Page.cpp:
        (WebCore::Page::goToItem):

2007-06-26  Maxime Britto  <mbritto@pleyo.com>

        Reviewed by Geoff.

        Patch for http://bugs.webkit.org/show_bug.cgi?id=13038
        ASSERTION FAILED: item->target().isEmpty() || m_mainFrame->tree()->find(item->target()) == m_mainFrame

        Modification of an ASSERT on goToItem related to go back/forward in
        history.Don't need to check the frameset if the target is _blank.

         * page/Page.cpp:
         (WebCore::Page::goToItem):

2007-06-28  Anders Carlsson  <andersca@apple.com>

        Reviewed by Oliver.

        <rdar://problem/5234139>
        <object> with PNG src rendered as image document.
        
        Complete the URL before passing it to the frame loader client.
        
        * html/HTMLObjectElement.cpp:
        (WebCore::HTMLObjectElement::isImageType):

2007-06-28  Rob Buis  <buis@kde.org>

        Reviewed by Maciej.

        http://bugs.webkit.org/show_bug.cgi?id=14373
        CSS1: selectors (classes and IDs) cannot start with a dash or with a digit

        Make sure the id selector validates against the CSS2.1 identfier
        definition, not the hexcolor/HASH definition.

        * css/CSSGrammar.y:
        * css/cssparser.cpp:
        (WebCore::CSSParser::lex):
        (WebCore::CSSParser::text):
        * css/tokenizer.flex:

2007-06-28  Simon Hausmann  <hausmann@kde.org>

        Reviewed by Zack.

        Implemented PasteboardQt::writeSelection to copy the selected text into the Clipboard as well as PasteboardQt::plainText to retrieve plain text from the clipboard for pasting for example into form fields.

        * platform/qt/PasteboardQt.cpp:
        (WebCore::Pasteboard::writeSelection):

2007-06-28  Antti Koivisto  <antti@apple.com>

        Reviewed by Mitz.
        
        Fix http://bugs.webkit.org/show_bug.cgi?id=14332
        Bug 14332: REGRESSION (r21145): <td> width ignored
        <rdar://problem/5290123>
        
        Cells in table with non-zero cellpadding are not considered empty.

        * rendering/AutoTableLayout.cpp:
        (WebCore::AutoTableLayout::recalcColumn):

2007-06-28  Adam Roben  <aroben@apple.com>

        Fix <rdar://problem/5300455> Prefast: typo in RenderBlock::paintObject

        Reviewed by Hyatt.

        No layout test possible, as this bug didn't have any effect since
        "bool & bool" has the same value as "bool && bool"

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::paintObject): Changed & to &&.

2007-06-28  Adam Roben  <aroben@apple.com>

        Fix <rdar://problem/5300443> word-break and -webkit-user-modify allow any value

        The bug was caused by two typos found by prefast.

        Reviewed by Hyatt.

        * css/cssparser.cpp:
        (WebCore::CSSParser::parseValue): Fixed typos.

2007-06-20  Matt Perry  <mpComplete@gmail.com>

        Reviewed by Adam.

        - Fix http://bugs.webkit.org/show_bug.cgi?id=14251:
          onchange handler for select controls doesn't fire when changing via keyboard

        * html/HTMLSelectElement.cpp:
        (WebCore::HTMLSelectElement::menuListDefaultEventHandler): Got rid of
        a call to saveLastSelection in the "Enter" key handler for select
        controls that was preventing onchange from firing.

2007-06-27  Sam Weinig  <sam@webkit.org>

        Fix Gdk, Qt, and Win32 builds.

        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:

2007-06-27  Sam Weinig  <sam@webkit.org>

        Reviewed by Geoff.

        Patch for http://bugs.webkit.org/show_bug.cgi?id=14319
        Move the Selection object out of the JS bindings

        - Renames JS Object Selection to DOMSelection to avoid a name
          conflict.

        * DerivedSources.make:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/kjs_window.cpp:
        (KJS::WindowPrivate::WindowPrivate):
        (KJS::Window::mark):
        (KJS::Window::clearHelperObjectProperties):
        (KJS::WindowFunc::callAsFunction):
        (KJS::Window::disconnectFrame):
        * bindings/js/kjs_window.h:
        (KJS::Window::):
        * page/DOMSelection.cpp: Added.
        (WebCore::DOMSelection::DOMSelection):
        (WebCore::DOMSelection::frame):
        (WebCore::DOMSelection::disconnectFrame):
        (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::getRangeAt):
        (WebCore::DOMSelection::removeAllRanges):
        (WebCore::DOMSelection::addRange):
        (WebCore::DOMSelection::toString):
        * page/DOMSelection.h: Added.
        * page/DOMSelection.idl: Added.
        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::disconnectFrame):
        (WebCore::DOMWindow::getSelection):
        * page/DOMWindow.h:
        * page/DOMWindow.idl:

2007-06-27  Sam Weinig  <sam@webkit.org>

        Reviewed by Maciej.

        2nd patch for http://bugs.webkit.org/show_bug.cgi?id=14111
        Autogenerate Event JS binding

        - Cleanup kjs_events

        * bindings/js/kjs_events.cpp:
        (WebCore::JSAbstractEventListener::JSAbstractEventListener):
        (WebCore::JSAbstractEventListener::handleEvent):
        (WebCore::JSAbstractEventListener::isHTMLEventListener):
        (WebCore::JSUnprotectedEventListener::JSUnprotectedEventListener):
        (WebCore::JSUnprotectedEventListener::~JSUnprotectedEventListener):
        (WebCore::JSUnprotectedEventListener::listenerObj):
        (WebCore::JSUnprotectedEventListener::windowObj):
        (WebCore::JSUnprotectedEventListener::clearWindowObj):
        (WebCore::JSUnprotectedEventListener::mark):
        (WebCore::JSEventListener::JSEventListener):
        (WebCore::JSEventListener::~JSEventListener):
        (WebCore::JSEventListener::listenerObj):
        (WebCore::JSEventListener::windowObj):
        (WebCore::JSEventListener::clearWindowObj):
        (WebCore::JSLazyEventListener::JSLazyEventListener):
        (WebCore::JSLazyEventListener::listenerObj):
        (WebCore::JSLazyEventListener::parseCode):
        (WebCore::getNodeEventListener):
        (WebCore::JSClipboard::JSClipboard):
        (WebCore::JSClipboard::getValueProperty):
        (WebCore::JSClipboard::putValueProperty):
        (WebCore::JSClipboardPrototypeFunction::callAsFunction):
        (WebCore::toJS):
        (WebCore::toClipboard):
        * bindings/js/kjs_events.h:
        (WebCore::JSClipboard::classInfo):
        (WebCore::JSClipboard::impl):
        * bindings/js/kjs_window.h:
        * ksvg2/events/JSSVGLazyEventListener.h:

2007-06-27  Sam Weinig  <sam@webkit.org>

        Reviewed by Adam Roben.

        Patch for http://bugs.webkit.org/show_bug.cgi?id=12045
        Crash under gmalloc at WTF::RefPtr<WebCore::HTMLSliderThumbElement>::operator->
        <rdar://problem/5286670>

        Test: fast/forms/thumbslider-no-parent-slider.html
        Test: fast/forms/thumbslider-crash.html

        * rendering/RenderObject.h:
        (WebCore::RenderObject::isSlider):
        * rendering/RenderSlider.h:
        (WebCore::RenderSlider::isSlider):
        * rendering/RenderTheme.cpp:
        (WebCore::RenderTheme::paint): Only paint thumbslider
        if the parent renderer is a RenderSlider.
        * rendering/RenderThemeMac.mm:
        (WebCore::RenderThemeMac::paintSliderThumb):
        * rendering/RenderThemeSafari.cpp:
        (WebCore::RenderThemeSafari::paintSliderThumb):

2007-06-27  George Staikos  <staikos@kde.org>

        Make Qt builds link when XSLT is turned off.

        * WebCore.pro:

2007-06-27  Steve Falkenburg  <sfalken@apple.com>

        Turn on static code analysis (Windows only).

        Affects only folks that have Visual Studio Team Suite installed,
        or who have replaced their compiler with the version shipping in the
        Vista SDK.
        
        Reviewed by Oliver.

        * WebCore.vcproj/WebCore.vcproj:

2007-06-27  George Staikos  <staikos@kde.org>

        Remove old commented out files that no-longer exist.

        * WebCore.pro:

2007-06-27  Justin Garcia  <justin.garcia@apple.com>

        Reviewed by John.

        <rdar://problem/5247341> REGRESSION: Pasting sometimes leaves out trailing newline
        
        Pasting with a trailing interchange newline doesn't work when pasting
        into an empty line.  Code that handles removing brs at the insertion
        position tries to also handle trailing interchange newlines by re-using
        those brs and fails.  Removed that code and handle all interchange
        newlines with code later in doApply().

        * editing/ReplaceSelectionCommand.cpp:
        (WebCore::ReplaceSelectionCommand::doApply): Don't try to re-use the
        endBR when there's a trailing interchange newline.
        
2007-06-27  Anders Carlsson  <andersca@apple.com>

        Reviewed by Oliver.

        <rdar://problem/5253950>
        When Shockwave plugin has been loaded, exiting crashes Safari
        
        Add a "load count" for plugin packages. When the load count is zero, unload the plugin.
        
        * plugins/win/PluginPackageWin.cpp:
        (WebCore::PluginPackageWin::PluginPackageWin):
        (WebCore::PluginPackageWin::load):
        (WebCore::PluginPackageWin::unload):
        (WebCore::PluginPackageWin::unloadWithoutShutdown):
        * plugins/win/PluginPackageWin.h:
        
        * plugins/win/PluginViewWin.cpp:
        (WebCore::PluginViewWin::~PluginViewWin):
        Make sure to unload the plugin package and clear any references to plugin script objects.

2007-06-27  George Staikos  <staikos@kde.org>

        This was succeeding compile by luck.  Setup dependencies properly.

        * WebCore.pro:

2007-06-27  Justin Garcia  <justin.garcia@apple.com>

        Reviewed by John.

        <rdar://problem/4580583> Breaking blockquoted list should not automatically renumber the second list
        
        When a quoted numbered list is broken in half, it's cloned
        to make the second list. That second list needs its start attribute
        set so that the numbers of the list items in it will be preserved.

        * editing/BreakBlockquoteCommand.cpp:
        (WebCore::BreakBlockquoteCommand::doApply): Set the start attribute
        of a cloned list to be the original number of the first list item in it.

2007-06-27  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Geoff.

        http://bugs.webkit.org/show_bug.cgi?id=14413
        GIF animation throttling is different from MSIE

        * platform/graphics/cg/ImageSourceCG.cpp:
        (WebCore::ImageSource::frameDurationAtIndex):
        Change the cut-off value to 50ms to match MSIE.

2007-06-27  Sam Weinig  <sam@webkit.org>

        Reviewed by Darin.

        First pass at fixing implicit 64-32 bit conversion errors.
        <rdar://problem/5292262>

        - Add 'f' suffix where necessary.

        * bridge/mac/WebCoreAXObject.mm:
        (-[WebCoreAXObject accessibilityAttributeValue:forParameter:]):
        * css/csshelper.h:
        * css/cssstyleselector.cpp:
        (WebCore::):
        (WebCore::CSSStyleSelector::largerFontSize):
        (WebCore::CSSStyleSelector::smallerFontSize):
        * html/CanvasGradient.cpp:
        (WebCore::CanvasGradient::addColorStop):
        * html/CanvasPattern.cpp:
        (WebCore::CanvasPattern::createPattern):
        * ksvg2/css/SVGCSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::applySVGProperty):
        * ksvg2/css/SVGRenderStyle.h:
        * ksvg2/events/SVGZoomEvent.cpp:
        (WebCore::SVGZoomEvent::SVGZoomEvent):
        * ksvg2/svg/SVGLength.cpp:
        (WebCore::SVGLength::SVGLength):
        (WebCore::SVGLength::value):
        (WebCore::SVGLength::setValue):
        (WebCore::SVGLength::valueAsPercentage):
        (WebCore::SVGLength::PercentageOfViewport):
        * ksvg2/svg/SVGSVGElement.cpp:
        (WebCore::SVGSVGElement::pixelUnitToMillimeterX):
        (WebCore::SVGSVGElement::pixelUnitToMillimeterY):
        (WebCore::SVGSVGElement::getScreenCTM):
        * ksvg2/svg/SVGTextContentElement.cpp:
        (WebCore::SVGTextContentElement::getComputedTextLength):
        (WebCore::SVGTextContentElement::getSubStringLength):
        (WebCore::SVGTextContentElement::getRotationOfChar):
        * ksvg2/svg/SVGTransformDistance.cpp:
        (WebCore::SVGTransformDistance::SVGTransformDistance):
        (WebCore::SVGTransformDistance::distance):
        * page/InspectorController.cpp:
        (WebCore::InspectorResource::InspectorResource):
        * platform/graphics/FloatPoint3D.cpp:
        (WebCore::FloatPoint3D::normalize):
        * platform/graphics/Path.cpp:
        (WebCore::pathLengthApplierFunction):
        (WebCore::Path::createRoundedRectangle):
        * platform/graphics/cg/GraphicsContextCG.cpp:
        (WebCore::GraphicsContext::drawLine):
        (WebCore::GraphicsContext::strokeArc):
        * platform/graphics/cg/ImageCG.cpp:
        (WebCore::FrameData::clear):
        * platform/graphics/cg/ImageSourceCG.cpp:
        (WebCore::ImageSource::frameDurationAtIndex):
        * platform/graphics/cg/PDFDocumentImage.cpp:
        (WebCore::PDFDocumentImage::setCurrentPage):
        * platform/graphics/svg/SVGPaintServerPattern.cpp:
        (WebCore::SVGPaintServerPattern::externalRepresentation):
        * platform/graphics/svg/SVGPaintServerRadialGradient.cpp:
        (WebCore::SVGPaintServerRadialGradient::SVGPaintServerRadialGradient):
        * platform/graphics/svg/cg/SVGPaintServerGradientCg.cpp:
        (WebCore::cgGradientCallback):
        (WebCore::CGShadingRefForRadialGradient):
        (WebCore::SVGPaintServerGradient::updateQuartzGradientStopsCache):
        * platform/mac/FontDataMac.mm:
        (WebCore::webFallbackFontFamily):
        * platform/mac/PopupMenuMac.mm:
        (WebCore::PopupMenu::show):
        * rendering/InlineFlowBox.cpp:
        (WebCore::InlineFlowBox::placeBoxesHorizontally):
        * rendering/RenderSlider.cpp:
        (WebCore::RenderSlider::setValueForPosition):
        (WebCore::RenderSlider::setPositionFromValue):

2007-06-27  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Geoff.

        http://bugs.webkit.org/show_bug.cgi?id=14288
        XMLHttpRequest doesn't use a correct content type for file:// URLs

        Test: fast/dom/xmlhttprequest-html-response-encoding.html

        * xml/xmlhttprequest.cpp:
        (WebCore::XMLHttpRequest::responseMIMEType): Use MIME type provided by
        the network layer, since it provides it even for non-HTTP responses.

2007-06-26  Alp Toker  <alp.toker@collabora.co.uk>

        Reviewed by Sam Weinig.

        http://bugs.webkit.org/show_bug.cgi?id=14061
        Implement more of FrameLoaderClientGdk

        Make FrameLoaderClientGdk work properly when the MIME type is set.

        * loader/gdk/FrameLoaderClientGdk.cpp:
        (WebCore::FrameLoaderClientGdk::objectContentType):
        (WebCore::FrameLoaderClientGdk::canShowMIMEType):

2007-06-26  Alp Toker  <alp.toker@collabora.co.uk>

        Reviewed by Maciej.

        http://bugs.webkit.org/show_bug.cgi?id=14058
        Gdk font backend cleanup

        * platform/FontData.h: Remove obsolete function.
        * platform/gdk/FontDataGdk.cpp:
        (WebCore::FontData::containsCharacters): Lock/unlock only once.
        (WebCore::FontData::platformWidthForGlyph): Remove needless cast.
        * platform/gdk/FontPlatformData.h: Remove obsolete function.
        * platform/gdk/FontPlatformDataGdk.cpp:
        (WebCore::FontPlatformData::FontPlatformData): Pass the actual size,
        not the pixel size.
        (WebCore::FontPlatformData::~FontPlatformData): Free m_fontMatrix.
        * platform/gdk/GlyphPageTreeNodeGdk.cpp:
        (WebCore::GlyphPage::fill): Lock/unlock only once.

2007-06-26  Mitz Pettel  <mitz@webkit.org>

        Reviewed by Hyatt.

        - fix http://bugs.webkit.org/show_bug.cgi?id=14406
          <colgroup>'s borders are ignored when it has <col> children

        Covered by existing tests.

        * rendering/RenderTableCell.cpp:
        (WebCore::RenderTableCell::collapsedLeftBorder):
        (WebCore::RenderTableCell::collapsedRightBorder):
        (WebCore::RenderTableCell::collapsedTopBorder):
        (WebCore::RenderTableCell::collapsedBottomBorder):

2007-06-26  Mitz Pettel  <mitz@webkit.org>

        Reviewed by Oliver.

        - fix http://bugs.webkit.org/show_bug.cgi?id=14329
          REGRESSION: TEXTAREA - cannot drag-and-drop text at en.wikipedia.org/

        Test: fast/repaint/text-selection-rect-in-overflow-2.html

        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::computeAbsoluteRepaintRect): Added code to account
        for overflow scroll and columns.
        * rendering/RenderText.cpp:
        (WebCore::RenderText::selectionRect): Adjust for columns only in the
        non-clipped case, since RenderObject::absolutePosition() does not.

2007-06-26  Mitz Pettel  <mitz@webkit.org>

        Reviewed by Sam.

        - http://bugs.webkit.org/show_bug.cgi?id=14415
          Remove the unused method RenderObject::setTable()

        * rendering/RenderObject.h:

2007-06-26  MorganL  <morganl.webkit@yahoo.com>

        Reviewed by Maciej.

        Implement http://bugs.webkit.org/show_bug.cgi?id=14225
        Bug 14225: Make it possible to define platform-specific ResourceRequest without #ifdefs

        This change moves the bulk of ResourceRequest into a base class named
        ResourceRequestBase with all platform-specific bits pushed into
        ResourceRequest.  This allows ports to easily add new members to a
        ResourceRequest without having to #ifdef the code that is shared
        between ports.

        * WebCore.exp:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * platform/network/ResourceRequest.cpp: Removed.
        * platform/network/ResourceRequest.h: Removed.
        * platform/network/ResourceRequestBase.cpp: Added.
        (WebCore::ResourceRequestBase::asResourceRequest):
        (WebCore::ResourceRequestBase::isEmpty):
        (WebCore::ResourceRequestBase::isNull):
        (WebCore::ResourceRequestBase::url):
        (WebCore::ResourceRequestBase::setURL):
        (WebCore::ResourceRequestBase::cachePolicy):
        (WebCore::ResourceRequestBase::setCachePolicy):
        (WebCore::ResourceRequestBase::timeoutInterval):
        (WebCore::ResourceRequestBase::setTimeoutInterval):
        (WebCore::ResourceRequestBase::mainDocumentURL):
        (WebCore::ResourceRequestBase::setMainDocumentURL):
        (WebCore::ResourceRequestBase::httpMethod):
        (WebCore::ResourceRequestBase::setHTTPMethod):
        (WebCore::ResourceRequestBase::httpHeaderFields):
        (WebCore::ResourceRequestBase::httpHeaderField):
        (WebCore::ResourceRequestBase::setHTTPHeaderField):
        (WebCore::ResourceRequestBase::httpBody):
        (WebCore::ResourceRequestBase::setHTTPBody):
        (WebCore::ResourceRequestBase::allowHTTPCookies):
        (WebCore::ResourceRequestBase::setAllowHTTPCookies):
        (WebCore::ResourceRequestBase::addHTTPHeaderField):
        (WebCore::ResourceRequestBase::addHTTPHeaderFields):
        (WebCore::operator==):
        (WebCore::ResourceRequestBase::isConditional):
        (WebCore::ResourceRequestBase::updatePlatformRequest):
        (WebCore::ResourceRequestBase::updateResourceRequest):
        * platform/network/ResourceRequestBase.h: Added.
        (WebCore::):
        (WebCore::ResourceRequestBase::httpContentType):
        (WebCore::ResourceRequestBase::setHTTPContentType):
        (WebCore::ResourceRequestBase::httpReferrer):
        (WebCore::ResourceRequestBase::setHTTPReferrer):
        (WebCore::ResourceRequestBase::clearHTTPReferrer):
        (WebCore::ResourceRequestBase::httpUserAgent):
        (WebCore::ResourceRequestBase::setHTTPUserAgent):
        (WebCore::ResourceRequestBase::httpAccept):
        (WebCore::ResourceRequestBase::setHTTPAccept):
        (WebCore::ResourceRequestBase::ResourceRequestBase):
        (WebCore::operator!=):
        * platform/network/cf/ResourceRequest.h: Added.
        (WebCore::ResourceRequest::ResourceRequest):
        * platform/network/curl/ResourceRequest.h: Added.
        (WebCore::ResourceRequest::ResourceRequest):
        (WebCore::ResourceRequest::doUpdatePlatformRequest):
        (WebCore::ResourceRequest::doUpdateResourceRequest):
        * platform/network/mac/ResourceRequest.h: Added.
        (WebCore::ResourceRequest::ResourceRequest):
        * platform/network/qt/ResourceRequest.h: Added.
        (WebCore::ResourceRequest::ResourceRequest):
        (WebCore::ResourceRequest::doUpdatePlatformRequest):
        (WebCore::ResourceRequest::doUpdateResourceRequest):

2007-06-26  Adam Roben  <aroben@apple.com>

        Add ChangeLog entries from the Windows merge.

        Reviewed by Maciej.

        * ChangeLog:

2007-06-26  Sam Weinig  <sam@webkit.org>

        Reviewed by Maciej.

        Make sure not to enumerate the toString() function.
        <rdar://problem/5297118>

        * bindings/js/kjs_window.cpp:
        * bindings/scripts/CodeGeneratorJS.pm: Add support for [DontEnum].
        * html/HTMLAnchorElement.idl:

2007-06-26  Alp Toker  <alp.toker@collabora.co.uk>

        Reviewed by Mitz, landed by Anders.

        http://bugs.webkit.org/show_bug.cgi?id=14421
        Implement GraphicsContext::clearRect()

        * platform/graphics/cairo/GraphicsContextCairo.cpp:
        (WebCore::GraphicsContext::clearRect):

2007-06-26  Alp Toker  <alp.toker@collabora.co.uk>

        Reviewed and landed by Anders.

        http://bugs.webkit.org/show_bug.cgi?id=14416
        Content does not render fully in some cases

        Fix mismatched calls to cairo_save/restore due to an early method return.

        * platform/graphics/cairo/GraphicsContextCairo.cpp:
        (WebCore::GraphicsContext::drawLine):

2007-06-26  Tristan O'Tierney  <tristan@apple.com>

        Reviewed by John Sullivan.

        Added two accessor functions for <rdar://problem/4119138>

        * bindings/objc/DOMHTML.mm:
        (-[DOMHTMLInputElement _isEdited]):
        (-[DOMHTMLTextAreaElement _isEdited]):
        Added an accessor to the isEdited value of a DOM node's render object

        * bindings/objc/DOMPrivate.h:
        Added header definitions for _isEdited

2007-06-26  Sam Weinig  <sam@webkit.org>

        Fix Win32 build.

        * WebCore.vcproj/WebCore.vcproj:

2007-06-26  Sam Weinig  <sam@webkit.org>

        Fix Qt and Gdk builds.

        * WebCore.pro:

2007-06-26  Sam Weinig  <sam@webkit.org>

        Reviewed by Geoff.

        Patch for http://bugs.webkit.org/show_bug.cgi?id=14111
        Autogenerate Event JS binding

        - Moves the dataTransfer method into MouseEvent where it should be.

        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSEventCustom.cpp: Added.
        (WebCore::JSEvent::clipboardData):
        (WebCore::toJS):
        * bindings/js/JSEventTargetNode.cpp:
        * bindings/js/JSXMLHttpRequest.cpp:
        * bindings/js/kjs_events.cpp:
        * bindings/js/kjs_events.h:
        * bindings/objc/DOMUtility.mm:
        (KJS::createDOMWrapper):
        * bindings/scripts/CodeGeneratorJS.pm:
        * dom/Event.h:
        (WebCore::Event::returnValue):
        (WebCore::Event::setReturnValue):
        (WebCore::Event::clipboardData):
        * dom/Event.idl:
        * dom/MouseEvent.h:
        (WebCore::MouseEvent::dataTransfer):
        * dom/MouseEvent.idl:

2007-06-26  Timothy Hatcher  <timothy@apple.com>

        Reviewed by Mark Rowe.

        Follow up fix for: Bug 14385: Web Inspector's computed style doesn't show implicitly set properties
        http://bugs.webkit.org/show_bug.cgi?id=14385

        Correctly remember the "Show implicit properties" setting as you switch nodes.

        * page/inspector/ResourcePanel.js:

2007-06-26  Justin Garcia  <justin.garcia@apple.com>

        Reviewed by John.

        <rdar://problem/5290534> Crash at RenderTextControl::calcHeight() after deleting text in a search field
        
        Editing removed a node that was part of a search field's internal
        structure that should not be removed.

        * editing/DeleteSelectionCommand.cpp:
        (WebCore::DeleteSelectionCommand::handleGeneralDelete): If the
        selection to delete ends at [container, x], where x is the number
        of children in container, don't remove container.  Special case
        code elsewhere in this function will remove it if necessary.

2007-06-25  Sam Weinig  <sam@webkit.org>

        Reviewed by Maciej.

        Patch for http://bugs.webkit.org/show_bug.cgi?id=11315
        Mutating document.constructor.prototype mutates Object.prototype

        Test: fast/js/constructor.html

        * bindings/scripts/CodeGeneratorJS.pm: add constructor attribute to
        classes with constructors.  It is an non-enumeratable, non-deletable,
        readonly attribute.

2007-06-26  George Staikos  <staikos@kde.org>

        Repair the OS X build.

        * WebCore.exp:

2007-06-26  Adam Treat  <adam@staikos.net>

        Reviewed by Adam Roben.

        Make the SQLite icon database optional.

        * loader/icon/IconDatabase.cpp:
        (WebCore::IconDatabase::isOpen):
        (WebCore::IconDatabase::isPrivateBrowsingEnabled):
        (WebCore::IconDatabase::enabled):
        * loader/icon/IconDatabase.h:

2007-06-25  Sam Weinig  <sam@webkit.org>

        Reviewed by Adam Roben.

        Patch for http://bugs.webkit.org/show_bug.cgi?id=14369
        HTML syntax highlighting colors and DOM tree colors should be the same

        * css/view-source.css:
        * page/inspector/ResourcePanel.js:
        * page/inspector/inspector.css:
        * page/inspector/inspector.js:
        * page/inspector/utilities.js:

2007-06-25  Adam Roben  <aroben@apple.com>

        Fix Bug 14402: Main resource of http://www.apple.com/safari/ is called "www.apple.com" instead of "safari"
        http://bugs.webkit.org/show_bug.cgi?id=14402

        The solution was to make KURL::lastPathComponent ignore trailing
        slashes, which is what -[NSURL lastPathComponent] does, too.

        Reviewed by Oliver.

        * platform/KURL.cpp:
        (WebCore::KURL::lastPathComponent):

2007-06-25  Sam Weinig  <sam@webkit.org>

        Reviewed by Adam Roben.

        Patch for http://bugs.webkit.org/show_bug.cgi?id=14257
        Web Inspector lists favicon.ico as "other" instead of "image"

        * page/InspectorController.cpp:
        (WebCore::InspectorResource::type):

2007-06-25  Adele Peterson  <adele@apple.com>

        Reviewed by Hyatt.

        Fix for <rdar://problem/5286410> Scrollbar and resize corner for overflow area is not hidden with style "visibility: hidden;"
        http://bugs.webkit.org/show_bug.cgi?id=14297

        Test: fast/overflow/hidden-scrollbar-resize.html

        * rendering/RenderLayer.cpp: (WebCore::RenderLayer::paintLayer):
        Updated our shouldPaint check to consider visibility.

2007-06-25  Oliver Hunt  <oliver@apple.com>

        Reviewed by Darin.

        <rdar://problem/5293444> REGRESSION: Dragging plain text into a styled text region does not acquire the correct style info

        Fixing logic error in DragController

        * manual-tests/drop-text-acquires-style.html: Added.
        * page/DragController.cpp:
        (WebCore::documentFragmentFromDragData):

2007-06-25  Sam Weinig  <sam@webkit.org>

        Reviewed by Adam Roben.

        Annotate prototypes by adding "Prototype" subtitle.

        * page/inspector/ResourcePanel.js:

2007-06-25  George Staikos  <staikos@kde.org>

        Reviewed by Zack.

        Start to add proxy and SSL support to WebKitQt.  Proxying works.

        * platform/network/ResourceHandleInternal.h:
        (WebCore::ResourceHandleInternal::ResourceHandleInternal):
        * platform/network/qt/ResourceHandleQt.cpp:
        (WebCore::ResourceHandle::start):

2007-06-25  Alp Toker  <alp.toker@collabora.co.uk>

        Reviewed by Adam Roben.

        http://bugs.webkit.org/show_bug.cgi?id=14386
        Gdk build fix

        * WebCore.pro: Fix gtk/gdk typo.

2007-06-25  Timothy Hatcher  <timothy@apple.com>

        Reviewed by Anders.

        Bug 14385: Web Inspector's computed style doesn't show implicitly set properties
        http://bugs.webkit.org/show_bug.cgi?id=14385

        Add a toggle to show implict computed properties.

        * page/inspector/ResourcePanel.js:
        * page/inspector/inspector.css:
        * page/inspector/inspector.js:

2007-06-25  Alp Toker  <alp.toker@collabora.co.uk>

        Reviewed by Mark.

        http://bugs.webkit.org/show_bug.cgi?id=13975
        Use system-provided libjpeg and libpng

        * WebCore.pro: Remove bundled libjpeg and libpng sources.
        * platform/image-decoders/jpeg: Remove sources.
        * platform/image-decoders/png: Remove sources.

2007-06-25  Mitz Pettel  <mitz@webkit.org>

        Reviewed by Darin.

        - fix http://bugs.webkit.org/show_bug.cgi?id=14202
          Table caption renders too narrow sometimes

        Test: fast/table/caption-relayout.html

        * rendering/RenderTable.cpp:
        (WebCore::RenderTable::layout): Mark the caption for layout if the table
        width changed.

2007-06-25  Mitz Pettel  <mitz@webkit.org>

        Reviewed by Darin.

        - fix http://bugs.webkit.org/show_bug.cgi?id=14245
          Underline painted under <br>, not repainted properly

        Test: fast/inline/br-text-decoration.html

        * platform/graphics/cg/GraphicsContextCG.cpp:
        (WebCore::GraphicsContext::drawLineForText): Added an early return if the line width
        is zero. Also changed the line stroke to a rect fill, so that lines with length shorter
        than their thickness paint correctly.

2007-06-25  Mitz Pettel  <mitz@webkit.org>

        Reviewed by Maciej.

        - fix http://bugs.webkit.org/show_bug.cgi?id=14341
          rules="none" ignored in certain cases

        Covered by existing tests.

        * html/HTMLTableElement.cpp:
        (WebCore::HTMLTableElement::getSharedCellDecl):

2007-06-24  Sam Weinig  <sam@webkit.org>

        Reviewed by Mitz.

        Patch for http://bugs.webkit.org/show_bug.cgi?id=14379
        Anchor elements show up as their href in the properties pane, not HTMLAnchorElement

        * page/inspector/ResourcePanel.js: make sure not to call an overriden
        toString() by using Object.prototype.toString.call().

2007-06-24  Adam Roben  <aroben@apple.com>

        Fix http://bugs.webkit.org/show_bug.cgi?id=14374
        Bug 14374: Computed Style section should be expanded by default

        Reviewed by Sam.

        No regression test possible.

        * page/inspector/ResourcePanel.js: Expand all style sections.

2007-06-24  Adam Roben  <aroben@apple.com>

        Unify the style of enums in the Inspector JS

        All our enums are now represented by an object with a property for
        each enum value.

        Reviewed by Sam.

        No regression test possible.

        * page/inspector/ConsolePanel.js:
        * page/inspector/Resource.js:
        * page/inspector/ResourcePanel.js:
        * page/inspector/inspector.js:

2007-06-23  Sam Weinig  <sam@webkit.org>

        Reviewed by Mitz.

        Patch for http://bugs.webkit.org/show_bug.cgi?id=14321
        getComputedStyle(...).zIndex returns string "normal"

        Test: fast/css/getComputedStyle-zIndex-auto.html

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::CSSComputedStyleDeclaration::getPropertyCSSValue): Return 'auto' instead of 'normal'.

2007-06-24  Matt Lilek  <pewtermoose@gmail.com>

        Reviewed by Tim Hatcher.

        Bug 14265: Cannot resize columns in webinspector
        http://bugs.webkit.org/show_bug.cgi?id=14265

        * page/inspector/inspector.css:
        * page/inspector/inspector.html:
        * page/inspector/inspector.js:

2007-06-23  Adam Roben  <aroben@apple.com>

        Silence a build warning about not finding `num-cpus`

        Reviewed by Mark Rowe.

        * WebCore.vcproj/build-generated-files.sh: Look for num-cpus in its new
        location.

2007-06-22  Anders Carlsson  <andersca@apple.com>

        Reviewed by Darin.

        * plugins/win/PluginStreamWin.cpp:
        (WebCore::PluginStreamWin::didFinishLoading):
        No need to fetch the size from resourceData.

2007-06-22  Anders Carlsson  <andersca@apple.com>

        Reviewed by Darin.

        <rdar://problem/5288617>
        Crash playing a very large QuickTime movie inside Safari.

        Get rid of m_completeDeliveryData and use the loader's resource data instead. This reduces the memory usage for 
        plug-ins which loads large files and use a transfer mode of NP_ASFILE or NP_ASFILEONLY.
        
        * plugins/win/PluginStreamWin.cpp:
        (WebCore::PluginStreamWin::PluginStreamWin):
        (WebCore::PluginStreamWin::~PluginStreamWin):
        (WebCore::PluginStreamWin::didReceiveData):
        (WebCore::PluginStreamWin::didFinishLoading):
        * plugins/win/PluginStreamWin.h:

2007-06-22  Beth Dakin  <bdakin@apple.com>

        Reviewed by Oliver and Darin.

        Fix for <rdar://problem/5266999> Loading page from MangleMe fuzz 
        tester crashes in RenderTableRow::addChild (giant ROWSPAN)

        We already have code that tries to prevent allocating too-large 
        rowspans. The rowspan in this test, however, was small enough that 
        we thought it was okay in that code, even though clearly it was 
        still too large. I did a bunch of testing in Firefox, and it seems 
        that they set a hard limit on the maximum rowspan right in the DOM 
        -- 8k. So that is what this patch implements. 

        * html/HTMLTableCellElement.cpp:
        (WebCore::HTMLTableCellElement::parseMappedAttribute):

2007-06-22  Justin Garcia  <justin.garcia@apple.com>

        Reviewed by Darin.
        
        <rdar://problem/5272440> Adding To Do via Note received in e-mail adds newlines on delete
        
        Deletion inserts a placeholder after it removes full paragraphs if
        one doesn't already exist.  The code that looked for a pre-existing
        placeholder didn't work because of a bug in enclosingNodeOfType.

        * editing/htmlediting.cpp:
        (WebCore::enclosingNodeOfType): We start looking at node->parentNode(),
        but don't go above an editing root.

2007-06-22  Anders Carlsson  <andersca@apple.com>

        Reviewed by Maciej and Geoff.

        <rdar://problem/5244734>
        WebKit shouldn't send delegate resource load methods for the user stylesheet (doing so causes assertions in Safari)
        
        Add a sendResourceLoadCallbacks argument to the ResourceLoader and only send resource load callbacks if it's true. Make it so that
        loading the user style sheet creates a resource loader with sendResourceLoadCallbacks set to false (done by adding a sendResourceLoadCallbacks 
        argument to a bunch of classes).
        
        * loader/Cache.cpp:
        (WebCore::createResource):
        (WebCore::Cache::requestResource):
        * loader/Cache.h:
        * loader/CachedCSSStyleSheet.cpp:
        (WebCore::CachedCSSStyleSheet::CachedCSSStyleSheet):
        * loader/CachedCSSStyleSheet.h:
        * loader/CachedResource.cpp:
        (WebCore::CachedResource::CachedResource):
        * loader/CachedResource.h:
        (WebCore::CachedResource::sendResourceLoadCallbacks):
        * loader/DocLoader.cpp:
        (WebCore::DocLoader::requestCSSStyleSheet):
        (WebCore::DocLoader::requestResource):
        (WebCore::DocLoader::checkCacheObjectStatus):
        * loader/DocLoader.h:
        * loader/MainResourceLoader.cpp:
        (WebCore::MainResourceLoader::MainResourceLoader):
        * loader/Request.cpp:
        (WebCore::Request::Request):
        * loader/Request.h:
        (WebCore::Request::sendResourceLoadCallbacks):
        * loader/ResourceLoader.cpp:
        (WebCore::ResourceLoader::ResourceLoader):
        (WebCore::ResourceLoader::willSendRequest):
        (WebCore::ResourceLoader::didReceiveResponse):
        (WebCore::ResourceLoader::didReceiveData):
        (WebCore::ResourceLoader::didFinishLoadingOnePart):
        (WebCore::ResourceLoader::didFail):
        (WebCore::ResourceLoader::didCancel):
        * loader/ResourceLoader.h:
        (WebCore::ResourceLoader::sendResourceLoadCallbacks):
        * loader/SubresourceLoader.cpp:
        (WebCore::SubresourceLoader::SubresourceLoader):
        (WebCore::SubresourceLoader::create):
        * loader/SubresourceLoader.h:
        * loader/loader.cpp:
        (WebCore::Loader::load):
        (WebCore::Loader::servePendingRequests):
        * loader/loader.h:
        * loader/mac/NetscapePlugInStreamLoaderMac.mm:
        (WebCore::NetscapePlugInStreamLoader::NetscapePlugInStreamLoader):

2007-06-21  Richard Connamacher  <rich@indieimage.com>

        Reviewed by Tim Hatcher.

        Bug 14305: Web Inspector marks local files with server-side compression tip
        http://bugs.webkit.org/show_bug.cgi?id=14305

        * page/inspector/Resource.js:
        (WebInspector.Resource._shouldCompress): Prevent server-side compression tip
        from being given to local files

2007-06-21  Mark Rowe  <mrowe@apple.com>

        Reviewed by Darin.

        Fix for <rdar://problem/5266928> REGRESSION: crash/assert failure beneath RenderFrameSet::layOutAxis when loading

        * platform/StringImpl.cpp:
        (WebCore::StringImpl::toLengthArray): Simplify whitespace before checking for an empty string.  This avoids returning
        a length of zero when the string is collapsed to empty by whitespace simplification.

2007-06-21  Dave Hyatt  <hyatt@apple.com>

        Fix for <rdar://problem/5286978>, large font sizes crash Windows.
        
        Limit the maximum font size to 1,000,000 to avoid crashes and issues with platforms that
        start failing to do anything useful if the font size is too big.
        
        Reviewed by olliej

        * css/cssstyleselector.cpp:
        (WebCore::CSSStyleSelector::getComputedSizeFromSpecifiedSize):
        
2007-06-21  Andrew Wellington  <proton@wiretapped.net>

        Reviewed by Timothy.

        Stop shift+scroll wheel performing a horizontal scroll in Web Inspector

        * page/inspector/inspector.css: Set body margin to 0

2007-06-21  Adam Treat  <adam@staikos.net>

        Reviewed by George Staikos.

        Implement the default resources on Qt.

        * platform/graphics/BitmapImage.h:
        * platform/graphics/Image.h:
        * platform/graphics/qt/ImageQt.cpp:
        (WebCore::Image::loadPlatformResource):
        (WebCore::BitmapImage::BitmapImage):
        (WebCore::BitmapImage::initPlatformData):
        (WebCore::BitmapImage::invalidatePlatformData):
        (WebCore::BitmapImage::getPixmap):
        * platform/qt/TemporaryLinkStubs.cpp:

2007-06-21  Oliver Hunt  <oliver@apple.com>

        Reviewed by Darin.

        Use RetainPtr for holding currentEvent.  This removes explicit HardRetain/Release calls
        and makes reference handling simpler in advance of IME refactoring.

        * WebCore.xcodeproj/project.pbxproj:
        * page/mac/EventHandlerMac.mm:
        (WebCore::currentEvent):
        (WebCore::EventHandler::currentNSEvent):
        (WebCore::EventHandler::wheelEvent):
        (WebCore::EventHandler::keyEvent):
        (WebCore::lastEventIsMouseUp):
        (WebCore::EventHandler::passMouseDownEventToWidget):
        (WebCore::EventHandler::eventLoopHandleMouseDragged):
        (WebCore::EventHandler::eventLoopHandleMouseUp):
        (WebCore::EventHandler::passSubframeEventToSubframe):
        (WebCore::EventHandler::passWheelEventToWidget):
        (WebCore::EventHandler::mouseDown):
        (WebCore::EventHandler::mouseDragged):
        (WebCore::EventHandler::mouseUp):
        (WebCore::EventHandler::mouseMoved):

2007-06-21  George Staikos  <staikos@kde.org>

        Reviewed by George & Marius.

        Patch by me, revision by Marius, minor rev by me.  Adds rendered
        and stylable scrollbars.

        * page/qt/EventHandlerQt.cpp:
        (WebCore::EventHandler::passMousePressEventToScrollbar):
        * platform/Widget.h:
        * platform/qt/PlatformScrollBar.h:
        (WebCore::PlatformScrollbar::isWidget):
        * platform/qt/PlatformScrollBarQt.cpp:
        (WebCore::PlatformScrollbar::PlatformScrollbar):
        (WebCore::PlatformScrollbar::~PlatformScrollbar):
        (WebCore::PlatformScrollbar::updateThumbPosition):
        (WebCore::PlatformScrollbar::updateThumbProportion):
        (WebCore::PlatformScrollbar::width):
        (WebCore::PlatformScrollbar::height):
        (WebCore::PlatformScrollbar::setRect):
        (WebCore::PlatformScrollbar::isEnabled):
        (WebCore::PlatformScrollbar::setEnabled):
        (WebCore::PlatformScrollbar::paint):
        (WebCore::PlatformScrollbar::thumbPosition):
        (WebCore::PlatformScrollbar::thumbLength):
        (WebCore::PlatformScrollbar::trackLength):
        (WebCore::PlatformScrollbar::handleMouseMoveEvent):
        (WebCore::PlatformScrollbar::handleMouseOutEvent):
        (WebCore::PlatformScrollbar::handleMousePressEvent):
        (WebCore::PlatformScrollbar::handleMouseReleaseEvent):
        (WebCore::PlatformScrollbar::startTimerIfNeeded):
        (WebCore::PlatformScrollbar::stopTimerIfNeeded):
        (WebCore::PlatformScrollbar::autoscrollPressedPart):
        (WebCore::PlatformScrollbar::autoscrollTimerFired):
        (WebCore::PlatformScrollbar::pressedPartScrollDirection):
        (WebCore::PlatformScrollbar::pressedPartScrollGranularity):
        (WebCore::PlatformScrollbar::thumbUnderMouse):
        (WebCore::PlatformScrollbar::horizontalScrollbarHeight):
        (WebCore::PlatformScrollbar::verticalScrollbarWidth):
        (WebCore::PlatformScrollbar::windowClipRect):
        * platform/qt/ScrollViewQt.cpp:
        (WebCore::ScrollView::addChild):
        (WebCore::ScrollView::removeChild):
        * platform/qt/WidgetQt.cpp:
        (WebCore::WidgetPrivate::WidgetPrivate):
        (WebCore::Widget::setQWidget):
        (WebCore::Widget::invalidate):
        (WebCore::Widget::invalidateRect):
        (WebCore::Widget::setParent):
        (WebCore::Widget::parent):

2007-06-21  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Dave Hyatt.
        
        Fixed <rdar://problem/4977124> | http://bugs.webkit.org/show_bug.cgi?id=12646
        REGRESSION: RapidWeaver's "Hello" HTML page doesn't display any DHTML 
        effects when clicking on its links (12646)
        
        I'm rolling our r7703 for these reasons:

        1. It broke RapidWeaver.
        
        2. WebKit is now orders of magnitude faster when handling deep nesting
        (5 seconds vs 3 minutes on my MBP in this particular case).

        3. Firefox, IE, and HTML5 all allow nested heading tags.
        
        4. Hyatt said so.

        * html/HTMLParser.cpp:
        (WebCore::HTMLParser::parseToken):

2007-06-21  Sam Weinig  <sam@webkit.org>

        Reviewed by Tim Hatcher.

        http://bugs.webkit.org/show_bug.cgi?id=14260
        ASSERTION FAILED: m_mainResource->loader == loader going back in history on any page

        Remove assert for now as it is causing the back button to not
        work in debug builds.

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

2007-06-21  Lars Knoll <lars@trolltech.com>

        Remove some debug output.

        * platform/qt/FontQt.cpp:
        (WebCore::generateComponents):
        (WebCore::Font::width):

2007-06-21  George Staikos  <staikos@kde.org>

        Repair Qt/Mac OS X build.

        * WebCore.pro:

2007-06-21  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Anders.

        http://bugs.webkit.org/show_bug.cgi?id=13905
        REGRESSION: A Chinese dictionary widget has a problem with XMLHttpRequest response encoding

        Tiger WebKit accidentally looked at HTML Http-Equiv META to determine the response encoding
        (regardless of the actual response MIME type). This was corrected a while ago to match other 
        browsers and the draft XHR spec.

        Now restoring this functionality for "text/html", with spec editor's blessing.

        * xml/xmlhttprequest.cpp:
        (WebCore::XMLHttpRequest::responseMIMEType):
        (WebCore::XMLHttpRequest::responseIsXML):
        (WebCore::XMLHttpRequest::didReceiveData):
        * xml/xmlhttprequest.h:

2007-06-21  Andrew Wellington  <proton@wiretapped.net>

        Mac build fix.

        * platform/Font.h:

2007-06-21  Lars Knoll  <lars@trolltech.com>

        Reviewed by Simon.

        another small fix for letter spacing

        * platform/qt/FontQt.cpp:
        (WebCore::generateComponents):

2007-06-21  Lars Knoll  <lars@trolltech.com>

        Reviewed by Simon.

        fix word-spacing

        * platform/qt/FontQt.cpp:
        (WebCore::generateComponents):
        (WebCore::Font::width):

2007-06-21  Lars Knoll  <lars@trolltech.com>

        Reviewed by Simon.

        fix letterspacing and small caps.

        * platform/Font.h:
        * platform/graphics/qt/GraphicsContextQt.cpp:
        (WebCore::GraphicsContext::setPlatformFont):
        * platform/qt/FileChooserQt.cpp:
        * platform/qt/FontQt.cpp:
        (WebCore::TextRunComponent::TextRunComponent):
        (WebCore::Font::Font):
        (WebCore::Font::operator=):
        (WebCore::Font::update):
        (WebCore::generateComponents):
        (WebCore::Font::selectionRectForText):
        * platform/qt/RenderThemeQt.cpp:

2007-06-21  Lars Knoll  <lars@trolltech.com>

        Reviewed by Simon.

        store the metrics and space width in the Font object

        * platform/Font.h:
        * platform/qt/FontQt.cpp:
        (WebCore::Font::Font):
        (WebCore::Font::drawText):
        (WebCore::Font::width):
        (WebCore::Font::isFixedPitch):
        (WebCore::Font::ascent):
        (WebCore::Font::descent):
        (WebCore::Font::lineSpacing):

2007-06-21  Lars Knoll  <lars@trolltech.com>

        Reviewed by Simon.

        simplify some codepaths

        * platform/qt/FontQt.cpp:
        (WebCore::Font::drawText):
        (WebCore::Font::width):

2007-06-21  Lars Knoll  <lars@trolltech.com>

        Reviewed by Simon.

        fix copyright header

        * platform/qt/FontQt.cpp:

2007-06-21  Lars Knoll  <lars@trolltech.com>

        Reviewed by Simon.

        correctly load fonts when a list of font families is given

        * platform/qt/FontQt.cpp:
        (WebCore::Font::Font):

2007-06-21  Lars Knoll  <lars@trolltech.com>

        Reviewed by Simon.

        fix some more of the font support

        * platform/qt/FontQt.cpp:
        (WebCore::Font::drawText):
        (WebCore::Font::width):

2007-06-21  Lars Knoll  <lars@trolltech.com>

        Reviewed by Simon.

        Compile fixes

        * platform/Font.h:
        (WebCore::Font::isRoundingHackCharacter):
        * platform/qt/FontQt.cpp:
        (WebCore::Font::drawText):

2007-06-21  Lars Knoll  <lars@trolltech.com>

        Reviewed by Simon.

        Some more work on the implementation of FontQt.

        * platform/qt/FontQt.cpp:
        (WebCore::Font::Font):
        (WebCore::Font::~Font):
        (WebCore::Font::operator=):

2007-06-21  Lars Knoll  <lars@trolltech.com>

        Reviewed by Simon.

        Started work on the new font infrastructure for the Qt port.

        * WebCore.pro:
        * editing/Editor.cpp:
        (WebCore::Editor::fontForSelection):
        * platform/Font.h:
        (WebCore::Font::treatAsSpace):
        (WebCore::Font::treatAsZeroWidthSpace):
        (WebCore::Font::isRoundingHackCharacter):
        * platform/qt/FontQt.cpp:
        (WebCore::Font::operator QFont):
        * platform/qt/TemporaryLinkStubs.cpp:

2007-06-21  Adam Roben  <aroben@apple.com>

        More Gdk build fixes.

        * page/gdk/ContextMenuClientGdk.cpp:
        (WebCore::ContextMenuClientGdk::shouldIncludeInspectElementItem):
        * page/gdk/ContextMenuClientGdk.h:
        * platform/gdk/TemporaryLinkStubs.cpp:

2007-06-21  Adam Roben  <aroben@apple.com>

        Speculative Gdk build fix.

        * page/InspectorController.h: Only include the JS headers we really
        need to avoid pulling in ones like JSStringRefCF.h.

2007-06-20  Adam Roben  <aroben@apple.com>

        Speculative Gdk build fix.

        * WebCore.pro: Don't try to build WebKitQt/Plugins on Gdk.

2007-06-20  Adam Roben  <aroben@apple.com>

        Windows build fix.

        * WebCore.vcproj/WebCore.vcproj: Include ForwardingHeaders after
        everything but $WebKitLibrariesDir so that we will pick up
        JavaScriptCore headers directly.

2007-06-15  George Staikos  <staikos@kde.org>

        Add missing symbol.

        * platform/qt/TemporaryLinkStubs.cpp:
        (WebCore::contextMenuItemTagInspectElement):

2007-06-20  Steve Falkenburg  <sfalken@apple.com>

        Reviewed by Maciej, Anders.
        
        <rdar://problem/5283789> Crash after dismissing JavaScript alert at end of test on http://lcamtuf.coredump.cx/ierace/

        Keep a reference to the Page (via the main frame) for the
        load deferred pages.
        
        Reference is held via the frame since Page isn't refcounted.

        * page/Chrome.cpp:
        (WebCore::PageGroupLoadDeferrer::PageGroupLoadDeferrer):
        (WebCore::PageGroupLoadDeferrer::~PageGroupLoadDeferrer):

2007-06-15  Adam Treat <adam@staikos.net>

        Reviewed by George Staikos.

        Add ICO support to the Qt build.

        * WebCore.pro:
        * platform/graphics/qt/ImageDecoderQt.cpp:
        (Q_IMPORT_PLUGIN):

2007-06-15  George Staikos  <staikos@kde.org>

        Fixing Qt build.

        * ForwardingHeaders/JavaScriptCore/APICast.h: Added.
        * WebCore.pro:
        * page/InspectorController.h:

2007-06-20  Adam Roben  <aroben@apple.com>

        More speculative Qt/Gdk build fixes.

        * WebCore.pro: Add new files.

2007-06-20  Adam Roben  <aroben@apple.com>

        Speculative Qt/Gdk build fix.

        Added forwarding headers for JavaScriptCore. We may eventually move
        InspectorController off of the JSC API, but for now this is the
        quickest way to a working build.

        * ForwardingHeaders/JavaScriptCore/JSBase.h: Added.
        * ForwardingHeaders/JavaScriptCore/JSContextRef.h: Added.
        * ForwardingHeaders/JavaScriptCore/JSObjectRef.h: Added.
        * ForwardingHeaders/JavaScriptCore/JSStringRef.h: Added.
        * ForwardingHeaders/JavaScriptCore/JSStringRefCF.h: Added.
        * ForwardingHeaders/JavaScriptCore/JSValueRef.h: Added.
        * ForwardingHeaders/JavaScriptCore/JavaScriptCore.h: Added.

2007-06-20  Sam Weinig  <sam@webkit.org>

        Rubber stamped by Adam Roben.

        Add licenses.

        * page/inspector/ConsolePanel.js:
        * page/inspector/NetworkPanel.js:
        * page/inspector/Resource.js:
        * page/inspector/ResourceCategory.js:
        * page/inspector/ResourcePanel.js:

2007-06-20  Mark Rowe  <mrowe@apple.com>

        Reviewed by Adam.

        * WebCore.exp: Export InspectorController::inspect so WebKit can see it.

2007-06-20  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Adele Peterson, Oliver Hunt, Anders Carlsson.

        Fixed <rdar://problem/5222911> Leopard9A446 : VitalSource Bookshelf 4.5: 
        Crashes when you click on sign in (stringByEvaluatingJavaScriptFromString 
        returning nil instead of "")

        I'm basically rolling out the change for <rdar://problem/4782422> because
        my testing shows that it was backwards.
        
        * html/HTMLElement.cpp:
        (dumpInnerHTML): New debug-only function to work around gdb being 
        perpetually suck-tastic.

        * page/mac/WebCoreFrameBridge.mm:
        (-[WebCoreFrameBridge stringByEvaluatingJavaScriptFromString:forceUserGesture:]):
        
        Return "", not nil. This function never used to return nil, so let's not
        start now. I've filed <rdar://problem/5283271> to cover the documentation bug,

2007-06-20  Adam Roben  <aroben@apple.com>

        Addressed some of Geoff's comments.

        * page/ContextMenuController.cpp:
        (WebCore::ContextMenuController::handleContextMenuEvent): Added a
        FIXME.
        * platform/ContextMenu.cpp:
        (WebCore::ContextMenu::addInspectElementItem): Null-check
        frame->page().

2007-06-20  Adam Roben  <aroben@apple.com>

        Fix crash in fast/dom/dir-no-body.html

        Reviewed by Mark.

        * html/HTMLDocument.cpp:
        (WebCore::HTMLDocument::createTokenizer): Don't assume we have a
        Frame, since we won't if someone creates an HTMLDocument from JS.

2007-06-20  Adam Roben  <aroben@apple.com>

        Land the new Inspector.

        Co-written with Tim Hatcher.

        Reviewed by Anders, Adele, Hyatt, and Sam.

        No regression tests possible.

        Add a new InspectorController that is in charge of the Inspector. It
        has an InspectorClient that controls the Inspector's window and node
        highlight.

        * page/InspectorClient.h: Added.
        (WebCore::InspectorClient::~InspectorClient):
        * page/InspectorController.cpp: Added.
        (WebCore::ConsoleMessage::ConsoleMessage):
        (WebCore::InspectorResource::): Represents a single resource that the
        Inspector knows about.
        (WebCore::InspectorResource::InspectorResource):
        (WebCore::InspectorResource::~InspectorResource):
        (WebCore::InspectorResource::type):
        (WebCore::InspectorResource::setScriptObject):
        (WebCore::addSourceToFrame): Callback available from JS.
        (WebCore::getResourceDocumentNode): Ditto.
        (WebCore::highlightDOMNode): Ditto.
        (WebCore::hideDOMNodeHighlight): Ditto.
        (WebCore::loaded): Ditto.
        (WebCore::unloading): Ditto.
        (WebCore::attach): Ditto.
        (WebCore::detach): Ditto.
        (WebCore::log): Ditto.
        (WebCore::search): Ditto.
        (WebCore::inspectedWindow): Ditto.
        (WebCore::InspectorController::InspectorController):
        (WebCore::InspectorController::~InspectorController):
        (WebCore::InspectorController::inspect): Called by
        ContextMenuController to inspect a node.
        (WebCore::InspectorController::focusNode):
        (WebCore::InspectorController::highlight):
        (WebCore::InspectorController::hideHighlight):
        (WebCore::InspectorController::windowVisible):
        (WebCore::InspectorController::setWindowVisible):
        (WebCore::InspectorController::addMessageToConsole):
        (WebCore::InspectorController::attachWindow):
        (WebCore::InspectorController::detachWindow):
        (WebCore::InspectorController::windowScriptObjectAvailable):
        (WebCore::InspectorController::scriptObjectReady):
        (WebCore::InspectorController::windowUnloading):
        (WebCore::addHeaders): Static helper function.
        (WebCore::objectForRequest): Ditto.
        (WebCore::objectForResponse): Ditto.
        (WebCore::InspectorController::addScriptResource):
        (WebCore::InspectorController::addAndUpdateScriptResource):
        (WebCore::InspectorController::removeScriptResource):
        (WebCore::InspectorController::updateScriptResource):
        (WebCore::InspectorController::populateScriptResources):
        (WebCore::InspectorController::addScriptConsoleMessage):
        (WebCore::callClearFunction): Static helper function.
        (WebCore::InspectorController::clearScriptResources):
        (WebCore::InspectorController::clearScriptConsoleMessages):
        (WebCore::InspectorController::clearNetworkTimeline):
        (WebCore::InspectorController::pruneResources):
        (WebCore::InspectorController::didCommitLoad): Callback from
        FrameLoader.
        (WebCore::InspectorController::frameDetachedFromParent): Ditto.
        (WebCore::InspectorController::addResource): Ditto.
        (WebCore::InspectorController::removeResource): Ditto.
        (WebCore::InspectorController::didLoadResourceFromMemoryCache): Ditto.
        (WebCore::InspectorController::identifierForInitialRequest): Ditto.
        (WebCore::InspectorController::willSendRequest): Ditto.
        (WebCore::InspectorController::didReceiveResponse): Ditto.
        (WebCore::InspectorController::didReceiveContentLength): Ditto.
        (WebCore::InspectorController::didFinishLoading): Ditto.
        (WebCore::InspectorController::didFailLoading): Ditto.
        * page/InspectorController.h: Added.
        (WebCore::InspectorController::inspectedPage):
        (WebCore::InspectorController::scriptContext):
        (WebCore::InspectorController::setScriptContext):
        (WebCore::InspectorController::resources):
        (WebCore::InspectorController::removeAllResources):

        Add the JavaScript that defines most of the behavior of the Inspector.
        
        * page/inspector/ConsolePanel.js: Added.
        * page/inspector/NetworkPanel.js: Added.
        * page/inspector/Resource.js: Added.
        * page/inspector/ResourceCategory.js: Added.
        * page/inspector/ResourcePanel.js: Added.
        * page/inspector/inspector.js: Added.
        * page/inspector/treeoutline.js: Renamed from WebKit/WebInspector/webInspector/treeoutline.js.
        * page/inspector/utilities.js: Added.

        Add the Inspector's CSS and HTML.

        * page/inspector/inspector.css: Added.
        * page/inspector/inspector.html: Added.

        Hang the InspectorController off of Page. We only create an
        InspectorController if an InspectorClient is given to the Page.

        * page/Page.cpp:
        (WebCore::Page::Page):
        * page/Page.h:
        (WebCore::Page::inspectorController):

        Use FrameLoader to notify the InspectorController of resource loads.

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::begin):
        (WebCore::FrameLoader::transitionToCommitted):
        (WebCore::FrameLoader::continueLoadAfterWillSubmitForm):
        (WebCore::FrameLoader::detachFromParent):
        (WebCore::FrameLoader::assignIdentifierToInitialRequest):
        (WebCore::FrameLoader::willSendRequest):
        (WebCore::FrameLoader::didReceiveResponse):
        (WebCore::FrameLoader::didReceiveData):
        (WebCore::FrameLoader::sendRemainingDelegateMessages):
        (WebCore::FrameLoader::requestFromDelegate):
        (WebCore::FrameLoader::didFinishLoad):
        (WebCore::FrameLoader::dispatchWindowObjectAvailable):
        (WebCore::FrameLoader::dispatchDidCommitLoad):
        (WebCore::FrameLoader::dispatchAssignIdentifierToInitialRequest):
        (WebCore::FrameLoader::dispatchWillSendRequest):
        (WebCore::FrameLoader::dispatchDidReceiveResponse):
        (WebCore::FrameLoader::dispatchDidReceiveContentLength):
        (WebCore::FrameLoader::dispatchDidFinishLoading):
        (WebCore::FrameLoader::dispatchDidLoadResourceFromMemoryCache):
        * loader/FrameLoader.h:

        Send console messages to the InspectorController.

        * page/Chrome.cpp:
        (WebCore::Chrome::addMessageToConsole): Send all console messages to
        the InspectorController.
        * page/Chrome.h: Add a new MessageLevel and MessageSource that are
        used in the Inspector JS.

        Report HTML errors when the Inspector window is open.
        We don't report errors when the window is closed because we don't want
        to slow down the HTMLTokenizer.

        * html/HTMLDocument.cpp:
        (WebCore::HTMLDocument::createTokenizer):
        * html/HTMLParser.cpp:
        (WebCore::HTMLParser::HTMLParser):
        * html/HTMLParser.h:
        * html/HTMLTokenizer.cpp:
        (WebCore::HTMLTokenizer::HTMLTokenizer):
        * html/HTMLTokenizer.h:

        Append the "Inspect Element" context menu item after passing the
        context menu to the ContextMenuClient. This work used to be done in
        WebKit.

        * page/ContextMenuClient.h:
        * page/ContextMenuController.cpp:
        (WebCore::ContextMenuController::handleContextMenuEvent): Add the
        "Inspect Element" item.
        (WebCore::ContextMenuController::contextMenuItemSelected): Handle the
        "Inspect Element" item.
        * platform/ContextMenu.cpp:
        (WebCore::ContextMenu::addInspectElementItem):
        (WebCore::ContextMenu::checkOrEnableIfNeeded): Updated for "Inspect
        Element" item.
        * platform/ContextMenu.h:
        * platform/ContextMenuItem.h:
        (WebCore::): Add ContextMenuItemTagInspectElement.
        * platform/graphics/svg/SVGImageEmptyClients.h:
        * page/mac/WebCoreViewFactory.h: Add the "Inspect Element" localized
        string.
        * platform/LocalizedStrings.h: Ditto.
        * platform/mac/LocalizedStringsMac.mm:
        (WebCore::contextMenuItemTagInspectElement): Ditto.

        Miscellaneous changes:

        * css/view-source.css: Add message bubble styles.
        * loader/DocumentLoader.h: Add a frame getter.
        * platform/win/ScrollViewWin.cpp:
        (WebCore::ScrollView::updateScrollbars): Respect
        Frame::prohibitsScrolling.

        Add new images needed for the Inspector.

        * page/inspector/Images/attachedShadow.png: Added.
        * page/inspector/Images/bottomShadow.png: Added.
        * page/inspector/Images/breadcrumbBackground.png: Added.
        * page/inspector/Images/checker.png: Added.
        * page/inspector/Images/console.png: Added.
        * page/inspector/Images/darkShadow.png: Added.
        * page/inspector/Images/disclosureDownPressed.png: Added.
        * page/inspector/Images/disclosureRightDown.png: Added.
        * page/inspector/Images/disclosureRightPressed.png: Added.
        * page/inspector/Images/document.png: Added.
        * page/inspector/Images/domViewButton.png: Added.
        * page/inspector/Images/domViewButtonSelected.png: Added.
        * page/inspector/Images/downTriangle.png: Added.
        * page/inspector/Images/errorIcon.png: Added.
        * page/inspector/Images/errorMediumIcon.png: Added.
        * page/inspector/Images/folder.png: Added.
        * page/inspector/Images/goArrow.png: Added.
        * page/inspector/Images/gradient.png: Added.
        * page/inspector/Images/gradientHighlight.png: Added.
        * page/inspector/Images/gradientHighlightBottom.png: Added.
        * page/inspector/Images/hideStatusWidget.png: Added.
        * page/inspector/Images/hideStatusWidgetPressed.png: Added.
        * page/inspector/Images/network.png: Added.
        * page/inspector/Images/paneBottomGrow.png: Added.
        * page/inspector/Images/paneBottomGrowActive.png: Added.
        * page/inspector/Images/paneGrowHandleLine.png: Added.
        * page/inspector/Images/paneHeader.png: Added.
        * page/inspector/Images/paneHeaderActive.png: Added.
        * page/inspector/Images/plainDocument.png: Added.
        * page/inspector/Images/popupArrows.png: Added.
        * page/inspector/Images/rightTriangle.png: Added.
        * page/inspector/Images/segment.png: Added.
        * page/inspector/Images/segmentEnd.png: Added.
        * page/inspector/Images/segmentHover.png: Added.
        * page/inspector/Images/segmentHoverEnd.png: Added.
        * page/inspector/Images/segmentSelected.png: Added.
        * page/inspector/Images/segmentSelectedEnd.png: Added.
        * page/inspector/Images/showStatusWidget.png: Added.
        * page/inspector/Images/showStatusWidgetPressed.png: Added.
        * page/inspector/Images/sidbarItemBackground.png: Added.
        * page/inspector/Images/sidebarActionWidget.png: Added.
        * page/inspector/Images/sidebarActionWidgetPressed.png: Added.
        * page/inspector/Images/sidebarAttachWidget.png: Added.
        * page/inspector/Images/sidebarAttachWidgetPressed.png: Added.
        * page/inspector/Images/sidebarDetachWidget.png: Added.
        * page/inspector/Images/sidebarDetachWidgetPressed.png: Added.
        * page/inspector/Images/sidebarResizeWidget.png: Added.
        * page/inspector/Images/sidebarSelection.png: Added.
        * page/inspector/Images/sidebarSelectionBlurred.png: Added.
        * page/inspector/Images/sidebarSelectionBlurredTall.png: Added.
        * page/inspector/Images/sidebarSelectionGray.png: Added.
        * page/inspector/Images/sidebarSelectionGrayTall.png: Added.
        * page/inspector/Images/sidebarSelectionTall.png: Added.
        * page/inspector/Images/sidebarStatusAreaBackground.png: Added.
        * page/inspector/Images/sourceViewButton.png: Added.
        * page/inspector/Images/sourceViewButtonSelected.png: Added.
        * page/inspector/Images/splitviewDimple.png: Added.
        * page/inspector/Images/splitviewDividerBackground.png: Added.
        * page/inspector/Images/tab.png: Added.
        * page/inspector/Images/tabSelected.png: Added.
        * page/inspector/Images/timelinePillBlue.png: Added.
        * page/inspector/Images/timelinePillGray.png: Added.
        * page/inspector/Images/timelinePillGreen.png: Added.
        * page/inspector/Images/timelinePillOrange.png: Added.
        * page/inspector/Images/timelinePillPurple.png: Added.
        * page/inspector/Images/timelinePillRed.png: Added.
        * page/inspector/Images/timelinePillYellow.png: Added.
        * page/inspector/Images/tipBalloon.png: Added.
        * page/inspector/Images/tipBalloonBottom.png: Added.
        * page/inspector/Images/tipIcon.png: Added.
        * page/inspector/Images/tipIconPressed.png: Added.
        * page/inspector/Images/toggleDown.png: Added.
        * page/inspector/Images/toggleUp.png: Added.
        * page/inspector/Images/toolbarBackground.png: Added.
        * page/inspector/Images/toolbarBackgroundInactive.png: Added.
        * page/inspector/Images/toolbarButton.png: Added.
        * page/inspector/Images/toolbarButtonInactive.png: Added.
        * page/inspector/Images/toolbarButtonPressed.png: Added.
        * page/inspector/Images/toolbarButtonPressedInactive.png: Added.
        * page/inspector/Images/toolbarSplitButtonDivider.png: Added.
        * page/inspector/Images/toolbarSplitButtonDividerInactive.png: Added.
        * page/inspector/Images/treeDownTriangleBlack.png: Added.
        * page/inspector/Images/treeDownTriangleWhite.png: Added.
        * page/inspector/Images/treeLeftTriangleBlack.png: Added.
        * page/inspector/Images/treeRightTriangleBlack.png: Added.
        * page/inspector/Images/treeRightTriangleWhite.png: Added.
        * page/inspector/Images/warningIcon.png: Added.
        * page/inspector/Images/warningMediumIcon.png: Added.
        * page/inspector/Images/warningsErrors.png: Added.

        Build-fu:

        * WebCore.exp: Added new symbols.
        * WebCore.xcodeproj/project.pbxproj: Added new source files and
        resources.
        * WebCore.vcproj/WebCore.vcproj: Ditto, and copy the resources to
        $WebKitOutputDir.

        Windows build fixes:

        * history/HistoryItem.h: ResourceRequest is a struct.
        * loader/FrameLoaderClient.h: Ditto.

2007-06-20  Mitz Pettel  <mitz@webkit.org>

        Reviewed by Beth.

        - fix http://bugs.webkit.org/show_bug.cgi?id=14056
          REGRESSION (r21113-21143): TR background not repainted via style class change

        Test: fast/repaint/table-row.html

        * rendering/RenderTableRow.cpp:
        (WebCore::RenderTableRow::layout): Added a repaint to make up for the case where the
        table row also needs layout, so it doesn't get a repaint in setStyle().

2007-06-20  Mitz Pettel  <mitz@webkit.org>

        Reviewed by Adele.

        - fix http://bugs.webkit.org/show_bug.cgi?id=14040
          Top and bottom border images flipped when using -webkit-border-image when border end up tiled

        Test: fast/borders/border-image-01.html

        Correctly account for the fact that "pattern space" is flipped.

        * platform/graphics/Image.cpp: (WebCore::Image::drawTiled):
        * platform/graphics/cg/ImageCG.cpp:
        (WebCore::Image::drawPatternCallback):
        (WebCore::Image::drawPattern):

2007-06-20  Anders Carlsson  <andersca@apple.com>

        Reviewed by Darin.

        <rdar://problem/5245555> REGRESSION: HTTP header injection in XMLHttpRequest.setRequestHeader
        
        Check for either '\r' or '\n' in the header value.
        
        * xml/xmlhttprequest.cpp:
        (WebCore::isValidHeaderValue):

2007-06-20  Patti Hoa  <patti@apple.com>

        Reviewed by Geoffrey Garen.

        <rdar://problem/4882527> VO should speak URL of image links that lack tags
        Add additional change from review
        
        * bridge/mac/WebCoreAXObject.mm:
        (-[WebCoreAXObject accessibilityAttributeValue:]):
        Check if the element has imgTag before asking for its url
        
2007-06-20  Patti Hoa  <patti@apple.com>

        Reviewed by Tristan O'Tierney.

        <rdar://problem/4882527> VO should speak URL of image links that lack tags
        
        * bridge/mac/WebCoreAXObject.mm:
        (-[WebCoreAXObject accessibilityAttributeNames]):
        (-[WebCoreAXObject accessibilityAttributeValue:]):
        Return the url of images.

2007-06-19  Anders Carlsson  <andersca@apple.com>

        Reviewed by Kevin Decker.

        <rdar://problem/5266289> REGRESSION (Safari 3 Beta 1): Incoming iChat messages are delayed
        
        Add a new m_deferMainResourceDataLoad that can be used to control whether a data load should be deferred using a timer or not.
        
        * loader/DocumentLoader.cpp:
        (WebCore::DocumentLoader::DocumentLoader):
        * loader/DocumentLoader.h:
        (WebCore::DocumentLoader::deferMainResourceDataLoad):
        * loader/MainResourceLoader.cpp:
        (WebCore::MainResourceLoader::handleDataLoadSoon):
        (WebCore::MainResourceLoader::loadNow):
        (WebCore::MainResourceLoader::setDefersLoading):

2007-06-19  Patti Hoa <patti@apple.com>

        Reviewed by Justin Garcia.
        
        <rdar://problem/5237325> Incorrect AXLeftLineTextMarkerRangeForTextMarker/AXPreviousLineStartTextMarkerForTextMarker for non-editable text
        
        * editing/visible_units.cpp:
        (WebCore::startPositionForLine):
        (WebCore::startOfLine):
        (WebCore::endPositionForLine):
        (WebCore::endOfLine):
        Break down the line routines to allow another try to ask for start/end of line if the returned position is not valid.
        An example would be when lineStart/lineEnd at different line than the input position.
        This can happen if the input position is before the space character at the end of a soft-wrapped non-editable line, 
        specifically a line without webkit-line-break:after-white-space style.

2007-06-19  Patti Hoa  <patti@apple.com>

        Reviewed by Justin Garcia.
        
        <rdar://problem/3992645> VO view bounds misplaced when reading text after a line wrap
        
        * bridge/mac/WebCoreAXObject.mm:
        (-[WebCoreAXObject doAXBoundsForTextMarkerRange:]):
        Improve the accuracy of the bounds for a given range
        
2007-06-19  Anders Carlsson  <andersca@apple.com>

        Reviewed by Darin.

        <rdar://problem/5130630>
        XPath fails LayoutTests on Windows
        
        * xml/XPathPredicate.cpp:
        Include MathExtras.h here so we get a version of fmod that works around a bug in the Microsoft CRT.
        
        * xml/XPathValue.cpp:
        (WebCore::XPath::Value::toNumber):
        Instead of using NAN, which isn't really the NaN value on Windows, use numeric_limits.
        
2007-06-19  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Darin Adler.

        Fixed cross-frame access. <rdar://problem/5251309>. 

        * bindings/js/kjs_window.cpp:
        (KJS::Window::getValueProperty):
        * bindings/scripts/CodeGeneratorJS.pm:
        * page/DOMWindow.idl:

2007-06-19  Anders Carlsson  <andersca@apple.com>

        Build fix.
        
        * platform/win/PopupMenuWin.cpp:

2007-06-19  Lars Knoll <lars@trolltech.com>

        Reviewed by Zack

        Implement these methods correctly.

        * platform/qt/PlatformScreenQt.cpp:
        (WebCore::screenRect):
        (WebCore::screenAvailableRect):

2007-06-19  Sam Weinig  <sam@webkit.org>

        Reviewed by Geoff.

        Patch for http://bugs.webkit.org/show_bug.cgi?id=14226
        Move the History object out of the JS bindings

        - Autogenerate JSHistory.

        * DerivedSources.make:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/kjs_window.cpp:
        (KJS::WindowPrivate::WindowPrivate):
        (KJS::Window::mark):
        (KJS::Window::getValueProperty):
        (KJS::Window::clearHelperObjectProperties):
        (KJS::Window::disconnectFrame):
        * bindings/js/kjs_window.h:
        (KJS::Window::):
        * bridge/GlobalHistory.h: Copied from WebCore/bridge/History.h.
        * bridge/History.h: Removed.
        * bridge/mac/GlobalHistoryMac.mm: Copied from WebCore/bridge/mac/HistoryMac.mm.
        * bridge/mac/HistoryMac.mm: Removed.
        * bridge/win/GlobalHistoryWin.cpp: Copied from WebCore/bridge/win/HistoryWin.cpp.
        * bridge/win/HistoryWin.cpp: Removed.
        * css/cssstyleselector.cpp:
        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::disconnectFrame):
        (WebCore::DOMWindow::history):
        * page/DOMWindow.h:
        * page/DOMWindow.idl:
        * page/History.cpp: Added.
        (WebCore::History::History):
        (WebCore::History::frame):
        (WebCore::History::disconnectFrame):
        (WebCore::History::length):
        (WebCore::History::back):
        (WebCore::History::forward):
        (WebCore::History::go):
        * page/History.h: Added.
        * page/History.idl: Added.
        * platform/gdk/TemporaryLinkStubs.cpp:
        * platform/qt/TemporaryLinkStubs.cpp:
        * platform/wx/TemporaryLinkStubs.cpp:

2007-06-18  Sam Weinig  <sam@webkit.org>

        Qt build fix.

        * platform/qt/PlatformScreenQt.cpp:
        (WebCore::screenDepth):
        (WebCore::screenDepthPerComponent):
        (WebCore::screenIsMonochrome):
        (WebCore::screenRect):
        (WebCore::screenAvailableRect):

2007-06-18  Sam Weinig  <sam@webkit.org>

        Reviewed by Beth.

        Fix build and update licenses. 

        * WebCore.xcodeproj/project.pbxproj:
        * page/BarInfo.cpp:
        * page/BarInfo.h:
        * page/BarInfo.idl:
        * page/Screen.cpp:
        (WebCore::Screen::height):
        (WebCore::Screen::width):
        (WebCore::Screen::colorDepth):
        (WebCore::Screen::pixelDepth):
        (WebCore::Screen::availLeft):
        (WebCore::Screen::availTop):
        (WebCore::Screen::availHeight):
        (WebCore::Screen::availWidth):
        * page/Screen.h:
        * page/Screen.idl:

2007-06-18  Anders Carlsson  <andersca@apple.com>

        Reviewed by John Sullivan.

        <rdar://problem/5277008> Assertion in [LocationChangeHandler finishedLoadingFrame:]
        
        Don't send any frame load callbacks if the document load hasn't been
        committed for real.
        
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::checkLoadCompleteForThisFrame):

2007-06-18  Sam Weinig  <sam@webkit.org>

        Reviewed by Geoff.

        Patch for http://bugs.webkit.org/show_bug.cgi?id=14193
        Move the Screen object out of the JS bindings

        - Renames Screen.h to PlatformScreen.h to accommodate new class.
        - Autogenerates JSScreen.

        * DerivedSources.make:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/kjs_window.cpp:
        (KJS::WindowPrivate::WindowPrivate):
        (KJS::Window::mark):
        (KJS::Window::getValueProperty):
        (KJS::Window::clearHelperObjectProperties):
        * bindings/js/kjs_window.h:
        (KJS::Window::):
        * css/MediaQueryEvaluator.cpp:
        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::DOMWindow):
        (WebCore::DOMWindow::~DOMWindow):
        (WebCore::DOMWindow::frame):
        (WebCore::DOMWindow::disconnectFrame):
        (WebCore::DOMWindow::screen):
        * page/DOMWindow.h:
        * page/DOMWindow.idl:
        * page/Screen.cpp: Added.
        (WebCore::Screen::Screen):
        (WebCore::Screen::disconnectFrame):
        (WebCore::Screen::height):
        (WebCore::Screen::width):
        (WebCore::Screen::colorDepth):
        (WebCore::Screen::pixelDepth):
        (WebCore::Screen::availLeft):
        (WebCore::Screen::availTop):
        (WebCore::Screen::availHeight):
        (WebCore::Screen::availWidth):
        * page/Screen.h: Added.
        * page/Screen.idl: Added.
        * page/mac/WebCoreFrameBridge.mm:
        * platform/PlatformScreen.h: Copied from WebCore/platform/Screen.h.
        * platform/Screen.h: Removed.
        * platform/gdk/PlatformScreenGdk.cpp: Copied from WebCore/platform/gdk/ScreenGdk.cpp.
        * platform/gdk/ScreenGdk.cpp: Removed.
        * platform/mac/PlatformMouseEventMac.mm:
        * platform/mac/PlatformScreenMac.mm: Copied from WebCore/platform/mac/ScreenMac.mm.
        * platform/mac/ScreenMac.mm: Removed.
        * platform/qt/PlatformScreenQt.cpp: Added.
        (WebCore::WebCore::screenDepth):
        (WebCore::WebCore::screenDepthPerComponent):
        (WebCore::WebCore::screenIsMonochrome):
        (WebCore::WebCore::screenRect):
        (WebCore::WebCore::screenAvailableRect):
        * platform/qt/TemporaryLinkStubs.cpp:
        * platform/win/PlatformScreenWin.cpp: Copied from WebCore/platform/win/ScreenWin.cpp.
        * platform/win/ScreenWin.cpp: Removed.
        * rendering/RenderObject.cpp:

2007-06-18  Sam Weinig  <sam@webkit.org>

        Reviewed by Geoff.

        Patch for http://bugs.webkit.org/show_bug.cgi?id=14211
        Move the BarInfo object out of the JS bindings

        * DerivedSources.make:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/kjs_window.cpp:
        (KJS::WindowPrivate::WindowPrivate):
        (KJS::Window::mark):
        (KJS::Window::getValueProperty):
        (KJS::Window::clearHelperObjectProperties):
        (KJS::Window::disconnectFrame):
        * bindings/js/kjs_window.h:
        (KJS::Window::):
        * page/BarInfo.cpp: Added.
        (WebCore::BarInfo::BarInfo):
        (WebCore::BarInfo::disconnectFrame):
        (WebCore::BarInfo::visible):
        * page/BarInfo.h: Added.
        (WebCore::BarInfo::):
        * page/BarInfo.idl: Added.
        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::~DOMWindow):
        (WebCore::DOMWindow::disconnectFrame):
        (WebCore::DOMWindow::locationbar):
        (WebCore::DOMWindow::menubar):
        (WebCore::DOMWindow::personalbar):
        (WebCore::DOMWindow::scrollbars):
        (WebCore::DOMWindow::statusbar):
        (WebCore::DOMWindow::toolbar):
        * page/DOMWindow.h:
        * page/DOMWindow.idl:

2007-06-18  Sam Weinig  <sam@webkit.org>

        Reviewed by Darin.

        Remove the FrameArray class and instead make window.frames another
        self-reference for window (like window.window, window.self, etc).
        This is what Firefox and what the HTML5 dictates.

        * bindings/js/kjs_window.cpp:
        (KJS::WindowPrivate::WindowPrivate):
        (KJS::Window::mark):
        (KJS::Window::getValueProperty):
        (KJS::Window::clearHelperObjectProperties):
        (KJS::Window::disconnectFrame):
        * bindings/js/kjs_window.h:

2007-06-18  Mitz Pettel  <mitz@webkit.org>

        Reviewed by Adele.

        - fix http://bugs.webkit.org/show_bug.cgi?id=13413
          Failed assertion in RenderTextControl::setSelectionRange in Google Spreadsheets

        Test: fast/forms/input-zero-height-focus.html

        * rendering/RenderTextControl.cpp:
        (WebCore::RenderTextControl::setSelectionRange): Avoid setting the
        selection in a zero-height text control.

2007-06-18  Alp Toker  <alp.toker@collabora.co.uk>

        Reviewed by Sam Weinig.

        http://bugs.webkit.org/show_bug.cgi?id=14052
        Implement SoundGdk

        * WebCore.pro:
        * platform/gdk/SoundGdk.cpp: Added.
        (WebCore::systemBeep):
        * platform/gdk/TemporaryLinkStubs.cpp:
        (WebCore::systemBeep):

2007-06-18  Dave Hyatt  <hyatt@apple.com>

        Add support for horizontal mouse wheeling on Windows.
        
        Reviewed by aroben

        * platform/PlatformWheelEvent.h:
        * platform/win/WheelEventWin.cpp:
        (WebCore::PlatformWheelEvent::PlatformWheelEvent):

2007-06-17  Sam Weinig  <sam@webkit.org>

        Win32 build fix.

        * WebCore.vcproj/WebCore.vcproj:

2007-06-15  David Hyatt  <hyatt@apple.com>

        Fix for bugzilla bugs 14183 and 14184, 'repeat' regressed in border-image
        because of a botched 'round' support removal.  Also update for a change in
        the spec that has the second stretch/round/repeat keyword match the first
        if omitted.
        
        Reviewed by olliej

        * css/cssparser.cpp:
        (WebCore::BorderImageParseContext::commitBorderImage):
        * platform/graphics/Image.cpp:
        (WebCore::Image::drawTiled):
        * platform/graphics/Image.h:
        (WebCore::Image::):

2007-06-15  Sam Weinig  <sam@webkit.org>

        Reviewed by Darin.

        Patch for http://bugs.webkit.org/show_bug.cgi?id=14053
        Autogenerate JS binding for Rect

        - Renames RectImpl to Rect, DOMStyleSheetList to JSStyleSheetList 
          and DOMRGBColor to JSRGBColor
        - Moves JSStyleSheetList and JSRGBColor into the WebCore namespace.

        * DerivedSources.make:
        * WebCore.pro:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/kjs_css.cpp:
        (WebCore::):
        (WebCore::JSStyleSheetList::JSStyleSheetList):
        (WebCore::JSStyleSheetList::~JSStyleSheetList):
        (WebCore::JSStyleSheetList::getValueProperty):
        (WebCore::JSStyleSheetList::indexGetter):
        (WebCore::JSStyleSheetList::nameGetter):
        (WebCore::JSStyleSheetList::getOwnPropertySlot):
        (WebCore::toJS):
        (WebCore::JSStyleSheetListFunc::callAsFunction):
        (WebCore::JSRGBColor::JSRGBColor):
        (WebCore::JSRGBColor::~JSRGBColor):
        (WebCore::JSRGBColor::getOwnPropertySlot):
        (WebCore::JSRGBColor::getValueProperty):
        (WebCore::getJSRGBColor):
        * bindings/js/kjs_css.h:
        (WebCore::JSStyleSheetList::classInfo):
        (WebCore::JSStyleSheetList::):
        (WebCore::JSStyleSheetList::impl):
        (WebCore::JSRGBColor::classInfo):
        (WebCore::JSRGBColor::):
        (WebCore::JSRGBColor::impl):
        * bindings/objc/DOMUtility.mm:
        (KJS::createDOMWrapper):
        * bindings/scripts/CodeGeneratorJS.pm:
        * bindings/scripts/CodeGeneratorObjC.pm:
        * css/CSSBorderImageValue.cpp:
        (WebCore::CSSBorderImageValue::CSSBorderImageValue):
        * css/CSSBorderImageValue.h:
        * css/CSSPrimitiveValue.cpp:
        (WebCore::CSSPrimitiveValue::CSSPrimitiveValue):
        (WebCore::CSSPrimitiveValue::cssText):
        * css/CSSPrimitiveValue.h:
        (WebCore::CSSPrimitiveValue::getRectValue):
        (WebCore::CSSPrimitiveValue::):
        * css/DashboardRegion.h:
        * css/Rect.h: Copied from css/RectImpl.h.
        (WebCore::Rect::~Rect):
        (WebCore::Rect::top):
        (WebCore::Rect::right):
        (WebCore::Rect::bottom):
        (WebCore::Rect::left):
        (WebCore::Rect::setTop):
        (WebCore::Rect::setRight):
        (WebCore::Rect::setBottom):
        (WebCore::Rect::setLeft):
        * css/Rect.idl:
        * css/RectImpl.h: Removed.
        * css/cssparser.cpp:
        (WebCore::CSSParser::parseShape):
        (WebCore::BorderImageParseContext::commitBorderImage):
        * css/cssstyleselector.cpp:
        (WebCore::CSSStyleSelector::applyProperty):
        * page/DOMWindow.idl:

2007-06-14  George Staikos  <staikos@kde.org>

        Reviewed by Lars.

        Implement missing tab support and a slight refactor.

        * platform/qt/PlatformKeyboardEventQt.cpp:
        (WebCore::keyIdentifierForQtKeyCode):
        (WebCore::windowsKeyCodeForKeyEvent):
        (WebCore::PlatformKeyboardEvent::PlatformKeyboardEvent):

2007-06-14  Dave Hyatt  <hyatt@apple.com>

        Fix for Bugzilla bug 14806, missing text for bold/italic fonts in non-English Windows installs.
        
        This patch adds an additional step after the lookup by full name fails.  It will then look up
        a PostScript name in a (localized full name) -> (PostScript name) cache.  If the name is not
        found, then the font's name table is obtained and searched for a PostScript name (and the
        result is cached).
        
        If lookup on PostScript name fails too, then we now properly fall back to the next font in the
        list (so text should never be missing).

        Reviewed by Darin (thoroughly reviewed, super reviewed even)

        * platform/win/FontCacheWin.cpp:
        * platform/win/FontPlatformDataWin.cpp:

2007-06-14  Anders Carlsson  <andersca@apple.com>

        Reviewed by Geoff.

        Add Frame::cleanupScriptObjectsForPlugin which will invalidate the root object
        for a given plug-in.

        * WebCore.exp:
        * page/Frame.cpp:
        (WebCore::Frame::cleanupScriptObjectsForPlugin):
        * page/Frame.h:

2007-06-14  Anders Carlsson  <andersca@apple.com>

        Reviewed by Geoff.

        <rdar://problem/5211677>
        -[WebPreferences setJavaEnabled:] only disables java inside <applet>, not <object>
        
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::requestObject):
        If the object is a Java MIME type and Java is disabled, don't load the plug-in.
        
        * platform/MimeTypeRegistry.cpp:
        (WebCore::MimeTypeRegistry::isJavaAppletMIMEType):
        Clean this up and add another applet MIME type.

2007-06-14  George Staikos  <staikos@kde.org>

        Reviewed by Lars.

        Implement the file chooser for Qt.

        * platform/qt/FileChooserQt.cpp:
        (WebCore::FileChooser::openFileChooser):
        (WebCore::FileChooser::basenameForWidth):

2007-06-14  George Staikos  <staikos@kde.org>

        Reviewed by Lars.

        Add missing initialization of pointer.

        * platform/qt/ContextMenuQt.cpp:
        (WebCore::ContextMenu::ContextMenu):

2007-06-14  Anders Carlsson  <andersca@apple.com>

        Reviewed by Mitz.

        <rdar://problem/5244948>
        Safari keeps on complaining about slow script playing NBC TV video (14133)

        http://bugs.webkit.org/show_bug.cgi?id=14133
        Runaway JavaScript timer fires when spinning around in Google Maps street view

        Make sure to start and stop the timeout checker around calls to JS.

        * bindings/objc/WebScriptObject.mm:
        (-[WebScriptObject callWebScriptMethod:withArguments:]):
        (-[WebScriptObject evaluateWebScript:]):

2007-06-14  George Staikos  <staikos@kde.org>

        Reviewed by Maciej.

        Keypress causes typeahead crash on empty selects due to modulo 0.

        * html/HTMLSelectElement.cpp:
        (WebCore::HTMLSelectElement::typeAheadFind):

2007-06-13  George Staikos  <staikos@kde.org>

        Reviewed by Lars.

        Compile without self-linking.

        * WebCore.pro:

2007-06-13  Darin Adler  <darin@apple.com>

        Reviewed by Kevin Decker.

        - fix <rdar://problem/5264923> Safari frequently "stalls" beneath
          +[NSFont fontWithName:size:] while loading a web page (searching on disk for the font)

        * platform/mac/WebFontCache.mm:
        (+[WebFontCache internalFontWithFamily:traits:size:]): Renamed from fontWithFamily.
        Took out the auto-activation code.
        (+[WebFontCache fontWithFamily:traits:size:]): Added. Calls internalFontWithFamily,
        then calls NSFont to trigger activation if that returned nil, then calls
        internalFontWithFamily again.

2007-06-13  Anders Carlsson  <andersca@apple.com>

        Reviewed by Geoff.

        Pass the root object to methods that end up creating new ObjcInstance objects.
        
        * bindings/objc/WebScriptObject.mm:
        (listFromNSArray):
        (-[WebScriptObject callWebScriptMethod:withArguments:]):
        (-[WebScriptObject evaluateWebScript:]):
        (-[WebScriptObject setValue:forKey:]):
        (-[WebScriptObject valueForKey:]):
        (-[WebScriptObject removeWebScriptKey:]):
        (-[WebScriptObject setWebScriptValueAtIndex:value:]):

2007-06-13  Anders Carlsson  <andersca@apple.com>

        Reviewed by Darin.

        <rdar://problem/5267992>
        Make sure an alert doesn't allow loading to continue inside a script.
        
        Make sure to defer all loads where it's possible for a second main loop to be running.
        
        * page/Chrome.cpp:
        (WebCore::Chrome::runModal):
        (WebCore::Chrome::runBeforeUnloadConfirmPanel):
        (WebCore::Chrome::runJavaScriptAlert):
        (WebCore::Chrome::runJavaScriptConfirm):
        (WebCore::Chrome::runJavaScriptPrompt):
        (WebCore::PageGroupLoadDeferrer::PageGroupLoadDeferrer):
        (WebCore::PageGroupLoadDeferrer::~PageGroupLoadDeferrer):
        
        * platform/network/cf/ResourceHandleCFNet.cpp:
        (WebCore::ResourceHandle::setDefersLoading):
        Implement this.

2007-06-13  Alp Toker  <alp.toker@collabora.co.uk>

        Reviewed by Rob.

        http://bugs.webkit.org/show_bug.cgi?id=14060
        Cairo SVG support

        * WebCore.pro: Add new files to the build.
        * platform/graphics/svg/SVGPaintServerPattern.h:
        * platform/graphics/svg/SVGPaintServerSolid.h:
        * platform/graphics/svg/cairo: Added.
        * platform/graphics/svg/cairo/RenderPathCairo.cpp: Added.
        (WebCore::RenderPath::strokeContains):
        (WebCore::RenderPath::strokeBBox):
        * platform/graphics/svg/cairo/SVGPaintServerCairo.cpp: Added.
        (WebCore::SVGPaintServer::draw):
        (WebCore::SVGPaintServer::teardown):
        (WebCore::SVGPaintServer::renderPath):
        * platform/graphics/svg/cairo/SVGPaintServerGradientCairo.cpp: Added.
        (WebCore::SVGPaintServerGradient::setup):
        * platform/graphics/svg/cairo/SVGPaintServerPatternCairo.cpp: Added.
        (WebCore::SVGPaintServerPattern::setup):
        * platform/graphics/svg/cairo/SVGPaintServerSolidCairo.cpp: Added.
        (WebCore::SVGPaintServerSolid::setup):
        * platform/graphics/svg/cairo/SVGResourceClipperCairo.cpp: Added.
        (WebCore::SVGResourceClipper::applyClip):
        * platform/graphics/svg/cairo/SVGResourceMaskerCairo.cpp: Added.
        (WebCore::SVGResourceMasker::applyMask):

2007-06-13  Simon Hausmann  <hausmann@kde.org>

        Reviewed by Lars.

        Added a make install target that installs the Qt port and renamed
        WebKitQt to QtWebKit

        * WebCore.pro:

2007-06-13  Adam Roben  <aroben@apple.com>

        Fix one more BITMAPINFO/BITMAPINFOHEADER typo.

        Rubberstamped by Oliver.

        * platform/win/DragImageWin.cpp:
        (WebCore::allocImage):

2007-06-12  Oliver Hunt  <oliver@apple.com>

        Reviewed by Darin.

        Use correct size for BITMAPINFOHEADER -- whoops.

        * platform/win/CursorWin.cpp:
        (WebCore::Cursor::Cursor):
        * platform/win/PasteboardWin.cpp:
        (WebCore::Pasteboard::writeImage):

2007-06-12  Sam Weinig  <sam@webkit.org>

        Reviewed by Oliver.

        Patch for http://bugs.webkit.org/show_bug.cgi?id=14109
        Cleanup JSEvent and JSClipboard in preperation for autogeneration

        * bindings/js/kjs_events.cpp:
        (KJS::DOMEvent::DOMEvent):
        (KJS::DOMEvent::getValueProperty):
        (KJS::DOMEvent::put):
        (KJS::DOMEvent::putValueProperty):
        (KJS::DOMEventPrototypeFunction::callAsFunction):
        (KJS::toJS):
        (KJS::toEvent):
        (KJS::):
        (KJS::JSClipboard::JSClipboard):
        (KJS::JSClipboard::~JSClipboard):
        (KJS::JSClipboard::getOwnPropertySlot):
        (KJS::JSClipboard::getValueProperty):
        (KJS::JSClipboard::put):
        (KJS::JSClipboard::putValueProperty):
        (KJS::JSClipboardPrototypeFunction::callAsFunction):
        (KJS::toClipboard):
        * bindings/js/kjs_events.h:
        (KJS::DOMEvent::):
        (KJS::DOMEvent::impl):
        (KJS::JSClipboard::impl):
        * dom/ClipboardEvent.h:
        * dom/Event.h:
        (WebCore::Event::srcElement):
        (WebCore::Event::returnValue):
        (WebCore::Event::clipboardData):
        (WebCore::Event::dataTransfer):
        (WebCore::Event::clipboard):
        * dom/MouseEvent.h:

2007-06-13  Lars Knoll <lars@trolltech.com>

        Reviewed by Niko.

        Small cleanup

        * platform/qt/PlugInInfoStoreQt.cpp:
        (WebCore::PlugInInfoStore::supportsMIMEType):

2007-06-13  Lars Knoll <lars@trolltech.com>

        Reviewed by Niko

        Implement the parts required for the JS bridge
        to know about the plugins.

        * WebCore.pro:
        * platform/qt/PlugInInfoStoreQt.cpp: Added.
        (WebCore::PlugInInfoStore::createPluginInfoForPluginAtIndex):
        (WebCore::PlugInInfoStore::pluginCount):
        (WebCore::PlugInInfoStore::supportsMIMEType):
        (WebCore::refreshPlugins):
        * platform/qt/TemporaryLinkStubs.cpp:

=== Merged the following changes from branches/WindowsMerge ===

2007-06-09  Sam Weinig  <sam@webkit.org>

        Build fix.

        * WebCore.vcproj/WebCore.vcproj:

2007-06-08  Anders Carlsson  <andersca@apple.com>

        Reviewed by Adam.

        If both the old and new WMP plugins are present, remove the old one
        so we won't end up choosing it.
        
        * plugins/win/PluginDatabaseWin.cpp:
        (WebCore::PluginDatabaseWin::getPluginsInPaths):

2007-06-08  David Hyatt  <hyatt@apple.com>

        Update licenses/copyrights for WebCoreWin.

        Reviewed by mccullough

        * WebCorePrefix.cpp:
        * bridge/win/FrameWin.cpp:
        * bridge/win/FrameWin.h:
        * bridge/win/HistoryWin.cpp:
        * bridge/win/PageWin.cpp:
        * page/win/EventHandlerWin.cpp:
        * platform/graphics/cg/ColorCG.cpp:
        * platform/graphics/cg/GraphicsContextPlatformPrivate.h:
        * platform/graphics/svg/cg/SVGResourceFilterCg.cpp:
        * platform/graphics/svg/cg/SVGResourceMaskerCg.cpp:
        * platform/graphics/win/IconWin.cpp:
        * platform/graphics/win/ImageWin.cpp:
        * platform/network/cf/FormDataStreamCFNet.cpp:
        * platform/network/cf/FormDataStreamCFNet.h:
        * platform/network/cf/ResourceHandleCFNet.cpp:
        * platform/network/cf/ResourceRequestCFNet.cpp:
        * platform/network/cf/ResourceResponseCFNet.cpp:
        * platform/network/win/CookieJarWin.cpp:
        * platform/network/win/ResourceHandleWin.cpp:
        * platform/network/win/ResourceHandleWin.h:
        * platform/win/BString.cpp:
        * platform/win/BString.h:
        * platform/win/ClipboardWin.h:
        * platform/win/ContextMenuWin.cpp:
        * platform/win/CursorWin.cpp:
        * platform/win/EditorWin.cpp:
        * platform/win/FontCacheWin.cpp:
        * platform/win/FontDataWin.cpp:
        * platform/win/FontPlatformData.h:
        * platform/win/FontPlatformDataWin.cpp:
        * platform/win/FontWin.cpp:
        * platform/win/GlyphPageTreeNodeWin.cpp:
        * platform/win/GraphicsContextWin.cpp:
        * platform/win/KeyEventWin.cpp:
        * platform/win/MimeTypeRegistryWin.cpp:
        * platform/win/NotImplemented.h:
        * platform/win/PlatformMouseEventWin.cpp:
        * platform/win/PlatformScrollBar.h:
        * platform/win/PlatformScrollBarWin.cpp:
        * platform/win/PopupMenuWin.cpp:
        * platform/win/ScreenWin.cpp:
        * platform/win/ScrollViewWin.cpp:
        * platform/win/SearchPopupMenuWin.cpp:
        * platform/win/SoundWin.cpp:
        * platform/win/TemporaryLinkStubs.cpp:
        * platform/win/TextBoundariesWin.cpp:
        * platform/win/WebCoreHistory.cpp:
        * platform/win/WebCoreHistory.h:
        * platform/win/WebCoreSystemInterface.cpp:
        * platform/win/WebCoreSystemInterface.h:
        * platform/win/WheelEventWin.cpp:
        * platform/win/WidgetWin.cpp:
        * plugins/win/PlugInInfoStoreWin.cpp:
        * plugins/win/PluginDatabaseWin.cpp:
        * plugins/win/PluginDatabaseWin.h:
        * plugins/win/PluginDebug.h:
        * plugins/win/PluginPackageWin.cpp:
        * plugins/win/PluginPackageWin.h:
        * plugins/win/PluginStreamWin.cpp:
        * plugins/win/PluginStreamWin.h:
        * plugins/win/PluginViewWin.cpp:
        * plugins/win/PluginViewWin.h:
        * plugins/win/npapi.cpp:
        * plugins/win/npfunctions.h:
        * rendering/RenderThemeSafari.cpp:
        * rendering/RenderThemeSafari.h:
        * rendering/RenderThemeWin.h:

2007-06-07  Sam Weinig  <sam@webkit.org>

        Fix build.

        * WebCore.vcproj/WebCore.vcproj:

2007-06-07  Anders Carlsson  <andersca@apple.com>

        Reviewed by Steve.

        <rdar://problem/5252902>
        Shockwave plug-in content crashes.
        
        Add a new quirk for plug-ins that need their WNDPROCs to be ASCII. If someone uses SetWindowLongA to set the WNDPROC to an ASCII one
        and the previous one was an Unicode one, the value returned from SetWindowLongA (the old WNDPROC) will not be a function pointer, but instead
        a special value. The Win32 API CallWndProc knows that when it encounters a special value it must convert the message to Unicode. Shockwave 
        does not use CallWndProc but instead treats the WNDPROC as a function.
        
        * plugins/win/PluginViewWin.cpp:
        (WebCore::PluginViewWndProc):
        (WebCore::PluginViewWin::determineQuirks):
        (WebCore::PluginViewWin::init):
        * plugins/win/PluginViewWin.h:
        (WebCore::):
        (WebCore::PluginViewWin::quirks):

2007-06-07  Sam Weinig  <sam@webkit.org>

        Build fix for the build fix.

        * WebCore.vcproj/WebCore.vcproj:

2007-06-07  Sam Weinig  <sam@webkit.org>

        Build fix.

        * WebCore.vcproj/WebCore.vcproj:

2007-06-06  Sam Weinig  <sam@webkit.org>

        Build fix.

        * WebCore.vcproj/WebCore.vcproj:

2007-06-03  Steve Falkenburg  <sfalken@apple.com>

        Reviewed by Oliver.

        Update to last fix.
        Invalidate a list of rects rather than unioning them.

        * plugins/win/PluginViewWin.cpp:
        (WebCore::PluginViewWin::invalidateTimerFired):
        (WebCore::PluginViewWin::invalidateRect):
        * plugins/win/PluginViewWin.h:

2007-06-03  Steve Falkenburg  <sfalken@apple.com>

        Reviewed by Oliver.

        <rdar://problem/5245016> 100A89+WebKit.dll: Can't select text in page location field at kids.yahoo.com
        
        Delay invalidates for windowless Flash to prevent Flash WM_PAINT and WM_USER+1 messages from
        starving other HWNDs.
        
        This code defers the invalidate through a WebCore::Timer.  We could have used a Windows ::SetTimer
        to further lessen CPU load, but this would have the additional risk of negatively impacting Flash
        performance, since WebCore::Timer is set up to be more responsive than ::SetTimer.

        * plugins/win/PluginViewWin.cpp:
        (WebCore::PluginViewWin::invalidateTimerFired): Added.
        (WebCore::PluginViewWin::invalidateRect): Delay invalidates for windowless Flash.
        (WebCore::PluginViewWin::determineQuirks): Add delayed invalidate quirk.
        * plugins/win/PluginViewWin.h:

2007-06-02  Steve Falkenburg  <sfalken@apple.com>

        Reviewed by Adam.

        Update last fix to use startsWith instead of strcmpi.

        * plugins/win/PluginStreamWin.cpp:
        (WebCore::PluginStreamWin::startStream):
        * plugins/win/PluginViewWin.cpp:
        (WebCore::scriptStringIfJavaScriptURL):

2007-06-02  Steve Falkenburg  <sfalken@apple.com>

        Reviewed by gramps.

        Fix http://www.tvguide.com/ "LAUNCH VIDEO & PHOTO PLAYER" button.
        Make "javascript" URL scheme string compare case insensitive.

        * plugins/win/PluginStreamWin.cpp:
        (WebCore::PluginStreamWin::startStream): Use strcmpi.
        * plugins/win/PluginViewWin.cpp:
        (WebCore::scriptStringIfJavaScriptURL): Use strcmpi.

2007-06-01  Anders Carlsson  <andersca@apple.com>

        Reviewed by Steve.

        If the value exists but is empty, return an empty String.
        
        * plugins/win/PluginPackageWin.cpp:
        (WebCore::getVersionInfo):

2007-06-01  Anders Carlsson  <andersca@apple.com>

        Reviewed by Steve.

        Add the default path for the new WMP Firefox plugin.

        * plugins/win/PluginDatabaseWin.cpp:
        (WebCore::addWindowsMediaPlayerPluginPath):

2007-05-31  Sam Weinig  <sam@webkit.org>

        Fixed build.

        * WebCore.vcproj/WebCore.vcproj:

2007-05-31  Sam Weinig  <sam@webkit.org>

        Fixed build.

        * WebCore.vcproj/WebCore.vcproj:

2007-05-30  Ada Chan  <adachan@apple.com>

        Reviewed by Adam.

        Fixed build.

        * platform/win/PopupMenuWin.cpp:
        (WebCore::PopupMenu::itemWritingDirectionIsNatural):

2007-05-30  Sam Weinig  <sam@webkit.org>

        Build Fix.

        * WebCore.vcproj/WebCore.vcproj:

2007-05-29  Sam Weinig  <sam@webkit.org>

        Fix the build.

        * WebCore.vcproj/WebCore.vcproj:

2007-05-29  Anders Carlsson  <andersca@apple.com>

        Reviewed by Adam.

        <rdar://4782915> plugin is not in the right place at jumble.com/play.html

        Pass the plugin window coordinates for windowed plugins too.
        
        * plugins/win/PluginViewWin.cpp:
        (WebCore::PluginViewWin::setNPWindowRect):

2007-05-29  Anders Carlsson  <andersca@apple.com>

        Reviewed by Adam.

        <rdar://problem/4761543> nike.com doesn't finish loading if Flash plugin is installed
        <rdar://problem/5131528> play button on Flash in ESPN front page does not start movie
        
        Make sure to call NPP_SetWindow right after creating the plugin, and not from the main loop. However,
        the WMP plugin needs to have the plugin's window coordinates set correctly when calling NPP_SetWindow so add a 
        quirk for that.
        
        * plugins/win/PluginViewWin.cpp:
        (WebCore::PluginViewWin::determineQuirks):
        (WebCore::PluginViewWin::init):
        * plugins/win/PluginViewWin.h:
        (WebCore::):

2007-05-29  Sam Weinig  <sam@webkit.org>

        Reviewed by Adam Roben.

        - Removes platform/win/NotImplemented.h because we have consolidated
          the notImplemented() for all platforms in platform/NotImplemented.h
        - Fixes remaining uses of old macro to use the new notImplemented() one.

        * WebCore.vcproj/WebCore.vcproj:
        * page/win/EventHandlerWin.cpp:
        (WebCore::EventHandler::passWidgetMouseDownEventToWidget):
        * platform/graphics/svg/cg/SVGResourceFilterCg.cpp:
        (WebCore::SVGResourceFilter::prepareFilter):
        (WebCore::SVGResourceFilter::applyFilter):
        * platform/graphics/svg/cg/SVGResourceMaskerCg.cpp:
        (WebCore::SVGResourceMasker::applyMask):
        * platform/win/GraphicsContextWin.cpp:
        (WebCore::contextForImage):
        * platform/win/NotImplemented.h: Removed.
        * platform/win/SearchPopupMenuWin.cpp:
        (WebCore::SearchPopupMenu::saveRecentSearches):
        (WebCore::SearchPopupMenu::loadRecentSearches):
        * platform/win/TemporaryLinkStubs.cpp:
        (Frame::print):
        (Frame::issueTransposeCommand):
        (GraphicsContextPlatformPrivate::clip):
        (WebCore::FrameView::updateBorder):
        (Widget::setIsSelected):
        (ScrollView::inWindow):
        (WebCore::focusRingColor):
        (WebCore::setFocusRingColorChangeFunction):
        (Frame::setNeedsReapplyStyles):
        (FrameLoader::overrideMediaType):
        (DocumentLoader::getResponseModifiedHeader):
        (ResourceHandle::willLoadFromCache):
        (WebCore::userIdleTime):
        (CachedPage::close):
        (WebCore::supportedKeySizes):
        (WebCore::signedPublicKeyAndChallengeString):
        * plugins/win/PluginViewWin.cpp:
        (WebCore::PluginViewWin::newStream):
        (WebCore::PluginViewWin::write):
        (WebCore::PluginViewWin::setValue):

2007-05-29  Anders Carlsson  <andersca@apple.com>

        Build fix.
        
        * rendering/RenderThemeSafari.cpp:
        (WebCore::RenderThemeSafari::adjustSliderThumbStyle):

2007-05-29  Anders Carlsson  <andersca@apple.com>

        Reviewed by Adam.

        Port code from open source changeset 21808, fixing
        http://bugs.webkit.org/show_bug.cgi?id=13871 
        
        * rendering/RenderThemeSafari.cpp:
        (WebCore::RenderThemeMac::adjustSliderThumbStyle):
        * rendering/RenderThemeSafari.h:

2007-05-29  Ada Chan  <adachan@apple.com>

        Build fix.
        - Added "$(ProjectDir)..\platform\win" to include paths
        - Added WebCore\bindings\js\JSCSSStyleDeclarationCustom.cpp to project

        * WebCore.vcproj/WebCore.vcproj:

2007-05-28  Sam Weinig  <sam@webkit.org>

        Build fix.

        * WebCore.vcproj/WebCore.vcproj:

2007-05-27  Sam Weinig  <sam@webkit.org>

        Build fix.

        * WebCore.vcproj/WebCore.vcproj:

2007-05-24  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Darin Adler.

        Fixed a bug with Settings where a number of different objects held bare 
        Settings* data members, even though the Page owns the Settings object and 
        deletes it upon destruction.

        Added NULL checks since the Page can be deleted before the frame/document.

        * plugins/win/PluginViewWin.cpp:
        (WebCore::PluginViewWin::load):

2007-05-24  Sam Weinig  <sam@webkit.org>

        Reviewed by NOBODY.

        Build fix.

        * WebCore.vcproj/WebCore.vcproj:

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

        Reviewed by Adam.

        <rdar://5211882>
        Need to relaunch Boomer to recognize newly installed QT plug-in
        
        <rdar://5061867>
        After installing Flash, Safari would still not display pages that needed it
        
        * plugins/win/PluginDatabaseWin.cpp:
        (WebCore::PluginDatabaseWin::refresh):
        Return whether the plugin database changed or not.
        
        (WebCore::PluginDatabaseWin::findPlugin):
        New function that tries to find a plug-in given its url and MIME type.
        
        (WebCore::PluginDatabaseWin::createPluginView):
        If no plugin is found, refresh the database and search for the plugin again if the database changed.
        
2007-05-24  Adele Peterson  <adele@apple.com>

        - fix http://bugs.webkit.org/show_bug.cgi?id=13837
          Separator in new <select> widget disappears when block element with border is in document.

        * rendering/RenderThemeSafari.cpp: (WebCore::RenderThemeSafari::paintMenuListButton):
         Added calls to set the stroke style and thickness when painting the arrows and the separator.

2007-05-24  Sam Weinig  <sam@webkit.org>

        Build fix.

        * WebCore.vcproj/WebCore.vcproj:

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

        Build fix.

        * WebCore.vcproj/WebCore.vcproj:

2007-05-23  Anders Carlsson  <andersca@apple.com>

        Fix build.
        
        * platform/win/CursorWin.cpp:
        (WebCore::zoomInCursor):
        (WebCore::zoomOutCursor):

2007-05-22  Ada Chan  <adachan@apple.com>

        Fix build.

        * plugins/win/PluginViewWin.cpp:
        (WebCore::PluginViewWin::handleMouseEvent):

2007-05-22  Justin Garcia  <justin.garcia@apple.com>

        Reviewed by oliver

        Build fix.

        * plugins/win/PluginViewWin.cpp:
        (WebCore::PluginViewWin::handleMouseEvent): 

2007-05-21  Sam Weinig  <sam@webkit.org>

        Reviewed by Oliver.

        Build fix.

        * WebCore.vcproj/WebCore.vcproj:

2007-05-21  Sam Weinig  <sam@webkit.org>

        Reviewed by Adam.

        Build fix.

        * WebCore.vcproj/WebCore.vcproj:

2007-05-17  Steve Falkenburg  <sfalken@apple.com>

        Reviewed by Geoff, Adam.

        Use precompiled headers (via WebCorePrefix.h) to speed up WebCoreWin builds.
        This improved WebCore debug rebuild time from 40 minutes to 25 for me.
        
        A few files needed to be excluded, since they didn't build properly with
        the prefix file: ColorData.c, CSSGrammar.cpp, HTMLEntityNames.c, XPathGrammar.cpp, XPathParser.cpp.

        * WebCore.vcproj/WebCore.vcproj: Turn on precompiled header, force includes flags.
        * WebCorePrefix.cpp: Added.
        * WebCorePrefix.h: Added.
        * config.h: Modified to be compatible with WebCorePrefix.h.

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

        Reviewed by Adam.

        Fixing the vcproj paths.

        * WebCore.vcproj/WebCore.vcproj:

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

        Reviewed by Geoff.

        Build fix after r21577.

        * WebCore.vcproj/WebCore.vcproj:

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

        Build fix after r21562.

        * platform/win/TemporaryLinkStubs.cpp:
        * platform/win/WidgetWin.cpp:
        * plugins/win/PluginViewWin.cpp:
        * plugins/win/PluginViewWin.h:

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

        Reviewed by Geoff.
        
        <rdar://problem/4914940> Some plugins won't redraw correctly when scrolling
        
        This patch does two things:
        
        1. It comments out the call to set the window's region to an empty region while it's being moved. This was done to prevent
        the QT plugin from drawing outside its bounds when scrolling it when it's inside an iframe or div with overflow.
        
        2. It lets Windows handle its invalid region when moving the window and setting its new window region.
        
        * plugins/win/PluginViewWin.cpp:
        (WebCore::PluginViewWin::updateWindow):

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

        Build fix after r21555.

        * page/win/EventHandlerWin.cpp:
        (WebCore::EventHandler::passMouseMoveEventToSubframe):

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

        Reviewed by Adam.

        Build Fix after <rdar://problem/5201423>

        * WebCore.vcproj/WebCore.vcproj:

2007-05-17  Adele Peterson  <adele@apple.com>

        Reviewed by Hyatt.

        Follow up to <rdar://problem/5092645> PopupMenuWin needs bidiReorderCharacters logic from RenderListBox

        * platform/win/PopupMenuWin.cpp: (WebCore::PopupMenu::paint):
          Use the clientStyle to determine how to handle bidi text.  For popup buttons, which we restrict to LTR,
          we will match the button text.

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

        Reviewed by Darin.

        <rdar://problem/5210600> New WMP plugin doesn't show any contents

        Call NPP_SetWindow after the window's size has been updated.
        
        * plugins/win/PluginViewWin.cpp:
        (WebCore::PluginViewWin::setFrameGeometry):

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

        Reviewed by John.

        <rdar://problem/5204016> Repro crash on nytimes.com in MimeTypeRegistry::getMIMETypeForExtension
        
        Return null if the extension is null.
        
        * platform/win/MimeTypeRegistryWin.cpp:
        (WebCore::MimeTypeRegistry::getMIMETypeForExtension):

2007-05-16  Adele Peterson  <adele@apple.com>

        Reviewed by Hyatt.

        Fix for:
            <rdar://problem/5092645> PopupMenuWin needs bidiReorderCharacters logic from RenderListBox
            <rdar://problem/5205654> Select popup menus should always be ltr to match the mac

        * platform/win/PopupMenuWin.cpp:
        (WebCore::PopupMenu::show): Remove special cases for RTL menus, since we are always going to left align.
        (WebCore::PopupMenu::calculatePositionAndSize): ditto.
        (WebCore::PopupMenu::paint): Added call to bidiReorderCharacters.

2007-05-14  Oliver Hunt  <oliver@apple.com>

        Reviewed by Sam.

        Fix for <rdar://problem/5147895> REGRESSION: Content-Disposition: filename is ignored for drag-and-drop.

        If the image does not already have a title, fall back to the 
        name suggested by Content-Disposition.

        * platform/win/ClipboardWin.cpp:
        (WebCore::createGlobalImageFileDescriptor):

2007-05-14  Oliver Hunt  <oliver@apple.com>

        Reviewed by Sam.

        Fix for <rdar://problem/5202805> Null dereference in createGlobalData(CString str)
        
        Null terminate manually to prevent us from dereferencing null.

        * platform/win/ClipboardUtilitiesWin.cpp:
        (WebCore::createGlobalData):

2007-05-14  Oliver Hunt  <oliver@apple.com>

        Reviewed by Geoff.

        Windows side of fix for
        <rdar://problem/4728842> Can't drag-and-drop files onto <input type="file">

        * platform/win/ClipboardUtilitiesWin.cpp:
        (WebCore::cfHDropFormat):
          Need to be able to access externally
          
        * platform/win/ClipboardUtilitiesWin.h:
          Declare cfHDropFormat
          
        * platform/win/DragDataWin.cpp:
        (WebCore::DragData::containsFiles):
        (WebCore::DragData::asFilenames):
          Add implementation of containsFiles and asFilenames

2007-05-14  Geoffrey Garen  <ggaren@apple.com>

        Build fix.

        * WebCore.vcproj/WebCore.vcproj:

2007-05-14  Anders Carlsson  <andersca@apple.com>

        Reviewed by Geoff.

        <rdar://problem/5176940> Seed10: MS Silverlight 1.0 beta plug-in is not supported
        
        * plugins/win/PluginDatabaseWin.cpp:
        (WebCore::addPluginsFromRegistry):
        New function that adds plugins from the registry from HKEY_LOCAL_MACHINE/MozillaPlugins.

        * plugins/win/PluginViewWin.cpp:
        (WebCore::PluginViewWin::invalidateRect):
        (WebCore::PluginViewWin::forceRedraw):
        Make these work with windowed plugins.
        
2007-05-13  Darin Adler  <darin@apple.com>

        Requested by Hyatt.

        - internal part of http://bugs.webkit.org/show_bug.cgi?id=13529
          DOM3 keyIdentifier text is incorrect

        * platform/win/KeyEventWin.cpp:
        (WebCore::keyIdentifierForWindowsKeyCode): Use 4 digits for "U+" stuff.

2007-05-12  Oliver Hunt  <oliver@apple.com>

        rs=hyatt.

        Stubs to prevent build bustage

        * platform/win/DragDataWin.cpp:
        (WebCore::DragData::containsFiles):
        (WebCore::DragData::asFilenames):

2007-05-11  Darin Adler  <darin@apple.com>

        * WebCore.vcproj/WebCore.vcproj: Added new RenderWordBreak.cpp/h files.

2007-05-10  Adele Peterson  <adele@apple.com>

        Reviewed by Hyatt.

        * bridge/win/FrameWin.cpp:
        (WebCore::imageFromSelection): Updated to use selectionRect instead of visibleSelectionRect
        
2007-05-08  Steve Falkenburg  <sfalken@apple.com>

        Rubber-stamped by Geoff.

        Moved shared EditorWin code to Editor.cpp in open source.

        * platform/win/EditorWin.cpp: Deleted (moved) most of this file.

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

        Reviewed by Darin, Oliver.

        Removed localized string stubs.

        * platform/win/TemporaryLinkStubs.cpp:

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

        Reviewed by Ada.

        Updated for new editor interface.

        * platform/win/EditorWin.cpp:
        (WebCore::Editor::advanceToNextMisspelling):
        (WebCore::isRangeUngrammatical):

2007-05-07  Alice Liu  <alice.liu@apple.com>

        Reviewed by Oliver.

        Fixed <rdar://5087119> Paste fidelity isn't as good as it is on the mac
        and <rdar://5087118> Plain text copy/paste yields bad line endings on Boomer
        and re-organized standalone functions in DragDataWin.cpp and PasteboardWin.cpp
        into ClipboardUtilitiesWin.h/cpp.

        * WebCore.vcproj/WebCore.vcproj:
        * platform/win/ClipboardUtilitiesWin.cpp: Added.
        (WebCore::cfHDropFormat):
        (WebCore::getWebLocData):
        (WebCore::extractURL):
        (WebCore::texthtmlFormat):
        (WebCore::createGlobalData):
        (WebCore::markupToCF_HTML):
        (WebCore::urlToMarkup):
        (WebCore::replaceNewlinesWithWindowsStyleNewlines):
        (WebCore::replaceNBSPWithSpace):
        (WebCore::urlWFormat):
        (WebCore::urlFormat):
        (WebCore::plainTextFormat):
        (WebCore::plainTextWFormat):
        (WebCore::filenameWFormat):
        (WebCore::filenameFormat):
        (WebCore::htmlFormat):
        (WebCore::getURL):
        (WebCore::getPlainText):
        (WebCore::fragmentFromFilenames):
        (WebCore::containsFilenames):
        (WebCore::fragmentFromCF_HTML):
        (WebCore::fragmentFromHTML):
        (WebCore::containsHTML):
        * platform/win/ClipboardUtilitiesWin.h: Added.
        * platform/win/ClipboardWin.cpp:
        (WebCore::ClipboardWin::writeRange):
        * platform/win/DragDataWin.cpp:
        * platform/win/PasteboardWin.cpp:
        (WebCore::Pasteboard::writeSelection):
        (WebCore::Pasteboard::documentFragment):

2007-05-04  Steve Falkenburg  <sfalken@apple.com>

        Reviewed by Darin.

        Fix crash when using "check spelling while typing".

        * WebCore.vcproj/WebCore.vcproj: Added TextBreakIteratorInternalICUWin.cpp
        * platform/win/TemporaryLinkStubs.cpp: Removed findSentenceBoundary, findNextSentenceFromIndex.

2007-05-04  Alice Liu  <alice.liu@apple.com>

        Reviewed by Darin.

        changed use of DeprecatedString::fromUTF8 to UTF8Encoding().decode()

        * platform/win/DragDataWin.cpp:
        (WebCore::fragmentFromHTML):
        * platform/win/PasteboardWin.cpp:
        (WebCore::Pasteboard::documentFragment):

2007-05-03  Steve Falkenburg  <sfalken@apple.com>

        Reviewed by Ada, Oliver.

        Checkpoint:
        <rdar://problem/4602372> Spelling
        <rdar://problem/4769763> Spell checking engine support

        * platform/win/EditorWin.cpp:
        (WebCore::findFirstBadGrammarInRange): Account for start offset when reporting bad grammar range (fixed my porting mistake).
        (WebCore::Editor::advanceToNextMisspelling): Include user description with spelling error.
        (WebCore::isRangeUngrammatical): Include user description with spelling error.

2007-05-03  Alice Liu  <alice.liu@apple.com>

        Reviewed by Oliver.

        Fixed <rdar://5181466> HTML formatted clipboard data is not converted from UTF8 when pasted

        * platform/win/DragDataWin.cpp:
        (WebCore::fragmentFromHTML):
        * platform/win/PasteboardWin.cpp:
        (WebCore::fragmentFromCF_HTML):
        (WebCore::Pasteboard::documentFragment):

2007-05-03  Oliver Hunt  <oliver@apple.com>

        Reviewed by Steve

        Fix misuse of GlobalLock.

        * platform/win/PasteboardWin.cpp:
        (WebCore::createGlobalData):

2007-05-03  Oliver Hunt  <oliver@apple.com>

        Reviewed by Steve.

        Add logic to draw underlines for grammar and spelling errors.
        (rdar://problem/4769832)

        * platform/win/GraphicsContextWin.cpp:
        (WebCore::spellingPatternColor):
        (WebCore::grammarPatternColor):
          Can't define global const with constructor so use function scoped globals instead.
        (WebCore::setCGStrokeColor):
          Utility function pulled over from GraphicsContextCG          
        (WebCore::GraphicsContext::drawLineForMisspellingOrBadGrammar):
        
        * platform/win/TemporaryLinkStubs.cpp:
          Remove old drawLineForMisspellingOrBadGrammar stub

2007-05-01  Steve Falkenburg  <sfalken@apple.com>

        Reviewed by Oliver.

        Fix crash when retrieving title of context menu after it has been selected.
        Necessary to get spelling corrections code working.

        * platform/win/ContextMenuWin.cpp:
        (WebCore::ContextMenu::itemWithAction): menu item info fType is a set of flags, MFT_STRING is 0, so we need to or off flags before comparing.

2007-04-29  Adam Roben  <aroben@apple.com>

        Build fix after r21183.

        * WebCore.vcproj/WebCore.vcproj: Added LayoutState.(h|cpp).

2007-04-29  Oliver Hunt  <oliver@apple.com>

        Reviewed by Steve.

        Fix for <rdar://problem/5126393> REGRESSION (r19672-19697): Safari drag image drags at original size (13261)
 
        Prevent build bustage from opensource changes, correct scaling

        * platform/win/DragImageWin.cpp:
        (WebCore::scaleDragImage):

2007-04-24  Steve Falkenburg  <sfalken@apple.com>

        Reviewed by Darin, Oliver.

        Checkpoint:
        <rdar://problem/4602372> Spelling
        <rdar://problem/4769763> Spell checking engine support
        
        Ported code from EditorMac.mm into EditorWin.cpp.
        Once this works, I'll move this code into Editor.cpp and remove it
        form EditorMac.mm.

        * platform/win/EditorWin.cpp:
        (WebCore::Editor::ignoreSpelling):
        (WebCore::Editor::learnSpelling):
        (WebCore::findFirstMisspellingInRange):
        (WebCore::paragraphAlignedRangeForRange):
        (WebCore::findFirstGrammarDetailInRange):
        (WebCore::findFirstBadGrammarInRange):
        (WebCore::Editor::advanceToNextMisspelling):
        (WebCore::Editor::isSelectionMisspelled):
        (WebCore::isRangeUngrammatical):
        (WebCore::Editor::isSelectionUngrammatical):
        (WebCore::Editor::guessesForUngrammaticalSelection):
        (WebCore::Editor::guessesForMisspelledSelection):
        (WebCore::Editor::showSpellingGuessPanel):
        (WebCore::Editor::spellingPanelIsShowing):
        (WebCore::Editor::markMisspellingsAfterTypingToPosition):
        (WebCore::markAllMisspellingsInRange):
        (WebCore::markAllBadGrammarInRange):
        (WebCore::markMisspellingsOrBadGrammar):
        (WebCore::Editor::markMisspellings):
        (WebCore::Editor::markBadGrammar):
        * platform/win/TemporaryLinkStubs.cpp:

2007-04-23  Anders Carlsson  <andersca@apple.com>

        Reviewed by Ada.

        <rdar://problem/5061022>
        REGRESSION: Acrobat 8 plug-in fails to scroll with trackpad two-finger scroll or mouse wheel (12995)
        
        * page/win/EventHandlerWin.cpp:
        (WebCore::EventHandler::passWheelEventToWidget):
        Get rid of passWheelEventToSubframe and pass wheel events to all widgets.

2007-04-23  Adam Roben  <aroben@apple.com>

        Build fix.

        * page/win/EventHandlerWin.cpp: Removed passWheelEventToSubframe.

2007-04-20  Beth Dakin  <bdakin@apple.com>

        Reviewed by Adam.

        Fix for <rdar://problem/5089822> Boomer does not send scroll events

        * platform/win/ScrollViewWin.cpp:
        (WebCore::ScrollView::ScrollViewPrivate::valueChanged):

2007-04-19  Adam Roben  <aroben@apple.com>

        * WebCore.vcproj/WebCore.vcproj: Removed empty filter.

2007-04-19  Adam Roben  <aroben@apple.com>

        * WebCore.vcproj/WebCore.vcproj: Removed unused files.

2007-04-18  Adam Roben  <aroben@apple.com>

        Reviewed by Oliver.

        Added an equality operator to COMPtr.

        * platform/win/COMPtr.h:
        (operator==):
        (operator!=):

2007-04-18  Oliver Hunt  <oliver@apple.com>

        Reviewed by Geoff.

        Allow images to be dragged from page and dropped as files.
        This is the remainder of the fix for <rdar://problem/5035948> 
          -- Dragging image or link from boomer doesn't create webloc 
             or image file.

        * platform/win/ClipboardWin.cpp:
        (WebCore::filesystemPathFromUrlOrTitle):
          Make name generation nicer, and better match Firefox
        
        (WebCore::createGlobalURLContent):
          rename function
        
        (WebCore::createGlobalImageFileContent):
          Copies image data into global store
        
        (WebCore::createGlobalUrlFileDescriptor):
          Rename function
          Updated for parameter change on filesystemPathFromUrlOrTitle
        
        (WebCore::createGlobalImageFileDescriptor):
          Set up file descriptor for image drag
        
        (WebCore::getCachedImage):
          Helper function
        
        (WebCore::writeImageToDataObject):
          Attempts to build and insert data for image->file drag
        
        (WebCore::ClipboardWin::declareAndWriteDragImage):
          Attempts to build and insert data for image->file drag
        
        (WebCore::ClipboardWin::writeURL):
          Add call to imageDataToDataObject

2007-04-17  Adam Roben  <aroben@apple.com>

        Rubberstamped by Oliver.

        * platform/network/cf/ResourceHandleCFNet.cpp: Removed an unnecessary
        include.

2007-04-17  Oliver Hunt  <oliver@apple.com>

        Whoops, had code commented out from manual failure test.
        Also fixed date of previous changelog entry

        * platform/win/ClipboardWin.cpp:
        (WebCore::writeFileToDataObject):

2007-04-17  Oliver Hunt  <oliver@apple.com>

        Reviewed by Ada.

        Partial fix for <rdar://problem/5035948> -- Dragging image 
        or link from boomer doesn't create webloc or image file.
        
        Add all the ground work to set up FileDescriptors and FileContent
        for allowing files to be created from drag and drop actions,
        and hook up logic for links to create WebLoc data for drag and drop.

        * platform/win/ClipboardWin.cpp:
        (WebCore::fileDescriptorFormat):
        (WebCore::fileContentFormat):
          Clipboard formats 
          
        (WebCore::pathRemoveBadFSCharacters):
        (WebCore::filesystemPathFromUrlOrTitle):
          Helper functions for create filenames
          
        (WebCore::createGlobalDataForURLContent):
          Create the WebLoc content
          
        (WebCore::createGlobalDataForUrlFileDescriptor):
          Create a file descriptor for the WebLoc data
          
        (WebCore::writeFileToDataObject):
          Basic helper function to push generated file info
          into the target DataObject
          
        (WebCore::ClipboardWin::writeURL):
          Now puts WebLoc file onto the Clipboard

2007-04-16  Adam Roben  <aroben@apple.com>

        Reviewed by Adele.

        Fix <rdar://problem/5002577> Focus ring SPI in GraphicsContextWin.cpp
        needs to move to WebKitSystemInterface

        * platform/win/GraphicsContextWin.cpp:
        (WebCore::GraphicsContext::drawFocusRing): Use wkDrawFocusRing.

2007-04-14  Adam Roben  <aroben@apple.com>

        * WebCore.vcproj/WebCore.submit.sln: Use the Debug_Internal
        configuration.

2007-04-14  Adam Roben  <aroben@apple.com>

        Small correctness fix that is needed for building OpenSource.

        * platform/win/PopupMenuWin.cpp: Use RenderTheme instead of RenderThemeWin.

2007-04-13  Adam Roben  <aroben@apple.com>

        Reviewed by Tim.

        Sync our config.h with the OpenSource version so we can merge ours in
        later.

        * config.h: Added #defines from the OpenSource version, moved
        Windows-specific defines inside #if PLATFORM(WIN[_OS]), and got rid
        of assert.h
        * platform/win/CursorWin.cpp:
        (WebCore::Cursor::Cursor): Use ASSERT instead of assert.

2007-04-13  Adam Roben  <aroben@apple.com>

        Rubberstamped by Tim.

        Removed the loader/win directory since it only contains empty files.

        * WebCore.vcproj/WebCore.vcproj: Removed empty files.
        * loader/win/FrameLoaderWin.cpp: Removed.
        * loader/win/ResourceLoaderWin.cpp: Removed.

2007-04-12  Adam Roben  <aroben@apple.com>

        Rubberstamped by Steve.

        Removed unused file.

        * WebCore.vcproj/WebCore.sln: Removed.

2007-04-12  Adam Roben  <aroben@apple.com>

        Didn't mean to commit this.

        * WebCore.vcproj/WebCore.vcproj:

2007-04-12  Adam Roben  <aroben@apple.com>

        Reviewed by Steve.

        <rdar://problem/5131565> Need to be able to use debug WebKit with
        release Safari.

        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.vcproj/debug.vsprops:
        * WebCore.vcproj/debug_internal.vsprops: Added.
        * WebCore.vcproj/release.vsprops:

2007-04-11  Adam Roben  <aroben@apple.com>

        Reviewed by Tim.

        Get rid of FrameViewWin.cpp, since it's empty.

        * WebCore.vcproj/WebCore.vcproj:
        * bridge/win/FrameViewWin.cpp: Removed.

2007-04-11  Adam Roben  <aroben@apple.com>

        Reviewed by Anders.

        Update for changes to Pasteboard.

        * platform/win/PasteboardWin.cpp:
        (WebCore::Pasteboard::writeImage):

2007-04-10  Brady Eidson  <beidson@apple.com>

        Reviewed by Darin

        <rdar://problem/4887095> - PageCache and PageState should be combined

        Changed a TemporaryLinkStub and updated the project file

        * WebCore.vcproj/WebCore.vcproj:
        * platform/win/TemporaryLinkStubs.cpp:
        (CachedPage::close):

2007-04-10  John Sullivan  <sullivan@apple.com>

        * platform/win/TemporaryLinkStubs.cpp:
        (WebCore::Editor::markBadGrammar):
        Keep build going: added stub for this new method

2007-04-10  Anders Carlsson  <andersca@apple.com>

        Reviewed by Adam.

        <rdar://problem/5056988>
        Can not open player on http://radioalice.com

        Fix scriptStringIfJavaScriptURL to not use the path of the URL. This would ignore any characters past 
        a '?' character because that would be parsed as the query part of the URL.
        
        * plugins/win/PluginViewWin.cpp:
        (WebCore::scriptStringIfJavaScriptURL):
        Make this be more like the mac, chopping off the first 12 characters ("javascript:") 
        and then decoding the remaining characters.

2007-04-10  Anders Carlsson  <acarlsson@apple.com>

        * plugins/win/PluginViewWin.cpp:
        (WebCore::PluginViewWin::PluginViewWin):
        Initialize m_status.

2007-04-09  Anders Carlsson  <acarlsson@apple.com>

        Reviewed by Adam.

        <rdar://problem/5062624>
        No prompt to install QT for pages with uninstalled QT plug-in.
        
        Add a status() accessor to PluginViewWin. This can be used by WebKit to find out if the plug-in
        loaded successfully or not.
        
        * plugins/win/PluginViewWin.cpp:
        (WebCore::PluginViewWin::PluginViewWin):
        (WebCore::PluginViewWin::init):
        * plugins/win/PluginViewWin.h:
        (WebCore::):
        (WebCore::PluginViewWin::status):

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

        Build fix

        * plugins/win/PluginViewWin.cpp:
        (WebCore::PluginViewWin::performRequest): assume userGesture is true

2007-04-09  Adam Roben  <aroben@apple.com>

        Build fix.

        * platform/win/PasteboardWin.cpp:
        (WebCore::Pasteboard::writeImage):

2007-04-08  Adam Roben  <aroben@apple.com>

        Reviewed by Oliver.

        Stubbed out Frame::dashboardRegionsChanged now that it's not
        Mac-specific.

        * bridge/win/FrameWin.cpp:
        (WebCore::Frame::dashboardRegionsChanged):

2007-04-06  Oliver Hunt  <oliver@apple.com>

        Reviewed by Adam.

        Fix for rdar://problem/5097227 Can't drag Flash-based 
        scrollbar on mtv.com
        
        The problem was when creating a mouse move event for the 
        plugin we weren't passing on the mouse button state.  
        
        The opensource side of this patch adds logic that allows 
        us to distinguish between a MouseEvent with NoButton and
        a MouseEvent with LeftButton, so we can then provide the 
        correct information to the plugin.

        * plugins/win/PluginViewWin.cpp:
        (WebCore::PluginViewWin::handleMouseEvent):

2007-04-06  Dave Hyatt  <hyatt@apple.com>

        Internal side of fix for bug 13274.

        Reviewed by olliej

        * page/win/EventHandlerWin.cpp:
        (WebCore::EventHandler::passMousePressEventToSubframe):
        * platform/win/PlatformScrollBarSafari.cpp:
        (WebCore::PlatformScrollbar::handleMousePressEvent):
        * platform/win/PopupMenuWin.cpp:
        (WebCore::PopupMenu::PopupMenu):
        (WebCore::PopupWndProc):
        * platform/win/ScrollViewWin.cpp:
        (WebCore::ScrollView::removeChild):
        * platform/win/WidgetWin.cpp:

2007-04-07  Mark Rowe  <mrowe@apple.com>

        Internal build fox after opensource r20753.

        * platform/win/PlatformMouseEventWin.cpp:
        * platform/win/TemporaryLinkStubs.cpp:

2007-04-03  Oliver Hunt  <oliver@apple.com>

        Buildfix

        * platform/network/cf/ResourceResponseCFNet.cpp:
        (WebCore::ResourceResponse::doUpdateResourceResponse):
           Adding .get() calls

2007-04-03  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Alice.

        - fixed <rdar://problem/5107069> WebCore leaks a copy of the CFHTTPMessage CFDictionary (from CFHTTPMessageCopyAllHeaderFields)

        * platform/network/cf/ResourceResponseCFNet.cpp:
        (WebCore::ResourceResponse::doUpdateResourceResponse): Use RetainPtr (once to avoid a leak and once
        just as style cleanup).

2007-04-02  Anders Carlsson  <andersca@apple.com>

        Reviewed by Adam.

        Fix crashes seen when running the plugin layout tests.
        
        * plugins/win/PluginPackageWin.cpp:
        (WebCore::PluginPackageWin::load):
        Fill in the enumerate pointer, not the evaluate pointer (it's already been filled in).
        
        * plugins/win/PluginStreamWin.cpp:
        (WebCore::PluginStreamWin::didFinishLoading):
        Handle the case where there was no plugin stream data at all.

2007-04-02  Anders Carlsson  <andersca@apple.com>

        Reviewed by Darin.

        Check that NPStream pointers passed to NPN_DestroyStream are valid.
        
        * plugins/win/PluginStreamWin.cpp:
        (WebCore::streams):
        (WebCore::PluginStreamWin::PluginStreamWin):
        (WebCore::PluginStreamWin::~PluginStreamWin):
        (WebCore::PluginStreamWin::ownerForStream):
        * plugins/win/PluginStreamWin.h:
        * plugins/win/PluginViewWin.cpp:
        (WebCore::PluginViewWin::destroyStream):

2007-04-02  Anders Carlsson  <andersca@apple.com>

        Reviewed by Darin.

        <rdar://problem/5095582>
        PluginViewWin doesn't implement NPN_DestroyStream.

        * plugins/win/PluginStreamWin.cpp:
        (WebCore::PluginStreamWin::startStream):
        Handle the case where NPN_DestroyStream is called from the newstream handler.
        
        * plugins/win/PluginViewWin.cpp:
        (WebCore::PluginViewWin::destroyStream):
        Implement this.

2007-04-02  Anders Carlsson  <andersca@apple.com>

        Reviewed by Dave Hyatt.

        <rdar://problem/5097225> 
        Mouse cursors don't work with windowless plugins
        
        * platform/win/WidgetWin.cpp:
        (WebCore::Widget::setCursor):
        Add an "ignoreNextSetCursor" boolean and don't call SetCursor if it's true.
        
        * plugins/win/PluginViewWin.cpp:
        (WebCore::PluginViewWin::handleMouseEvent):
        Store away the current cursor and make sure that it won't be reset.

2007-04-02  Anders Carlsson  <andersca@apple.com>

        Reviewed by Adam.

        Fix logic in windowless paint functions.
        
        * plugins/win/PluginViewWin.cpp:
        (WebCore::PluginViewWin::invalidateRect):
        (WebCore::PluginViewWin::invalidateRegion):
        (WebCore::PluginViewWin::forceRedraw):

2007-03-31  Dave Hyatt  <hyatt@apple.com>

        Internal side of 13234.   Open source side was reviewed by
        Mitz.  Layout of justified text was broken when dragged or
        when a ::selection style was in effect.

        * platform/win/FontWin.cpp:
        (WebCore::Font::selectionRectForComplexText):
        (WebCore::Font::drawComplexText):
        (WebCore::Font::floatWidthForComplexText):
        * platform/win/UniscribeController.cpp:
        (WebCore::UniscribeController::UniscribeController):
        (WebCore::UniscribeController::offsetForPosition):
        * platform/win/UniscribeController.h:
        * platform/win/WebCoreTextRenderer.cpp:
        (WebCore::doDrawTextAtPoint):

2007-03-30  Anders Carlsson  <andersca@apple.com>

        Reviewed by Geoff.

        * plugins/win/PluginDatabaseWin.cpp:
        (WebCore::PluginDatabaseWin::addExtraPluginPath):
        * plugins/win/PluginDatabaseWin.h:
        New function for adding an extra plugin path, to be used by DRT.
        
        * plugins/win/PluginPackageWin.cpp:
        (WebCore::PluginPackageWin::load):
        Set the current directory tho the plugin directory while loading the plugin. Add new NPN callbacks.
        
        * plugins/win/PluginViewWin.cpp:
        (WebCore::PluginViewWin::invalidateRect):
        (WebCore::PluginViewWin::invalidateRegion):
        (WebCore::PluginViewWin::forceRedraw):
        Don't do anything if the plugin is windowed.
        
        * plugins/win/npapi.cpp:
        (NPN_PushPopupsEnabledState):
        (NPN_PopPopupsEnabledState):
        Add stubs.
        
        * plugins/win/npfunctions.h:
        Add new methods and merge some fixes from the open source version.

2007-03-29  Dave Hyatt  <hyatt@apple.com>

        Enable CG's local font cache.  rdar://problem/5070005
       
        Reviewed by aroben

        * platform/win/FontCacheWin.cpp:
        (WebCore::FontCache::platformInit):

2007-03-28  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Darin.

        - updates for <rdar://problem/4820817> Autoscroll is broken in Mail.app (message jumps around when trying to select text)


        * platform/win/ScrollViewWin.cpp:
        (WebCore::ScrollView::visibleContentRectConsideringExternalScrollers):
        (WebCore::ScrollView::scrollRectIntoViewRecursively):

2007-03-27  Dave Hyatt  <hyatt@apple.com>

        Fix for 5090964, arabic text is all jumbled in list boxes and popup menus (and in the
        Boomer app too).  The fallback font was not the right size because the font you're mapping
        from had to be selected into the HDC first.
       
        Reviewed by ggaren

        * ChangeLog:
        * platform/win/FontCacheWin.cpp:
        (WebCore::FontCache::getFontDataForCharacters):

2007-03-27  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Anders Carlsson.

        Fixed <rdar://problem/5085076> WebView stops painting after 
        loading stand-alone netflix movie preview in WMP format
        
        The stand-alone WMP plug-in seems to do all its drawing in
        the WM_ERASEBKGN phase, not the WM_PAINT phase, so our
        InvalidateRect call for plug-in windows needs to specify 
        'true' for whether the background region should be erased.
        
        A smart plug-in that wants to avoid background draws can
        still do so by just returning 1 in response to WM_ERASEBKGN,
        or by setting its background brush to NULL.

        * plugins/win/PluginViewWin.cpp:
        (WebCore::PluginViewWin::updateWindow):

2007-03-27  Anders Carlsson  <acarlsson@apple.com>

        Reviewed by Maciej.

        <rdar://problem/5091459>
        Crash when destroying "null plugin"
        
        <rdar://problem/5056845>
        Invoking itunes page has missing plugin icon on it
        
        * plugins/win/PluginViewWin.cpp:
        (WebCore::PluginViewWin::paintMissingPluginIcon):
        Clip before painting.
        
        (WebCore::freeStringArray):
        Add null-check.
        
        (WebCore::PluginViewWin::PluginViewWin):
        Initialize plugin names and values.
        
2007-03-27  Dave Hyatt  <hyatt@apple.com>

        Add support for glyph offsets to the GlyphBuffer.
       
        Reviewed by olliej

        * platform/win/FontWin.cpp:
        (WebCore::Font::drawGlyphs):
        * platform/win/UniscribeController.cpp:
        (WebCore::UniscribeController::shapeAndPlaceItem):

2007-03-26  Antti Koivisto  <antti@apple.com>

        Reviewed by Darin.
        
        Initialize new m_isContinuous field in WheelEvent

        * platform/win/WheelEventWin.cpp:
        (WebCore::PlatformWheelEvent::PlatformWheelEvent):

2007-03-27  Dave Hyatt  <hyatt@apple.com>

        Enable complex text.  Selection and small-caps support are now enabled with this patch.
        
        Reviewed by aroben

        * platform/win/FontWin.cpp:
        (WebCore::Font::selectionRectForComplexText):
        (WebCore::Font::drawComplexText):
        (WebCore::Font::floatWidthForComplexText):
        (WebCore::Font::offsetForPositionForComplexText):
        * platform/win/UniscribeController.cpp:
        (WebCore::UniscribeController::UniscribeController):
        (WebCore::UniscribeController::floatWidth):
        (WebCore::UniscribeController::offsetForPosition):
        (WebCore::UniscribeController::advance):
        (WebCore::UniscribeController::itemizeShapeAndPlace):
        (WebCore::UniscribeController::shapeAndPlaceItem):
        * platform/win/UniscribeController.h:
        (WebCore::UniscribeController::runWidthSoFar):

2007-03-26  Adele Peterson  <adele@apple.com>

        Reviewed by Adam.

        Fix for <rdar://problem/5088844> Popup menu is not positioned correctly on a yahoo comics page
        
        Fixes test: fast/forms/control-restrict-line-height.html
        
        This change was made in RenderThemeMac a while ago, and will fix the line height for aqua popup buttons, 
        buttons and search fields.
        
        * rendering/RenderThemeSafari.cpp: WebCore::RenderThemeSafari::setFontFromControlSize):
          Don't honor line-height for controls that have restricted font size.
          
2007-03-25  Brady Eidson  <beidson@apple.com>

        Reviewed by Oliver

        <rdar://problem/5086888> - WebHistory(Item) Leak

        * platform/win/COMPtr.h:
        (COMPtr::COMPtr): An an adoptRef constructor

2007-03-24  Adam Roben  <aroben@apple.com>

        Reviewed by Maciej.

        Fix <rdar://problem/5076610> Crash in PluginViewWin::updateWindow when
        loading a PDF page for the first time after installing Acrobat Reader

        Don't call PluginPackageWin::load() until the PluginViewWin has been
        inserted into the Widget tree. load() can result in arbitrary code
        execution (in this case, a EULA window appears which takes focus from
        the WebView, causing Frame::setIsActive(false) to be called), and we
        don't want to be in a transitional state when that happens.

        * plugins/win/PluginDatabaseWin.cpp:
        (WebCore::PluginDatabaseWin::createPluginView): Call PluginViewWin's
        one and only constructor.
        * plugins/win/PluginViewWin.cpp:
        (WebCore::PluginViewWin::setParent): Call init() after inserting
        ourselves into the Widget tree.
        (WebCore::PluginViewWin::PluginViewWin): Defer all real work until
        init() is called.
        (WebCore::PluginViewWin::init): Added. Calls m_plugin->load(), then
        does the rest of the work that was once done by the constructor.
        * plugins/win/PluginViewWin.h: Removed createNullPlugin and simplified
        constructor, added setParent override and new init method.

2007-03-24  Brady Eidson  <beidson@apple.com>

        Reviewed by Adam

        <rdar://problem/5086210> - Move RetainPtr to WTF for WebKitWin and the App

        * WebCore.vcproj/WebCore.vcproj: Add the ForwardingHeader to the vcprojs

2007-03-23  Adele Peterson  <adele@apple.com>

        Reviewed by Maciej.

        Fix for <rdar://problem/5083928> In editable webviews, caps lock key is ignored

        * platform/win/KeyEventWin.cpp: (WebCore::PlatformKeyboardEvent::PlatformKeyboardEvent):
        Removed code to store lowercase characters in m_text.  Now that we use the character code
        to create m_text this is already taken care of.  This does mean that m_unmodifiedText is
        not right.  This is used for accesskeys, which don't work yet, so that is covered in rdar://5085596.
        This also fixes line endings in this file.

2007-03-22  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Adam Roben.
        
        Fixed <rdar://problem/5082985> Select menus are too see-through

        Upped alpha value from 90 to 95. Menus will still seem a little
        more see-through than on the mac, since their backgrounds are
        white, not grey, but white matches other Windows browsers.
        
        * ChangeLog:
        * platform/win/PopupMenuWin.cpp:

2007-03-22  Anders Carlsson  <acarlsson@apple.com>

        Reviewed by Maciej.

        <rdar://problem/5081539>
        QT content is dupped on a page, if page is being previewed or printed.
        
        Don't update the frame geometry if the document is in printing mode.
        
        * plugins/win/PluginViewWin.cpp:
        (WebCore::PluginViewWin::setFrameGeometry):

2007-03-22  Beth Dakin  <bdakin@apple.com>

        Fix by Hyatt, reviewed and committed by me.

        Fix for <rdar://problem/5082360> Incomplete frame paint when 
        shrinking window @ google.com

        * platform/win/ScrollViewWin.cpp:
        (WebCore::ScrollView::setFrameGeometry): Wrong order!

2007-03-22  Dave Hyatt  <hyatt@apple.com>

        Fix for crasher in layout caused by paints that happen without layout being current.  Change to be
        more like the Mac and crawl the frame tree up front ensuring everyone is up to date before painting.

        Reviewed by olliej

        * platform/win/ScrollViewWin.cpp:
        (WebCore::ScrollView::setFrameGeometry):
        (WebCore::ScrollView::children):
        (WebCore::ScrollView::geometryChanged):

2007-03-22  Dave Hyatt  <hyatt@apple.com>

        Fix for mouse wheel issues.  Only return success from passWheelEventToSubframe is the event was
        actually accepted.
        
        * page/win/EventHandlerWin.cpp:
        (WebCore::EventHandler::passWheelEventToSubframe):

2007-03-21  Dave Hyatt  <hyatt@apple.com>

        Fix numerous bugs in RTL support.  Only use a directional override if the run
        tells us to.  Uniscribe will give incorrect results when measuring RTL runs as LTR if the
        directional override is set.  Switch from logical order for glyphs to visual order
        instead.  This is more similar to ATSUI (less similar to the fast code path, which always uses
        logical ordering for glyph generation).  Using visual ordering forces a lot of games to be played
        (have to walk the script items in backwards order for RTL for example), but Uniscribe does not combine
        glyphs properly if visual ordering is not used.
        
        Add support for justification, letter-spacing, word-spacing and rounding hacks.  The CG vs. ATSUI layout
        test now passes with identical results to the Mac.  The ATSUI spacing features layout test now
        generates correct results (although they are different from the Mac because we fall back to Arial for
        Hebrew instead of Lucida Grande).

        Reviewed by oliver

        * platform/win/UniscribeController.cpp:
        (WebCore::UniscribeController::UniscribeController):
        (WebCore::UniscribeController::resetControlAndState):
        (WebCore::UniscribeController::shapeAndPlaceItem):
        (WebCore::UniscribeController::shape):
        * platform/win/UniscribeController.h:

2007-03-20  Adam Roben  <aroben@apple.com>

        Reviewed by Ada.

        Added null-checks for ResourceHandle::cookieStorage() before passing it
        into CFNetwork functions, which are not null-safe.

        * platform/network/win/CookieJarWin.cpp:
        (WebCore::setCookies):
        (WebCore::cookies):

2007-03-20  Adam Roben  <aroben@apple.com>

        Build fix.

        * WebCore.vcproj/WebCore.vcproj: Added XPathNodeSet.(cpp|h).

2007-03-20  Adam Roben  <aroben@apple.com>

        Reviewed by Oliver.

        Made the metrics of styled selects match those on the Mac to get
        fast/forms/001.html passing.

        * rendering/RenderThemeSafari.cpp: Use 2px less padding for the
        select's arrow since the arrow is 2px wider than on the Mac.

2007-03-20  Adam Roben  <aroben@apple.com>

        Build fix.

        * platform/network/cf/ResourceHandleCFNet.cpp:
        (WebCore::makeFinalRequest): Fix typo.

2007-03-20  Dave Hyatt  <hyatt@apple.com>

        Land advanced text code path (turned off).
       
        Reviewed by aroben
        
        * WebCore.vcproj/WebCore.vcproj:
        * platform/win/FontCacheWin.cpp:
        (WebCore::FontCache::createFontPlatformData):
        * platform/win/FontDataWin.cpp:
        (WebCore::FontData::platformInit):
        (WebCore::FontData::platformDestroy):
        (WebCore::FontData::smallCapsFontData):
        (WebCore::FontData::scriptFontProperties):
        * platform/win/FontWin.cpp:
        (WebCore::Font::drawComplexText):
        (WebCore::Font::floatWidthForComplexText):
        (WebCore::Font::offsetForPositionForComplexText):
        * platform/win/UniscribeController.cpp: Added.
        (WebCore::UniscribeController::UniscribeController):
        (WebCore::UniscribeController::resetControlAndState):
        (WebCore::UniscribeController::shapeAndPlaceItem):
        (WebCore::UniscribeController::shape):
        * platform/win/UniscribeController.h: Added.
        (WebCore::UniscribeController::width):
        (WebCore::UniscribeController::glyphBuffer):

2007-03-20  Anders Carlsson  <acarlsson@apple.com>

        Reviewed by Adam.

        <rdar://problem/4921198>
        Cookie acceptance policy not settable

        * platform/network/cf/ResourceHandleCFNet.cpp:
        
        (WebCore::willSendRequest):
        (WebCore::willCacheResponse):
        Remove FIXMEs.
        
        (WebCore::makeFinalRequest):
        New function that makes a final CFURLRequest depending on cookie policy and whether any
        invalid SSL certificates should be ignored.
        
        (WebCore::ResourceHandle::start):
        (WebCore::ResourceHandle::loadResourceSynchronously):
        Use makeFinalRequest.
        
        (WebCore::ResourceHandle::cookieStorageAcceptPolicy):
        (WebCore::ResourceHandle::setCookieStorageAcceptPolicy):
        (WebCore::ResourceHandle::cookieStorage):
        (WebCore::ResourceHandle::setCookieStorage):
        (WebCore::ResourceHandle::setHostAllowsAnyHTTPSCertificate):
        New functions for setting cookie policy, the deafult cookie storage and whether invalid
        SSL certificates should result in an error.
        
        * platform/network/cf/ResourceRequestCFNet.cpp:
        (WebCore::ResourceRequest::doUpdatePlatformRequest):
        Set cookie storage, cookie policy and SSL properties.

        * platform/network/win/CookieJarWin.cpp:
        (WebCore::setCookies):
        (WebCore::cookies):
        Use same functions as the mac (sorta).
        
        (WebCore::cookiesEnabled):
        Implement this.

2007-03-19  Adam Roben  <aroben@apple.com>

        Reviewed by Anders and Darin.

        Added JavaScriptStatistics to the project for
        <rdar://problems/5071653>.

        * WebCore.vcproj/WebCore.vcproj: Added include/pthreads to the include
        path, and added JavaScriptStatistics.(cpp|h).

2007-03-18  David Hyatt  <hyatt@apple.com>

        Fix the CSS2 system font for 'menu' to match Mac.  Makes the system fonts layout test pass.

        * rendering/RenderThemeSafari.cpp:
        (WebCore::RenderThemeSafari::systemFont):

2007-03-18  Adam Roben  <aroben@apple.com>

        Reviewed by Hyatt.

        Changed the file upload button to say "Choose File" to match Mac.

        * platform/win/TemporaryLinkStubs.cpp:
        (WebCore::fileButtonChooseFileLabel):

2007-03-18  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Oliver Hunt.

        Fixed <rdar://problem/5061807> STRESS (2): Crash in PlatformScrollbar::setRect

        No test case because I can't seem to get the Windows DRT to cooperate. I'll try again tomorrow.

        The problem was that the FrameView would try to reset the document's scrollbars after having 
        been removed from the page, so its page pointer would be NULL. Added NULL checks.

        This situation ultimately results from the FrameView's non-trivial destructor, which
        creates a fragile dependency on tear-down timing. It looks like the timing on Windows
        is slightly different from the timing on Mac. I didn't see any obvious resulting bugs,
        though, so the NULL checks should be sufficient for now.

        * platform/win/ScrollViewWin.cpp:
        (WebCore::ScrollView::windowResizerRect):
        (WebCore::ScrollView::addToDirtyRegion):
        (WebCore::ScrollView::scrollBackingStore):
        (WebCore::ScrollView::updateBackingStore):

2007-03-17  David Hyatt  <hyatt@apple.com>

        The internal side of the patch that ensures Boomer paints twice on ibench.  Don't let the timer beat out
        that first paint.

        Reviewed by aroben

        * platform/win/ScrollViewWin.cpp:
        (WebCore::ScrollView::update):

2007-03-17  Adam Roben  <aroben@apple.com>

        Reviewed by Brady.

        Fix fast/dom/isindex-002.html.

        Add default strings to our two remaining unimplemented localizable
        strings in WebCore.

        * platform/win/TemporaryLinkStubs.cpp:
        (WebCore::searchableIndexIntroduction): Added English string from Mac.
        (WebCore::inputElementAltText): Ditto.

2007-03-17  Adele Peterson  <adele@apple.com>

        Reviewed by Hyatt.

        Fix for <rdar://problem/4960391> REGRESSION (r18922): onChange never fired after selecting an item from a menulist

        * platform/win/PopupMenuWin.cpp:
        (WebCore::PopupMenu::PopupMenu): Initialize m_focusedIndex to 0.  Instead of using the client to track the focused index, we'll
         keep track of it internally.  Our old behavior was trying to match Firefox by updating the selected index as you focus items, but that
         doesn't seem necessary if the selection never gets committed.
        (WebCore::PopupMenu::show): Initialize the focused index to the client's selected index.
        (WebCore::PopupMenu::setFocusedIndex): Remove the fireOnChange argument.  Remove the call to valueChanged.
        (WebCore::PopupMenu::focusedIndex): Return m_focusedIndex instead of getting this from the client.
        (WebCore::PopupMenu::down): Use the focusedIndex.
        (WebCore::PopupMenu::up): ditto.
        (WebCore::PopupMenu::paint): Paint a selected appearance for the item with the focused index.

2007-03-16  Adele Peterson  <adele@apple.com>

        Reviewed by Lou.

        Fix for <rdar://problem/5065040> cannot mousedown + drag in a <select> menu

        * platform/win/PopupMenuWin.cpp:
        (WebCore::PopupMenu::show): Set the capture when the popup window comes up.
        (WebCore::PopupWndProc): Release the capture only when the mouse is not down, and the mouse moves outside the popup window, 
         or if you mouse up inside the window, and you're about to hide the popup.  The mouse will get recaptured if you mouse down
         again in the window.

2007-03-15  Brady Eidson  <beidson@apple.com>

        Reviewed by Oliver

        CFNetwork related cleanup that was a work around for previous deficiencies in CFURLDownload
        This might fix some of the random crashers we see on stress testing if they end up 
        downloading links.

        * platform/network/cf/ResourceHandleCFNet.cpp:
        (WebCore::ResourceHandleInternal::~ResourceHandleInternal):  Always call cancel if theres a
          connection - the ref-count-check hack is no longer neccesary
        (WebCore::ResourceHandle::releaseConnectionForDownload): Give up the CFURLConnection without
          derefing it

2007-03-15  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Geoff and Steve.
        
        - fixed <rdar://problem/5029776> iBench JavaScript test slower than Opera
        - fixes to use FastMalloc on Windows

        * config.h: Don't force USE_SYSTEM_MALLOC

2007-03-15  Adam Roben  <aroben@apple.com>

        Rubberstamped by Hyatt.

        * platform/win/FontDataWin.cpp:
        (WebCore::FontData::platformInit): Move the code to get the font face
        to the top of the function for easier debugging.
        * platform/win/FontPlatformDataWin.cpp:
        (WebCore::FontPlatformData::FontPlatformData): ASSERT that we got a
        valid CGFontRef back from CG, as CG and GDI should agree on the fonts
        installed.

2007-03-14  Anders Carlsson  <acarlsson@apple.com>

        Reviewed by Adam.

        Use CFURLResponseCopySuggestedFilename.
        
        * platform/network/cf/ResourceResponseCFNet.cpp:
        (WebCore::suggestedFilenameForResponse):

2007-03-14  Adam Roben  <aroben@apple.com>

        Reviewed by Hyatt.

        Use CG to get xHeight.

        * platform/win/FontDataWin.cpp:
        (WebCore::scaleEmToUnits): Made robust against divide-by-zero errors.
        (WebCore::FontData::platformInit): Ported Mac code to get xHeight using CG.

2007-03-14  Anders Carlsson  <acarlsson@apple.com>

        Build fixes.
        
        * platform/graphics/win/ImageWin.cpp:
        (WebCore::Image::loadPlatformResource):
        * platform/win/EditorWin.cpp:

2007-03-13  Adam Roben  <aroben@apple.com>

        Reviewed by Anders.

        * platform/win/FontDataWin.cpp:
        (WebCore::scaleEmToUnits): Ported from FontDataMac.
        (WebCore::FontData::platformInit): Use CG for metrics, and apply Mac's
        line-height hack for Times, Helvetica, and Courier.
        (WebCore::FontData::platformWidthForGlyph): Call wkGetGlyphAdvances to
        use some CG SPI to match Mac.

2007-03-12  Darin Adler  <darin@apple.com>

        * WebCore.vcproj/WebCore.vcproj: Added new JavaScript wrapper derived source files.

2007-03-12  Anders Carlsson  <acarlsson@apple.com>

        Reviewed by Darin.

        <rdar://problem/5054694>
        Repro crash when viewing fast/dom/HTMLObjectElement/object-as-frame.html
        
        * bridge/win/FrameWin.cpp:
        (WebCore::Frame::createScriptInstanceForWidget):
        Return 0 for frame views.

2007-03-12  Anders Carlsson  <acarlsson@apple.com>

        Reviewed by Adam.

        <rdar://problem/5054713>
        Crash in suggestedFilenameForResponse in two fast/encoding tests.
        
        Add null checks.
        
        * platform/network/cf/ResourceResponseCFNet.cpp:
        (WebCore::suggestedFilenameForResponse):

2007-03-12  Adele Peterson  <adele@apple.com>

        Reviewed by Oliver.

        Fix for <rdar://problem/5053618> Disable "recent searches" search field menu.

        * platform/win/SearchPopupMenuWin.cpp: (WebCore::SearchPopupMenu::enabled):

2007-03-12  Adele Peterson  <adele@apple.com>

        Reviewed by Oliver.
        
        WebCore part of fix for <rdar://problem/5044790> preventing default of keypress event doesn't work (affects .mac)

        * platform/win/KeyEventWin.cpp:
        (WebCore::singleCharacterString): Added inline keyword.   
        (WebCore::PlatformKeyboardEvent::PlatformKeyboardEvent):
        Renamed arguments to be more meaningful.  Added characterCode argument to be used when constructing m_text.

2007-03-12  Adele Peterson  <adele@apple.com>

        Reviewed by Oliver.

        Forking KeyEventWin.cpp from revision 20118.

        * WebCore.vcproj/WebCore.vcproj:
        * platform/win/KeyEventWin.cpp: Added.

2007-03-11  Oliver Hunt  <oliver@apple.com>

        Reviewed by Adele.

        Removed Frame::respondToChangedSelection stub
        added Editor::markMisspellings stub

        * platform/win/TemporaryLinkStubs.cpp:
        (WebCore::Editor::markMisspellings):

2007-03-10  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Darin Adler.

        Fixed <rdar://problem/4587763> PAC file: lock inversion between QT and 
        JSCore causes a hang @ www.panoramas.dk
        
        See JavaScriptCore ChangeLog for details.
        
        Stress test doesn't show any problems.
        
        Drop the JSLock before making calls through the plug-in API from functions
        that may have been called by JavaScript.
        
        * plugins/win/PluginViewWin.cpp:
        (WebCore::PluginViewWin::paint):
        (WebCore::PluginViewWin::handleKeyboardEvent):
        (WebCore::PluginViewWin::handleMouseEvent):
        (WebCore::PluginViewWin::setNPWindowRect):
        (WebCore::PluginViewWin::start):
        (WebCore::PluginViewWin::stop):
        (WebCore::PluginViewWin::performRequest):
        (WebCore::PluginViewWin::bindingInstance):

2007-03-09  Oliver Hunt  <oliver@apple.com>

        Reviewed by John.

        Fix the doubled text in the image used to drag a link

        * platform/win/WebCoreTextRenderer.cpp:
        (WebCore::WebCoreDrawDoubledTextAtPoint):

2007-03-09  Anders Carlsson  <acarlsson@apple.com>

        Reviewed by Adam.

        Implement setting the suggested filename for a response.
        
        * platform/network/cf/ResourceResponseCFNet.cpp:
        (WebCore::filenameFromHTTPContentDisposition):
        (WebCore::filenameHasSaneExtension):
        (WebCore::suggestedFilenameForResponse):
        (WebCore::ResourceResponse::doUpdateResourceResponse):
        * platform/win/MimeTypeRegistryWin.cpp:
        (WebCore::getMIMETypeForUTI):
        
        (WebCore::mimeTypeForExtension):
        Fix two bugs in this function.
        
        (WebCore::MimeTypeRegistry::getPreferredExtensionForMIMEType):

2007-03-09  Anders Carlsson  <acarlsson@apple.com>

        * plugins/win/PluginViewWin.cpp:
        (WebCore::PluginViewWin::performRequest):
        Fixup comments and remove an obsolete FIXME.

2007-03-09  Oliver Hunt  <oliver@apple.com>

        Reviewed by Steve.

        Executing a script for a plugin can cause cause this to be deleted
        so we take a reference to our parent prior to executing the script

        * plugins/win/PluginViewWin.cpp:
        (WebCore::PluginViewWin::performRequest):

2007-03-08  Oliver Hunt  <oliver@apple.com>

        Reviewed by Steve.

        Allow webloc files to be dropped onto the webview
        
        <rdar://problem/4883564> Regression: cannot open webloc file by dnd to Boomer's window

        * platform/win/DragDataWin.cpp:
        (WebCore::cfHDropFormat):
           Clipboard format for HDROP, non-static as i will need it elsewhere in the future 
        (WebCore::getWebLocData):
           Extract a url from a webloc file
        (WebCore::getURL):
           Call getWebLocData

2007-03-08  Steve Falkenburg  <sfalken@apple.com>

        Fix Production build more

        * WebCore.vcproj/WebCore.vcproj:

2007-03-08  Steve Falkenburg  <sfalken@apple.com>

        Production build fix

        * WebCore.vcproj/WebCore.vcproj:

2007-03-08  Adam Roben  <aroben@apple.com>

        Reviewed by Steve.
        
        Fix <rdar://problem/4969070> Failed error pages show "unknown error"
        rather than specific error

        Make ResourceError aware of kCFErrorDomainCFNetwork.

        * platform/network/cf/ResourceErrorCF.cpp:
        (WebCore::ResourceError::ResourceError): Added case for
        kCFErrorDomainCFNetwork.

2007-03-06  Adam Roben  <aroben@apple.com>

        Fixing the build while semi-blind is fun.

        * platform/win/TemporaryLinkStubs.cpp:
        (WebCore::supportedKeySizes): Need a namespace.
        (WebCore::signedPublicKeyAndChallengeString): Ditto.

2007-03-06  Adam Roben  <aroben@apple.com>

        It works better if you use valid C++ syntax.

        * platform/win/TemporaryLinkStubs.cpp:

2007-03-06  Adam Roben  <aroben@apple.com>

        Build fix.

        * platform/win/TemporaryLinkStubs.cpp: Added missing stubs.

2007-03-06  Adam Roben  <aroben@apple.com>

        Reviewed by Anders.

        Always keep rounding hacks on.

        * platform/win/FileChooserWin.cpp:
        (WebCore::FileChooser::basenameForWidth): Tell StringTruncator to keep
        rounding hacks on.
        * platform/win/WebCoreTextRenderer.cpp:
        (WebCore::WebCoreTextFloatWidth): Ditto.

2007-03-06  Anders Carlsson  <acarlsson@apple.com>

        Build fix.
        
        * plugins/win/PluginViewWin.cpp:
        (WebCore::PluginViewWin::userAgent):

2007-03-05  Anders Carlsson  <acarlsson@apple.com>

        Reviewed by Adam.

        <rdar://problem/5041348>
        Can't watch videos at cnn.com
        
        * plugins/win/PluginStreamWin.cpp:
        (WebCore::PluginStreamWin::cancelAndDestroyStream):
        Change this function back to call call stop() after destroyStream(). Also, make sure to
        protect the stream since destroyStream can eventually, well, destroy it.

2007-03-05  Anders Carlsson  <acarlsson@apple.com>

        Reviewed by Adam.

        <rdar://problem/4987743>
        Regression: java content is represented as broken images on pages
        
        * plugins/win/PluginPackageWin.cpp:
        (WebCore::PluginPackageWin::load):
        Make sure to set the size of the NPPluginFuncs struct correctly.

2007-03-05  Steve Falkenburg  <sfalken@apple.com>

        Fix build

        * plugins/win/PluginStreamWin.cpp:
        (WebCore::PluginStreamWin::stop): Call cancel() instead of stopLoading(), since the latter was removed.

2007-03-02  Adam Roben  <aroben@apple.com>

        Reviewed by Anders.

        Added optional underlining of a single character to
        WebCoreTextRenderer.

        No layout tests possible.

        * platform/win/WebCoreTextRenderer.cpp:
        (WebCore::doDrawTextAtPoint): Added. This is an extraction of the code
        from DrawTextAtPoint that now also contains the underlining code.
        (WebCore::WebCoreDrawTextAtPoint): Call the helper function.
        (WebCore::WebCoreDrawDoubledTextAtPoint): Ditto.
        * platform/win/WebCoreTextRenderer.h: Added optional underlinedIndex
        parameters.

2007-03-01  Anders Carlsson  <acarlsson@apple.com>

        Reviewed by Tim.

        * plugins/win/npfunctions.h:
        Fix tyop.
        
2007-02-28  Adam Roben  <aroben@apple.com>

        Reviewed by Anders.

        Clean up WebCoreTextRenderer. WebCoreDrawTextAtPoint now just draws
        text at a point. It doesn't center truncate, clip, or modify alignment.

        No layout test possible.

        * platform/win/WebCoreTextRenderer.cpp:
        (WebCore::WebCoreDrawTextAtPoint): Use only WebCore types, and don't
        center truncate or modify alignment.
        (WebCore::WebCoreDrawDoubledTextAtPoint): Moved from WebKitGraphics.cpp.
        (WebCore::WebCoreTextFloatWidth): Added.
        * platform/win/WebCoreTextRenderer.h: Updated/added declarations.

2007-02-28  Adele Peterson  <adele@apple.com>

        Reviewed by Adam.

        Fix for <rdar://problem/4887423> REGRESSION: search results popup menu strings are not localized
        and <rdar://problem/3517227> accessibility-related strings in WebCore are not localized

        * platform/win/TemporaryLinkStubs.cpp:
        (WebCore::searchMenuNoRecentSearchesText):
        (WebCore::searchMenuRecentSearchesText):
        (WebCore::searchMenuClearRecentSearchesText):
        (WebCore::AXWebAreaText):
        (WebCore::AXLinkText):
        (WebCore::AXListMarkerText):
        (WebCore::AXImageMapText):
        (WebCore::AXHeadingText):

2007-02-28  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Adam.

        - fixed <rdar://problem/5005120> Crash: selecting View all RSS Articles from context menu of bookmark folder

        * platform/network/cf/ResourceRequestCFNet.cpp:
        (WebCore::ResourceRequest::doUpdatePlatformRequest): Use RetainPtr
        instead of explicit release, as this was caused by CFRelease on
        a null pointer, and REtainPtr is tolerant.

2007-02-27  Beth Dakin  <bdakin@apple.com>

        Reviewed by Adam.

        <rdar://problem/4956528> Implement Pasteboard::writeImage for 
        Boomer context menus

        * platform/win/PasteboardWin.cpp:
        (WebCore::Pasteboard::writeImage): Copy a bitmap to the clipboard.

2007-02-27  Oliver Hunt  <oliver@apple.com>

        Reviewed by Lou and Steve.

        Add a store for current Cursor to fix <rdar://problem/4788352>

        * platform/win/WidgetWin.cpp:
        (WebCore::Widget::setCursor):

2007-02-26  Oliver Hunt  <oliver@apple.com>

        Reviewed by Maciej.

        To stop the drag image for transparent images from looking 
        ugly (especially fully transparent images) we render the 
        image to a white background prior to passing the image on to 
        Windows
        
        <rdar://problem/5015946>

        * platform/win/DragImageWin.cpp:
        (WebCore::createDragImageFromImage):

2007-02-26  Adam Roben  <aroben@apple.com>

        Reviewed by Adele.

        * platform/win/GraphicsContextWin.cpp: Get rid of so-five-hours-ago SVG_SUPPORT.

2007-02-26  Adam Roben  <aroben@apple.com>

        Build fix.

        * config.h: Remove redundant #define.
        * WebCore.vcproj/WebCore.vcproj: Update to new macros.

2007-02-26  Adam Roben  <aroben@apple.com>

        Rubberstamped by Ada.

        * platform/graphics/svg/cg/SVGResourceFilterCg.cpp: Make #if match the header file.

2007-02-26  Adam Roben  <aroben@apple.com>

        Reviewed by Darin.

        Build fix.

        * WebCore.vcproj/build-generated-files.sh: Updated FEATURE_DEFINES.
        * platform/graphics/svg/cg/SVGResourceFilterCg.cpp: Use shiny new ENABLE(SVG).
        * platform/graphics/svg/cg/SVGResourceMaskerCg.cpp: Ditto.

2007-02-25  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Adam.

        - fixed layout test failure in fast/overflow/scrollRevealButton
        
        I added a new ScrollView method, fullyClippedContentRect, that vies the content rect
        as clipped by all ancestor scroll views, not just this one. Currently it only works
        correctly on mac however. visibleContentRect, only accounting for the clipping from
        this particular scroll view, is sufficient for most purposes.

        * platform/win/ScrollViewWin.cpp:
        (WebCore::ScrolView::fullyClippedContentRect):

2007-02-24  Adam Roben  <aroben@apple.com>

        Change #if to #ifdef to match style.

        * platform/win/PopupMenuWin.cpp:
        (WebCore::PopupMenu::show):

2007-02-24  Adam Roben  <aroben@apple.com>

        Reviewed by Steve.

        Fix <rdar://problem/5013502> REGRESSION: <select> menus are not
        animating smoothly

        This was caused by making the menus partially transparent in r12250.

        * platform/win/PopupMenuWin.cpp:
        (WebCore::PopupMenu::show): Disable animations.

2007-02-23  Anders Carlsson  <acarlsson@apple.com>

        Reviewed by Adam.

        <rdar://problem/4761543>
        nike.com doesn't finish loading if Flash plugin is installed.
        
        If a plugin requests a JavaScript URL with a non null frame target, execute the JavaScript expression. If the result 
        is not "undefined", replace the contents of the frame with the result converted to a string.

        * plugins/win/PluginViewWin.cpp:
        (WebCore::getString):
        (WebCore::PluginViewWin::performRequest):
        (WebCore::PluginViewWin::requestTimerFired):

2007-02-22  Oliver Hunt  <oliver@apple.com>

        rs = adam
        
        Replacing radar numbers from previous patch with one
        the isn't fictitious <rdar://problem/5018591>

        * platform/win/CursorWin.cpp:
        (WebCore::columnResizeCursor):
        (WebCore::rowResizeCursor):
        (WebCore::verticalTextCursor):

2007-02-22  Oliver Hunt  <oliver@apple.com>

        Reviewed by Ada.

        Implemented a couple more cursor methods

        * platform/win/CursorWin.cpp:
        (WebCore::columnResizeCursor):
        (WebCore::rowResizeCursor):
        (WebCore::verticalTextCursor):
          Added radar bug reference <rdar://problem/5018452>
        (WebCore::progressCursor):
        (WebCore::noDropCursor):
        (WebCore::notAllowedCursor):
          Making them return the correct cursor

2007-02-22  Oliver Hunt  <oliver@apple.com>

        Reviewed by Anders.

        Removing accessive COMPtr use from ClipboardWin constructors
        Adding data verification to ClipoardWin::SetData
        Small amount code tidying, and allowing for failure when writing an URL

        * page/win/EventHandlerWin.cpp:
        (WebCore::EventHandler::createDraggingClipboard):
          Updated for new ClipboardWin constructor
        * platform/win/ClipboardWin.cpp:
        (WebCore::ClipboardWin::ClipboardWin):
        (WebCore::writeURL):
        (WebCore::ClipboardWin::getData):
          Tidying code, and allowing failure
        (WebCore::ClipboardWin::setData):
          Verifying that we're writing a valid url
                    
        * platform/win/ClipboardWin.h:
        * platform/win/EditorWin.cpp:
        (WebCore::Editor::newGeneralClipboard):
          Updated for new ClipboardWin constructor

2007-02-22  Oliver Hunt  <oliver@apple.com>

        Reviewed by Ada, Lou, and Steve.

        Last of the major Drag and drop implementation 
        patches for windows:
        * Adds support for DOM Clipboard during drag operations
        * Un-statics and refactors a few Pasteboard and DragData functions
          to allow them to share implementation with ClipboardWin and other 
          drag logic
        * Moves COMPtr.h from WebKit to WebCore
        * Adds WCDataObject, which is basically a direct copy of
          SDataObject from the app, with a few modifications to support
          DOM clipboard functionality.  Also includes a few suggestions
          from Ada and Steve, mostly involving memory management :D
        
        This resolves 
        <rdar://problem/4821407> Cannot drag link to bookmarks bar to create new link
        <rdar://problem/4869496> User Interaction Essentials: Drag

        * WebCore.vcproj/WebCore.vcproj:
          Adding new files
          
        * page/win/DragControllerWin.cpp:
        (WebCore::DragController::maxDragImageSize):
          Maximum size of drag image to allow sharp edges
          is 208x208
          
        * page/win/EventHandlerWin.cpp:
        (WebCore::EventHandler::createDraggingClipboard):
          Properly implemented now
          
        * platform/win/ClipboardWin.cpp:
        (WebCore::):
        (WebCore::clipboardTypeFromMIMEType):
        (WebCore::ClipboardWin::ClipboardWin):
        (WebCore::ClipboardWin::~ClipboardWin):
        (WebCore::writeURL):
          Helper function to write a url to a WCDataObject
        (WebCore::ClipboardWin::clearData):
        (WebCore::ClipboardWin::clearAllData):
        (WebCore::ClipboardWin::getData):
        (WebCore::ClipboardWin::setData):
        (WebCore::addMimeTypesForFormat):
          Helper function for ClipboardWin::types
        (WebCore::ClipboardWin::types):
        (WebCore::ClipboardWin::setDragImage):
        (WebCore::ClipboardWin::setDragImageElement):
          General setters, match behaviour of WebKit/Mac
        (WebCore::ClipboardWin::createDragImage):
          Creates a drag image for a DOM specified Image is specified
          can't currently generate an image for an arbitrary element
        (WebCore::imageToMarkup):
          Wraps a url in an img tag
        (WebCore::ClipboardWin::declareAndWriteDragImage):
        (WebCore::ClipboardWin::writeURL):
        (WebCore::ClipboardWin::writeRange):
        (WebCore::ClipboardWin::hasData):
          Implement Clipboard required by DragController.
          Provides read/write DOM Clipboard implementation for dragging,
          read only when accessing system clipboard.
          
        * platform/win/ClipboardWin.h:
        (WebCore::ClipboardWin::dataObject):
          Provide an accessor for the dataObject
          
        * platform/win/DragDataWin.cpp:
        (WebCore::urlWFormat):
        (WebCore::urlFormat):
        (WebCore::plainTextFormat):
        (WebCore::plainTextWFormat):
        (WebCore::texthtmlFormat):
        (WebCore::htmlFormat):
        (WebCore::getURL):
        (WebCore::DragData::asURL):
        (WebCore::getPlainText):
        (WebCore::DragData::asPlainText):
        (WebCore::DragData::asFragment):
          Refactoring and removing of a few static modifiers to allow sharing with Clipboard
          
        * platform/win/DragImageWin.cpp:
        (WebCore::dragImageSize):
        (WebCore::deleteDragImage):
        (WebCore::allocImage):
        (WebCore::createCgContextFromBitmap):
        (WebCore::scaleDragImage):
        (WebCore::dissolveDragImageToFraction):
        (WebCore::createDragImageFromImage):
        (WebCore::createDragImageIconForCachedImage):
          Implement DragImage functions
          
        * platform/win/EditorWin.cpp:
        (WebCore::Editor::newGeneralClipboard):
          Creating a Clipboard that wraps the system clipboard
          
        * platform/win/PasteboardWin.cpp:
        (WebCore::createGlobalData):
        (WebCore::markupToCF_HTML):
        (WebCore::urlToMarkup):
        (WebCore::replaceNBSP):
          removing 'static'
          
        * platform/win/WCDataObject.cpp: Added.
        (WebCore::WCEnumFormatEtc::WCEnumFormatEtc):
        (WebCore::WCEnumFormatEtc::QueryInterface):
        (WebCore::WCEnumFormatEtc::AddRef):
        (WebCore::WCEnumFormatEtc::Release):
        (WebCore::WCEnumFormatEtc::Next):
        (WebCore::WCEnumFormatEtc::Skip):
        (WebCore::WCEnumFormatEtc::Reset):
        (WebCore::WCEnumFormatEtc::Clone):
        (WebCore::WCDataObject::createInstance):
        (WebCore::WCDataObject::WCDataObject):
        (WebCore::WCDataObject::~WCDataObject):
        (WebCore::WCDataObject::QueryInterface):
        (WebCore::WCDataObject::AddRef):
        (WebCore::WCDataObject::Release):
        (WebCore::WCDataObject::GetData):
        (WebCore::WCDataObject::GetDataHere):
        (WebCore::WCDataObject::QueryGetData):
        (WebCore::WCDataObject::GetCanonicalFormatEtc):
        (WebCore::WCDataObject::SetData):
        (WebCore::WCDataObject::CopyMedium):
        (WebCore::WCDataObject::EnumFormatEtc):
        (WebCore::WCDataObject::DAdvise):
        (WebCore::WCDataObject::DUnadvise):
        (WebCore::WCDataObject::EnumDAdvise):
        (WebCore::WCDataObject::clearData):
          Copied from SDataObject in the App createInstance and clearData
          are the only new functions.  clearData removes any entries in the
          object with a specified CLIPFORMAT.
          Have also made a few error and memory handling changes suggested
          by Steve and Ada
        * platform/win/WCDataObject.h: Added.
          Header for the above

2007-02-22  Adam Roben  <aroben@apple.com>

        Reviewed by Adele.

        Make sure we always paint the right size search results icon.

        * rendering/RenderThemeSafari.cpp:
        (WebCore::RenderThemeSafari::paintSearchFieldCancelButton): Removed unused parameter.
        (WebCore::RenderThemeSafari::paintSearchFieldDecoration): Ditto.
        (WebCore::RenderThemeSafari::paintSearchFieldResultsDecoration): Base
        the control size off of the search field rect to ensure that the icon
        and the control are the same size.
        (WebCore::RenderThemeSafari::paintSearchFieldResultsButton): Ditto.

2007-02-21  Adam Roben  <aroben@apple.com>

        Reviewed by Adele.

        Updated for SafariTheme changes.

        * rendering/RenderThemeSafari.cpp:
        (WebCore::RenderThemeSafari::paintMenuList): Use DropDownButtonPart.

2007-02-20  Adele Peterson  <adele@apple.com>

        Reviewed by Darin.

        * WebCore.vcproj/WebCore.vcproj: Added JSHTMLSelectElementCustom.h

2007-02-20  Beth Dakin  <bdakin@apple.com>

        Reviewed by Maciej.

        Some changes needed to match moving writeImage() to the Pasteboard 
        on the Mac.

        * platform/win/PasteboardWin.cpp:
        (WebCore::Pasteboard::writeURL): Now takes a bool indicating if the 
        url if for an image.
        (WebCore::Pasteboard::writeImage): This is just a stub for now. I 
        am putting it here instead of on TemporaryLinkStubs because I plan 
        on implementing it very soon.

2007-02-20  Adam Roben  <aroben@apple.com>

        Reviewed by Darin and Anders.

        Fix <rdar://problem/5003318> App: Status bar text is more difficult to
        read than Mac OS X Safari

        * WebCore.vcproj/WebCore.vcproj: Added new files.
        * platform/win/FileChooserWin.cpp:
        (WebCore::FileChooser::openFileChooser):
        (WebCore::FileChooser::basenameForWidth): Added truncation.
        * platform/win/WebCoreTextRenderer.cpp:
        (WebCore::WebCoreDrawTextAtPoint): Added bottomAlign and centerTruncate parameters.
        * platform/win/WebCoreTextRenderer.h: Ditto.

2007-02-20  Alice Liu  <alice.liu@apple.com>

        Build fix

        * WebCore.vcproj/WebCore.vcproj:
        Added PositionIterator.cpp & h

2007-02-20  Steve Falkenburg  <sfalken@apple.com>

        Production build fix

        * WebCore.vcproj/WebCore.vcproj:

2007-02-19  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Adam Roben.

        Fixed some leaks in RenderThemeSafari.
        
        I just merged some of the code I wrote for RenderThemeMac.
        
        * rendering/RenderThemeSafari.cpp:
        (WebCore::RenderThemeSafari::paintMenuListButtonGradients):
        (WebCore::RenderThemeSafari::paintSliderTrack):

2007-02-19  Anders Carlsson  <acarlsson@apple.com>

        Reviewed by Oliver.

        Fix build.

        * page/win/DragControllerWin.cpp:
        (WebCore::DragController::maxDragImageSize):

2007-02-19  Adele Peterson  <adele@apple.com>

        Reviewed by Adam.

        Fix for <rdar://problem/5006882> PlatformScrollbarSafari doesn't support small scroll bars

        * platform/win/PlatformScrollBar.h:
        * platform/win/PlatformScrollBarSafari.cpp:
        (WebCore::):
        (WebCore::PlatformScrollbar::PlatformScrollbar):
        (WebCore::trackRepaintRect):
        (WebCore::buttonRepaintRect):
        (WebCore::PlatformScrollbar::invalidateTrack):
        (WebCore::PlatformScrollbar::invalidatePart):
        (WebCore::PlatformScrollbar::backButtonRect):
        (WebCore::PlatformScrollbar::forwardButtonRect):
        (WebCore::PlatformScrollbar::trackRect):
        (WebCore::PlatformScrollbar::splitTrack):
        (WebCore::PlatformScrollbar::thumbLength):
        (WebCore::PlatformScrollbar::paintButton):
        (WebCore::PlatformScrollbar::paintTrack):
        (WebCore::PlatformScrollbar::paintThumb):
        (WebCore::PlatformScrollbar::horizontalScrollbarHeight):
        (WebCore::PlatformScrollbar::verticalScrollbarWidth):
        * platform/win/PopupMenuWin.cpp:
        (WebCore::PopupMenu::show):
        (WebCore::PopupMenu::calculatePositionAndSize):

2007-02-19  Anders Carlsson  <acarlsson@apple.com>

        Reviewed by Adam.

        <rdar://problem/5008424>
        Regression: Crash loading mp3.com
        
        * platform/network/cf/ResourceErrorCF.cpp:
        (WebCore::ResourceError::ResourceError):
        Handle null resource errrors.

2007-02-19  Adam Roben  <aroben@apple.com>

        Build fix.

        * bridge/win/FrameWin.cpp:
        (WebCore::computePageRectsForFrame): This is no longer an instance
        method of Frame.
        * bridge/win/FrameWin.h:

2007-02-18  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Oliver.

        - Adapt for Lars's patch to clean up Frame

        * bridge/win/FrameWin.cpp:
        (WebCore::Frame::cleanupPlatformScriptObjects):
        (WebCore::Frame::createScriptInstanceForWidget):
        (WebCore::Frame::computePageRects):
        (WebCore::drawRectIntoContext):
        (WebCore::imageFromSelection):
        (WebCore::Frame::isCharacterSmartReplaceExempt):
        * bridge/win/FrameWin.h:
        * page/win/EventHandlerWin.cpp:
        * platform/win/ScrollViewWin.cpp:
        (WebCore::ScrollView::windowResizerRect):
        (WebCore::ScrollView::addToDirtyRegion):
        (WebCore::ScrollView::scrollBackingStore):
        (WebCore::ScrollView::updateBackingStore):
        * platform/win/TemporaryLinkStubs.cpp:
        (Frame::print):
        (Frame::issueTransposeCommand):
        (WebCore::Frame::respondToChangedSelection):
        * plugins/win/PluginDatabaseWin.cpp:
        (WebCore::PluginDatabaseWin::createPluginView):
        * plugins/win/PluginDatabaseWin.h:
        * plugins/win/PluginViewWin.cpp:
        (WebCore::PluginViewWin::createNullPluginView):
        (WebCore::PluginViewWin::PluginViewWin):
        * plugins/win/PluginViewWin.h:

2007-02-18  Ada Chan  <adachan@apple.com>

        Reviewed by Adam.

        Move app text controls to use WebView.
        - added a method to let us render text using WebKit.

        * WebCore.vcproj/WebCore.vcproj:
        * platform/win/WebCoreTextRenderer.cpp: Added.
        (WebCore::WebCoreDrawTextAtPoint):
        * platform/win/WebCoreTextRenderer.h: Added.

2007-02-18  Adam Roben  <aroben@apple.com>

        Rubberstamped by Hyatt.

        Fix <rdar://problem/5006918> All selected text is black, even if it is
        some other color when not selected

        * platform/win/PopupMenuWin.cpp:
        (WebCore::PopupMenu::paint): Use the listbox colors for selected items.
        * rendering/RenderThemeSafari.cpp: Removed platformActiveSelectionForegroundColor.
        * rendering/RenderThemeSafari.h: Ditto.

2007-02-18  Adam Roben  <aroben@apple.com>

        Reviewed by Hyatt.

        Fix <rdar://problem/5006872> <select> popups need Aqua scroll bars

        PopupMenuWin now uses a PlatformScrollbar.

        * platform/win/PlatformScrollBarSafari.cpp:
        (WebCore::PlatformScrollbar::hitTest): Allow hit testing even when we
        don't have a parent widget.
        (WebCore::PlatformScrollbar::autoscrollPressedPart): Don't autoscroll
        if nothing is pressed.
        * platform/win/PopupMenuWin.cpp: m_scrollOffset is now measured in menu
        items, not in pixels.
        (WebCore::PopupMenu::PopupMenu): Initialize new member.
        (WebCore::PopupMenu::show): Make popups partially transparent, don't
        use Windows' built-in scroll bars, and create a PlatformScrollbar if
        needed.
        (WebCore::PopupMenu::calculatePositionAndSize): Get the scroll bar's
        width from PlatformScrollbar instead of from Windows.
        (WebCore::PopupMenu::visibleItems): Added.
        (WebCore::PopupMenu::listIndexAtPoint): Definition moved here from header.
        (WebCore::PopupMenu::invalidateItem): Update for m_scrollOffset change,
        and shrink the damage rect to not invalidate the scroll bar unnecessarily.
        (WebCore::PopupMenu::scrollToRevealSelection): Updated to use PlatformScrollbar.
        (WebCore::PopupMenu::updateFromElement): Changed bool to BOOL.
        (WebCore::PopupMenu::paint): Updated for m_scrollOffset change, and
        paint the scroll bar at the end.
        (WebCore::PopupMenu::valueChanged): Added. Code comes from the old scrollTo method.
        (WebCore::PopupMenu::windowClipRect): Added.
        (WebCore::PopupWndProc):
            - Set up the scroll bar in WM_SIZE
            - Send mouse events to the scroll bar when appropriate
            - Get rid of handling of WM_VSCROLL events (we shouldn't receive these anymore)

2007-02-18  Oliver Hunt  <oliver@apple.com>

        Reviewed by Adam.

        Updated to include stubs for drag and drop methods
        Added DragImage[Win].cpp to project file
        Now uses platform independent EventHandler::handleDrag

        * WebCore.vcproj/WebCore.vcproj:

        * bridge/win/FrameWin.cpp:
        (WebCore::Frame::dragImageForSelection):
          Just wrap the platform specific selectionImage method

        * page/win/DragControllerWin.cpp:
          Defining constants for drag images -- basically copied the Mac definitions

        * page/win/EventHandlerWin.cpp:
        (WebCore::EventHandler::createDraggingClipboard):
          Basic implementation -- needs to create an IDataObject to be useful
          but ClipboardWin is basically unimplemented anyway so not yet a problem

        * platform/win/ClipboardWin.cpp:
        (WebCore::ClipboardWin::createDragImage):
        (WebCore::ClipboardWin::declareAndWriteDragImage):
        (WebCore::ClipboardWin::writeURL):
        (WebCore::ClipboardWin::writeRange):
        (WebCore::ClipboardWin::hasData):
          Stubs

        * platform/win/ClipboardWin.h:
          Updated interface

        * platform/win/DragImageWin.cpp: Added.
        (WebCore::dragImageSize):
        (WebCore::deleteDragImage):
        (WebCore::scaleDragImage):
        (WebCore::dissolveDragImageToFraction):
        (WebCore::createDragImageFromImage):
        (WebCore::createDragImageIconForCachedImage):
          Stubs

2007-02-17  Adam Roben  <aroben@apple.com>

        * WebCore.vcproj/WebCore.vcproj: Removed bogus single-file
        configuration for MimeTypeRegistryWin.cpp.

2007-02-17  David Hyatt  <hyatt@apple.com>

        Part of the OpenSource fix to make sure the fill color starts off as transparent.  Make sure our CG context
        has its state properly in sync with the CGContext.

        Reviewed by aroben

        * platform/win/GraphicsContextWin.cpp:
        (WebCore::GraphicsContext::GraphicsContext):

2007-02-17  Adam Roben  <aroben@apple.com>

        Build fix.

        * platform/win/CursorWin.cpp:
        (WebCore::notAllowedCursor):

2007-02-17  Dave Hyatt <hyatt@apple.com>

        Change how resizers are invalidated to fix Radar bug #4976772.
        
        Reviewed by olliej

        * platform/win/GraphicsContextWin.cpp:
        (WebCore::GraphicsContext::GraphicsContext):
        * platform/win/ScrollViewWin.cpp:
        (WebCore::ScrollView::suppressScrollbars):
        (WebCore::ScrollView::paint):
        (WebCore::ScrollView::adjustOverlappingScrollbarCount):
        * platform/win/WidgetWin.cpp:
        (WebCore::Widget::invalidateRect):

2007-02-16  Dave Hyatt <hyatt@apple.com>

        Fix for Radar bug #4981074, RSS Scrollbar overlaps window resizer.  Teach all scrollbars how to
        avoid the window resizer.
        
        Reviewed by aroben

        * platform/win/PlatformScrollBar.h:
        * platform/win/PlatformScrollBarSafari.cpp:
        (WebCore::PlatformScrollbar::PlatformScrollbar):
        (WebCore::PlatformScrollbar::setRect):
        (WebCore::PlatformScrollbar::setParent):
        * platform/win/PlatformScrollBarWin.cpp:
        (WebCore::PlatformScrollbar::PlatformScrollbar):
        (WebCore::PlatformScrollbar::setRect):
        (WebCore::PlatformScrollbar::setParent):
        * platform/win/ScrollViewWin.cpp:
        (WebCore::ScrollView::ScrollViewPrivate::ScrollViewPrivate):
        (WebCore::ScrollView::updateScrollbars):
        (WebCore::ScrollView::resizerOverlapsContent):
        (WebCore::ScrollView::adjustOverlappingScrollbarCount):
        (WebCore::ScrollView::setParent):

2007-02-16  Adam Roben  <aroben@apple.com>

        Rubberstamped by Anders.

        * platform/win/PlatformScrollBarSafari.cpp:
        (WebCore::PlatformScrollbar::paint): Don't draw the arrows when we're disabled.

2007-02-15  Dave Hyatt  <hyatt@apple.com>

        Reviewed by Adam.

        Fix for 4804657 and 4952931, scroll view gets confused and ends up at a bad scroll
        offset.
        
        * platform/win/ScrollViewWin.cpp:
        (WebCore::ScrollView::ScrollViewPrivate::valueChanged):
        (WebCore::ScrollView::ScrollViewPrivate::scrollBackingStore):
        (WebCore::ScrollView::updateScrollbars):

2007-02-16  Anders Carlsson  <acarlsson@apple.com>

        Reviewed by Adam.

        <rdar://problem/4993040>
        Crash in plugin code watching yahoo news video
        
        Zero out the plugin function struct.
        
        * plugins/win/PluginPackageWin.cpp:
        (WebCore::PluginPackageWin::load):

2007-02-16  Anders Carlsson  <acarlsson@apple.com>

        Fix build.

        Use adoptCF instead of adopt.

        * platform/network/cf/ResourceHandleCFNet.cpp:
        (WebCore::ResourceHandle::start):
        * platform/network/cf/ResourceRequestCFNet.cpp:
        (WebCore::ResourceRequest::doUpdatePlatformRequest):

2007-02-16  Adam Roben  <aroben@apple.com>

        Reviewed by Oliver.

        Implemented square button look.

        * rendering/RenderThemeSafari.cpp:
        (WebCore::RenderThemeSafari::adjustRepaintRect): Only inflate the rect
        if we have a pushbutton.
        (WebCore::RenderThemeSafari::paintButton): Ditto.

2007-02-15  Anders Carlsson  <acarlsson@apple.com>

        Reviewed by Adam.

        Add the default Flash plugin location to the list of plugin paths.

        * plugins/win/PluginDatabaseWin.cpp:
        (WebCore::addFlashPluginPath):
        (WebCore::PluginDatabaseWin::defaultPluginPaths):

2007-02-15  Lou Amadio  <lamadio@apple.com>

        Reviewed by Steve.

        <rdar://problem/4945799> CGText: should use correct mechanism to set font smoothing style
        
        * platform/win/FontWin.cpp:
        (WebCore::Font::drawGlyphs):

2007-02-15  Anders Carlsson  <acarlsson@apple.com>

        Reviewed by Adam.

        <rdar://problem/4987529>
        Regression: first clicks don't work at flash-based Nokia.com

        * plugins/win/PluginViewWin.cpp:
        (WebCore::PluginViewWin::handleMouseEvent):
        Don't set buttons for mouse move. Also, ignore unknown mouse events.

2007-02-13  Brady Eidson  <beidson@apple.com>

        Reviewed by Adam

        Switch permanently from CFStreamError to CFErrorRef in ResourceHandleCF

        * platform/network/cf/ResourceHandleCFNet.cpp:
        (WebCore::didFail):
        (WebCore::ResourceHandle::start):

2007-02-13  Adam Roben  <aroben@apple.com>

        Build fix.

        * WebCore.vcproj/WebCore.vcproj: Remove SVGDOMImplementation.(cpp|h)

2007-02-12  Ada Chan  <adachan@apple.com>

        Reviewed by Steve.

        <rdar://4952715> Events not being passed from WebCore/WebKit up through IWebForm::doCommandBySelector
        Frame::doTextFieldCommandFromEvent()'s signature has changed from taking in a PlatformKeyboardEvent
        to KeyboardEvent.  Match that in FrameWin.

        * bridge/win/FrameWin.cpp:
        (WebCore::FrameWin::doTextFieldCommandFromEvent):
        * bridge/win/FrameWin.h:

2007-02-10  Adam Roben  <aroben@apple.com>

        Rubberstamped by Oliver.

        * rendering/RenderThemeSafari.cpp:
        (WebCore::RenderThemeSafari::paintButton): Call controlSizeFromRect
        instead of controlSizeForFont to determine the correct control size.

2007-02-09  Alice Liu  <alice.liu@apple.com>

        Reviewed by Brady and Adam.

        Fixed <rdar://4986194> Typing in content editable body does not automatically scroll to reveal cursor

        * platform/win/ScrollViewWin.cpp:
        (WebCore::ScrollView::updateScrollbars):
        The scrollview's scrolloffset wasn't getting set in cases where there were no scrollbars
        You can have a scrolloffset even if you don't have scrollbars

2007-02-09  Darin Adler  <darin@apple.com>

        Reviewed by Adele.

        - Add TextEvent to the DOM (based on the proposed DOM level 3)
          to be used to fix some international input bugs soon.
          At this point, we don't send any text events.

        - Remove some obsolete files.

        * WebCore.vcproj/WebCore.vcproj: Add new files, remove obsolete files.

2007-02-09  Anders Carlsson  <acarlsson@apple.com>

        Reviewed by Adam.

        * plugins/win/PluginViewWin.cpp:
        (WebCore::PluginViewWin::performRequest):
        Add the stream to the m_streams hash set.

2007-02-08  Adele Peterson  <adele@apple.com>

        Reviewed by Brady.

        Fix for http://bugs.webkit.org/show_bug.cgi?id=12599
        <rdar://problem/4973507> REGRESSION: When replying in Gmail, the caret disappears when you start to type (12599)

        This also fixes a bug where when you called window.focus() on a background window, it did not come to the front.

        * bridge/win/FrameWin.h: Removed focusWindow() and unfocusWindow() stubs since there are now implementations in the base class.
        * platform/win/TemporaryLinkStubs.cpp:

2007-02-08  Anders Carlsson  <acarlsson@apple.com>

        Reviewed by Geoff.

        <rdar://problem/4955068>
        PluginViewWin leaks memory.
        
        Make streams ref-counted. Remove streams from the hash set once they're done loading.
        
        Don't try to paint if painting is disabled.
        
        * plugins/win/PluginStreamWin.cpp:
        (WebCore::PluginStreamWin::PluginStreamWin):
        (WebCore::PluginStreamWin::cancelAndDestroyStream):
        (WebCore::PluginStreamWin::destroyStream):
        * plugins/win/PluginStreamWin.h:
        * plugins/win/PluginViewWin.cpp:
        (WebCore::PluginViewWin::paint):
        (WebCore::PluginViewWin::stop):
        (WebCore::PluginViewWin::~PluginViewWin):
        (WebCore::PluginViewWin::disconnectStream):
        * plugins/win/PluginViewWin.h:

2007-02-08  Adam Roben  <aroben@apple.com>

        Reviewed by Adele.

        Fix scrollbar painting.

        * platform/win/PlatformScrollBarSafari.cpp:
        (WebCore::trackRepaintRect): Added.
        (WebCore::buttonRepaintRect): Added.
        (WebCore::PlatformScrollbar::invalidateTrack): Inavlidate the repaint
        rect, not the rect used for hit testing.
        (WebCore::PlatformScrollbar::invalidatePart): Ditto.
        (WebCore::PlatformScrollbar::paint): Paint the track first, then the
        buttons, then the thumb.
        (WebCore::PlatformScrollbar::paintButton): Paint in the repaintRect,
        not the rect used for hit testing.
        (WebCore::PlatformScrollbar::paintTrack): Ditto.

2007-02-08  Anders Carlsson  <acarlsson@apple.com>

        Remove unused stub.
        
        * platform/win/TemporaryLinkStubs.cpp:

2007-02-08  Anders Carlsson  <acarlsson@apple.com>

        Reviewed by Brady.

        <rdar://problem/4888871>
        Need to support synchronous XMLHttpRequest.

        * platform/network/cf/ResourceHandleCFNet.cpp:
        (WebCore::ResourceHandle::loadResourceSynchronously):

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

        Reviewed by Maciej.

        Fix mini search field painting.

        * rendering/RenderThemeSafari.cpp:
        (WebCore::RenderThemeSafari::searchFieldSizes): Use the right height.

2007-02-07  Adele Peterson  <adele@apple.com>

        Reviewed by Adam.

        Draw a single down arrow for styled menu lists.

        * rendering/RenderThemeSafari.cpp: (WebCore::RenderThemeSafari::paintMenuListButton):
        * rendering/RenderThemeWin.cpp: Moved #ifndef USE_SAFARI_THEME to enclose the body of the file.

2007-02-07  Brady Eidson  <beidson@apple.com>

        RS = Adam
        
        Touch these files to force it to recompile...

        * platform/win/PlatformScrollBarSafari.cpp:
        * rendering/RenderThemeWin.cpp:

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

        Rubberstamped by Maciej.

        Turn on SafariTheme so we can try it out.

        * WebCore.vcproj/WebCore.vcproj:

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

        Reviewed by Adele.

        * rendering/RenderThemeSafari.cpp:
        (WebCore::RenderThemeSafari::determineState): Pass focus information down to SafariTheme.

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

        Rubberstamped by Brady.

        Updated for log channel rename.

        * platform/win/GDIObjectCounter.cpp:
        (WebCore::GDIObjectCounter::~GDIObjectCounter):

2007-02-06  Adele Peterson  <adele@apple.com>

        Reviewed by Adam.

        Added support for radio buttons and checkboxes.

        * platform/win/PlatformScrollBarSafari.cpp:
        (WebCore::PlatformScrollbar::paintButton):
        (WebCore::PlatformScrollbar::paintTrack):
        (WebCore::PlatformScrollbar::paintThumb):
        * rendering/RenderThemeSafari.cpp:
        (WebCore::RenderThemeSafari::determineState):
        (WebCore::RenderThemeSafari::platformActiveSelectionForegroundColor):
        (WebCore::RenderThemeSafari::adjustRepaintRect):
        (WebCore::RenderThemeSafari::paintCheckbox):
        (WebCore::RenderThemeSafari::checkboxMargins):
        (WebCore::RenderThemeSafari::paintRadio):
        (WebCore::RenderThemeSafari::radioMargins):
        (WebCore::RenderThemeSafari::adjustMenuListStyle):
        (WebCore::RenderThemeSafari::paintSliderThumb):
        * rendering/RenderThemeSafari.h:

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

        Reviewed by Ada and Oliver.

        Add a GDIObjectCounter class that informs us of GDI leaks.

        * WebCore.vcproj/WebCore.vcproj: Added new files.
        * platform/win/GDIObjectCounter.cpp: Added.
        (WebCore::GDIObjectCounter::GDIObjectCounter):
        (WebCore::GDIObjectCounter::init):
        (WebCore::GDIObjectCounter::~GDIObjectCounter):
        (WebCore::GDIObjectCounter::currentGDIObjectsInUse):
        * platform/win/GDIObjectCounter.h: Added.

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

        Build fix.

        * WebCore.vcproj/WebCore.vcproj: Add new files.

2007-02-04  Oliver Hunt  <oliver@apple.com>

        Reviewed by Adam.           

        Removed unimplemented EventHandler::handleMouseUp, 
        as a platform independent version is available now.

        * page/win/EventHandlerWin.cpp:
        (WebCore::EventHandler::eventActivatedView): 
          Now we use this method, it needs to be implemented

2007-02-02  Steve Falkenburg  <sfalken@apple.com>

        Fix build.

        * WebCore.vcproj/WebCore.vcproj:

2007-02-02  Steve Falkenburg  <sfalken@apple.com>

        * platform/network/cf/FormDataStreamCFNet.cpp:

2007-02-02  Adam Roben  <aroben@apple.com>

        Turn on Lucida Grande.

        * rendering/RenderThemeSafari.cpp:
        (WebCore::RenderThemeSafari::systemFont):
            Use Lucida Grande.
        (WebCore::RenderThemeSafari::setFontFromControlSize):
            Ditto.
        (WebCore::RenderThemeSafari::controlSizeForSystemFont):
            Implemented using font sizes from NSFont.m.
        (WebCore::RenderThemeSafari::adjustRepaintRect):
            Uncommented.
        (WebCore::RenderThemeSafari::minimumMenuListSize):
            Ditto.

2007-02-02  Adam Roben  <aroben@apple.com>

        Reviewed by Maciej.

        Implemented menulist drawing.

        * rendering/RenderThemeSafari.cpp:
        (WebCore::controlSizeFromRect):
            Moved to top of file.
        (WebCore::RenderThemeSafari::adjustRepaintRect):
            Uncommented menulist case.
        (WebCore::RenderThemeSafari::popupButtonMargins):
            Added controlSize parameter, made margins match AppKit artwork.
        (WebCore::RenderThemeSafari::paintMenuList):
            Implemented.
        * rendering/RenderThemeSafari.h:
            Updated decalartion.

2007-02-01  Anders Carlsson  <acarlsson@apple.com>

        Reviewed by Brady.

        * platform/network/cf/ResourceHandleCFNet.cpp:
        (WebCore::willSendRequest):
        Make sure to always retain the request we return. (In practice, we were already doing this since
        client can never be null).
        
        (WebCore::didReceiveResponse):
        Remove client null check.

2007-02-01  Steve Falkenburg  <sfalken@apple.com>

        Production build fix

        * WebCore.vcproj/WebCore.vcproj:

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

        Reviewed by Adam.

        Updating event handler logic to make use of methods migrated from 
        WebKit to WebCore

        * page/win/EventHandlerWin.cpp:
        (WebCore::EventHandler::handleDrag):   
          Updating handleDrag to use methods that we've migrated to WebCore
        * platform/win/PlatformMouseEventWin.cpp:
        (WebCore::messageToEventType):                        
        (WebCore::PlatformMouseEvent::PlatformMouseEvent):   
          provide the type of mouse event
          

2007-01-31  Steve Falkenburg  <sfalken@apple.com>

        Reviewed by Ada.

        Fix BString bugs.

        * platform/win/BString.cpp:
        (WebCore::BString::BString): Call SysAllocString instead of SysAllocStringLen
        (WebCore::BString::operator=): Add proper null checks
        (WebCore::operator ==): Add proper null checks

2007-01-30  Anders Carlsson  <acarlsson@apple.com>

        Build fix.
        
        * platform/win/TemporaryLinkStubs.cpp:
        (ResourceHandle::setDefersLoading):

2007-01-30  Steve Falkenburg  <sfalken@apple.com>

        Production build fix

        * WebCore.vcproj/WebCore.vcproj:

2007-01-29  Adam Roben  <aroben@apple.com>

        Build fix.

        * platform/win/TemporaryLinkStubs.cpp: Removed old stub.

2007-01-29  Brady Eidson  <beidson@apple.com>

        Reviewed by Oliver

        All the downloads plumbing for if you have ToT CFNetwork + my changes
        (or after they submit with my changes)

        * platform/network/cf/FormDataStreamCFNet.cpp: Reword the #ifdef for CFNetwork ToT for clarity
        * platform/network/cf/ResourceHandleCFNet.cpp:
        (WebCore::didFail): Use a RetainPtr .get()
        (WebCore::ResourceHandleInternal::~ResourceHandleInternal): Only cancel the connection if we hold the last ref
        (WebCore::ResourceHandle::start): Use a RetainPtr - adopt and .get()
        (WebCore::ResourceHandle::cancel): Use a RetainPtr .get()
        (WebCore::ResourceHandle::receivedCredential):Use a RetainPtr .get()
        (WebCore::ResourceHandle::receivedRequestToContinueWithoutCredential): Use a RetainPtr .get()
        (WebCore::ResourceHandle::connection): Use a RetainPtr .get()
        * platform/network/cf/ResourceRequestCFNet.cpp:
        (WebCore::ResourceRequest::doUpdatePlatformRequest): Prevent a crash if a null

2007-01-29  Brady Eidson  <beidson@apple.com>

        Reviewed by Geoff

        Change LOG_NOTIMPL() to use a LOG() and its logging channel instead of LOG_ERROR()
        so you can actually turn it off.
        
        * platform/win/NotImplemented.h:

2007-01-29  Maciej Stachowiak  <mjs@apple.com>
        
        - fix build

        * platform/win/TemporaryLinkStubs.cpp:

2007-01-29  Steve Falkenburg  <sfalken@apple.com>

        Fix build break from RootObject ownership change.

        * bridge/win/FrameWin.cpp:
        (WebCore::FrameWin::createRootObject): Added
        (WebCore::FrameWin::cleanupPluginObjects): change destroy to invalidate
        (WebCore::FrameWin::bindingRootObject): change new RootObject to RootObject::create
        * bridge/win/FrameWin.h: 
        * plugins/win/PluginViewWin.cpp:
        (WebCore::PluginViewWin::bindingInstance): change new RootObject to FrameWin::createRootObject.

2007-01-26  Adam Roben  <aroben@apple.com>

        Reviewed by Oliver.

        Fix frequent failed assertions when painting scroll bars.

        * platform/win/PlatformScrollBarSafari.cpp:
        (WebCore::PlatformScrollbar::paint): Check that painting is enabled
        before painting.

2007-01-26  Oliver Hunt <oliver@apple.com>

        Build fix.

        * WebCore.vcproj/WebCore.vcproj:

2007-01-26  Beth Dakin  <bdakin@apple.com>

        Reviewed by Darin.

        Due to <rdar://problem/4956565> REGRESSION: After scrolling frame, 
        hovering over link in this frame doesn't change cursor to pointing 
        hand

        lastEventIsMouseUp() is a Mac-only issue. This patch makes it Mac-
        only code, so we can remove the temporary link stub for it.

        * platform/win/TemporaryLinkStubs.cpp:

2007-01-26  Oliver Hunt <oliver@apple.com>

        Build fix -- adding SVGInlineTextBox.{cpp,h} to project

        * WebCore.vcproj/WebCore.vcproj:

2007-01-25  Oliver Hunt  <oliver@apple.com>

        Reviewed by Maciej.

        Fixed DragDataWin behaviour so that it will provide plain text
        for a file dropped on the window.

        * platform/win/DragDataWin.cpp:
        (WebCore::DragData::asPlainText):

2007-01-25  Brady Eidson  <beidson@apple.com>

        Reviewed by Adam

        -Setup for new CFNetwork API for those using their ToT and their next submission
        -Setup for new CoreFoundation API for those using their ToT and their next submission

        * platform/network/cf/FormDataStreamCFNet.cpp:
        (WebCore::setHTTPBody): New callback format - will need to define USE_NEW_CFSTREAM_CALLBACKS 
          to switch to the new API
        * platform/network/cf/ResourceHandleCFNet.cpp:
        (WebCore::didFail):  This automagically works :)

2007-01-25  Adele Peterson  <adele@apple.com>

        Reviewed by Adam. 

        Added support for slider.

        * rendering/RenderThemeSafari.cpp:
        (WebCore::RenderThemeSafari::RenderThemeSafari):
        (WebCore::RenderThemeSafari::inflateRect):
        (WebCore::RenderThemeSafari::paintSliderTrack):
        (WebCore::RenderThemeSafari::paintSliderThumb):
        * rendering/RenderThemeSafari.h:

2007-01-25  Steve Falkenburg  <sfalken@apple.com>

        Production build fix

        * WebCore.vcproj/WebCore.vcproj:

2007-01-24  Adele Peterson  <adele@apple.com>

        Reviewed by Brady and Oliver.

        Moved keyEvent method from FrameWin to EventHandler and updated
        call sites.  Now this method is shared with the mac.

        * bridge/win/FrameWin.cpp:
        * bridge/win/FrameWin.h:

2007-01-24  Steve Falkenburg  <sfalken@apple.com>

        Reviewed by Lou.

        * bridge/win/FrameWin.cpp:
        (WebCore::regExpForLabels): Ported from FrameMac.mm
        (WebCore::FrameWin::searchForLabelsAboveCell): Ported from FrameMac.mm
        (WebCore::FrameWin::searchForLabelsBeforeElement): Ported from FrameMac.mm
        (WebCore::FrameWin::matchLabelsAgainstElement): Ported from FrameMac.mm
        * bridge/win/FrameWin.h:

2007-01-24  Adam Roben  <aroben@apple.com>

        Reviewed by Adele.

        Added PlatformScrollBarSafari for Aqua scroll bars.

        * WebCore.vcproj/WebCore.vcproj: Added new file to project.
        * platform/win/PlatformScrollBarSafari.cpp: Added. Copied from PlatformScrollBarWin.cpp.
        (WebCore::PlatformScrollbar::PlatformScrollbar):
        (WebCore::PlatformScrollbar::paint):
        (WebCore::PlatformScrollbar::backButtonRect):
        (WebCore::PlatformScrollbar::forwardButtonRect):
        (WebCore::PlatformScrollbar::trackRect):
        (WebCore::PlatformScrollbar::thumbLength):
        (WebCore::PlatformScrollbar::paintButton):
        (WebCore::PlatformScrollbar::paintTrack):
        (WebCore::PlatformScrollbar::paintThumb):
        (WebCore::PlatformScrollbar::paintGripper):
        (WebCore::PlatformScrollbar::gripperRect):
        (WebCore::PlatformScrollbar::themeChanged):
        * platform/win/PlatformScrollBarWin.cpp: Added #ifndef USE_SAFARI_THEME.
        * rendering/RenderThemeSafari.cpp: Updated for SafariTheme.h changes.
        (WebCore::RenderThemeSafari::RenderThemeSafari):

2007-01-23  Brady Eidson  <beidson@apple.com>

        Reviewed by Steve

        Initial hookup of Download support

        * platform/network/cf/ResourceErrorCF.cpp:
        (WebCore::ResourceError::ResourceError):
        (WebCore::ResourceError::operator CFStreamError):
        
        * platform/network/cf/ResourceHandleCFNet.cpp:
        (WebCore::ResourceHandle::loaderRunLoop): Accessor so downloads can run on the same 
          runloop as connections
        (WebCore::ResourceHandle::start):
        (WebCore::ResourceHandle::connection):

        * platform/win/BString.cpp:
        (WebCore::BString::BString): Ability to create BString from a CFStringRef
        * platform/win/BString.h:

2007-01-23  Anders Carlsson  <acarlsson@apple.com>

        Reviewed by Darin.

        <rdar://problem/4919754>
        Boomer freezes after attempt to play video.
        
        * plugins/win/PluginStreamWin.cpp:
        Change WebReasonNone to -2, some plugins return -1 to indicate error.
        
        (WebCore::PluginStreamWin::stop):
        Just don't clear the loader, stop loading as well.
        
        (WebCore::PluginStreamWin::startStream):
        Destroy the stream if newstream returns an error.
        
        * plugins/win/PluginViewWin.cpp:
        (WebCore::PluginViewWin::performRequest):
        If the call to toString throws an exception, clear it.

2007-01-23  Steve Falkenburg  <sfalken@apple.com>

        Fix release build.

        * WebCore.vcproj/WebCore.vcproj:

2007-01-23  Adele Peterson  <adele@apple.com>

        Reviewed by Adam. 

        Added call to paintThemeTextArea.

        * rendering/RenderThemeSafari.cpp:
        (WebCore::RenderThemeSafari::paintTextArea):

2007-01-23  Anders Carlsson  <acarlsson@apple.com>

        Build fixes.
        
        * WebCore.vcproj/WebCore.vcproj:
        Copy plugin and JS headers.
        
        * loader/win/FrameLoaderWin.cpp:
        Move functions to WebKitWin.

2007-01-23  Oliver Hunt  <oliver@apple.com>

        Reviewed by Adam.

        * WebCore.vcproj/WebCore.vcproj:
        * page/win/DragControllerWin.cpp: Added.
        (WebCore::DragController::dragOperation):
        (WebCore::DragController::isCopyKeyDown):
          Platform specific implementation

        * platform/win/ClipboardWin.cpp:
        (WebCore::ClipboardWin::ClipboardWin):
        (WebCore::ClipboardWin::isForDragging):
        * platform/win/ClipboardWin.h:
          Migrated common Clipboard functionality from ClipboardMac/Win -> Clipboard

        * platform/win/DragDataWin.cpp: Added.
        (WebCore::DragData::createClipboard):
        (WebCore::urlWFormat):
        (WebCore::urlFormat):
        (WebCore::filenameWFormat):
        (WebCore::filenameFormat):
        (WebCore::plainTextFormat):
        (WebCore::plainTextWFormat):
        (WebCore::DragData::containsURL):
        (WebCore::extractURL):
        (WebCore::DragData::asURL):
        (WebCore::DragData::containsPlainText):
        (WebCore::DragData::asPlainText):
        (WebCore::texthtmlFormat):
        (WebCore::htmlFormat):
        (WebCore::containsHTML):
        (WebCore::fragmentFromHTML):
        (WebCore::containsFilenames):
        (WebCore::fragmentFromFilenames):
        (WebCore::DragData::containsColor):
        (WebCore::DragData::canSmartReplace):
        (WebCore::DragData::containsCompatibleContent):
        (WebCore::DragData::asFragment):
        (WebCore::DragData::asColor):
          Implementation of DragData accesor methods, and helper functions

        * platform/win/EditorWin.cpp:
        (WebCore::Editor::newGeneralClipboard):
          Updated for new ClipboardWin constructor

        * platform/win/PasteboardWin.cpp:
        (WebCore::fragmentFromCF_HTML):
        (WebCore::Pasteboard::documentFragment):
          Pulled out CF_HTML parsing to a seperate function so logic 
          can be shared with DragDataWin

2007-01-22  Adam Roben  <aroben@apple.com>

        Reviewed by Adele.

        Implemented search field painting, and did some cleanup.

        * rendering/RenderThemeSafari.cpp:
        (WebCore::RenderThemeSafari::RenderThemeSafari): Updated for changes to SafariTheme.
        (WebCore::RenderThemeSafari::paintButton): Ditto.
        (WebCore::RenderThemeSafari::paintTextField): Ditto.
        (WebCore::controlSizeFromRect): New helper function.
        (WebCore::RenderThemeSafari::paintSearchField): Implemented.
        (WebCore::RenderThemeSafari::paintSearchFieldCancelButton): Ditto.
        (WebCore::RenderThemeSafari::paintSearchFieldResultsDecoration): Ditto.
        (WebCore::RenderThemeSafari::paintSearchFieldResultsButton): Ditto.
        (WebCore::RenderThemeSafari::setSearchFieldSize): Uncommented setSizeFromFont call.
        (WebCore::RenderThemeSafari::adjustSearchFieldCancelButtonStyle): Ditto.
        (WebCore::RenderThemeSafari::adjustSearchFieldDecorationStyle): Ditto.
        (WebCore::RenderThemeSafari::adjustSearchFieldResultsDecorationStyle): Ditto.
        (WebCore::RenderThemeSafari::adjustSearchFieldResultsButtonStyle): Ditto.

2007-01-22  Anders Carlsson  <acarlsson@apple.com>

        Reviewed by Adam.
        
        <rdar://problem/4771115>
        Windows Media Player plugin crashes.

        * WebCore.vcproj/WebCore.vcproj:
        Formatting changes.
        
        * plugins/win/PluginDatabaseWin.cpp:
        (WebCore::PluginDatabaseWin::defaultPluginPaths):
        Add Windows Media Player path.
        
        * plugins/win/PluginStreamWin.cpp:
        (WebCore::PluginStreamWin::sendJavaScriptStream):
        * plugins/win/PluginStreamWin.h:
        New function which sends a JavaScript result stream and handles any errors that the
        plug-in returns.
        
        * plugins/win/PluginViewWin.cpp:
        (WebCore::PluginViewWin::setFrameGeometry):
        Always call NPP_SetWindow, some plugins (like WMP) relies on it.
        
        (WebCore::PluginViewWin::performRequest):
        If a plug-in requests a javascript: URL that doesn't evaluate to a string, call toString on it.
        The Windows Media Player plugin calls javascript:document.location and expects to get the location back.

2007-01-23  Darin Adler  <darin@apple.com>

        - internal part of fix for http://bugs.webkit.org/show_bug.cgi?id=12273
          REGRESSION: File input value invisible after removing and re-appending

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

        * platform/win/FileChooserWin.cpp: Removed many now-unneeded functions.
        (WebCore::FileChooser::FileChooser): Updated for changed parameters and members.
        (WebCore::FileChooser::openFileChooser): Changed to take document parmaeter and
        find the FrameView from that instead of the upload control.
        (WebCore::FileChooser::basenameForWidth): Added ignored Font parameter.

2007-01-22  Anders Carlsson  <acarlsson@apple.com>

        Reviewed by Adam.

        <rdar://problem/4903230>
        Boomer crashes at Flickr website when "View as slideshow" is clicked.
        
        * plugins/win/PluginViewWin.cpp:
        (WebCore::PluginViewWin::bindingInstance):
        Return null if m_plugin is null (which it can be if the plugin failed to load).

2007-01-22  Anders Carlsson  <acarlsson@apple.com>

        Build fix.
        
        * WebCore.vcproj/WebCore.vcproj:

2007-01-22  Adam Roben  <aroben@apple.com>

        Moved ifdefs to match Darin's suggestion.

        * rendering/RenderThemeSafari.cpp:
        * rendering/RenderThemeSafari.h:

2007-01-22  Adam Roben  <aroben@apple.com>

        Build fix.

        * rendering/RenderThemeSafari.cpp:
        (WebCore::theme):
        * rendering/RenderThemeSafari.h:

2007-01-21  Adam Roben  <aroben@apple.com>

        Reviewed by Maciej.

        Implemented drawing button states and control sizes.

        * WebCore.vcproj/WebCore.vcproj:
        * rendering/RenderThemeSafari.cpp:
        (WebCore::RenderThemeSafari::determineState): Added.
        (WebCore::RenderThemeSafari::systemFont): Implemented rest of font sizes.
        (WebCore::RenderThemeSafari::paintButton): Updated for SafariTheme changes.
        (WebCore::RenderThemeSafari::paintTextField): Ditto.
        * rendering/RenderThemeSafari.h: Added declaration.

2007-01-21  Adam Roben  <aroben@apple.com>

        Reviewed by Maciej.

        * rendering/RenderThemeSafari.cpp: Updated declarations of SafariTheme calls.
        (WebCore::systemFontSizeForControlSize): Added.
        (WebCore::RenderThemeSafari::systemFont): Made it work in the small-control case.
        (WebCore::RenderThemeSafari::adjustRepaintRect): Made it work for buttons and checkboxes.
        (WebCore::RenderThemeSafari::setFontFromControlSize): Fixed to work on Windows.
        (WebCore::RenderThemeSafari::checkboxMargins): Added controlSize parameter.
        (WebCore::RenderThemeSafari::buttonMargins): Ditto.
        (WebCore::RenderThemeSafari::paintButton): Fixed FIXME, added save/restore calls.
        (WebCore::RenderThemeSafari::paintTextField): Added save/restore calls.
        * rendering/RenderThemeSafari.h: Updated declarations.

2007-01-21  Adele Peterson  <adele@apple.com>

        Reviewed by Adam. 

        Adding RenderThemeSafari.
 
        * WebCore.vcproj/WebCore.vcproj:
        * rendering/RenderThemeSafari.cpp: Added.
        (WebCore::):
        (WebCore::theme):
        (WebCore::RenderThemeSafari::RenderThemeSafari):
        (WebCore::RenderThemeSafari::~RenderThemeSafari):
        (WebCore::RenderThemeSafari::platformActiveSelectionBackgroundColor):
        (WebCore::RenderThemeSafari::platformInactiveSelectionBackgroundColor):
        (WebCore::RenderThemeSafari::activeListBoxSelectionBackgroundColor):
        (WebCore::RenderThemeSafari::systemFont):
        (WebCore::RenderThemeSafari::isControlStyled):
        (WebCore::RenderThemeSafari::adjustRepaintRect):
        (WebCore::RenderThemeSafari::inflateRect):
        (WebCore::RenderThemeSafari::baselinePosition):
        (WebCore::RenderThemeSafari::controlSupportsTints):
        (WebCore::RenderThemeSafari::controlSizeForFont):
        (WebCore::RenderThemeSafari::sizeForFont):
        (WebCore::RenderThemeSafari::sizeForSystemFont):
        (WebCore::RenderThemeSafari::setSizeFromFont):
        (WebCore::RenderThemeSafari::setFontFromControlSize):
        (WebCore::RenderThemeSafari::controlSizeForSystemFont):
        (WebCore::RenderThemeSafari::paintCheckbox):
        (WebCore::RenderThemeSafari::checkboxSizes):
        (WebCore::RenderThemeSafari::checkboxMargins):
        (WebCore::RenderThemeSafari::setCheckboxSize):
        (WebCore::RenderThemeSafari::paintRadio):
        (WebCore::RenderThemeSafari::radioSizes):
        (WebCore::RenderThemeSafari::radioMargins):
        (WebCore::RenderThemeSafari::setRadioSize):
        (WebCore::RenderThemeSafari::setButtonPaddingFromControlSize):
        (WebCore::RenderThemeSafari::adjustButtonStyle):
        (WebCore::RenderThemeSafari::buttonSizes):
        (WebCore::RenderThemeSafari::buttonMargins):
        (WebCore::RenderThemeSafari::setButtonSize):
        (WebCore::RenderThemeSafari::paintButton):
        (WebCore::RenderThemeSafari::paintTextField):
        (WebCore::RenderThemeSafari::adjustTextFieldStyle):
        (WebCore::RenderThemeSafari::paintTextArea):
        (WebCore::RenderThemeSafari::adjustTextAreaStyle):
        (WebCore::RenderThemeSafari::popupButtonMargins):
        (WebCore::RenderThemeSafari::popupButtonSizes):
        (WebCore::RenderThemeSafari::popupButtonPadding):
        (WebCore::RenderThemeSafari::setPopupPaddingFromControlSize):
        (WebCore::RenderThemeSafari::paintMenuList):
        (WebCore::TopGradientInterpolate):
        (WebCore::BottomGradientInterpolate):
        (WebCore::MainGradientInterpolate):
        (WebCore::TrackGradientInterpolate):
        (WebCore::RenderThemeSafari::paintMenuListButtonGradients):
        (WebCore::RenderThemeSafari::paintMenuListButton):
        (WebCore::RenderThemeSafari::adjustMenuListStyle):
        (WebCore::RenderThemeSafari::adjustMenuListButtonStyle):
        (WebCore::RenderThemeSafari::menuListSizes):
        (WebCore::RenderThemeSafari::minimumMenuListSize):
        (WebCore::RenderThemeSafari::paintSliderTrack):
        (WebCore::RenderThemeSafari::paintSliderThumb):
        (WebCore::RenderThemeSafari::adjustSliderThumbSize):
        (WebCore::RenderThemeSafari::paintSearchField):
        (WebCore::RenderThemeSafari::searchFieldSizes):
        (WebCore::RenderThemeSafari::setSearchFieldSize):
        (WebCore::RenderThemeSafari::adjustSearchFieldStyle):
        (WebCore::RenderThemeSafari::paintSearchFieldCancelButton):
        (WebCore::RenderThemeSafari::cancelButtonSizes):
        (WebCore::RenderThemeSafari::adjustSearchFieldCancelButtonStyle):
        (WebCore::RenderThemeSafari::resultsButtonSizes):
        (WebCore::RenderThemeSafari::adjustSearchFieldDecorationStyle):
        (WebCore::RenderThemeSafari::paintSearchFieldDecoration):
        (WebCore::RenderThemeSafari::adjustSearchFieldResultsDecorationStyle):
        (WebCore::RenderThemeSafari::paintSearchFieldResultsDecoration):
        (WebCore::RenderThemeSafari::adjustSearchFieldResultsButtonStyle):
        (WebCore::RenderThemeSafari::paintSearchFieldResultsButton):
        * rendering/RenderThemeSafari.h: Added.
        (WebCore::RenderThemeSafari::supportsControlTints):
        * rendering/RenderThemeWin.cpp:

2007-01-21  Adam Roben  <aroben@apple.com>

        Build fix.

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

2007-01-19  Ada Chan  <adachan@apple.com>

        Build fix.

        * WebCore.vcproj/WebCore.vcproj:

2007-01-19  Anders Carlsson  <acarlsson@apple.com>

        Build fix.

        * WebCore.vcproj/WebCore.vcproj:
        Add SVG files.

2007-01-19  Anders Carlsson  <acarlsson@apple.com>

        Build fix.
        
        * platform/win/ContextMenuItemWin.cpp:
        (WebCore::ContextMenuItem::enabled):
        Use correct class name.

2007-01-18  Anders Carlsson  <acarlsson@apple.com>

        Reviewed by Adam.

        Remove some unused FrameWin functions.
        
        * bridge/win/FrameWin.cpp:
        (WebCore::FrameWin::~FrameWin):
        * bridge/win/FrameWin.h:
        * plugins/win/PluginViewWin.cpp:
        (WebCore::PluginViewWin::status):

2007-01-18  Adam Roben  <aroben@apple.com>

        Build fix.

        * platform/win/ContextMenuItemWin.cpp:
        (WebCore::ContextMenu::enabled): Implemented.

2007-01-18  Anders Carlsson  <acarlsson@apple.com>

        Build fix.
        
        * WebCore.vcproj/WebCore.vcproj:
        * platform/win/GlyphMapWin.cpp: Removed.
        * platform/win/GlyphPageTreeNodeWin.cpp: Added.
        (WebCore::GlyphPage::fill):

2007-01-18  Anders Carlsson  <acarlsson@apple.com>

        Reviewed by Brady.

        Fix ownership handling of CFRequestRef. A ResourceRequest holds on to its CFRequestRef 
        and doesn't ref it when returning it. Also, implement willCacheResponse.
        
        * platform/network/cf/ResourceHandleCFNet.cpp:
        (WebCore::willSendRequest):
        (WebCore::willCacheResponse):
        (WebCore::ResourceHandle::start):
        * platform/network/cf/ResourceRequestCFNet.cpp:
        (WebCore::ResourceRequest::doUpdatePlatformRequest):

2007-01-17  Brady Eidson  <beidson@apple.com>

        Reviewed by Maciej

        Final hookup of HTTP Auth plumbing - have the ResourceHandle actually call into
        CFNetwork for HTTP Auth.
        
        Also, deal with svn:eol-style issues on another batch of files that didn't have it set

        * platform/network/cf/ResourceHandleCFNet.cpp:
        (WebCore::ResourceHandle::receivedCredential):  Call into CFNetwork
        (WebCore::ResourceHandle::receivedRequestToContinueWithoutCredential):  Ditto
        (WebCore::ResourceHandle::receivedCancellation):  Copy Mac behavior by calling cancel on the handle

2007-01-16  Brady Eidson  <beidson@apple.com>

        Reviewed by Anders

        Futher improvements/bug fixes to BString

        * platform/win/BString.cpp:
        (WebCore::BString::BString):
        (WebCore::BString::operator=):
        * platform/win/BString.h:

2007-01-16  Brady Eidson  <beidson@apple.com>

        Reviewed by Ada, Adam, and Anders oh my!

        Add handle ==/!= operators to BString

        * platform/win/BString.cpp:
        (WebCore::operator ==):
        (WebCore::operator !=):
        * platform/win/BString.h:

2007-01-16  Beth Dakin  <bdakin@apple.com>

        Reviewed by Adam.

        Fix for <rdar://problem/4874565> Draw context menus using CG

        * platform/win/ContextMenuItemWin.cpp:
        (WebCore::ContextMenuItem::type): Re-worked to be more forgiving.
        * platform/win/ContextMenuWin.cpp: No need for show() and hide()
        since WebKit takes care of this now.

2007-01-15  Brady Eidson  <beidson@apple.com>

        Reviewed by Adam

        Hook up AuthenticationChallenge to CF network.  
        Call up through appropriate client methods through to WebFrame (FrameLoaderClient) at
        which point my upcoming implementation for the IWebURL<auth> classes will be used

        * WebCore.vcproj/WebCore.vcproj:
        * platform/network/cf/AuthenticationCF.cpp: Added.
        (WebCore::AuthenticationChallenge::AuthenticationChallenge):
        (WebCore::createCF):
        (WebCore::core):
        * platform/network/cf/AuthenticationCF.h: Added.
        * platform/network/cf/ResourceErrorCF.cpp: Added.
        (WebCore::ResourceError::ResourceError):
        (WebCore::ResourceError::operator CFStreamError):
        * platform/network/cf/ResourceHandleCFNet.cpp:
        (WebCore::didReceiveChallenge):
        (WebCore::ResourceHandle::didReceiveAuthenticationChallenge):
        (WebCore::ResourceHandle::receivedCredential):
        (WebCore::ResourceHandle::receivedRequestToContinueWithoutCredential):
        (WebCore::ResourceHandle::receivedCancellation):

2007-01-15  Anders Carlsson  <acarlsson@apple.com>

        Build fix.
        
        * WebCore.vcproj/WebCore.vcproj:
        Add ProgressTracker.[cpp|h]

2007-01-12  Anders Carlsson  <acarlsson@apple.com>

        Reviewed by Darin.

        * loader/win/FrameLoaderWin.cpp:
        (WebCore::FrameLoader::didChangeTitle):
        Copied here from FrameLoaderMac.mm
        
        * platform/network/cf/ResourceHandleCFNet.cpp:
        (WebCore::ResourceHandle::start):
        Removed setting referrer and user-agend and added a check for null page.
        
        (WebCore::ResourceHandle::cancel):
        Don't call didFail.
        
        * platform/win/TemporaryLinkStubs.cpp:
        (FrameWin::getAppletInstanceForWidget):
        Use LOG_NOIMPL here.

2007-01-11  Anders Carlsson  <acarlsson@apple.com>

        * platform/network/cf/ResourceResponseCFNet.cpp:
        (WebCore::ResourceResponse::cfURLResponse):
        Add getter that I forgot to commit.
        
2007-01-11  Brady Eidson  <beidson@apple.com>

        Reviewed by NOBODY.

        Make it build after my HTTP Auth OpenSource checkin

        * WebCore.vcproj/WebCore.vcproj:

2007-01-11  Anders Carlsson  <acarlsson@apple.com>

        Build fix.

        * WebCore.vcproj/WebCore.vcproj:
        * platform/win/TemporaryLinkStubs.cpp:
        (WebCore::Editor::advanceToNextMisspelling):

2007-01-10  Steve Falkenburg  <sfalken@apple.com>

        Reviewed by Lou.

        <rdar://problem/4818840> Crash occurs after selecting Print Preview from under the File menu if no printer is selected
        
        * bridge/win/FrameWin.cpp:
        (WebCore::FrameWin::computePageRects): removed calls to setupRootForPrinting
        * bridge/win/FrameWin.h: removed setupRootForPrinting

2007-01-10  Anders Carlsson  <acarlsson@apple.com>

        Yet another build fix.
        
        * platform/win/TemporaryLinkStubs.cpp:
        (DocumentLoader::getResponseModifiedHeader):

2007-01-10  Anders Carlsson  <acarlsson@apple.com>

        Another build fix.
        
        * bridge/win/FrameWin.h:
        * loader/win/FrameLoaderWin.cpp:

2007-01-10  Anders Carlsson  <acarlsson@apple.com>

        Build fix.
        
        * platform/win/TemporaryLinkStubs.cpp:
        (ResourceHandle::setDefersLoading):

2007-01-09  Steve Falkenburg  <sfalken@apple.com>

        Production build fix

        * WebCore.vcproj/WebCore.vcproj:

2007-01-09  Anders Carlsson  <acarlsson@apple.com>

        Build fix.
        
        * platform/win/TextBoundariesWin.cpp:

2007-01-08  Anders Carlsson  <acarlsson@apple.com>

        Remove FrameLoader functions that have been implemented.
        
        * platform/win/TemporaryLinkStubs.cpp:

2007-01-08  Anders Carlsson  <acarlsson@apple.com>

        Build fix.
        
        * WebCore.vcproj/WebCore.vcproj:

2007-01-05  Anders Carlsson  <acarlsson@apple.com>

        Reviewed by Adam.

        Update temporary link stubs.
        
        * platform/win/TemporaryLinkStubs.cpp:
        (FrameLoader::referrer):
        (FrameLoader::overrideMediaType):
        (FrameLoader::checkLoadCompleteForThisFrame):
        (DocumentLoader::getResponseRefreshAndModifiedHeaders):
        (MainResourceLoader::create):
        (ResourceLoader::cancel):
        (ResourceLoader::load):
        (ResourceLoader::releaseResources):
        (ResourceLoader::addData):

2007-01-05  Anders Carlsson  <acarlsson@apple.com>

        Fix build.
        
        * platform/win/TemporaryLinkStubs.cpp:
        (ResourceLoader::cancel):
        (FrameLoader::didChangeTitle):
        (DocumentLoader::unreachableURL):

2007-01-05  Anders Carlsson  <acarlsson@apple.com>

        Fix the build.
        
        * WebCore.vcproj/WebCore.vcproj:
        * platform/network/cf/ResourceHandleCFNet.cpp:
        (WebCore::ResourceHandle::bufferedData):
        (WebCore::ResourceHandle::supportsBufferedData):
        * platform/win/TemporaryLinkStubs.cpp:
        (WebCore::CheckCacheObjectStatus):

2007-01-04  David Hyatt  <hyatt@apple.com>

        Always use 1.0 as the synthetic bold offset for now.  Fixes bug 9534.

        Reviewed by olliej

        * platform/win/FontDataWin.cpp:
        (WebCore::FontData::platformInit):

2007-01-03  Darin Adler  <darin@apple.com>

        Reviewed by Adele.

        - removed some obsolete source files

        * WebCore.vcproj/WebCore.vcproj: Removed obsolete files.

2007-01-03  Beth Dakin  <bdakin@apple.com>

        Reviewed by John.

        Add stubs for all of the localized context menu item titles. The 
        stubs just return English Strings until we have a localization 
        solution in WebKit.

        * platform/win/TemporaryLinkStubs.cpp:
        (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):

2007-01-03  Anders Carlsson  <acarlsson@apple.com>

        Reviewed by Geoff.

        <rdar://problem/4857027>
        ragnarok online misrenders (due to lack of support for windowless plugins)

        * plugins/win/PluginViewWin.cpp:
        (WebCore::PluginViewWin::updateWindow):
        Rename from updateHwnd since this now handles updating the clip rect for windowless plugins.
        
        (WebCore::PluginViewWin::paintMissingPluginIcon):
        New function which paints the missing plugin icon.
        
        (WebCore::PluginViewWin::paint):
        Do windowless painting here.
        
        (WebCore::PluginViewWin::handleKeyboardEvent):
        (WebCore::PluginViewWin::handleMouseEvent):
        (WebCore::PluginViewWin::handleEvent):
        New functions for handling mouse and keyboard events, translating them and handing them to the plugin.
        
        (WebCore::PluginViewWin::setNPWindowRect):
        Set correct window rect for windowless plugins.
        
        (WebCore::PluginViewWin::getValue):
        Add variable for containing HWND.
        
        (WebCore::PluginViewWin::setValue):
        Add windowless and transparent variables.
        
        (WebCore::PluginViewWin::invalidateRect):
        (WebCore::PluginViewWin::invalidateRegion):
        (WebCore::PluginViewWin::forceRedraw):
        Implement these.
        
        (WebCore::PluginViewWin::determineQuirks):
        Set quirks now that we support windowless flash.
        
        (WebCore::PluginViewWin::PluginViewWin):
        Only create the window if the plugin isn't windowless.
        
        * plugins/win/PluginViewWin.h:
        New declarations.
        
        * plugins/win/npapi.cpp:
        (NPN_InvalidateRect):
        (NPN_InvalidateRegion):
        (NPN_ForceRedraw):
        Implement these and forward them to the plugin view.

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

        Reviewed by Lou

        Temporary Link Stub fix for Back/Forward cache landing in OpenSource

        * WebCore.vcproj/WebCore.vcproj:
        * platform/win/TemporaryLinkStubs.cpp:
        (DocumentLoader::request):
        (DocumentLoader::originalRequest):
        (DocumentLoader::title):
        (DocumentLoader::unreachableURL):
        (DocumentLoader::urlForHistory):
        (DocumentLoader::setCommitted):
        (DocumentLoader::prepareForLoadStart):
        (DocumentLoader::replaceRequestURLForAnchorScroll):
        (DocumentLoader::isClientRedirect):
        (DocumentLoader::isLoading):
        (DocumentLoader::getResponseRefreshAndModifiedHeaders):
        (FrameLoader::applyUserAgent):
        (FrameLoader::dataURLBaseFromRequest):
        (FrameLoader::load):
        (FrameLoader::opened):
        (ResourceHandle::willLoadFromCache):
        (WebCore::userIdleTime):
        (PageCache::close):

2007-01-02  Anders Carlsson  <acarlsson@apple.com>

        Build fix.
        
        * WebCore.vcproj/WebCore.vcproj:

2006-12-29  Geoffrey Garen  <ggaren@apple.com>
        
        Build fix.

        * bridge/win/FrameWin.cpp:
        (WebCore::FrameWin::bindingRootObject):
        * plugins/win/PluginViewWin.cpp:
        (WebCore::PluginViewWin::bindingInstance):

2006-12-27  Oliver Hunt <oliver@apple.com>

        Build fix

        * WebCore.vcproj/WebCore.vcproj:
        * platform/graphics/win/ImageWin.cpp:
        (WebCore::BitmapImage::initPlatformData):
        (WebCore::BitmapImage::invalidatePlatformData):
        (WebCore::Image::loadPlatformResource):
        (WebCore::BitmapImage::getHBITMAP):

2006-12-25  Geoffrey Garen  <ggaren@apple.com>

        Fixed build. Tsk, tsk, Oliver.

        * WebCore.vcproj/WebCore.vcproj:

2006-12-25  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Oliver Hunt.

        Removed WebCoreSettings, cleaned up WebCore::Settings.

        * WebCore.vcproj/WebCore.vcproj: Added Settings.cpp to the project.

        * bridge/win/FrameWin.cpp: Updated to use new preferences names.
        (WebCore::FrameWin::bindingRootObject):
        (WebCore::FrameWin::windowScriptNPObject):

        * loader/win/FrameLoaderWin.cpp: ditto.
        (WebCore::FrameLoader::partClearedInBegin):

        * plugins/win/PluginViewWin.cpp: ditto.
        (WebCore::PluginViewWin::load):

2006-12-22  Ada Chan  <adachan@apple.com>

        Reviewed by Anders.

        Build fix.

        * WebCore.vcproj/WebCore.vcproj:

2006-12-22  Anders Carlsson  <acarlsson@apple.com>

        Build fix.
        
        * WebCore.vcproj/WebCore.vcproj:

2006-12-22  John Sullivan  <sullivan@apple.com>

        Reviewed by Kevin Decker

        Renamed stub method name to match change in WebCore

        * platform/win/TemporaryLinkStubs.cpp:
        (WebCore::Editor::markMisspellingsAfterTypingToPosition):
        renamed from markMisspellingsInAdjacentWords

2006-12-20  Adam Roben  <aroben@apple.com>

        Reviewed by Hyatt.

        Fix: <rdar://4769797> REGRESSION: No focus rings

        * platform/win/GraphicsContextWin.cpp:
        (WebCore::GraphicsContext::drawFocusRing):
        * platform/win/TemporaryLinkStubs.cpp:
        (WebCore::focusRingColor): Changed to match the Aqua focus ring color.

2006-12-20  David Hyatt  <hyatt@apple.com>

        Remove line width setting in font rendering now that GraphicsContext sets
        it for us.

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

2006-12-20  David Hyatt  <hyatt@apple.com>

        Add support for stroking and filling of text to CSS.  Boomer side.  Same code as in FontMac.

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

2006-12-19  Steve Falkenburg  <sfalken@apple.com>

        Remove non-existent header from vcproj

        * WebCore.vcproj/WebCore.vcproj:

2006-12-19  Brady Eidson  <beidson@apple.com>

        Reviewed by Ada

        -Changed CFNetwork debugging output to use a logging channel
        -Added the url to each logging message - the debugging output was quite crippled without this
        
        * platform/network/cf/ResourceHandleCFNet.cpp:
        (WebCore::willSendRequest):
        (WebCore::didReceiveResponse):
        (WebCore::didReceiveData):
        (WebCore::didFinishLoading):
        (WebCore::didFail):
        (WebCore::ResourceHandleInternal::~ResourceHandleInternal):
        (WebCore::ResourceHandle::~ResourceHandle):
        (WebCore::ResourceHandle::start):

2006-12-19  Anders Carlsson  <acarlsson@apple.com>

        Reviewed by Geoff.

        <rdar://problem/4876963>
        Crash launching Boomer after all options deselected in pref->security
        
        * loader/win/FrameLoaderWin.cpp:
        (WebCore::FrameLoader::partClearedInBegin):
        Add check for JavaScript.

2006-12-19  Anders Carlsson  <acarlsson@apple.com>

        Reviewed by Kevin Decker.

        Add (currently disabled) plugin quirks. This is necessary in order to get the Flash plugin
        to request windowless plugins (which it only will do if it think it's running on a Mozilla browser).
        
        * plugins/win/PluginViewWin.cpp:
        (WebCore::PluginViewWin::userAgent):
        (WebCore::PluginViewWin::determineQuirks):
        (WebCore::PluginViewWin::PluginViewWin):
        * plugins/win/PluginViewWin.h:
        (WebCore::):
        * plugins/win/npapi.cpp:
        (NPN_UserAgent):

2006-12-19  Brady Eidson  <beidson@apple.com>

        Change by Lou, reviewed by Brady

        Scrolling caused Desktop flickering as well as other strange
        flickering in the case of a missing plug-in

        * plugins/win/PluginViewWin.cpp:
        (WebCore::PluginViewWin::updateHwnd):

2006-12-19  Anders Carlsson  <acarlsson@apple.com>

        * WebCore.vcproj/WebCore.vcproj:
        Update for SVG changes.

2006-12-18  Ada Chan  <adachan@apple.com>

        Reviewed by Adam.

        Removed scheduleClose() from FrameWin.  The implementation has
        been moved to Frame.cpp.                

        * bridge/win/FrameWin.h:
        * platform/win/TemporaryLinkStubs.cpp:
        (FrameWin::mimeTypeForFileName):

2006-12-18  Anders Carlsson  <acarlsson@apple.com>

        Reviewed by Adam and Oliver.

        <rdar://problem/4856014> Target weekly ad doesn't work.
        
        Store the real base URL and use it for requests.
        
        * plugins/win/PluginViewWin.cpp:
        (WebCore::PluginViewWin::getURLNotify):
        (WebCore::PluginViewWin::getURL):
        (WebCore::PluginViewWin::handlePost):
        (WebCore::PluginViewWin::PluginViewWin):
        * plugins/win/PluginViewWin.h:

2006-12-19  Darin Adler  <darin@apple.com>

        * platform/win/FontWin.cpp: (WebCore::Font::drawGlyphs): Fix build,
        wrong variable name.

2006-12-18  David Hyatt  <hyatt@apple.com>

        Boomer side of my changes for filling/stroking of text.

        Reviewed by olliej

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

2006-12-18  Alice Liu  <alice.liu@apple.com>

        Reviewed by Adam.

        <rdar://problem/4853363> hook up various deletion-related functions in WebView

        * WebCore.vcproj/WebCore.vcproj:
        Added file EditorDeleteAction.h

2006-12-18  Kevin McCullough  <KMcCullough@apple.com>

        Reviewed by Oliver.

        - Remove CG header includes in OpenSource files

        * config.h:
        * platform/graphics/cg/GraphicsContextPlatformPrivate.h:

2006-12-18  Adam Roben  <aroben@apple.com>

        Build fixes.

        * WebCore.vcproj/WebCore.vcproj: Removed deleted files.
        * platform/win/CursorWin.cpp: Added missing method.
        (WebCore::noneCursor):

2006-12-16  Beth Dakin  <bdakin@apple.com>

        Reviewed by Adam (and partially Geoff).

        Boomer side of making WebCore Context Menus support state and
        enabled/disabled, and re-architecture of ContextMenuItem.

        * platform/win/ContextMenuItemWin.cpp: ContextMenuItem class holds
        the platformDescription as the sole member variable. Changes to
        account for this.
        (WebCore::ContextMenuItem::ContextMenuItem): Same.
        (WebCore::ContextMenuItem::releasePlatformDescription): Same.
        (WebCore::ContextMenuItem::type): Same
        (WebCore::ContextMenuItem::platformSubMenu): Same.
        (WebCore::ContextMenuItem::setType): Same.
        (WebCore::ContextMenuItem::setTitle): Same.
        (WebCore::ContextMenuItem::setSubMenu): Same.
        (WebCore::ContextMenuItem::setChecked): Same.
        (WebCore::ContextMenuItem::setEnabled): Same.
        * platform/win/ContextMenuWin.cpp:
        (WebCore::ContextMenu::insertItem): Takes ownership of the item by
        calling releasePlatformDescription()
        (WebCore::ContextMenu::appendItem): Same.
        (WebCore::ContextMenu::itemWithAction): This is the new at(). Since
        we are no longer using notifybypos, we instead need a way to find a
        menu item by its action. (Its ID.)
        (WebCore::ContextMenu::setPlatformDescription): No longer use
        notifybypos.

2006-12-16  Adele Peterson  <adele@apple.com>

        RS by Adam.

        Removed TextField, RenderLineEdit classes.

        * WebCore.vcproj/WebCore.vcproj:
        * platform/win/TemporaryLinkStubs.cpp:

2006-12-16  Adele Peterson  <adele@apple.com>

        Reviewed by Adam.

        Added PopupMenu and theme code for:
        <rdar://problem/4463829> Switch to use new search field implementation for <input type="search"> 

        * WebCore.vcproj/WebCore.vcproj:
        * platform/graphics/win/IconWin.cpp:
        (WebCore::Icon::Icon):
        * platform/win/PopupMenuWin.cpp:
        (WebCore::PopupMenu::setFocusedIndex):
        (WebCore::PopupWndProc):
        * platform/win/SearchPopupMenuWin.cpp: Added.
        (WebCore::SearchPopupMenu::SearchPopupMenu):
        (WebCore::autosaveKey):
        (WebCore::SearchPopupMenu::saveRecentSearches):
        (WebCore::SearchPopupMenu::loadRecentSearches):
        * rendering/RenderThemeWin.cpp:
        (WebCore::RenderThemeWin::paintSearchField):
        (WebCore::RenderThemeWin::adjustSearchFieldStyle):
        (WebCore::RenderThemeWin::paintSearchFieldCancelButton):
        (WebCore::RenderThemeWin::adjustSearchFieldCancelButtonStyle):
        (WebCore::RenderThemeWin::adjustSearchFieldDecorationStyle):
        (WebCore::RenderThemeWin::paintSearchFieldDecoration):
        (WebCore::RenderThemeWin::adjustSearchFieldResultsDecorationStyle):
        (WebCore::RenderThemeWin::paintSearchFieldResultsDecoration):
        (WebCore::RenderThemeWin::adjustSearchFieldResultsButtonStyle):
        (WebCore::RenderThemeWin::paintSearchFieldResultsButton):
        * rendering/RenderThemeWin.h:

2006-12-15  Anders Carlson  <acarlsson@apple.com>

        * platform/win/TemporaryLinkStubs.cpp:
        Remove DocumentLoader::isStopped because it's now in DocumentLoader.cpp.
        
2006-12-15  Geoffrey Garen  <ggaren@apple.com>

        I'm in ur prjct, fxng ur build.
        
        * WebCore.vcproj/WebCore.vcproj:
        * platform/win/TemporaryLinkStubs.cpp:
        (ResourceHandle::loadResourceSynchronously):

2006-12-14  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Brady Eidson.
        
        Fixed <rdar://problem/4760682> Crash clicking nav links at left loading 
        www.tivofaq.com
        
        The underlying problem is that we can't resize framesets. I've filed that
        as <rdar://problem/4885227>.
        
        I've fixed the proximate problem: we were interpreting a click as a frameset
        resize, because the subframe event handler was returning false. A Subframe 
        event handler needs to return true to indicate that the subframe has handled 
        the event. This is how the Mac works, despite the plethora of convoluted code 
        suggesting otherwise.
        
        We should really remove these meaningless return values and unify Mac and 
        Windows event handling, but that's beyond the scope of this patch.

        * page/win/EventHandlerWin.cpp:
        (WebCore::EventHandler::passMousePressEventToSubframe):
        (WebCore::EventHandler::passMouseMoveEventToSubframe):
        (WebCore::EventHandler::passMouseReleaseEventToSubframe):
        (WebCore::EventHandler::passWheelEventToSubframe):

2006-12-14  Adele Peterson  <adele@apple.com>

        Reviewed by Adam. 

        Update PopupMenu code to use new PopupMenuClient instead of RenderMenuList.

        * platform/win/PopupMenuWin.cpp:
        (WebCore::PopupMenu::PopupMenu):
        (WebCore::PopupMenu::show):
        (WebCore::PopupMenu::calculatePositionAndSize):
        (WebCore::PopupMenu::setFocusedIndex):
        (WebCore::PopupMenu::focusedIndex):
        (WebCore::PopupMenu::focusFirst):
        (WebCore::PopupMenu::focusLast):
        (WebCore::PopupMenu::down):
        (WebCore::PopupMenu::up):
        (WebCore::PopupMenu::paint):
        (WebCore::PopupWndProc):

2006-12-14  Steve Falkenburg  <sfalken@apple.com>

        Build fix.

        * platform/win/TemporaryLinkStubs.cpp:
        (SubresourceLoader::didCancel):

2006-12-14  Steve Falkenburg  <sfalken@apple.com>

        Production build fix. Added JSSVGPODTypeWrapper.h to the vcproj.

        * WebCore.vcproj/WebCore.vcproj:

2006-12-14  Adam Roben  <aroben@apple.com>

        Reviewed by Adele.

        Build fix.

        * platform/win/TemporaryLinkStubs.cpp:
        (DocumentLoader::URL):
        (ResourceHandle::loadResourceSynchronously):

2006-12-14  Anders Carlsson  <acarlsson@apple.com>

        Fix the build.
        
        * platform/win/TemporaryLinkStubs.cpp:
        (FrameLoader::loadResourceSynchronously):
        (ResourceHandle::loadResourceSynchronously):

2006-12-13  Anders Carlsson  <acarlsson@apple.com>

        Fix the build.
        
        * platform/win/TemporaryLinkStubs.cpp:
        (PolicyCheck::call):
        (DocumentLoader::URL):

2006-12-13  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Darin Adler, Dave Hyatt.
        
        Fixed <rdar://problem/4840261> Frame::setIsActive not called when frames 
        are focused/unfocused
        
        Minor problems remain with focus in frames, but basic editing / cursor
        focus works.
        
        I moved tracking of the focused frame from the Widget hiearchy to Page's
        FocusController. Not all widgets are frames, so this change cleaned up a 
        dubious static cast. Also, the DOM needs to track frame focus because (1) 
        it needs to respond to focus changes and (2) you can focus an element / 
        frame even before it has a renderer / widget.

        * page/win/EventHandlerWin.cpp:
        (WebCore::EventHandler::focusDocumentView): Implemented. This function is
        poorly named, based on the Mac design.
        (WebCore::PluginViewWin::hasFocus): Added for completeness. It's not really
        used on Windows, though.

2006-12-13  Steve Falkenburg  <sfalken@apple.com>

        Reviewed by Adam.

        Add missing ForwardingHeaders to project

        * WebCore.vcproj/WebCore.make: Fixed line endings
        * WebCore.vcproj/WebCore.vcproj: Added missing headers

2006-12-12  Steve Falkenburg  <sfalken@apple.com>

        Reviewed by Adam.

        Production build fix

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

2006-12-12  Alice Liu  <alice.liu@apple.com>

        Reviewed by Geoff.

        Fixed <rdar://problem/4853199> extra whitespace at beginning and end of pasted fragment into contenteditable region
        
        * WebCore.vcproj/WebCore.vcproj:
        * platform/win/PasteboardWin.cpp:
        (WebCore::Pasteboard::documentFragment):

2006-12-12  Adam Roben  <aroben@apple.com>

        Reviewed by Anders.

        Fixed use of min/max macros (again).

        * WebCore.vcproj/WebCore.vcproj: Make sure we include ForwardingHeaders
        before any include directories so that we get the newest versions
        of our headers.
        * config.h: Move the fake #defines of min/max out of #if
        PLATFORM(WIN_OS) since this is useful in general.
        * platform/win/BString.cpp: Include windows.h
        * platform/win/BString.h: Forward-declare BSTR so we don't have to
        include windows.h.

2006-12-12  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Adam Roben, Dave Hyatt, Darin Adler.

        Added FocusController to project.

        * WebCore.vcproj/WebCore.vcproj:

2006-12-12  Anders Carlsson  <acarlsson@apple.com>

        * loader/win/ResourceLoaderWin.cpp:
        * platform/network/cf/ResourceHandleCFNet.cpp:
        (WebCore::ResourceHandle::start):
        * platform/win/TemporaryLinkStubs.cpp:
        (ResourceHandle::loadsBlocked):
        Update for changes to ResourceHandle.

2006-12-13  Darin Adler  <darin@apple.com>

        - fix build

        * WebCore.vcproj/WebCore.vcproj: Added missing files, removed obsolete files.

2006-12-11  Adam Roben  <aroben@apple.com>

        Build fix.

        * WebCore.vcproj/WebCore.vcproj: Added missing files to project.

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

        Production build fix.
        Remove platform/UChar.h from our vcproj, since it doesn't exist anymore.

        * WebCore.vcproj/WebCore.vcproj:

2006-12-11  Alice Liu  <alice.liu@apple.com>

        Reviewed by ggaren.

        Fixed <rdar://problem/4854901> "Copy Link" and "Copy Image Address" context menu items don't work
        And some cleanup of PlatformMouseEvent(Win)

        * page/win/EventHandlerWin.cpp:
        (WebCore::EventHandler::handleDrag):
        Removed unnecessary check for mouse event type
        
        * platform/win/PasteboardWin.cpp:
        
        (WebCore::PasteboardOwnerWndProc):
        (WebCore::createGlobalData):
        Added more overloaded implemtations and renamed from createHandle
        
        (WebCore::markupToCF_HTML):
        Changed to handle less-specific input and renamed from createCF_HTML
        
        (WebCore::urlToMarkup):
        (WebCore::Pasteboard::writeURL):
        Added these. 
        
        (WebCore::replaceNBSP):
        Moved out of Pasteboard class
        
        (WebCore::Pasteboard::clear):
        Renamed from clearTypes.
        
        (WebCore::Pasteboard::writeSelection):
        (WebCore::Pasteboard::canSmartReplace):
        (WebCore::Pasteboard::plainText):
        (WebCore::Pasteboard::documentFragment):
        Trivial cleanup of these.
        
        * platform/win/PlatformMouseEventWin.cpp:
        (WebCore::PlatformMouseEvent::PlatformMouseEvent):
        Removed anything having to do with unnecessary m_type

2006-12-11  Darin Adler  <darin@apple.com>

        Reviewed by Brady.

        - http://bugs.webkit.org/show_bug.cgi?id=11794
          fix lifetime problems affecting Frame's ownerElement pointer

        * WebCore.vcproj/WebCore.vcproj: Update for added files.

        * bridge/win/FrameWin.h:
        * bridge/win/FrameWin.cpp: (WebCore::FrameWin::FrameWin):
        * loader/win/FrameLoaderWin.cpp: (WebCore::FrameLoader::createFrame):
        Changed to use HTMLFrameOwnerElement.

        * platform/win/TemporaryLinkStubs.cpp: (FrameLoader::load):
        Changed to use HTMLFormElement.

2006-12-11  Beth Dakin  <bdakin@apple.com>

        Reviewed by Adam.

        Build fix from Nick Zimmerman's last check-in.

        * WebCore.vcproj/WebCore.vcproj:

2006-12-09  Adam Roben  <aroben@apple.com>

        Reviewed by Hyatt.

        Use num-cpus to determine the number of jobs make should run
        concurrently.

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

2006-12-09  Adam Roben  <aroben@apple.com>

        Reviewed by Hyatt.

        Fix: <rdar://problem/4860184> Can't select context menu items with the
        right mouse button

        * platform/win/ContextMenuWin.cpp:
        (WebCore::ContextMenu::show):

2006-12-09  Adam Roben  <aroben@apple.com>

        Reviewed by Darin.

        Build fixes after OpenSource r18098 and r18106.

        * WebCore.vcproj/WebCore.vcproj:
            - Changed include paths to reflect the now-flattened JSCore headers.
            - Added missing files to project.
            - Changed post-build step to also copy ForwardingHeaders.
            - Removed unnecessary definition of WTF_PLATFORM_CF from project
              file (it's already defined in config.h).
        * platform/win/TextBoundariesWin.cpp: Fixed up includes and renamed
        function calls.
        (WebCore::findNextWordFromIndex):
        (WebCore::findWordBoundary):

2006-12-08  Adam Roben  <aroben@apple.com>

        Rubberstamped by Anders.

        * platform/win/FontPlatformDataWin.cpp:
        (WebCore::FontPlatformData::FontPlatformData): Fix use of min().

2006-12-08  Adam Roben  <aroben@apple.com>

        Build fix.

        * WebCore.vcproj/WebCore.vcproj:

2006-12-07  Beth Dakin  <bdakin@apple.com>

        Reviewed by Maciej.

        Add a new member variable to ContectMenuItem to hold on to the sub-
        menu. The new member variable is an OwnPtr<ContextMenu>. Not doing 
        this breaks sub-menus on Boomer since the menu items are no longer 
        static.

        * platform/win/ContextMenuItemWin.cpp:
        (WebCore::ContextMenuItem::ContextMenuItem):
        (WebCore::ContextMenuItem::platformSubMenu):
        (WebCore::ContextMenuItem::setSubMenu):

2006-12-07  Kevin McCullough  <kmccullough@apple.com>

        Reviewed by.

        Fixed previous comment

        * ChangeLog:

2006-12-07  Kevin McCullough  <kmccullough@apple.com>

        Reviewed by Geof.

        - keyDown events must be followed by keyPressed events and before keyUp events.

        * bridge/win/FrameWin.cpp:
        (WebCore::FrameWin::keyEvent):

2006-12-07  Beth Dakin  <bdakin@apple.com>

        Reviewed by Brady.

        New link stub for load() function used by 
        ContextMenuItemTagOpenLink action.

        * platform/win/TemporaryLinkStubs.cpp:
        (FrameLoader::load):

2006-12-07  Ada Chan  <adachan@apple.com>

        Reviewed by Steve and Anders.

        <rdar://4866288> Crash on boomer quit
        - don't close the themes on termination, since uxtheme should do that anyway.

        * rendering/RenderThemeWin.cpp:
        (WebCore::RenderThemeWin::~RenderThemeWin):

2006-12-06  Ada Chan  <adachan@apple.com>

        Reviewed by Maciej.

        Fixed a couple of things while investigating <rdar://4866288> (note this doesn't fix the crash yet):
        - we forgot to initialize m_sliderTheme
        - we did the wrong null check when getting the slider theme.

        * rendering/RenderThemeWin.cpp:
        (WebCore::RenderThemeWin::RenderThemeWin):
        (WebCore::RenderThemeWin::sliderTheme):

2006-12-06  Anders Carlsson  <acarlsson@apple.com>

        Fix the build.
        
        * platform/network/cf/ResourceHandleCFNet.cpp:
        (WebCore::didReceiveData):
        (WebCore::didFail):
        (WebCore::ResourceHandle::start):
        (WebCore::ResourceHandle::cancel):

2006-12-06  Anders Carlsson  <acarlsson@apple.com>

        Reviewed by Adam.

        Modify PluginStreamWin to use a SubresourceLoader instead of a ResourceHandle.

        * plugins/win/PluginStreamWin.cpp:
        (WebCore::PluginStreamWin::PluginStreamWin):
        (WebCore::PluginStreamWin::~PluginStreamWin):
        (WebCore::PluginStreamWin::start):
        (WebCore::PluginStreamWin::stop):
        (WebCore::PluginStreamWin::deliverData):
        (WebCore::PluginStreamWin::didReceiveResponse):
        (WebCore::PluginStreamWin::didReceiveData):
        (WebCore::PluginStreamWin::didFail):
        (WebCore::PluginStreamWin::didFinishLoading):
        * plugins/win/PluginStreamWin.h:
        * plugins/win/PluginViewWin.cpp:
        (WebCore::PluginViewWin::performRequest):
        (WebCore::PluginViewWin::load):

2006-12-06  Anders Carlsson  <acarlsson@apple.com>

        Build fixes.
        
        * WebCore.vcproj/WebCore.vcproj:
        * platform/win/TemporaryLinkStubs.cpp:
        (FrameWin::scheduleClose):

2006-12-05  John Sullivan  <sullivan@apple.com>

        Try to keep the windows build happy with Frame -> Editor changes...

        * bridge/win/FrameWin.h:
        removed declarations of spelling and grammar functions

        * platform/win/TemporaryLinkStubs.cpp:
        changed spelling and grammar functions from FrameWin:: to Editor::
        (WebCore::Editor::isSelectionMisspelled):
        (WebCore::Editor::isSelectionUngrammatical):
        (WebCore::Editor::guessesForMisspelledSelection):
        (WebCore::Editor::guessesForUngrammaticalSelection):
        (WebCore::Editor::markMisspellingsInAdjacentWords):
        (WebCore::Editor::advanceToNextMisspelling):

2006-12-05  Anders Carlsson  <acarlsson@apple.com>

        Reviewed by Maciej.

        Don't delete the internal pointer anymore since it's an OwnPtr now.
        
        * platform/network/cf/ResourceHandleCFNet.cpp:
        (WebCore::ResourceHandle::~ResourceHandle):

2006-12-05  Steve Falkenburg  <sfalken@apple.com>

        Fix the build

        * platform/win/TemporaryLinkStubs.cpp:

2006-12-05  Steve Falkenburg  <sfalken@apple.com>

        Production build fix.
        ...and add ImageAnimationObserver.h into its new location.

        * WebCore.vcproj/WebCore.vcproj:

2006-12-05  Steve Falkenburg  <sfalken@apple.com>

        Production build fix.
        Remove ImageAnimationObserver.h from vcproj.

        * WebCore.vcproj/WebCore.vcproj:

2006-12-05  John Sullivan  <sullivan@apple.com>

        Reviewed by Geoff Garen

        Changes to keep up with Frame -> Editor changes in WebCore

        * bridge/win/FrameWin.h:
        remove ignoreSpelling() and learnSpelling()

        * platform/win/TemporaryLinkStubs.cpp:
        (WebCore::Editor::ignoreSpelling):
        moved from FrameWin to Editor
        (WebCore::Editor::learnSpelling):
        ditto

2006-12-05  Alice Liu  <alice.liu@apple.com>

        Build fix.
        
        * platform/win/CursorWin.cpp:
        (WebCore::copyCursor):

2006-12-05  Alice Liu  <alice.liu@apple.com>

        Build fix.
        
        * bridge/win/FrameWin.h:
        added missing declarations for the functions in John's checkin, below. 

2006-12-05  John Sullivan  <sullivan@apple.com>

        * platform/win/TemporaryLinkStubs.cpp:
        (WebCore::FrameWin::isSelectionUngrammatical):
        (WebCore::FrameWin::guessesForUngrammaticalSelection):
        added stubs to correspond to new Frame functions

2006-12-04  Anders Carlsson  <acarlsson@apple.com>

        Reviewed by Darin.

        * WebCore.vcproj/WebCore.vcproj:
        Add SubresourceClient.h
        
        * platform/network/cf/ResourceHandleCFNet.cpp:
        (WebCore::didReceiveResponse):
        Get rid of the receivedResponse call.
        
        (WebCore::didFinishLoading):
        Get rid of the receivedAllData call, that's handled by the subresource loader now.

2006-12-04  Darin Adler  <darin@apple.com>

        Reviewed by Adele.

        * WebCore.vcproj/WebCore.vcproj: Update for new UIEventWithKeyState.cpp file.

2006-12-04  Kevin McCullough  <KMcCullough@apple.com>

        Reviewed by Darin.

        - removed the guards for the "multiple forms submission" issue, which may not be
          an issue anymore and the guards prevent perfectly legitimate websites from
          working correctly.

        * bridge/win/FrameWin.cpp:
        (WebCore::FrameWin::keyEvent):
        * config.h:
        * loader/win/FrameLoaderWin.cpp:
        (WebCore::FrameLoader::submitForm):

2006-12-04  Darin Adler  <darin@apple.com>

        Reviewed by Alice.

        * platform/win/PasteboardWin.cpp: (WebCore::Pasteboard::generalPasteboard):
        Got rid of s_generalPasteboard. Also removed definition of destructor.

2006-12-04  Anders Carlsson  <acarlsson@apple.com>

        Reviewed by Darin, Geoff.

        Get rid of ref() in ResourceHandle::start() and remove all uses of kill().
        
        * platform/network/cf/ResourceHandleCFNet.cpp:
        (WebCore::didFinishLoading):
        (WebCore::didFail):
        (WebCore::ResourceHandle::start):
        * plugins/win/PluginStreamWin.cpp:
        (WebCore::PluginStreamWin::stop):

2006-12-04  Alice Liu  <alice.liu@apple.com>

        Reviewed by Oliver.

        Fixed <rdar://problem/4822632> clicks don't work if you move mouse immediately
        This bug was fixed by implementing EventHandler::handleDrag.  The part of that
        function after the drag hysteresis is exceeded remains unimplemented until 
        drag&drop is implemented. 

        * page/win/EventHandlerWin.cpp:
        (WebCore::dragState):
        (WebCore::EventHandler::dragHysteresisExceeded):
        (WebCore::EventHandler::handleDrag):
        (WebCore::EventHandler::handleMouseUp):
        (WebCore::EventHandler::shouldDragAutoNode):
        (WebCore::EventHandler::focusDocumentView):
        (WebCore::EventHandler::passWidgetMouseDownEventToWidget):
        * platform/win/PlatformMouseEventWin.cpp:
        (WebCore::PlatformMouseEvent::PlatformMouseEvent):

2006-12-01  Beth Dakin  <bdakin@apple.com>

        Reviewed by Adam.

        Support for sub-menus in WebCore context menus. Also some
        adjustments to make ContextMenuItem class a wrapper for the
        platformDescription. (In this case, a wrapper for LPMENUITEMINFO.)

        * WebCore.vcproj/WebCore.vcproj:
        * platform/win/ContextMenuItemWin.cpp:
        (WebCore::ContextMenuItem::ContextMenuItem):
        (WebCore::ContextMenuItem::platformDescription):
        (WebCore::ContextMenuItem::action):
        (WebCore::ContextMenuItem::title):
        (WebCore::ContextMenuItem::platformSubMenu):
        (WebCore::ContextMenuItem::setAction):
        (WebCore::ContextMenuItem::setTitle):
        (WebCore::ContextMenuItem::setSubMenu):
        * platform/win/ContextMenuWin.cpp:
        (WebCore::ContextMenu::ContextMenu):
        (WebCore::ContextMenu::insertItem):

2006-11-30  Geoffrey Garen  <ggaren@apple.com>

        Rubber Stamped by Anders Carlsson.

        Global rename of Document::focusNode to Document::focusedNode. 'focusNode'
        suggested a command, and conflicted with a different meaning for 'focusNode'
        in the Mozilla selection API.

        * bridge/win/FrameWin.cpp:
        (WebCore::FrameWin::keyEvent):

2006-11-30  Adam Roben  <aroben@apple.com>

        Lather, rinse, repeat.

        * platform/win/GraphicsContextWin.cpp:
        (WebCore::contextForImage):

2006-11-30  Adam Roben  <aroben@apple.com>

        Build fix.

        * platform/graphics/cg/GraphicsContextCG.cpp: Removed. This file was
        un-forked a while ago.
        * platform/win/ContextMenuWin.cpp:
        (WebCore::ContextMenu::platformDescription):
        * platform/win/GraphicsContextWin.cpp:
        (WebCore::contextForImage):

2006-11-30  Adam Roben  <aroben@apple.com>

        Build fix. 


        * WebCore.vcproj/WebCore.vcproj:
        * platform/graphics/svg/cg/SVGResourceFilterCg.cpp:
        (WebCore::SVGResourceFilter::prepareFilter):
        (WebCore::SVGResourceFilter::applyFilter):
        (WebCore::SVGResourceFilter::createFilterEffect):
        * platform/graphics/svg/cg/SVGResourceMaskerCg.cpp:
        (WebCore::SVGResourceMasker::applyMask):

2006-11-30  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Beth Dakin.
        
        Fixed <rdar://problem/4844838> Whole document leak seen 
        running HTML iBench

        * loader/win/FrameLoaderWin.cpp: Removed custom implementation
        for detachFromParent, since FrameLoader has a cross-platform
        version now.

2006-11-30  Steve Falkenburg  <sfalken@apple.com>

        Production build fix.  Add missing header files to vcproj.

        * WebCore.vcproj/WebCore.vcproj:

2006-11-29  Anders Carlsson  <acarlsson@apple.com>

        Build fix.
        
        * platform/win/TemporaryLinkStubs.cpp:
        Remove unused function.

2006-11-29  Anders Carlsson  <acarlsson@apple.com>

        Reviewed by Oliver.

        Fix fast/dom/xmlhttprequest-get layout test failure.

        * platform/network/cf/ResourceResponseCFNet.cpp:
        (WebCore::ResourceResponse::doUpdateResourceResponse):
        Initialize the status code to 0 for non-http responses.

2006-11-29  Anders Carlsson  <acarlsson@apple.com>

        Reviewed by Darin.

        Have ResourceResponse hold on to the platform object and do lazy
        initialization of the data members.
        
        * WebCore.vcproj/WebCore.vcproj:
        * platform/network/cf/ResourceHandleCFNet.cpp:
        (WebCore::willSendRequest):
        (WebCore::didReceiveResponse):
        * platform/network/cf/ResourceRequestCFNet.h: Removed.
        * platform/network/cf/ResourceResponseCFNet.cpp:
        (WebCore::ResourceResponse::doUpdateResourceResponse):
        * platform/network/cf/ResourceResponseCFNet.h: Removed.
        * platform/win/MimeTypeRegistryWin.cpp:

2006-11-28  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Beth Dakin.

        Fixed <rdar://problem/4844855> Should clarify when to create clients in 
        the WebCore client API
        
        All clients must now be supplied as constructor arguments. This clarifies 
        when you need to create clients, and also guarantees that objects can't 
        (for the most part) be in a clientless state.

        Layout tests pass. No leaks reported.
        
        * bridge/win/FrameWin.cpp:
        (WebCore::FrameWin::FrameWin):
        * bridge/win/FrameWin.h:

2006-11-28  Adam Roben  <aroben@apple.com>

        Reviewed by Ada.

        Add platform-specific constructor/destructor to ContextMenu so we can
        properly dispose of the HMENU.

        * platform/win/ContextMenuWin.cpp:
        (WebCore::ContextMenu::ContextMenu):
        (WebCore::ContextMenu::~ContextMenu):
        (WebCore::ContextMenu::itemCount):
        (WebCore::ContextMenu::insertItem):
        (WebCore::ContextMenu::at):
        (WebCore::ContextMenu::setPlatformDescription):
        (WebCore::ContextMenu::show):

2006-11-28  Steve Falkenburg  <sfalken@apple.com>

        B&I build fix

        * WebCore.vcproj/WebCore.vcproj:

2006-11-28  Anders Carlsson  <acarlsson@apple.com>

        Fix the build by doing the same changes that were done in the open source WebCore repo.
        
        * WebCore.vcproj/WebCore.vcproj:
        * platform/network/cf/ResourceHandleCFNet.cpp:
        (WebCore::willSendRequest):
        (WebCore::didReceiveResponse):
        (WebCore::ResourceHandle::start):
        * platform/network/cf/ResourceRequestCFNet.cpp:
        (WebCore::ResourceRequest::cfURLRequest):
        (WebCore::addHeadersFromHashMap):
        (WebCore::ResourceRequest::doUpdatePlatformRequest):
        (WebCore::ResourceRequest::doUpdateResourceRequest):
        * platform/network/cf/ResourceRequestCFNet.h:

2006-11-28  Adam Roben  <aroben@apple.com>

        Reviewed by Ada and Beth.

        Fix: <rdar://problem/4601523> Contextual Menus (in web content)

        * WebCore.vcproj/WebCore.vcproj: Defined WEBCORE_CONTEXT_MENUS to turn
        on the context menus. Added new ContextMenuItem files.
        * platform/win/ContextMenuItemWin.cpp: Added.
        (WebCore::ContextMenuItem::ContextMenuItem):
        * platform/win/ContextMenuWin.cpp:
        (WebCore::ContextMenu::itemCount): Updated to match ContextMenu.h and
        ContextMenuItem changes.
        (WebCore::ContextMenu::insertItem): Ditto.
        (WebCore::ContextMenu::appendItem): Ditto.
        (WebCore::ContextMenu::at): New method, similar to Vector<T>::at.
        (WebCore::ContextMenu::setPlatformDescription): Use MIM_APPLYTOSUBMENUS
        to make sure all submenus get the MNS_NOTIFYBYPOS style.
        (WebCore::ContextMenu::show): Implemented.

        Updates to match OpenSource changes.

        * loader/win/FrameLoaderWin.cpp: Added missing #include.
        * page/win/EventHandlerWin.cpp: Return bools to signify whether the
        event was handled.
        (WebCore::EventHandler::passMousePressEventToSubframe):
        (WebCore::EventHandler::passMouseMoveEventToSubframe):
        (WebCore::EventHandler::passMouseReleaseEventToSubframe):
        (WebCore::EventHandler::passWheelEventToSubframe):
        (WebCore::EventHandler::passMousePressEventToScrollbar):
        * platform/win/PlatformScrollBar.h: Ditto.
        * platform/win/PlatformScrollBarWin.cpp: Ditto.
        (WebCore::PlatformScrollbar::handleMouseMoveEvent):
        (WebCore::PlatformScrollbar::handleMouseOutEvent):
        (WebCore::PlatformScrollbar::handleMousePressEvent):
        (WebCore::PlatformScrollbar::handleMouseReleaseEvent):

        Small fix inspired by WebView.cpp changes.

        * platform/win/PopupMenuWin.cpp:
        (WebCore::PopupMenu::calculatePositionAndSize): Use ::ClientToScreen to
        do coordinate conversion instead of doing it ourselves.

2006-11-28  Anders Carlsson  <acarlsson@apple.com>

        Reviewed by Adam.
        
        <rdar://problem/4850883>
        Crash loading pdf page (W4 form)
        
        * platform/win/TemporaryLinkStubs.cpp:
        (FrameLoader::redirectDataToPlugin):
        * loader/win/FrameLoaderWin.cpp:
        (WebCore::FrameLoader::redirectDataToPlugin):
        Move the function to FrameLoaderWin.cpp and get rid of STOP_NOIMPL() for now, 
        we do things differently on Windows so this function doesn't need do do anything.
        I've filed 4852889 about redoing this once the loader has been ported.

2006-11-28  Alice Liu  <alice.liu@apple.com>

        Reviewed by Ada, Adam, and Lou.

        * WebCore.vcproj/WebCore.vcproj:
        Added the files listed below
        
        * platform/win/ClipboardWin.h: Added.
        * platform/win/ClipboardWin.cpp: Added.
        Added the minimum stubs for the ClipboardWin class
        (WebCore::ClipboardWin::isForDragging):
        (WebCore::ClipboardWin::dropEffect):
        (WebCore::ClipboardWin::setDropEffect):
        (WebCore::ClipboardWin::effectAllowed):
        (WebCore::ClipboardWin::setEffectAllowed):
        (WebCore::ClipboardWin::clearData):
        (WebCore::ClipboardWin::clearAllData):
        (WebCore::ClipboardWin::getData):
        (WebCore::ClipboardWin::setData):
        (WebCore::ClipboardWin::types):
        (WebCore::ClipboardWin::dragLocation):
        (WebCore::ClipboardWin::dragImage):
        (WebCore::ClipboardWin::setDragImage):
        (WebCore::ClipboardWin::dragImageElement):
        (WebCore::ClipboardWin::setDragImageElement):
        (WebCore::ClipboardWin::setAccessPolicy):
        (WebCore::ClipboardWin::~ClipboardWin):

        * platform/win/EditorWin.cpp: Added.
        Added this to make dispatchCPPEvent happy. 
        (WebCore::Editor::newGeneralClipboard):

        * platform/win/PasteboardWin.cpp: Added.
        The pasteboard class follows a singleton pattern
        Implemented the following to support CF_HTML, CF_UNICODE, and CF_TEXT
        (WebCore::Pasteboard::generalPasteboard):
        (WebCore::Pasteboard::Pasteboard):
        (WebCore::Pasteboard::~Pasteboard):
        (WebCore::Pasteboard::registerSelectionPasteboardTypes):
        (WebCore::Pasteboard::clearTypes):
        (WebCore::Pasteboard::writeSelection):
        (WebCore::Pasteboard::createHandleFromString):
        (WebCore::Pasteboard::createHandleFromCString):
        (WebCore::Pasteboard::createCF_HTMLFromRange):
        (WebCore::Pasteboard::replaceNBSP):
        (WebCore::Pasteboard::canSmartReplace):
        (WebCore::Pasteboard::plainText):
        (WebCore::Pasteboard::documentFragment):
        (WebCore::PasteboardOwnerWndProc):

2006-11-28  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Anders Carlsson.

        Fixed <rdar://problem/4844863> REGRESSION: screen flashes when scrolling/
        resizing page with plug-in (@ cnn.com, for example).

        LockWindowUpdate was to blame. It turns out that using LockWindowUpdate
        was wrong to begin with. It's really only intended for use in drag-n-drop
        operations, which explains why only one window can be locked at a time.
        (See http://blogs.msdn.com/oldnewthing/archive/2004/06/10/152612.aspx.)
        
        The new solution I've implemented for avoiding plug-in fragments while scrolling
        is simply to clip the plug-in to the zero rect before moving it, and
        then to un-clip it when done.
        
        * plugins/win/PluginViewWin.cpp:
        (WebCore::PluginViewWin::updateHwnd):

2006-11-28  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Adam.

        Fixed <rdar://problem/4844848> REGRESSION: extra cross-library ref/deref 
        calls cause .5% PLT regression.
        
        Changed ref/deref calls to a single 'xxxDestroyed' call. Moved EditorClient
        from the Frame to the Page, since it's only responsible for
        Webview-level delegate calls.
        
        I don't really love this design, but it fixes the regression and allows
        a single WebKit object to implement multiple client interfaces.
        
        Layout tests pass.

2006-11-27  Beth Dakin  <bdakin@apple.com>

        Reviewed by Adam.

        Stub out functions in order to remove FIXMEs from ContextMenu.cpp

        * bridge/win/FrameWin.h: Spell checker functions pushed down from 
        WebKit.
        * platform/win/TemporaryLinkStubs.cpp: Stubs for spelling 
        functions.
        (WebCore::FrameWin::isSelectionMisspelled):
        (WebCore::FrameWin::guessesForMisspelledSelection):

2006-11-27  Oliver Hunt  <oliver@apple.com>

        Reviewed by Adam.

        Fixes a crash in SVG caused by an attempt to 
        perform css overflow clipping by preventing
        the css overflow clip from being set in SVG.
        
        <rdar:/problems/4839568>

        * WebCore.vcproj/WebCore.vcproj:

2006-11-27  Anders Carlsson  <acarlsson@apple.com>

        Remove addMessageToConsole from FrameWin.
        * bridge/win/FrameWin.h:
        * platform/win/TemporaryLinkStubs.cpp:
        
2006-11-21  Anders Carlsson  <acarlsson@apple.com>

        Reviewed by Adam.

        Various fixes that make file upload possible.
        
        * bridge/win/FrameWin.h:
        * loader/win/FrameLoaderWin.cpp:
        (WebCore::FrameLoader::submitForm):
        Change submitForm to take a FrameLoadRequest.
        
        * platform/network/cf/FormDataStreamCFNet.cpp:
        (WebCore::advanceCurrentStream):
        Pass kCFURLWindowsPathStyle to CFURLCreateWithFileSystemPath.
        
        * platform/network/cf/ResourceHandleCFNet.cpp:
        (WebCore::willSendRequest):
        Call the client method.

2006-11-21  Anders Carlsson  <acarlsson@apple.com>

        Rubber-stamped by Maciej.

        Fork the CF loader.
        
        * WebCore.vcproj/WebCore.vcproj:
        * platform/network/cf/FormDataStreamCFNet.cpp: Added.
        (WebCore::getStreamFormDatas):
        (WebCore::pairRetain):
        (WebCore::pairRelease):
        (WebCore::pairEqual):
        (WebCore::pairHash):
        (WebCore::closeCurrentStream):
        (WebCore::scheduleWithPair):
        (WebCore::advanceCurrentStream):
        (WebCore::openNextStream):
        (WebCore::formCreate):
        (WebCore::formFinalize):
        (WebCore::formOpen):
        (WebCore::formRead):
        (WebCore::formCanRead):
        (WebCore::formClose):
        (WebCore::formSchedule):
        (WebCore::formUnschedule):
        (WebCore::formEventCallback):
        (WebCore::setHTTPBody):
        (WebCore::httpBodyFromStream):
        * platform/network/cf/FormDataStreamCFNet.h: Added.
        * platform/network/cf/ResourceHandleCFNet.cpp: Added.
        (WebCore::willSendRequest):
        (WebCore::didReceiveResponse):
        (WebCore::didReceiveData):
        (WebCore::didFinishLoading):
        (WebCore::didFail):
        (WebCore::willCacheResponse):
        (WebCore::didReceiveChallenge):
        (WebCore::addHeadersFromHashMap):
        (WebCore::ResourceHandleInternal::~ResourceHandleInternal):
        (WebCore::ResourceHandle::~ResourceHandle):
        (WebCore::arrayFromFormData):
        (WebCore::emptyPerform):
        (WebCore::runLoaderThread):
        (WebCore::ResourceHandle::start):
        (WebCore::ResourceHandle::cancel):
        * platform/network/cf/ResourceRequestCFNet.cpp: Added.
        (WebCore::getResourceRequest):
        (WebCore::addHeadersFromHashMap):
        (WebCore::cfURLRequest):
        * platform/network/cf/ResourceRequestCFNet.h: Added.
        * platform/network/cf/ResourceResponseCFNet.cpp: Added.
        (WebCore::getResourceResponse):
        * platform/network/cf/ResourceResponseCFNet.h: Added.

2006-11-21  Anders Carlsson  <acarlsson@apple.com>

        Reviewed by Lou, Dave Hyatt.

        <rdar://problem/4761639>
        Group label in list box doesn't appear as bold
        
        <rdar://problem/4805795>
        <optgroup> labels should be bold in popup menus
        
        * platform/win/FontPlatformDataWin.cpp:
        (WebCore::enumStylesCallback):
        (WebCore::FontPlatformData::FontPlatformData):
        Enumerate the existing font styles and decide what to synthesize
        depending on what styles are available.

2006-11-21  Anders Carlsson  <acarlsson@apple.com>

        Fix build.
        
        * WebCore.vcproj/WebCore.vcproj:

2006-11-20  Anders Carlsson  <acarlsson@apple.com>

        Add the same include paths to the debug build.
        
        * WebCore.vcproj/WebCore.vcproj:

2006-11-20  Anders Carlsson  <acarlsson@apple.com>

        Fix build.
        
        * WebCore.vcproj/WebCore.vcproj:
        * kcanvas/device/quartz/KCanvasFilterQuartz.cpp: Removed.
        * platform/graphics/svg/cg/SVGResourceFilterCg.cpp: Added.
        (WebCore::SVGResourceFilter::SVGResourceFilter):
        (WebCore::SVGResourceFilter::~SVGResourceFilter):
        (WebCore::SVGResourceFilter::prepareFilter):
        (WebCore::SVGResourceFilter::applyFilter):

2006-11-19  Beth Dakin  <bdakin@apple.com>

        Reviewed by Adam.

        Boomer part of context menu actions.

        * bridge/win/FrameWin.h: New spelling functions on Frame.
        * platform/win/ContextMenuWin.cpp:
        (WebCore::ContextMenu::show):
        (WebCore::ContextMenu::hide):
        * platform/win/TemporaryLinkStubs.cpp: New stubs.
        (FrameWin::ignoreSpelling):
        (FrameWin::learnSpelling):
        (FrameLoader::reload):

2006-11-18  Adam Roben  <aroben@apple.com>

        Build fix from OpenSource r17841.

        * platform/win/CursorWin.cpp: New method stubs.
        (WebCore::aliasCursor):
        (WebCore::progressCursor):
        (WebCore::noDropCursor):

2006-11-17  Anders Carlsson  <acarlsson@apple.com>

        Reviewed by Adam.

        Add #defines in config.h to prevent the min and max macros from being used.

        * bridge/win/FrameWin.cpp:
        * config.h:
        * platform/win/FontCacheWin.cpp:
        (WebCore::FontCache::createFontPlatformData):
        * platform/win/PopupMenuWin.cpp:
        * plugins/win/PluginStreamWin.cpp:
        * plugins/win/PluginViewWin.cpp:
        (WebCore::PluginViewWin::handlePost):

2006-11-17  Kevin McCullough  <kmccullough@apple.com>

        Reviewed by Adam.

        - Fixes Targetted Form Submission to now work. Radar: 4762693

        * ChangeLog:
        * loader/win/FrameLoaderWin.cpp:
        (WebCore::FrameLoader::submitForm):

2006-11-16  Adele Peterson  <adele@apple.com>

        Reviewed by Adam.

        Added theme for sider.

        * rendering/RenderThemeWin.cpp:
        (WebCore::RenderThemeWin::sliderTheme):
        (WebCore::RenderThemeWin::close):
        (WebCore::RenderThemeWin::determineSliderThumbState):
        (WebCore::RenderThemeWin::getClassicThemeData):
        (WebCore::RenderThemeWin::getThemeData):
        (WebCore::drawControl):
        (WebCore::RenderThemeWin::paintSliderTrack):
        (WebCore::RenderThemeWin::paintSliderThumb):
        (WebCore::RenderThemeWin::adjustSliderThumbSize):
        * rendering/RenderThemeWin.h:

2006-11-15  Adam Roben  <aroben@apple.com>

        Reviewed by Anders.

        Added new ContextMenuClient and ContextMenuController classes.

        * WebCore.vcproj/WebCore.vcproj: Added new files.
        * platform/win/ContextMenuWin.cpp: Added method implementations Beth
        forgot to check in in r11129.
        (WebCore::ContextMenu::itemCount):
        (WebCore::ContextMenu::appendItem):

2006-11-15  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Anders Carlsson.
        
        Fixed flash of plug-in content outside its containing iframe while 
        scrolling the iframe.
        
        The problem was that the plug-in would draw between our call to MoveWindow
        and our call to SetWindowRgn. The solution here is to lock all updates in 
        the plug-in's HWND until we've called both MoveWindow and SetWindowRgn.
        
        Tested with Quicktime and Flash.
        
        * plugins/win/PluginViewWin.cpp:
        (WebCore::PluginViewWin::updateHwnd):
        (WebCore::PluginViewWin::setFrameGeometry):
        (WebCore::PluginViewWin::geometryChanged):
        * plugins/win/PluginViewWin.h: Removed bogus invalidate parameter to updateHwnd.

2006-11-15  Adele Peterson  <adele@apple.com>

        Reviewed by Adam.

        Adding RenderSlider class, and removing DeprecatedSlider and Slider classes.

        * WebCore.vcproj/WebCore.vcproj:
        * platform/win/TemporaryLinkStubs.cpp:

2006-11-15  Beth Dakin  <bdakin@apple.com>
        &   Adam Roben  <aroben@apple.com>

        Reviewed by Adam and Beth.

        Internal side of r17796.

        * WebCore.vcproj/WebCore.vcproj:
        * platform/win/ContextMenuWin.cpp: Added.
        (WebCore::ContextMenu::insertItem):
        (WebCore::ContextMenu::setPlatformMenuDescription):

2006-11-15  Anders Carlsson  <acarlsson@apple.com>

        Reviewed by Darin.
    
        Remove some (now) obsolete methods.
        
        * bridge/win/FrameWin.h:
        * platform/win/TemporaryLinkStubs.cpp:
        (FrameWin::unfocusWindow):
        (FrameWin::getAppletInstanceForWidget):
        (FrameWin::issuePasteCommand):
        (FrameWin::respondToChangedSelection):

2006-11-15  Steve Falkenburg  <sfalken@apple.com>

        Remove header from vcproj that no longer exists

        * WebCore.vcproj/WebCore.vcproj:

2006-11-15  Steve Falkenburg  <sfalken@apple.com>

        Fix the B&I build

        * WebCore.vcproj/WebCore.vcproj:

2006-11-14  Darin Adler  <darin@apple.com>

        Reviewed by Anders.

        - update for creation of EventHandler

        * WebCore.vcproj/WebCore.vcproj: Added EventHandler.cpp/h/Win.cpp.

        * bridge/win/FrameWin.h: Moved virtual functions lastEventIsMouseUp,
        tabsToLinks, and tabsToAllControls to EventHandler.
        * bridge/win/FrameWin.cpp: Ditto.

        * bridge/win/FrameViewWin.cpp: Moved passMousePressEventToSubframe and similar
        functions to EventHandler.

        * page/win/EventHandlerWin.cpp: Added. Code from FrameViewWin and FrameWin.

        * platform/win/PlatformScrollBarWin.cpp:
        (WebCore::PlatformScrollbar::handleMouseReleaseEvent): Call the setMousePressed
        function in its new home in EventHandler.

        * platform/win/TemporaryLinkStubs.cpp: Moved lastEventIsMouseUp stub to EventHandler.

2006-11-13  Brady Eidson  <beidson@apple.com>

        Rubberstamped by Maciej

        Windows half of 17755 - Make FormData shared

        * bridge/win/FrameWin.h:
        * loader/win/FrameLoaderWin.cpp:
        (WebCore::FrameLoader::submitForm):
        * plugins/win/PluginViewWin.cpp:
        (WebCore::PluginViewWin::handlePost):

2006-11-13  Anders Carlsson  <acarlsson@apple.com>

        Reviewed by Adam.

        * platform/win/PopupMenuWin.cpp:
        (WebCore::PopupWndProc):
        Make sure to call valueChanged after hiding the popup so that change events will 
        be delivered correctly.

2006-11-13  Steve Falkenburg  <sfalken@apple.com>

        Reviewed by Anders, Lou.

        Fix merge script

        * WebCore.vcproj/merge-opensource.sh: Don't copy cairo, pixman

2006-11-12  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Beth Dakin.
        
        Added project-wide setting to disable Microsoft's made-up deprecation 
        warnings related to std:: functions. (Doesn't have any affect yet,
        since we currently disable all deprecation warnings.)

        * WebCore.vcproj/WebCore.vcproj:

2006-11-11  Anders Carlsson  <acarlsson@apple.com>

        Reviewed by Oliver.

        Rename keyPress to keyEvent, it's used for both key presses
        and releases.
        
        * bridge/win/FrameWin.cpp:
        (WebCore::FrameWin::keyEvent):
        * bridge/win/FrameWin.h:

2006-11-11  Adam Roben  <aroben@apple.com>

        Reviewed by Geoff.

        Move graphics-related files to platform/graphics to stay in sync with
        changes from OpenSource r17727.

        Also, as discussed with Darin and Steve, we now copy all our headers to
        a flat include/WebCore directory instead of copying the directory
        structure of WebCore. This mirrors how Mac builds.

        * WebCore.vcproj/WebCore.vcproj:
        * platform/cg/ColorCG.cpp: Removed.
        * platform/cg/GraphicsContextCG.cpp: Removed.
        * platform/cg/GraphicsContextPlatformPrivate.h: Removed.
        * platform/win/IconWin.cpp: Removed.
        * platform/win/ImageWin.cpp: Removed.

2006-11-11  Darin Adler  <darin@apple.com>

        - blind attempt to fix the build

        * platform/win/CursorWin.cpp:
        (WebCore::verticalTextCursor): Added. Just returns the pointer cursor.
        (WebCore::cellCursor): Ditto.
        (WebCore::contextMenuCursor): Ditto.

2006-11-10  Steve Falkenburg  <sfalken@apple.com>

        Build fix for opensource/internal merge script.

        * WebCore.vcproj/WebCore.vcproj:

2006-11-10  Anders Carlsson  <acarlsson@apple.com>

        Reviewed by Oliver.

        Implement findNextWordFromIndex using ICU.

        * platform/win/TemporaryLinkStubs.cpp:
        (WebCore::findSentenceBoundary):
        * platform/win/TextBoundariesWin.cpp:
        (WebCore::findNextWordFromIndex):

2006-11-09  Oliver Hunt  <oliver@apple.com>

        Reviewed by Brady.

        Added Windows side of MIME Type registry, and updated 
        objectContentType and ImageWin to make use of it
        
        This fixes <rdar://problem/4791483> 

        * WebCore.vcproj/WebCore.vcproj:
        * loader/win/FrameLoaderWin.cpp:
        (WebCore::FrameLoader::objectContentType):
        * platform/win/ImageWin.cpp:
        * platform/win/MimeTypeRegistryWin.cpp: Added.
        (WebCore::getMIMETypeForUTI):
        (WebCore::mimeTypeForExtension):
        (WebCore::MimeTypeRegistry::getMIMETypeForExtension):

2006-11-09  Lou Amadio  <lamadio@apple.com>

        Reviewed by mjs
        Corrected positioning of text for find overlay on subframes

        * bridge/win/FrameWin.cpp:
        (WebCore::FrameWin::imageFromRect):

2006-11-08  Lou Amadio  <lamadio@apple.com>

        Reviewed by ggaren

        Moved CookieJar to OpenSourceWin
        Ported CookieJar to CFNetwork
        Corrected an uninitialized variable which crashed on Vista in the Wininet code

        * WebCore.vcproj/WebCore.vcproj:
        * platform/network/win/CookieJarWin.cpp:
        (WebCore::setCookies):
        (WebCore::cookies):

2006-11-08  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Geoff.

        - added ResourceError class and didFailWithError client method
        
        * plugins/win/PluginStreamWin.cpp:
        (WebCore::PluginStreamWin::didFailLoadingWithError):
        (WebCore::PluginStreamWin::didFinishLoading):
        * plugins/win/PluginStreamWin.h:

2006-11-08  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Anders Carlsson.

        Updated Windows to use the new platform abstraction for Screen.
        
        * WebCore.vcproj/WebCore.vcproj:
        * platform/win/PopupMenuWin.cpp:
        (WebCore::PopupMenu::calculatePositionAndSize):
        * platform/win/ScreenWin.cpp:
        (WebCore::monitorInfoForWidget):
        (WebCore::deviceInfoForWidget):
        (WebCore::screenDepth):
        (WebCore::screenDepthPerComponent):
        (WebCore::screenIsMonochrome):
        (WebCore::screenRect):
        (WebCore::screenAvailableRect):

2006-11-09  Darin Adler  <darin@apple.com>

        - fix the build

        * bridge/win/FrameWin.h: Add a forward declaration of FormData.

        * bridge/win/FrameWin.cpp: (WebCore::FrameWin::keyPress):
        Call resetMultipleFormSubmissionProtection instead of prepareForUserAction.

        * platform/win/TemporaryLinkStubs.cpp: Remove the parameter from the
        TextField constructor.

2006-11-08  Steve Falkenburg  <sfalken@apple.com>

        Rubber stamped by Adam.

        Windows buildbot fix.
        Remove /d from xcopy commands that merge opensource/internal components.
        Sync debug and release post-build event.

        * WebCore.vcproj/WebCore.vcproj:

2006-11-07  Ada Chan  <adachan@apple.com>

        Reviewed by Steve.

        Make the Slider implementation call LOG_NOIMPL() instead of STOP_NOIMPL() so the RSS feed page can load.

        * platform/win/TemporaryLinkStubs.cpp:
        (Slider::Slider):
        (Slider::sizeHint):
        (Slider::setValue):
        (Slider::setMaxValue):
        (Slider::setMinValue):
        (Slider::~Slider):
        (Slider::setFont):
        (Slider::value):

2006-11-07  Lou Amadio  <lamadio@apple.com>

        Reviewed by sfalken, adam

         Implemented Find banner, overlay, bouncy.
         plummed some find, search and marking in WebCore & WebKit
         Added SDC - a DC wrapper with knowledge of CG
         Added button element
         Ported AppKit's oval button drawing code
         Abstracted the high performance animations

        * bridge/win/FrameWin.cpp:
        (WebCore::FrameWin::imageFromRect):
        (WebCore::FrameWin::imageFromSelection):
        * bridge/win/FrameWin.h:
        * platform/win/GraphicsContextWin.cpp:
        (WebCore::GraphicsContext::setCompositeOperation):
        * platform/win/TemporaryLinkStubs.cpp:
        (Frame::setNeedsReapplyStyles):

2006-11-08  Anders Carlsson  <acarlsson@apple.com>

        Build fixes.
        
        * WebCore.vcproj/WebCore.vcproj:
        * platform/win/TemporaryLinkStubs.cpp:

2006-11-08  Anders Carlsson  <acarlsson@apple.com>

        * loader/win/FrameLoaderWin.cpp:
        (WebCore::FrameLoader::partClearedInBegin):
        Use m_frame instead of this, include the correct files.
        
2006-11-08  Anders Carlsson  <acarlsson@apple.com>

        (I'm not doing this to get commit 11000)
        
        * loader/win/FrameLoaderWin.cpp:
        (WebCore::FrameLoader::partClearedInBegin):
        It's m_frame, not frame. 
        
2006-11-08  Anders Carlsson  <acarlsson@apple.com>

        It's FrameLoader, not FrameWin.
        
        * loader/win/FrameLoaderWin.cpp:
        (WebCore::FrameLoader::partClearedInBegin):

2006-11-08  Anders Carlsson  <acarlsson@apple.com>

        A blind attempt at fixing the build.
        
        * bridge/win/FrameWin.cpp:
        * loader/win/FrameLoaderWin.cpp:
        (WebCore::FrameWin::partClearedInBegin):
        * platform/win/TemporaryLinkStubs.cpp:
        (FrameLoader::restoreDocumentState):

2006-11-07  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Anders.
        
        Removed ScreenClient. It was highly unpopular, risking my midterm re-election.
        
        None of Screen's responsibilities require up-calls to WebKit or delegates, 
        so WebCore can handle it all.
        
        Moved Screen back from page/ to platform/ because it's a platform
        abstraction again.
        
        Fixed bug where Screen would query the default screen instead of the screen
        on which the active window was located. (The code is written in Klingon,
        but that's cool.)
        
        Implemented some missing screen functionality on Win.
        
        I can't fully verify this code because I can't load files without crashing
        in CFNetwork, but I exercised most of it with javascript: URLs and the
        debugger reported reasonable values.

        * WebCore.vcproj/WebCore.vcproj:
        * platform/win/ScreenWin.cpp: Added. Merged over from opensource tree.
        (WebCore::getWindow):
        (WebCore::getMonitorInfo):
        (WebCore::getDeviceInfo):
        (WebCore::Screen::depth):
        (WebCore::Screen::depthPerComponent):
        (WebCore::Screen::isMonochrome):
        (WebCore::Screen::rect):
        (WebCore::Screen::usableRect):

2006-11-07  Darin Adler  <darin@apple.com>

        Reviewed by Geoff.

        - moved loader code from Frame/FrameMac to FrameLoader

        * WebCore.vcproj/WebCore.vcproj:
        * bridge/win/FrameWin.cpp:
        (WebCore::FrameWin::FrameWin):
        (WebCore::FrameWin::~FrameWin):
        * bridge/win/FrameWin.h:
        * loader/win/FrameLoaderWin.cpp: Added.
        (WebCore::FrameLoader::submitForm):
        (WebCore::FrameLoader::urlSelected):
        (WebCore::FrameLoader::originalRequestURL):
        (WebCore::FrameLoader::didFirstLayout):
        (WebCore::FrameLoader::objectContentType):
        (WebCore::FrameLoader::createPlugin):
        (WebCore::FrameLoader::createFrame):
        (WebCore::FrameLoader::detachFromParent):
        (WebCore::FrameLoader::createJavaAppletWidget):
        (WebCore::FrameLoader::setTitle):
        * platform/win/TemporaryLinkStubs.cpp:
        (FrameWin::markMisspellings):
        (FrameWin::respondToChangedSelection):
        (FrameWin::clearUndoRedoOperations):
        (IconLoader::notifyIconChanged):
        (PolicyCheck::PolicyCheck):
        (PolicyCheck::clear):
        (PolicyCheck::call):
        (PolicyCheck::clearRequest):
        (FrameLoader::saveDocumentState):
        (FrameLoader::restoreDocumentState):
        (FrameLoader::partClearedInBegin):
        (FrameLoader::goBackOrForward):
        (FrameLoader::historyURL):
        (FrameLoader::canGoBackOrForward):
        (FrameLoader::getHistoryLength):
        (DocumentLoader::setupForReplaceByMIMEType):
        (ResourceLoader::cancel):
        (DocumentLoader::stopLoading):
        (DocumentLoader::setLoading):
        (DocumentLoader::updateLoading):
        (DocumentLoader::setFrame):
        (DocumentLoader::stopRecordingResponses):
        (DocumentLoader::isStopping):
        (DocumentLoader::setPrimaryLoadComplete):
        (DocumentLoader::finishedLoading):
        (DocumentLoader::URL):
        (DocumentLoader::isLoadingInAPISense):
        (DocumentLoader::frameLoader):
        (FrameLoader::overrideMediaType):
        (FrameLoader::redirectDataToPlugin):
        (FrameLoader::checkLoadCompleteForThisFrame):
        (FrameLoader::loadEmptyDocumentSynchronously):
        (FrameLoader::startLoading):
        (FrameLoader::referrer):
        * plugins/win/PluginViewWin.cpp:
        (WebCore::PluginViewWin::performRequest):
        (WebCore::PluginViewWin::userAgent):

2006-11-07  Anders Carlsson  <acarlsson@apple.com>

        Reviewed by Oliver.

        Let the Frame client know when the window object is available.

        * bridge/win/FrameWin.cpp:
        (WebCore::FrameWin::partClearedInBegin):
        * bridge/win/FrameWin.h:
        * platform/win/TemporaryLinkStubs.cpp:
        (FrameWin::unfocusWindow):
        (FrameWin::markMisspellings):
        (FrameWin::restoreDocumentState):

2006-11-07  Adam Roben  <aroben@apple.com>

        Build fix.

        * platform/win/TemporaryLinkStubs.cpp: Remove no-longer-needed stub.

2006-11-07  Steve Falkenburg  <sfalken@apple.com>

        Fixes for B&I submission

        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.vcproj/merge-opensource.sh:

2006-11-06  Kevin McCullough  <kmccullough@apple.com>

        -Fix test fields accepting text.

        * WebCore.vcproj/WebCore.vcproj:

2006-11-06  Anders Carlsson  <acarlsson@apple.com>

        Reviewed by Dave Hyatt.

        <rdar://problem/4778180>
        wikipedia.org crashes when loading
        
        * platform/win/GlyphMapWin.cpp:
        (WebCore::GlyphMap::fillPage):
        Don't call GetGlyphIndices on buffers larger than the page size. GetGlyphIndicies doesn't know anything about
        Unicode supplementary characters and will overwrite the local buffer if the passed-in buffer is bigger than  the page size.

2006-11-06  Anders Carlsson  <acarlsson@apple.com>

        Fork GlyphMapWin.cpp
        
        * platform/win/GlyphMapWin.cpp: Added.
        (WebCore::GlyphMap::fillPage):

2006-11-06  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Darin.

        Hooked up the Chrome and Screen clients on Windows.
        
        * WebCore.vcproj/WebCore.vcproj:
        * bridge/win/PageWin.cpp:
        * platform/win/PopupMenuWin.cpp:
        (WebCore::PopupMenu::calculatePositionAndSize):
        * platform/win/TemporaryLinkStubs.cpp:

2006-11-06  Anders Carlsson  <acarlsson@apple.com>

        Reviewed by Maciej.

        Copy npfunctions.h to WebKitOutputDir.
        
        * WebCore.vcproj/WebCore.vcproj:

2006-11-06  Steve Falkenburg  <sfalken@apple.com>

        Fix double-include of FormData.cpp/.h.

        * WebCore.vcproj/WebCore.vcproj:

2006-11-06  Maciej Stachowiak  <mjs@apple.com>
        
        - build fixes, adjusted for file move

        * WebCore.vcproj/WebCore.vcproj:

2006-11-05  Beth Dakin  <bdakin@apple.com>

        Reviewed by Steve and Anders.

        Add client() fucntion to FrameWin to return the FrameClient.

        * bridge/win/FrameWin.h:
        (WebCore::FrameWin::client):

2006-11-05  Steve Falkenburg  <sfalken@apple.com>

        Fix build

        * WebCore.vcproj/WebCore.vcproj:

2006-11-05  Steve Falkenburg  <sfalken@apple.com>

        Fix build breaks

        * bridge/win/FrameWin.cpp:
        * bridge/win/PageWin.cpp:

2006-11-04  Darin Adler  <darin@apple.com>

        Reviewed by Maciej.

        * bridge/win/FrameWin.h:
        * bridge/win/FrameWin.cpp:
        (WebCore::FrameWin::urlSelected): Updated for change of const Event* to Event*.
        (WebCore::FrameWin::submitForm): Added Event* parameter.

2006-11-03  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Adele.

        - replaced receivedRedirect with new willSendRequest delegate
        - removed most mac-specific loader functions
        - use ResourceResponse more in loader code

        * WebCore.vcproj/WebCore.vcproj: Added new files
        * platform/win/TemporaryLinkStubs.cpp: Removed unneeded link stubs

2006-11-03  Steve Falkenburg  <sfalken@apple.com>

        Fix build

        * config.h: Touched to cause re-build w/ SVG_SUPPORT enabled
        * platform/win/TemporaryLinkStubs.cpp:
        (WebCore::CachedResource::setResponse): Added

2006-11-03  Adele Peterson  <adele@apple.com>

        Reviewed by Oliver.

        Removed DeprecatedRenderSelect and ListBox classes.

        * WebCore.vcproj/WebCore.vcproj:
        * platform/win/TemporaryLinkStubs.cpp:

2006-11-03  Anders Carlsson  <acarlsson@apple.com>

        Remove SVGRenderAsText files from the project.
        
        * WebCore.vcproj/WebCore.vcproj:

2006-11-03  Anders Carlsson  <acarlsson@apple.com>

        Build fix.
        
        * platform/win/TemporaryLinkStubs.cpp:
        (WebCore::CachedResource::setPlatformResponse):

2006-11-03  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Darin, Beth.

        Updated to use ChromeClient.
        
        * WebCore.vcproj/WebCore.vcproj:
        * bridge/win/PageWin.cpp:
        * loader/win/ResourceLoaderWin.cpp: Added.
        (WebCore::ResourceLoader::loadsBlocked):
        * platform/win/TemporaryLinkStubs.cpp:

2006-11-02  Anders Carlsson  <acarlsson@apple.com>

        Reviewed by Oliver.

        * WebCore.vcproj/WebCore.vcproj:
        Use the forked CursorWin.cpp
        
        * platform/win/CursorWin.cpp:
        (WebCore::moveCursor):
        Implement this.
        
        * platform/win/TemporaryLinkStubs.cpp:
        Get rid of it here.
        
2006-11-02  Anders Carlsson  <acarlsson@apple.com>

        Reviewed by Oliver.

        Add forked copy of CursorWin.cpp
        
        * platform/win/CursorWin.cpp: Added.

2006-11-01  Oliver Hunt  <oliver@apple.com>

        Reviewed by Adam.

        Adding SVG_SUPPORT to Boomer.

        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.vcproj/build-generated-files.sh:
        * kcanvas/device/quartz/KCanvasFilterQuartz.cpp: Added.
        (WebCore::KCanvasFilterQuartz::KCanvasFilterQuartz):
        (WebCore::KCanvasFilterQuartz::~KCanvasFilterQuartz):
        (WebCore::KCanvasFilterQuartz::prepareFilter):
        (WebCore::KCanvasFilterQuartz::applyFilter):
        (WebCore::KCanvasFilterQuartz::imageForName):
        (WebCore::KCanvasFilterQuartz::setImageForName):
        (WebCore::KCanvasFilterQuartz::setOutputImage):
        (WebCore::KCanvasFilterQuartz::inputImage):
        * platform/graphics/svg/cg/SVGResourceMaskerCg.cpp: Added.
        (WebCore::SVGResourceMasker::applyMask):

2006-11-01  Beth Dakin  <bdakin@apple.com>

        Reviewed by Adam.

        Build fix from Sam Weinig's check-in. i.p in the PaintInfo is now 
        i.context

        * rendering/RenderThemeWin.cpp:
        (WebCore::RenderThemeWin::paintButton):
        (WebCore::RenderThemeWin::paintTextField):
        (WebCore::RenderThemeWin::paintMenuList):
        (WebCore::RenderThemeWin::paintMenuListButton):

2006-11-01  Anders Carlsson  <acarlsson@apple.com>

        Reviewed by Geoff.

        * bridge/win/FrameWin.cpp:
        (WebCore::FrameWin::createJavaAppletWidget):
        Ask the plugin database to create a java applet plugin.

        * platform/win/TemporaryLinkStubs.cpp:
        Remove FrameWin::createJavaAppletWidget.
        
        * plugins/win/PluginDatabaseWin.cpp:
        (WebCore::PluginDatabaseWin::defaultPluginPaths):
        Don't look for the Sun Java plugin anymore.

2006-11-01  Anders Carlsson  <acarlsson@apple.com>

        * plugins/win/PluginStreamWin.cpp:
        (WebCore::PluginStreamWin::startStream):
        Build fix.
        
2006-11-01  Anders Carlsson  <acarlsson@apple.com>

        Reviewed by Adam.

        Convert plugin code over to using ResourceResponse.
        
        * plugins/win/PluginStreamWin.cpp:
        (WebCore::PluginStreamWin::startStream):
        (WebCore::PluginStreamWin::didReceiveResponse):
        (WebCore::PluginStreamWin::didFinishLoading):
        * plugins/win/PluginStreamWin.h:
        * plugins/win/PluginViewWin.cpp:
        (WebCore::PluginViewWin::performRequest):

2006-10-31  Steve Falkenburg  <sfalken@apple.com>

        Yet more B&I build fixes
        Another missing .h file from the vcproj

        * WebCore.vcproj/WebCore.vcproj:

2006-10-31  Steve Falkenburg  <sfalken@apple.com>

        Another fix for B&I submission
        (missing .h files from the WebCore vcproj prevents proper merging of OpenSource/Internal WebCore trees)

        * WebCore.vcproj/WebCore.vcproj:

2006-10-31  Steve Falkenburg  <sfalken@apple.com>

        Remove extra files I accidently added

        * WebCore.vcproj/WebCore.vcproj:

2006-10-31  Steve Falkenburg  <sfalken@apple.com>

        Build fixes for submission merge script

        * WebCore.vcproj/WebCore.vcproj:

2006-10-31  Adam Roben  <aroben@apple.com>

        Build fixes.

        * WebCore.vcproj/WebCore.vcproj: Add new platform/graphics directory to
        our include path, and copy headers from there for WebKit's benefit.
        * bridge/win/FrameWin.cpp: Update accessors of FrameLoadRequest.
        (WebCore::FrameWin::urlSelected):
        (WebCore::FrameWin::submitForm):
        * plugins/win/PluginViewWin.cpp: Ditto.
        (WebCore::PluginViewWin::start):
        (WebCore::PluginViewWin::performRequest):
        (WebCore::PluginViewWin::load):
        (WebCore::PluginViewWin::getURLNotify):
        (WebCore::PluginViewWin::getURL):
        (WebCore::PluginViewWin::handlePost):
        * plugins/win/PluginViewWin.h: Correct forward declaration of
        FrameLoadRequest.

2006-10-30  Darin Adler  <darin@apple.com>

        Reviewed by Anders.

        - remove BrowserExtension

        * WebCore.vcproj/WebCore.vcproj:
        * bridge/win/FrameWin.cpp:
        (WebCore::FrameWin::FrameWin):
        * platform/win/TemporaryLinkStubs.cpp:
        * plugins/win/PluginViewWin.cpp:
        (WebCore::PluginViewWin::performRequest):

2006-10-30  Anders Carlsson  <acarlsson@apple.com>

        Reviewed by Adam.

        If there's no plug-in for a given mime type, or if the plug-in fails
        to initialize, draw the "missing plug-in" icon.

        * plugins/win/PluginDatabaseWin.cpp:
        (WebCore::PluginDatabaseWin::createPluginView):
        If no plug-in can be found, create a null plugin view.
        
        * plugins/win/PluginViewWin.cpp:
        (WebCore::PluginViewWin::paint):
        If the plugin hasn't been started, paint the missing plugin image.
        
        (WebCore::PluginViewWin::setNPWindowSize):
        Return early if the plugin hasn't been started.
        
        (WebCore::PluginViewWin::start):
        Return if the plugin couldn't be created.
        
        (WebCore::PluginViewWin::createNullPluginView):
        New function which just creates a plugin view and doesn't try to start its plugin
        (because there is none).
        
        (WebCore::PluginViewWin::PluginViewWin):
        New constructor for the null plugin view.
        
2006-10-31  Darin Adler  <darin@apple.com>

        Reviewed by Adam.

        * WebCore.vcproj/WebCore.vcproj: Added new source files from the
        loader directory.

2006-10-29  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Anders.

        - added ResourceResponse class and didReceiveResponse delegate call

        * WebCore.vcproj/WebCore.vcproj: Added new files.
        * platform/win/TemporaryLinkStubs.cpp:
        (WebCore::ServeSynchronousRequest): Changed prototype to match
        new version.

2006-10-29  Darin Adler  <darin@apple.com>

        - update for the WebCore renames

        * WebCore.vcproj/WebCore.vcproj:
        * bridge/win/FrameWin.cpp:
        (WebCore::FrameWin::bindingRootObject):
        (WebCore::FrameWin::windowScriptNPObject):
        * plugins/win/PluginViewWin.cpp:
        (WebCore::PluginViewWin::load):
        (WebCore::PluginViewWin::bindingInstance):

2006-10-29  Maciej Stachowiak  <mjs@apple.com>

        Rubber stamped by Darin.

        - renamed ResourceLoader to ResourceHandle (and same for related classes)

        * WebCore.vcproj/WebCore.vcproj:
        * bridge/win/FrameWin.cpp:
        * platform/network/win/ResourceHandleWin.cpp: Added.
        (WebCore::):
        (WebCore::addToOutstandingJobs):
        (WebCore::lookupResourceHandle):
        (WebCore::ResourceHandleWndProc):
        (WebCore::ResourceHandle::onHandleCreated):
        (WebCore::ResourceHandle::onRequestRedirected):
        (WebCore::ResourceHandle::onRequestComplete):
        (WebCore::initializeOffScreenResourceHandleWindow):
        (WebCore::ResourceHandleInternal::~ResourceHandleInternal):
        (WebCore::ResourceHandle::~ResourceHandle):
        (WebCore::ResourceHandle::startHTTPRequest):
        (WebCore::ResourceHandle::start):
        (WebCore::ResourceHandle::fileLoadTimer):
        (WebCore::ResourceHandle::cancel):
        * platform/network/win/ResourceHandleWin.h: Added.
        * platform/network/win/ResourceLoaderWin.cpp: Removed.
        * platform/network/win/ResourceLoaderWin.h: Removed.
        * platform/win/TemporaryLinkStubs.cpp:
        (WebCore::ResourceHandle::assembleResponseHeaders):
        (WebCore::ResourceHandle::retrieveResponseEncoding):
        (IconLoader::receivedResponse):
        * plugins/win/PluginStreamWin.cpp:
        (WebCore::PluginStreamWin::start):
        (WebCore::PluginStreamWin::deliverData):
        (WebCore::PluginStreamWin::receivedResponse):
        (WebCore::PluginStreamWin::didReceiveData):
        (WebCore::PluginStreamWin::receivedAllData):
        * plugins/win/PluginStreamWin.h:

2006-10-28  Adam Roben  <aroben@apple.com>

        Build fix.

        * WebCore.vcproj/WebCore.vcproj: Adding new HitTestResult.{cpp,h}
        files.

2006-10-27  Anders Carlsson  <acarlsson@apple.com>

        Reviewed by Oliver.

        <rdar://problem/4730678> Plug-ins should be able to open URLs

        * plugins/win/PluginViewWin.cpp:
        (WebCore::PluginViewWin::performRequest):

2006-10-26  Anders Carlsson  <acarlsson@apple.com>

        Reviewed by John Sullivan.

        <rdar://problem/4764502> PluginStreams should cancel their loader jobs on error

        * plugins/win/PluginStreamWin.cpp:
        (WebCore::PluginStreamWin::receivedResponse):
        (WebCore::PluginStreamWin::didReceiveData):
        (WebCore::PluginStreamWin::receivedAllData):
        Modify assertions. None of the above functions should be run after aborting the load.

2006-10-26  Anders Carlsson  <acarlsson@apple.com>

        Reviewed by Adam.

        * plugins/win/PluginDatabaseWin.cpp:
        (WebCore::addPluginPath):
        (WebCore::PluginDatabaseWin::defaultPluginPaths):
        Look for plugins in a plugins directory which is relative to the executable directory.
        
        (WebCore::PluginDatabaseWin::createPluginView):
        Use reverseFind instead of findRev here.
        
2006-10-26  Adam Roben  <aroben@apple.com>

        Reviewed by Beth.

        Fix: <rdar://problem/4799084> Text and dropdown button too close
        together in <select>s
        Fix: <rdar://problem/4800493> Popup menus should be positioned so that
        their text is horizontally aligned with the <select> control's text

        * platform/win/PopupMenuWin.cpp:
        (WebCore::PopupMenu::calculatePositionAndSize): Switch alignment of LTR
        vs. RTL popups, and add padding to align the text.
        (WebCore::PopupMenu::paint): Add padding from the <select> control to
        align the text with the <select> control's text.
        * rendering/RenderThemeWin.cpp: Set svn:eol-style native.
        (WebCore::RenderThemeWin::systemFont): Clean up line endings.
        (WebCore::RenderThemeWin::adjustMenuListButtonStyle): Add some extra
        padding between the dropdown button and text.
        (WebCore::RenderThemeWin::paintMenuListButton): Clean up code a bit.

2006-10-26  Adam Roben  <aroben@apple.com>

        Forgot to make the change to Release as well in my last checkin.

        * WebCore.vcproj/WebCore.vcproj:

2006-10-26  Adam Roben  <aroben@apple.com>

        Rubberstamped by Steve.

        Add some missing '/d' flags to xcopy calls to only copy headers if
        they've been modified.

        * WebCore.vcproj/WebCore.vcproj:

2006-10-26  Anders Carlsson  <acarlsson@apple.com>

        * platform/win/TemporaryLinkStubs.cpp:
        (GraphicsContext::drawLineForMisspellingOrBadGrammar):
        Build fix from Oliver.
        
2006-10-26  Anders Carlsson  <acarlsson@apple.com>

        Reviewed by Adam.

        Use FrameLoadRequest and ResourceRequest instead of passing around
        the individual components.
        
        * plugins/win/PluginStreamWin.cpp:
        (WebCore::PluginStreamWin::PluginStreamWin):
        (WebCore::PluginStreamWin::start):
        (WebCore::PluginStreamWin::destroyStream):
        * plugins/win/PluginStreamWin.h:
        * plugins/win/PluginViewWin.cpp:
        (WebCore::PluginRequestWin::PluginRequestWin):
        (WebCore::PluginRequestWin::frameLoadRequest):
        (WebCore::PluginViewWin::start):
        (WebCore::PluginViewWin::performRequest):
        (WebCore::PluginViewWin::load):
        (WebCore::PluginViewWin::getURLNotify):
        (WebCore::PluginViewWin::getURL):
        (WebCore::PluginViewWin::handlePost):
        * plugins/win/PluginViewWin.h:

2006-10-26  Adam Roben  <aroben@apple.com>

        Reviewed by Adele.

        Fix: <rdar://problem/4794162> Implement type-ahead find for popup menus
        Fix: <rdar://problem/4800486> Pressing TAB while a popup is focused
        should close the popup and move selection in the page

        * platform/win/PopupMenuWin.cpp:
        (WebCore::PopupMenu::PopupMenu): Don't cache the focused index.
        (WebCore::PopupMenu::focusedIndex): Always get the focused index from
        the HTMLSelectElement.
        (WebCore::PopupMenu::setFocusedIndex): Invalidate before calling
        valueChanged(), as this will change the result of focusedIndex().
        (WebCore::PopupMenu::scrollToRevealSelection):
        (WebCore::PopupMenu::updateFromElement): New method to repaint/rescroll
        the popup.
        (WebCore::PopupWndProc): Send TAB keypresses and printable characters
        back to the WebView for handling. Also omove handling of Return/Escape
        into the WM_CHAR event, as this is recommended by MSDN.

2006-10-25  Steve Falkenburg  <sfalken@apple.com>

        Reviewed by Darin.

        Checked in Luke's CG printing code

        * bridge/win/FrameWin.cpp:
        (WebCore::FrameWin::setupRootForPrinting): Added
        (WebCore::FrameWin::computePageRects): Added
        * bridge/win/FrameWin.h: Added setupRootForPrinting, computePageRects

2006-10-24  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Oliver.

        - updated for ResourceRequest changes.

        * plugins/win/PluginStreamWin.cpp:
        (WebCore::PluginStreamWin::setRequestHeaders):
        * plugins/win/PluginStreamWin.h:
        * plugins/win/PluginViewWin.cpp:
        (WebCore::PluginViewWin::loadURL):
        (WebCore::parseRFC822HeaderFields):
        (WebCore::PluginViewWin::handlePost):
        * plugins/win/PluginViewWin.h:

2006-10-24  Steve Falkenburg  <sfalken@apple.com>

        Build fix for official builds

        * WebCore.vcproj/WebCore.make:

2006-10-24  Steve Falkenburg  <sfalken@apple.com>

        Fix build so it can be submitted.

        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.vcproj/merge-opensource.sh:
        * rendering/RenderThemeWin.cpp:

2006-10-24  Geoffrey Garen  <ggaren@apple.com>

        Rolling back in, now fixed:
        
        Nixed a few more redundant loading functions in Frame.

        * bridge/win/FrameWin.h:
        * platform/win/TemporaryLinkStubs.cpp:
        (FrameWin::shouldInterruptJavaScript):
        (FrameWin::lastEventIsMouseUp):

2006-10-24  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Geoff.

        - update for ResourceLoader API changes

        * platform/win/TemporaryLinkStubs.cpp:
        (WebCore::ServeSynchronousRequest):
        * plugins/win/PluginStreamWin.cpp:
        (WebCore::PluginStreamWin::start):
        (WebCore::PluginStreamWin::receivedAllData):
        * plugins/win/PluginStreamWin.h:
        * plugins/win/PluginViewWin.cpp:
        (WebCore::PluginViewWin::performRequest):

2006-10-24  Geoffrey Garen  <ggaren@apple.com>

        Rolling out my last change because it broke the world.
        
        * bridge/win/FrameWin.h:
        * platform/win/TemporaryLinkStubs.cpp:
        (FrameWin::openURL):

2006-10-24  Anders Carlsson  <acarlsson@apple.com>

        Reviewed by Adam.

        <rdar://problem/4760429> Crash in PluginStreamWin::~PluginStreamWin when 
        navigating away from mcdonalds.com
        
        * plugins/win/PluginPackageWin.cpp:
        (WebCore::PluginPackageWin::fetchInfo):
        Use fastFree instead of free when memory is allocated by fastMalloc. 
        If the plugin name or description is null, don't try to fetch info about the plugin.
        
        * plugins/win/PluginStreamWin.cpp:
        (WebCore::PluginStreamWin::setRequestHeaders):
        (WebCore::PluginStreamWin::start):
        (WebCore::PluginStreamWin::stop):
        * plugins/win/PluginStreamWin.h:
        Change type of header map to ResourceRequest::HTTPHeaderMap. When a plugin is stopped,
        set its state to StreamStopped.
        
        * plugins/win/PluginViewWin.cpp:
        (WebCore::PluginViewWin::loadURL):
        (WebCore::parseRFC822HeaderFields):
        (WebCore::PluginViewWin::handlePost):
        * plugins/win/PluginViewWin.h:
        Update for type changes to the header map.

2006-10-24  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Anders.
        
        Nixed a few more redundant loading functions in Frame.

        * bridge/win/FrameWin.h:
        * platform/win/TemporaryLinkStubs.cpp:
        (FrameWin::shouldInterruptJavaScript):
        (FrameWin::lastEventIsMouseUp):

2006-10-23  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Bradee.

        Removed methods from BrowserExtension.

        * bridge/win/FrameWin.h:
        * platform/win/TemporaryLinkStubs.cpp:
        (FrameWin::canPaste):
        (FrameWin::canGoBackOrForward):
        (FrameWin::goBackOrForward):
        (FrameWin::getHistoryLength):
        (FrameWin::historyURL):
        (Page::canRunModal):
        (Page::canRunModalNow):
        (Page::runModal):
        (BrowserExtensionWin::BrowserExtensionWin):

2006-10-23  Adam Roben  <aroben@apple.com>

        Reviewed by Adele.

        Fix: <rdar://problem/4796994> Styled <select>s should still use Windows
        theme

        The fix is to do most of our drawing for menulists in
        RenderThemeWin::paintMenuListButton (which is called for styled
        <select>s), and then do any extra drawing for unstyled <select>s in
        RenderThemeWin::paintMenuList.

        * rendering/RenderThemeWin.cpp:
        (WebCore::RenderThemeWin::getThemeData): Case for
        MenulistButtonAppearance should be the same as MenulistAppearance.
        (WebCore::RenderThemeWin::paintMenuList): Draw the border, then defer
        to paintMenuListButton to handle the rest of painting.
        (WebCore::RenderThemeWin::adjustMenuListStyle): Reset the border so we
        can draw our own, then defer to adjustMenuListStyle.
        (WebCore::RenderThemeWin::adjustMenuListButtonStyle): Code moved from
        adjustMenuListStyle, less the call to resetBorder().
        (WebCore::RenderThemeWin::paintMenuListButton): Code moved from
        paintMenuList, less the border-drawing code.
        * rendering/RenderThemeWin.h:

2006-10-23  Adam Roben  <aroben@apple.com>

        Reviewed by Adele.

        Fix: <rdar://problem/4786759> PageUp/PageDown/Home/End don't work in
        <select> menus

        * platform/win/PopupMenuWin.cpp:
        (WebCore::PopupMenu::setFocusedIndex): Only call ::UpdateWindow if we
        didn't scroll, because scrolling will do the update for us.
        (WebCore::PopupMenu::focusFirst): New method.
        (WebCore::PopupMenu::focusLast): New method.
        (WebCore::PopupMenu::down): Add a parameter to specify how far we
        should try to move the selection.
        (WebCore::PopupMenu::up): Ditto.
        (WebCore::PopupMenu::invalidateItem): Cleanup code by using IntRect
        instead of RECT.
        (WebCore::PopupMenu::scrollTo): Return a boolean to say whether
        scrolling actually happened.
        (WebCore::PopupMenu::scrollToRevealSelection): Ditto.
        (WebCore::PopupWndProc): Handle PageUp/PageDown/Home/End.

2006-10-23  Adam Roben  <aroben@apple.com>

        Build fix.

        * WebCore.vcproj/WebCore.vcproj: Copy headers from new platform/network
        directory and subdirectories.

2006-10-23  Adam Roben  <aroben@apple.com>

        Build fix.

        * plugins/win/PluginStreamWin.h: Rename methods to match Maciej's
        changes.

2006-10-23  Adam Roben  <aroben@apple.com>

        Build fix.

        * WebCore.vcproj/WebCore.vcproj: Copied AdditionalIncludeDirectories
        from Release to All Configurations.

2006-10-23  Maciej Stachowiak  <mjs@apple.com>

        Rubber-stamped by Anders.

        - fixed for ResourceLoader refactoring.

        * platform/network/win/ResourceLoaderWin.cpp:
        (WebCore::ResourceLoader::onRequestComplete):
        (WebCore::ResourceLoader::fileLoadTimer):
        (WebCore::ResourceLoader::cancel):
        * plugins/win/PluginStreamWin.cpp:
        (WebCore::PluginStreamWin::didReceiveData):
        (WebCore::PluginStreamWin::didFinishLoading):
        * plugins/win/PluginViewWin.cpp:
        (WebCore::PluginViewWin::performRequest):

2006-10-22  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Anders.

        - updated for new ResourceLoader file locations.

        * WebCore.vcproj/WebCore.vcproj: Updated file paths.
        * platform/win/ResourceLoaderWin.cpp: Moved to platform/network/win
        * platform/win/ResourceLoaderWin.h: ditto

2006-10-22  Adam Roben  <aroben@apple.com>

        Reviewed by Steve.

        Fix some crashes caused by the <select> element being detached while
        the popup is open.

        * platform/win/PopupMenuWin.cpp:
        (WebCore::PopupWndProc):

2006-10-21  Adam Roben  <aroben@apple.com>

        Reviewed by Anders.

        Fix: <rdar://problem/4794151> Popup should scroll to reveal selected
        item, not just one line at a time
        Fix: <rdar://problem/4794229> Popup hot-tracking should not change text
        in <select> control

        * platform/win/PopupMenuWin.cpp:
        (WebCore::PopupMenu::calculatePositionAndSize): Cleaned up code by
        translating into screen coordinates right away.
        (WebCore::PopupMenu::setFocusedIndex): Added parameter to specify
        whether the text in the <select> control should be updated.
        (WebCore::PopupMenu::scrollTo): Extracted scrolling code from
        PopupWndProc to here.
        (WebCore::PopupMenu::scrollToRevealSelection): New method.
        (WebCore::PopupWndProc): Use scrollToRevealSelection() instead of
        manually scrolling one line at a time. Fixed a bug in detecting a
        mouse drag.  Pass in HDC from ::BeginPaint to PopupMenu::paint.

2006-10-21  Adam Roben  <aroben@apple.com>

        Build fix.

        * WebCore.vcproj/WebCore.vcproj: Add new DeleteButton* files to
        project.

2006-10-20  Steve Falkenburg  <sfalken@apple.com>

        Reviewed by Anders.

        Turn on CFNetwork

        * config.h:

2006-10-20  Steve Falkenburg  <sfalken@apple.com>

        Reviewed by Ada.

        <rdar://4778502> Boomer userAgent string needs to support pulling in proper build #, plus customization

        Useragent/versioning changes
        
        Stamp auto-generated version number into DLL and into user agent.
        Generate a real user agent string instead of hardcoding one.
        Support client supplying an application name for the user agent.
        Support client overriding the useragent (for debug menu).
        Support per-URL user agents (not used at least for now).

        * bridge/win/FrameWin.cpp:
        (WebCore::FrameWin::userAgent): Now calls userAgentForURL
        (WebCore::FrameWin::originalRequestURL): Implemented
        * bridge/win/FrameWin.h: changed userAgent to userAgentForURL, added originalRequestURL
        * platform/win/TemporaryLinkStubs.cpp: Removed originalRequestURL

2006-10-20  Alice Liu  <alice.liu@apple.com>

        Reviewed by Steve.

        Adding knowledge of the Editor and EditorClient to Windows WebCore

        No layout tests needed
        
        * WebCore.vcproj/WebCore.vcproj:
        added Sound.h, SoundWin.cpp, EditorClient.h, Editor.h&.cpp

        * bridge/win/FrameWin.cpp:
        (WebCore::FrameWin::FrameWin):
        added client to constructor params

        * bridge/win/FrameWin.h:
        added client to constructor params

        * platform/win/SoundWin.cpp: Added.
        (WebCore::systemBeep):
        Calls windows system beep

2006-10-19  Steve Falkenburg  <sfalken@apple.com>

        Reviewed by Adam.

        <rdar://4771958> Holding down Ctrl when a redirect happens opens the redirected page in a new tab
        
        Send triggering event to url selection.

        * bridge/win/FrameWin.cpp:
        (WebCore::FrameWin::urlSelected): Add triggeringEvent parameter
        * bridge/win/FrameWin.h: Add triggeringEvent parameter
        * platform/win/PlatformMouseEventWin.cpp:
        (WebCore::PlatformMouseEvent::PlatformMouseEvent): Call GetKeyState instead of GetAsyncKeyState
        * platform/win/WheelEventWin.cpp:
        (WebCore::PlatformWheelEvent::PlatformWheelEvent): Call GetKeyState instead of GetAsyncKeyState

2006-10-19  Adam Roben  <aroben@apple.com>

        Reviewed by Ada.

        This is a partial reimplementation of PopupMenu for Windows. The old
        implementation used the Win32 ListBox control, but as we needed to
        customize the behavior more and more it began to make sense to roll our
        own popup from scratch. That is what this patch accomplishes. And...

        Fix: <rdar://problem/4709416>
        Implement mouse hot-tracking for <select> menus
        Fix: <rdar://problem/4786763>
        Can select disabled options in <select> menus using mouse
        (It was easier to implement these than to leave them broken.)

        * WebCore.vcproj/WebCore.vcproj: Removed PopupMenu.cpp from project.
        * platform/win/PopupMenuWin.cpp: Carnage. PopupMenu has gained a slew
        of new private instance variables to maintain the window state.
        m_container has been removed as it is no longer needed.
        (WebCore::PopupMenu::PopupMenu): Initialize new variables.
        (WebCore::PopupMenu::~PopupMenu): Clean up new variables.
        (WebCore::PopupMenu::show): Now that we don't have m_container, m_popup
        gets the WS_BORDER and WS_POPUP styles. Also moved code to animate the
        window out of the old PopupMenu::setPositionAndSize() into this method
        since it fits the purpose of this method better.
        (WebCore::PopupMenu::hide):
        (WebCore::PopupMenu::calculatePositionAndSize): Renamed from
        setPositionAndSize(), as this method no longer actually sets the window
        position and size, just calculates it. It also now makes sure the
        window is sized to never show partial items, and takes into account the
        window's border when calculating the size.
        (WebCore::PopupMenu::setFocusedIndex): New method to handle setting the
        selected index of the <select> and highlighting the item in the popup menu.
        (WebCore::PopupMenu::down): Use setSelectedIndex() to do the dirty work.
        (WebCore::PopupMenu::up): Ditto.
        (WebCore::PopupMenu::invalidateItem): New method to invalidate the
        rectangle in the popup menu for this item.
        (WebCore::PopupMenu::clientRect): New method to calculate an IntRect
        for the client area of the window.
        (WebCore::PopupMenu::incrementWheelDelta): New method to add the wheel
        delta obtained from a WM_MOUSEWHEEL message to any pre-existing delta.
        (WebCore::PopupMenu::reduceWheelDelta): New method to reduce the
        pre-existing wheel delta by a given amount towards 0.
        (WebCore::PopupMenu::paint): Does the work that PopupMenu::drawItem
        did, but for every item contained within the damageRect. Can also paint
        into a passed-in HDC (needed for window animations and smooth-scrolling).
        (WebCore::registerPopup): Changed a void* to a PopupMenu*, since that's
        what it really is.
        (WebCore::PopupWndProc): Added code to handle all the messages any
        self-respecting window would handle, and removed messages only relevant
        to the ListBox control.
        * platform/win/TemporaryLinkStubs.cpp: Removed unneeded #include.

2006-10-19  Adam Roben  <aroben@apple.com>

        Rubberstamped by Maciej.

        Build fix.

        * bridge/win/FrameWin.cpp:
        (WebCore::FrameWin::submitForm):

2006-10-19  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Steve.

        - speculative build fix for Windows for my recent changes.

        * bridge/win/FrameWin.cpp:
        (WebCore::FrameWin::submitForm):

2006-10-19  Anders Carlsson  <acarlsson@apple.com>

       * platform/win/TemporaryLinkStubs.cpp:
        (WebCore::ResourceLoader::retrieveResponseEncoding):
        Build fix.

2006-10-18  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Geoff.

        - remove remnants of KXMLCore name.

        * WebCore.vcproj/WebCore.vcproj:
        * config.h:

2006-10-18  Steve Falkenburg  <sfalken@apple.com>

        Fix build

        * platform/win/TemporaryLinkStubs.cpp:
        (BrowserExtensionWin::historyURL):
        (BrowserExtensionWin::BrowserExtensionWin):

2006-10-17  Steve Falkenburg  <sfalken@apple.com>

        Build fix

        * platform/win/TemporaryLinkStubs.cpp:
        (BrowserExtensionWin::createNewWindow):

2006-10-17  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Anders.
        
        Added WindowFeatures.h to the project.

        * WebCore.vcproj/WebCore.vcproj:

2006-10-17  Steve Falkenburg  <sfalken@apple.com>

        Reviewed by Maciej.

        Turn off a very noisy warning (unknown pragma) caused by an Interfacer include

        * WebCore.vcproj/WebCore.vcproj:

2006-10-17  Oliver Hunt  <oliver@apple.com>

        Reviewed by Brady.

        Fixed alpha in favicons, added composite operation conversion
        for cg
        
        rdar://problem/4758934

        * platform/win/GraphicsContextWin.cpp:
        (WebCore::GraphicsContext::setCompositeOperation):
        * platform/win/ImageWin.cpp:
        (WebCore::Image::getHBITMAP):
        * platform/win/TemporaryLinkStubs.cpp:
        (GraphicsContext::drawLineForMisspelling):

2006-10-15  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Adam.

        Added HTMLFrameElementBase to the project.
        
        * WebCore.vcproj/WebCore.vcproj:

2006-10-17  Adam Roben  <aroben@apple.com>

        Reviewed by Geoff.

        A couple of cleanups that Geoff suggested after my last checkin.

        * platform/win/PopupMenuWin.cpp:
        (WebCore::PopupMenu::setPositionAndSize):

2006-10-17  Adam Roben  <aroben@apple.com>

        Reviewed by Adele.

        Fix: <rdar://problem/4772506> <select> popup menu should not clip items
        when width: is set.

        Popups are now sized and positioned as follows:
        1. Popups are at least as wide as the <select> control on the page.
        2. Popups for LTR <select>s are right-aligned with the <select>, popups
           for RTL <select>s are left-aligned. This means the scrollbar in the
           popup will always line up with the dropdown button in the <select>.
        3. Popups try to be wide enough to fit their widest item, but will
           shrink to ensure they don't extend off the screen.

        * platform/win/PopupMenuWin.cpp:
        (WebCore::PopupMenu::setPositionAndSize):

2006-10-16  Adam Roben  <aroben@apple.com>

        Reviewed by Kevin.

        Fix: <rdar://problem/4758923> <select> menu text doesn't draw right
        aligned on right-to-left sites

        * platform/win/PopupMenuWin.cpp:
        (WebCore::PopupMenu::show): Pass appropriate styles to CreateWindowEx
        so that we get a left-aligned scrollbar in RTL popups.
        (WebCore::PopupMenu::drawItem): Set text to be right-aligned and draw
        RTL when direction:rtl is set.
        (WebCore::PopupWndProc): Add 1px of vertical height to each menu item
        to match RenderListBox.
        * rendering/RenderThemeWin.cpp:
        (WebCore::RenderThemeWin::paintMenuList): Draw the dropdown button on
        the left when in RTL.
        (WebCore::RenderThemeWin::adjustMenuListStyle): Set padding to allow
        for the dropdown button being on the left in RTL.

2006-10-16  Adam Roben  <aroben@apple.com>

        Reviewed by John.

        Forgot to save these changes John suggested before checking in.

        * platform/win/PopupMenuWin.cpp:
        (WebCore::PopupMenu::drawItem):

2006-10-16  Adam Roben  <aroben@apple.com>

        Reviewed by John.

        Fix: <rdar://problem/4709480> Implement option groups
        Fix: <rdar://problem/4785693> Use CG to draw popup menu items
        Fix: <rdar://problem/4709487> Implement separators in <select> popups
        Fix: <rdar://problem/4709358> Move CreateWindowEx calls out of PopupMenu constructor

        * platform/win/PopupMenuWin.cpp: Added some now-required #includes,
        moved some constants into the WebCore namespace.
        (WebCore::PopupMenu::PopupMenu): Moved CreateWindowEx calls into PopupMenu::show().
        (WebCore::PopupMenu::show): Pass LBS_OWNERDRAWFIXED to CreateWindowEx
        to assume responsibility for drawing menu itesm. Removed call to set
        the font on the popup menu, as CG will take care of this.
        (WebCore::addString): Added to help with the PopupMenu::add* methods.
        (WebCore::PopupMenu::addOption): Use addString.
        (WebCore::PopupMenu::addGroupLabel): Ditto, and moved from TemporaryLinkStubs.cpp.
        (WebCore::PopupMenu::addSeparator): Ditto.
        (WebCore::PopupMenu::down): Skip items that are not enabled <option>
        elements, and tell the popup menu to set the selection to the element
        we end up on.
        (WebCore::PopupMenu::up): Ditto.
        (WebCore::PopupMenu::drawItem): Added. This is the method that is
        called to draw each item in the menu.
        (WebCore::PopupWndProc): Add cases for WM_MEASUREITEM and WM_DRAWITEM
        messages (required now that we're drawing the menu items ourselves). In
        the cases for arrow key presses, return -2 to signify that we're
        handling all aspects of changing the selection.
        * platform/win/TemporaryLinkStubs.cpp: Removed PopupMenu::addSeparator
        and PopupMenu::addGroupLabel.

2006-10-15  Adam Roben  <aroben@apple.com>

        Build fix.

        Merge OpenSource r17056 to TemporaryLinkStubs.cpp.

        * platform/win/TemporaryLinkStubs.cpp:
        (WebCore::CacheObjectExpiresTime):
        (WebCore::ResponseIsMultipart):
        (WebCore::ResponseMIMEType):
        (WebCore::IsResponseURLEqualToURL):
        (WebCore::ResponseURL):
        (WebCore::CachedResource::setResponse):
        (WebCore::CachedResource::setAllData):

2006-10-13  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Darin.

        - split FrameLoadRequest off from ResourceRequest - it's a ResourceRequest plus frame name plus lockHistory bool

        * WebCore.vcproj/WebCore.vcproj:
        * bridge/win/FrameWin.cpp:
        (WebCore::FrameWin::urlSelected):
        (WebCore::FrameWin::submitForm):
        * bridge/win/FrameWin.h:
        * platform/win/TemporaryLinkStubs.cpp:
        (BrowserExtensionWin::createNewWindow):
        (IconLoader::notifyIconChanged):

2006-10-13  Dave Hyatt  <hyatt@apple.com>

        Make form controls work inside transparency layers by having
        them draw into bitmap that is then turned into a CGImageRef
        and blended into the CG transparency layer.

        Reviewed by aroben

        * platform/cg/GraphicsContextPlatformPrivate.h:
        (WebCore::GraphicsContextPlatformPrivate::GraphicsContextPlatformPrivate):
        (WebCore::GraphicsContextPlatformPrivate::beginTransparencyLayer):
        (WebCore::GraphicsContextPlatformPrivate::endTransparencyLayer):
        * platform/win/GraphicsContextWin.cpp:
        (WebCore::GraphicsContext::getWindowsContext):
        (WebCore::GraphicsContext::releaseWindowsContext):
        * platform/win/IconWin.cpp:
        (WebCore::Icon::paint):
        * platform/win/PlatformScrollBar.h:
        * platform/win/PlatformScrollBarWin.cpp:
        (WebCore::PlatformScrollbar::PlatformScrollbar):
        (WebCore::PlatformScrollbar::paint):
        (WebCore::PlatformScrollbar::paintButton):
        (WebCore::PlatformScrollbar::paintTrack):
        (WebCore::PlatformScrollbar::paintThumb):
        * rendering/RenderThemeWin.cpp:
        (WebCore::RenderThemeWin::RenderThemeWin):
        (WebCore::drawControl):

2006-10-12  Dave Hyatt  <hyatt@apple.com>

        Voting Cairo off the island

        or

        Jeff Probst: "Cairo, the tribe has spoken.  It's time for you
        to go."

        * WebCore.vcproj/WebCore.vcproj:
        * platform/win/FontDataWin.cpp:
        (WebCore::FontData::platformInit):
        (WebCore::FontData::platformDestroy):
        (WebCore::FontData::platformWidthForGlyph):
        * platform/win/FontPlatformData.h:
        (WebCore::FontPlatformData::FontPlatformData):
        (WebCore::FontPlatformData::hfont):
        (WebCore::FontPlatformData::cgFont):
        (WebCore::FontPlatformData::operator==):
        * platform/win/FontPlatformDataWin.cpp:
        * platform/win/FontWin.cpp:
        (WebCore::Font::drawGlyphs):
        * platform/win/GraphicsContextWin.cpp:
        * platform/win/IconWin.cpp:
        * platform/win/ImageWin.cpp:
        (WebCore::Image::loadPlatformResource):
        * platform/win/TemporaryLinkStubs.cpp:
        (GraphicsContextPlatformPrivate::clip):
        (GraphicsContext::drawLineForMisspelling):

2006-10-12  Adele Peterson  <adele@apple.com>

        RS by Geoff.

        Renamed uploadControlDetaching to disconnectUploadControl.

        * platform/win/FileChooserWin.cpp:
        (WebCore::FileChooser::disconnectUploadControl):

2006-10-12  Adele Peterson  <adele@apple.com>

        Reviewed by Alice. 

        Fixed a small oversight from the last checkin.  The populate method was calling itself, 
        instead of the newly renamed addItems method.

        * platform/win/PopupMenuWin.cpp:
        (WebCore::PopupMenu::populate):

2006-10-12  Adam Roben  <aroben@apple.com>

        Reviewed by Adele.

        Move popup menu code out of rendering/ and into platform/.
        RenderPopupMenu becomes PopupMenu, the
        RenderPopupMenuMac/RenderPopupMenuWin subclasses and all the associated
        virtual methods go away, RenderTheme gets to stop worrying about popup
        menus, PopupMenu becomes ref-counted, and everyone becomes happy.

        Also fixes <rdar://problem/4710456> Get rid of RenderPopupMenu{Win,Mac}
        classes.

        * WebCore.vcproj/WebCore.vcproj: Move files within project.
        * platform/win/PopupMenuWin.cpp: Moved from
        rendering/RenderPopupMenuWin.cpp. Rename RenderPopupMenuWin to
        PopupMenu.
        (WebCore::PopupMenu::PopupMenu):
        (WebCore::PopupMenu::~PopupMenu):
        (WebCore::PopupMenu::clear):
        (WebCore::PopupMenu::populate):
        (WebCore::PopupMenu::show):
        (WebCore::PopupMenu::hide):
        (WebCore::PopupMenu::setPositionAndSize):
        (WebCore::PopupMenu::addOption):
        (WebCore::PopupMenu::focusedIndex): New method to get the index of the
        element that is currently highlighted. This won't always be the same as
        the selectedIndex because of mouse hot-tracking.
        (WebCore::PopupMenu::down):
        (WebCore::PopupMenu::up):
        (WebCore::registerPopup):
        (WebCore::PopupWndProc): Use focusedIndex() instead of sending messages
        to the popup window.
        * platform/win/TemporaryLinkStubs.cpp: Rename RenderPopupMenuWin to PopupMenu.
        (PopupMenu::addSeparator):
        (PopupMenu::addGroupLabel):
        * rendering/RenderPopupMenuWin.cpp: Removed.
        * rendering/RenderPopupMenuWin.h: Removed.
        * rendering/RenderThemeWin.cpp: Get rid of createPopupMenu() method.
        * rendering/RenderThemeWin.h: Ditto.

2006-10-12  Dave Hyatt  <hyatt@apple.com>

        Implement full-blown double buffering (keeping a bitmap in the WebView that holds the backing store for it).
        
        Reviewed by mjs

        * bridge/win/FrameWin.cpp:
        (WebCore::FrameWin::addToDirtyRegion):
        (WebCore::FrameWin::scrollBackingStore):
        (WebCore::FrameWin::updateBackingStore):
        * bridge/win/FrameWin.h:
        * platform/win/PlatformScrollBar.h:
        * platform/win/PlatformScrollBarWin.cpp:
        (WebCore::PlatformScrollbar::windowClipRect):
        * platform/win/ScrollViewWin.cpp:
        (WebCore::ScrollView::ScrollViewPrivate::valueChanged):
        (WebCore::ScrollView::ScrollViewPrivate::windowClipRect):
        (WebCore::ScrollView::updateContents):
        (WebCore::ScrollView::updateScrollbars):
        (WebCore::ScrollView::windowResizerRect):
        (WebCore::ScrollView::addToDirtyRegion):
        (WebCore::ScrollView::scrollBackingStore):
        (WebCore::ScrollView::updateBackingStore):
        * platform/win/WidgetWin.cpp:
        (WebCore::Widget::suppressInvalidation):
        (WebCore::Widget::invalidateRect):
        * plugins/win/PluginViewWin.cpp:
        (WebCore::PluginViewWin::windowClipRect):

2006-10-11  Adam Roben  <aroben@apple.com>

        Rubberstamped by Brady.

        Clean up logic in Icon::newIconForFile.

        * platform/win/IconWin.cpp:
        (WebCore::Icon::newIconForFile): Error case should return early.

2006-10-11  Adam Roben  <aroben@apple.com>

        Reviewed by Steve.

        Fixes <rdar://problem/4777719>
        Icons don't paint with CG

        * platform/win/IconWin.cpp:
        (WebCore::Icon::paint): Remove Cairo-specific code now that we have
        GraphicsContextWin.

2006-10-11  Adam Roben  <aroben@apple.com>

        Rubberstamped by Anders.

        Clean up FileChooser::create, Icon::create.

        * platform/win/FileChooserWin.cpp:
        (WebCore::FileChooser::create): Just return a FileChooser* and let the
        implicit cast happen.
        * platform/win/IconWin.cpp:
        (WebCore::Icon::newIconForFile): Ditto for Icon*.

2006-10-10  Adam Roben  <aroben@apple.com>

        Reviewed by Oliver.

        Fixes <rdar://problem/4731316>
        Crash when <input type="file"> element removed while file chooser is open

        * platform/win/FileChooserWin.cpp: Make FileChooser ref-counted.
        (WebCore::FileChooser::create):
        (WebCore::FileChooser::openFileChooser): Add a protector RefPtr around
        the call to GetOpenFileName so we don't get deleted while the file
        chooser window is open.

2006-10-10  Adam Roben  <aroben@apple.com>

        Reviewed by Anders.

        Fixes <rdar://problem/4772428>
        <select> popup menus positioned incorrectly within frames

        * rendering/RenderPopupMenuWin.cpp:
        (WebCore::RenderPopupMenuWin::setPositionAndSize): Use
        contentsToWindow() instead of scrollOffset() to correct menu location.

2006-10-10  Adam Roben  <aroben@apple.com>

        Reviewed by Adele.

        Fixes <rdar://problem/4763246>
        Using arrow keys in <select> popup fires onChange event

        Also updates text shown in <select> element on page when using arrow
        keys to change selection within the popup menu, and makes onChange fire
        in the same cases as Firefox/IE.

        * rendering/RenderPopupMenuWin.cpp:
        (WebCore::RenderPopupMenuWin::down): Update text of the <select>
        control. Change call to valueChanged() so that onChange doesn't fire.
        (WebCore::RenderPopupMenuWin::up): Ditto.
        (WebCore::PopupWndProc): Don't fire onChange anytime selection changes.
        Fire onChange when pressing Enter

2006-10-09  Anders Carlsson  <acarlsson@apple.com>

        Reviewed by Maciej.

        Fix <rdar://problem/4756255>
        PDF/Acrobat Reader plugin don't work
        
        * bridge/win/FrameWin.cpp:
        (WebCore::FrameWin::getObjectInstanceForWidget):
        (WebCore::FrameWin::getEmbedInstanceForWidget):
        Implement these, getting the instance from the plugin view.
        
        * platform/win/TemporaryLinkStubs.cpp:
        Remove functions that are now implemented.
        
        * plugins/win/PlugInInfoStoreWin.cpp:
        (WebCore::PlugInInfoStore::pluginCount):
        (WebCore::PlugInInfoStore::supportsMIMEType):
        Implement this, returning whether we a plugin exists for a given mime type.
        
        * plugins/win/PluginDatabaseWin.cpp:
        (WebCore::parseVersionString):
        (WebCore::compareVersions):
        New functions for handling versions.
        
        (WebCore::addMozillaPluginPaths):
        (WebCore::addWindowsMediaPlayerPluginPath):
        (WebCore::addQuickTimePluginPath):
        (WebCore::addJavaPluginPath):
        (WebCore::addAdobeAcrobatPluginPath):
        (WebCore::PluginDatabaseWin::defaultPluginPaths):
        Factor out checks into separate functions, add checks for Java and Adobe Acrobat.

        (WebCore::PluginDatabaseWin::isMIMETypeRegistered):
        Handle null MIME types.
        
        * plugins/win/PluginPackageWin.cpp:
        (WebCore::PluginPackageWin::load):
        Add some missing functions. Unload the library if the load failed.
        
        * plugins/win/PluginViewWin.cpp:
        (WebCore::PluginViewWin::getValue):
        Uncomment code for getting the element object.
        
        (WebCore::PluginViewWin::bindingInstance):
        * plugins/win/PluginViewWin.h:
        New function which fetches the plugin NPObject and wraps it in an instance.

2006-10-09  Anders Carlsson  <acarlsson@apple.com>

        Reviewed by Steve.

        Fix <rdar://problem/4773320>
        Safari didn't pick up quicktime that was already installed
        
        * plugins/win/PluginDatabaseWin.cpp:
        (WebCore::PluginDatabaseWin::defaultPluginPaths):
        
2006-10-09  Anders Carlsson  <acarlsson@apple.com>

        * WebCore.vcproj/WebCore.vcproj:
        * bridge/win/FrameWin.h:
        * platform/win/TemporaryLinkStubs.cpp:
        (FrameWin::createJavaAppletWidget):
        Fix build.

2006-10-09  Adam Roben  <aroben@apple.com>

        Reviewed by Adele.

        Fixes <rdar://problem/4773142>
        Crash in Settings::mediumFontSize() on ebay.com

        Call cancelAndClear() from ~FrameWin (just like Mac does) so we don't
        end up calling the Frame::saveDocumentState, which is pure virtual.

        * bridge/win/FrameWin.cpp:
        (WebCore::FrameWin::~FrameWin):

2006-10-08  Adam Roben  <aroben@apple.com>

        Reviewed by Maciej.

        Port of OpenSource r16526, r16528

        Break up ResourceLoaderWndProc into callback functions.

        * platform/win/ResourceLoaderWin.cpp: Fix up #includes
        (WebCore::): Remove loadStatusMessage, struct JobLoadStatus, add
        messageHandlers array.
        (WebCore::ResourceLoaderWndProc): Split handling of different messages
        into callbacks.
        (WebCore::ResourceLoader::onHandleCreated): New callback.
        (WebCore::ResourceLoader::onRequestRedirected): New callback.
        (WebCore::ResourceLoader::onRequestComplete): New callback.
        (WebCore::initializeOffScreenResourceLoaderWindow): No need to register
        loadStatusMessage anymore.
        (WebCore::transferJobStatusCallback): Change how information is passed
        into ResourceLoaderWndProc.

2006-10-08  Dave Hyatt  <hyatt@apple.com>

        Add support for the Win2k/Classic theme for all controls.

        * rendering/RenderThemeWin.cpp:
        (WebCore::RenderThemeWin::buttonTheme):
        (WebCore::RenderThemeWin::textFieldTheme):
        (WebCore::RenderThemeWin::menuListTheme):
        (WebCore::RenderThemeWin::supportsHover):
        (WebCore::RenderThemeWin::determineClassicState):
        (WebCore::RenderThemeWin::getClassicThemeData):
        (WebCore::RenderThemeWin::getThemeData):
        (WebCore::drawControl):
        (WebCore::RenderThemeWin::paintButton):
        (WebCore::RenderThemeWin::paintTextField):
        (WebCore::RenderThemeWin::paintMenuList):
        * rendering/RenderThemeWin.h:
        (WebCore::ThemeData::m_state):

2006-10-07  Steve Falkenburg  <sfalken@apple.com>

        Reviewed by Adam.

        Fix <rdar://4772205> Regression (r10623): WinInet loader doesn't ever write to the cache.        

        * platform/win/ResourceLoaderWin.cpp:
        (WebCore::ResourceLoaderWndProc): Apply POST related flags only for posts.
        (WebCore::ResourceLoader::startHTTPRequest): Don't add no-cache-write flag to non-post transactions.

2006-10-07  Dave Hyatt  <hyatt@apple.com>

        Add code to paint the Windows 2000 and "Windows Classic" theme look for scrollbars.

        * platform/win/PlatformScrollBarWin.cpp:
        (WebCore::PlatformScrollbar::paintButton):
        (WebCore::PlatformScrollbar::paintTrack):
        (WebCore::PlatformScrollbar::paintThumb):
        (WebCore::PlatformScrollbar::paintGripper):

2006-10-07  Dave Hyatt  <hyatt@apple.com>

        Make sure frames and iframes honor scrolling="no" and
        margins.

        * bridge/win/FrameWin.cpp:
        (WebCore::FrameWin::createFrame):

2006-10-07  Dave Hyatt  <hyatt@apple.com>

        Fix the resizer rect so that it is in the ScrollView's coordinate space and not in the document's coordinate space.
        (Fixes all the layout errors with the scrollbar overlapping the resizer.)
        
        Fill scroll corners with white, since it matches Mac (and our chosen resizer look) and looks nicer anyway.
        
        * platform/win/ScrollViewWin.cpp:
        (WebCore::ScrollView::updateScrollbars):
        (WebCore::ScrollView::paint):

2006-10-06  Dave Hyatt  <hyatt@apple.com>

        Make sure to update plugin clip regions when scrollbars come and go on a scrollview.
       
        * platform/win/ScrollViewWin.cpp:
        (WebCore::ScrollView::updateScrollbars):

2006-10-06  Dave Hyatt  <hyatt@apple.com>

        Revise the cached clip rect so that it is in the HWND's coordinate space.  This way SetWindowRgn
        doesn't get wastefully called when the plugin is scrolled.
       
        * plugins/win/PluginViewWin.cpp:
        (WebCore::PluginViewWin::updateHwnd):

2006-10-06  Dave Hyatt  <hyatt@apple.com>

        Implement flawless clipping of windowed plugins, including
        respecting nested frames, CSS overflow and CSS clip.  (This
        puts Boomer way ahead of Mac as far as plugin clipping is
        concerned).
        
        Implement support for correct blitting of scrolled subframes,
        even when clipped by enclosing scrollviews.

        Fix a crash caused by focused children not being cleaned up
        when they are removed from a scrollview.

        * platform/win/ScrollViewWin.cpp:
        (WebCore::ScrollView::ScrollViewPrivate::valueChanged):
        (WebCore::ScrollView::setFrameGeometry):
        (WebCore::ScrollView::addChild):
        (WebCore::ScrollView::removeChild):
        (WebCore::ScrollView::geometryChanged):
        * plugins/win/PluginViewWin.cpp:
        (WebCore::PluginViewWin::updateHwnd):
        (WebCore::PluginViewWin::windowClipRect):
        (WebCore::PluginViewWin::setFrameGeometry):
        (WebCore::PluginViewWin::geometryChanged):
        * plugins/win/PluginViewWin.h:

2006-10-06  Geoffrey Garen  <ggaren@apple.com>

        Fixed <rdar://4768789> Crash on ebay.com in Frame::didOpenURL
        
        The issue was a resource loader making a callback to a
        frame after the frame had been destroyed. This doesn't happen on Mac
        because Mac WebKit cancels all loads before tearing down frames.
        
        The solution is to add a callback to Win WebKit to allow a frame
        to cancel its main resource load. This is a temporary work-around.
        It is temporary because it doesn't address pending subresource loads.
        The long-term solution we anticipate is to have a legitimate loader
        inside WebCore.

        * ChangeLog:
        * bridge/win/FrameWin.cpp:
        (WebCore::FrameWin::~FrameWin):
        * bridge/win/FrameWin.h:

2006-10-06  Steve Falkenburg  <sfalken@apple.com>

        Reviewed by Adam, Lou.

        Resizer fixes.
        We now properly invalidate and draw overlapping contents or opaque.

        * platform/win/ScrollViewWin.cpp:
        (WebCore::ScrollView::ScrollViewPrivate::ScrollViewPrivate):
        (WebCore::ScrollView::updateScrollbars):
        (WebCore::ScrollView::resizerOverlapsContent):

2006-10-06  Anders Carlsson  <acarlsson@apple.com>

        Reviewed by Adam.

        * plugins/win/PluginDatabaseWin.cpp:
        (WebCore::PluginDatabaseWin::defaultPluginPaths):
        Add (commented out) WMP plugin check.

2006-10-06  Anders Carlsson  <acarlsson@apple.com>

        Reviewed by Brady and Geoff.

        <rdar://problems/4769023>
        Crash on cnettv.com - PluginStreamWin::receivedResponse
        
        * platform/win/ResourceLoaderWin.cpp:
        (WebCore::ResourceLoaderWndProc):
        If the Content-Type header is missing, try to figure o ut the content type
        from the file extension. Failing that, just use "application/octet-stream".

2006-10-06  Adam Roben  <aroben@apple.com>

        Reviewed by Maciej.

        Some loader improvements, courtesy of Steve.

        Functionally, the improvements are these:
        1. Support HTTP Authentication
        2. Respect WinInet errors better

        There are also some general code cleanups, like extracting the creation
        of an HTTP request into its own method.

        * platform/win/ResourceLoaderWin.cpp: Add dwError field to
        JobLoadStatus to store WinInet error codes. Also removed the
        globalInternetHandle() function as the global HINTERNET is now only
        needed within startHTTPRequest.
        (WebCore::ResourceLoaderWndProc): Respect error codes and add HTTP
        Authentication support. Also, process HTTP status codes as ints instead
        of strings.
        (WebCore::ResourceLoaderInternal::~ResourceLoaderInternal): Cleanup
        m_formData
        (WebCore::transferJobStatusCallback): Cleanup the code, and set
        dwError.
        (WebCore::ResourceLoader::startHTTPRequest): New method to start a new
        HTTP request.
        (WebCore::ResourceLoader::start): Restructure code.

2006-10-06  Dave Hyatt  <hyatt@apple.com>

        Fix the plugins on cnn.com.  Don't let the scroll view move child plugins around if it hasn't even been parented yet.
        
        Fix an assert in widget destructors caused by not unparenting a ScrollView's scrollbars in its destructor.
        
        * platform/win/ScrollViewWin.cpp:
        (WebCore::ScrollView::ScrollViewPrivate::~ScrollViewPrivate):
        (WebCore::ScrollView::setFrameGeometry):

2006-10-06  Dave Hyatt  <hyatt@apple.com>

        Make sure that plugin windows get properly moved if an ancestor scrollview is shifted without changing its size (meaning
        that layout doesn't get called on the scrollview to update the widget positions).
        
        Fixes the plugins on osnews.com.
        
        * platform/win/ScrollViewWin.cpp:
        (WebCore::ScrollView::setFrameGeometry):

2006-10-05  Steve Falkenburg  <sfalken@apple.com>

        Reviewed by aroben.

        Scrollbars now dodge resizing gripper.

        * bridge/win/FrameViewWin.cpp:
        (WebCore::FrameView::windowResizerRect): added.
        * bridge/win/FrameWin.cpp:
        (WebCore::FrameWin::windowResizerRect): added.
        * bridge/win/FrameWin.h:
        * platform/win/ScrollViewWin.cpp:
        (WebCore::ScrollView::updateScrollbars): Scrollbars now dodge resizing gripper.

2006-10-05  Dave Hyatt  <hyatt@apple.com>

        Fix a bug where scrollbars would incorrectly show up for iframes when they weren't needed.
        Change the flow of control to be more like Mac.

        * platform/win/ScrollViewWin.cpp:
        (WebCore::ScrollView::resizeContents):
        (WebCore::ScrollView::setFrameGeometry):

2006-10-05  Dave Hyatt  <hyatt@apple.com>

        Fix clipping and transforms by making sure to propagate them as they happen on the CGContext over into the HDC.
        
        * platform/cg/GraphicsContextPlatformPrivate.h:
        * platform/win/GraphicsContextWin.cpp:
        (WebCore::CGContextWithHDC):
        (WebCore::GraphicsContext::getWindowsContext):
        (WebCore::GraphicsContext::releaseWindowsContext):
        (WebCore::GraphicsContextPlatformPrivate::save):
        (WebCore::GraphicsContextPlatformPrivate::restore):
        (WebCore::GraphicsContextPlatformPrivate::clip):
        (WebCore::GraphicsContextPlatformPrivate::scale):
        (WebCore::GraphicsContextPlatformPrivate::rotate):
        (WebCore::GraphicsContextPlatformPrivate::translate):
        (WebCore::GraphicsContextPlatformPrivate::concatCTM):
        * platform/win/TemporaryLinkStubs.cpp:
        (GraphicsContextPlatformPrivate::clip):

2006-10-05  Geoffrey Garen  <ggaren@apple.com>

        build fix.
        
        * platform/win/WidgetWin.cpp:
        (WebCore::Widget::~Widget):
        (WebCore::Widget::setParent):
        (WebCore::Widget::parent):
        (WebCore::Widget::removeFromParent):

2006-10-05  David Hyatt  <hyatt@apple.com>

        Stub out GraphicsContextPlatformPrivate methods so that the HDC can
        be updated when clips/transforms are applied.

        Reviewed by darin

        * platform/cg/GraphicsContextPlatformPrivate.h:
        (WebCore::GraphicsContextPlatformPrivate::save):
        (WebCore::GraphicsContextPlatformPrivate::restore):
        (WebCore::GraphicsContextPlatformPrivate::clip):
        (WebCore::GraphicsContextPlatformPrivate::scale):
        (WebCore::GraphicsContextPlatformPrivate::rotate):
        (WebCore::GraphicsContextPlatformPrivate::translate):
        (WebCore::GraphicsContextPlatformPrivate::concatCTM):

2006-10-05  Adam Roben  <aroben@apple.com>

        Build fix.

        * platform/win/TemporaryLinkStubs.cpp:
        (BrowserExtensionWin::BrowserExtensionWin): Change Frame* to FrameWin*

2006-10-05  Adam Roben  <aroben@apple.com>

        Build fix. Remove RenderImageButton.{h,cpp}.

        * WebCore.vcproj/WebCore.vcproj:

2006-10-05  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Darin.
        
        Fixed <rdar://problem/4766987>
        
        - renamed ScrollBar to Scrollbar and scroll bar to scrollbar in every case
        except for file names.
        
        - fixed RenderLayer to properly tear down scrollbars, removing them from
        their parents.

        * bridge/win/FrameViewWin.cpp:
        (WebCore::FrameView::passMousePressEventToScrollbar):
        * platform/win/PlatformScrollBar.h:
        (WebCore::):
        * platform/win/PlatformScrollBarWin.cpp:
        (WebCore::PlatformScrollbar::PlatformScrollbar):
        (WebCore::PlatformScrollbar::~PlatformScrollbar):
        (WebCore::PlatformScrollbar::updateThumbPosition):
        (WebCore::PlatformScrollbar::updateThumbProportion):
        (WebCore::PlatformScrollbar::invalidateTrack):
        (WebCore::PlatformScrollbar::invalidatePart):
        (WebCore::PlatformScrollbar::width):
        (WebCore::PlatformScrollbar::height):
        (WebCore::PlatformScrollbar::setRect):
        (WebCore::PlatformScrollbar::setEnabled):
        (WebCore::PlatformScrollbar::paint):
        (WebCore::PlatformScrollbar::backButtonRect):
        (WebCore::PlatformScrollbar::forwardButtonRect):
        (WebCore::PlatformScrollbar::trackRect):
        (WebCore::PlatformScrollbar::thumbRect):
        (WebCore::PlatformScrollbar::gripperRect):
        (WebCore::PlatformScrollbar::splitTrack):
        (WebCore::PlatformScrollbar::thumbPosition):
        (WebCore::PlatformScrollbar::thumbLength):
        (WebCore::PlatformScrollbar::trackLength):
        (WebCore::PlatformScrollbar::paintButton):
        (WebCore::PlatformScrollbar::paintTrack):
        (WebCore::PlatformScrollbar::paintThumb):
        (WebCore::PlatformScrollbar::paintGripper):
        (WebCore::PlatformScrollbar::hitTest):
        (WebCore::PlatformScrollbar::handleMouseMoveEvent):
        (WebCore::PlatformScrollbar::handleMouseOutEvent):
        (WebCore::PlatformScrollbar::handleMousePressEvent):
        (WebCore::PlatformScrollbar::handleMouseReleaseEvent):
        (WebCore::PlatformScrollbar::startTimerIfNeeded):
        (WebCore::PlatformScrollbar::stopTimerIfNeeded):
        (WebCore::PlatformScrollbar::autoscrollPressedPart):
        (WebCore::PlatformScrollbar::autoscrollTimerFired):
        (WebCore::PlatformScrollbar::pressedPartScrollDirection):
        (WebCore::PlatformScrollbar::pressedPartScrollGranularity):
        (WebCore::PlatformScrollbar::thumbUnderMouse):
        (WebCore::PlatformScrollbar::themeChanged):
        (WebCore::PlatformScrollbar::horizontalScrollbarHeight):
        (WebCore::PlatformScrollbar::verticalScrollbarWidth):
        * platform/win/ScrollViewWin.cpp:
        (WebCore::ScrollView::ScrollViewPrivate::ScrollViewPrivate):
        (WebCore::ScrollView::ScrollViewPrivate::setHasHorizontalScrollbar):
        (WebCore::ScrollView::ScrollViewPrivate::setHasVerticalScrollbar):
        (WebCore::ScrollView::ScrollViewPrivate::valueChanged):
        (WebCore::ScrollView::resizeContents):
        (WebCore::ScrollView::scrollBy):
        (WebCore::ScrollView::hScrollbarMode):
        (WebCore::ScrollView::vScrollbarMode):
        (WebCore::ScrollView::suppressScrollbars):
        (WebCore::ScrollView::setHScrollbarMode):
        (WebCore::ScrollView::setVScrollbarMode):
        (WebCore::ScrollView::setScrollbarsMode):
        (WebCore::ScrollView::updateScrollbars):
        (WebCore::ScrollView::scrollbarUnderMouse):
        (WebCore::ScrollView::paint):
        (WebCore::ScrollView::themeChanged):

2006-10-05  Adam Roben  <aroben@apple.com>

        Reviewed by Maciej.

        Fixes <rdar://problem/4757387>
        Unable to sign on to my.yahoo.com

        This patch fixes a number of bugs that all resulted in not being able
        to log on to many websites. The problems were that we weren't allowing
        redirects between HTTP and HTTPS sites and weren't correctly handling
        redirects from POST requests to GET requests.

        * platform/win/ResourceLoaderWin.cpp:
        (WebCore::globalInternetHandle): Move internetHandle and callbackHandle
        into file scope, and add this function to initialize them.
        (WebCore::logLastError): Add this debug logging function to give more
        readable WinInet error messages.
        (WebCore::ResourceLoaderWndProc): The most substantial change here is
        to allow redirects from POST to GET to function correctly. To do this
        we have to create a new HINTERNET for the GET. We also have to be sure
        not to try to read from our now-invalid handles after the redirect.
        (WebCore::transferJobStatusCallback): Rename timerId to jobId, since
        that's what it is.
        (WebCore::ResourceLoader::start): Call new static initializer, and pass
        flags to allow HTTP<->HTTPS redirects. Also change a few delete calls
        to kill().

2006-10-05  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Adam.

        - changed ResourceLoader to be refcounted

        It keeps a ref on itself while loading as well. This makes
        for a much saner memory management model than the previous.

        In addition, keep it ref'd across all of ResourceLoaderWndProc
        to avoid sending messages to jobs that get deleted partway.

        This fixes <rdar://problem/4766859> Crash in ResourceLoaderWndProc - line 232 at televisionwithoutpity.com, washingtonpost.com

        * platform/win/ResourceLoaderWin.cpp:
        (WebCore::ResourceLoaderWndProc):
        (WebCore::ResourceLoader::start):
        * plugins/win/PluginStreamWin.cpp:
        (WebCore::PluginStreamWin::PluginStreamWin):
        (WebCore::PluginStreamWin::start):
        (WebCore::PluginStreamWin::stop):
        * plugins/win/PluginStreamWin.h:

2006-10-05  Dave Hyatt  <hyatt@apple.com>

        Make key events work with iframes.  Implement scrolling keyboard behavior.  Fix a bug with mouse wheeling that
        made it fail on iframes nested within iframes.
        
        Reviewed by mjs

        * bridge/win/FrameViewWin.cpp:
        (WebCore::FrameView::passWheelEventToSubframe):
        * platform/win/ScrollViewWin.cpp:
        (WebCore::ScrollView::scroll):
        * platform/win/WidgetWin.cpp:
        (WebCore::Widget::Widget):
        (WebCore::Widget::capturingMouse):
        (WebCore::Widget::setCapturingMouse):
        (WebCore::Widget::capturingTarget):
        (WebCore::Widget::setCapturingChild):
        (WebCore::Widget::hasFocus):
        (WebCore::Widget::setFocus):
        (WebCore::Widget::clearFocus):
        (WebCore::Widget::setFocused):
        (WebCore::Widget::focusedTarget):
        (WebCore::Widget::focusedChild):
        (WebCore::Widget::setFocusedChild):
        (WebCore::Widget::clearFocusFromDescendants):

2006-10-05  Adam Roben  <aroben@apple.com>

        Reviewed by Maciej and Tim H.

        Fixes <rdar://problem/4760991>
        Flash content doesn't go away when navigating to a new page

        Actually destroy subframes when detaching.

        * bridge/win/FrameWin.cpp:
        (WebCore::FrameWin::frameDetached): 
        * bridge/win/FrameWin.h:

2006-10-05  Anders Carlsson  <acarlsson@apple.com>

        Reviewed by Maciej.
        
        <rdar://problem/4762998>
        REGRESSION: dragging to select text does not work
        
        * platform/win/PlatformMouseEventWin.cpp:
        (WebCore::PlatformMouseEvent::PlatformMouseEvent):
        Set the correct button for WM_MOUSEMOVE events.

2006-10-05  Anders Carlsson  <acarlsson@apple.com>

        Reviewed by Adam.

        rdar://problem/4757081
        Crashes/hangs when using Flash 8 plugin (Flash 9 works MUCH better)
        
        * plugins/win/PluginStreamWin.cpp:
        (WebCore::PluginStreamWin::startStream):
        Encode javascript URLs before passing them to the plugin.

2006-10-05  Darin Adler  <darin@apple.com>

        Reviewed by Adam.

        * platform/win/NotImplemented.h: Changed implementation to use Assertions.h.
        Also fixed both macros to be single-statement macros.

2006-10-05  Darin Adler  <darin@apple.com>

        Reviewed by Adam.

        - fix <rdar://problem/4764253>
          frame targeting not implemented.

        * bridge/win/FrameWin.h: Added new window boolean to openURL. Also changed
        type from DeprecatedString to String.
        * bridge/win/FrameWin.cpp: (WebCore::FrameWin::urlSelected): Added logic
        to do frame targeting.

        * platform/win/BString.h: Added. Convenience for working with
        BSTR and handling allocation/free.
        * platform/win/BString.cpp: Added.
        * WebCore.vcproj/WebCore.vcproj: Added new files.

2006-10-03  Dave Hyatt  <hyatt@apple.com>

        Land the new ScrollView.
        
        Reviewed by anders

        * bridge/win/FrameViewWin.cpp:
        (WebCore::FrameView::passMousePressEventToScrollbar):
        * platform/win/PlatformScrollBar.h:
        * platform/win/PlatformScrollBarWin.cpp:
        (WebCore::PlatformScrollBar::thumbLength):
        (WebCore::PlatformScrollBar::hitTest):
        (WebCore::PlatformScrollBar::horizontalScrollBarHeight):
        (WebCore::PlatformScrollBar::verticalScrollBarWidth):
        * platform/win/ScrollViewWin.cpp:
        (WebCore::ScrollView::ScrollViewPrivate::ScrollViewPrivate):
        (WebCore::ScrollView::ScrollViewPrivate::setHasHorizontalScrollBar):
        (WebCore::ScrollView::ScrollViewPrivate::setHasVerticalScrollBar):
        (WebCore::ScrollView::ScrollViewPrivate::valueChanged):
        (WebCore::ScrollView::ScrollView):
        (WebCore::ScrollView::updateContents):
        (WebCore::ScrollView::visibleWidth):
        (WebCore::ScrollView::visibleHeight):
        (WebCore::ScrollView::visibleContentRect):
        (WebCore::ScrollView::resizeContents):
        (WebCore::ScrollView::contentsWidth):
        (WebCore::ScrollView::contentsHeight):
        (WebCore::ScrollView::windowToContents):
        (WebCore::ScrollView::contentsToWindow):
        (WebCore::ScrollView::convertChildToSelf):
        (WebCore::ScrollView::convertSelfToChild):
        (WebCore::ScrollView::scrollOffset):
        (WebCore::ScrollView::maximumScroll):
        (WebCore::ScrollView::scrollBy):
        (WebCore::ScrollView::scrollPointRecursively):
        (WebCore::ScrollView::hScrollBarMode):
        (WebCore::ScrollView::vScrollBarMode):
        (WebCore::ScrollView::suppressScrollBars):
        (WebCore::ScrollView::setHScrollBarMode):
        (WebCore::ScrollView::setVScrollBarMode):
        (WebCore::ScrollView::setScrollBarsMode):
        (WebCore::ScrollView::setStaticBackground):
        (WebCore::ScrollView::updateScrollBars):
        (WebCore::ScrollView::scrollbarUnderMouse):
        (WebCore::ScrollView::addChild):
        (WebCore::ScrollView::removeChild):
        (WebCore::ScrollView::paint):
        (WebCore::ScrollView::scrolled):
        * platform/win/WidgetWin.cpp:
        (WebCore::Widget::Widget):
        (WebCore::Widget::convertToContainingWindow):
        (WebCore::Widget::convertFromContainingWindow):
        (WebCore::Widget::convertChildToSelf):
        (WebCore::Widget::convertSelfToChild):
        (WebCore::Widget::setSuppressInvalidation):
        (WebCore::Widget::invalidateRect):
        * plugins/win/PluginViewWin.cpp:
        (WebCore::PluginViewWndProc):
        (WebCore::PluginViewWin::setFrameGeometry):
        (WebCore::PluginViewWin::scrolled):
        * plugins/win/PluginViewWin.h:

2006-10-03  Adam Roben  <aroben@apple.com>

        Reviewed by Steve.

        Improvements to error handling in PluginStreamWin.

        * plugins/win/PluginStreamWin.cpp:
        (WebCore::PluginStreamWin::deliverData): Fail quietly if called after
        termination (due to bad error handling in ResourceLoaderWin), ASSERT if
        called before stream has been started.
        (WebCore::PluginStreamWin::receivedData): Ditto.
        (WebCore::PluginStreamWin::receivedAllData): Ditto.

2006-10-03  Adam Roben  <aroben@apple.com>

        Reviewed by Anders.

        Fixes <rdar://problem/4760963>
        Failed ASSERT in PluginStreamWin::~PluginStreamWin at espn.com

        We now store the state of a stream as a tri-state enum in
        m_streamState. This allows us to differentiate between before and after the
        stream has been started.

        * plugins/win/PluginStreamWin.cpp:
        (WebCore::PluginStreamWin::PluginStreamWin): Initialize members of
        m_stream struct individually.
        (WebCore::PluginStreamWin::~PluginStreamWin):
        (WebCore::PluginStreamWin::startStream):
        (WebCore::PluginStreamWin::destroyStream):
        (WebCore::PluginStreamWin::deliverData): Return early if the stream
        isn't started.
        (WebCore::PluginStreamWin::receivedData): Ditto.
        (WebCore::PluginStreamWin::receivedAllData): Ditto.
        * plugins/win/PluginStreamWin.h:
        (WebCore::): Add PluginStreamState enum.

2006-10-03  Adam Roben  <aroben@apple.com>

        Reviewed by Darin.

        Fixes <rdar://problem/4603342>
        Keyboard navigability

        Implement tabbing between form elements (in the single-frame case).

        * bridge/win/FrameWin.cpp: Add methods to determine tabbing
        preferences.
        (WebCore::FrameWin::tabsToLinks):
        (WebCore::FrameWin::tabsToAllControls):
        * bridge/win/FrameWin.h: Add tabsToLinks() to FrameWinClient
        * platform/win/ScrollViewWin.cpp:
        (WebCore::ScrollView::scrollPointRecursively): Implemented for
        single-frame case.
        * platform/win/TemporaryLinkStubs.cpp: Remove stub for now-implemented
        ScrollView::scrollPointsRecursively

2006-10-02  Adam Roben  <aroben@apple.com>

        Reviewed by Maciej.

        Fixes <rdar://problem/4743497>
        Can't check checkboxes

        Let Windows determine which mouse button is pressed.

        * platform/win/PlatformMouseEventWin.cpp:
        (WebCore::PlatformMouseEvent::PlatformMouseEvent): Use message
        parameter to determine which mouse button is pressed.

2006-10-02  Steve Falkenburg  <sfalken@apple.com>

        Reviewed by Hyatt.

        <rdar://4757387> (partial fix) Unable to sign on to my.yahoo.com
        <rdar://4757405> (partial fix) Unable to log onto secure site (www.schwab.com)
        <rdar://4757411> (partial fix) Unable to log onto any AppleConnect site (but using back and resubmiting works)

        WinInet fixes.
        Don't post data using HTTP when HTTPS should be used.
        Fix redirect from POST to GET case.
        
        There is a remaining bug with the way that we queue WinInet callbacks
        still to be addressed.

        * platform/win/ResourceLoaderWin.cpp:
        (WebCore::addToOutstandingJobs): Skip dwContext of 0 (rollover case).
        (WebCore::ResourceLoaderWndProc): Call default wndproc properly.
            Pass INTERNET_FLAG_SECURE when necessary for HTTPS.
            Fix redirect code.
            Initialize buffers struct.
            Pass proper context in InternetReadFileExA
        (WebCore::initializeOffScreenResourceLoaderWindow): Init a struct to {0} instead of using memset.
        (WebCore::transferJobStatusCallback): Prevent future bugs by making an else a bit more explicit.
        (WebCore::ResourceLoader::start): Pass proper port for HTTP vs. HTTPS.
        (WebCore::ResourceLoader::cancel): Zero out handle when closing.

2006-10-01  Dave Hyatt  <hyatt@apple.com>

        Finish the scrollbar.  Handle arrow and track scrolling.  Everything is finished now except for implementing a Win2k look.

        * platform/win/PlatformScrollBar.h:
        * platform/win/PlatformScrollBarWin.cpp:
        (WebCore::PlatformScrollBar::PlatformScrollBar):
        (WebCore::PlatformScrollBar::~PlatformScrollBar):
        (WebCore::PlatformScrollBar::thumbRect):
        (WebCore::PlatformScrollBar::handleMouseMoveEvent):
        (WebCore::PlatformScrollBar::handleMousePressEvent):
        (WebCore::PlatformScrollBar::handleMouseReleaseEvent):
        (WebCore::PlatformScrollBar::startTimerIfNeeded):
        (WebCore::PlatformScrollBar::stopTimerIfNeeded):
        (WebCore::PlatformScrollBar::autoscrollPressedPart):
        (WebCore::PlatformScrollBar::autoscrollTimerFired):
        (WebCore::PlatformScrollBar::pressedPartScrollDirection):
        (WebCore::PlatformScrollBar::pressedPartScrollGranularity):
        (WebCore::PlatformScrollBar::thumbUnderMouse):

2006-10-01  Dave Hyatt  <hyatt@apple.com>
        
        Make thumb dragging work on the scrollbar.
        
        Fix mouse and wheel events to use GET_X_LPARAM and GET_Y_LPARAM so that negative coordinates work.
        (This comes up when a widget is capturing events and the mouse moves outside the HWND.)
        
        * platform/win/PlatformMouseEventWin.cpp:
        (WebCore::positionForEvent):
        (WebCore::globalPositionForEvent):
        * platform/win/PlatformScrollBar.h:
        * platform/win/PlatformScrollBarWin.cpp:
        (WebCore::PlatformScrollBar::PlatformScrollBar):
        (WebCore::PlatformScrollBar::handleMouseMoveEvent):
        (WebCore::PlatformScrollBar::handleMousePressEvent):
        (WebCore::PlatformScrollBar::handleMouseReleaseEvent):
        (WebCore::PlatformScrollBar::startTimerIfNeeded):
        (WebCore::PlatformScrollBar::stopTimerIfNeeded):
        * platform/win/WheelEventWin.cpp:
        (WebCore::positionForEvent):
        (WebCore::globalPositionForEvent):

2006-10-01  Dave Hyatt  <hyatt@apple.com>

        Hook up the mouse capture architecture so that child widgets capture events while the mouse is pressed.
        
        Hook up tracking the pressed object on a scrollbar and proper painting of the scrollbar's
        pressed state.
        
        * bridge/win/FrameViewWin.cpp:
        (WebCore::FrameView::passMousePressEventToSubframe):
        (WebCore::FrameView::passMousePressEventToScrollbar):
        * platform/win/PlatformScrollBar.h:
        * platform/win/PlatformScrollBarWin.cpp:
        (WebCore::PlatformScrollBar::PlatformScrollBar):
        (WebCore::PlatformScrollBar::paintButton):
        (WebCore::PlatformScrollBar::paintTrack):
        (WebCore::PlatformScrollBar::paintThumb):
        (WebCore::PlatformScrollBar::paintGripper):
        (WebCore::PlatformScrollBar::handleMouseMoveEvent):
        (WebCore::PlatformScrollBar::handleMousePressEvent):
        (WebCore::PlatformScrollBar::handleMouseReleaseEvent):
        * platform/win/WidgetWin.cpp:
        (WebCore::Widget::setCapturingChild):

2006-09-30  Dave Hyatt  <hyatt@apple.com>

        This patch makes iframes and frames able to receive mouse events.  Down, up, click, selection
        all work.  This patch also fixes bugs in scrolling and makes wheel events work on iframes.
        A capturing system for routing events to the proper subwidget when the mouse has down
        is also stubbed out (but not yet used).
        
        Reviewed by andersca

        * WebCore.vcproj/WebCore.vcproj:
        * bridge/win/FrameViewWin.cpp: Added.
        (WebCore::FrameView::passMousePressEventToSubframe):
        (WebCore::FrameView::passMouseMoveEventToSubframe):
        (WebCore::FrameView::passMouseReleaseEventToSubframe):
        (WebCore::FrameView::passWheelEventToSubframe):
        * bridge/win/FrameWin.cpp:
        * bridge/win/FrameWin.h:
        * platform/win/PlatformScrollBar.h:
        * platform/win/PlatformScrollBarWin.cpp:
        (WebCore::PlatformScrollBar::handleMouseMoveEvent):
        (WebCore::PlatformScrollBar::handleMouseOutEvent):
        (WebCore::PlatformScrollBar::handleMouseReleaseEvent):
        * platform/win/ScrollViewWin.cpp:
        (WebCore::ScrollView::visibleContentRect):
        (WebCore::ScrollView::scrollBy):
        (WebCore::ScrollView::removeChild):
        * platform/win/TemporaryLinkStubs.cpp:
        (FrameWin::print):
        (FrameWin::lastEventIsMouseUp):
        * platform/win/WidgetWin.cpp:
        (WebCore::Widget::Widget):
        (WebCore::Widget::capturingMouse):
        (WebCore::Widget::setCapturingMouse):
        (WebCore::Widget::capturingTarget):
        (WebCore::Widget::capturingChild):
        (WebCore::Widget::setCapturingChild):

2006-09-29  Steve Falkenburg  <sfalken@apple.com>

        Fix the build.

        * platform/win/PlatformScrollBarWin.cpp:

2006-09-29  Adele Peterson  <adele@apple.com>

        Adding RenderListBox files.

        * WebCore.vcproj/WebCore.vcproj:

2006-09-29  Adele Peterson  <adele@apple.com>

        Reviewed by Adam.

        Updated constructor for PlatformScrollBar to include controlSize argument.

        * platform/win/PlatformScrollBar.h:
        * platform/win/PlatformScrollBarWin.cpp:
        (WebCore::PlatformScrollBar::PlatformScrollBar):

2006-09-29  Adam Roben  <aroben@apple.com>

        Reviewed by hyatt.

        Add error logging to plugin code.

        * WebCore.vcproj/WebCore.vcproj: Added PluginDebug.h
        * platform/win/NotImplemented.h: Add surrounding #ifndef/#endif
        * plugins/win/PluginDebug.h: Added.
        * plugins/win/PluginPackageWin.cpp: Add error logging
        (WebCore::PluginPackageWin::load):
        * plugins/win/PluginStreamWin.cpp: Ditto.
        (WebCore::PluginStreamWin::startStream):
        (WebCore::PluginStreamWin::destroyStream):
        (WebCore::PluginStreamWin::deliverData):
        (WebCore::PluginStreamWin::receivedAllData):
        * plugins/win/PluginViewWin.cpp: Ditto.
        (WebCore::PluginViewWin::start):
        (WebCore::PluginViewWin::stop):
        (WebCore::PluginViewWin::newStream):
        (WebCore::PluginViewWin::write):
        (WebCore::PluginViewWin::destroyStream):

2006-09-29  Dave Hyatt  <hyatt@apple.com>

        Fork MouseEventWin.cpp into (the better-named) PlatformMouseEventWin.cpp.
        
        * WebCore.vcproj/WebCore.vcproj:
        * platform/win/PlatformMouseEventWin.cpp: Added.

2006-09-28  Dave Hyatt  <hyatt@apple.com>

        Make scrollbars scroll correctly when setValue is called.  Needed to do float math instead of integer
        math (and also fix some buggy math when computing the thumb position).
 
        * platform/win/PlatformScrollBarWin.cpp:
        (WebCore::PlatformScrollBar::thumbPosition):

2006-09-28  Dave Hyatt  <hyatt@apple.com>

        Make scrollbars on Win32 respond to hover events.  The thumb and arrow buttons will now properly hover when
        the mouse enters and exits them.
        
        * platform/win/PlatformScrollBar.h:
        * platform/win/PlatformScrollBarWin.cpp:
        (WebCore::PlatformScrollBar::invalidatePart):
        (WebCore::PlatformScrollBar::paintButton):
        (WebCore::PlatformScrollBar::paintTrack):
        (WebCore::PlatformScrollBar::paintThumb):
        (WebCore::PlatformScrollBar::paintGripper):
        (WebCore::PlatformScrollBar::hitTest):
        (WebCore::PlatformScrollBar::mouseMoved):
        (WebCore::PlatformScrollBar::mouseExited):

2006-09-28  Steve Falkenburg  <sfalken@apple.com>

        Reviewed by Maciej.

        Use $(ConfigSuffix) set via vsprops files to add _debug
        to end of debug filenames.

        Update B&I build script.

        * WebCore.vcproj/WebCore.make:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.vcproj/debug.vsprops: Added.
        * WebCore.vcproj/release.vsprops: Added.

2006-09-28  Adam Roben  <aroben@apple.com>

        Reviewed by Hyatt.

        Avoid creating LOGFONTs for bitmap fonts under CG, since we don't
        support them anyway.

        * platform/win/FontCacheWin.cpp:
        (WebCore::FontCache::createFontPlatformData): Set lfOutPrecision to
        OUT_TT_ONLY_PRECIS to avoid bitmap fonts.
        * platform/win/FontPlatformDataWin.cpp:
        (WebCore::FontPlatformData::FontPlatformData): Change the LOG_ERROR
        back to an ASSERT since we should never reach this condition now.

2006-09-28  Dave Hyatt  <hyatt@apple.com>

        This patch eliminates viewportToContents/contentsToViewport in favor of convertTo/FromContainingWindow.
        ScrollView now subclasses these methods to factor in its scrollOffset and to deal with the document
        view.
       
        Reviewed by mjs (the convertTo/From changes), (I added the elimination of viewportToContents to
        the patch after review, once I realized that these new functions essentially do the same thing.)

        * platform/win/ScrollViewWin.cpp:
        (WebCore::ScrollView::updateContents):
        (WebCore::ScrollView::convertToContainingWindow):
        (WebCore::ScrollView::convertFromContainingWindow):
        (WebCore::ScrollView::scrollBy):
        * platform/win/WidgetWin.cpp:
        (WebCore::Widget::convertToContainingWindow):
        (WebCore::Widget::convertFromContainingWindow):

2006-09-28  Adam Roben  <aroben@apple.com>

        Reviewed by Anders.

        Fail without crashing and log an error when CG encounters a bitmap
        font.

        * platform/win/FontPlatformDataWin.cpp:
        (WebCore::FontPlatformData::FontPlatformData): Trade LOG_ERROR for
        ASSERT_WITH_MESSAGE

2006-09-27  Alice Liu  <alice.liu@apple.com>

        Reviewed by Steve & Adam.

        * WebCore.vcproj/WebCore.vcproj:
        Added files to the project file
        * platform/win/TemporaryLinkStubs.cpp:
        Removed stub for findWordBoundary
        * platform/win/TextBoundariesWin.cpp: Added.
        Implemented cross-platform findWordBoundary.  We're still keeping the mac one intact for now. 
        (WebCore::findWordBoundary):

2006-09-28  Adam Roben  <aroben@apple.com>

        Reviewed by Adele.

        Remove never-to-be-used PopUpButton

        * WebCore.vcproj/WebCore.vcproj: Remove PopUpButton.h
        * platform/win/TemporaryLinkStubs.cpp: Remove PopUpButton:: methods

2006-09-28  Adam Roben  <aroben@apple.com>

        Reviewed by Alice.

        Replace notImplemented() with LOG_NOIMPL() and STOP_NOIMPL() macros
        which generate debug output. STOP_NOIMPL() also generates a debug
        break. Replace calls to notImplemented() with
        LOG_NOIMPL()/STOP_NOIMPL() as appropriate. This should stop some unnecessary
        crashes where notImplemented() was called from a method that can fail
        safely.

        * WebCore.vcproj/WebCore.vcproj: Added NotImplemented.h
        * platform/win/FontWin.cpp: Use LOG_NOIMPL() instead of notImplemented().
        (WebCore::Font::selectionRectForComplexText):
        (WebCore::Font::drawComplexText):
        (WebCore::Font::floatWidthForComplexText):
        (WebCore::Font::offsetForPositionForComplexText):
        * platform/win/NotImplemented.h: Added. Contains new LOG_NOIMPL() and
        STOP_NOIMPL() macros.
        * platform/win/TemporaryLinkStubs.cpp: Use LOG_NOIMPL() and
        STOP_NOIMPL() instead of notImplemented() or nothing.
        (PopUpButton::focusPolicy):
        (PopUpButton::populate):
        (Widget::enableFlushDrawing):
        (Widget::focusPolicy):
        (Widget::disableFlushDrawing):
        (Widget::lockDrawingFocus):
        (Widget::unlockDrawingFocus):
        (JavaAppletWidget::JavaAppletWidget):
        (TextField::selectAll):
        (TextField::addSearchResult):
        (TextField::selectionStart):
        (TextField::hasSelectedText):
        (TextField::selectedText):
        (TextField::setAutoSaveName):
        (TextField::checksDescendantsForFocus):
        (TextField::setSelection):
        (TextField::setMaxResults):
        (TextField::edited):
        (Slider::Slider):
        (Slider::sizeHint):
        (Slider::setValue):
        (Slider::setMaxValue):
        (Slider::setMinValue):
        (Slider::~Slider):
        (Slider::setFont):
        (Slider::value):
        (ListBox::sizeForNumberOfLines):
        (ListBox::isSelected):
        (ListBox::checksDescendantsForFocus):
        (Slider::focusPolicy):
        (ListBox::focusPolicy):
        (TextField::focusPolicy):
        (Cursor::Cursor):
        (PlatformMouseEvent::PlatformMouseEvent):
        (WebCore::searchableIndexIntroduction):
        (WebCore::findNextSentenceFromIndex):
        (WebCore::findSentenceBoundary):
        (WebCore::findNextWordFromIndex):
        (WebCore::ServeSynchronousRequest):
        (FrameWin::focusWindow):
        (FrameWin::unfocusWindow):
        (FrameWin::locationbarVisible):
        (FrameWin::registerCommandForRedo):
        (FrameWin::getObjectInstanceForWidget):
        (FrameWin::getEmbedInstanceForWidget):
        (FrameWin::getAppletInstanceForWidget):
        (FrameWin::canRedo):
        (FrameWin::canUndo):
        (FrameWin::canPaste):
        (FrameWin::canGoBackOrForward):
        (FrameWin::shouldInterruptJavaScript):
        (FrameWin::openURL):
        (FrameWin::print):
        (FrameWin::passMouseDownEventToWidget):
        (FrameWin::issueCutCommand):
        (FrameWin::issueCopyCommand):
        (FrameWin::issuePasteCommand):
        (FrameWin::issueUndoCommand):
        (FrameWin::issueRedoCommand):
        (FrameWin::issuePasteAndMatchStyleCommand):
        (FrameWin::issueTransposeCommand):
        (FrameWin::passWheelEventToChildWidget):
        (FrameWin::mimeTypeForFileName):
        (FrameWin::scheduleClose):
        (FrameWin::markMisspellings):
        (FrameWin::menubarVisible):
        (FrameWin::personalbarVisible):
        (FrameWin::statusbarVisible):
        (FrameWin::toolbarVisible):
        (FrameWin::originalRequestURL):
        (FrameWin::isLoadTypeReload):
        (BrowserExtensionWin::canRunModal):
        (BrowserExtensionWin::createNewWindow):
        (BrowserExtensionWin::canRunModalNow):
        (BrowserExtensionWin::runModal):
        (BrowserExtensionWin::goBackOrForward):
        (BrowserExtensionWin::historyURL):
        (GraphicsContext::addRoundedRectClip):
        (GraphicsContext::addInnerRoundedRectClip):
        (WebCore::screenDepthPerComponent):
        (WebCore::screenIsMonochrome):
        (WebCore::moveCursor):
        (WebCore::inputElementAltText):
        (WebCore::findWordBoundary):
        (WebCore::ResourceLoader::assembleResponseHeaders):
        (WebCore::ResourceLoader::retrieveCharset):
        (FrameView::updateBorder):
        (FrameWin::restoreDocumentState):
        (FrameWin::partClearedInBegin):
        (FrameWin::createEmptyDocument):
        (FrameWin::overrideMediaType):
        (FrameWin::markedTextRange):
        (FrameWin::addMessageToConsole):
        (FrameWin::shouldChangeSelection):
        (FrameWin::respondToChangedSelection):
        (FrameWin::saveDocumentState):
        (FrameWin::registerCommandForUndo):
        (FrameWin::clearUndoRedoOperations):
        (FrameWin::incomingReferrer):
        (FrameWin::markMisspellingsInAdjacentWords):
        (FrameWin::respondToChangedContents):
        (BrowserExtensionWin::BrowserExtensionWin):
        (BrowserExtensionWin::setTypedIconURL):
        (BrowserExtensionWin::setIconURL):
        (BrowserExtensionWin::getHistoryLength):
        (WebCore::CheckIfReloading):
        (WebCore::CheckCacheObjectStatus):
        (Widget::setIsSelected):
        (ScrollView::inWindow):
        (ScrollView::scrollPointRecursively):
        (GraphicsContext::setShadow):
        (GraphicsContext::clearShadow):
        (GraphicsContext::beginTransparencyLayer):
        (GraphicsContext::endTransparencyLayer):
        (GraphicsContext::clearRect):
        (GraphicsContext::strokeRect):
        (GraphicsContext::setLineWidth):
        (GraphicsContext::setLineCap):
        (GraphicsContext::setLineJoin):
        (GraphicsContext::setMiterLimit):
        (GraphicsContext::setAlpha):
        (GraphicsContext::clip):
        (GraphicsContext::rotate):
        (GraphicsContext::scale):
        (Path::Path):
        (Path::~Path):
        (Path::contains):
        (Path::translate):
        (Path::boundingRect):
        (Path::operator=):
        (Path::clear):
        (Path::moveTo):
        (Path::addLineTo):
        (Path::addQuadCurveTo):
        (Path::addBezierCurveTo):
        (Path::addArcTo):
        (Path::closeSubpath):
        (Path::addArc):
        (Path::addRect):
        (Path::addEllipse):
        (GraphicsContext::drawFocusRing):
        (GraphicsContext::drawLineForMisspelling):
        (GraphicsContext::setCompositeOperation):
        (TextField::TextField):
        (TextField::~TextField):
        (TextField::setFont):
        (TextField::setAlignment):
        (TextField::setWritingDirection):
        (TextField::maxLength):
        (TextField::setMaxLength):
        (TextField::text):
        (TextField::setText):
        (TextField::cursorPosition):
        (TextField::setCursorPosition):
        (TextField::setEdited):
        (TextField::setReadOnly):
        (TextField::setPlaceholderString):
        (TextField::setColors):
        (TextField::sizeForCharacterWidth):
        (TextField::baselinePosition):
        (TextField::setLiveSearch):
        (PopUpButton::PopUpButton):
        (PopUpButton::~PopUpButton):
        (PopUpButton::setFont):
        (PopUpButton::baselinePosition):
        (PopUpButton::setWritingDirection):
        (PopUpButton::clear):
        (PopUpButton::appendItem):
        (PopUpButton::setCurrentItem):
        (PopUpButton::sizeHint):
        (PopUpButton::frameGeometry):
        (PopUpButton::setFrameGeometry):
        (ListBox::ListBox):
        (ListBox::~ListBox):
        (ListBox::setSelectionMode):
        (ListBox::setFont):
        (ListBox::setWritingDirection):
        (ListBox::clear):
        (ListBox::doneAppendingItems):
        (ListBox::setEnabled):
        (ListBox::appendItem):
        (ListBox::setSelected):
        (WebCore::focusRingColor):
        (WebCore::setFocusRingColorChangeFunction):
        (Frame::setNeedsReapplyStyles):
        (Image::drawTiled):
        (RenderPopupMenuWin::addSeparator):
        (RenderPopupMenuWin::addGroupLabel):
        (IconLoader::receivedResponse):
        (IconLoader::notifyIconChanged):
        * plugins/win/PluginViewWin.cpp:
        (WebCore::PluginViewWin::setValue):

2006-09-28  Adam Roben  <aroben@apple.com>

        Rubberstamped by sfalken.

        Remove calls to DebugBreak() from plugin code.

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

2006-09-28  Dave Hyatt  <hyatt@apple.com>

        Eliminate the use of MapWindowPoints on Win32. Just use the outermost HWND as the point of reference for events.  
        
        Stub out the mouse methods from the open source checkin and add a new member variable to track the current hovered scrollbar part.

        * platform/win/PlatformScrollBar.h:
        (WebCore::):
        * platform/win/PlatformScrollBarWin.cpp:
        (WebCore::PlatformScrollBar::PlatformScrollBar):
        (WebCore::PlatformScrollBar::mouseMoved):
        (WebCore::PlatformScrollBar::mouseExited):
        * platform/win/ScrollViewWin.cpp:
        (WebCore::ScrollView::viewportToContents):
        (WebCore::ScrollView::contentsToViewport):
        * platform/win/WheelEventWin.cpp:
        (WebCore::positionForEvent):

2006-09-27  Steve Falkenburg  <sfalken@apple.com>

        Reviewed by Maciej.

        Prefer pulling project dependencies from WebKitOutputDir over
        WebKitSDKDir.  Don't copy build output back over to WebKitSDKDir.

        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.vcproj/build-generated-files.sh:
        * WebCore.vcproj/dstroot-to-sdk.cmd: Removed.

2006-09-27  Steve Falkenburg  <sfalken@apple.com>

        B&I build fixes

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

2006-09-27  Adam Roben  <aroben@apple.com>

        Reviewed by sfalken.

        Don't die when plugins try to open a new window.

        * plugins/win/PluginViewWin.cpp:
        (WebCore::PluginViewWin::performRequest): Remove call to DebugBreak()

2006-09-27  Steve Falkenburg  <sfalken@apple.com>

        B&I build script tweaks.

        * WebCore.vcproj/WebCore.make:

2006-09-27  Steve Falkenburg  <sfalken@apple.com>

        Reviewed by Hyatt.

        Turn on CG

        * config.h:

2006-09-27  Adam Roben  <aroben@apple.com>

        Reviewed by Lou.

        Fix crash in plugins due to Flash on nytimes.com

        * plugins/win/PluginStreamWin.cpp:
        (WebCore::PluginStreamWin::PluginStreamWin): memset m_stream to 0

2006-09-27  Adam Roben  <aroben@apple.com>

        Reviewed by sfalken.

        Scroll plugins (at least in some cases).

        * platform/win/ScrollViewWin.cpp:
        (WebCore::ScrollView::scrollBy): Pass SW_SCROLLCHILDREN to ScrollWindowEx()

2006-09-27  Steve Falkenburg  <sfalken@apple.com>

        Reviewed by Adam.

        Remove unimplemented from a temporary link stub.

        * platform/win/TemporaryLinkStubs.cpp:
        (GraphicsContext::addInnerRoundedRectClip):

2006-09-27  Sean Gies  <seangies@apple.com>

        Reviewed by Brady Eidson.

        * WebCore.vcproj/WebCore.vcproj: Added platform/win/WebCoreSystemInterface.h/cpp
        * platform/win/WebCoreSystemInterface.cpp: Added.
        * platform/win/WebCoreSystemInterface.h: Added.

2006-09-26  Adam Roben  <aroben@apple.com>

        Reviewed by sfalken.

        Fixes <rdar://problem/4751600>
        Hang on Amazon.com involving Flash

        * plugins/win/PluginStreamWin.cpp: Rename m_streamStarted to
        m_isTerminated to match Mac code (m_isTerminated is the negation of
        m_streamStarted)
        (WebCore::PluginStreamWin::PluginStreamWin): Initialize m_isTerminated
        to false to match Mac code.
        (WebCore::PluginStreamWin::~PluginStreamWin): Rename and negate.
        (WebCore::PluginStreamWin::stop): Remove assignment of m_streamStarted
        to match Mac code.
        (WebCore::PluginStreamWin::startStream): Rename and negate. Remove
        now-unnecessary assignment of m_streamStarted to true because we set
        m_isTerminated to false in the constructor.
        (WebCore::PluginStreamWin::destroyStream): Rename and negate.
        * plugins/win/PluginStreamWin.h: Rename m_streamStarted to
        m_isTerminated.
        * plugins/win/PluginViewWin.cpp:
        (WebCore::PluginViewWin::performRequest): Send the correct response URL
        to the plugin.

2006-09-26  Steve Falkenburg  <sfalken@apple.com>

        More temporary link stubs moved.
        Build tweaks.

        * ChangeLog:
        * WebCore.vcproj/WebCore.make: Added.
        * WebCore.vcproj/WebCore.vcproj:
        * platform/win/TemporaryLinkStubs.cpp:
        (ListBox::isSelected):
        (ListBox::setWritingDirection):
        (ListBox::clear):
        (ListBox::doneAppendingItems):
        (ListBox::setEnabled):
        (ListBox::appendItem):
        (ListBox::setSelected):

2006-09-26  Sean Gies  <seangies@apple.com>

        Reviewed by Brady Eidson.

        * platform/win/GraphicsContextWin.cpp:
        (WebCore::CGContextWithHDC):  Make a static function.
        (WebCore::GraphicsContext::getWindowsContext): Assume flipped coordinates.

2006-09-26  Brady Eidson  <beidson@apple.com>

        Nuked another notImplemented() that is getting hit

        * platform/win/TemporaryLinkStubs.cpp:
        (GraphicsContext::addRoundedRectClip):

2006-09-26  Sean Gies  <seangies@apple.com>

        Reviewed by Adam Roben.

        * WebCore.vcproj/WebCore.vcproj: Use Debug DLL C runtime for debug config.

2006-09-26  Lou Amadio  <lamadio@apple.com>

        Reviewed by ggaren
        Uninitialized variable caused a memory corruption on cnn.com

        WARNING: NO TEST CASES ADDED OR CHANGED

        * plugins/win/PlugInInfoStoreWin.cpp:
        (WebCore::PlugInInfoStore::createPluginInfoForPluginAtIndex):

2006-09-26  Dave Hyatt  <hyatt@apple.com>

        Fix my buggy invalidateRect implementation for Win32 widgets.
        
        Clean up my rect computation code in scrollbar to use x() and y() instead of
        frameGeometry().x()/y().
        
        Add a new invalidateTrack() method that invalidates the track (and handles
        putting the rect into the right coordinate space for proper invalidation
        now that I fixed invalidateRect).

        * platform/win/PlatformScrollBar.h:
        * platform/win/PlatformScrollBarWin.cpp:
        (WebCore::PlatformScrollBar::updateThumbPosition):
        (WebCore::PlatformScrollBar::updateThumbProportion):
        (WebCore::PlatformScrollBar::invalidateTrack):
        (WebCore::PlatformScrollBar::backButtonRect):
        (WebCore::PlatformScrollBar::forwardButtonRect):
        (WebCore::PlatformScrollBar::trackRect):
        * platform/win/WidgetWin.cpp:
        (WebCore::Widget::invalidate):

2006-09-26  Dave Hyatt  <hyatt@apple.com>

        Teach all our Win32 theme code (RenderTheme and PlatformScrollBar) how to respond correctly to OS theme changes.
        
        Implement painting of scrollbars using theme APIs.  The arrow buttons, track, thumb and gripper all paint properly
        now.  Next up is hit testing and proper hover feedback.
        
        Reviewed by andersca
        
        * platform/win/PlatformScrollBar.h:
        * platform/win/PlatformScrollBarWin.cpp:
        (WebCore::PlatformScrollBar::PlatformScrollBar):
        (WebCore::PlatformScrollBar::paint):
        (WebCore::PlatformScrollBar::backButtonRect):
        (WebCore::PlatformScrollBar::forwardButtonRect):
        (WebCore::PlatformScrollBar::trackRect):
        (WebCore::PlatformScrollBar::gripperRect):
        (WebCore::PlatformScrollBar::splitTrack):
        (WebCore::PlatformScrollBar::thumbPosition):
        (WebCore::PlatformScrollBar::thumbLength):
        (WebCore::PlatformScrollBar::paintButton):
        (WebCore::PlatformScrollBar::paintTrack):
        (WebCore::PlatformScrollBar::paintThumb):
        (WebCore::PlatformScrollBar::paintGripper):
        (WebCore::PlatformScrollBar::themeChanged):
        * platform/win/ScrollViewWin.cpp:
        (WebCore::ScrollView::themeChanged):
        * platform/win/TemporaryLinkStubs.cpp:
        (Widget::enableFlushDrawing):
        * platform/win/WidgetWin.cpp:
        (WebCore::Widget::isEnabled):
        * rendering/RenderThemeWin.cpp:
        (WebCore::RenderThemeWin::RenderThemeWin):
        (WebCore::RenderThemeWin::openButtonTheme):
        (WebCore::RenderThemeWin::openTextFieldTheme):
        (WebCore::RenderThemeWin::openMenuListTheme):
        (WebCore::RenderThemeWin::close):
        (WebCore::RenderThemeWin::themeChanged):
        * rendering/RenderThemeWin.h:

2006-09-25  Adam Roben  <aroben@apple.com>

        Rubberstamped by sfalken.

        Set svn:eol-style to native and cleanup line endings on plugins files.

        * plugins/win/PluginStreamWin.cpp:
        (WebCore::PluginStreamWin::PluginStreamWin):
        (WebCore::PluginStreamWin::~PluginStreamWin):
        (WebCore::PluginStreamWin::start):
        (WebCore::PluginStreamWin::startStream):
        (WebCore::PluginStreamWin::destroyStream):
        (WebCore::PluginStreamWin::deliverData):
        (WebCore::PluginStreamWin::receivedResponse):
        (WebCore::PluginStreamWin::receivedData):
        (WebCore::PluginStreamWin::receivedAllData):

2006-09-25  Adam Roben  <aroben@apple.com>

        Reviewed by Brady.

        Fixes <rdar://problem/4749494>
        Crash/ASSERT in plugins at Fark.com

        * platform/win/ResourceLoaderWin.cpp: Store whether a particular job
        has received a response within the ResourceLoader object itself, since
        it's possible that we will enter the InternetReadFileExA while loop
        twice for the same job.
        (WebCore::ResourceLoaderWndProc): Ask the job whether it has received a
        response instead of assuming it hasn't.
        (WebCore::ResourceLoader::setHasReceivedResponse): Added.
        (WebCore::ResourceLoader::hasReceivedResponse): Added.

2006-09-25  Adam Roben  <aroben@apple.com>

        Rubberstamped by sfalken.

        Continuing the removal of unnecessary notImplemented() calls.

        * platform/win/TemporaryLinkStubs.cpp:
        (PlatformMouseEvent::PlatformMouseEvent):
        (FrameWin::passWheelEventToChildWidget):

2006-09-25  Adam Roben  <aroben@apple.com>

        Rubberstamped by sfalken.

        More notImplemented()-ectomy.

        * platform/win/TemporaryLinkStubs.cpp:
        (RenderPopupMenuWin::addSeparator):
        (RenderPopupMenuWin::addGroupLabel):

2006-09-25  Adam Roben  <aroben@apple.com>

        Rubberstamped by sfalken.

        Remove calls to notImplemented() from functions that can fail safely.

        * platform/win/TemporaryLinkStubs.cpp:
        (FrameWin::originalRequestURL):
        (FrameWin::isLoadTypeReload):
        (IconLoader::receivedResponse):
        (IconLoader::notifyIconChanged):

2006-09-25  Adam Roben  <aroben@apple.com>

        Rubberstamped by sfalken.

        Make notImplemented() crash even when not linked against the debug CRT.

        * platform/win/TemporaryLinkStubs.cpp:
        (notImplemented): Change _CrtDbgBreak() to ASSERT(0)

2006-09-24  Dave Hyatt  <hyatt@apple.com>

        Update the scrollbar API to match the changes in the public tree.
        
        Start implementing the Win32 scrollbar.  Add some scaffolding for grabbing uxtheme.dll info and also
        add some utility functions for breaking the scrollbar into individual components.
        
        * platform/win/PlatformScrollBar.h:
        * platform/win/PlatformScrollBarWin.cpp:
        (WebCore::PlatformScrollBar::PlatformScrollBar):
        (WebCore::PlatformScrollBar::updateThumbPosition):
        (WebCore::PlatformScrollBar::updateThumbProportion):
        (WebCore::PlatformScrollBar::paint):
        (WebCore::PlatformScrollBar::backButtonRect):
        (WebCore::PlatformScrollBar::forwardButtonRect):
        (WebCore::PlatformScrollBar::trackRect):
        (WebCore::PlatformScrollBar::splitTrack):

2006-09-22  Steve Falkenburg  <sfalken@apple.com>

        Fix release build some more.

        * WebCore.vcproj/WebCore.vcproj:

2006-09-22  Brady Eidson  <beidson@apple.com>

        Extremely urgent update to my last two patches (without it, many urls will fail to load)

        * platform/win/ResourceLoaderWin.cpp:
        (WebCore::ResourceLoader::onRequestComplete):

2006-09-22  Brady Eidson  <beidson@apple.com>

        Forgot some lines we needed to keep for the internal build in my last checkin

        * platform/win/ResourceLoaderWin.cpp:

2006-09-22  Brady Eidson  <beidson@apple.com>

        Reviewed by Steve

        Landed from OpenSource - that version now supports Redirect like we need, and is a little cleaner design

        * platform/win/ResourceLoaderWin.cpp:
        (WebCore::):
        (WebCore::ResourceLoaderWndProc):
        (WebCore::initializeOffScreenResourceLoaderWindow):
        (WebCore::ResourceLoaderInternal::~ResourceLoaderInternal):
        (WebCore::ResourceLoader::onHandleCreated):
        (WebCore::ResourceLoader::onRequestRedirected):
        (WebCore::ResourceLoader::onRequestComplete):
        (WebCore::transferJobStatusCallback):
        (WebCore::ResourceLoader::start):
        (WebCore::ResourceLoader::fileLoadTimer):
        (WebCore::ResourceLoader::cancel):

2006-09-22  Dave Hyatt <hyatt@apple.com>

        Implement support for CSS2 system fonts on Win32.  Implement support for our special control font so that controls now
        pick up the correct font from the system.  This fixes the crazy form control font sizes on e.g., www.google.com.

        * platform/win/TemporaryLinkStubs.cpp:
        * rendering/RenderThemeWin.cpp:
        (WebCore::fillFontDescription):
        (WebCore::RenderThemeWin::systemFont):

2006-09-22  Dave Hyatt <hyatt@apple.com>

        Scrollbar preparation work.
        
        (1) Add support for enabling/disabling widgets.
        (2) Add support for invalidation of part or all of a widget.
        (3) Clean up some of the Win32 scrollbar code.  All that's left is painting
        and event handling. (Oh, is that all...) :)

        Reviewed by anders

        * platform/win/PlatformScrollBarWin.cpp:
        (WebCore::PlatformScrollBar::setScrollBarValue):
        (WebCore::PlatformScrollBar::setKnobProportion):
        (WebCore::PlatformScrollBar::setEnabled):
        (WebCore::PlatformScrollBar::paint):
        * platform/win/TemporaryLinkStubs.cpp:
        * platform/win/WidgetWin.cpp:
        (WebCore::Widget::Widget):
        (WebCore::Widget::setEnabled):
        (WebCore::Widget::invalidate):
        (WebCore::Widget::invalidateRect):

2006-09-21  Brady Eidson <beidson@apple.com>

        Build was broken for at least some, and I think my checkin that messed with 
        #include orders was to blame (and it was messy, broken or not) - this cleans that up

        * platform/win/ResourceLoaderWin.cpp:

2006-09-21  Alice Liu  <alice.liu@apple.com>

        Reviewed by Hyatt.

        windows build fix

        * platform/win/GraphicsContextWin.cpp:
        wrapped a CG #include in #if PLATFORM(CG)

2006-09-21  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Maciej, Hyatt, Steve.
    
        frames!
        
        Prep work:
            - moved ScrollViewWin into OpenSourceWin
            - set eol-style:native on some files and corrected line endings
            - updated the WebCore project so that you don't need cygwin in your Windows path
              to build correctly.

        Real work:

            On Windows, Widgets are no longer interfaces to Windows UI tookit objects. They're 
            just positioned objects.
                
            Widgets position themselves relative to their parents. The top-level widget technically
            has a position relative to the WebView, but that's academic, since it's always (0, 0).
            All widgets draw inside a common containing window (the WebView window). ScrollView 
            handles transformation, clipping, and dirty rect management.
            
            I've filed a bunch of bugs on remaining frames work. Most notably, closing a page with
            a frame in it causes a crash because WebCore depends on WebKit to manage frame lifetime.
            I'm going to fix that by integrating frame ownership into the DOM.
            
2006-09-21  Steve Falkenburg  <sfalken@apple.com>

        Reviewed by Anders.
        
        <rdar://4516072>
        <rdar://4601320>
        
        Implemented JavaScript alert/confirm/prompt inside app.
        This is done via IWebUIDelegate.

        * bridge/win/FrameWin.cpp:
        (WebCore::FrameWin::userAgent):
        (WebCore::FrameWin::runJavaScriptAlert):
        (WebCore::FrameWin::runJavaScriptConfirm):
        (WebCore::FrameWin::runJavaScriptPrompt):
        * bridge/win/FrameWin.h:
        * platform/win/TemporaryLinkStubs.cpp:
        (FrameWin::registerCommandForRedo):

2006-09-21  Sean Gies  <seangies@apple.com>

        Reviewed by NOBODY.

        Unfork GraphicsContextCG.cpp.

        * WebCore.vcproj/WebCore.vcproj: Unfork GraphicsContextCG.cpp and add GraphicsContextWin.cpp
        * platform/win/GraphicsContextWin.cpp: Added.

2006-09-21  Luke Wallis  <wallis@apple.com>

        Rubber stamped by Steve.

        Added (commented out for now) defines for building on PLATFORM(CG).

        * config.h:

2006-09-21  Luke Wallis <wallis@apple.com>

        Reviewed by Adam Roben.

        Fix build. Added #if PLATFORM(CG) around variable defined only for CG.

        * platform/win/FontDataWin.cpp:
        (WebCore::FontData::platformInit):

2006-09-21  Sean Gies  <seangies@apple.com>

        Reviewed by Adam Roben.

        Draw form controls when rendering with CG.

        * platform/cg/GraphicsContextCG.cpp:
        (WebCore::CGContextWithHDC): New function to create CGContext given an HDC.
        (WebCore::GraphicsContext::GraphicsContext): New constructor that takes an HDC.
        (WebCore::GraphicsContext::getWindowsContext): Return underlying HDC to client.
        (WebCore::GraphicsContext::releaseWindowsContext): Restore underlying HDC after client mucked with it.
        * platform/cg/GraphicsContextPlatformPrivate.h: Add field to hold HDC.
        * rendering/RenderThemeWin.cpp: Implement prepareForDrawing and doneDrawing for CG.

2006-09-21  Anders Carlsson  <acarlsson@apple.com>

        Reviewed by Tim O.

        Support getting the plugin element as an NPObject.
        
        * plugins/win/PluginViewWin.cpp:
        (WebCore::PluginViewWin::getValue):
        (WebCore::PluginViewWin::PluginViewWin):
        * plugins/win/PluginViewWin.h:

2006-09-21  Sean Gies  <seangies@apple.com>

        Reviewed by Adam Roben.

        Forked GraphicsContextCG.cpp and GraphicsContextPlatformPrivate.h from open source #16504.

        * platform/cg/GraphicsContextCG.cpp: Added.
        * platform/cg/GraphicsContextPlatformPrivate.h: Added.

2006-09-21  Sean Gies  <seangies@apple.com>

        Reviewed by Adam Roben.

        Support synthetic bold and/or oblique with CG.

        * platform/win/FontCacheWin.cpp: Pass new arguments to updated FontPlatformData constructor.
        * platform/win/FontDataWin.cpp:
        (WebCore::FontData::platformInit): Choose synthetic bold offset.
        (WebCore::FontData::platformWidthForGlyph): Take synthetic bold offset into account.
        * platform/win/FontPlatformData.h: Add fields for synthetic styles.
        * platform/win/FontPlatformDataWin.cpp: Ask HFONT if it supports bold or italics.
        * platform/win/FontWin.cpp:
        (WebCore::Font::drawGlyphs): Restore code for implementing synthetic stlyes.

2006-09-21  Brady Eidson  <beidson@apple.com>

        Reviewed by Anders

        Fixed one definite bug and did alot of cleanup to make it resemble the unforked version of the file
        in preparation for merging it back out

        * platform/win/ResourceLoaderWin.cpp:
        (WebCore::ResourceLoaderWndProc):
        (WebCore::transferJobStatusCallback): Fixed a bug here!  :)
        (WebCore::ResourceLoader::start):
        (WebCore::ResourceLoader::fileLoadTimer):
        (WebCore::ResourceLoader::cancel):

2006-09-21  2006-09-21  Dave Hyatt <hyatt@apple.com>

        Implement mouse wheel scrolling on Win32.  Also forked ScrollViewWin.cpp and fixed some bugs in it.

        * WebCore.vcproj/WebCore.vcproj:
        * platform/win/ScrollViewWin.cpp: Added.
        (WebCore::ScrollView::ScrollViewPrivate::ScrollViewPrivate):
        (WebCore::ScrollView::ScrollView):
        (WebCore::ScrollView::~ScrollView):
        (WebCore::ScrollView::updateContents):
        (WebCore::ScrollView::visibleWidth):
        (WebCore::ScrollView::visibleHeight):
        (WebCore::ScrollView::visibleContentRect):
        (WebCore::ScrollView::setContentsPos):
        (WebCore::ScrollView::resizeContents):
        (WebCore::ScrollView::contentsX):
        (WebCore::ScrollView::contentsY):
        (WebCore::ScrollView::contentsWidth):
        (WebCore::ScrollView::contentsHeight):
        (WebCore::ScrollView::viewportToContents):
        (WebCore::ScrollView::contentsToViewport):
        (WebCore::ScrollView::scrollOffset):
        (WebCore::ScrollView::maximumScroll):
        (WebCore::ScrollView::scrollBy):
        (WebCore::ScrollView::hScrollBarMode):
        (WebCore::ScrollView::vScrollBarMode):
        (WebCore::ScrollView::suppressScrollBars):
        (WebCore::ScrollView::setHScrollBarMode):
        (WebCore::ScrollView::setVScrollBarMode):
        (WebCore::ScrollView::setScrollBarsMode):
        (WebCore::ScrollView::setStaticBackground):
        (WebCore::ScrollView::updateScrollInfo):
        (WebCore::ScrollView::updateScrollBars):
        (WebCore::ScrollView::wheelEvent):
        * platform/win/WheelEventWin.cpp: Added.
        (WebCore::positionForEvent):
        (WebCore::globalPositionForEvent):
        (WebCore::PlatformWheelEvent::PlatformWheelEvent):

2006-09-20  Sean Gies  <seangies@apple.com>

        Reviewed by Adam Roben.

        Added platform/cg/ColorCG.cpp

        * WebCore.vcproj/WebCore.vcproj: Add ColorCG.cpp
        * platform/cg/ColorCG.cpp: Added.

2006-09-20  Sean Gies  <seangies@apple.com>

        Reviewed by Adam Roben.

        Fixed ugly text spacing issues with CG for Windows.

        * platform/win/FontDataWin.cpp: Reimplement platformWidthForGlyph using CG APIs.

2006-09-19  Anders Carlsson  <acarlsson@apple.com>

        Reviewed by Dave Hyatt.
        
        <rdar://problem/4734743> Crash accessing YouTube.
        
        * config.h:
        Enable some more of the JSC bindings code on Windows.
        
2006-09-18  Brady Eidson  <beidson@apple.com>

        YABF, and merged a change from open source ResourceLoaderWin.cpp

        * bridge/win/FrameWin.h:
        * platform/win/ResourceLoaderWin.cpp:
        (WebCore::ResourceLoader::fileLoadTimer):
        * platform/win/TemporaryLinkStubs.cpp:
        (FrameWin::isLoadTypeReload):

2006-09-18  Sean Gies  <seangies@apple.com>

        Reviewed by Adam Roben.

        Support bold & italics.

        * platform/win/FontPlatformDataWin.cpp: Use GetOutlineTextMetrics instead of GetTextFace to
            query HFONT name.

2006-09-18  Sean Gies  <seangies@apple.com>

        Reviewed by Adam Roben.

        Changes to bring up CoreGraphics on Windows.

        * WebCore.vcproj/WebCore.vcproj: Search platform/cg for headers.  Compile platform/cg/*.cpp.
             Add AffineTransform.cpp to build.
        * platform/win/FontDataWin.cpp: Include CG before using it.
        * platform/win/FontPlatformDataWin.cpp: Fixed typo.
        * platform/win/ImageWin.cpp: Include CG and winsock2.  Implement CG version of Image::getHBITMAP.
             In Cairo version of Image::getHBITMAP, use correct bitmapInfo field and return true for success.
             Fixed image loading bug.

2006-09-18  Brady Eidson  <beidson@apple.com>

        Rubberstamp by Adam

        Build fix

        * bridge/win/FrameWin.h:
        * platform/win/TemporaryLinkStubs.cpp:
        (FrameWin::originalRequestURL):

2006-09-18  Sean Gies  <seangies@apple.com>

        Reviewed by Adam Roben.

        Forked FontCacheWin.cpp from OpenSource tree r16421.

        * WebCore.vcproj/WebCore.vcproj: Point to Internal file.
        * platform/win/FontCacheWin.cpp: Added.

2006-09-15  Anders Carlsson  <acarlsson@apple.com>

        Reviewed by Steve.

        * WebCore.vcproj/WebCore.vcproj:
        Add JavaScriptCore/ to include path.

2006-09-15  Adam Roben  <aroben@apple.com>

        Reviewed by sfalken.

        Implement historyContains() on Windows (rdar://4733770)

        * WebCore.vcproj/WebCore.vcproj: Add
        platform\win\WebCoreHistory.{cpp,h} and bridge\win\HistoryWin.cpp to
        project.
        * bridge/win/HistoryWin.cpp: Added.
        (WebCore::historyContains):
        * platform/win/TemporaryLinkStubs.cpp: Remove stub for
        WebCore::historyContains()
        * platform/win/WebCoreHistory.cpp: Added.
        (WebCore::WebCoreHistory::setHistoryProvider):
        (WebCore::WebCoreHistory::historyProvider):
        * platform/win/WebCoreHistory.h: Added.

2006-09-14  Steve Falkenburg  <sfalken@apple.com>

        Reviewed by Lou Amadio.

        iBench fix - fix WinInet form post code to not reference a stale pointer.
        (found by Application Verifier)

        * platform/win/ResourceLoaderWin.cpp:
        (WebCore::ResourceLoaderWndProc):

2006-09-14  Adam Roben  <aroben@apple.com>

        Reviewed by sfalken.

        A little #include cleanup

        * WebCore.vcproj/WebCore.vcproj: Add loader/icon to
        AdditionalIncludeDirectories
        * platform/win/TemporaryLinkStubs.cpp: Remove "loader/icon" from
        #include of IconLoader.h

2006-09-14  Brady Eidson  <beidson@apple.com>

        Build Fix

        * WebCore.vcproj/WebCore.vcproj:
        * platform/win/TemporaryLinkStubs.cpp:
        (IconLoader::receivedResponse):
        (IconLoader::notifyIconChanged):

2006-09-13  Steve Falkenburg  <sfalken@apple.com>

        Fixes for submission of WebCore.  Doesn't affect build.

        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.vcproj/merge-opensource.sh:

2006-09-12  Steve Falkenburg  <sfalken@apple.com>

        Rubber-stamped by Ada.

        Get Boomer ready for B&I submission.
       
        Projects can now all build independent of one another
        without groping for headers or source across trees.

        * WebCore.vcproj/WebCore.sln: Fix standalone sln for use by B&I.
        * WebCore.vcproj/WebCore.vcproj: Update to new obj layout.
        * WebCore.vcproj/build-generated-files.sh: Build derived sources into obj, update to new obj layout.
        * WebCore.vcproj/dstroot-to-sdk.cmd: Copy built bits back to WebKitSDKDir for dependent builds.

2006-09-13  Adam Roben  <aroben@apple.com>

        Build fix

        * WebCore.vcproj/WebCore.vcproj: Rename KHTML_XSLT to XSLT_SUPPORT,
        remove KHTML_NO_XBL
        * config.h: Ditto.

2006-09-13  Adam Roben  <aroben@apple.com>

        Reviewed by beidson.

        Initial implementation of Icon, FileChooser on Windows.

        * WebCore.vcproj/WebCore.vcproj: Added FileChooserWin.cpp, IconWin.cpp
        * platform/win/FileChooserWin.cpp: Added.
        (WebCore::FileChooser::FileChooser):
        (WebCore::FileChooser::openFileChooser):
        (WebCore::FileChooser::basenameForWidth):
        (WebCore::FileChooser::uploadControlDetaching):
        (WebCore::FileChooser::chooseFile):
        * platform/win/IconWin.cpp: Added.
        (WebCore::Icon::Icon):
        (WebCore::Icon::~Icon):
        (WebCore::Icon::newIconForFile):
        (WebCore::Icon::paint):
        * platform/win/TemporaryLinkStubs.cpp: Removed FileChooser, Icon stub
        functions

2006-09-13  Anders Carlsson  <acarlsson@apple.com>

        Reviewed by Tim O.

        Implement postURL and postURLNotify.

        * plugins/win/PluginStreamWin.cpp:
        (WebCore::PluginStreamWin::~PluginStreamWin):
        (WebCore::PluginStreamWin::start):
        (WebCore::PluginStreamWin::startStream):
        (WebCore::PluginStreamWin::cancelAndDestroyStream):
        * plugins/win/PluginViewWin.cpp:
        (WebCore::PluginViewWin::start):
        (WebCore::PluginViewWin::loadURL):
        (WebCore::PluginViewWin::getURLNotify):
        (WebCore::PluginViewWin::getURL):
        (WebCore::startsWithBlankLine):
        (WebCore::locationAfterFirstBlankLine):
        (WebCore::findEOL):
        (WebCore::capitalizeRFC822HeaderFieldName):
        (WebCore::parseRFC822HeaderFields):
        (WebCore::PluginViewWin::handlePost):
        (WebCore::PluginViewWin::postURLNotify):
        (WebCore::PluginViewWin::postURL):
        * plugins/win/PluginViewWin.h:

2006-09-13  Lou Amadio  <lamadio@apple.com>

        Reviewed by sfalken

        * WebCore.vcproj/WebCore.vcproj:

2006-09-13  Adam Roben  <aroben@apple.com>

        Build fix

        * WebCore.vcproj/build-generated-files.sh: Export SOURCE_ROOT which is
        now used by CodeGenerator.pm

2006-09-12  Anders Carlsson  <acarlsson@apple.com>

        Reviewed by Tim O.

        Add scripting support for plugins.
        
        * bridge/win/FrameWin.cpp:
        (WebCore::FrameWin::FrameWin):
        (WebCore::FrameWin::addPluginRootObject):
        (WebCore::FrameWin::cleanupPluginObjects):
        (WebCore::FrameWin::bindingRootObject):
        (WebCore::FrameWin::windowScriptNPObject):
        * bridge/win/FrameWin.h:
        * plugins/win/PluginPackageWin.cpp:
        (WebCore::PluginPackageWin::load):
        * plugins/win/PluginViewWin.cpp:
        (WebCore::PluginViewWin::getValue):
        * plugins/win/npapi.cpp:
        (NPN_RequestRead):
        (NPN_InvalidateRect):
        (NPN_InvalidateRegion):
        (NPN_ForceRedraw):

2006-09-12  Adam Roben  <aroben@apple.com>

        Reviewed many times by darin, hyatt.

        Add stubs for new engine-based file upload control implementation and
        Icon class.

        * WebCore.vcproj/WebCore.vcproj: Add new engine-based files, remove old
        widget-based files.
        * platform/win/TemporaryLinkStubs.cpp: Add stubs for FileChooser and
        Icon methods, and add two new LocalizedString methods.
        (WebCore::fileButtonChooseFileLabel):
        (WebCore::fileButtonNoFileSelectedLabel):
        (FileChooser::FileChooser):
        (FileChooser::~FileChooser):
        (FileChooser::openFileChooser):
        (FileChooser::basenameForWidth):
        (FileChooser::uploadControlDetaching):
        (Icon::~Icon):
        (Icon::paint):

2006-09-11  Anders Carlsson  <acarlsson@apple.com>

        Reviewed by Tim O.

        Add stream and URL handling to PluginViewWin. Include PluginStreamWin.cpp in the build.
        Also fix a number of bugs discovered when loading various plugins.
        
        * WebCore.vcproj/WebCore.vcproj:
        * plugins/win/PluginViewWin.cpp:
        (WebCore::PluginRequestWin::PluginRequestWin):
        (WebCore::PluginRequestWin::url):
        (WebCore::PluginRequestWin::target):
        (WebCore::PluginRequestWin::notifyData):
        (WebCore::PluginRequestWin::sendNotification):
        (WebCore::scriptStringIfJavaScriptURL):
        (WebCore::registerPluginView):
        (WebCore::PluginViewWndProc):
        (WebCore::PluginViewWin::updateSize):
        (WebCore::PluginViewWin::setFrameGeometry):
        (WebCore::PluginViewWin::start):
        (WebCore::PluginViewWin::stop):
        (WebCore::createUTF8String):
        (WebCore::PluginViewWin::performRequest):
        (WebCore::PluginViewWin::requestTimerFired):
        (WebCore::PluginViewWin::scheduleRequest):
        (WebCore::PluginViewWin::loadURL):
        (WebCore::makeURL):
        (WebCore::PluginViewWin::getURLNotify):
        (WebCore::PluginViewWin::getURL):
        (WebCore::PluginViewWin::newStream):
        (WebCore::PluginViewWin::write):
        (WebCore::PluginViewWin::destroyStream):
        (WebCore::PluginViewWin::userAgent):
        (WebCore::PluginViewWin::~PluginViewWin):
        (WebCore::PluginViewWin::PluginViewWin):
        * plugins/win/PluginViewWin.h:

2006-09-11  Anders Carlsson  <acarlsson@apple.com>

        * WebCore.vcproj/WebCore.vcproj:
        Fix build.
        
2006-09-11  Anders Carlsson  <acarlsson@apple.com>

        Reviewed by Tim O and Maciej.

        Add plugin stream object.
        
        * plugins/win/PluginStreamWin.cpp: Added.
        (WebCore::PluginStreamWin::PluginStreamWin):
        (WebCore::PluginStreamWin::~PluginStreamWin):
        (WebCore::PluginStreamWin::setRequestHeaders):
        (WebCore::PluginStreamWin::setPostData):
        (WebCore::PluginStreamWin::start):
        (WebCore::PluginStreamWin::stop):
        (WebCore::PluginStreamWin::startStream):
        (WebCore::PluginStreamWin::cancelAndDestroyStream):
        (WebCore::PluginStreamWin::destroyStream):
        (WebCore::PluginStreamWin::delayDeliveryTimerFired):
        (WebCore::PluginStreamWin::deliverData):
        (WebCore::PluginStreamWin::receivedResponse):
        (WebCore::PluginStreamWin::receivedData):
        (WebCore::PluginStreamWin::receivedAllData):
        * plugins/win/PluginStreamWin.h: Added.

2006-09-10  Brady Eidson  <beidson@apple.com>

        Reviewed by Steven Falkenburg

        Added IconDatabase related code and forked ImageWin for its HBITMAP blit

        * WebCore.vcproj/WebCore.vcproj: Added in all WebCore::IconDatabase stuffs
        * platform/win/ImageWin.cpp: Added. (forked from OpenSource)
        (WebCore::Image::initPlatformData):
        (WebCore::Image::invalidatePlatformData):
        (WebCore::Image::loadPlatformResource):
        (WebCore::Image::supportsType):
        (WebCore::Image::getHBITMAP): Added - blit the image to an HBITMAP 
        
2006-09-10  David Hyatt  <hyatt@apple.com>

        Remove the addIntrinsicMargins code from the theme.  I did this
        in the open source version but forgot to do it in the internal
        version.

        * rendering/RenderThemeWin.cpp:
        (WebCore::RenderThemeWin::adjustButtonStyle):
        (WebCore::RenderThemeWin::adjustTextFieldStyle):
        (WebCore::RenderThemeWin::adjustTextAreaStyle):
        (WebCore::RenderThemeWin::adjustMenuListStyle):

2006-09-10  Brady Eidson  <beidson@apple.com>

        Reviewed by YABF, and Adam's suggestive rubberstamp before he hopped offline

        Build fix + FIXME/Radar to reflect an OpenSource change to the Font.h header

        * platform/win/FontWin.cpp:
        (WebCore::Font::drawGlyphs): Added the parameter and a FIXME 

2006-09-10  Steve Falkenburg  <sfalken@apple.com>

        Rubber-stamp by aroben.
        
        * WebCore.vcproj/WebCore.vcproj:

2006-09-09  Steve Falkenburg  <sfalken@apple.com>

        Reviewed by aroben.

        Added missing CF files to fix CFNetwork build variant

        * WebCore.vcproj/WebCore.vcproj: Use include paths, libs, DLLs from %SystemDrive%\AppleInternal
        * WebCore.vcproj/build-generated-files.sh: Don't copy open source DLLs from WebKitLibraries

2006-09-09  Adam Roben  <aroben@apple.com>

        Reviewed by hyatt.

        Remove unnecessary calls to setAffectedBy{Active,Hover}Rules

        * rendering/RenderThemeWin.cpp:
        (WebCore::RenderThemeWin::adjustMenuListStyle): Remove unnecessary calls

2006-09-06  Brady Eidson  <beidson@apple.com>

        YABF (Yet another build fix)

        * platform/win/FontDataWin.cpp: Added missing header

2006-09-06  Brady Eidson  <beidson@apple.com>

        Reviewed by Steve's rubberstamp

        Three stubs were added this morning, however the methods were already implemented in
        Internal/OpenSourceWin/WebCoreWin/bridge/win/FrameWin.cpp

        * platform/win/TemporaryLinkStubs.cpp: Nuked some repeat symbols

2006-09-06  Adam Roben  <aroben@apple.com>

        Reviewed by Darin.

        Fixed various Windows build issues caused by previous checkins.

        * bridge/win/FrameWin.h: Added missing #include, updated Selection to SelectionController.
        * platform/win/FontWin.cpp: Reorganized #includes.
        (WebCore::Font::drawGlyphs): Used a const_cast hack to fix ultimately broken code.
        * platform/win/ResourceLoaderWin.cpp: Added missing #include of CString.h and removed double #include of config.h.
        (WebCore::ResourceLoaderWndProc): Removed use of String::ascii.
        (WebCore::ResourceLoader::start): Ditto.
        * platform/win/TemporaryLinkStubs.cpp: Added missing stubs.
        (FrameWin::markMisspellings):
        (FrameWin::shouldChangeSelection):
        (FrameWin::respondToChangedSelection):
        (FrameWin::respondToChangedContents):
        (FrameWin::handledOnloadEvents):
        (FrameWin::createPlugin):
        (FrameWin::objectContentType):
        * rendering/RenderPopupMenuWin.cpp: Added missing #include.

2006-09-05  Darin Adler  <darin@apple.com>

        - build fix part of http://bugzilla.opendarwin.org/show_bug.cgi?id=10728
          text encodings should work without a numeric ID

        * WebCore.vcproj/WebCore.vcproj: Update for new headers.

2006-09-01  Steve Falkenburg  <sfalken@apple.com>

        Reviewed by adachan.

        Process redirects received in networking layer through to application.
        With this change, the address bar url edit field shows the proper
        redirected URL.

        * platform/win/ResourceLoaderWin.cpp:
        (WebCore::ResourceLoaderWndProc):
        (WebCore::transferJobStatusCallback):
        (WebCore::ResourceLoader::start):

2006-09-01  Ada Chan  <adachan@apple.com>

        Reviewed by lamadio.

        Fixed build break.

        * bridge/win/FrameWin.h:
        * platform/win/TemporaryLinkStubs.cpp:
        (FrameWin::respondToChangedContents):

2006-08-31  Anders Carlsson  <acarlsson@apple.com>

        Reviewed by Steve.

        Add our own internal config.h so we can make changes to it.
        
        * WebCore.vcproj/WebCore.vcproj:
        Add config.h to the file list, move the KXMLCORE_PLATFORM_CF to the new config.h file 
                       
        * config.h: Added.
        
        * platform/win/ResourceLoaderWin.cpp:
        Include config.h        

2006-08-31  Dave Hyatt <hyatt@apple.com>

        Add a platform scrollbar class for Windows.  It doesn't really work yet.

        * WebCore.vcproj/WebCore.vcproj:
        * platform/win/TemporaryLinkStubs.cpp:
        * platform/win/PlatformScrollBarWin.cpp

2006-08-31  Anders Carlsson  <acarlsson@apple.com>

        Fix the build.

        * WebCore.vcproj/WebCore.vcproj:

2006-08-30  Steve Falkenburg  <sfalken@apple.com>

        Reviewed by Ada Chan.

        * bridge/win/FrameWin.cpp:
        (WebCore::FrameWin::submitForm): Pass form values to submit form delegate
        * bridge/win/FrameWin.h: Pass form values to submit form delegate

2006-08-29  David Hyatt  <hyatt@apple.com>

        Make project changes so that the forked Font files (and Cairo/JPG/PNG) are all used.

        * WebCore.vcproj/WebCore.vcproj:

2006-08-29  David Hyatt  <hyatt@apple.com>

        This patch lands all the font changes.  It does not patch the project file
        yet, since this was done on Mac.  Will switch to Win32 after landing this
        and then fix any glitches.

        * platform/cairo/cairo-all.c: Added.
        * platform/cairo/pixman-all.c: Added.
        * platform/image-decoders/jpeg/jpeg-part1.c: Added.
        * platform/image-decoders/jpeg/jpeg-part2.c: Added.
        * platform/image-decoders/jpeg/jpeg-part3.c: Added.
        * platform/image-decoders/png/png-part1.c: Added.
        * platform/image-decoders/png/png-part2.c: Added.
        * platform/win/FontDataWin.cpp:
        (WebCore::FontData::platformInit):
        (WebCore::FontData::platformDestroy):
        (WebCore::FontData::platformWidthForGlyph):
        * platform/win/FontPlatformData.h:
        (WebCore::FontPlatformData::FontPlatformData):
        (WebCore::FontPlatformData::cgFont):
        (WebCore::FontPlatformData::operator==):
        * platform/win/FontPlatformDataWin.cpp:
        (WebCore::m_size):
        * platform/win/FontWin.cpp:
        (WebCore::Font::drawGlyphs):

2006-08-29  David Hyatt  <hyatt@apple.com>

        Forking the font files in preparation for dropping in CG code.

        Reviewed by adam

        * WebCore.vcproj/WebCore.vcproj:
        * platform/win/FontDataWin.cpp: Added.
        (WebCore::FontData::platformInit):
        (WebCore::FontData::platformDestroy):
        (WebCore::FontData::smallCapsFontData):
        (WebCore::FontData::containsCharacters):
        (WebCore::FontData::determinePitch):
        (WebCore::FontData::platformWidthForGlyph):
        * platform/win/FontPlatformData.h: Added.
        (WebCore::FontPlatformData::FontPlatformData):
        (WebCore::FontPlatformData::hfont):
        (WebCore::FontPlatformData::fontFace):
        (WebCore::FontPlatformData::scaledFont):
        (WebCore::FontPlatformData::size):
        (WebCore::FontPlatformData::hash):
        (WebCore::FontPlatformData::operator==):
        * platform/win/FontPlatformDataWin.cpp: Added.
        (WebCore::m_size):
        (WebCore::FontPlatformData::~FontPlatformData):
        * platform/win/FontWin.cpp: Added.
        (WebCore::notImplemented):
        (WebCore::Font::drawGlyphs):
        (WebCore::Font::selectionRectForComplexText):
        (WebCore::Font::drawComplexText):
        (WebCore::Font::floatWidthForComplexText):
        (WebCore::Font::offsetForPositionForComplexText):

2006-08-28  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Maciej.

        Landed CFNetwork loader, off by default. To enable, define:
            KXMLCORE_PLATFORM_CF
            KXMLCORE_USE_CFNETWORK

        CFNetwork uses winsock2. If you do this, you need to make sure that winsock2.h
        is included before windows.h in any translation unit in which it's used.
        A lot of the jiggering in this patch is devoted to that.
        
        * WebCore.vcproj/WebCore.vcproj:
        * platform/win/ResourceLoaderWin.cpp: Removed reliance on PlatformData
        since it wasn't being used, and removing it made easy work of integrating
        CFNetwork in a Windows-independent way.
        (WebCore::ResourceLoaderWndProc):
        (WebCore::ResourceLoader::fileLoadTimer):
        (WebCore::ResourceLoader::cancel):
        * platform/win/TemporaryLinkStubs.cpp:
        (Path::contains):
        * platform/win/WidgetWin.cpp:
        * plugins/win/PluginDatabaseWin.cpp:
        * plugins/win/PluginPackageWin.h:
        * plugins/win/PluginViewWin.h:
        * plugins/win/npapi.cpp:
        * rendering/RenderPopupMenuWin.cpp:
        * rendering/RenderPopupMenuWin.h:
        * rendering/RenderThemeWin.cpp:

2006-08-28  Ada Chan  <adachan@apple.com>

        Reviewed by ggaren.

        Fixed build.

        * platform/win/TemporaryLinkStubs.cpp:
        (Path::contains):

2006-08-25  David Hyatt  <hyatt@apple.com>

        Land CG/Cairo refactoring (and add some winsock2.h).  (I do not really
        understand why the winsock2.h stuff would suddenly be needed.)

        * platform/win/ResourceLoaderWin.h:
        * platform/win/TemporaryLinkStubs.cpp:
        (GraphicsContext::setAlpha):
        (GraphicsContext::drawFocusRing):
        (GraphicsContext::drawLineForMisspelling):
        (GraphicsContext::setCompositeOperation):
        * plugins/win/PluginPackageWin.h:
        * plugins/win/PluginViewWin.h:
        * plugins/win/npapi.cpp:
        * rendering/RenderThemeWin.cpp:
        (WebCore::prepareForDrawing):
        (WebCore::doneDrawing):

2006-08-24  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Darin.

        Frame refactoring: changed FrameView clients so they no longer assume that
        FrameViews are Widgets that can tell you things about the platform, in 
        preparation for divorcing FrameViews from heavy-weight Widgets altogether.

        This patch makes Page, rather than Widget, responsible for holding the
        page's HWND. Refactoring aside, I think this makes more sense.

2006-08-24  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Hyatt.

        Branching PageWin.cpp from r15969.

        * WebCore.vcproj/WebCore.vcproj:
        * bridge/win/PageWin.cpp: Added.
        (WebCore::Page::Page):
        (WebCore::Page::windowRect):
        (WebCore::Page::setWindowRect):

2006-08-23  Adam Roben  <aroben@apple.com>

        Reviewed by Ada.

        Fixed placement of popups when document is scrolled.

        * rendering/RenderPopupMenuWin.cpp:
        (WebCore::RenderPopupMenuWin::setPositionAndSize):

2006-08-23  Steve Falkenburg  <sfalken@apple.com>

        Build fix (many of our include paths were wrong!)

        * WebCore.vcproj/WebCore.vcproj:

2006-08-23  Adam Roben  <aroben@apple.com>

        Reviewed by Darin, Lou, Adele.

        Initial implementation of <select> elements on Windows.

        * WebCore.vcproj/WebCore.vcproj:
            Added RenderPopupMenuWin.cpp
        * platform/win/TemporaryLinkStubs.cpp:
        (RenderPopupMenuWin::addGroupLabel):
        * rendering/RenderPopupMenuWin.cpp: Added.
        (WebCore::RenderPopupMenuWin::RenderPopupMenuWin):
        (WebCore::RenderPopupMenuWin::~RenderPopupMenuWin):
        (WebCore::RenderPopupMenuWin::clear):
        (WebCore::RenderPopupMenuWin::populate):
        (WebCore::RenderPopupMenuWin::showPopup):
        (WebCore::RenderPopupMenuWin::hidePopup):
        (WebCore::RenderPopupMenuWin::setPositionAndSize):
        (WebCore::RenderPopupMenuWin::addOption):
        (WebCore::RenderPopupMenuWin::down):
        (WebCore::RenderPopupMenuWin::up):
        (WebCore::registerPopup):
        (WebCore::PopupWndProc):
        * rendering/RenderPopupMenuWin.h:
            Added useful properties.
        (WebCore::RenderPopupMenuWin::popupHandle):
        (WebCore::RenderPopupMenuWin::containerHandle):
        (WebCore::RenderPopupMenuWin::wasClicked):
        (WebCore::RenderPopupMenuWin::setWasClicked):
        * rendering/RenderThemeWin.cpp:
        (WebCore::RenderThemeWin::RenderThemeWin):
        (WebCore::RenderThemeWin::openButtonTheme):
        (WebCore::RenderThemeWin::openTextFieldTheme):
        (WebCore::RenderThemeWin::openMenuListTheme):
        (WebCore::RenderThemeWin::close):
        (WebCore::RenderThemeWin::supportsFocus):
        (WebCore::RenderThemeWin::determineState):
        (WebCore::RenderThemeWin::getThemeData):
        (WebCore::RenderThemeWin::paintButton):
        (WebCore::RenderThemeWin::paintTextField):
            Refactored the above methods and added cases for
            MenulistAppearance where appropriate.
        (WebCore::RenderThemeWin::paintMenuList):
        (WebCore::RenderThemeWin::adjustMenuListStyle):
            Implemented the above methods.
        * rendering/RenderThemeWin.h:

2006-08-22  Geoffrey Garen  <ggaren@apple.com>

        My first Windows build fix.

        * WebCore.vcproj/WebCore.vcproj:
            - Link against version.lib, since the new plug-in stuff requires it
            - Sync the release and debug header search paths, so release
              finds the JS bindings.

2006-08-18  Anders Carlsson  <acarlsson@apple.com>

        * plugins/win/PluginViewWin.cpp:
        (WebCore::PluginViewWin::write):
        (WebCore::PluginViewWin::destroyStream):
        Another attempt at fixing the build. Make these two functions into instance methods of PluginViewWin.

2006-08-18  Anders Carlsson  <acarlsson@apple.com>

        * plugins/win/PluginViewWin.cpp:
        (WebCore::write):
        (WebCore::destroyStream):
        * plugins/win/PluginViewWin.h:
        Fix build by removing unneeded parameters.

2006-08-18  Anders Carlsson  <acarlsson@apple.com>

        Reviewed by Adele.

        Have the NPN functions call into the plugin view. Implement some of the plugin view methods.

        * plugins/win/PluginViewWin.cpp:
        (WebCore::PluginViewWin::start):
        (WebCore::PluginViewWin::setCurrentPluginView):
        (WebCore::PluginViewWin::currentPluginView):
        (WebCore::PluginViewWin::getURLNotify):
        (WebCore::PluginViewWin::getURL):
        (WebCore::PluginViewWin::postURLNotify):
        (WebCore::PluginViewWin::postURL):
        (WebCore::PluginViewWin::newStream):
        (WebCore::write):
        (WebCore::destroyStream):
        (WebCore::PluginViewWin::userAgent):
        (WebCore::PluginViewWin::status):
        (WebCore::PluginViewWin::getValue):
        (WebCore::PluginViewWin::setValue):
        (WebCore::PluginViewWin::~PluginViewWin):
        (WebCore::PluginViewWin::PluginViewWin):
        * plugins/win/PluginViewWin.h:
        * plugins/win/npapi.cpp:
        (pluginViewForInstance):
        (NPN_ReloadPlugins):
        (NPN_GetURLNotify):
        (NPN_GetURL):
        (NPN_PostURLNotify):
        (NPN_PostURL):
        (NPN_NewStream):
        (NPN_Write):
        (NPN_DestroyStream):
        (NPN_UserAgent):
        (NPN_Status):
        (NPN_GetValue):
        (NPN_SetValue):

2006-08-17  Anders Carlsson  <acarlsson@apple.com>

        Reviewed by Steve and Maciej.

        Add initial implementation of plugin view.

        * WebCore.vcproj/WebCore.vcproj:
        Add files.
        
        * bridge/win/FrameWin.cpp:
        (WebCore::FrameWin::objectContentType):
        (WebCore::FrameWin::createPlugin):
        Implement these functions.
        
        * platform/win/TemporaryLinkStubs.cpp:
        Remove implemented functions.
        
        * platform/win/WidgetWin.cpp: Add this file from the open source repo
        (WebCore::Widget::~Widget):
        Call DestroyWindow on the hWnd.
        
        * plugins/win/PluginDatabaseWin.cpp:
        (WebCore::PluginDatabaseWin::createPluginView):
        New function which creates a plugin view.
        
        * plugins/win/PluginDatabaseWin.h:
        
        * plugins/win/PluginPackageWin.cpp:
        (WebCore::PluginPackageWin::load):
        Assign the browser functions. They are just stubs for now.
               
        * plugins/win/PluginViewWin.cpp: Added.
        (WebCore::registerPluginView):
        (WebCore::PluginViewWndProc):
        (WebCore::PluginViewWin::invokeSetWindow):
        (WebCore::PluginViewWin::start):
        (WebCore::PluginViewWin::stop):
        (WebCore::createUTF8String):
        (WebCore::createUTF8StringArray):
        (WebCore::freeStringArray):
        (WebCore::PluginViewWin::~PluginViewWin):
        (WebCore::PluginViewWin::PluginViewWin):
        * plugins/win/PluginViewWin.h: Added.
        (WebCore::PluginViewWin::plugin):
        (WebCore::PluginViewWin::instance):
        * plugins/win/npapi.cpp: Added.
        (NPN_MemAlloc):
        (NPN_MemFree):
        (NPN_MemFlush):
        (NPN_ReloadPlugins):
        (NPN_RequestRead):
        (NPN_GetURLNotify):
        (NPN_GetURL):
        (NPN_PostURLNotify):
        (NPN_PostURL):
        (NPN_NewStream):
        (NPN_Write):
        (NPN_DestroyStream):
        (NPN_UserAgent):
        (NPN_Status):
        (NPN_InvalidateRect):
        (NPN_InvalidateRegion):
        (NPN_ForceRedraw):
        (NPN_GetValue):
        (NPN_SetValue):
        (NPN_GetJavaEnv):
        (NPN_GetJavaPeer):

2006-08-17  Anders Carlsson  <acarlsson@apple.com>

        Reviewed by Maciej.

        Add initial implementation of plugin database.
        
        * WebCore.vcproj/WebCore.vcproj:
        Add new files.
        
        * platform/win/TemporaryLinkStubs.cpp:
        Get rid of the PlugInInfoStore stubs.

        * plugins/win/PlugInInfoStoreWin.cpp: Added.
        (WebCore::PlugInInfoStore::createPluginInfoForPluginAtIndex):
        (WebCore::PlugInInfoStore::pluginCount):
        (WebCore::PlugInInfoStore::supportsMIMEType):
        (WebCore::refreshPlugins):
        * plugins/win/PluginDatabaseWin.cpp: Added.
        (WebCore::PluginDatabaseWin::installedPlugins):
        (WebCore::PluginDatabaseWin::refresh):
        (WebCore::PluginDatabaseWin::plugins):
        (WebCore::PluginDatabaseWin::getPluginsInPaths):
        (WebCore::PluginDatabaseWin::defaultPluginPaths):
        (WebCore::PluginDatabaseWin::isMIMETypeRegistered):
        (WebCore::PluginDatabaseWin::pluginForMIMEType):
        (WebCore::PluginDatabaseWin::pluginForExtension):
        * plugins/win/PluginDatabaseWin.h: Added.
        (WebCore::PluginDatabaseWin::setPluginPaths):
        * plugins/win/PluginPackageWin.cpp: Added.
        (WebCore::PluginPackageWin::~PluginPackageWin):
        (WebCore::getVersionInfo):
        (WebCore::splitString):
        (WebCore::PluginPackageWin::PluginPackageWin):
        (WebCore::PluginPackageWin::fetchInfo):
        (WebCore::PluginPackageWin::load):
        (WebCore::PluginPackageWin::unload):
        (WebCore::PluginPackageWin::unloadWithoutShutdown):
        (WebCore::PluginPackageWin::createPackage):
        (WebCore::PluginPackageWin::hash):
        (WebCore::PluginPackageWin::equal):
        * plugins/win/PluginPackageWin.h: Added.
        (WebCore::PluginPackageWin::name):
        (WebCore::PluginPackageWin::description):
        (WebCore::PluginPackageWin::fileName):
        (WebCore::PluginPackageWin::mimeToDescriptions):
        (WebCore::PluginPackageWin::mimeToExtensions):
        (WebCore::PluginPackageWin::pluginFuncs):
        (WebCore::PluginPackageWinHash::hash):
        (WebCore::PluginPackageWinHash::equal):
        (WTF::):
        * plugins/win/npfunctions.h: Added.

2006-08-17  Adam Roben  <aroben@apple.com>

        Removing this unintentionally added file.

        * rendering/RenderPopupMenuWin.cpp: Removed.

2006-08-17  Adam Roben  <aroben@apple.com>

        Reviewed by Steve.

        Branching files from OpenSource tree r15924 to prepare for <select>
        element implementation.

        * WebCore.vcproj/WebCore.vcproj:
        * rendering/RenderPopupMenuWin.h: Added.
        (WebCore::RenderPopupMenuWin::RenderPopupMenuWin):
        * rendering/RenderThemeWin.cpp: Added.
        (WebCore::theme):
        (WebCore::m_textFieldTheme):
        (WebCore::RenderThemeWin::~RenderThemeWin):
        (WebCore::RenderThemeWin::close):
        (WebCore::RenderThemeWin::platformActiveSelectionBackgroundColor):
        (WebCore::RenderThemeWin::platformInactiveSelectionBackgroundColor):
        (WebCore::RenderThemeWin::platformActiveSelectionForegroundColor):
        (WebCore::RenderThemeWin::platformInactiveSelectionForegroundColor):
        (WebCore::RenderThemeWin::addIntrinsicMargins):
        (WebCore::RenderThemeWin::supportsFocus):
        (WebCore::RenderThemeWin::determineState):
        (WebCore::RenderThemeWin::getThemeData):
        (WebCore::RenderThemeWin::adjustButtonStyle):
        (WebCore::prepareForDrawing):
        (WebCore::doneDrawing):
        (WebCore::RenderThemeWin::paintButton):
        (WebCore::RenderThemeWin::setCheckboxSize):
        (WebCore::RenderThemeWin::setRadioSize):
        (WebCore::RenderThemeWin::adjustTextFieldStyle):
        (WebCore::RenderThemeWin::paintTextField):
        (WebCore::RenderThemeWin::adjustTextAreaStyle):
        (WebCore::RenderThemeWin::paintTextArea):
        (WebCore::RenderThemeWin::createPopupMenu):
        * rendering/RenderThemeWin.h: Added.
        (WebCore::ThemeData::m_state):
        (WebCore::RenderThemeWin::supportsHover):
        (WebCore::RenderThemeWin::paintCheckbox):
        (WebCore::RenderThemeWin::paintRadio):

2006-08-15  Steve Falkenburg  <sfalken@apple.com>

        Pull TemporaryLinkStubs.cpp into internal tree to fix the build.

        * WebCore.vcproj/WebCore.vcproj:
        * platform/win/TemporaryLinkStubs.cpp: Added.
        (notImplemented):
        (FrameView::updateBorder):
        (FrameView::isFrameView):
        (PopUpButton::focusPolicy):
        (PopUpButton::populate):
        (Widget::enableFlushDrawing):
        (Widget::isEnabled):
        (Widget::focusPolicy):
        (Widget::disableFlushDrawing):
        (Widget::lockDrawingFocus):
        (Widget::unlockDrawingFocus):
        (JavaAppletWidget::JavaAppletWidget):
        (TextField::selectAll):
        (TextField::addSearchResult):
        (TextField::selectionStart):
        (TextField::hasSelectedText):
        (TextField::selectedText):
        (TextField::setAutoSaveName):
        (TextField::checksDescendantsForFocus):
        (TextField::setSelection):
        (TextField::setMaxResults):
        (TextField::edited):
        (Slider::Slider):
        (Slider::sizeHint):
        (Slider::setValue):
        (Slider::setMaxValue):
        (Slider::setMinValue):
        (Slider::~Slider):
        (Slider::setFont):
        (Slider::value):
        (ListBox::setSelected):
        (ListBox::sizeForNumberOfLines):
        (ListBox::isSelected):
        (ListBox::appendItem):
        (ListBox::doneAppendingItems):
        (ListBox::setWritingDirection):
        (ListBox::setEnabled):
        (ListBox::clear):
        (ListBox::checksDescendantsForFocus):
        (FileButton::FileButton):
        (FileButton::click):
        (FileButton::sizeForCharacterWidth):
        (FileButton::focusPolicy):
        (FileButton::frameGeometry):
        (FileButton::setFilename):
        (FileButton::baselinePosition):
        (FileButton::setFrameGeometry):
        (FileButton::setDisabled):
        (Slider::focusPolicy):
        (ListBox::focusPolicy):
        (TextField::focusPolicy):
        (Cursor::Cursor):
        (PlatformMouseEvent::PlatformMouseEvent):
        (WebCore::searchableIndexIntroduction):
        (WebCore::findNextSentenceFromIndex):
        (WebCore::findSentenceBoundary):
        (WebCore::findNextWordFromIndex):
        (WebCore::ServeSynchronousRequest):
        (FrameWin::focusWindow):
        (FrameWin::unfocusWindow):
        (FrameWin::locationbarVisible):
        (FrameWin::issueRedoCommand):
        (FrameWin::getObjectInstanceForWidget):
        (FrameWin::getEmbedInstanceForWidget):
        (FrameWin::canRedo):
        (FrameWin::canUndo):
        (FrameWin::registerCommandForRedo):
        (FrameWin::runJavaScriptPrompt):
        (FrameWin::shouldInterruptJavaScript):
        (FrameWin::openURL):
        (FrameWin::print):
        (FrameWin::getAppletInstanceForWidget):
        (FrameWin::passMouseDownEventToWidget):
        (FrameWin::issueCutCommand):
        (FrameWin::issueCopyCommand):
        (FrameWin::passWheelEventToChildWidget):
        (FrameWin::issueUndoCommand):
        (FrameWin::mimeTypeForFileName):
        (FrameWin::issuePasteCommand):
        (FrameWin::scheduleClose):
        (FrameWin::markMisspellings):
        (FrameWin::menubarVisible):
        (FrameWin::personalbarVisible):
        (FrameWin::statusbarVisible):
        (FrameWin::toolbarVisible):
        (FrameWin::issueTransposeCommand):
        (FrameWin::canPaste):
        (FrameWin::objectContentType):
        (FrameWin::canGoBackOrForward):
        (FrameWin::issuePasteAndMatchStyleCommand):
        (FrameWin::createPlugin):
        (BrowserExtensionWin::canRunModal):
        (BrowserExtensionWin::createNewWindow):
        (BrowserExtensionWin::canRunModalNow):
        (BrowserExtensionWin::runModal):
        (BrowserExtensionWin::goBackOrForward):
        (BrowserExtensionWin::historyURL):
        (GraphicsContext::addRoundedRectClip):
        (GraphicsContext::addInnerRoundedRectClip):
        (WebCore::screenDepthPerComponent):
        (WebCore::screenIsMonochrome):
        (WebCore::moveCursor):
        (WebCore::historyContains):
        (WebCore::submitButtonDefaultLabel):
        (WebCore::inputElementAltText):
        (WebCore::resetButtonDefaultLabel):
        (WebCore::defaultLanguage):
        (WebCore::findWordBoundary):
        (PlugInInfoStore::createPluginInfoForPluginAtIndex):
        (PlugInInfoStore::pluginCount):
        (WebCore::PlugInInfoStore::supportsMIMEType):
        (WebCore::refreshPlugins):
        (WebCore::ResourceLoader::assembleResponseHeaders):
        (WebCore::ResourceLoader::retrieveCharset):
        (FrameWin::restoreDocumentState):
        (FrameWin::partClearedInBegin):
        (FrameWin::createEmptyDocument):
        (FrameWin::overrideMediaType):
        (FrameWin::handledOnloadEvents):
        (FrameWin::markedTextRange):
        (FrameWin::passSubframeEventToSubframe):
        (FrameWin::lastEventIsMouseUp):
        (FrameWin::addMessageToConsole):
        (FrameWin::shouldChangeSelection):
        (FrameWin::respondToChangedSelection):
        (FrameWin::createFrame):
        (FrameWin::saveDocumentState):
        (FrameWin::registerCommandForUndo):
        (FrameWin::clearUndoRedoOperations):
        (FrameWin::incomingReferrer):
        (FrameWin::markMisspellingsInAdjacentWords):
        (FrameWin::respondToChangedContents):
        (BrowserExtensionWin::BrowserExtensionWin):
        (BrowserExtensionWin::setTypedIconURL):
        (BrowserExtensionWin::setIconURL):
        (BrowserExtensionWin::getHistoryLength):
        (WebCore::CheckIfReloading):
        (WebCore::CheckCacheObjectStatus):
        (Widget::setEnabled):
        (Widget::paint):
        (Widget::setIsSelected):
        (ScrollView::addChild):
        (ScrollView::removeChild):
        (ScrollView::scrollPointRecursively):
        (ScrollView::inWindow):
        (GraphicsContext::setShadow):
        (GraphicsContext::clearShadow):
        (GraphicsContext::beginTransparencyLayer):
        (GraphicsContext::endTransparencyLayer):
        (GraphicsContext::clearRect):
        (GraphicsContext::strokeRect):
        (GraphicsContext::setLineWidth):
        (GraphicsContext::setLineCap):
        (GraphicsContext::setLineJoin):
        (GraphicsContext::setMiterLimit):
        (GraphicsContext::setAlpha):
        (GraphicsContext::setCompositeOperation):
        (GraphicsContext::clip):
        (GraphicsContext::translate):
        (GraphicsContext::rotate):
        (GraphicsContext::scale):
        (Path::Path):
        (Path::~Path):
        (Path::contains):
        (Path::translate):
        (Path::boundingRect):
        (Path::operator=):
        (Path::clear):
        (Path::moveTo):
        (Path::addLineTo):
        (Path::addQuadCurveTo):
        (Path::addBezierCurveTo):
        (Path::addArcTo):
        (Path::closeSubpath):
        (Path::addArc):
        (Path::addRect):
        (Path::addEllipse):
        (TextField::TextField):
        (TextField::~TextField):
        (TextField::setFont):
        (TextField::setAlignment):
        (TextField::setWritingDirection):
        (TextField::maxLength):
        (TextField::setMaxLength):
        (TextField::text):
        (TextField::setText):
        (TextField::cursorPosition):
        (TextField::setCursorPosition):
        (TextField::setEdited):
        (TextField::setReadOnly):
        (TextField::setPlaceholderString):
        (TextField::setColors):
        (TextField::sizeForCharacterWidth):
        (TextField::baselinePosition):
        (TextField::setLiveSearch):
        (PopUpButton::PopUpButton):
        (PopUpButton::~PopUpButton):
        (PopUpButton::setFont):
        (PopUpButton::baselinePosition):
        (PopUpButton::setWritingDirection):
        (PopUpButton::clear):
        (PopUpButton::appendItem):
        (PopUpButton::setCurrentItem):
        (PopUpButton::sizeHint):
        (PopUpButton::frameGeometry):
        (PopUpButton::setFrameGeometry):
        (PlatformScrollBar::PlatformScrollBar):
        (PlatformScrollBar::~PlatformScrollBar):
        (PlatformScrollBar::width):
        (PlatformScrollBar::height):
        (PlatformScrollBar::setEnabled):
        (PlatformScrollBar::paint):
        (PlatformScrollBar::setScrollBarValue):
        (PlatformScrollBar::setKnobProportion):
        (PlatformScrollBar::setRect):
        (ScrollBar::ScrollBar):
        (ScrollBar::setSteps):
        (ScrollBar::scroll):
        (ScrollBar::setValue):
        (ScrollBar::setKnobProportion):
        (ListBox::ListBox):
        (ListBox::~ListBox):
        (ListBox::setSelectionMode):
        (ListBox::setFont):
        (WebCore::focusRingColor):
        (WebCore::setFocusRingColorChangeFunction):
        (Frame::setNeedsReapplyStyles):
        (Image::drawTiled):
        (RenderPopupMenuWin::~RenderPopupMenuWin):
        (RenderPopupMenuWin::clear):
        (RenderPopupMenuWin::populate):
        (RenderPopupMenuWin::showPopup):
        (RenderPopupMenuWin::addSeparator):
        (RenderPopupMenuWin::addGroupLabel):
        (RenderPopupMenuWin::addOption):
        (RenderThemeWin::paintMenuList):
        (RenderThemeWin::adjustMenuListStyle):
        (RenderThemeWin::systemFont):

2006-08-15  Steve Falkenburg  <sfalken@apple.com>

        Fix the build with TOT.

        * WebCore.vcproj/WebCore.vcproj:

2006-08-15  Steve Falkenburg  <sfalken@apple.com>

        Get this building.

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

2006-08-15  Steve Falkenburg  <sfalken@apple.com>

        Initial check-in.

        * ChangeLog: Added.
        * WebCore.vcproj/WebCore.sln: Added.
        * WebCore.vcproj/WebCore.vcproj: Added.
        * WebCore.vcproj/build-generated-files.sh: Added.
        * bridge/win/FrameWin.cpp: Added.
        (WebCore::FrameWin::FrameWin):
        (WebCore::FrameWin::~FrameWin):
        (WebCore::FrameWin::urlSelected):
        (WebCore::FrameWin::submitForm):
        (WebCore::FrameWin::userAgent):
        (WebCore::FrameWin::runJavaScriptAlert):
        (WebCore::FrameWin::runJavaScriptConfirm):
        (WebCore::FrameWin::keyPress):
        (WebCore::FrameWin::setTitle):
        (WebCore::FrameWin::setStatusBarText):
        (WebCore::FrameWin::textFieldDidBeginEditing):
        (WebCore::FrameWin::textFieldDidEndEditing):
        (WebCore::FrameWin::textDidChangeInTextField):
        (WebCore::FrameWin::doTextFieldCommandFromEvent):
        (WebCore::FrameWin::textWillBeDeletedInTextField):
        (WebCore::FrameWin::textDidChangeInTextArea):
        * bridge/win/FrameWin.h: Added.
        (WebCore::Win):
        * platform/win/ResourceLoaderWin.cpp: Added.
        (WebCore::addToOutstandingJobs):
        (WebCore::removeFromOutstandingJobs):
        (WebCore::lookupResourceLoader):
        (WebCore::ResourceLoaderWndProc):
        (WebCore::initializeOffScreenResourceLoaderWindow):
        (WebCore::ResourceLoaderInternal::~ResourceLoaderInternal):
        (WebCore::ResourceLoader::~ResourceLoader):
        (WebCore::transferJobStatusCallback):
        (WebCore::ResourceLoader::start):
        (WebCore::ResourceLoader::fileLoadTimer):
        (WebCore::ResourceLoader::cancel):
        * platform/win/ResourceLoaderWin.h: Added.

=== End of merged changes from branches/WindowsMerge ===

2007-06-10  Holger Hans Peter Freyther  <zecke@selfish.org>

         Reviewed by Maciej.
 
         Disable whole-view editing for the Gdk port in order to improve the browsing experience.
 
         * platform/gdk/EditorClientGdk.cpp:
         (WebCore::EditorClientGdk::isEditable): Return false to disable whole-view editing
 
2007-06-08  Sam Weinig  <sam@webkit.org>

        Reviewed by Oliver.

        Patch for http://bugs.webkit.org/show_bug.cgi?id=14044
        Autogenerate the JS bindings for HTMLCollection

        - also moves JSHTMLAllCollection into it's own file.

        * DerivedSources.make:
        * WebCore.pro:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSHTMLAllCollection.h: Added.
        (WebCore::JSHTMLAllCollection::JSHTMLAllCollection):
        (WebCore::JSHTMLAllCollection::toBoolean):
        (WebCore::JSHTMLAllCollection::masqueradeAsUndefined):
        * bindings/js/JSHTMLCollectionCustom.cpp: Added.
        (WebCore::getNamedItems):
        (WebCore::JSHTMLCollection::callAsFunction):
        (WebCore::JSHTMLCollection::implementsCall):
        (WebCore::JSHTMLCollection::canGetItemsForName):
        (WebCore::JSHTMLCollection::nameGetter):
        (WebCore::JSHTMLCollection::item):
        (WebCore::JSHTMLCollection::namedItem):
        (WebCore::toJS):
        * bindings/js/JSHTMLDocumentCustom.cpp:
        (WebCore::JSHTMLDocument::nameGetter):
        (WebCore::JSHTMLDocument::all):
        * bindings/js/JSXMLHttpRequest.cpp:
        * bindings/js/kjs_html.cpp:
        (WebCore::ImageConstructorImp::ImageConstructorImp):
        (WebCore::ImageConstructorImp::construct):
        * bindings/js/kjs_html.h:
        (WebCore::ImageConstructorImp::implementsConstruct):
        * bindings/js/kjs_window.cpp:
        (KJS::Window::namedItemGetter):
        * bindings/objc/DOMUtility.mm:
        (KJS::createDOMWrapper):
        * bindings/scripts/CodeGeneratorJS.pm:
        * html/HTMLCollection.cpp:
        (WebCore::HTMLCollection::tags):
        * html/HTMLCollection.h:
        (WebCore::HTMLCollection::collectionType):
        * html/HTMLCollection.idl:
        * html/HTMLOptionsCollection.idl:

2007-06-08  Justin Garcia  <justin.garcia@apple.com>

        Reviewed by John.
        
        <rdar://problem/5232159> REGRESSION: Cannot select text in RSS view

        The selection is updated both on mouse movement and
        when the autoscroll timer fires.  The autoscroll
        code wasn't converting mouse coordinates to layer
        coordinates correctly, and was then using those
        coordinates to create a bad selection.

        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::autoscroll): Use convertToLayerCoordinates.

2007-06-08  Anders Carlsson  <andersca@apple.com>

        Reviewed by Geoff.

        Store the root object in a hash set, keyed by the plugin view. This is in preparation for 
        letting plugins invalidate the root object upon destruction

        * page/Frame.cpp:
        (WebCore::Frame::createRootObject):
        (WebCore::Frame::cleanupScriptObjects):
        * page/FramePrivate.h:

2007-06-08  Lars Knoll <lars@trolltech.com>

        Reviewed by Zack.

        Add qwebobjectpluginconnector to the build.

        * WebCore.pro:

2007-06-07  Justin Garcia  <justin.garcia@apple.com>

        Reviewed by Tristan.
        
        <rdar://problem/5250997> A crash occurs when selecting Undo Typing for a page that has been closed in tab

        * WebCore.exp: Added clearUndoRedoOperations.
        * page/Page.cpp:
        (WebCore::Page::clearUndoRedoOperations): Added.
        * page/Page.h:
        
2007-06-07  David Hyatt  <hyatt@apple.com>

        Fix crash.  Null check layer.  Bug 13984.

        Reviewed by andersca

        * WebCore.xcodeproj/project.pbxproj:
        * page/FrameView.cpp:
        (WebCore::FrameView::windowClipRectForLayer):

2007-06-07  Oliver Hunt  <oliver@apple.com>

        Reviewed by Justin.

        Remove incorrect assertions.
        
        These assertions were made on the assumption that 
        TSM would always call with a range that was contained 
        by an editable region.
        
        TSM may call -[WebHTMLView characterIndexForPoint:] on a mouse
        event that is otherwise unrelated to editing, which may
        be outside the current editing region, triggering these 
        assertions.

        * page/mac/WebCoreFrameBridge.mm:
        (-[WebCoreFrameBridge convertToNSRange:]):

2007-06-07  Justin Garcia  <justin.garcia@apple.com>

        Reviewed by John.
        
        <rdar://problem/5237074> REGRESSION: editing/unsupported-content/table-delete-003 is failing (13931)
        
        * editing/DeleteSelectionCommand.cpp:
        (WebCore::DeleteSelectionCommand::initializeStartEnd):
        We wouldn't expand the selection to include a special element 
        at the start of the selection unless the end of the selection 
        was at the end of a special element. Avoid a special 
        element at the start as long as it's fully selected. Ditto for 
        the end.
        * editing/htmlediting.cpp:
        (WebCore::positionBeforeContainingSpecialElement):
        (WebCore::positionAfterContainingSpecialElement):

2007-06-07  Sam Weinig  <sam@webkit.org>

        Reviewed by Anders.

        Patch for  http://bugs.webkit.org/show_bug.cgi?id=14028
        Finish autogenerating the JS bindings for Node

        * DerivedSources.make:
        * WebCore.pro:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSHTMLElementWrapperFactory.cpp:
        (WebCore::createJSHTMLWrapper):
        * bindings/js/JSHTMLElementWrapperFactory.h:
        * bindings/js/JSHTMLOptionElementConstructor.cpp:
        * bindings/js/JSNamedNodeMapCustom.cpp:
        * bindings/js/JSNodeCustom.cpp:
        (WebCore::JSNode::insertBefore):
        (WebCore::JSNode::replaceChild):
        (WebCore::JSNode::removeChild):
        (WebCore::JSNode::appendChild):
        (WebCore::JSNode::mark):
        (WebCore::toJS):
        * bindings/js/JSSVGElementWrapperFactory.cpp:
        (WebCore::createJSSVGWrapper):
        * bindings/js/JSSVGElementWrapperFactory.h:
        * bindings/js/JSXSLTProcessor.cpp:
        (KJS::XSLTProcessorPrototypeFunction::callAsFunction):
        * bindings/js/kjs_binding.cpp:
        (KJS::ScriptInterpreter::getDOMNodeForDocument):
        (KJS::ScriptInterpreter::putDOMNodeForDocument):
        (KJS::ScriptInterpreter::markDOMNodesForDocument):
        (KJS::ScriptInterpreter::updateDOMNodeDocument):
        * bindings/js/kjs_binding.h:
        * bindings/js/kjs_dom.cpp:
        (WebCore::toAttr):
        * bindings/js/kjs_dom.h:
        * bindings/js/kjs_domnode.h: Removed.
        * bindings/objc/DOMUtility.mm:
        (KJS::createDOMWrapper):
        * bindings/scripts/CodeGeneratorJS.pm:
        * dom/Node.h:
        (WebCore::Node::parentElement):
        * dom/Node.idl:

2007-06-07  Sam Weinig  <sam@webkit.org>

        Another Gdk and Qt build fix.

        * WebCore.pro:

2007-06-07  Sam Weinig  <sam@webkit.org>

        Gdk and Qt build fix.

        * WebCore.pro:

2007-06-06  Sam Weinig  <sam@webkit.org>

        Reviewed by Hyatt.

        Patch for http://bugs.webkit.org/show_bug.cgi?id=13973
        Autogenerate most of the rest of kjs_dom.h/cpp

        - Autogenerate JSNodeList and JSNamedNodeMap.
        - Move JSEventTargetNode, JSNamedNodesCollection, and JSDOMExceptionConstructor 
          into their own files.
        - Rename KJS::DOMEventTargeNode to WebCore::JSEventTargetNode to adhere
          to convention and allow easier code generation.
        - Add JS constructors for JSNodeList and JSNamedNodeMap.
        - Moved more toJS methods into the correct (corresponding) header files.
        - Cleaned up code in order for changes to work.

        * DerivedSources.make:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSDOMExceptionConstructor.cpp: Added.
        (WebCore::):
        (WebCore::JSDOMExceptionConstructor::JSDOMExceptionConstructor):
        (WebCore::JSDOMExceptionConstructor::getOwnPropertySlot):
        (WebCore::JSDOMExceptionConstructor::getValueProperty):
        (WebCore::getDOMExceptionConstructor):
        * bindings/js/JSDOMExceptionConstructor.h: Added.
        (WebCore::JSDOMExceptionConstructor::classInfo):
        * bindings/js/JSDOMWindowCustom.cpp: Added.
        (WebCore::JSDOMWindow::customGetOwnPropertySlot):
        * bindings/js/JSDocumentCustom.cpp:
        (WebCore::JSDocument::mark):
        (WebCore::toJS):
        * bindings/js/JSEventTargetNode.cpp: Added.
        (WebCore::JSEventTargetNode::JSEventTargetNode):
        (WebCore::JSEventTargetNode::getOwnPropertySlot):
        (WebCore::JSEventTargetNode::getValueProperty):
        (WebCore::JSEventTargetNode::put):
        (WebCore::JSEventTargetNode::putValueProperty):
        (WebCore::JSEventTargetNode::setListener):
        (WebCore::JSEventTargetNode::getListener):
        (WebCore::JSEventTargetNode::pushEventHandlerScope):
        (WebCore::JSEventTargetNodePrototypeFunction::callAsFunction):
        (WebCore::toEventTargetNode):
        * bindings/js/JSEventTargetNode.h: Added.
        (WebCore::JSEventTargetNode::):
        * bindings/js/JSHTMLElementCustom.cpp:
        * bindings/js/JSHTMLFormElementCustom.cpp:
        (WebCore::JSHTMLFormElement::nameGetter):
        * bindings/js/JSHTMLOptionElementConstructor.cpp:
        * bindings/js/JSNamedNodeMapCustom.cpp: Added.
        (WebCore::JSNamedNodeMap::canGetItemsForName):
        (WebCore::JSNamedNodeMap::nameGetter):
        * bindings/js/JSNamedNodesCollection.cpp: Added.
        (WebCore::):
        (WebCore::JSNamedNodesCollection::JSNamedNodesCollection):
        (WebCore::JSNamedNodesCollection::lengthGetter):
        (WebCore::JSNamedNodesCollection::indexGetter):
        (WebCore::JSNamedNodesCollection::getOwnPropertySlot):
        * bindings/js/JSNamedNodesCollection.h: Added.
        (WebCore::JSNamedNodesCollection::classInfo):
        * bindings/js/JSNodeCustom.cpp: Added.
        (WebCore::toJS):
        * bindings/js/JSNodeListCustom.cpp: Added.
        (WebCore::JSNodeList::callAsFunction):
        (WebCore::JSNodeList::implementsCall):
        (WebCore::JSNodeList::canGetItemsForName):
        (WebCore::JSNodeList::nameGetter):
        * bindings/js/kjs_dom.cpp:
        * bindings/js/kjs_dom.h:
        * bindings/js/kjs_domnode.h:
        * bindings/js/kjs_events.cpp:
        (KJS::JSLazyEventListener::parseCode):
        * bindings/js/kjs_html.cpp:
        (KJS::JSHTMLCollection::getNamedItems):
        * bindings/js/kjs_html.h:
        * bindings/js/kjs_window.cpp:
        (WebCore::toJS):
        * bindings/js/kjs_window.h:
        * bindings/objc/DOMInternal.mm:
        (-[WebScriptObject _initializeScriptDOMNodeImp]):
        * bindings/objc/DOMUtility.mm:
        (KJS::createDOMWrapper):
        * bindings/scripts/CodeGeneratorJS.pm:
        * bridge/mac/WebCoreAXObject.mm:
        * dom/Attr.idl:
        * dom/CharacterData.idl:
        * dom/Document.idl:
        * dom/DocumentFragment.idl:
        * dom/DocumentType.idl:
        * dom/Element.idl:
        * dom/NamedNodeMap.idl:
        * dom/Node.idl:
        * dom/NodeList.idl:
        * page/DOMWindow.idl:

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

        Reviewed by Oliver.
        
        <rdar://problem/5245519> CrashTracer: [USER] 457 crashes in Mail at WebCore::CSSComputedStyleDeclaration::copyInheritableProperties()
        
        If the user pastes something into a region that ends up being
        invisible, or if the pasted content contains style spans 
        that are render-less, we'll crash when we try to remove
        redundant styles from style spans.

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::CSSComputedStyleDeclaration::copyInheritableProperties):
        Add null checks.

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

        Reviewed by Harrison.

        <rdar://problem/4889598> Problems with moveDown: and moveUp: in Notes with ToDos
        
        The caret would disappear when moving from content above or below
        a ToDo if that ToDo doesn't have any content in it with the same
        x position as the caret. That's because closestLeafChildForXPos
        would return non-editable leaves, and which turn into non-editable
        VisiblePositions, which are invisible.

        * editing/visible_units.cpp:
        (WebCore::previousLinePosition): Ask closestLeafForXPos to only
        return editable leaves.
        (WebCore::nextLinePosition): Ditto.
        * rendering/RootInlineBox.cpp:
        (WebCore::isEditableLeaf): Added.
        (WebCore::RootInlineBox::closestLeafChildForXPos): If requested,
        return the closest editable leaf. Removed an early return if the
        position is before the first leaf, it's not really much of an
        optimization.
        * rendering/RootInlineBox.h:

2007-06-06  Sam Weinig  <sam@webkit.org>

        Reviewed by Anders.

        Fix release build.

        * bindings/objc/DOM.mm:
        (-[DOMDocument createNodeIterator:whatToShow:filter:expandEntityReferences:]): Add missing null initialization.
        (-[DOMDocument createTreeWalker:whatToShow:filter:expandEntityReferences:]): Add missing null initialization.

2007-06-06  Sam Weinig  <sam@webkit.org>

        Reviewed by Hyatt.

        Patch for http://bugs.webkit.org/show_bug.cgi?id=13947
        Finish autogenerating the JS DOM traversal code

        - Completely generate JSNodeFilter.
        - Move JSNodeFilterCondition into its own file

        * DerivedSources.make:
        * WebCore.pro:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSNodeFilterCondition.cpp: Copied from WebCore/bindings/js/kjs_traversal.cpp.
        (WebCore::JSNodeFilterCondition::JSNodeFilterCondition):
        (WebCore::JSNodeFilterCondition::mark):
        (WebCore::JSNodeFilterCondition::acceptNode):
        * bindings/js/JSNodeFilterCondition.h: Copied from WebCore/bindings/js/kjs_traversal.h.
        * bindings/js/JSNodeFilterCustom.cpp: Added.
        (WebCore::JSNodeFilter::mark):
        (WebCore::toNodeFilter):
        * bindings/js/kjs_dom.cpp:
        * bindings/js/kjs_traversal.cpp: Removed.
        * bindings/js/kjs_traversal.h: Removed.
        * bindings/js/kjs_window.cpp:
        * bindings/objc/DOM.mm:
        (-[DOMDocument createNodeIterator:whatToShow:filter:expandEntityReferences:]):
        (-[DOMDocument createTreeWalker:whatToShow:filter:expandEntityReferences:]):
        * bindings/scripts/CodeGeneratorJS.pm:
        * dom/Document.cpp:
        (WebCore::Document::createNodeIterator):
        (WebCore::Document::createTreeWalker):
        * dom/Document.h:
        * dom/NodeFilter.idl:

2007-06-06  Alp Toker  <alp.toker@collabora.co.uk>

        Reviewed by Eric Seidel.

        http://bugs.webkit.org/show_bug.cgi?id=14017
        Cairo: Unwanted gradient effect for small stretched images

        * platform/graphics/cairo/ImageCairo.cpp: Use CAIRO_FILTER_NEAREST to
        work around the issue.
        (WebCore::BitmapImage::draw):
        (WebCore::Image::drawPattern):

2007-06-06  Lars Knoll <lars@trolltech.com>

        Reviewed by Zack

        Add an API to create and load plugins.
        Don't include moc files by hand anymore, rather let
        qmake handle them.

        * WebCore.pro:
        * platform/qt/MimeTypeRegistryQt.cpp:
        (WebCore::):
        (WebCore::MimeTypeRegistry::getMIMETypeForExtension):
        * platform/qt/QWebPopup.cpp:
        * platform/qt/SharedTimerQt.cpp:

2007-06-06  Mark Rowe  <mrowe@apple.com>

        Qt build fix.

        * rendering/RenderTextControl.cpp: Fix case of #include filename.

2007-06-06  Lars Knoll  <lars@trolltech.com>

        Reviewed by Maciej.

        Define WTF_USE_NPOBJECT for Qt. Fix includes
        in HTMLPluginElement and add proper forwarding headers
        from JavaScriptCore.

        * ForwardingHeaders/bindings/npruntime.h: Added.
        * ForwardingHeaders/bindings/runtime.h: Added.
        * config.h:
        * html/HTMLPlugInElement.cpp:
        * html/HTMLPlugInElement.h:

2007-06-06  David Hyatt  <hyatt@apple.com>

        Bulletproof windowClipRect, since it can be called at crazy times.
        Part of fix for 13972.

        Reviewed by olliej

        * bindings/objc/DOM.mm:
        (-[DOMElement _windowClipRect]):

2007-06-05  MorganL  <morganl.webkit@yahoo.com>

        Reviewed by Dave Hyatt.

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

        * rendering/RenderTextControl.cpp:
        (WebCore::RenderTextControl::calcHeight):
        (WebCore::RenderTextControl::calcPrefWidths):

2007-06-05  Kevin McCullough  <kmccullough@apple.com>

        - Respelling Oliver's name right.

2007-06-05  Kevin McCullough  <kmccullough@apple.com>

        Reviewed by Mark and Oliver.

        - http://bugs.webkit.org/show_bug.cgi?id=13352  REGRESSION: Gmail hangs on send message.
        - Now we don't hang, but we do so by avoiding certain legitimate characters, the evangelism bug for this is: <rdar://problem/5252577> gmail does not accept legal characters in the form boundary

        * html/HTMLFormElement.cpp:
        (WebCore::getUniqueBoundaryString):

2007-06-05  Anders Carlsson  <andersca@apple.com>

        Build fix.
        
        * xml/xmlhttprequest.cpp:
        (WebCore::isValidToken):

2007-06-05  Anders Carlsson  <andersca@apple.com>

        Reviewed by Geoff.

        <rdar://problem/5245555> REGRESSION: HTTP header injection in XMLHttpRequest.setRequestHeader
        <rdar://problem/5246208> HTTP injection in XMLHttpRequest.open method parameter
        <rdar://problem/5246242> HTTP header injection in HXMLHttpRequest.setRequestHeader header parameter
        
        Check method names, header names and header values and throw exceptions if any of them are
        invalid. This is what the new XMLHttpRequest spec states that we should do.
        
        * xml/xmlhttprequest.cpp:
        (WebCore::isValidToken):
        (WebCore::isValidHeaderValue):
        (WebCore::XMLHttpRequest::open):
        (WebCore::XMLHttpRequest::setRequestHeader):

2007-06-05  Sam Weinig  <sam@webkit.org>

        Reviewed by Geoff.

        Optimize JSCSSStyleDeclaration after performance regression in r21854.

        - Check static table before name getter in JSCSSStyleDeclaration::getOwnPropertySlot()
        - Get rid of a string allocation by keeping string as KJS::Identifier for canGetItemsForName()
          functions.

        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSCSSStyleDeclarationCustom.cpp:
        (WebCore::JSCSSStyleDeclaration::canGetItemsForName):
        * bindings/js/JSHTMLAppletElementCustom.cpp:
        (WebCore::JSHTMLAppletElement::canGetItemsForName):
        * bindings/js/JSHTMLDocumentCustom.cpp:
        (WebCore::JSHTMLDocument::canGetItemsForName):
        * bindings/js/JSHTMLEmbedElementCustom.cpp:
        (WebCore::JSHTMLEmbedElement::canGetItemsForName):
        * bindings/js/JSHTMLFormElementCustom.cpp:
        (WebCore::JSHTMLFormElement::canGetItemsForName):
        * bindings/js/JSHTMLFrameSetElementCustom.cpp:
        (WebCore::JSHTMLFrameSetElement::canGetItemsForName):
        * bindings/js/JSHTMLObjectElementCustom.cpp:
        (WebCore::JSHTMLObjectElement::canGetItemsForName):
        * bindings/scripts/CodeGeneratorJS.pm:
        * css/CSSStyleDeclaration.idl:

2007-06-04  Sam Weinig  <sam@webkit.org>

        Reviewed, tweaked and landed by Anders.

        <rdar://problem/5247178> REGRESSION: With CSS Edit 2.5, a crash occurs at WebCore::DeprecatedString::DeprecatedString when page fails to be extracted
        
        Null check the provisional document loader. If an application stops the load 
        inside of the didFailProvisionalLoad delegate method, the provisional document loader will be nulled out.

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

2007-06-04  Alp Toker  <alp.toker@collabora.co.uk>

        Reviewed by Anders.

        http://bugs.webkit.org/show_bug.cgi?id=13986
        Cairo graphics fixes and cleanups

        * platform/graphics/ImageBuffer.h:
        * platform/graphics/cairo/ImageBufferCairo.cpp:
        (WebCore::ImageBuffer::surface): Provide surface() accessor.
        * platform/graphics/cairo/AffineTransformCairo.cpp:
        (WebCore::AffineTransform::rotate): Convert from degrees to radians to
        fix rotation.
        * platform/graphics/cairo/GraphicsContextCairo.cpp:
        (WebCore::GraphicsContext::drawRect): Add save/restore.
        (WebCore::GraphicsContext::rotate): Rename parameter to "radians" to
        avoid further confusion.
        * platform/graphics/cairo/PathCairo.cpp:
        (WebCore::Path::boundingRect): The cairo_fill_extents() parameters do
        not describe a point/size but rather the two control points of the
        rectangular region.
        (WebCore::Path::contains): Remove needless casts.

2007-06-04  Sam Weinig  <sam@webkit.org>

        Reviewed by Adam Roben.

        Fix the buildbot.

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

2007-06-04  Justin Garcia  <justin.garcia@apple.com>

        Reviewed by Kimon Tsinteris.

        <rdar://problem/5241148> REGRESSION: ActivEdit can't perform operations on certain selections
        
        Return valid equivalents from these methods (no [img, 1] for 
        example). ActivEdit was using positions returned from these
        methods to create new DOM Ranges.
        
        * editing/SelectionController.cpp:
        (WebCore::SelectionController::baseNode):
        (WebCore::SelectionController::baseOffset):
        (WebCore::SelectionController::extentNode):
        (WebCore::SelectionController::extentOffset):
        (WebCore::SelectionController::anchorNode):
        (WebCore::SelectionController::anchorOffset):
        (WebCore::SelectionController::focusNode):
        (WebCore::SelectionController::focusOffset):
        * editing/SelectionController.h:

2007-06-04  Rob Buis  <buis@kde.org>

        Fix the svg experimental build.

        * ksvg2/svg/SVGFEFloodElement.cpp:

2007-06-04  Rob Buis  <buis@kde.org>

        Reviewed by Hyatt.

        http://bugs.webkit.org/show_bug.cgi?id=6170
        CSS1: Properties for :first-letter aren't recalculated on color change

        Mark styles with first-letter as unique.

        * css/cssstyleselector.cpp:
        (WebCore::CSSStyleSelector::styleForElement):

2007-06-01  Anders Carlsson  <acarlsson@apple.com>

        Reviewed by David Harrison.

        <rdar://problem/5236843> 
        CrashTracer: [USER] 3 crashes in Mail at WebCore::Loader::didReceiveResponse(WebCore::SubresourceLoader*, WebCore::ResourceResponse const&)

        This is by no means the best solution for handling user style sheets. I've filed <rdar://problem/5244734> 
        for tracking that.
        
        * loader/loader.cpp:
        (WebCore::Loader::didReceiveResponse):
        If a load starts while the frame is still in the provisional state 
        (this can be the case when loading the user style sheet), committing the load then causes all
        requests to be removed from the m_requestsLoading map. This means that req might be null here.
        In that case we just return early. 
        
2007-06-01  Mitz Pettel  <mitz@webkit.org>

        Reviewed by Adele.

        - fix http://bugs.webkit.org/show_bug.cgi?id=13958
          REGRESSION: Form select menu in iframe destroys form select menu on page

        * page/mac/EventHandlerMac.mm:
        (WebCore::EventHandler::sendFakeEventsAfterWidgetTracking): Instead of calling
        the event handler methods directly, post the fake event on the application event
        queue. This ensures that the fake event is handled only after handling of the
        initiating event has ended, and is seen by ancestor frames' event handlers.

2007-06-01  George Staikos  <staikos@kde.org>

        Reviewed by bdash.

        Redo the build fix again after it was backed out

        * WebCore.pro: add an include guard around CSSGrammar.h

2007-05-31  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Beth Dakin.

        Fixed <rdar://problem/5238177> Continuing after hitting breakpoint doesn't 
        execute the next step.
        
        No test because the only code affected is the debugger, and none of the
        relevant API is exported.
        
        Reverted an accidental change in 21324 that caused originRootObject for
        the window object always to be 0. We could probably just remove the debugger's
        dependency on originRootObject, but I wanted to be safe.

        * page/mac/FrameMac.mm:
        (WebCore::Frame::windowScriptObject):

2007-05-31  David Hyatt  <hyatt@apple.com>

        Fix for 11768, Flash plugin does not respect clips set via CSS.

        Reviewed by olliej

        * bindings/objc/DOM.mm:
        (-[DOMElement _windowClipRect]):
        * bindings/objc/DOMPrivate.h:
        * page/FrameView.cpp:
        (WebCore::FrameView::windowClipRect):
        (WebCore::FrameView::windowClipRectForLayer):
        * platform/ScrollView.h:
        (WebCore::ScrollView::contentsToWindow):
        (WebCore::ScrollView::windowToContents):
        * platform/mac/ScrollViewMac.mm:
        (WebCore::ScrollView::contentsToWindow):
        (WebCore::ScrollView::windowToContents):

2007-05-31  Sam Weinig  <sam@webkit.org>

        Reviewed by Adam.

        Fix build bot.

        * ksvg2/svg/SVGSVGElement.cpp:
        (WebCore::SVGSVGElement::setCurrentScale):

2007-05-31  Sam Weinig  <sam@webkit.org>

        Fix Qt and Gdk builds.

        * WebCore.pro: remove bindings/js/JSHTMLAnchorElementCustom.cpp

2007-05-31  Sam Weinig  <sam@webkit.org>

        Reviewed by Geoff.

        Patch for http://bugs.webkit.org/show_bug.cgi?id=10782
        Classes should not override JSObject::toString(ExecState *)

        Remove all overrides of JSObject::toString and JSObject::toPrimitive
        which is a bad practice.  Instead, if an object, like the 
        HTMLAnchorElement, needs to override to toString, it should add
        a function to the JS object which will be called when needed.  This
        also allows developers to override toString and valueOf from within JS.

        Test: fast/js/toString-and-valueOf-override.html

        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSHTMLAnchorElementCustom.cpp: Removed.
        * bindings/js/kjs_binding.cpp:
        * bindings/js/kjs_binding.h:
        * bindings/js/kjs_dom.cpp:
        * bindings/js/kjs_dom.h:
        * bindings/js/kjs_domnode.h:
        * bindings/js/kjs_window.cpp:
        (KJS::History::):
        (KJS::LocationFunc::callAsFunction):
        (KJS::SelectionFunc::callAsFunction):
        * bindings/js/kjs_window.h:
        * bindings/scripts/CodeGeneratorJS.pm:
        * html/HTMLAnchorElement.cpp:
        (WebCore::HTMLAnchorElement::toString):
        * html/HTMLAnchorElement.h:
        * html/HTMLAnchorElement.idl:

2007-05-31  Rob Buis  <buis@kde.org>

        Reviewed by Darin.

        http://bugs.webkit.org/show_bug.cgi?id=11272
        Implement currentScale(), setCurrentScale() and currentTranslate() in SVGSVGElement

        Allow zooming and panning, thereby implementing the above methods.

        * ksvg2/svg/SVGDocument.cpp:
        (WebCore::SVGDocument::zoomEnabled):
        (WebCore::SVGDocument::startPan):
        (WebCore::SVGDocument::updatePan):
        * ksvg2/svg/SVGDocument.h:
        * ksvg2/svg/SVGSVGElement.cpp:
        (WebCore::SVGSVGElement::currentScale):
        (WebCore::SVGSVGElement::setCurrentScale):
        (WebCore::SVGSVGElement::currentTranslate):
        (WebCore::SVGSVGElement::setCurrentTranslate):
        * ksvg2/svg/SVGSVGElement.h:
        * page/EventHandler.cpp:
        (WebCore::EventHandler::EventHandler):
        (WebCore::EventHandler::handleMousePressEvent):
        (WebCore::EventHandler::handleMouseMoveEvent):
        (WebCore::EventHandler::handleMouseReleaseEvent):
        * page/EventHandler.h:
        * page/Frame.cpp:
        (WebCore::Frame::setZoomFactor):
        * rendering/RenderSVGContainer.cpp:
        (WebCore::RenderSVGContainer::layout):
        (WebCore::RenderSVGContainer::paint):
        (WebCore::RenderSVGContainer::absoluteTransform):
        * rendering/RenderSVGContainer.h:

2007-05-31  Eric Seidel  <eric@webkit.org>

        Reviewed by Niko.

        Links are activated based on mouse down events instead of click events
        http://bugs.webkit.org/show_bug.cgi?id=12570
        
        Test: svg/custom/prevent-default.svg

        * html/HTMLAnchorElement.cpp: use MiddleButton and RightButton instead of 1 and 2
        (WebCore::HTMLAnchorElement::defaultEventHandler):
        * ksvg2/svg/SVGAElement.cpp:
        (WebCore::SVGAElement::defaultEventHandler): make it function more like the HTML side

2007-05-30  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Hyatt.

        - fix layout test editing/style/table-selection.html
        
        This was broken by the change to keep whitespace text nodes in tables. They safely didn't render,
        but the font delta style change command would wrap them in spans, creating extra anonymous table
        cells.

        * editing/ApplyStyleCommand.cpp:
        (WebCore::ApplyStyleCommand::applyRelativeFontStyleChange): Don't wrap in a span if the text node
        is not rendered.

2007-05-31  Alp Toker  <alp.toker@collabora.co.uk>

        Reviewed by Eric Seidel.

        http://bugs.webkit.org/show_bug.cgi?id=13941
        Rename WebCore/platform/network/gdk to WebCore/platform/network/curl

        * WebCore.pro:

2007-05-31  Alp Toker  <alp.toker@collabora.co.uk>

        Reviewed by Niko.

        Patch for http://bugs.webkit.org/show_bug.cgi?id=13945
        GraphicsContextCairo enhancements necessary for SVG support

        * platform/graphics/cairo/GraphicsContextCairo.cpp:
        (WebCore::GraphicsContext::concatCTM):
        (WebCore::GraphicsContext::beginPath):
        (WebCore::GraphicsContext::addPath):

2007-05-31  Patti Hoa <patti@apple.com>

        Reviewed by Darin.
        
        <rdar://problem/5221920> AXLink is returning a CFString instead of a CFURL for AXURL

        * bridge/mac/WebCoreAXObject.mm:
        (-[WebCoreAXObject accessibilityAttributeValue:]):
        Convert the url string to an NSURL before returning as the AXURLAttribute

2007-05-30  Sam Weinig  <sam@webkit.org>

        Reviewed by Oliver.

        Patch for http://bugs.webkit.org/show_bug.cgi?id=13943
        Autogenerate the JS bindings for the CSSStyleSheet

        * DerivedSources.make:
        * WebCore.pro:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSStyleSheetCustom.cpp:
        (WebCore::toJS):
        * bindings/js/kjs_css.cpp:
        * bindings/js/kjs_css.h:
        * bindings/scripts/CodeGeneratorJS.pm:
        * css/CSSStyleSheet.cpp:
        (WebCore::CSSStyleSheet::addRule):
        (WebCore::CSSStyleSheet::cssRules):
        * css/CSSStyleSheet.h:
        (WebCore::CSSStyleSheet::rules):
        (WebCore::CSSStyleSheet::removeRule):
        * css/CSSStyleSheet.idl:
        * page/DOMWindow.idl:

2007-05-30  Sam Weinig  <sam@webkit.org>

        Reviewed by Oliver.

        Patch for http://bugs.webkit.org/show_bug.cgi?id=13937
        Autogenerate the JS bindings for the CSSValue

        * WebCore.pro:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSCSSValueCustom.cpp: Added.
        (WebCore::toJS):
        * bindings/js/kjs_css.cpp:
        * bindings/js/kjs_css.h:
        * bindings/objc/DOMUtility.mm:
        (KJS::createDOMWrapper):
        * bindings/scripts/CodeGeneratorJS.pm:
        * css/CSSValue.h:
        (WebCore::CSSValue::setCssText):
        * css/CSSValue.idl:

2007-05-30  Sam Weinig  <sam@webkit.org>

        Reviewed by Oliver the Hun.

        Patch for http://bugs.webkit.org/show_bug.cgi?id=13944
        Generate and add missing JS constructors

        * css/CSSRuleList.idl:
        * css/CSSValueList.idl:
        * css/Counter.idl:
        * page/DOMWindow.idl:

2007-05-30  Justin Garcia  <justin.garcia@apple.com>
 
        Reviewed by Darin.
 
        http://bugs.webkit.org/show_bug.cgi?id=13915
        REGRESSION(r21687): editing/inserting/paragraph-separator-* failing pixel test (misspelling markers)

        After r21687, SimplifiedBackwardsTextIterator was no longer 
        emitting a '\n' as it left the first block of a range ending 
        at [block, 0]. So, foo<div>^<br></div> looked like foo^ to
        spell checking (foo wasn't marked as misspelled).

        After r21687, SBTI stopped emitting '\n's in the above case 
        because 1) we stopped incorrectly emitting '\n's for nodes as 
        we entered them and 2) we were and still are incorrectly calling 
        code that should only be called when entering nodes as we leave 
        them and 3) we don't call exitNode(), which is responsible 
        for emitting the '\n' in the above testcase, when we should.

        Before and after r21687, we'd call exitNode() for a node as 
        we traversed in reverse pre-order from its first descendant 
        out to its sibling or one of its ancestors' siblings.  We 
        weren't calling it a) after we'd enter a node that could 
        have children but had none and b) when leaving a container 
        that contained the end of the range used to create the iterator.

        * editing/TextIterator.cpp:
        (WebCore::SimplifiedBackwardsTextIterator::SimplifiedBackwardsTextIterator):
        (WebCore::SimplifiedBackwardsTextIterator::advance): Call exitNode() as we
        leave a childless container node and a node where the range ended.
        * editing/TextIterator.h: Track the end of the range used to create
        the SimplifiedBackwardsTextIterator.

2007-05-30  Alp Toker  <alp.toker@collabora.co.uk>

        Reviewed by Brady.

        Enable logging in the Gdk port.
        http://bugs.webkit.org/show_bug.cgi?id=13936

        * WebCore.pro:
        * platform/NotImplemented.h: Changed to use WTFLogVerbose.
        * platform/gdk/LoggingGdk.cpp: Added.
        (WebCore::InitializeLoggingChannelsIfNecessary):

2007-05-30  Beth Dakin  <bdakin@apple.com>

        Reviewed by Hyatt.

        Fix for <rdar://problem/5198882> CrashTracer: [USER] 7 crashes in 
        Safari at com.apple.WebCore: WebCore::RenderBlock::layoutBlock + 
        2360

        The problem is that we are re-entering layout when we should not. 
        http://trac.webkit.org/projects/webkit/changeset/21778 actually 
        fixed this crash, but we have been inspired to add the same guard 
        in two other possibly-dangerous places.

        * page/FrameView.cpp:
        (WebCore::FrameView::layout): Add the guard in two more places.

2007-05-30  Justin Garcia  <justin.garcia@apple.com>

        Reviewed by Oliver.

        <rdar://problem/5096134> VO gets stuck on Howto.apple.com
        http://bugs.webkit.org/show_bug.cgi?id=8622
        VisiblePositions aren't canonicalized in some cases
        
        No new test cases added: can't write automated tests 
        for VO.

        * editing/IndentOutdentCommand.cpp:
        (WebCore::IndentOutdentCommand::outdentParagraph):
        VisiblePositions must be recomputed after nodes that
        may have effected their canonicalization are removed.
        * editing/VisiblePosition.cpp:
        (WebCore::canonicalizeCandidate): Added.
        (WebCore::VisiblePosition::canonicalPosition): Canonicalize
        the candidates returned by next/previousCandidate before
        returning them.
        * editing/VisiblePosition.h:
        (WebCore::operator==): Remove the workaround for 8622.
        * editing/visible_units.cpp:
        (WebCore::startOfParagraph): Ditto.

2007-05-30  Sam Weinig  <sam@webkit.org>

        Reviewed by Dr. Harrison.

        Patch for http://bugs.webkit.org/show_bug.cgi?id=13868
        REGRESSION: crash on accessing a new iframe's contentWindow property

        Adds a null check in for the contentWindow property for HTMLIFrameElement
        and HTMLFrameElement.

        * bindings/scripts/CodeGeneratorJS.pm:
        * html/HTMLFrameElement.idl:
        * html/HTMLIFrameElement.idl:

2007-05-30  Mitz Pettel  <mitz@webkit.org>

        Reviewed by Darin.

        - fix http://bugs.webkit.org/show_bug.cgi?id=13775
          REGRESSION: Popup button text should use "natural" directionality to match the items in the popup menu

        Test: fast/forms/select-writing-direction-natural.html

        * platform/PopupMenu.h: Added the static method itemWritingDirectionIsNatural
        which says whether items in the popup ignore the CSS text-align and direction
        properties and instead are left-aligned and use natural writing direction.
        * platform/gdk/PopupMenuGdk.cpp:
        (WebCore::PopupMenu::itemWritingDirectionIsNatural):
        * platform/mac/PopupMenuMac.mm:
        (WebCore::PopupMenu::itemWritingDirectionIsNatural):
        * platform/qt/PopupMenuQt.cpp:
        (WebCore::PopupMenu::itemWritingDirectionIsNatural):
        * platform/win/TemporaryLinkStubs.cpp:
        (WebCore::PopupMenu::itemWritingDirectionIsNatural):
        * platform/wx/TemporaryLinkStubs.cpp:
        (PopupMenu::itemWritingDirectionIsNatural):
        * rendering/RenderMenuList.cpp:
        (WebCore::textDirectionForParagraph): Added this helper function that uses
        the Unicode Bidi Algorithm rules P2 and P3 to determine the writing direction
        of text.
        (WebCore::RenderMenuList::adjustInnerStyle): Made the alignment and direction
        adjustment conditional on the popup implementation.
        (WebCore::RenderMenuList::setText): Added call to adjustInnerStyle() since
        the style depends on the text when natural writing direction is used.

2007-05-30  Timothy Hatcher  <timothy@apple.com>

        Reviewed by Darin.

        <rdar://problem/5200795> REGRESSION (r21057): lineBoxRects doesn't match actual text when wrapping occurs

        Use box->end() instead of box->len().

        * rendering/RenderText.cpp:
        (WebCore::RenderText::addLineBoxRects):

2007-05-30  Sam Weinig  <sam@webkit.org>

        Reviewed by Darin.

        Patch for http://bugs.webkit.org/show_bug.cgi?id=13919
        Autogenerate the JS bindings for the CSSRule and its subclasses

        - subclasses generated are CSSCharsetRule, CSSFontFaceRule, CSSImportRule
          CSSMediaRule, CSSPageRule and CSSStyleRule.

        * DerivedSources.make:
        * WebCore.pro:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSCSSRuleCustom.cpp: Added.
        (WebCore::toJS):
        * bindings/js/kjs_css.cpp:
        * bindings/js/kjs_css.h:
        * bindings/objc/DOMUtility.mm:
        (KJS::createDOMWrapper):
        * bindings/scripts/CodeGeneratorJS.pm:
        * css/CSSCharsetRule.h:
        (WebCore::CSSCharsetRule::setEncoding):
        * css/CSSCharsetRule.idl:
        * css/CSSFontFaceRule.idl:
        * css/CSSImportRule.idl:
        * css/CSSMediaRule.idl:
        * css/CSSPageRule.cpp:
        (WebCore::CSSPageRule::setSelectorText):
        * css/CSSPageRule.h:
        * css/CSSPageRule.idl:
        * css/CSSRule.cpp:
        (WebCore::CSSRule::setCssText):
        * css/CSSRule.h:
        * css/CSSRule.idl:
        * css/CSSStyleRule.cpp:
        (WebCore::CSSStyleRule::setSelectorText):
        * css/CSSStyleRule.h:
        * css/CSSStyleRule.idl:
        * page/DOMWindow.idl: add new constructors.

2007-05-30  Mark Rowe  <mrowe@apple.com>

        Build fixes after r21889.  Add missing #includes.

        * ForwardingHeaders/kjs/function.h: Added.
        * bindings/js/kjs_binding.h:
        * bindings/js/kjs_dom.h:
        * bindings/js/kjs_window.h:

2007-05-30  Mark Rowe  <mrowe@apple.com>

        Gdk build fix.  Update WidgetGdk to use NotImplemented.h.

        * platform/gdk/WidgetGdk.cpp:
        (WebCore::Widget::setEnabled):
        (WebCore::Widget::isEnabled):
        (WebCore::Widget::removeFromParent):
        (WebCore::Widget::paint):
        (WebCore::Widget::setIsSelected):

2007-05-29  Holger Freyther  <zecke@selfish.org>

        Reviewed by Anders.

        Make ScrollView use a GtkLayout. This class matches QScrollView the most and promises
        to ease the implementation of ScrollView::addChild. GtkLayout should be resource friendly
        even with huge width and heights of frames.
        Make Widget aware of GtkLayout to use the right GdkWindow as drawable. For GtkLayout one must
        draw on the bin_window.
        Remove the layer violation from FrameGdk.cpp and ScrollView. FrameGdk is no longer responsible to
        implement scrolling on keyboard events. ScrollView is no longer required to know that it could be
        a FrameView and handles scrolling of Frames magically.

        * platform/ScrollView.h:
        * platform/gdk/FrameGdk.cpp:
        (WebCore::FrameGdk::keyPress):
        (WebCore::FrameGdk::handleGdkEvent):
        * platform/gdk/ScrollViewGdk.cpp:
        (WebCore::ScrollView::ScrollViewPrivate::ScrollViewPrivate):
        (WebCore::ScrollView::updateContents):
        (WebCore::ScrollView::visibleWidth):
        (WebCore::ScrollView::visibleHeight):
        (WebCore::ScrollView::visibleContentRect):
        (WebCore::ScrollView::resizeContents):
        (WebCore::ScrollView::contentsX):
        (WebCore::ScrollView::contentsY):
        (WebCore::ScrollView::scrollOffset):
        (WebCore::ScrollView::scrollBy):
        (WebCore::ScrollView::setFrameGeometry):
        (WebCore::ScrollView::updateGeometry):
        (WebCore::ScrollView::setGtkWidget):
        (WebCore::ScrollView::updateScrollbars):
        (WebCore::ScrollView::windowToContents):
        (WebCore::ScrollView::contentsToWindow):
        (WebCore::ScrollView::scrollbarUnderMouse):
        * platform/gdk/TemporaryLinkStubs.cpp: Move Widget methods to WidgetGdk.cpp
        * platform/gdk/WidgetGdk.cpp:
        (WebCore::Widget::setGtkWidget):
        (WebCore::Widget::setFrameGeometry):
        (WebCore::Widget::setEnabled):
        (WebCore::Widget::isEnabled):
        (WebCore::Widget::removeFromParent):
        (WebCore::Widget::paint):
        (WebCore::Widget::setIsSelected):
        (WebCore::Widget::invalidate):
        (WebCore::Widget::invalidateRect):

2007-05-29  Krzysztof Kowalczyk  <kkowalczyk@gmail.com>

        Reviewed by Maciej.

        Curl (linux/gdk) networking improvements: 
        a) POST support
        b) don't use CURL in a re-entrant way.
        c) turn on curl's internal debugging support in a debug build if the DEBUG_CURL environment variable is set.

        * platform/network/ResourceHandleInternal.h:
        (WebCore::ResourceHandleInternal::ResourceHandleInternal):
        * platform/network/gdk/ResourceHandleCurl.cpp:
        (WebCore::ResourceHandleInternal::~ResourceHandleInternal):
        * platform/network/gdk/ResourceHandleManager.cpp:
        (WebCore::ResourceHandleManager::ResourceHandleManager):
        (WebCore::writeCallback):
        (WebCore::ResourceHandleManager::downloadTimerCallback):
        (WebCore::ResourceHandleManager::setupPOST):
        (WebCore::ResourceHandleManager::add):
        (WebCore::ResourceHandleManager::removeScheduledJob):
        (WebCore::ResourceHandleManager::startScheduledJobs):
        (WebCore::ResourceHandleManager::startJob):
        (WebCore::ResourceHandleManager::cancel):
        * platform/network/gdk/ResourceHandleManager.h:
        (WebCore::ResourceHandleList::ResourceHandleList):
        (WebCore::ResourceHandleList::next):
        (WebCore::ResourceHandleList::job):
        (WebCore::ResourceHandleList::setRemoved):
        (WebCore::ResourceHandleList::removed):

2007-05-29  Sam Weinig  <sam@webkit.org>

        Fix the Qt and Gdk builds.

        * WebCore.pro:

2007-05-29  Adele Peterson  <adele@apple.com>

        Reviewed by Adam.

        Fix for <rdar://problem/5109711> REGRESSION: Focus ring artifacts appear around a widget's search field at times (Address Book, Dictionary)

        * rendering/RenderThemeMac.mm: (WebCore::RenderThemeMac::paintSearchField):
          We only need this hack for drawing the search field focus ring on Tiger.  On Leopard, drawWithFrame correctly draws the cell's focus ring.

2007-05-29  Alp Toker  <alp.toker@collabora.co.uk>

        Reviewed by Mitz.

        Patch for http://bugs.webkit.org/show_bug.cgi?id=13899

        * platform/graphics/cairo/GraphicsContextCairo.cpp:
        (WebCore::GraphicsContext::strokeArc): Use cairo_arc_negative() to fix
        CSS rounded borders.
        (WebCore::GraphicsContext::beginTransparencyLayer):
        (WebCore::GraphicsContext::endTransparencyLayer): save/restore is
        redundant. push/pop group does this implicitly.

2007-05-29  Sam Weinig  <sam@webkit.org>

        Reviewed by Oliver.

        Patch for http://bugs.webkit.org/show_bug.cgi?id=13912
        Autogenerate the JS bindings for the MediaList

        * DerivedSources.make:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/kjs_css.cpp:
        * bindings/js/kjs_css.h:
        * bindings/objc/DOMUtility.mm:
        (KJS::createDOMWrapper):
        * bindings/scripts/CodeGeneratorJS.pm:
        * css/MediaList.idl:
        * page/DOMWindow.idl: Add constructor.

2007-05-29  Matt Perry  <mpComplete@gmail.com>

        Reviewed by Maciej.

        Fixed some rendering issues for <select>s on Windows.

        * rendering/RenderThemeWin.cpp:
        (WebCore::RenderThemeWin::adjustMenuListStyle):
        (WebCore::RenderThemeWin::paintMenuList):
        * rendering/RenderThemeWin.h:

2007-05-29  David Hyatt  <hyatt@apple.com>

        Fold the invalidateVerticalPositions crawl into the bidi iteration.
        This makes it more correct (since we won't drill into elements that
        did not need to be reset) and cuts out an extra walk of all our children.
        We're still O(n^2) as new content streams in, but this at least cuts
        out one separate O(n^2) crawl.

        Reviewed by olliej

        * rendering/RenderObject.cpp:
        * rendering/RenderObject.h:
        (WebCore::RenderObject::invalidateVerticalPosition):
        * rendering/bidi.cpp:
        (WebCore::RenderBlock::layoutInlineChildren):

2007-05-29  Sam Weinig  <sam@webkit.org>

        Reviewed by Oliver.

        Patch for http://bugs.webkit.org/show_bug.cgi?id=13908
        Autogenerate the JS bindings for the StyleSheet

        * DerivedSources.make:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSStyleSheetCustom.cpp: Added.
        (WebCore::toJS):
        (WebCore::JSStyleSheet::toBoolean):
        * bindings/js/kjs_css.cpp:
        (KJS::):
        (KJS::DOMCSSStyleSheet::DOMCSSStyleSheet):
        (KJS::DOMCSSStyleSheet::getOwnPropertySlot):
        * bindings/js/kjs_css.h:
        * bindings/objc/DOMUtility.mm:
        (KJS::createDOMWrapper):
        * bindings/scripts/CodeGeneratorJS.pm:
        * css/StyleSheet.idl:
        * page/DOMWindow.idl: Add new constructor.

2007-05-29  David Hyatt  <hyatt@apple.com>

        Make sure <embed> does not allow an end tag.

        Reviewed by olliej

        * html/HTMLEmbedElement.h:
        (WebCore::HTMLEmbedElement::endTagRequirement):

2007-05-29  Adele Peterson  <adele@apple.com>

        Reviewed by Brady.

        Fix for <rdar://problem/5213039> REGRESSION: Wells Fargo registration page returns blank

        Roll out updated fix for 11866 that tried to make reset work for hidden inputs.  Since
        all browsers update the value attribute when setting the value, it doesn't really make sense to reset.
        Its true that IE does support resetting these controls, but in this case, it doesn't really make sense to have
        another place to store an alternate version of the value.

        * html/HTMLInputElement.cpp: (WebCore::HTMLInputElement::reset):
        * html/HTMLInputElement.h:

2007-05-29  Darin Adler  <darin@apple.com>

        Reviewed by Anders.

        - removed the general case optimization for innerHTML because some sites
          rely on setting innerHTML to trigger loading plug-ins for example; we
          could consider bringing it back some day, perhaps with a list of element
          types to exclude

        * dom/CharacterData.cpp: (WebCore::CharacterData::setData):
        Do nothing if the old data is identical to the new data.

        * html/HTMLElement.cpp:
        (WebCore::replaceChildrenWithFragment): Remove childrenAreEqual optimization.
        (WebCore::replaceChildrenWithText): Remove optimization for cases where the
        text data is identical to the new data, since CharacterData handles that now.
        (WebCore::HTMLElement::setOuterHTML): Remove childrenAreEqual optimization.

2007-05-29  Mitz Pettel  <mitz@webkit.org>

        Reviewed by Maciej.

        - fix http://bugs.webkit.org/show_bug.cgi?id=13904
          REGRESSION: Search fields with a results popup do not always draw the popup arrow

        Covered by fast/forms/box-shadow-override.html

        The search button draws a popup arrow depending on whether the
        search menu template is set, rather than on the maximum number of recent
        search strings.

        * rendering/RenderThemeMac.h:
        * rendering/RenderThemeMac.mm:
        (WebCore::RenderThemeMac::paintSearchFieldResultsDecoration): Removed the
        call to -setMaxmiumRecents:.
        (WebCore::RenderThemeMac::paintSearchFieldResultsButton): Replaced calling
        -setMaximumRecents: with setting the search menu template.
        (WebCore::RenderThemeMac::search): Removed initialization of the menu.
        (WebCore::RenderThemeMac::searchMenuTemplate): Added. Returns an empty
        NSMenu to be used as the search menu template.

2007-05-29  David Hyatt  <hyatt@apple.com>

        Fix for bug 13907, <noscript> should be allowed inside <head> when
        scripting is enabled.

        Reviewed by aroben

        * html/HTMLHeadElement.cpp:
        (WebCore::HTMLHeadElement::checkDTD):
        * html/HTMLParser.cpp:
        (WebCore::HTMLParser::handleError):
        * html/HTMLParserErrorCodes.cpp:
        (WebCore::htmlParserErrorMessageTemplate):
        * html/HTMLParserErrorCodes.h:

2007-05-29  Mitz Pettel  <mitz@webkit.org>

        Reviewed by Maciej.

        - fix crash in http://bugs.webkit.org/show_bug.cgi?id=13792
          REGRESSION: WebKit doesn't show this javascript screenshot page (and crashes after click on its "hidden link")

        Test: fast/frames/removal-before-attach-crash.html

        Delayed the queueing of the post-attach callback until attach().

        * html/HTMLFrameElementBase.cpp:
        (WebCore::HTMLFrameElementBase::HTMLFrameElementBase):
        (WebCore::HTMLFrameElementBase::parseMappedAttribute): Replaced call to the
        HTMLElement implementation with a call to the HTMLFrameOwnerElement
        implementation, as the latter is the parent class.
        (WebCore::HTMLFrameElementBase::insertedIntoDocument): Instead of queueing
        the post-attach callback here, just set a flag telling us to do so
        at the beginning of attach().
        (WebCore::HTMLFrameElementBase::removedFromDocument): Reset the above flag.
        (WebCore::HTMLFrameElementBase::attach): If this is the first attach() after
        being inserted into the document, queue a post-attach callback to load the
        frame.
        (WebCore::HTMLFrameElementBase::willRemove): Changed to call up to the correct
        parent class.
        (WebCore::HTMLFrameElementBase::setFocus): Ditto.
        * html/HTMLFrameElementBase.h:
        * html/HTMLPlugInElement.cpp:
        (WebCore::HTMLPlugInElement::mapToEntry): Replaced call to the HTMLElement
        implementation with a call to the HTMLFrameOwnerElement implementation,
        as the latter is the parent class.
        (WebCore::HTMLPlugInElement::parseMappedAttribute): Ditto.
        (WebCore::HTMLPlugInElement::checkDTD): Ditto.
        (WebCore::HTMLPlugInElement::detach): Ditto.

2007-05-29  Darin Adler  <darin@apple.com>

        Reviewed by Maciej.

        - fix http://bugs.webkit.org/show_bug.cgi?id=13602
          Amazon product pages keep repainting over and over again

        - fix first-letter when the text of the affected text node is changed

        Optimize setInnerHTML, setOuterHTML, and setInnerText so they don't change the DOM at all
        if they don't need to.

        Test: fast/dom/HTMLElement/set-inner-outer-optimization.html
        Test: fast/css/first-letter-detach.html

        * html/HTMLElement.cpp:
        (WebCore::equal): Added. Helper function that compares two Text nodes or two NamedAttrMap
        attribute maps.
        (WebCore::shallowEqual): Added. Helper function that compares two Element nodes or two
        arbitrary nodes.
        (WebCore::childrenAreEqual): Added. Helper functions that compare children of nodes.
        (WebCore::hasOneChild): Added. Helper function.
        (WebCore::hasOneTextChild): Added. Helper function.
        (WebCore::replaceChildrenWithFragment): Added. Helper function used by setInnerHTML and
        setInnerText. Optimizes the cases where all the nodes are the same, where both the current
        and the new content are single text nodes, and where the current content is a single node
        that can be replaced with replaceChild.
        (WebCore::replaceChildrenWithText): Added. Helper function used by setInnerText. Optimizes
        the case where the current content is a single text node or a single node that can be
        replaced with replaceChild.
        (WebCore::HTMLElement::setInnerHTML): Changed to call replaceChildrenWithFragment.
        (WebCore::HTMLElement::setOuterHTML): Added special case to optimize when the new content
        exactly matches the current node.
        (WebCore::HTMLElement::setInnerText): Changed to call replaceChildrenWithText in a few
        cases instead of doing removeChildren/appendChild. Changed code that was using
        DeprecatedString to instead use String. Changed general case to use a document fragment
        and replaceChildrenWithFragment.

        * dom/CharacterData.cpp: (WebCore::CharacterData::dispatchModifiedEvent):
        Fixed bug where we would not dispatch the DOMSubtreeModified event unless someone
        was registered for the DOMCharacterDataModified event. Caused trouble in the test.

        * rendering/RenderBlock.cpp: (WebCore::RenderBlock::updateFirstLetter): Set first-letter
        after the setStyle call so calls to setTextInternal inside setStyle don't clear it.

        * rendering/RenderText.h: Made setTextInternal virtual so that RenderTextFragment can do
        appropriate work when the text changes.

        * rendering/RenderTextFragment.h: Added an override of setTextInternal. Removed the
        firstLetter parameter to the constructor and made it a separate setter. Also changed
        m_generatedContentStr to m_contentString to match the getter function.
        * rendering/RenderTextFragment.cpp:
        (WebCore::RenderTextFragment::RenderTextFragment): Removed firstLetter parameter.
        (WebCore::RenderTextFragment::setTextInternal): When the text changes, destroy the
        first-letter node and reset the fragment values so that RenderBlock::updateFirstLetter,
        which will run during layout, will create a new first-letter child. Otherwise we end up
        with the first letter of the old text.

2007-05-29  Sam Weinig  <sam@webkit.org>

        Fix Qt build.

        * platform/NotImplemented.h:

2007-05-29  Sam Weinig  <sam@webkit.org>

        Reviewed by Adam Roben.

        Consolidate platform dependent notImplemented() macros
        into one platform independent macro that uses WTFLog.

        * platform/NotImplemented.h:

2007-05-29  Darin Adler  <darin@apple.com>

        Reviewed by Sam.

        - a clean-up pass on form-related aspects of the recent JSHTMLElement patch

        * bindings/js/JSHTMLElementCustom.cpp: (WebCore::JSHTMLElement::pushEventHandlerScope):
        Replace the call to formForEventHandlerScope() with a call to the new form() function.
        And removed the now-uneeded code to search for a form ancestor.

        * html/HTMLElement.h: Added a general-purpose form() function. The intent is to return
        the form ancestor if any, but return the associated form for a form control, which isn't
        always an ancestor of the control. To keep form() efficient for form controls, it's an
        inline that calls a virtual, allowing a derived class to override it with an inline.
        This replaces formForEventHandlerScope(). Also added findFormAncestor() to use here and
        to replace the multiple loops found elsewhere to search for the nearest form ancestor.
        * html/HTMLElement.cpp:
        (WebCore::HTMLElement::findFormAncestor): Added.
        (WebCore::HTMLElement::virtualForm): Added. Calls findFormAncestor().

        * html/HTMLGenericFormElement.h: Suggested name change to HTMLFormControlElement.
        Removed the confusing getForm() function, which is superceded by findFormAncestor.
        Removed the unused onSelect() function. Removed the override of formForEventHandlerScope(),
        replacing it with an override of virtualForm().
        * html/HTMLGenericFormElement.cpp:
        (WebCore::HTMLGenericFormElement::HTMLGenericFormElement): Use findFormAncestor
        instead of getForm.
        (WebCore::HTMLGenericFormElement::insertedIntoTree): Ditto.
        (WebCore::HTMLGenericFormElement::virtualForm): Added.

        * html/HTMLLabelElement.h: Removed now-unneeded form() and formForEventHandlerScope()
        functions, since base class behavior is now good enough. Renamed formElement() to
        correspondingControl(), since that's the terminology used elsewhere in the code,
        and the old name was unnecessarily confusing.
        * html/HTMLLabelElement.cpp:
        (WebCore::HTMLLabelElement::correspondingControl): Renamed. Removed unnecessary
        special case for empty ID, since getElementById already returns 0 for that case.
        (WebCore::HTMLLabelElement::setActive): Updated for name change.
        (WebCore::HTMLLabelElement::setHovered): Ditto.
        (WebCore::HTMLLabelElement::defaultEventHandler): Ditto.
        (WebCore::HTMLLabelElement::focus): Ditto.
        (WebCore::HTMLLabelElement::accessKeyAction): Ditto.

        * html/HTMLObjectElement.h: Removed now-unneeded form() and formForEventHandlerScope()
        functions, since base class behavior is now good enough. Also removed forward
        declaration of KJS::Bindings::Instance -- since the type is the return value of a
        function from the base class, it's guaranteed to be declared in the base class header.
        * html/HTMLObjectElement.cpp: Ditto.

        * bridge/mac/WebCoreAXObject.mm: (labelForElement): Updated for name change.

2007-05-29  Zack Rusin  <zrusin@trolltech.com>

        Reviewed by George and Niko

        Making the convenience method notImplemented convenient
        for the Qt port.

        * platform/NotImplemented.h:

2007-05-28  Sam Weinig  <sam@webkit.org>

        Reviewed by Geoff.

        - Patch for http://bugs.webkit.org/show_bug.cgi?id=13902
          Autogenerate the JS bindings for the CSSStyleDeclaration

        * WebCore.pro:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSCSSStyleDeclarationCustom.cpp: Added.
        (WebCore::cssPropertyName):
        (WebCore::isCSSPropertyName):
        (WebCore::JSCSSStyleDeclaration::canGetItemsForName):
        (WebCore::JSCSSStyleDeclaration::nameGetter):
        (WebCore::JSCSSStyleDeclaration::customPut):
        * bindings/js/kjs_binding.h:
        * bindings/js/kjs_css.cpp:
        * bindings/js/kjs_css.h:
        * bindings/objc/DOMUtility.mm:
        (KJS::createDOMWrapper):
        * bindings/scripts/CodeGeneratorJS.pm:
        * css/CSSStyleDeclaration.idl:

2007-05-28  Mitz Pettel  <mitz@webkit.org>

        Reviewed by Darin.

        - fix http://bugs.webkit.org/show_bug.cgi?id=13896
          REGRESSION (NativePopup): Reproductible crasher on Google Coop control panel

        Test: fast/forms/select-display-none-style-resolve.html

        * html/HTMLOptGroupElement.cpp:
        (WebCore::HTMLOptGroupElement::attach): Do not compute style if the parent
        does not have style.
        * html/HTMLOptionElement.cpp:
        (WebCore::HTMLOptionElement::attach): Ditto.

2007-05-28  Sam Weinig  <sam@webkit.org>

        Fix Gdk and Qt builds.

        * WebCore.pro:

2007-05-28  Sam Weinig  <sam@webkit.org>

        Reviewed by Darin.

        Patch for http://bugs.webkit.org/show_bug.cgi?id=13894
        Remove the legacy class KJS::JSHTMLElement

        - Now that all of the subclasses of JSHTMLElement are
          autogenerated and no longer rely on the legacy parent,
          we can remove it and update all the HTML idl files to
          reflect so.

        - Also adds JSHTMLBlockquoteElement's JS constructor which
          was mistakingly missing.

        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSHTMLAnchorElementCustom.cpp:
        (WebCore::JSHTMLAnchorElement::toString):
        * bindings/js/JSHTMLElementCustom.cpp: Added.
        (WebCore::JSHTMLElement::pushEventHandlerScope):
        * bindings/js/JSHTMLElementWrapperFactory.cpp:
        (WebCore::createJSHTMLWrapper):
        * bindings/js/JSHTMLInputElementBase.cpp:
        (WebCore::):
        (WebCore::JSHTMLInputElementBase::JSHTMLInputElementBase):
        (WebCore::JSHTMLInputElementBase::getOwnPropertySlot):
        (WebCore::JSHTMLInputElementBase::put):
        * bindings/js/JSHTMLInputElementBase.h:
        * bindings/js/JSHTMLSelectElementCustom.cpp:
        * bindings/js/kjs_html.cpp:
        (KJS::runtimeObjectCustomGetOwnPropertySlot):
        * bindings/js/kjs_html.h:
        * bindings/scripts/CodeGeneratorJS.pm:
        * 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/HTMLDListElement.idl:
        * html/HTMLDirectoryElement.idl:
        * html/HTMLDivElement.idl:
        * html/HTMLElement.cpp:
        (WebCore::HTMLElement::formForEventHandlerScope):
        * html/HTMLElement.h:
        * html/HTMLElement.idl:
        * html/HTMLEmbedElement.idl:
        * html/HTMLFieldSetElement.idl:
        * html/HTMLFontElement.idl:
        * html/HTMLFormElement.idl:
        * html/HTMLFrameElement.idl:
        * html/HTMLFrameSetElement.idl:
        * html/HTMLGenericFormElement.cpp:
        (WebCore::HTMLGenericFormElement::formForEventHandlerScope):
        * html/HTMLGenericFormElement.h:
        * html/HTMLHRElement.idl:
        * html/HTMLHeadElement.idl:
        * html/HTMLHeadingElement.idl:
        * html/HTMLHtmlElement.idl:
        * html/HTMLIFrameElement.idl:
        * html/HTMLImageElement.idl:
        * html/HTMLIsIndexElement.idl:
        * html/HTMLLIElement.idl:
        * html/HTMLLabelElement.cpp:
        (WebCore::HTMLLabelElement::form):
        (WebCore::HTMLLabelElement::formForEventHandlerScope):
        * html/HTMLLabelElement.h:
        * 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.cpp:
        (WebCore::HTMLObjectElement::formForEventHandlerScope):
        * html/HTMLObjectElement.h:
        * html/HTMLObjectElement.idl:
        * html/HTMLOptGroupElement.idl:
        * html/HTMLOptionElement.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:
        * page/DOMWindow.idl:

2007-05-28  Zack Rusin  <zrusin@trolltech.com>

        Reviewed by andersca

        Adding Qt related constructor/casting operators
        to the AtomicString and updating the project
        file for new Qt settings api using those.

        * WebCore.pro:
        * platform/AtomicString.h:

2007-05-27  Sam Weinig  <sam@webkit.org>

        Qt and Gdk build fix.

        * WebCore.pro:

2007-05-27  Sam Weinig  <sam@webkit.org>

        Reviewed by Hyatt.

        Patch for http://bugs.webkit.org/show_bug.cgi?id=13893
        Autogenerate the JS bindings for the HTMLObjectElement, 
        HTMLEmbedElement and HTMLAppletElement

        * DerivedSources.make:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSHTMLAppletElementCustom.cpp: Added.
        (WebCore::JSHTMLAppletElement::customGetOwnPropertySlot):
        (WebCore::JSHTMLAppletElement::customPut):
        (WebCore::JSHTMLAppletElement::implementsCall):
        (WebCore::JSHTMLAppletElement::callAsFunction):
        (WebCore::JSHTMLAppletElement::canGetItemsForName):
        (WebCore::JSHTMLAppletElement::nameGetter):
        * bindings/js/JSHTMLElementWrapperFactory.cpp:
        * bindings/js/JSHTMLEmbedElementCustom.cpp: Added.
        (WebCore::JSHTMLEmbedElement::customGetOwnPropertySlot):
        (WebCore::JSHTMLEmbedElement::customPut):
        (WebCore::JSHTMLEmbedElement::implementsCall):
        (WebCore::JSHTMLEmbedElement::callAsFunction):
        (WebCore::JSHTMLEmbedElement::canGetItemsForName):
        (WebCore::JSHTMLEmbedElement::nameGetter):
        * bindings/js/JSHTMLObjectElementCustom.cpp: Added.
        (WebCore::JSHTMLObjectElement::customGetOwnPropertySlot):
        (WebCore::JSHTMLObjectElement::customPut):
        (WebCore::JSHTMLObjectElement::implementsCall):
        (WebCore::JSHTMLObjectElement::callAsFunction):
        (WebCore::JSHTMLObjectElement::canGetItemsForName):
        (WebCore::JSHTMLObjectElement::nameGetter):
        * bindings/js/kjs_html.cpp:
        (KJS::):
        (KJS::JSHTMLElement::toString):
        (KJS::JSHTMLElement::pushEventHandlerScope):
        (KJS::runtimeObjectGetter):
        (KJS::runtimeObjectPropertyGetter):
        (KJS::runtimeObjectCustomGetOwnPropertySlot):
        (KJS::runtimeObjectCustomPut):
        (KJS::runtimeObjectImplementsCall):
        (KJS::runtimeObjectCallAsFunction):
        * bindings/js/kjs_html.h:
        (KJS::JSHTMLElement::classInfo):
        * bindings/scripts/CodeGeneratorJS.pm: Add support for 
        CustomGetOwnPropertySlot, CustomPutFunction, CustomCall,
        and SVGCheckSecurityDocument properties.
        * html/HTMLAppletElement.idl:
        * html/HTMLEmbedElement.idl:
        * html/HTMLObjectElement.idl:
        * page/DOMWindow.idl: Uncomment constructors.

2007-05-27  Sam Weinig  <sam@webkit.org>

        Reviewed by Oliver.

        Gdk build fix.

        * platform/graphics/Path.h:

2007-05-27  Sam Weinig  <sam@webkit.org>

        Gdk build fix.  Forgot to update a few instances of notImplementedGdk() to notImplemented().

        * page/gdk/EventHandlerGdk.cpp:
        (WebCore::EventHandler::passMousePressEventToScrollbar):
        * platform/gdk/EditorClientGdk.cpp:
        (WebCore::EditorClientGdk::ignoreWordInSpellDocument):
        (WebCore::EditorClientGdk::learnWord):
        (WebCore::EditorClientGdk::checkSpellingOfString):
        (WebCore::EditorClientGdk::checkGrammarOfString):
        (WebCore::EditorClientGdk::updateSpellingUIWithGrammarString):
        (WebCore::EditorClientGdk::updateSpellingUIWithMisspelledWord):
        (WebCore::EditorClientGdk::showSpellingUI):
        (WebCore::EditorClientGdk::spellingUIIsShowing):
        (WebCore::EditorClientGdk::getGuessesForWord):
        * platform/gdk/FrameGdk.cpp:
        (WebCore::Frame::dashboardRegionsChanged):
        * platform/gdk/PlatformScrollBarGdk.cpp:
        (PlatformScrollbar::paint):
        (PlatformScrollbar::updateThumbPosition):
        (PlatformScrollbar::updateThumbProportion):
        * platform/gdk/TemporaryLinkStubs.cpp:
        (Widget::setEnabled):
        (Widget::isEnabled):
        (Widget::removeFromParent):
        (Widget::paint):
        (Widget::setIsSelected):
        (Widget::invalidate):
        (Widget::invalidateRect):

2007-05-27  Alp Toker  <alp.toker@collabora.co.uk>

        Reviewed by Sam and Oliver.

        Implement PathCairo. This patch is based on changes in Mike Emmel's
        WebKit fork with some additional clean-ups and updates.

        * platform/graphics/Path.h:
        * platform/graphics/cairo/CairoPath.h: Added.
        (CairoPath::CairoPath):
        (CairoPath::~CairoPath):
        * platform/graphics/cairo/GraphicsContextCairo.cpp:
        (WebCore::GraphicsContext::clip):
        * platform/graphics/cairo/PathCairo.cpp:
        (WebCore::Path::Path):
        (WebCore::Path::~Path):
        (WebCore::Path::operator=):
        (WebCore::Path::clear):
        (WebCore::Path::isEmpty):
        (WebCore::Path::translate):
        (WebCore::Path::moveTo):
        (WebCore::Path::addLineTo):
        (WebCore::Path::addRect):
        (WebCore::Path::addQuadCurveTo):
        (WebCore::Path::addBezierCurveTo):
        (WebCore::Path::addArc):
        (WebCore::Path::addArcTo):
        (WebCore::Path::addEllipse):
        (WebCore::Path::closeSubpath):
        (WebCore::Path::boundingRect):
        (WebCore::Path::contains):
        (WebCore::Path::apply):
        (WebCore::Path::transform):
        (WebCore::Path::debugString):

2007-05-27  Kevin Ollivier  <kevino@theolliviers.com>

        Reviewed by Sam Weinig.

        Consolidate all notImplemented() macro definitions into
        one header file for all platforms.

        * loader/gdk/DocumentLoaderGdk.cpp:
        (WebCore::DocumentLoader::getResponseModifiedHeader):
        * loader/gdk/FrameLoaderClientGdk.cpp:
        (WebCore::FrameLoaderClientGdk::dispatchDidReceiveAuthenticationChallenge):
        (WebCore::FrameLoaderClientGdk::dispatchDidCancelAuthenticationChallenge):
        (WebCore::FrameLoaderClientGdk::dispatchWillSendRequest):
        (WebCore::FrameLoaderClientGdk::assignIdentifierToInitialRequest):
        (WebCore::FrameLoaderClientGdk::createPlugin):
        (WebCore::FrameLoaderClientGdk::createFrame):
        (WebCore::FrameLoaderClientGdk::redirectDataToPlugin):
        (WebCore::FrameLoaderClientGdk::createJavaAppletWidget):
        (WebCore::FrameLoaderClientGdk::objectContentType):
        (WebCore::FrameLoaderClientGdk::overrideMediaType):
        (WebCore::FrameLoaderClientGdk::windowObjectCleared):
        (WebCore::FrameLoaderClientGdk::hasWebView):
        (WebCore::FrameLoaderClientGdk::hasFrameView):
        (WebCore::FrameLoaderClientGdk::frameLoadCompleted):
        (WebCore::FrameLoaderClientGdk::saveViewStateToItem):
        (WebCore::FrameLoaderClientGdk::restoreViewState):
        (WebCore::FrameLoaderClientGdk::privateBrowsingEnabled):
        (WebCore::FrameLoaderClientGdk::makeDocumentView):
        (WebCore::FrameLoaderClientGdk::makeRepresentation):
        (WebCore::FrameLoaderClientGdk::forceLayout):
        (WebCore::FrameLoaderClientGdk::forceLayoutForNonHTML):
        (WebCore::FrameLoaderClientGdk::setCopiesOnScroll):
        (WebCore::FrameLoaderClientGdk::detachedFromParent1):
        (WebCore::FrameLoaderClientGdk::detachedFromParent2):
        (WebCore::FrameLoaderClientGdk::detachedFromParent3):
        (WebCore::FrameLoaderClientGdk::detachedFromParent4):
        (WebCore::FrameLoaderClientGdk::loadedFromCachedPage):
        (WebCore::FrameLoaderClientGdk::dispatchDidHandleOnloadEvents):
        (WebCore::FrameLoaderClientGdk::dispatchDidReceiveServerRedirectForProvisionalLoad):
        (WebCore::FrameLoaderClientGdk::dispatchDidCancelClientRedirect):
        (WebCore::FrameLoaderClientGdk::dispatchWillPerformClientRedirect):
        (WebCore::FrameLoaderClientGdk::dispatchDidChangeLocationWithinPage):
        (WebCore::FrameLoaderClientGdk::dispatchWillClose):
        (WebCore::FrameLoaderClientGdk::dispatchDidReceiveIcon):
        (WebCore::FrameLoaderClientGdk::dispatchDidStartProvisionalLoad):
        (WebCore::FrameLoaderClientGdk::dispatchDidReceiveTitle):
        (WebCore::FrameLoaderClientGdk::dispatchDidCommitLoad):
        (WebCore::FrameLoaderClientGdk::dispatchDidFinishDocumentLoad):
        (WebCore::FrameLoaderClientGdk::dispatchDidFirstLayout):
        (WebCore::FrameLoaderClientGdk::dispatchShow):
        (WebCore::FrameLoaderClientGdk::cancelPolicyCheck):
        (WebCore::FrameLoaderClientGdk::dispatchDidLoadMainResource):
        (WebCore::FrameLoaderClientGdk::revertToProvisionalState):
        (WebCore::FrameLoaderClientGdk::clearUnarchivingState):
        (WebCore::FrameLoaderClientGdk::willChangeTitle):
        (WebCore::FrameLoaderClientGdk::finishedLoading):
        (WebCore::FrameLoaderClientGdk::finalSetupForReplace):
        (WebCore::FrameLoaderClientGdk::setDefersLoading):
        (WebCore::FrameLoaderClientGdk::isArchiveLoadPending):
        (WebCore::FrameLoaderClientGdk::cancelPendingArchiveLoad):
        (WebCore::FrameLoaderClientGdk::clearArchivedResources):
        (WebCore::FrameLoaderClientGdk::canHandleRequest):
        (WebCore::FrameLoaderClientGdk::canShowMIMEType):
        (WebCore::FrameLoaderClientGdk::representationExistsForURLScheme):
        (WebCore::FrameLoaderClientGdk::generatedMIMETypeForURLScheme):
        (WebCore::FrameLoaderClientGdk::provisionalLoadStarted):
        (WebCore::FrameLoaderClientGdk::didFinishLoad):
        (WebCore::FrameLoaderClientGdk::prepareForDataSourceReplacement):
        (WebCore::FrameLoaderClientGdk::setTitle):
        (WebCore::FrameLoaderClientGdk::setDocumentViewFromCachedPage):
        (WebCore::FrameLoaderClientGdk::dispatchDidReceiveContentLength):
        (WebCore::FrameLoaderClientGdk::dispatchDidFinishLoading):
        (WebCore::FrameLoaderClientGdk::dispatchDidFailLoading):
        (WebCore::FrameLoaderClientGdk::dispatchDidLoadResourceFromMemoryCache):
        (WebCore::FrameLoaderClientGdk::dispatchDidFailProvisionalLoad):
        (WebCore::FrameLoaderClientGdk::dispatchDidFailLoad):
        (WebCore::FrameLoaderClientGdk::download):
        (WebCore::FrameLoaderClientGdk::cancelledError):
        (WebCore::FrameLoaderClientGdk::blockedError):
        (WebCore::FrameLoaderClientGdk::cannotShowURLError):
        (WebCore::FrameLoaderClientGdk::interruptForPolicyChangeError):
        (WebCore::FrameLoaderClientGdk::cannotShowMIMETypeError):
        (WebCore::FrameLoaderClientGdk::fileDoesNotExistError):
        (WebCore::FrameLoaderClientGdk::shouldFallBack):
        (WebCore::FrameLoaderClientGdk::willUseArchive):
        (WebCore::FrameLoaderClientGdk::saveDocumentViewToCachedPage):
        (WebCore::FrameLoaderClientGdk::canCachePage):
        (WebCore::FrameLoaderClientGdk::dispatchCreatePage):
        (WebCore::FrameLoaderClientGdk::dispatchUnableToImplementPolicy):
        (WebCore::FrameLoaderClientGdk::setMainDocumentError):
        (WebCore::FrameLoaderClientGdk::startDownload):
        (WebCore::FrameLoaderClientGdk::updateGlobalHistoryForStandardLoad):
        (WebCore::FrameLoaderClientGdk::updateGlobalHistoryForReload):
        * loader/qt/DocumentLoaderQt.cpp:
        * page/gdk/ContextMenuClientGdk.cpp:
        (WebCore::ContextMenuClientGdk::contextMenuDestroyed):
        (WebCore::ContextMenuClientGdk::getCustomMenuFromDefaultItems):
        (WebCore::ContextMenuClientGdk::contextMenuItemSelected):
        (WebCore::ContextMenuClientGdk::downloadURL):
        (WebCore::ContextMenuClientGdk::copyImageToClipboard):
        (WebCore::ContextMenuClientGdk::searchWithGoogle):
        (WebCore::ContextMenuClientGdk::lookUpInDictionary):
        (WebCore::ContextMenuClientGdk::speak):
        (WebCore::ContextMenuClientGdk::stopSpeaking):
        * page/gdk/EventHandlerGdk.cpp:
        (WebCore::EventHandler::passMouseDownEventToWidget):
        (WebCore::EventHandler::eventActivatedView):
        (WebCore::EventHandler::passSubframeEventToSubframe):
        (WebCore::EventHandler::passWheelEventToWidget):
        (WebCore::EventHandler::createDraggingClipboard):
        * page/qt/EventHandlerQt.cpp:
        * page/qt/FrameQt.cpp:
        * platform/NotImplemented.h: Added.
        * platform/gdk/CursorGdk.cpp:
        (WebCore::Cursor::Cursor):
        * platform/gdk/EditorClientGdk.cpp:
        (WebCore::EditorClientGdk::shouldDeleteRange):
        (WebCore::EditorClientGdk::isContinuousSpellCheckingEnabled):
        (WebCore::EditorClientGdk::isGrammarCheckingEnabled):
        (WebCore::EditorClientGdk::spellCheckerDocumentTag):
        (WebCore::EditorClientGdk::shouldBeginEditing):
        (WebCore::EditorClientGdk::shouldEndEditing):
        (WebCore::EditorClientGdk::shouldInsertText):
        (WebCore::EditorClientGdk::shouldChangeSelectedRange):
        (WebCore::EditorClientGdk::shouldApplyStyle):
        (WebCore::EditorClientGdk::didBeginEditing):
        (WebCore::EditorClientGdk::respondToChangedContents):
        (WebCore::EditorClientGdk::respondToChangedSelection):
        (WebCore::EditorClientGdk::didEndEditing):
        (WebCore::EditorClientGdk::didWriteSelectionToPasteboard):
        (WebCore::EditorClientGdk::didSetSelectionTypesForPasteboard):
        (WebCore::EditorClientGdk::selectWordBeforeMenuEvent):
        (WebCore::EditorClientGdk::isEditable):
        (WebCore::EditorClientGdk::registerCommandForUndo):
        (WebCore::EditorClientGdk::registerCommandForRedo):
        (WebCore::EditorClientGdk::clearUndoRedoOperations):
        (WebCore::EditorClientGdk::canUndo):
        (WebCore::EditorClientGdk::canRedo):
        (WebCore::EditorClientGdk::undo):
        (WebCore::EditorClientGdk::redo):
        (WebCore::EditorClientGdk::shouldInsertNode):
        (WebCore::EditorClientGdk::pageDestroyed):
        (WebCore::EditorClientGdk::smartInsertDeleteEnabled):
        (WebCore::EditorClientGdk::toggleContinuousSpellChecking):
        (WebCore::EditorClientGdk::handleInputMethodKeypress):
        (WebCore::EditorClientGdk::textFieldDidBeginEditing):
        (WebCore::EditorClientGdk::textFieldDidEndEditing):
        (WebCore::EditorClientGdk::textDidChangeInTextField):
        (WebCore::EditorClientGdk::doTextFieldCommandFromEvent):
        (WebCore::EditorClientGdk::textWillBeDeletedInTextField):
        (WebCore::EditorClientGdk::textDidChangeInTextArea):
        * platform/gdk/FrameGdk.cpp:
        (WebCore::Frame::print):
        (WebCore::Frame::issueTransposeCommand):
        (WebCore::Frame::cleanupPlatformScriptObjects):
        (WebCore::Frame::dragImageForSelection):
        * platform/gdk/NotImplementedGdk.h: Removed.
        * platform/gdk/PopupMenuGdk.cpp:
        (WebCore::PopupMenu::PopupMenu):
        (WebCore::PopupMenu::~PopupMenu):
        (WebCore::PopupMenu::show):
        (WebCore::PopupMenu::hide):
        (WebCore::PopupMenu::updateFromElement):
        * platform/gdk/RenderThemeGdk.cpp:
        (WebCore::RenderThemeGdk::setCheckboxSize):
        (WebCore::RenderThemeGdk::setRadioSize):
        (WebCore::RenderThemeGdk::adjustTextFieldStyle):
        * platform/gdk/ScreenGdk.cpp:
        (WebCore::screenDepthPerComponent):
        (WebCore::screenIsMonochrome):
        (WebCore::screenRect):
        (WebCore::screenAvailableRect):
        * platform/gdk/ScrollViewGdk.cpp:
        (WebCore::ScrollView::update):
        (WebCore::ScrollView::addChild):
        (WebCore::ScrollView::removeChild):
        (WebCore::ScrollView::scrollRectIntoViewRecursively):
        (WebCore::ScrollView::inWindow):
        (WebCore::ScrollView::wheelEvent):
        (WebCore::ScrollView::updateScrollbars):
        (WebCore::ScrollView::updateScrollInfo):
        (WebCore::ScrollView::windowToContents):
        (WebCore::ScrollView::contentsToWindow):
        (WebCore::ScrollView::scrollbarUnderMouse):
        * platform/gdk/TemporaryLinkStubs.cpp:
        (FrameView::updateBorder):
        (WebCore::findNextWordFromIndex):
        (WebCore::currentTextBreakLocaleID):
        (ChromeClientGdk::chromeDestroyed):
        (ChromeClientGdk::windowRect):
        (ChromeClientGdk::setWindowRect):
        (ChromeClientGdk::pageRect):
        (ChromeClientGdk::scaleFactor):
        (ChromeClientGdk::focus):
        (ChromeClientGdk::unfocus):
        (ChromeClientGdk::createWindow):
        (ChromeClientGdk::createModalDialog):
        (ChromeClientGdk::show):
        (ChromeClientGdk::canRunModal):
        (ChromeClientGdk::runModal):
        (ChromeClientGdk::setToolbarsVisible):
        (ChromeClientGdk::toolbarsVisible):
        (ChromeClientGdk::setStatusbarVisible):
        (ChromeClientGdk::statusbarVisible):
        (ChromeClientGdk::setScrollbarsVisible):
        (ChromeClientGdk::scrollbarsVisible):
        (ChromeClientGdk::setMenubarVisible):
        (ChromeClientGdk::menubarVisible):
        (ChromeClientGdk::setResizable):
        (ChromeClientGdk::closeWindowSoon):
        (ChromeClientGdk::canTakeFocus):
        (ChromeClientGdk::takeFocus):
        (ChromeClientGdk::canRunBeforeUnloadConfirmPanel):
        (ChromeClientGdk::addMessageToConsole):
        (ChromeClientGdk::runBeforeUnloadConfirmPanel):
        (ChromeClientGdk::runJavaScriptAlert):
        (ChromeClientGdk::runJavaScriptConfirm):
        (ChromeClientGdk::runJavaScriptPrompt):
        (ChromeClientGdk::setStatusbarText):
        (ChromeClientGdk::shouldInterruptJavaScript):
        (ChromeClientGdk::tabsToLinks):
        (ChromeClientGdk::windowResizerRect):
        (ChromeClientGdk::addToDirtyRegion):
        (ChromeClientGdk::scrollBackingStore):
        (ChromeClientGdk::updateBackingStore):
        (PlugInInfoStore::createPluginInfoForPluginAtIndex):
        (PlugInInfoStore::pluginCount):
        (WebCore::PlugInInfoStore::supportsMIMEType):
        (WebCore::refreshPlugins):
        (SearchPopupMenu::saveRecentSearches):
        (SearchPopupMenu::loadRecentSearches):
        (SearchPopupMenu::SearchPopupMenu):
        (SearchPopupMenu::enabled):
        (FileChooser::FileChooser):
        (FileChooser::~FileChooser):
        (FileChooser::openFileChooser):
        (FileChooser::basenameForWidth):
        (ResourceHandle::willLoadFromCache):
        (ResourceHandle::loadsBlocked):
        (ResourceHandle::loadResourceSynchronously):
        (Icon::Icon):
        (Icon::~Icon):
        (Icon::newIconForFile):
        (Icon::paint):
        (Font::selectionRectForComplexText):
        (Font::drawComplexText):
        (Font::floatWidthForComplexText):
        (Font::offsetForPositionForComplexText):
        (CachedPage::close):
        (Editor::newGeneralClipboard):
        (Pasteboard::generalPasteboard):
        (Pasteboard::writeSelection):
        (Pasteboard::writeURL):
        (Pasteboard::writeImage):
        (Pasteboard::clear):
        (Pasteboard::canSmartReplace):
        (Pasteboard::documentFragment):
        (Pasteboard::plainText):
        (Pasteboard::Pasteboard):
        (Pasteboard::~Pasteboard):
        (ContextMenu::ContextMenu):
        (ContextMenu::~ContextMenu):
        (ContextMenu::appendItem):
        (ContextMenuItem::ContextMenuItem):
        (ContextMenuItem::~ContextMenuItem):
        (ContextMenuItem::releasePlatformDescription):
        (ContextMenuItem::type):
        (ContextMenuItem::setType):
        (ContextMenuItem::action):
        (ContextMenuItem::setAction):
        (ContextMenuItem::title):
        (ContextMenuItem::setTitle):
        (ContextMenuItem::platformSubMenu):
        (ContextMenuItem::setSubMenu):
        (ContextMenuItem::setChecked):
        (ContextMenuItem::setEnabled):
        (WebCore::supportedKeySizes):
        (WebCore::systemBeep):
        (WebCore::userIdleTime):
        * platform/graphics/cairo/GraphicsContextCairo.cpp:
        * platform/graphics/cairo/ImageBufferCairo.cpp:
        * platform/graphics/cairo/PathCairo.cpp:
        * platform/graphics/gdk/ImageGdk.cpp:
        * platform/graphics/qt/GraphicsContextQt.cpp:
        * platform/graphics/qt/IconQt.cpp:
        * platform/graphics/qt/ImageQt.cpp:
        * platform/network/gdk/ResourceHandleCurl.cpp:
        (WebCore::ResourceHandle::setDefersLoading):
        * platform/network/gdk/ResourceHandleManager.cpp:
        (WebCore::ResourceHandleManager::setupPUT):
        (WebCore::ResourceHandleManager::setupPOST):
        * platform/network/qt/ResourceHandleQt.cpp:
        * platform/qt/ClipboardQt.cpp:
        * platform/qt/CursorQt.cpp:
        * platform/qt/DragDataQt.cpp:
        * platform/qt/FileChooserQt.cpp:
        * platform/qt/MimeTypeRegistryQt.cpp:
        * platform/qt/PasteboardQt.cpp:
        * platform/qt/PlatformScrollBarQt.cpp:
        * platform/qt/PopupMenuQt.cpp:
        * platform/qt/ScrollViewQt.cpp:
        * platform/qt/TemporaryLinkStubs.cpp:
        * platform/qt/TextBoundaries.cpp:
        * platform/qt/WidgetQt.cpp:
        * platform/win/FontWin.cpp:
        * platform/win/TemporaryLinkStubs.cpp:
        * platform/wx/ClipboardWx.cpp:
        * platform/wx/FontWx.cpp:
        * platform/wx/ScrollViewWx.cpp:
        * platform/wx/SharedTimerWx.cpp:
        * platform/wx/TemporaryLinkStubs.cpp:

2007-05-27  Rob Buis  <buis@kde.org>

        Reviewed by Oliver.

        http://bugs.webkit.org/show_bug.cgi?id=13828
        x/y values on rootmost <svg> elements should be ignored

        Make sure that root-most <svg> elements do not take into account x/y.

        * ksvg2/svg/SVGSVGElement.cpp:
        (WebCore::SVGSVGElement::viewport):
        (WebCore::SVGSVGElement::getCTM):
        (WebCore::SVGSVGElement::getScreenCTM):
        * rendering/RenderSVGContainer.cpp:
        (WebCore::RenderSVGContainer::calcViewport):

2007-05-26  David Hyatt  <hyatt@apple.com>

        Fix for radar bug 5219562, PNG isn't displayed on SVG test suite.
        Improve <object> error handling so that it recovers properly when
        <td> is used inside it.

        Reviewed by olliej

        Added fast/invalid/td-inside-object.html

        * html/HTMLObjectElement.h:
        (WebCore::HTMLObjectElement::tagPriority):
        * html/HTMLParser.cpp:
        (WebCore::HTMLParser::handleError):
        * html/HTMLParserErrorCodes.cpp:
        (WebCore::htmlParserErrorMessageTemplate):
        * html/HTMLParserErrorCodes.h:

2007-05-26  David Hyatt  <hyatt@apple.com>

        Don't compare the "isset" variables in background layers, since they
        lead us to turn off the Aqua look incorrectly, even when the background
        matches the default.

        Reviewed by olliej

        * rendering/RenderStyle.cpp:
        (WebCore::BackgroundLayer::operator==):

2007-05-26  David Hyatt  <hyatt@apple.com>

        Improve the </p> -> <p></p> error message to not spew two errors.
        Fix a bug where errors reported inside document.write didn't get
        reported as such because of a mistake in the notation of SegmentedString.

        Reviewed by aroben

        * html/HTMLParser.cpp:
        (WebCore::HTMLParser::processCloseTag):
        * platform/SegmentedString.h:
        (WebCore::SegmentedSubstring::clear):

2007-05-26  David Hyatt  <hyatt@apple.com>

        Fix for bug 13887, percentage height block not sized correctly inside
        positioned percentage height containing block.

        Reviewed by mitz

        fast/block/positioning/complex-percentage-height.html

        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::calcPercentageHeight):

2007-05-26  Mitz Pettel  <mitz@webkit.org>

        Reviewed by Oliver Hunt.

        - finish fixing http://bugs.webkit.org/show_bug.cgi?id=13871
          Box shadow should not apply to Aqua-themed controls

        Covered by fast/forms/box-shadow-override.html

        I forgot to include adjustSliderThumbStyle in the previous patch and the
        test didn't detect it because of a bug introduced in r21739.

        * rendering/RenderThemeMac.h:
        * rendering/RenderThemeMac.mm:
        (WebCore::RenderThemeMac::adjustSliderThumbStyle):

2007-05-26  Mitz Pettel  <mitz@webkit.org>

        Reviewed by Hyatt.

        - fix http://bugs.webkit.org/show_bug.cgi?id=13876
          Box-Shadow disappears if shadow doesn't fit in the window size

        Tests: fast/repaint/box-shadow-h.html
               fast/repaint/box-shadow-v.html

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

2007-05-26  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Darin.

        http://bugs.webkit.org/show_bug.cgi?id=13605
        REGRESSION: Browser crashes when switching Kotoeri input modes

        The problem could no longer be reproduced with Kotoeri thanks to
        a fix in <http://trac.webkit.org/projects/webkit/changeset/21728>,
        but we still need to protect from invalid ranges passed from
        input methods.

        Test: editing/input/replace-invalid-range.html

        * page/mac/WebCoreFrameBridge.mm:
        (-[WebCoreFrameBridge selectNSRange:]): Added a null check.

2007-05-26  Darin Adler  <darin@apple.com>

        * platform/network/mac/ResourceResponseMac.mm:
        (WebCore::ResourceResponse::doUpdateResourceResponse):
        Alexey pointed out that I was wrong about object lifetime, so
        rolling this change out.

2007-05-26  Darin Adler  <darin@apple.com>

        Reviewed by Anders.

        * platform/network/mac/ResourceResponseMac.mm:
        (WebCore::ResourceResponse::doUpdateResourceResponse):
        Fixed code where a temporary String is used after destroyed.

2007-05-26  Mitz Pettel  <mitz@webkit.org>

        Reviewed by Darin.

        - http://bugs.webkit.org/show_bug.cgi?id=13842
          Simplify Color::light() and Color::dark()

        Not testable.

        * platform/graphics/Color.cpp:
        (WebCore::Color::light):
        (WebCore::Color::dark):

2007-05-26  Mitz Pettel  <mitz@webkit.org>

        Reviewed by Darin.

        - fix http://bugs.webkit.org/show_bug.cgi?id=13870
          RenderFrameSet should only allow frame and frameset children

        Covered by fast/frames/inline-object-inside-frameset.html

        * rendering/RenderFrame.h:
        (WebCore::RenderFrame::isFrame): Added.
        * rendering/RenderFrameSet.cpp:
        (WebCore::RenderFrameSet::paint): Removed check for inline objects that is
        no longer needed.
        (WebCore::RenderFrameSet::isChildAllowed): Added. Allows the child only
        if it is a frame or another frameset.
        * rendering/RenderFrameSet.h:
        * rendering/RenderObject.h:
        (WebCore::RenderObject::isFrame): Added.

2007-05-26  Mitz Pettel  <mitz@webkit.org>

        Reviewed by Darin.

        - http://bugs.webkit.org/show_bug.cgi?id=13871
          Box shadow should not apply to Aqua-themed controls

        Test: fast/forms/box-shadow-override.html

        * rendering/RenderTheme.cpp:
        (WebCore::RenderTheme::adjustCheckboxStyle):
        (WebCore::RenderTheme::adjustRadioStyle):
        * rendering/RenderThemeMac.h:
        * rendering/RenderThemeMac.mm:
        (WebCore::RenderThemeMac::adjustButtonStyle):
        (WebCore::RenderThemeMac::adjustMenuListStyle):
        (WebCore::RenderThemeMac::adjustSliderTrackStyle):
        (WebCore::RenderThemeMac::adjustSearchFieldStyle):
        (WebCore::RenderThemeMac::adjustSearchFieldCancelButtonStyle):
        (WebCore::RenderThemeMac::adjustSearchFieldDecorationStyle):
        (WebCore::RenderThemeMac::adjustSearchFieldResultsDecorationStyle):
        (WebCore::RenderThemeMac::adjustSearchFieldResultsButtonStyle):

2007-05-26  Holger Freyther  <zecke@selfish.org>

        Reviewed by Anders.

        * platform/gdk/FrameGdk.cpp: Catch up to make it compile
        (WebCore::FrameGdk::FrameGdk): The Settings is now owned by the Page

2007-05-25  Sam Weinig  <sam@webkit.org>

        Reviewed by Oliver of the Hunt.

        Fixed <rdar://problem/5230247> at least 43 xhtml tests fail in 
        Leopard because they are being interpreted as html

        Adds a work around for <rdar://problem/5230154> which explicitly
        sets local .xhtml files to have the MIME type application/xhtml+xml.

        * platform/network/mac/ResourceResponseMac.mm:
        (WebCore::ResourceResponse::doUpdateResourceResponse):

2007-05-25  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Darin Adler.

        Fixed <rdar://problem/5055182> The page cache has no global cap.
        
        Beefed up the PageCache class to track which HistoryItems are 
        cached, and decide how to evict old HistoryItems as new ones are
        added.

        * history/BackForwardList.cpp: Removed support for managing the page cache
        through the BackForwardList since this is deprecated in Mac's 
        WebBackForwardList, and doesn't exist on other platforms.
        
        Added a Page* back pointer so that Mac WebBackForwardList can still support 
        its deprecated API, using the new hotness. This isn't a big burden, since 
        Page is responsible for calling BackForwardList::close upon destruction, 
        anyway.

        * history/HistoryItem.cpp: Replaced CachedPage* with boolean that tells
        you whether you're in the page cache. This prevents us from having more
        than one persistent repository for cached pages.

        * history/PageCache.cpp: If you're playing along at home, this code is 
        the reason for the patch.

        * loader/FrameLoader.cpp: If you're playing along at home, the minuses in
        this file are the reason for the patch.
        
        Replaced call to FrameLoaderClient::loadedFromCachedPage with its one-line
        implementation because WebCore calling itself through WebKit is uncivilized.

        * page/Settings.cpp: Added support for removing a Page's HistoryItems from
        the page cache.

2007-05-25  Mitz Pettel  <mitz@webkit.org>

        Reviewed by Darin.

        - fix http://bugs.webkit.org/show_bug.cgi?id=13869
          Many leaks seen on buildbot after r21735

        - fix another regression from r21739: ::-webkit-slider-thumb style not
          applied.

        Test: fast/forms/slider-thumb-stylability.html

        * rendering/RenderSlider.cpp:
        (WebCore::RenderSlider::setStyle):
        (WebCore::RenderSlider::createThumbStyle):

2007-05-25  Justin Garcia  <justin.garcia@apple.com>

        Reviewed by Harrison.

        <rdar://problem/5228141> 
        REGRESSION: Can't apply style to selection that ends after an image

        * editing/ApplyStyleCommand.cpp:
        (WebCore::ApplyStyleCommand::applyInlineStyle):
        Use range compliant equivalents when creating the Range
        used to compute pastEndNode(), otherwise Range's constructor
        ASSERTs and pastEndNode() returns null. Added a testcase.
        If the incoming Range is collapsed at [br, 0], callers want
        the style to be applied to the br, so expand the Range to include
        it.  We got away without expanding before because pastEndNode
        of a Range from [br, 0] to [br, 0] is the node after the br.
        Using range compliant equivalents changed that. There's already
        test coverage for this change.
        Changed while loop termination for finding the end of a run 
        so that we don't process pastEnd.  end.node() may now be 
        non-atomic and we'd blow past it. There's already test
        coverage for this change.

2007-05-25  Beth Dakin  <bdakin@apple.com>

        Rubber stamped by Hyatt

        Adding an ASSERT for good measure.

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

2007-05-25  Kevin McCullough  <kmccullough@apple.com>
 
        Reviewed by Geoff.

        - <rdar://problem/5183523> REGRESSION: Excel: Worksheet tabs in spreadsheet saved as web page don't work 
        - Change load to check the URL as well as the referrer since it is possilbe to have a referrer which limits a load even thought the URL would allow it.  There is a bug about how we need to re-evaluate the whole load architecture: <rdar://problem/5227992> Rethink canLoad() to have a consistent and comprehensive architecture.

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::loadSubframe):
        (WebCore::FrameLoader::load):
        (WebCore::FrameLoader::canLoad):
        * loader/FrameLoader.h:

2007-05-25  Anders Carlsson  <andersca@apple.com>

        Reviewed by Brady.

        <rdar://problem/5209536>
        http://bugs.webkit.org/show_bug.cgi?id=13757
        REGRESSION: Leaks seen on buildbot after r21497.
        
        Fix multipart data loading so it works like Tiger Safari. When one part of a multipart connection has been loaded,
        move the subresource loader from the subresource loaders set and into a special multipart subresource loader set. This set 
        is not considered when asking a document loader if it's currently loading. 
                
        * loader/DocumentLoader.cpp:
        (WebCore::DocumentLoader::stopLoading):
        Always stop the multipart subresource loaders here.
        
        (WebCore::DocumentLoader::subresourceLoaderFinishedLoadingOnePart):
        New function that moves the loader from m_subresourceLoaders to m_multipartSubresourceLoaders and updates the document loader's state.
        
        * loader/ProgressTracker.cpp:
        (WebCore::ProgressTracker::incrementProgress):
        If a progress item already exists, reuse it. This can happen in some rare circumstances when dealing with multipart data.
        
        * loader/SubresourceLoader.cpp:
        (WebCore::SubresourceLoader::didReceiveResponse):
        Call subresourceLoaderFinishedLoadingOnePart if the response is multipart.

2007-05-25  Patti Hoa  <patti@apple.com>

        Reviewed by Tim Hatcher.

        <rdar://problem/4918397> Exception raise inspecting note contents in the background
        
        * bridge/mac/WebCoreAXObject.mm:
        (-[WebCoreAXObject accessibilityDescription]):
        Only allow asking the attachmentView for description if attachmentView supports this description attribute

2007-05-25  Beth Dakin  <bdakin@apple.com>

        Reviewed by Oliver and Hyatt.

        Fix for <rdar://problem/5228363> REGRESSION: In Mail, attempting to 
        create a To Do results in a crash

        This regressed with r21635. Now that -boundingBox updates layout if 
        it is needed, we infinitely recurse when Mail draws a custom 
        highlight. The fix is to put a guard around laying out the render 
        tree.

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

2007-05-25  Patti Hoa <patti@apple.com>

        Reviewed by John Sullivan.
        
        <rdar://problem/5221986> selection in web areas doesn't seem to be working for text navigation
        
        * bridge/mac/WebCoreAXObject.mm:
        (-[WebCoreAXObject accessibilityIsAttributeSettable:]):
        Fixed up incorrect string comparison for AXSelectedTextMarkerRange ax attribute so 
        this attribute can actually announce its settability. 

2007-05-25  Darin Adler  <darin@apple.com>

        Reviewed by Alice.

        - fix <rdar://problem/5228048> REGRESSION: In a new Mail message, the caret isn't
          immediately inserted when tabbing into or clicking in the message body

        This latent problem was uncovered by <http://trac.webkit.org/projects/webkit/changeset/21476>,
        which removed some code that did extra work whenever setCaretVisible made the caret visible.

        * page/Frame.cpp: (WebCore::Frame::selectionLayoutChanged): Call invalidateCaretRect
        when turning the caret on. All other call sites that touched m_caretPaint were doing
        this, but this was not.

2007-05-25  Darin Adler  <darin@apple.com>

        Reviewed by Harrison.

        * DerivedSources.make: Tweaked spelling.

2007-05-25  Mitz Pettel  <mitz@webkit.org>

        Reviewed by Darin.

        - fix http://bugs.webkit.org/show_bug.cgi?id=13872
          REGRESSION: An empty search field can have a cancel button

        Test: fast/forms/search-cancel-button-style-sharing.html

        * rendering/RenderTextControl.cpp:
        (WebCore::RenderTextControl::createCancelButtonStyle): Prevented sharing of
        the cancel button style between search fields that share style, because
        each search field mutates the style to show and hide the cancel button.

2007-05-25  David Harrison  <harrison@apple.com>

        Reviewed by Kevin and Geoff.

        * DerivedSources.make:
        Add an inclusion guard for CSSGrammar.h and XPathGrammar.h, because older versions of bison do not
        
        * css/maketokenizer:
        Unconditionally define the flex basic types that are not part of newer versions of flex. Was
        only needed on Linux. Now needed on Mac OS 10.5, and is OK to do on 10.4.9.

2007-05-25  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Darin Adler.
        
        Moved JavaScriptCore-related pending public API to public API.

        Moved -JSObject

        * bindings/objc/WebScriptObjectPendingPublic.h: from here
        * bindings/objc/WebScriptObject.h: to here
        * bindings/objc/WebScriptObject.mm: and out of its temporary category

2007-05-25  Mitz Pettel  <mitz@webkit.org>

        Reviewed by Darin.

        - fix http://bugs.webkit.org/show_bug.cgi?id=13767
          REGRESSION: Multipart image documents are garbled

        Test: http/tests/multipart/invalid-image-data-standalone.html

        * loader/DocumentLoader.cpp:
        (WebCore::DocumentLoader::isLoadingMultipartContent): Added.
        * loader/DocumentLoader.h:
        * loader/ImageDocument.cpp:
        (WebCore::ImageTokenizer::finish): If the image is multipart, make a copy
        of the current part instead of using the resource data, which is going to be
        overwritten by the next part.
        * loader/MainResourceLoader.h:
        (WebCore::MainResourceLoader::isLoadingMultipartContent): Added.

2007-05-25  Anders Carlsson  <andersca@apple.com>

        Fix no-svg build.
        
        * bindings/js/kjs_html.cpp:
        (KJS::HTMLElementFunction::callAsFunction):

2007-05-25  Anders Carlsson  <andersca@apple.com>

        Reviewed by Mitz.

        <rdar://problem/5226788> After resizing the window larger than the image, hovering over the image still shows magnify glass
        
        One part of the bug was already fixed by my previous commit. This fixes the case where the window is sized so the image fit
        after it has been zoomed in.
        
        * loader/ImageDocument.cpp:
        (WebCore::ImageDocument::windowSizeChanged):

2007-05-25  John Sullivan  <sullivan@apple.com>

        Reviewed by Anders and Tim

        - WebCore change for: 
          <rdar://problem/5226000> REGRESSION: In Gmail and Mail, a hang occurs when attempting to grammar/spellcheck a word in a reply 

        * editing/Editor.cpp:
        (WebCore::findFirstBadGrammarInRange):
        Use the more obvious way to check whether a range is empty. In this case the more obvious way
        would also have caused no problem to occur. Also added an assertion. Though this change is
        enough to fix the symptom of the bug, the real fix is in WebKit.

2007-05-25  Anders Carlsson  <andersca@apple.com>

        Reviewed by Darin (Sorta).

        * loader/ImageDocument.cpp:
        (WebCore::ImageDocument::restoreImageSize):
        Use removeProperty here.

2007-05-25  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Darin Adler.

        Some cleanup to Cache while Fixing <rdar://problem/5055182> The page cache 
        has no global cap.
        
        * loader/Cache.cpp: Removed destructor to help identify this class as a
        singleton.

        * loader/Cache.h: Made constructor and destructor private to match the
        singleton model of PageCache.
        
        Put structs related to Cache inside its declaration to fix some namespace
        conflicts I had while writing my patch. (They don't exist anymore, but
        I figured this might help future development.)

2007-05-24  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Darin Adler.

        Fixed a bug with Settings where a number of different objects held bare 
        Settings* data members, even though the Page owns the Settings object and 
        deletes it upon destruction.

        Added NULL checks since the Page can be deleted before the frame/document.

        * page/Settings.cpp: Removed reliance on setNeedsReapplyStylesForSettingsChange.

        * css/cssstyleselector.cpp: CSSStyleSelector was the worst offender. It 
        held a number of back pointers that were not guaranteed. I removed the 
        Settings*, Frame*, and FrameView* back pointers, but others could probably 
        go, too. I replaced them with a single Document* pointer, which is guaranteed
        because the Document owns the CSSStyleSelector.

        * page/Page.cpp: Removed setNeedsReapplyStylesForSettingsChange -- the 
        Settings object is now a proper subcontroller of Page, so it doesn't need
        to use a global table to find its page anymore. Also, this function
        confusingly implied that the Frames in a page can have heterogeneous settings,
        which is not true.

2007-05-25  David Hyatt  <hyatt@apple.com>

        Make sure -webkit-border-fit accounts for padding as well as border.

        Reviewed by aroben

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::borderFitAdjust):

2007-05-25  David Hyatt  <hyatt@apple.com>

        Rework line numbering (again).  This time I finally think I have
        it right for all the document.write insanity that can occur.

        Reviewed by aroben

        * html/HTMLParser.cpp:
        (WebCore::HTMLParser::reportErrorToConsole):
        * html/HTMLParserErrorCodes.cpp:
        (WebCore::htmlParserDocumentWriteMessage):
        * html/HTMLParserErrorCodes.h:
        * html/HTMLTokenizer.cpp:
        (WebCore::HTMLTokenizer::write):
        * html/HTMLTokenizer.h:
        (WebCore::HTMLTokenizer::lineNumberPtr):
        (WebCore::HTMLTokenizer::processingContentWrittenByScript):
        * platform/SegementedSring.cpp
        (WebCore::SegmentedString::setExcludeLineNumbers):
        * platform/SegmentedString.h:
        (WebCore::SegmentedSubstring::SegmentedSubstring):
        (WebCore::SegmentedSubstring::clear):
        (WebCore::SegmentedSubstring::excludeLineNumbers):
        (WebCore::SegmentedSubstring::setExcludeLineNumbers):
        (WebCore::SegmentedString::excludeLineNumbers):
        (WebCore::SegmentedString::advance):

2007-05-24  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Adam Roben.

        Added a debug-only CachedPage counter. This helped me track down an SVG 
        timer bug in my recent page cache work.
                
        * history/CachedPage.cpp:

2007-05-24  David Hyatt  <hyatt@apple.com>

        Improve <form> error reporting to catch <form>s inside table parts.
        Tweak the wording of some of the error messages to be a bit better.

        Reviewed by olliej

        * html/HTMLParser.cpp:
        (WebCore::HTMLParser::insertNode):
        (WebCore::HTMLParser::processCloseTag):
        (WebCore::HTMLParser::popBlock):
        * html/HTMLParserErrorCodes.cpp:
        (WebCore::htmlParserErrorMessageTemplate):
        * html/HTMLParserErrorCodes.h:

2007-05-24  Rob Buis  <buis@kde.org>

        Reviewed by Hyatt.

        http://bugs.webkit.org/show_bug.cgi?id=4104
        first-letter not updating style with hover
        http://bugs.webkit.org/show_bug.cgi?id=13169
        css-formatted first letter won't hide dynamically

        Update first letter when RenderBlock::setStyle is called. 

        * css/cssstyleselector.cpp:
        (WebCore::CSSStyleSelector::checkOneSelector):
        * dom/Document.cpp:
        (WebCore::Document::Document):
        (WebCore::Document::createElement):
        * dom/Document.h:
        (WebCore::Document::usesFirstLetterRules):
        (WebCore::Document::setUsesFirstLetterRules):
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::setStyle):
        (WebCore::RenderBlock::updateFirstLetter):

2007-05-24  Mitz Pettel  <mitz@webkit.org>

        Reviewed by Darin.

        - fix http://bugs.webkit.org/show_bug.cgi?id=13800
          REGRESSION: Moving a slider moves another unrelated slider

        Test: fast/forms/slider-thumb-shared-style.html

        RenderSlider mutates the thumb's style, therefore it must not be shared
        with another slider's thumb, a situation that could occur if the sliders
        themselves shared style.

        * rendering/RenderSlider.cpp:
        (WebCore::RenderSlider::createThumbStyle): Always use a private copy for
        the thumb style.

2007-05-24  Adele Peterson  <adele@apple.com>

        Reviewed by Darin.

        Fix for <rdar://problem/5211921> Form values sometimes get transposed (iGoogle)

        Test: fast/history/redirect-load-no-form-restoration.html

        * history/HistoryItem.cpp:
        (WebCore::HistoryItem::setURL): Clear the document state when the url changes for a HistoryItem.
        (WebCore::HistoryItem::isCurrentDocument): Added. Compares the HistoryItem url to the document's url.  This might not be the best way to do this, but it works for now.
        * history/HistoryItem.h:
        * loader/FrameLoader.cpp: (WebCore::FrameLoader::saveDocumentState): Only set the document (and form) state if the document is current for the history item.

2007-05-24  Mitz Pettel  <mitz@webkit.org>

        Reviewed by Adele.

        - fix http://bugs.webkit.org/show_bug.cgi?id=13857
          REGRESSION: onChange function applied to select element executes twice when focus is set

        Test: fast/forms/select-double-onchange.html

        * html/HTMLSelectElement.cpp:
        (WebCore::HTMLSelectElement::menuListOnChange): Changed to update m_lastOnChangeIndex
        before dispatching the change event to avoid reentrancy.

2007-05-24  Darin Adler  <darin@apple.com>

        Reviewed by Hyatt.

        - fix <rdar://problem/5226451> REGRESSION (21618): Mail block quotes
          are missing the lines on the side

        This patch fixes three problems:

        1) makes the "skip canLoad check" boolean also skip the check
           that prevents any loads while the document is in provisional
           state; this is the proximate cause of the bug

        * loader/SubresourceLoader.cpp: (WebCore::SubresourceLoader::create):
        Don't check the frame's state if skipCanLoadCheck is true.

        2) moves the "skip canLoad check" boolean to the Request object;
           the old implementation would cause that flag to affect the
           new request we served, which might not be the resource with
           that flag set

        3) fixes error-handling code path that would leak requests

        * html/HTMLImageLoader.cpp: (WebCore::HTMLImageLoader::updateFromElement):
        Pass false to the CachedImage constructor to indicate we are not making
        this object for the cache.

        * loader/Cache.cpp:
        (WebCore::createResource): Pass true to the CachedImage constructor to
        indicate we are making this object for the cache.
        (WebCore::Cache::requestResource): Add new code that assumes the object
        will already have the inCache bit set, and that will delete the object
        and return 0 if the cache is disabled and the load failed.

        * loader/CachedImage.h:
        * loader/CachedImage.cpp: (WebCore::CachedImage::CachedImage):
        Added a forCache boolean parameter. Always false for the constructor
        that's only used outside the cache code, and passed in as a boolean
        for the constructor that's used both in cache and outside cache.

        * loader/CachedResource.h:
        * loader/CachedResource.cpp:
        (WebCore::CachedResource::CachedResource): Added a forCache boolean
        parameter that determines the initial state of the m_inCache flag.
        This is needed to prevent a resource from being destroyed if an
        error occurs during the initial load.

        * loader/DocLoader.cpp:
        (WebCore::DocLoader::requestCSSStyleSheet): Added FIXME.
        (WebCore::DocLoader::setLoadInProgress): Added null check.

        * loader/Request.h:
        * loader/Request.cpp: (WebCore::Request::Request):
        Added a shouldSkipCanLoadCheck boolean here, since we need to track
        this for each request.

        * loader/loader.h:
        * loader/loader.cpp:
        (WebCore::Loader::load): Pass the skipCanLoadCheck boolean to the
        Request constructor rather than to the servePendingRequests function.
        (WebCore::Loader::servePendingRequests): Add a loop so we can handle
        cases where the request fails immediately without leaking the request
        and thinking that we're loading forever.

2007-05-24  David Hyatt  <hyatt@apple.com>

        Add error reporting for residual style.

        Reviewed by aroben

        * html/HTMLParser.cpp:
        (WebCore::HTMLParser::handleResidualStyleCloseTagAcrossBlocks):
        (WebCore::HTMLParser::reopenResidualStyleTags):
        * html/HTMLParserErrorCodes.cpp:
        (WebCore::htmlParserErrorMessageTemplate):
        * html/HTMLParserErrorCodes.h:

2007-05-24  David Hyatt  <hyatt@apple.com>

        Report <script/> as a warning instead of an error for now, since we
        actually do close it.  (Sigh.)

        Reviewed by beth

        * html/HTMLParser.cpp:
        (WebCore::HTMLParser::parseToken):
        (WebCore::HTMLParser::reportErrorToConsole):
        * html/HTMLParserErrorCodes.cpp:
        (WebCore::htmlParserErrorMessageTemplate):
        (WebCore::isWarning):
        * html/HTMLParserErrorCodes.h:

2007-05-24  David Hyatt  <hyatt@apple.com>

        Add error reporting for the </p> -> <p></p> quirk.

        Add error reporting when a stray close tag is encountered with no
        corresponding open tag.

        Reviewed by adele

        * html/HTMLParser.cpp:
        (WebCore::HTMLParser::HTMLParser):
        (WebCore::HTMLParser::processCloseTag):
        (WebCore::HTMLParser::popBlock):
        * html/HTMLParser.h:
        (WebCore::HTMLParser::popBlock):
        * html/HTMLParserErrorCodes.cpp:
        (WebCore::htmlParserErrorMessageTemplate):
        * html/HTMLParserErrorCodes.h:

2007-05-24  Kevin McCullough  <kmccullough@apple.com>

        Reviewed by.

        - Rolling back change to fix the build until I have a good fix for data: urls.

        * ChangeLog:
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::load):
        (WebCore::FrameLoader::open):
        * platform/String.cpp:

2007-05-24  David Hyatt  <hyatt@apple.com>

        Add two more error messages to the HTMLParser.

        Report when the </br> -> <br> quirk is triggered.

        Also report whenever the broken XML self-closing tag syntax is used on
        tags that can actually have an end tag (either optional or required).

        Reviewed by aroben

        * html/HTMLParser.cpp:
        (WebCore::HTMLParser::parseToken):
        * html/HTMLParserErrorCodes.cpp:
        (WebCore::htmlParserErrorMessageTemplate):
        * html/HTMLParserErrorCodes.h:
        (WebCore::):
        * html/HTMLTokenizer.cpp:
        (WebCore::HTMLTokenizer::parseTag):
        * html/HTMLTokenizer.h:
        (WebCore::Token::reset):

2007-05-24  Sam Weinig  <sam@webkit.org>

        Reviewed by Anders.

        Rename JSHTMLFrameSetCustom.cpp to JSHTMLFrameSetElementCustom.cpp
        for consistency.

        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSHTMLFrameSetCustom.cpp: Removed.
        * bindings/js/JSHTMLFrameSetElementCustom.cpp: Added.

2007-05-24  David Hyatt  <hyatt@apple.com>

        Fix for <rdar://problem/5208440> (13753)

        REGRESSION: Raw text needs to be pulled outside of tables

        Reviewed by aroben

        * html/HTMLParser.cpp:
        (WebCore::HTMLParser::handleError):
        * html/HTMLTableColElement.cpp:
        (WebCore::HTMLTableColElement::checkDTD):
        * html/HTMLTableElement.cpp:
        (WebCore::HTMLTableElement::checkDTD):
        * html/HTMLTableRowElement.cpp:
        (WebCore::HTMLTableRowElement::checkDTD):
        * html/HTMLTableSectionElement.cpp:
        (WebCore::HTMLTableSectionElement::checkDTD):

2007-05-24  Mitz Pettel  <mitz@webkit.org>

        Reviewed by Darin.

        - fix http://bugs.webkit.org/show_bug.cgi?id=13837
          Separator in new <select> widget disappears when block element with border is in document.

        Test: fast/forms/menulist-separator-painting.html

        * platform/graphics/cg/GraphicsContextCG.cpp:
        (WebCore::GraphicsContext::drawConvexPolygon): Changed this function to
        actually do both filling and stroking when needed, even though all existing
        callers set the stroke to none.
        * rendering/RenderThemeMac.mm:
        (WebCore::RenderThemeMac::paintMenuListButton): Added calls to set the stroke
        style and thickness when painting the arrows and the separator.

2007-05-24  Timothy Hatcher  <timothy@apple.com>

        Reviewed by Sam Weinig.

        Remove the OBJC_NEW_PROPERTIES #ifdef and only export the new @property syntax.

        * bindings/objc/DOMObject.h:
        * bindings/scripts/CodeGeneratorObjC.pm:

2007-05-24  Sam Weinig  <sam@webkit.org>

        Reviewed by Anders.

        Uncomment HTMLFramesSetElement constructor now that it exists.

        * page/DOMWindow.idl:

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

        Try fixing the buildbot build.
        
        * loader/ImageDocument.cpp:
        (WebCore::ImageDocument::resizeImageToFit):
        (WebCore::ImageDocument::imageClicked):

2007-05-24  Sam Weinig  <sam@webkit.org>

        Reviewed by Darin.

        Patch for http://bugs.webkit.org/show_bug.cgi?id=13853
        Autogenerate the JS bindings for the HTMLFrameSetElement

        * DerivedSources.make:
        * WebCore.pro:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSHTMLElementWrapperFactory.cpp:
        * bindings/js/JSHTMLFrameSetCustom.cpp: Added.
        (WebCore::JSHTMLFrameSetElement::canGetItemsForName):
        (WebCore::JSHTMLFrameSetElement::nameGetter):
        * bindings/js/kjs_html.cpp:
        (KJS::):
        (KJS::JSHTMLElement::classInfo):
        (KJS::JSHTMLElement::accessors):
        (KJS::JSHTMLElement::getOwnPropertySlot):
        * bindings/js/kjs_html.h:
        (KJS::JSHTMLElement::):
        * html/HTMLFrameSetElement.idl:

2007-05-24  Zack Rusin  <zrusin@trolltech.com>

        Reviewed by andersca

        Fixing check for incorrent font size - it should
        check fixed not normal.

        * page/Settings.cpp:
        (WebCore::Settings::setDefaultFixedFontSize):

2007-05-24  Mitz Pettel  <mitz@webkit.org>

        Speculative buildbot build fix.

        * css/cssstyleselector.cpp:
        (WebCore::CSSStyleSelector::applyProperty):

2007-05-24  Adam Roben  <aroben@apple.com>

        Made Chrome::addMessageToConsole more flexible

        addMessageToConsole now takes two additional parameters to specify the
        message source (HTML, JS, CSS, XML) and level (error, warning, log). To
        maintain our old behavior, all current messages were given
        JSMessageSource and ErrorMessageLevel parameters. Messages matching
        these characteristics are passed up to the ChromeClient.

        Reviewed by Hyatt.

        * bindings/js/JSCustomXPathNSResolver.cpp:
        (WebCore::JSCustomXPathNSResolver::lookupNamespaceURI):
        * bindings/js/kjs_events.cpp:
        (KJS::JSAbstractEventListener::handleEvent):
        * bindings/js/kjs_proxy.cpp:
        (WebCore::KJSProxy::evaluate):
        * bindings/js/kjs_window.cpp:
        (KJS::Window::isSafeScript):
        (KJS::ScheduledAction::execute):
        * html/HTMLParser.cpp:
        (WebCore::HTMLParser::reportErrorToConsole):
        * ksvg2/misc/SVGDocumentExtensions.cpp:
        (WebCore::SVGDocumentExtensions::reportWarning):
        (WebCore::SVGDocumentExtensions::reportError):
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::reportLocalLoadFailed):
        * page/Chrome.cpp:
        (WebCore::Chrome::addMessageToConsole):
        * page/Chrome.h:
        (WebCore::):
        * xml/xmlhttprequest.cpp:
        (WebCore::XMLHttpRequest::setRequestHeader):

2007-05-24  David Hyatt  <hyatt@apple.com>

        Rework how HTML handles line numbering so that it is not fooled by
        \r without a following \n and so that document.write doesn't lead
        to line numbering confusion.

        Reviewed by aroben

        * html/HTMLParser.cpp:
        (WebCore::HTMLParser::reportErrorToConsole):
        * html/HTMLTokenizer.cpp:
        (WebCore::HTMLTokenizer::processListing):
        (WebCore::HTMLTokenizer::parseSpecial):
        (WebCore::HTMLTokenizer::parseComment):
        (WebCore::HTMLTokenizer::parseServer):
        (WebCore::HTMLTokenizer::parseProcessingInstruction):
        (WebCore::HTMLTokenizer::parseText):
        (WebCore::HTMLTokenizer::parseEntity):
        (WebCore::HTMLTokenizer::parseTag):
        (WebCore::HTMLTokenizer::write):
        (WebCore::HTMLTokenizer::processToken):
        (WebCore::HTMLTokenizer::setSrc):
        * html/HTMLTokenizer.h:
        (WebCore::HTMLTokenizer::lineNumberPtr):
        * html/HTMLViewSourceDocument.cpp:
        (WebCore::HTMLViewSourceDocument::addLine):
        * loader/TextDocument.cpp:
        (WebCore::TextTokenizer::write):
        * platform/SegmentedString.cpp:
        (WebCore::SegmentedString::SegmentedString):
        (WebCore::SegmentedString::operator=):
        (WebCore::SegmentedString::clear):
        * platform/SegmentedString.h:
        (WebCore::SegmentedString::SegmentedString):
        (WebCore::SegmentedString::advance):
        (WebCore::SegmentedString::escaped):

2007-05-23  David Hyatt  <hyatt@apple.com>

        Make the delete/InsertRows/Cells methods as well as the rowIndex method
        able to work properly even when whitespace or comment nodes are present.

        Reviewed by aroben

        fast/table/rowindex-comment-nodes.html

        * html/HTMLTableRowElement.cpp:
        (WebCore::HTMLTableRowElement::rowIndex):
        (WebCore::HTMLTableRowElement::insertCell):
        (WebCore::HTMLTableRowElement::deleteCell):
        * html/HTMLTableSectionElement.cpp:
        (WebCore::HTMLTableSectionElement::insertRow):
        (WebCore::HTMLTableSectionElement::deleteRow):

2007-05-23  David Hyatt  <hyatt@apple.com>

        <optgroup> should allow <script> and text nodes inside it, just like
        <select> does.

        Reviewed by aroben

        fast/forms/stuff-on-my-optgroup.html

        * html/HTMLOptGroupElement.cpp:
        (WebCore::HTMLOptGroupElement::checkDTD):
        * html/HTMLSelectElement.cpp:
        (WebCore::HTMLSelectElement::checkDTD):

2007-05-23  David Hyatt  <hyatt@apple.com>

        Framesets should allow whitespace text nodes as children.

        Reviewed by aroben

        * html/HTMLFrameSetElement.cpp:
        (WebCore::HTMLFrameSetElement::checkDTD):

2007-05-24  Mark Rowe  <mrowe@apple.com>

        Fix the Qt build after r21685.

        * platform/qt/CursorQt.cpp:
        (WebCore::notAllowedCursor):
        (WebCore::zoomInCursor):
        (WebCore::zoomOutCursor):

2007-05-23  Alp Toker  <alp.toker@collabora.co.uk>

        Reviewed by Adam.

        Fix the gdk build following changes in r21685.

        * platform/gdk/CursorGdk.cpp:
        (WebCore::zoomInCursor):
        (WebCore::zoomOutCursor):

2007-05-23  David Hyatt  <hyatt@apple.com>

        Fix for <rdar://problem/5222611> REGRESSION: Paint ordering problems at
        http://buymeasoda.com/dev/issues/image_onload/image_onload.html

        Clamp z-index so that values that exceed maxint (or that are below minint)
        are clamped to those values.

        Reviewed by darin

        * css/cssstyleselector.cpp:
        (WebCore::CSSStyleSelector::applyProperty):

2007-05-23  Mitz Pettel  <mitz@webkit.org>

        Reviewed by David Hyatt.

        - fix http://bugs.webkit.org/show_bug.cgi?id=13563
          REGRESSION: Crash loading message in Yahoo! Mail

        Tests: fast/css/stale-style-selector-crash-1.html
               fast/css/stale-style-selector-crash-2.html

        * dom/Document.cpp:
        (WebCore::Document::Document): Initialize the m_didCalculateStyleSelector
        flag to 'false'.
        (WebCore::Document::updateStyleSelector): Do not bail out if we have ever
        calculated a non-trivial style selector, even if at the moment we are
        pending style sheets. We could have calculated a non-trivial selector
        already either because at some point there were no pending style sheets
        (so the currently pending ones were added dynamically) or because we were
        forced to do a layout ignoring pending style sheets. Either way, once
        there is a style selector, we need to keep it up to date, otherwise we can
        crash under recalcStyle() during updateRendering() or simply not recalculate
        style correctly for dynamic changes.
        (WebCore::Document::recalcStyleSelector): Set m_didCalculateStyleSelector
        to 'true' when creating a new style selector.
        * dom/Document.h:

2007-05-23  Anders Carlsson  <andersca@apple.com>

        Reviewed by Adam.

        <rdar://problem/5224749> Show a zoom/unzoom cursor for resizable image documents
        
        * WebCore.xcodeproj/project.pbxproj:
        Install the zoom cursors.
        
        * loader/ImageDocument.cpp:
        (WebCore::ImageDocument::resizeImageToFit):
        Set the cursor to the zoom in cursor.
        
        (WebCore::ImageDocument::restoreImageSize):
        If the image fits, reset the cursor. Otherwise, set it to the zoom in cursor.

2007-05-23  Darin Adler  <darin@apple.com>

        Reviewed by Hyatt.

        - fix problems where unrendered nodes were affecting on plain text serialization

        * editing/TextIterator.cpp:
        (WebCore::TextIterator::advance): Don't call handleXXX functions or exitNode for
        nodes without renderers.
        (WebCore::shouldEmitNewlineAfterNode): Only consider rendered nodes when deciding
        if this is the last node in the document.

2007-05-23  Anders Carlsson  <andersca@apple.com>

        Reviewed by Geoff.

        <rdar://problem/3663808> Resize large images to fit in the browser window
        
        * WebCore.exp:
        Add new settings method.
        
        * loader/ImageDocument.cpp:
        (WebCore::ImageEventListener::ImageEventListener):
        New class that handles resize events and click events and forwards them to the image document.
        
        (WebCore::ImageTokenizer::ImageTokenizer):
        (WebCore::ImageTokenizer::writeRawData):
        (WebCore::ImageTokenizer::finish):
        (WebCore::ImageDocument::ImageDocument):
        (WebCore::ImageDocument::createDocumentStructure):
        (WebCore::ImageDocument::cachedImage):
        Let the ImageDocument class keep track of its document structure.
        
        (WebCore::ImageDocument::scale):
        Returns the scale that should be used when resizing the image.
        
        (WebCore::ImageDocument::resizeImage):
        Update the image size.
        
        (WebCore::ImageDocument::imageClicked):
        Toggle between resized and not resized. When restoring the size, scroll the image so that the area under
        the mouse stays the same.
        
        (WebCore::ImageDocument::imageChanged):
        When the image size is known, resize the image if needed.
        
        (WebCore::ImageDocument::restoreImageSize):
        Restore the image size.
        
        (WebCore::ImageDocument::imageNeedsResizing):
        Return whether the image is too big for its window or not.
        
        (WebCore::ImageDocument::windowSizeChanged):
        Called when the window's size changes. Determine if the window fits or not and resize it if it doesn't fit.
        
        (WebCore::ImageEventListener::handleEvent):
        Forward events to the image document.
        
        * page/Settings.cpp:
        (WebCore::Settings::Settings):
        (WebCore::Settings::setEnableAutomaticImageResizing):
        * page/Settings.h:
        (WebCore::Settings::enableAutomaticImageResizing):
        Add new setting.
        
2007-05-23  Anders Carlsson  <andersca@apple.com>

        Reviewed by Darin.

        Add -webkit-zoom-in and -webkit-zoom-out cursors.
        
        * Resources/zoomInCursor.png: Added.
        * Resources/zoomOutCursor.png: Added.
        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::CSSComputedStyleDeclaration::getPropertyCSSValue):
        * css/CSSValueKeywords.in:
        * page/EventHandler.cpp:
        (WebCore::selectCursor):
        * platform/Cursor.h:
        * platform/mac/CursorMac.mm:
        (WebCore::zoomInCursor):
        (WebCore::zoomOutCursor):
        * rendering/RenderStyle.h:
        (WebCore::):

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

        Reviewed by Darin.

        Part one of patch for http://bugs.webkit.org/show_bug.cgi?id=13830
        Auto-generate JS DOM bindings for HTMLDocument and most of the rest
        of HTMLElement

        - Just the HTMLElement part.

        * bindings/js/kjs_html.cpp:
        (KJS::JSHTMLElement::getValueProperty):
        (KJS::JSHTMLElement::putValueProperty):
        * bindings/js/kjs_html.h:
        (KJS::JSHTMLElement::):
        * html/HTMLElement.idl:

2007-05-22  Kevin McCullough  <kmccullough@apple.com>

        Reviewed by Darin.

        - rdar://problem/5183523
        - We now check the document's URL to see if it can load a resource in the case of a URL click, instead of checking the referrer, which is blank for local files.

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::load):
        (WebCore::FrameLoader::open):
        * platform/PlatformString.h:
        (WebCore::debugPrintString):

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

        Reviewed by Darin.

        Part two of patch for http://bugs.webkit.org/show_bug.cgi?id=13830
        Auto-generate JS DOM bindings for HTMLDocument and most of the rest
        of HTMLElement

        - Just the HTMLDocument part.

        * WebCore.pro:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSHTMLDocumentCustom.cpp: Added.
        (WebCore::JSHTMLDocument::canGetItemsForName):
        (WebCore::JSHTMLDocument::nameGetter):
        (WebCore::JSHTMLDocument::all):
        (WebCore::JSHTMLDocument::setAll):
        (WebCore::JSHTMLDocument::location):
        (WebCore::JSHTMLDocument::setLocation):
        (WebCore::JSHTMLDocument::open):
        (WebCore::writeHelper):
        (WebCore::JSHTMLDocument::write):
        (WebCore::JSHTMLDocument::writeln):
        (WebCore::JSHTMLDocument::clear):
        * bindings/js/kjs_dom.cpp:
        (KJS::toJS):
        * bindings/js/kjs_dom.h:
        * bindings/js/kjs_html.cpp:
        * bindings/js/kjs_html.h:
        * bindings/objc/DOMPrivate.h:
        * bindings/scripts/CodeGeneratorJS.pm: Add [Deletable] property
        for Document.all and fix HasOverridingNameGetter to allow correct
        prototype chain
        * dom/Document.cpp:
        (WebCore::Document::plugins): adds alias to embeds() for bindings
        * dom/Document.h:
        * html/HTMLDocument.cpp:
        (WebCore::HTMLDocument::width):
        (WebCore::HTMLDocument::height):
        (WebCore::HTMLDocument::dir):
        (WebCore::HTMLDocument::setDir):
        (WebCore::HTMLDocument::designMode):
        (WebCore::HTMLDocument::setDesignMode):
        (WebCore::HTMLDocument::bgColor):
        (WebCore::HTMLDocument::setBgColor):
        (WebCore::HTMLDocument::fgColor):
        (WebCore::HTMLDocument::setFgColor):
        (WebCore::HTMLDocument::alinkColor):
        (WebCore::HTMLDocument::setAlinkColor):
        (WebCore::HTMLDocument::linkColor):
        (WebCore::HTMLDocument::setLinkColor):
        (WebCore::HTMLDocument::vlinkColor):
        (WebCore::HTMLDocument::setVlinkColor):
        (WebCore::HTMLDocument::captureEvents):
        (WebCore::HTMLDocument::releaseEvents):
        * html/HTMLDocument.h:
        * html/HTMLDocument.idl:

2007-05-23  David Hyatt  <hyatt@apple.com>

        Fix for <rdar://problem/5221838> REGRESSION (r21581): no content in idisk
        window at mac.com.

        Back out the change to make self-closed <script/> into a Dashboard quirk
        only.

        Reviewed by aroben

        * html/HTMLTokenizer.cpp:
        (WebCore::HTMLTokenizer::parseTag):

2007-05-23  Patti  <patti@apple.com>

        Reviewed by David Harrison.

        <rdar://problem/5078453> AXNext/PrevLineEndTextMarkerForTextMarker returns kAXErrorNoValue for attachment range
        
        Floating objects, such as aligned images, are not included as part of any line.  So when the given 
        text marker is on the floating object, the returned line edge cannot be found and asserts are fired.
        In addition, this paints an inconsistent text layout (in the accessibility sense) of where the floating 
        object resides.  Character/word methods report floating object at the beginning of the text line(s).  Yet
        line methods never present floating objects anywhere.  
        To fix this, the ax line methods will now do more checking to ensure floating object nodes are included
        when determining the line range/position. That way, assistive apps won't get stuck using the line methods 
        to read line-by-line

        * bridge/mac/WebCoreAXObject.mm:
        (updateAXLineStartForVisiblePosition):
        Added a helper method to adjust line start position to account for floating objects
        (-[WebCoreAXObject doAXLeftLineTextMarkerRangeForTextMarker:]):
        (-[WebCoreAXObject doAXRightLineTextMarkerRangeForTextMarker:]):
        (-[WebCoreAXObject doAXNextLineEndTextMarkerForTextMarker:]):
        (-[WebCoreAXObject doAXPreviousLineStartTextMarkerForTextMarker:]):
        Fixed up line routines to include floating object nodes in line position calculation.
        startOfLine/endOLine may return null for position next to a floating position.  So now there's extra checks to prevent
        returning null line position/ranges back to AX.


2007-05-23  Simon Hausmann  <hausmann@kde.org>

        Reviewed by Zack, discussed also with Lars.

        Make it possible to have per-QWebPage network interface
        implementations.

        * platform/network/qt/ResourceHandleQt.cpp:
        (WebCore::ResourceHandle::start): Pass the page's network interface to
        the network manager.

2007-05-23  Rob Buis  <buis@kde.org>

        Reviewed by Dave Hyatt.

        http://bugs.webkit.org/show_bug.cgi?id=13174
        line-height in font shorthand does not override a previously stated line-height property

        Make sure line-height is calculated against definite font-size and
        uses the last set line-height, ie. directly or through font shorthand.

        * css/cssstyleselector.cpp:
        (WebCore::CSSStyleSelector::styleForElement):
        (WebCore::CSSStyleSelector::pseudoStyleForElement):
        (WebCore::CSSStyleSelector::applyDeclarations):
        (WebCore::CSSStyleSelector::applyProperty):
        * css/cssstyleselector.h:

2007-05-23  Lars Knoll <lars@trolltech.com>

        Reviewed by Zack and Valgrind

        Initialize variable.

        * platform/qt/PlatformMouseEventQt.cpp:
        (WebCore::PlatformMouseEvent::PlatformMouseEvent):

2007-05-23  Rob Buis  <buis@kde.org>

        Reviewed by Darin.

        http://bugs.webkit.org/show_bug.cgi?id=13784
        REGRESSION (r13744-13750): Crash with empty gradient when drawing to canvas

        Fix crash by testing for zero stops, and returning transparent black
        in this case.

        * html/CanvasGradient.cpp:
        (WebCore::CanvasGradient::getColor):

2007-05-23  Rob Buis  <buis@kde.org>

        Reviewed by Darin.

        http://bugs.webkit.org/show_bug.cgi?id=13801
        Crash when loading nonexisting symbol

        Check for referenced element and when not found just return.

        * ksvg2/svg/SVGUseElement.cpp:
        (WebCore::SVGUseElement::buildPendingResource):

2007-05-22  Sam Weinig  <sam@webkit.org>

        Rubber stamped by Adam.

        Fix license.

        * bindings/js/JSHTMLAnchorElementCustom.cpp:

2007-05-22  Sam Weinig  <sam@webkit.org>

        Reviewed by Adam.

        Patch for http://bugs.webkit.org/show_bug.cgi?id=13833
        Add ObjC DOM binding for HTMLMarqeeElement

        - Also adds missing DOMHTMLFramePrivate.

        * DerivedSources.make:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/objc/DOM.mm:
        (WebCore::createElementClassMap):
        * bindings/objc/DOMHTML.h:
        * bindings/objc/DOMInternal.h:
        * bindings/objc/DOMPrivate.h:
        * bindings/objc/PublicDOMInterfaces.h:

2007-05-22  Justin Garcia  <justin.garcia@apple.com>

        Reviewed by darin, who found the fix independently.

        http://bugs.webkit.org/show_bug.cgi?id=13804
        REGRESSION(r21611): Several new layout test pixel failures (misspelling markers)
        
        r21611 exposed a bug in the way removeMarkers computes
        the end of the range to remove markers from.  It also
        introduced a bug: removeMarkers expects a startOffset
        and a length, not a startOffset and an endOffset (added 
        a layout test).

        * dom/Document.cpp:
        (WebCore::Document::removeMarkers): The other removeMarkers
        expects a startOffset and a length, not a startOffset and
        an endOffset.
        (WebCore::Document::removeMarkers): Fixed the endOffset
        from length and startOffset calculation.

2007-05-22  David Hyatt  <hyatt@apple.com>

        Fix for bug 13802, background colors can't be reset to default
        color.  Fix the value cssText method to do the right thing for background
        and background-position values.

        Reviewed by beth

        fast/dom/background-shorthand-csstext.html

        * css/CSSInitialValue.h:
        (WebCore::CSSInitialValue:::m_implicit):
        (WebCore::CSSInitialValue::isImplicitInitialValue):
        * css/CSSMutableStyleDeclaration.cpp:
        (WebCore::CSSMutableStyleDeclaration::getPropertyValue):
        (WebCore::CSSMutableStyleDeclaration::getLayeredShorthandValue):
        * css/CSSMutableStyleDeclaration.h:
        * css/CSSValue.h:
        (WebCore::CSSValue::isImplicitInitialValue):
        * css/cssparser.cpp:
        (WebCore::CSSParser::parseValue):
        (WebCore::CSSParser::parseBackgroundShorthand):
        (WebCore::CSSParser::parseShorthand):

2007-05-22  Darin Adler  <darin@apple.com>

        Reviewed by Geoff.

        - fix <rdar://problem/5215830> REGRESSION: ebay.com layout is wrong

        The code on ebay was looking for the "document" property on a iframe.
        We changed that to be the ownerDocument rather than the contentDocument,
        which was not what ebay was expecting. The best fix seems to be removing
        the document property altogether.

        Test: fast/dom/iframe-document.html

        * bindings/js/kjs_html.h: Remove ElementDocument.
        * bindings/js/kjs_html.cpp: (KJS::JSHTMLElement::getValueProperty): Ditto.

2007-05-22  Adele Peterson  <adele@apple.com>

        Reviewed by Darin.

        A little cleanup from my last checkin.

        * page/Chrome.h: Formatting change.
        * page/mac/ChromeMac.mm: Fixed copyright.

2007-05-22  Adele Peterson  <adele@apple.com>

        Reviewed by Darin.

        Fix for http://bugs.webkit.org/show_bug.cgi?id=13796
        Crash in [NSInputContext currentInputContext] when you click on this map

        This is another case of <rdar://problem/5171145> Safari crashed closing tab in NSInputContext updateInputContexts

        Test: fast/frames/frame-display-none-focus.html

        * WebCore.xcodeproj/project.pbxproj: Added ChromeMac.mm
        * page/Chrome.h:
        * page/mac/ChromeMac.mm: Added.
        (WebCore::Chrome::focusNSView): Moved code from Widget::setFocus so it can be used whenever we need to make a view the first responder.
        * page/mac/EventHandlerMac.mm: (WebCore::EventHandler::focusDocumentView): Calls focusNSView.
        * platform/mac/WidgetMac.mm: (WebCore::Widget::setFocus): Calls focusNSView.

2007-05-22  Justin Garcia  <justin.garcia@apple.com>

        Reviewed by darin
        
        <rdar://problem/4875189> 
        List is deleted when replacing contents with Chinese/Japanese characters

        * editing/htmlediting.cpp:
        (WebCore::isSpecialElement): Lists are no longer special.
        They can be removed by removing their content and then 
        then hitting delete inside of the empty list item that's 
        left over. Even when that list item is the first thing 
        in the editable region.

2007-05-22  Darin Adler  <darin@apple.com>

        Reviewed by Tim Hatcher.

        - fix <rdar://problem/5206089> REGRESSION: hovering over amazon.com "product categories"
          tab makes page content disappear

        The contentWindow property was doing a cross-frame security check, but it shouldn't.
        Window objects are responsible for protecting themselves from cross-frame activity.
        Because contentWindow returned undefined, we then ended up setting visibility on the
        body of the main frame to "hidden".

        No layout test yet. When we make cross-domain tests, we should include this one.

        * html/HTMLFrameElement.idl: Removed CheckFrameSecurity attribute from contentWindow.
        * html/HTMLIFrameElement.idl: Ditto.

2007-05-22  Justin Garcia  <justin.garcia@apple.com>

        Reviewed by oliver

        <rdar://problem/5213963>
        REGRESSION(r21467): Active selection remains in text field after clicking on a button

        * page/EventHandler.cpp:
        (WebCore::EventHandler::dispatchMouseEvent): Call
        FocusController::setFocusedNode, because Document::setFocusedNode
        no longer clears the selection.
        Begin passing the new focused frame to 
        FocusController::setFocusedNode, because when the 
        new focus node is null, the selection should only be 
        cleared if the focused frame isn't changing.
        (WebCore::Element::focus): Begin passing the new focused
        frame.
        (WebCore::Element::blur): Ditto.
        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::focus): Ditto.
        * html/HTMLTextAreaElement.cpp:
        (WebCore::HTMLTextAreaElement::focus): Ditto.
        * page/Frame.cpp:
        (WebCore::Frame::setFocusedNodeIfNeeded): Ditto.
        * page/FocusController.cpp:
        (WebCore::clearSelectionIfNeeded): Take in the new
        focused frame.  If it's not changing, don't clear the
        selection.
        (WebCore::FocusController::setFocusedNode): Take
        in the new focused frame.
        * page/FocusController.h:

2007-05-22  Marius Bugge Monsen  <mbm@trolltech.com>

        Reviewed by Zack.

        Implement some more functions in ClipboardQt.

        * platform/qt/ClipboardQt.cpp:
        (WebCore::ClipboardQt::ClipboardQt):
        (WebCore::ClipboardQt::getData):
        (WebCore::ClipboardQt::setData):
        (WebCore::ClipboardQt::types):

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

        Reviewed by Sam.
        
        Fix for http://bugs.webkit.org/show_bug.cgi?id=13789 
        -- SVGLocatable::getScreenCTM() faulty
        
        Needed to update SVGLength to handle the case where the SVGElement is
        not the root document element -- we do this by falling back on the 
        renderer for the context.
        
        For <svg> elements embedded as mixed content in xhtml we consider the
        absolutePosition of the parent to be the origin for the <svg> element.

        * ksvg2/svg/SVGLength.cpp:
        (WebCore::SVGLength::PercentageOfViewport):
        * ksvg2/svg/SVGSVGElement.cpp:
        (WebCore::SVGSVGElement::getScreenCTM):

2007-05-21  Timothy Hatcher  <timothy@apple.com>

        Reviewed by Adam.

        <rdar://problem/5084400> -[DOMRange lineBoxRects] returns an empty array when the DOM nodes have just been created

        Do a updateLayoutIgnorePendingStylesheets before asking the Node or Range for it's box rects.

        * bindings/objc/DOM.mm:
        (-[DOMNode boundingBox]):
        (-[DOMNode lineBoxRects]):
        (-[DOMRange boundingBox]):
        (-[DOMRange lineBoxRects]):

2007-05-21  Sam Weinig  <sam@webkit.org>

        Reviewed by George Staikos.

        Fix Qt build.

        * WebCore.pro: add missing IDL files.

2007-05-21  Sam Weinig  <sam@webkit.org>

        Reviewed by Darin.

        Patch for http://bugs.webkit.org/show_bug.cgi?id=13803
        Autogenerate the JS bindings for the HTMLMarqueeElement.

        * DerivedSources.make:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSHTMLElementWrapperFactory.cpp:
        * bindings/js/kjs_css.cpp:
        (KJS::DOMCSSRule::getOwnPropertySlot): Fix possible null pointer issue.
        (KJS::DOMCSSRule::put): Fix possible null pointer issue.
        * bindings/js/kjs_html.cpp:
        (KJS::):
        (KJS::JSHTMLElement::classInfo):
        (KJS::JSHTMLElement::accessors):
        (KJS::JSHTMLElement::getOwnPropertySlot): Fix null pointer issue.
        (KJS::HTMLElementFunction::callAsFunction):
        (KJS::JSHTMLElement::put):
        * bindings/js/kjs_html.h:
        (KJS::JSHTMLElement::):
        * html/HTMLMarqueeElement.cpp:
        (WebCore::HTMLMarqueeElement::start):
        (WebCore::HTMLMarqueeElement::stop):
        * html/HTMLMarqueeElement.h: Add start() and stop() functions.
        * html/HTMLMarqueeElement.idl: Added.
        * page/DOMWindow.idl: Add marquee constructor.

2007-05-21  Adele Peterson  <adele@apple.com>

        Fix by Darin, reviewed by me.

        Fix for <rdar://problem/5171145> Safari crashed closing tab in NSInputContext updateInputContexts

        * platform/mac/WidgetMac.mm:
        (WebCore::safeRemoveFromSuperview): Added. If the view is the window's first responder, then 
         set the window's first responder to nil so we don't leave the window pointing to a view that's no longer in it.
        (WebCore::Widget::setFocus): Don't attempt to focus the view if it has no window.
        (WebCore::Widget::removeFromSuperview): Call safeRemoveFromSuperview.
        (WebCore::Widget::afterMouseDown): ditto.

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

        Make a line gutter backdrop so that tiny view source docs don't look
        bad.

        Reviewed by aroben

        * css/view-source.css:
        * html/HTMLViewSourceDocument.cpp:
        (WebCore::HTMLViewSourceDocument::createContainingTable):

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

        Make sure to distinguish between links to internal resources and
        real links (anchors) in view source mode.

        Reviewed by aroben

        * css/view-source.css:
        * html/HTMLViewSourceDocument.cpp:
        (WebCore::HTMLViewSourceDocument::addViewSourceToken):
        (WebCore::HTMLViewSourceDocument::addLink):
        * html/HTMLViewSourceDocument.h:

2007-05-21  Sam Weinig  <sam@webkit.org>

        Reviewed by Adam and Darin.

        Patch for http://bugs.webkit.org/show_bug.cgi?id=13791
        Autogenerate the JS bindings for the HTMLIFrameElement and HTMLFrameElement.

        * DerivedSources.make:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSHTMLAnchorElementCustom.cpp:
        * bindings/js/JSHTMLElementWrapperFactory.cpp:
        * bindings/js/kjs_html.cpp:
        (KJS::):
        (KJS::JSHTMLElement::classInfo):
        (KJS::JSHTMLElement::accessors):
        (KJS::HTMLElementFunction::callAsFunction):
        * bindings/js/kjs_html.h:
        (KJS::JSHTMLElement::):
        * bindings/scripts/CodeGeneratorJS.pm:
        * html/HTMLFrameElement.idl:
        * html/HTMLFrameElementBase.cpp:
        (WebCore::HTMLFrameElementBase::location):
        * html/HTMLFrameElementBase.h:
        * html/HTMLFrameOwnerElement.h:
        (WebCore::HTMLFrameOwnerElement::contentWindow):
        * html/HTMLIFrameElement.idl:
        * page/DOMWindow.idl:

2007-05-21  Lars Knoll <lars@trolltech.com>

        Reviewed by Zack.

        Remove the ResourceHandleManager class, it is now part of 
        QWebNetworkInterface. Adapt ResourceHandle to the new way 
        of things.

        * WebCore.pro:
        * platform/network/ResourceHandleInternal.h:
        (WebCore::ResourceHandleInternal::ResourceHandleInternal):
        * platform/network/qt/ResourceHandleManagerKDE.cpp: Removed.
        * platform/network/qt/ResourceHandleManagerKDE.h: Removed.
        * platform/network/qt/ResourceHandleManagerQt.cpp: Removed.
        * platform/network/qt/ResourceHandleManagerQt.h: Removed.
        * platform/network/qt/ResourceHandleQt.cpp:
        (WebCore::ResourceHandle::~ResourceHandle):
        (WebCore::ResourceHandle::start):
        (WebCore::ResourceHandle::cancel):

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

        Second half of fix for 13793, make sure rules=groups works properly with
        spanning colgroups.

        Also make sure colgroups get an actual span of 1 (instead of incorrectly
        giving them a span of 0).

        Reviewed by mitz

        fast/table/colgroup-spanning-groups-rules.html

        * html/HTMLTableColElement.cpp:
        (WebCore::HTMLTableColElement::HTMLTableColElement):
        * rendering/RenderTable.cpp:
        (WebCore::RenderTable::colElement):
        * rendering/RenderTable.h:
        * rendering/RenderTableCell.cpp:
        (WebCore::RenderTableCell::collapsedLeftBorder):
        (WebCore::RenderTableCell::collapsedRightBorder):

2007-05-20  David Hyatt  <hyatt@apple.com>

        Half of a fix for 13793, make sure rules=groups and border behave properly
        together.

        Reviewed by mitz

        No tests added, two Mozilla table tests now pass that failed before.

        * html/HTMLTableElement.cpp:
        (WebCore::HTMLTableElement::getSharedCellDecl):

2007-05-20  Brady Eidson <beidson@apple.com>

        Reviewed by Geoose Garen

        <rdar://problem/4758919> - Incorrect favicon shown for URL after going back

        When restoring a cached page, we'd try to kick off the icon load for it, which ended up causing 
        shenanigans with the icon url -> page url mapping.  

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::endIfNotLoading): Only try an icon load if we're not restoring from the page cache
        (WebCore::FrameLoader::startIconLoader): Added helpful logging that helped me track this down
        (WebCore::FrameLoader::commitIconURLToIconDatabase): Ditto (and fixed a comment typo)

        * loader/icon/IconLoader.cpp:
        (WebCore::IconLoader::stopLoading): Don't null out the ResourceLoader here, as clearLoadingState() does that
        (WebCore::IconLoader::finishLoading): Added helpful logging that helped me track this down


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

        Reviewed by Oliver Hunt.

        - fix <rdar://problem/5193416> REGRESSION: Selection on large pages extremely slow

        * dom/Document.cpp: (WebCore::Document::removeMarkers): Added an early exit for the common
        case where there are no markers. Changed code to iterate over all the nodes in the range
        instead of using TextIterator, which is more efficient.
        
        * page/Frame.cpp: (WebCore::Frame::respondToChangedSelection): Added checks for editable,
        so we don't bother doing work related to spell checking and grammar checking when changing
        the selection in non-editable text. Also rearranged the code so we only compute the old
        word boundaries and sentence boundaries when actually needed, and don't do the sentence
        range checks unless grammar checking is enabled.

        * platform/TextBreakIteratorICU.cpp:
        (WebCore::setUpIterator): Don't take a locale parameter. Always pass in currentTextBreakLocaleID.
        (WebCore::characterBreakIterator): Removed local parameter.
        (WebCore::wordBreakIterator): Ditto.
        (WebCore::lineBreakIterator): Ditto.
        (WebCore::sentenceBreakIterator): Ditto.

        * platform/mac/TextBreakIteratorInternalICUMac.mm:
        (WebCore::getTextBreakLocale): Broke out the code to actually get the locale.
        (WebCore::currentTextBreakLocaleID): This function now handles only the caching and calls
        getTextBreakLocale to actually figure it out.

        * editing/visible_units.cpp: Added lots of FIXME comments, but no code change.

2007-05-20  Adam Treat  <adam@staikos.net>

        Add -f to cp to deal with some obscure build environments.

        Reviewed by George Staikos.

        * move-js-headers.sh:

2007-05-20  Adam Treat  <adam@staikos.net>

        Add missing include for auto_ptr

        Reviewed by George Staikos.

        * platform/graphics/ImageBuffer.h:

2007-05-19  David Hyatt  <hyatt@apple.com>

        Fix for bug 13785, O(n^2) counter creation.

        Reviewed by darin

        * rendering/RenderCounter.cpp:
        (WebCore::findPlaceForCounter):
        (WebCore::RenderCounter::originalText):

2007-05-19  Mitz Pettel  <mitz@webkit.org>

        Reviewed by Dave Hyatt.

        - fix http://bugs.webkit.org/show_bug.cgi?id=12729
          box-shadow disappears when scrolling a div that it falls on/under

        Tests: fast/repaint/box-shadow-dynamic.html
               fast/repaint/box-shadow-h.html
               fast/repaint/box-shadow-v.html

        * rendering/InlineFlowBox.cpp:
        (WebCore::InlineFlowBox::placeBoxesHorizontally): Factor in box shadow.
        (WebCore::InlineFlowBox::placeBoxesVertically): Ditto.
        (WebCore::InlineFlowBox::paint): Account for box shadow when checking if
        the damage rect intersects.
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::overflowHeight): For overflow areas, when asked
        for the "exterior" overflow, add box shadow overflow.
        (WebCore::RenderBlock::overflowWidth): Ditto.
        (WebCore::RenderBlock::overflowLeft): Ditto.
        (WebCore::RenderBlock::overflowTop): Ditto.
        (WebCore::RenderBlock::overflowRect): Ditto.
        (WebCore::RenderBlock::layoutBlock): Factor box shadow into visual overflow.
        * rendering/RenderFlexibleBox.cpp:
        (WebCore::RenderFlexibleBox::layoutBlock): Ditto.
        * rendering/RenderFlow.cpp:
        (WebCore::RenderFlow::lowestPosition): For overflow areas, when asked for
        the "exterior" extreme position, add box shadow.
        (WebCore::RenderFlow::rightmostPosition): Ditto.
        (WebCore::RenderFlow::leftmostPosition): Ditto.
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::calculateRects): Avoid clipping out box shadow.
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::repaintAfterLayoutIfNeeded): Make sure to paint
        the box shadow when an edge with a shadow moves.
        (WebCore::RenderObject::adjustRectForOutlineAndShadow): Helper function
        that expands a given rectangle to encompass outline and box shadow.
        (WebCore::RenderObject::absoluteOutlineBox): Changed to include box shadow.
        * rendering/RenderObject.h:

2007-05-19  Mitz Pettel  <mitz@webkit.org>

        Reviewed by Dave Hyatt.

        - fix http://bugs.webkit.org/show_bug.cgi?id=13783
          REGRESSION (r21120): Frame resizers not repainted properly when dragged

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

2007-05-19  Mitz Pettel  <mitz@webkit.org>

        Reviewed by Darin.

        - fix http://bugs.webkit.org/show_bug.cgi?id=13774
          REGRESSION: Crash emailing blog entry using Google Reader

        Test: fast/table/stale-grid-crash.html

        * rendering/RenderTable.cpp:
        (WebCore::RenderTable::recalcSections): Made const and replaced
        setNeedsLayout(true) with an assertion that the table is already
        marked for layout.
        (WebCore::RenderTable::sectionAbove): Added call to recalcSectionsIfNeeded().
        (WebCore::RenderTable::sectionBelow): Ditto.
        (WebCore::RenderTable::cellAbove): Ditto.
        (WebCore::RenderTable::cellBelow): Ditto.
        (WebCore::RenderTable::cellBefore): Ditto.
        (WebCore::RenderTable::cellAfter): Ditto.
        * rendering/RenderTable.h:
        Made some private member variables which are used in section recalc mutable.
        (WebCore::RenderTable::setNeedsSectionRecalc): Moved the call to
        setNeedsLayout() from recalcSections() into here, because I made
        recalcSections() const.
        (WebCore::RenderTable::recalcSectionsIfNeeded): Made const.

2007-05-19  Mitz Pettel  <mitz@webkit.org>

        Reviewed by Darin.

        - http://bugs.webkit.org/show_bug.cgi?id=13320
          rounded corners with drop shadows are really slow

        Test for a rendering bug fixed by this patch:
            fast/box-shadow/border-radius-big.html

        No test for the performance ingredient.

        * platform/graphics/GraphicsContext.cpp:
        (WebCore::GraphicsContext::addRoundedRectClip): Made cross-platform.
        Changed to use a single clipping path. If all the radii cannot be
        accommodated, clips to a rect.
        (WebCore::GraphicsContext::clipOutRoundedRect): Changed to use a single
        clipping path. If all the radii cannot be accommodated, clips out a rect.
        * platform/graphics/GraphicsContext.h: Added clipOut(const Path&).
        * platform/graphics/Path.cpp:
        (WebCore::Path::createRoundedRectangle): Added. Returns a rounded rectangle
        with the specified radii. If all the radii cannot be accommodated, returns
        a rectangular path.
        * platform/graphics/Path.h:
        * platform/graphics/cairo/GraphicsContextCairo.cpp:
        (WebCore::GraphicsContext::clipOut): Added.
        * platform/graphics/cg/GraphicsContextCG.cpp:
        (WebCore::GraphicsContext::fillRoundedRect): Changed to use a single path.
        (WebCore::GraphicsContext::clipOut): Added.
        * platform/graphics/qt/GraphicsContextQt.cpp:
        (WebCore::GraphicsContext::clipOut): Added.

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

        Reviewed by Mitz.

        Test: fast/frames/inline-object-inside-frameset.html
        
        http://bugs.webkit.org/show_bug.cgi?id=13771
        Assertion failure ASSERT(m_layer) when running Hamachi fuzz tester

        Don't paint inline objects.
        
        * rendering/RenderFrameSet.cpp:
        (WebCore::RenderFrameSet::paint):

2007-05-19  David Hyatt  <hyatt@apple.com>

        Add support for plain text MIME types (CSS/JS/TXT) to view source mode.
        CSS/JS will eventually tokenize via their own special tokenizers so that
        they can also be syntax-highlighted, but for now just treat them as
        plain text.

        Reviewed by aroben

        * dom/DOMImplementation.cpp:
        (WebCore::DOMImplementation::createDocument):
        * html/HTMLViewSourceDocument.cpp:
        (WebCore::HTMLViewSourceDocument::HTMLViewSourceDocument):
        (WebCore::HTMLViewSourceDocument::createTokenizer):
        (WebCore::HTMLViewSourceDocument::createContainingTable):
        (WebCore::HTMLViewSourceDocument::addViewSourceText):
        (WebCore::HTMLViewSourceDocument::addViewSourceToken):
        * html/HTMLViewSourceDocument.h:
        * loader/TextDocument.cpp:
        (WebCore::TextTokenizer::TextTokenizer):
        (WebCore::TextTokenizer::write):
        * loader/TextDocument.h:
        (WebCore::TextTokenizer::checkBuffer):

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

        Fix a glitch in view source mode attribute names.

        * html/HTMLViewSourceDocument.cpp:
        (WebCore::HTMLViewSourceDocument::addViewSourceToken):

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

        "Linkify" view source mode links.

        Reviewed by andersca

        * css/view-source.css:
        * html/HTMLViewSourceDocument.cpp:
        (WebCore::HTMLViewSourceDocument::addViewSourceToken):
        (WebCore::HTMLViewSourceDocument::addSpanWithClassName):
        (WebCore::HTMLViewSourceDocument::addLink):
        * html/HTMLViewSourceDocument.h:

2007-05-18  Oliver Hunt  <oliver@apple.com>

        Reviewed by Sam

        No longer need to pass HTMLImageElement and HTMLImageLoader on to WebKit
        Need to expose CachedResourceClient constructor

        * WebCore.exp:
        * WebCore.xcodeproj/project.pbxproj:

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

        Fix for <rdar://problem/5214338> REGRESSION: / mishandled in 
        HTML tokenization (13780).

        Reviewed by ggaren

        * html/HTMLTokenizer.cpp:
        (WebCore::Token::addAttribute):
        (WebCore::HTMLTokenizer::parseTag):

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

        Reviewed by Maciej

        http://bugs.webkit.org/show_bug.cgi?id=12681 and
        <rdar://problem/5166149> - window.open() causes server to be hit twice

        This regressed in http://trac.webkit.org/projects/webkit/changeset/14637
        That patch was to fix broken behavior when opening an already existant window.
        The unfortunate side effect was to cause the server to be hit twice.  
        Once during the call to frame->loader()->createWindow(), and again via a 
        scheduled redirection.

        I decided to restore the original de-facto behavior by making the new window
        open via a scheduled redirection - there is a FIXME that was already here that
        explains the reason why we have to do it this way for now.

        Additionally, there were two distinct places that had their own logic to open
        a new window - the logic for window.open() and the logic for 
        window.showModalDialog().  The logic was almost identical so I condensed them
        into one utility function that takes a flag to handle the slight difference.

        A layout test is not possible at this time since it would involve capturing 
        server logs (the 1st connection does not exist long enough to result in any
        delegate callbacks).  That task is documented in 
        http://bugs.webkit.org/show_bug.cgi?id=13769

        * bindings/js/kjs_window.cpp:
        (KJS::createWindow): Merged the two slightly different versions of "creating a window" 
          logic here.  For the modal dialog case the load is an immediate call to changeLocation(),
          which is triggered by the "immediate" flag, and the other cases load via scheduleLocationChange()
        (KJS::showModalDialog): Call createWindow()
        (KJS::WindowFunc::callAsFunction): Handle frame targets of _top or _parent immediately and call 
          createWindow() for all others

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

        Reviewed by Geoff.

        Autogenerate the JS bindings for the HTMLTableElement, HTMLTableCaptionElement,
        HTMLTableCellElement, HTMLTableColElement, HTMLTableRowElement, HTMLTableSectionElement.

        * DerivedSources.make:
        * WebCore.pro:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSHTMLElementWrapperFactory.cpp:
        (WebCore::createJSHTMLWrapper):
        * bindings/js/kjs_html.cpp:
        (KJS::):
        (KJS::JSHTMLElement::classInfo):
        (KJS::JSHTMLElement::accessors):
        (KJS::HTMLElementFunction::callAsFunction):
        * bindings/js/kjs_html.h:
        (KJS::JSHTMLElement::):
        * html/HTMLTableCaptionElement.idl:
        * html/HTMLTableCellElement.idl:
        * html/HTMLTableColElement.idl:
        * html/HTMLTableElement.idl:
        * html/HTMLTableRowElement.idl:
        * html/HTMLTableSectionElement.idl:
        * page/DOMWindow.idl:

2007-05-18  Oliver Hunt  <oliver@apple.com>

        Reviewed by Sam.

        Fix for <rdar://problem/5211122> DRT crash below
        SVGTimer::applyAnimations when page cache is enabled 
        (SVG animation timers do not properly cancel themselves)

        There were still a few paths in the SVG Animation code
        that could cause timers to be created and used.  This 
        patch inserts addition SVG_EXPERIMENTAL blocks to prevent
        these timers from being used.

        * ksvg2/misc/SVGDocumentExtensions.cpp:
        (WebCore::SVGDocumentExtensions::startAnimations):
        * ksvg2/misc/SVGTimer.cpp:
        (WebCore::SVGTimer::animationsByElement):
        (WebCore::SVGTimer::applyAnimations):
        (WebCore::SVGTimer::notifyAll):
        (WebCore::SVGTimer::addNotify):
        (WebCore::SVGTimer::removeNotify):
        * ksvg2/misc/TimeScheduler.cpp:
        (WebCore::TimeScheduler::addTimer):
        (WebCore::TimeScheduler::connectIntervalTimer):
        (WebCore::TimeScheduler::disconnectIntervalTimer):
        (WebCore::TimeScheduler::startAnimations):
        (WebCore::TimeScheduler::toggleAnimations):
        (WebCore::TimeScheduler::timerFired):
        * ksvg2/svg/SVGAnimationElement.h:

2007-05-18  Marius Bugge Monsen <mbm@trolltech.com>

        Reviewed by Zack Rusin. 

        Return a valid pointer to a Clipboard object
        from newGeneralClipboard. 

        * editing/qt/EditorQt.cpp:
        (WebCore::Editor::newGeneralClipboard):

2007-05-18  Mark Rowe  <mrowe@apple.com>

        Attempt to fix the Gdk build after r21562.

        * platform/gdk/TemporaryLinkStubs.cpp:
        (Widget::isEnabled):
        * platform/gdk/WidgetGdk.cpp:

2007-05-18  Adam Treat <treat@kde.org>

        Reviewed by Lars

        Remove dead code.

        * platform/Widget.h:
        * platform/mac/WidgetMac.mm:
        * platform/qt/WidgetQt.cpp:

2007-05-18  Holger Freyther  <zecke@selfish.org>

        Reviewed by Maciej.

        Return true to make loading of pages working again

        * loader/gdk/FrameLoaderClientGdk.cpp:
        (WebCore::FrameLoaderClientGdk::canHandleRequest):

2007-05-18  Holger Freyther  <zecke@selfish.org>

        Reviewed by Maciej.

        Make WebCore::Widget use GtkWidget to fix focus handling.

        * WebCore.pro: Add PlatformScrollBar
        * platform/ScrollView.h: Gtk stuff
        * platform/Widget.h: Take a GtkWidget
        * platform/gdk/PlatformScrollBarGdk.cpp: Added.
        (PlatformScrollbar::PlatformScrollbar):
        (PlatformScrollbar::~PlatformScrollbar):
        (PlatformScrollbar::width):
        (PlatformScrollbar::height):
        (PlatformScrollbar::setEnabled):
        (PlatformScrollbar::paint):
        (PlatformScrollbar::updateThumbPosition):
        (PlatformScrollbar::updateThumbProportion):
        (PlatformScrollbar::setRect):
        * platform/gdk/ScreenGdk.cpp: Implement depth handling
        (WebCore::screenDepth):
        * platform/gdk/ScrollViewGdk.cpp: use setGtkWidget, not setDrawable
        (WebCore::ScrollView::setGtkWidget):
        * platform/gdk/TemporaryLinkStubs.cpp:
        * platform/gdk/WidgetGdk.cpp:
        (WebCore::Widget::Widget):
        (WebCore::Widget::gtkWidget):
        (WebCore::Widget::setGtkWidget):
        (WebCore::Widget::hasFocus):
        (WebCore::Widget::setFocus):

2007-05-18  Lars Knoll  <lars@trolltech.com>

        Reviewed by Zack

        Correctly implement initialiseSupportedImageMIMETypes.

        * platform/MimeTypeRegistry.cpp:
        (WebCore::initialiseSupportedImageMIMETypes):
        * platform/qt/MimeTypeRegistryQt.cpp:
        (WebCore::):

2007-05-18  Holger Hans Peter Freyther  <zecke@selfish.org>

        Reviewed by Maciej.

        Build fix for non-Qt and non-Mac ports.

        * html/HTMLCanvasElement.h:

2007-05-18  Holger Hans Peter Freyther  <zecke@selfish.org>

        Reviewed by Mark Rowe.

        No test added as this is hard to time.

        * platform/gdk/FrameGdk.cpp: Use needsLayout() to decide if layout()
        is needed.

        (WebCore::FrameGdk::dumpRenderTree):
        (WebCore::FrameGdk::handleGdkEvent):

2007-05-18  Simon Hausmann  <hausmann@kde.org>

        Reviewed by Lars.

        * WebCore.pro: Create a pkg-config file to make it easier to locate
        and use WebKitQt.

2007-05-18  Lars Knoll <lars@trolltech.com>

        Reviewed by Hyatt.

        Remove unused handleMouseEvent methods in the Widget
        and derived classes.

        * page/EventHandler.cpp:
        (WebCore::EventHandler::handleMouseMoveEvent):
        * page/FrameView.cpp:
        * page/FrameView.h:
        * page/mac/EventHandlerMac.mm:
        (WebCore::EventHandler::mouseDragged):
        (WebCore::EventHandler::mouseMoved):
        * platform/ScrollBar.h:
        * platform/Widget.h:
        * platform/win/PlatformScrollBar.h:
        * platform/win/TemporaryLinkStubs.cpp:
        (WebCore::PlatformScrollbar::setRect):
        * platform/wx/PlatformScrollBar.h:

2007-05-18  George Staikos  <staikos@kde.org>

        Reviewed by Lars.

        Use the proper clipping algorithm.  Might be a bit slow but we
        can optimize it later.

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

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

        Reviewed by George Staikos.

        Fix Qt build after adding JSHTMLAnchorElementCustom.cpp. 

        * WebCore.pro:

2007-05-17  George Staikos  <staikos@kde.org>

        Reviewed by hyatt.

        Fix preprocessor logic for CG/QT

        * html/HTMLCanvasElement.cpp:
        (WebCore::HTMLCanvasElement::reset):

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

        Add a line gutter to view source mode.  The gutter uses counters, and this exposed the fact
        that pseudoStyleForElement was not walking all UA rules properly.

        Reviewed by aroben

        * css/cssstyleselector.cpp:
        (WebCore::CSSStyleSelector::pseudoStyleForElement):
        * css/view-source.css:
        * html/HTMLViewSourceDocument.cpp:
        (WebCore::HTMLViewSourceDocument::HTMLViewSourceDocument):
        (WebCore::HTMLViewSourceDocument::addViewSourceToken):
        (WebCore::HTMLViewSourceDocument::addSpanWithClassName):
        (WebCore::HTMLViewSourceDocument::addLine):
        (WebCore::HTMLViewSourceDocument::addText):
        * html/HTMLViewSourceDocument.h:

2007-05-17  Justin Garcia  <justin.garcia@apple.com>

        Reviewed by ggaren

        <rdar://problem/5209984> REGRESSION: Crash on click after clearing Facebook status
        
        comparePositions() expects non-null positions.  It's 
        given a null position by contains() if the current 
        selection is a range selection but contains only invisible 
        content *and* visible positions cannot be created from its 
        end points.  This can happen when there is a range selection 
        inside shadow content (like that inside text fields) that 
        is made invisible.

        * editing/SelectionController.cpp:
        (WebCore::SelectionController::contains): Check for
        invisible end points.

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

        Reviewed by Adam.

        Fix for <rdar://problem/5201423> REGRESSION: Links in 
        sidebar don't work on Honda website

        Anchor elements need to have the same behavior for implicit and 
        explicit toString() calls.

        Test: fast/dom/anchor-toString.html

        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSHTMLAnchorElementCustom.cpp: Added.
        (WebCore::JSHTMLAnchorElement::toString):
        * html/HTMLAnchorElement.idl:

2007-05-17  Geoffrey Garen  <ggaren@apple.com>
        
        Build fix.

2007-05-17  Adele Peterson  <adele@apple.com>

        Reviewed by Hyatt.

        Update RenderMenuList PopupClient methods to consider style of inner block.

        * rendering/RenderMenuList.cpp:
        (WebCore::RenderMenuList::itemStyle):
        (WebCore::RenderMenuList::clientStyle):

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

        Not reviewed, emergency test fix.

        - avoid crash on layout tests.
        
        Patched up my last change so that  widgets don't crash.

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

2007-05-17  Antti Koivisto  <antti@apple.com>

        Reviewed by Darin.

        Fix for http://bugs.webkit.org/show_bug.cgi?id=13727
        REGRESSION: Reproducible hang setting the selection's extent offset to -1
        <rdar://problem/5206890>
        
        Rise INDEX_SIZE_ERR if used selection index is negative. This matches HTML5 for
        getRangeAt() and collapse() which are part of the spec (FF throws NS_ERROR_FAILURE). 
        
        Not throwing exceptions yet for too high offsets (except getRangeAt()) as it is
        unclear if WebCore's definition of offsets is the same as other browsers.

        * bindings/js/kjs_window.cpp:
        * WebCore/editing/SelectionController.cpp:
        * WebCore/editing/SelectionController.h:
        * WebCore/editing/VisiblePosition.cpp:
        
2007-05-17  Adele Peterson  <adele@apple.com>

        Reviewed by Mitz.

        Fix for <rdar://problem/5096035> REGRESSION: rtl text should be left-aligned in <select>s

        Test: fast/text/international/bidi-menulist.html

        * rendering/RenderMenuList.cpp:
        (WebCore::RenderMenuList::adjustInnerStyle): Set the inner block style to direction: ltr, and text-align: left.  This means that
         we will ignore those settings in the button to match the way the text is displayed in the popup menu.
        (WebCore::RenderMenuList::createInnerBlock): Call adjustInnerStyle.
        (WebCore::RenderMenuList::setStyle): ditto.
        * rendering/RenderMenuList.h: Added adjustInnerStyle.

2007-05-17  Justin Garcia  <justin.garcia@apple.com>

        Reviewed by harrison

        <rdar://problem/4924441> List becomes nested when changing its type
        <rdar://problem/5210032> Content before a list is placed at the end of the list when its made into a list item
        <rdar://problem/5207369> Crash when removing ordering from a nested list

        * editing/InsertListCommand.cpp:
        (WebCore::InsertListCommand::doApply):
        The outermostEnclosingList of the position before the start isn't
        the previousList if it contains the start.
        Ditto for the position after the end and the nextList.
        If we're putting the newly created list item into the next list,
        insert it at the start of that list, not the end (don't append).
        Avoid nesting newly created lists inside list items.
        
2007-05-17  Patti Hoa  <patti@apple.com>

        Reviewed by Darin.
        
        <rdar://problem/4775672> AXTextMarkerRangeForUnorderedTextMarkers returns incorrect order
        
        * bridge/mac/WebCoreAXObject.mm:
        (-[WebCoreAXObject doAXTextMarkerRangeForUnorderedTextMarkers:]):
        A selection's m_start is not guranteed to equal m_base since m_start can actually be m_base's downstream().
        A more accurate way to determine the order from selection is to ask directly for isBaseFirst().
        In addition, if the two visible positions given are the same position but different affinity, we need to 
        handle it here rather than depend on the selection. This is because selection does not retain the
        affinity of both selection start/end visible positions as part of the selection validation. 

2007-05-17  Mitz Pettel  <mitz@webkit.org>

        Reviewed by Brady

        - fix http://bugs.webkit.org/show_bug.cgi?id=13759
          REGRESSION (r20182-r20184): Incorrect rendering of multipart images

        Test: http/tests/multipart/invalid-image-data.html

        * loader/loader.cpp:
        (WebCore::Loader::didReceiveData): Make a copy of the current part's data
        instead of using the resource data, because the latter is going to be
        overwritten by the new part being received.

2007-05-17  Oliver Hunt  <oliver@apple.com>

        Reviewed by Justin.

        Fix for <rdar://problem/4244861> Safari fails to create image file
        after releasing dragged image that has changed on source page

        Tell xcode to copy HTMLImageElement.h and HTMLImageLoader.h headers
        across to WebKit as private headers.

        * WebCore.xcodeproj/project.pbxproj:

2007-05-17  Justin Garcia  <justin.garcia@apple.com>

        Reviewed by harrison

        <rdar://problem/5190926> 
        Gmail Editor: Crash when removing list style from underlined, multi-item list
        
        The user underlined some text, then created a list.
        The list was placed inside the inline element carrying 
        the underline style, so, that element surrounded the 
        list instead of being at the lowest level (just above 
        text nodes). This kind of markup is more difficult to 
        edit. Filed 5192089 and added a workaround so that we 
        don't produce this kind of markup.

        * editing/InsertListCommand.cpp:
        (WebCore::InsertListCommand::doApply): Avoid inline
        elements when inserting the new list.

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

        Allow redundant attributes with the same name in view source mode.

        Reviewed by aroben

        * dom/NamedAttrMap.h:
        (WebCore::NamedAttrMap::insertAttribute):
        * html/HTMLTokenizer.cpp:
        (WebCore::Token::addAttribute):

2007-05-17  George Staikos  <staikos@kde.org>

        - Back out last patch based on discussion with Zack.

        * platform/qt/WidgetQt.cpp:
        (WebCore::Widget::paint):

2007-05-16  Anders Carlsson  <andersca@apple.com>

        Reviewed by Darin.

        <rdar://problem/5207156> Hamachi test tool causes assertion in FormCompletionController in Safari

        This happens because the form delegate gets passed the wrong source frame during the second submit().
        If a frame with the given name is found, FrameLoader::load is called with the same parameters on the found frame.
        This causes the found frame to be used as the source frame, which is wrong.
        
        The fix is to create the form state object before checking what frame to load the new request in. 
        
        * WebCore.exp:
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::load):
        (WebCore::FrameLoader::checkNavigationPolicy):
        (WebCore::FrameLoader::continueAfterNavigationPolicy):
        * loader/FrameLoader.h:
        * manual-tests/submit-form-with-target-twice.html: Added.

2007-05-16  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Oliver.

        <rdar://problem/5205914> REGRESSION: PLT stops after loading first page due to r21479
        
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::frameHasLoaded):

2007-05-16  David Hyatt  <hyatt@apple.com>

        Improve the syntax-highlighted view source mode.  It now preserves all whitespace properly
        and highlights doctypes and comments (in addition to all the stuff it could highlight before).

        Reviewed by aroben

        * html/HTMLTokenizer.cpp:
        (WebCore::Token::addAttribute):
        (WebCore::HTMLTokenizer::parseTag):
        * html/HTMLTokenizer.h:
        (WebCore::Token::Token):
        (WebCore::Token::~Token):
        (WebCore::Token::reset):
        (WebCore::Token::addViewSourceChar):
        * html/HTMLViewSourceDocument.cpp:
        (WebCore::HTMLViewSourceDocument::addViewSourceToken):
        * html/HTMLViewSourceDocument.h:

2007-05-16  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Adam.

        <rdar://problem/5191024> Page never loads completely (emonome.vodpod.com)
        <rdar://problem/5205162> REGRESSION (r21367): In the Address URL field, typing a site name doesn't redirect to site after pressing return
        http://bugs.webkit.org/show_bug.cgi?id=13683
        <rdar://problem/5208951> REGRESSION: Progress bar never completes on link click that downloads (13694)
        http://bugs.webkit.org/show_bug.cgi?id=13694
        <rdar://problem/5201598> REGRESSION: After uploading file to iDisk at mac.com, "loading" status remains and file does not appear in the list
        
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::mainReceivedCompleteError): Make sure to always check whether the overall
        load completed, even if we think the current frame load is already complete.

2007-05-16  Beth Dakin  <bdakin@apple.com>

        Reviewed by Hyatt.

        Fix for <rdar://problem/5204107> REGRESSION: CSS web forum site 
        layout not displaying properly in latest WebKit

        Hyatt's http://trac.webkit.org/projects/webkit/changeset/21428 
        exposed this bug. We were not handling error cases with <caption> 
        correctly. This patch makes them do the same thing as colgroup.

        * html/HTMLParser.cpp:
        (WebCore::HTMLParser::handleError):
        * html/HTMLParserErrorCodes.cpp: No need any more for caption-
        specific errors.
        (WebCore::htmlParserErrorMessageTemplate):
        * html/HTMLParserErrorCodes.h:
        (WebCore::):

2007-05-16  Kevin McCullough  <kmccullough@apple.com>

        Reviewed by Darin and Geoff.

        - rdar://problem/4981886
        - Now windows opened by the DOM can be closed by JS.

        * bindings/js/kjs_window.cpp:
        (KJS::createNewWindow):
        (KJS::WindowFunc::callAsFunction):
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::FrameLoader):
        (WebCore::FrameLoader::openedByDOM):
        (WebCore::FrameLoader::setOpenedByDOM):
        (WebCore::FrameLoader::continueLoadAfterNewWindowPolicy):
        * loader/FrameLoader.h:

2007-05-16  Darin Adler  <darin@apple.com>

        Reviewed by Hyatt.

        - fix <rdar://problem/4928671> Crash due to runaway recursion when fieldset has display: table-row (12066)

        Test: fast/css/fieldset-display-row.html

        * rendering/RenderContainer.cpp: (WebCore::RenderContainer::addChild):
        Change all decision making about special handling for new children to use
        the class of the render object instead of the style, except for the cases
        where the style is the only way to tell (TABLE_COLUMN_GROUP and TABLE_CAPTION).
        Thus a RenderFieldset with table-row style won't get handled as if it was
        a table row.

        * rendering/RenderTable.cpp: (WebCore::RenderTable::addChild): Same thing.
        Except that here the styles that we ahave to look at are TABLE_CAPTION,
        TABLE_HEADER_GROUP, TABLE_FOOTER_GROUP, and TABLE_ROW_GROUP.

2007-05-16  Zack Rusin  <zrusin@trolltech.com>

        Reviewed by Lars.

        Implement bigger parts of the Canvas element in the
        Qt port. Gradients and patterns are missing.

        * WebCore/html/CanvasRenderingContext2D.cpp:
        * WebCore/html/CanvasStyle.cpp:
        * WebCore/html/HTMLCanvasElement.cpp:
        * WebCore/html/HTMLCanvasElement:

2007-05-16  Zack Rusin  <zrusin@trolltech.com>

        Reviewed by Lars

        Fix shared timers, make them use miliseconds. Based
        on a patch from George.

        * WebCore/platform/qt/SharedTimerQt.cpp:
       (WebCore::setSharedTimerFireTime):

2007-05-16  David Hyatt  <hyatt@apple.com>

        Add rudimentary error reporting to the HTML parser.  This is disabled
        for now until it gets beefed up a bit more (and until we work out how
        best to pass the messages up without hurting perf).

        Clean up and remove dead error handling code and incorrect error handling
        code as well.

        Reviewed by mjs

        * WebCore.xcodeproj/project.pbxproj:
        * html/HTMLParser.cpp:
        (WebCore::HTMLParser::HTMLParser):
        (WebCore::HTMLParser::handleError):
        (WebCore::HTMLParser::headCreateErrorCheck):
        (WebCore::HTMLParser::reportErrorToConsole):
        * html/HTMLParser.h:
        (WebCore::HTMLParser::reportError):
        * html/HTMLParserErrorCodes.cpp: Added.
        (WebCore::htmlParserErrorMessageTemplate):
        * html/HTMLParserErrorCodes.h: Added.
        (WebCore::):
        * html/HTMLTokenizer.h:
        (WebCore::HTMLTokenizer::tagStartLineNumber):

2007-05-15  David Hyatt  <hyatt@apple.com>

        Make FrameLoader write "<html><body>" instead of just "<body>".

        Reviewed by aroben

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

2007-05-15  George Staikos  <staikos@kde.org>

        Reviewed by Adam Roben.

        - Pass cookies through from the loader.

        * platform/network/qt/ResourceHandleManagerQt.cpp:
        (WebCore::ResourceHandleManager::receivedResponse):

2007-05-15  Adam Treat  <adam@staikos.net>

        Reviewed by George Staikos.

        - Implement drawArc with proper units.

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

2007-05-15  Adam Treat  <adam@staikos.net>

        Reviewed by George Staikos.

        - Add missing paint for nested subframes.

        * platform/qt/WidgetQt.cpp:
        (WebCore::Widget::paint):

2007-05-15  Sam Weinig  <sam@webkit.org>

        Reviewed by Oliver.

        - Patch for http://bugs.webkit.org/show_bug.cgi?id=13722
          Finish testing and fixing the setting of DOM attributes to JS null

          Convert JS null to null string for SVG attributes.

        Test: fast/dom/svg-element-attribute-js-null.xhtml

        * ksvg2/svg/SVGAngle.idl:
        * ksvg2/svg/SVGElement.idl:
        * ksvg2/svg/SVGLength.idl:
        * ksvg2/svg/SVGScriptElement.idl:

2007-05-15  Sam Weinig  <sam@webkit.org>

        Reviewed by Oliver.

        - Patch for http://bugs.webkit.org/show_bug.cgi?id=13722
          Finish testing and fixing the setting of DOM attributes to JS null

          Convert JS null to null string for CanvasRenderingContext2D attributes.

        Test: fast/dom/canvasContext2d-element-attribute-js-null.html

        * html/CanvasRenderingContext2D.idl:

2007-05-15  Oliver Hunt  <oliver@apple.com>

        Reviewed by Sam and Geoff.

        Removing dead code left behind from drag and drop refactoring.

        * page/mac/WebCoreFrameBridge.h:

2007-05-15  Sam Weinig  <sam@webkit.org>

        Reviewed by Oliver.

        - Second Patch for http://bugs.webkit.org/show_bug.cgi?id=13722
          Finish testing and fixing the setting of DOM attributes to JS null

          Convert JS null to null string for remaining CSSOM attributes.

        Test: fast/dom/css-element-attribute-js-null.html

        * bindings/js/kjs_css.cpp:
        (KJS::DOMCSSStyleDeclaration::put):
        (KJS::DOMMediaList::put):
        (KJS::DOMCSSRule::putValueProperty):
        (KJS::DOMCSSValue::put):
        * css/CSSPageRule.idl:
        * css/CSSRule.idl:
        * css/CSSStyleDeclaration.idl:
        * css/CSSStyleRule.idl:
        * css/CSSValue.idl:
        * css/MediaList.idl:

2007-05-15  Darin Adler  <darin@apple.com>

        Reviewed by Hyatt.

        * css/html4.css: Remove wbr style rule -- not needed any more.

2007-05-15  Mitz Pettel  <mitz@webkit.org>

        Reviewed by Brady

        - fix http://bugs.webkit.org/show_bug.cgi?id=13360
          REGRESSION: Crash closing live web cam viewer page

        Test: http/tests/misc/multipart.html

        * loader/ResourceLoader.cpp:
        (WebCore::ResourceLoader::didFail): Avoid calling didFailToLoad() if
        didFinishLoad() has already been called (when the first part of a
        multipart resource arrived).
        (WebCore::ResourceLoader::didCancel): Ditto.

2007-05-15  Sam Weinig  <sam@webkit.org>

        Reviewed by Darin.

        - Patch for http://bugs.webkit.org/show_bug.cgi?id=13722
          Finish testing and fixing the setting of DOM attributes to JS null

          Convert JS null to null string for remaining Core DOM attributes.

        Test: fast/dom/coreDOM-element-attribute-js-null.xhtml

        * dom/Attr.cpp:
        (WebCore::Attr::setValue): Don't throw an expection for null values as this
        is not in the spec and Firefox does not do it either.
        * dom/Attr.idl:
        * dom/CharacterData.idl:
        * dom/ProcessingInstruction.idl:

2007-05-15  Mitz Pettel  <mitz@webkit.org>

        Reviewed by Hyatt.

        - fix http://bugs.webkit.org/show_bug.cgi?id=13718
          REGRESSION (r21093): editing/execCommand/5136770.html failing pixel test

        * rendering/RenderContainer.cpp:
        (WebCore::RenderContainer::removeChildNode): Moved the code that clears the
        selection when moving a selection border into the fast path.

2007-05-15  Rob Buis  <buis@kde.org>

        Reviewed by Hyatt.

        http://bugs.webkit.org/show_bug.cgi?id=6487
        "Make Text Bigger/Smaller" affects SVGs when it probably shouldn't

        Ignore Make Text Bigger/Smaller for SVG text.

        * css/svg.css:

2007-05-15  Anders Carlsson  <andersca@apple.com>

        Reviewed by Maciej.

        <rdar://problem/5183685>
        http://bugs.webkit.org/show_bug.cgi?id=13301
        ASSERT or null value when trying to use a getter defined on a window object

        Handle the case where the value returned is a getter/setter object.
        
        * bindings/js/kjs_window.cpp:
        (KJS::Window::getOverridePropertySlot):

2007-05-14  Anders Carlsson  <andersca@apple.com>

        Reviewed by Geoff.

        <rdar://problem/5200816>
        REGRESSION: With Shiira 1.2.2 , I can't open embedded link in flash object by clicking (http:/www.adobe.com )
        
        Shiira under some circumstances passes nil as the request to -[WebFrame loadRequest:]. ToT WebKit doesn't call any policy
        delegate methods in this case, which means that the page is actually being loaded. 
        
        This patch makes ToT WebKit behave in the same way as Tiger WebKit when the request is nil.
        
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::checkNavigationPolicy):
        Don't continue without calling the navigation policy method if the request is null.
        
        (WebCore::FrameLoader::continueAfterNavigationPolicy):
        If the request can't be handled, don't continue the load.
        
        * platform/network/mac/ResourceRequestMac.mm:
        (WebCore::ResourceRequest::doUpdatePlatformRequest):
        Don't create an NSURLRequest object if the request is null.

2007-05-15  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Hyatt and Lars.

        - fixed <rdar://problem/5201758> REGRESSION: Stop button enabled and other problems caused by [WebView currentURL] returning non-nil for empty window

        * WebCore.exp: export new symbol
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::begin): move marker that we committed a real doc load from here...
        (WebCore::FrameLoader::transitionToCommitted): ...to here
        (WebCore::FrameLoader::frameHasLoaded): check that we have at least started loading something
        besides the initial empty doc.
        * loader/FrameLoader.h:

2007-05-14  Justin Garcia  <justin.garcia@apple.com>

        Reviewed by ggaren
        
        <http://bugs.webkit.org/show_bug.cgi?id=13716>
        REGRESSION: Three new layout test failures
        
        Two failures are correct.  Updated their expected results.
        
        In fast/events/frame-tab-focus.html, as we advance
        through focusable nodes, we descend into a subframe
        to focus a node and then ascend out of it into the
        main frame to focus the next.  When we focus the main 
        frame, the node in that frame that was previously 
        focused and contains an inactive selection is focused 
        momentarily because setCaretVisible tries to focus the 
        node containing the caret.

        * page/Frame.cpp:
        (WebCore::Frame::setCaretVisible): Don't focus the
        node containing the caret. FocusController will focus
        the previously focused node (which will contain the
        caret) if necessary when the frame gains focus.
        
2007-05-14  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Brady.

        - fixed <rdar://problem/5203036> REGRESSION: Assertion failure in WebCore::FrameLoader::restoreScrollPositionAndViewState() going back from fark.com Photoshop contest (13684)

        Test: http/tests/navigation/back-to-slow-frame.html
        
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::restoreScrollPositionAndViewState): Add needed early return.

2007-05-14  Mitz Pettel  <mitz@webkit.org>

        Reviewed by Dave Hyatt.

        - fix http://bugs.webkit.org/show_bug.cgi?id=13603
          style leaks in washingtonpost.com
          also known as http://bugs.webkit.org/show_bug.cgi?id=8750
          w3c.org: incorrect recovery from unclosed <a> elements
          also known as http://bugs.webkit.org/show_bug.cgi?id=12808
          Handling of misnested tags results in entire page appearing as link
          also known as http://bugs.webkit.org/show_bug.cgi?id=12861
          Post text renders as link

        Test: fast/parser/residual-style-close-across-n-blocks.html

        * html/HTMLParser.cpp:
        (WebCore::HTMLParser::handleResidualStyleCloseTagAcrossBlocks): Changed to
        deal with multiple block crossings instead of bailing out, by doing multiple
        reparenting passes, starting from the outermost block.

2007-05-14  Mitz Pettel  <mitz@webkit.org>

        Reviewed by Darin.

        - fix http://bugs.webkit.org/show_bug.cgi?id=13711
          REGRESSION - Bookmark Bar text rendering changed

        No test possible since this patch affects only Safari chrome.

        * platform/Font.cpp:
        (WebCore::Font::Font): Initialize m_isPlatformFont according to whether
        the Font object is derived from a FontPlatformData or not.
        * platform/Font.h:
        (WebCore::Font::isPlatformFont): Added. Returns whether this Font was
        derived from a platform font.
        * platform/mac/FontCacheMac.mm:
        (WebCore::FontCache::getFontDataForCharacters): Changed to not enable
        synthetic bold and italic in the fallback fonts if the original font
        was derived from a platform font.

2007-05-14  Sam Weinig  <sam@webkit.org>

        Reviewed by Alice!

        - Patch for http://bugs.webkit.org/show_bug.cgi?id=13541
          REGRESSION: Setting a DOMString attribute to JS null in the 
          JS bindings should default to converting to the empty string

          Convert JS null to the empty string when passing it to an attribute that takes
          a DOMString.

        Test: fast/dom/document-attribute-js-null.html
        Test: fast/dom/element-attribute-js-null.html

        * bindings/js/kjs_dom.cpp:
        (KJS::DOMNode::putValueProperty):
        * bindings/js/kjs_html.cpp:
        (KJS::JSHTMLDocument::putValueProperty):
        (KJS::JSHTMLElement::objectSetter):
        (KJS::JSHTMLElement::embedSetter):
        (KJS::JSHTMLElement::tableSetter):
        (KJS::JSHTMLElement::tableCaptionSetter):
        (KJS::JSHTMLElement::tableColSetter):
        (KJS::JSHTMLElement::tableSectionSetter):
        (KJS::JSHTMLElement::tableRowSetter):
        (KJS::JSHTMLElement::tableCellSetter):
        (KJS::JSHTMLElement::frameSetSetter):
        (KJS::JSHTMLElement::frameSetter):
        (KJS::JSHTMLElement::iFrameSetter):
        (KJS::JSHTMLElement::marqueeSetter):
        (KJS::JSHTMLElement::putValueProperty):
        * bindings/js/kjs_html.h:
        * dom/Document.idl:
        * dom/Node.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/HTMLDivElement.idl:
        * html/HTMLDocument.idl:
        * html/HTMLElement.idl:
        * html/HTMLEmbedElement.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/HTMLMetaElement.idl:
        * html/HTMLModElement.idl:
        * html/HTMLOListElement.idl:
        * html/HTMLObjectElement.idl:
        * html/HTMLOptGroupElement.idl:
        * html/HTMLOptionElement.idl:
        * html/HTMLParagraphElement.idl:
        * html/HTMLParamElement.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-05-14  Geoffrey Garen  <ggaren@apple.com>

        Trying to fix the Qt build.

        * WebCore.pro:

2007-05-14  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Oliver Hunt.
        
        Some improvements on my last patch, suggested by Darin.

        * history/PageCache.cpp:
        (WebCore::PageCache::autoreleaseNow): Swap with an empty set instead of 
        building up an array and then calling clear(). This is slightly more 
        efficient and the code is cleaner.

2007-05-14  Justin Garcia  <justin.garcia@apple.com>

        Reviewed by darin
        
        <rdar://problem/5136696> Selection is removed when focusing a node in another frame
        <rdar://problem/5192388> WordPress: Can't insert links/images
        
        Don't clear a selection when changing focus if the new
        focus node is in a different frame than the old selection.

        * dom/Document.cpp:
        (WebCore::Document::setFocusedNode): Moved code to clear 
        selections to the FocusController, since it is Page level 
        and will know about the frame/document that contained the 
        old selection. Moved code to call shouldEndEditing to the 
        FocusController because selections are now cleared before
        calling Document::setFocusedNode and shouldEndEditing must
        be called before selections are cleared.
        * dom/Element.cpp:
        (WebCore::Element::blur): Call FocusController::setFocusNode
        instead of Document::setFocusNode, if possible.
        * page/EventHandler.cpp:
        (WebCore::EventHandler::dispatchMouseEvent): Ditto.
        * page/FocusController.cpp:
        (WebCore::relinquishesEditingFocus): Moved from Document.cpp.
        (WebCore::clearSelectionIfNeeded): Ditto.  Don't clear if
        the old selection is in a frame that's different than the 
        one that contains the new focus node.
        (WebCore::FocusController::setFocusedNode): Moved code
        here from Document::setFocusedNode.
        * page/Frame.cpp:
        (WebCore::Frame::setFocusedNodeIfNeeded): Call
        FocusController::setFocusNode.

2007-05-14  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Darin Adler.
        
        Next step toward fixing <rdar://problem/5055182> The back cache has no 
        global cap.
        
        Created a PageCache singleton. Right now, it only handles the timer-based
        deallocation of cached pages. I plan to add HistoryItem->CachedPage tracking
        and eviction logic in later patches.

        Updated for renames and file changes:

        * WebCore.exp:
        * WebCore.xcodeproj/project.pbxproj:
        * history/BackForwardList.cpp:
        (WebCore::BackForwardList::setPageCacheSize):
        (WebCore::BackForwardList::clearPageCache):

        Removed global timed release code, moved into new PageCache class, since
        it's eventually going to be in charge of deciding when things are released:
        
        * history/HistoryItem.cpp:
        (WebCore::HistoryItem::setCachedPage):
        * history/HistoryItem.h:

        Folded into PageCache:
        
        * history/HistoryItemTimer.cpp: Removed.
        * history/HistoryItemTimer.h: Removed.

        New singleton. Right now, it just handles timed release of cached pages:
        
        * history/PageCache.cpp: Added.
        (WebCore::pageCache):
        (WebCore::PageCache::PageCache):
        (WebCore::PageCache::autoreleaseNowOrReschedule):
        (WebCore::PageCache::autoreleaseNow):
        (WebCore::PageCache::autorelease):
        * history/PageCache.h: Added.

2007-05-14  Adele Peterson  <adele@apple.com>

        Reviewed by Darin.

        Fix for <rdar://problem/5200081> Repro crash in PopupMenu::show clicking popup menu button after reload

        * platform/mac/PopupMenuMac.mm: (WebCore::PopupMenu::show): Added call to dismissPopup so the cell gets unattached properly.

2007-05-14  Adele Peterson  <adele@apple.com>

        Reviewed by Darin.

        Remove incorrect assertion.

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

2007-05-14  Anders Carlsson  <andersca@apple.com>

        Reviewed by Geoff.

        <rdar://problem/5172056> Regression: cannot open txt file, get broken image

        Never let plug-ins override text/plain.
        
        * dom/DOMImplementation.cpp:
        (WebCore::DOMImplementation::createDocument):

2007-05-14  Zack Rusin  <zrusin@trolltech.com>

        Reviewed by Simon.

        Do some magic to get better dependency tracking for header
        files in the qmake project files.

        * ChangeLog:

2007-05-14  Lars Knoll <lars@trolltech.com>

        Reviewed by Zack

        Required updates after Maciej's frame change.

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::mainReceivedCompleteError):
              Call checkLoadCompleted() at the end of the method. Without it
              we never get the loadDone() signal on the Qt port.
        * platform/network/qt/ResourceHandleManagerQt.cpp:
        (WebCore::ResourceHandleManager::receivedFinished):
              Don't pass a null error to didFail().

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

        Reviewed by Antti.

        - fix <rdar://problem/3109180> VIP: after go back, page jumps after loading even if I scrolled while loading

        * history/CachedPage.cpp: (WebCore::CachedPage::clear): Call clearFrame rather than
        clearPart -- the "part" term was leftover prehistoric terminology.

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::open): Call setWasScrolledByUser(false) on the page, so that we
        can detect any user scrolling that happens during the "go back" process.
        (WebCore::FrameLoader::restoreScrollPositionAndViewState): Don't scroll if the view's
        wasScrolledByUser flag is set.
        (WebCore::FrameLoader::loadItem): Call setWasScrolledByUser(false) false when we do
        a new "load" (actually just a scroll) using the same frame. Also moved the line of code that
        sets m_currentHistoryItem to make this code path mroe similar to recursiveGoToItem.
        (WebCore::FrameLoader::recursiveGoToItem): Ditto.

        * page/Frame.cpp:
        (WebCore::Frame::~Frame): Call clearFrame rather than stting m_frame directly.
        (WebCore::Frame::sendScrollEvent): Call setWasScrolledByUser(true) on FrameView. The FrameView
        itself knows to ignore this if the scrolling is being done programmatically instead of by the user.

        * page/FrameView.h: Added wasScrolledByUser and setWasScrolledByUser. Also removed unneeded
        include and class forward declarations, renamed clearPart to clearFrame, removed uneeded function
        haveDelayedLayoutScheduled, and removed unneeded friend declarations.
        * page/FrameView.cpp:
        (WebCore::FrameViewPrivate::FrameViewPrivate): Added m_inProgrammaticScroll and m_wasScrolledByUser.
        (WebCore::FrameViewPrivate::reset): Set m_wasScrolledByUser to false.
        (WebCore::FrameView::clearFrame): Renamed from clearPart.
        (WebCore::FrameView::scrollRectIntoViewRecursively): Added code to set the m_inProgrammaticScroll flag.
        (WebCore::FrameView::setContentsPos): Ditto.
        (WebCore::FrameView::wasScrolledByUser): Added.
        (WebCore::FrameView::setWasScrolledByUser): Added. Does nothing if called when m_inProgrammaticScroll
        is true.

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

        Reviewed by Antti.

        - <rdar://problem/4865655> REGRESSION: find function does not work for the character ß

        The trick was to fold case consistently in the CircularSearchBuffer class.

        The problem was that we were folding the search target string with full case folding and
        the characters of the text we were searching with simple case folding. We now use full
        case folding in both cases.

        * editing/TextIterator.cpp:
        (WebCore::CircularSearchBuffer::CircularSearchBuffer): Changed the buffer to be a
        Vector<UChar>. Added a Vector<bool> to record which characters were starts of characters
        in the text we are searching. Changed the cursor to be an int rather than a pointer.
        (WebCore::CircularSearchBuffer::append): New function that knows how to append multiple
        characters when folding case turns one character into many -- uses the full foldCase
        rather than the simplified single-character foldCase. Also removed the append function
        that did multiple characters at once; that was part of an optimization we don't need.
        (WebCore::CircularSearchBuffer::isMatch): Instead of asserting that the buffer is full,
        changed this to return false if it's not full, which lets us fill up the buffer with
        the normal loop. Also return false if the start of the buffer is half-way through a
        case-folded character and updated this since m_cursor is now an integer.
        (WebCore::CircularSearchBuffer::length): This returns the length in non-case-folded
        characters of the characters that were appended, which may not be the same as the length
        of the original target string. To do that we have to total up the character start
        booleans for the current state of the circular buffer.
        (WebCore::findPlainText): Streamlined the logic in a few ways: 1) Moved more of the
        return value setup to the top of the function so it could be shared with the early
        error exit. 2) Removed the separate "fill the buffer" logic, which allowed me to
        remove some of the functions from CircularSearchBuffer and eliminated the need for
        two nested loops. 3) Replaced the CharacterIterator and bool that were used to record
        the location we found with integers matchStart and matchLength. 4) Got rid of the use
        of goto since we don't have two nested loops any more.

2007-05-14  Andrew Wellington  <proton@wiretapped.net>

        Reviewed by Darin.

        Fix http://bugs.webkit.org/show_bug.cgi?id=13275
        Safari crashed when trying to login using the windows live contact control

        Check for cleared windowObj in JSAbstractEventListener::handleEvent

        * bindings/js/kjs_events.cpp:
        (KJS::JSAbstractEventListener::handleEvent):

2007-05-13  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Darin.

        http://bugs.webkit.org/show_bug.cgi?id=13690
        JavaScript Form Validation issue on Banco do Brasil site

        Test: fast/forms/input-setvalue-selection.html

        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::setValue): In other browsers, changing textInput.value
        always moves the insertion point past the text. In 10.4.9 WebKit, this only worked
        for inactive controls, and it never worked in ToT.

2007-05-13  Brady Eidson  <beidson@apple.com>

        Reviewed by Mitz

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

        Since HTMLInputElements register themselves with their Document for special handling, if their document
        ever changes then bad things can happen.

        Unfortunately, with adoptNode, the document can change.  This has been a long standing crasher with all 
        input fields but was given recent high visibility by r21430

        The solution is to add functionality for a Node to react to its owner document changing via a pair of 
        virtual callbacks.  Then we can tap into those callbacks in HTMLInputElement.

        No layout test possible until http://bugs.webkit.org/show_bug.cgi?id=13672 is resolved

        * dom/Node.cpp:
        (WebCore::Node::setDocument): Call willMoveToNewOwnerDocument and didMoveToNewOwnerDocument

        * dom/Node.h:
        (WebCore::Node::willMoveToNewOwnerDocument): Virtual callback to a node for before an owner document change
        (WebCore::Node::didMoveToNewOwnerDocument): Virtual callback to a node for after an owner document change

        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::~HTMLInputElement): Unconditionally unregister both for both form state
          and the cache restoration callback
        (WebCore::HTMLInputElement::setInputType): Change registration with the document only if we're in one
        (WebCore::HTMLInputElement::attach): Don't bother registering for the callback here - that will be
          handled by setInputType() or by a change in owner document
        (WebCore::HTMLInputElement::willMoveToNewOwnerDocument): Unregister with the old owner document
        (WebCore::HTMLInputElement::didMoveToNewOwnerDocument): Register with the new owner document
        * html/HTMLInputElement.h:

2007-05-13  Darin Adler  <darin@apple.com>

        * platform/mac/TextBreakIteratorInternalICUMac.mm: Fix comment typo.

2007-05-13  Rob Buis  <buis@kde.org>

        Reviewed by Darin.

        http://bugs.webkit.org/show_bug.cgi?id=13529
        DOM3 keyIdentifier text is incorrect

        Use 4 digits for the Unicode based key identifiers.

        * html/HTMLButtonElement.cpp:
        (WebCore::HTMLButtonElement::defaultEventHandler):
        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::defaultEventHandler):
        * html/HTMLSelectElement.cpp:
        (WebCore::HTMLSelectElement::menuListDefaultEventHandler):
        * page/EventHandler.cpp:
        (WebCore::EventHandler::defaultKeyboardEventHandler):
        * page/gdk/EventHandlerGdk.cpp:
        (WebCore::isKeyboardOptionTab):
        * page/mac/EventHandlerMac.mm:
        (WebCore::isKeyboardOptionTab):
        * page/qt/EventHandlerQt.cpp:
        (WebCore::isKeyboardOptionTab):
        * platform/gdk/KeyEventGdk.cpp:
        (WebCore::keyIdentifierForGdkKeyCode):
        * platform/mac/KeyEventMac.mm:
        (WebCore::keyIdentifierForKeyEvent):
        * platform/qt/PlatformKeyboardEventQt.cpp:
        (WebCore::keyIdentifierForQtKeyCode):
        * platform/win/KeyEventWin.cpp:
        (WebCore::keyIdentifierForWindowsKeyCode):
        * platform/wx/KeyEventWin.cpp:
        (WebCore::keyIdentifierForWindowsKeyCode):
        * platform/wx/KeyboardEventWx.cpp:
        (WebCore::keyIdentifierForWxKeyCode):

2007-05-12  Darin Adler  <darin@apple.com>

        Reviewed by Antti.

        - fix <rdar://problem/5174903> Safari crashes opening the attached webarchive (made by OmniWeb)

        * loader/icon/IconLoader.cpp:
        (WebCore::IconLoader::didReceiveResponse): Check ResourceHandle for nil before calling url() on it.
        (WebCore::IconLoader::didFail): Ditto.
        (WebCore::IconLoader::didFinishLoading): Ditto.

2007-05-12  Rob Buis  <buis@kde.org>

        Reviewed by Oliver.

        Cleanup, get rid of the SVGStyledElement::view() call.

        * ksvg2/svg/SVGClipPathElement.cpp:
        (WebCore::SVGClipPathElement::canvasResource):
        * ksvg2/svg/SVGFEFloodElement.cpp:
        (WebCore::SVGFEFloodElement::filterEffect):
        * ksvg2/svg/SVGGradientElement.cpp:
        (WebCore::SVGGradientElement::buildStops):
        * ksvg2/svg/SVGStyledElement.cpp:
        * ksvg2/svg/SVGStyledElement.h:

2007-05-12  Mitz Pettel  <mitz@webkit.org>

        Reviewed by Hyatt.

        - fix http://bugs.webkit.org/show_bug.cgi?id=13680
          Incomplete repaint of focus ring around continuation

        Test: fast/repaint/continuation-after-outline.html

        * rendering/RenderFlow.cpp:
        (WebCore::RenderFlow::absoluteClippedOverflowRect):

2007-05-12  Oliver Hunt  <oliver@apple.com>

        Reviewed by Hyatt.

        <rdar://problem/4728842> Can't drag-and-drop files onto <input type="file">
        
        This patch allows a file to be dropped on to a file input field.  There
        are a few changes for data handling and a  few to allow the data to be
        threaded to the appropriate places.

        * page/DragController.cpp:
        (WebCore::asFileInput):
           When dropping a file onto a file input we may mouse over either 
           the element itself, or the contained button element.  This method
           returns the base element for the file input in either of these
           cases.
        (WebCore::DragController::tryDocumentDrag):
           Don't try to set the drag caret to a file input.
        (WebCore::DragController::concludeDrag):
           Handle dropping onto a file input element.
        (WebCore::DragController::canProcessDrag):
           We can now process a file being dragged onto a file input element.
           
        * platform/DragData.h:
           New accessors
           
        * platform/gdk/DragDataGdk.cpp:
        (WebCore::DragData::containsFiles):
        (WebCore::DragData::asFilenames):
           Link stubs.
           
        * platform/mac/DragDataMac.mm:
        (WebCore::DragData::containsFiles):
        (WebCore::DragData::asFilenames):
           Implement new accessors
        (WebCore::DragData::containsCompatibleContent):
           Update containsCompatibleContent to allow standalone files.
          
        * platform/qt/DragDataQt.cpp:
        (WebCore::DragData::containsFiles):
        (WebCore::DragData::asFilenames):
           Link stubs
                      
        * rendering/RenderFileUploadControl.cpp:
        (WebCore::RenderFileUploadControl::receiveDroppedFile):
        * rendering/RenderFileUploadControl.h:
           For security reasons we don't have an api to allow us to set 
           a value directly on a file input -- attempts to do so are
           blocked.  By adding a method to set the target through the 
           render we bypass such restrictions, and ensure the renderer
           is updated correctly.

2007-05-12  Mitz Pettel  <mitz@webkit.org>

        Reviewed by Hyatt.

        - fix http://bugs.webkit.org/show_bug.cgi?id=13695
          REGRESSION (r21387): Replaced elements' highlight rects are wrongly positioned

        Test: fast/replaced/selection-rect.html

        Also fixes the same problem with list markers, covered by existing test
        fast/lists/markers-in-selection.html.

        * rendering/RenderListMarker.cpp:
        (WebCore::RenderListMarker::selectionRect):
        * rendering/RenderReplaced.cpp:
        (WebCore::RenderReplaced::selectionRect):

2007-05-12  Mitz Pettel  <mitz@webkit.org>

        Reviewed by Darin.

        - fix http://bugs.webkit.org/show_bug.cgi?id=13685
          REGRESSION (r21368-r21388): Highlighting text in scrolled textareas behaves oddly

        Test: fast/repaint/text-selection-rect-in-overflow.html

        * rendering/RenderText.cpp:
        (WebCore::RenderText::selectionRect):

2007-05-12  Brady Eidson  <beidson@apple.com>

        Rubber stamped by Mitz

        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::attach): unregister->register - I screwed this one up in last minute renaming
          before committing  :(

2007-05-11  Brady Eidson  <beidson@apple.com>

        Reviewed by Darin and Geoff

        Fix for http://bugs.webkit.org/show_bug.cgi?id=13630
        and
        <rdar://problem/4873628>

        Back/Forward cache should work with pages with login fields.

        First change is to relocate the "useSecureKeyboardEntry" flag to the document.  This lets
        it persist through page cache transitions and it is truly a per-document concept more than
        per-frame anyways since its the document that has a password field, not the frame.

        Second change is to introduce the concept of an Element getting a "didRestoreFromCache()" callback.
        The idea is for elements to register with the document if they need work to be done when the
        page comes out of the back/forward cache.  Currently the only client of this service is 
        HTMLInputElements that are input type == PASSWORD.  Such an element's implementation for this
        method is to call reset()

        Finally, after a page is restored from the cache we have the document send the didRestoreFromCache()
        callback to its registered Elements.  The whole design is to clear the password fields after 
        restoring the page instead of when caching the page because we want to defer work for the common
        case - there shouldn't be extra work here just to navigate away from a page when the common case
        is that you'll never go back!

        No layout tests possible until http://bugs.webkit.org/show_bug.cgi?id=13672 is resolved

        * dom/Document.cpp:
        (WebCore::Document::Document):
        (WebCore::Document::registerForDidRestoreFromCacheCallback): Add an Element to the special page-restoration callback list
        (WebCore::Document::unregisterForDidRestoreFromCacheCallback): Remove such an element
        (WebCore::Document::didRestoreFromCache): Called by FrameLoader - dispatch to all the registered elements
        (WebCore::Document::setUseSecureKeyboardEntryWhenActive): Set the local flag and call updateSecureKeyboardEntryIfActive
          on the Frame
        (WebCore::Document::useSecureKeyboardEntryWhenActive): Return the flag

        * dom/Document.h:
        (WebCore::Document::unregisterFormElementWithState): Renamed

        * dom/Element.h:
        (WebCore::Element::didRestoreFromCache): Added virtual base method

        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::~HTMLInputElement): Deregister from the document if inputType == PASSWORD
        (WebCore::HTMLInputElement::dispatchFocusEvent): Set the flag on the document, not the frame
        (WebCore::HTMLInputElement::dispatchBlurEvent): Ditto
        (WebCore::HTMLInputElement::setInputType): If changing to/from PASSWORD, register/deregister in the document accordingly
        (WebCore::HTMLInputElement::attach): Call registerForDidRestoreFromCacheCallback(this) instead of passwordFieldAdded()
        (WebCore::HTMLInputElement::didRestoreFromCache): Call reset();
        * html/HTMLInputElement.h:

        * html/HTMLSelectElement.cpp:
        (WebCore::HTMLSelectElement::~HTMLSelectElement): Renamed deregisterFormElementWithState to unregisterFormElementWithState
        * html/HTMLTextAreaElement.cpp:
        (WebCore::HTMLTextAreaElement::~HTMLTextAreaElement): Ditto

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::canCachePage): Remove the check for password fields - they're allowed now!
        (WebCore::FrameLoader::opened): Tell the document to dispatch to the registered elements
        (WebCore::FrameLoader::saveDocumentState): Remove the check for password fields.  Turns out that when we grab a copy a the
          form state we're only copying the state of form elements that are registered with the Document - and that set 
          explicitly excludes Password elements

        * page/Frame.cpp:
        (WebCore::Frame::setDocument): If the frame is active, set the setUseSecureKeyboardEntry based on the setting contained
          in the new document
        (WebCore::Frame::updateSecureKeyboardEntryIfActive): Notification for the secure entry flag changing - if the Frame is
          active, then update to the new setting from the document
        (WebCore::Frame::setIsActive): Grab the useSecureKeyboardEntry flag from the document instead of FramePrivate
        (WebCore::FramePrivate::FramePrivate):
        * page/Frame.h:
        * page/FramePrivate.h:

2007-05-12  David Hyatt  <hyatt@apple.com>

        FIx for 13696.  Rework residual style to be much more aggressive about reopening.  Added
        a comprehensive test case of HTML tags to guarantee we match Firefox.  We now have an exclusion
        set rather than an inclusion set, so unknown future tags will also participate in residual style.

        Reviewed by olliej

        fast/invalid/residual-style.html

2007-05-12  David Hyatt  <hyatt@apple.com>

        Fix for bug 12740, bmw.com doesn't work.  We were missing a rule that is covered by the HTML5
        parsing spec.  A <table> encountered while inside stray table content should close up the
        table responsible for the stray content and start the new table as a sibling of the first.

        Reviewed by mjs

        fast/invalid/table-inside-stray-table-content.html

2007-05-12  Eric Seidel  <eric@webkit.org>

        Reviewed by mjs.

        Crash starting Safari with JavaScript disabled.
        http://bugs.webkit.org/show_bug.cgi?id=13691
        
        Test: none possible.

        * page/mac/FrameMac.mm:
        (WebCore::Frame::cleanupPlatformScriptObjects): NULL check d->m_script

2007-05-11  David Hyatt  <hyatt@apple.com>

        Fix for http://bugs.webkit.org/show_bug.cgi?id=13688, Colloquy is broken!

        Make sure to adjust the baseline of a percentage height table cell's row if the
        cell flexes (and lowers the baseline).

        Reviewed by olliej

        fast/tables/vertical-align-baseline-readjust.html

        (WebCore::RenderTableSection::calcRowHeight):
        (WebCore::RenderTableSection::layoutRows):
        * rendering/RenderTableSection.h:
        (WebCore::RenderTableSection::getBaseline):
        
2007-05-11  David Hyatt  <hyatt@apple.com>

        Make sure focus rings are always using the exterior style, regardless
        of what the OS default is.

        Reviewed by beth

        * rendering/RenderThemeMac.mm:
        (WebCore::RenderThemeMac::checkbox):
        (WebCore::RenderThemeMac::radio):
        (WebCore::RenderThemeMac::popupButton):
        (WebCore::RenderThemeMac::search):
        (WebCore::RenderThemeMac::sliderThumbHorizontal):
        (WebCore::RenderThemeMac::sliderThumbVertical):

2007-05-11  Oliver Hunt  <oliver@apple.com>

        Reviewed by Hyatt.
        
        <rdar://problem/5195473> REGRESSION: "Curly quote" fails to 
        be displayed correctly even when META tag specifies charset=x-mac-roman


        * platform/TextCodecICU.cpp:
        (WebCore::TextCodecICU::registerExtendedEncodingNames):
        Register the xmacroman encoding

2007-05-11  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Hyatt.

        REGRESSION (r21367): Crash due to null document deref when closing bookmarks
        http://bugs.webkit.org/show_bug.cgi?id=13662

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::provisionalLoadStarted): Remove some useless and now harmful
        code - there's no need to clear in this case.

2007-05-11  Oliver Hunt  <oliver@apple.com>

        GDK Build fix

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

2007-05-11  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Geoff.
        
        - fixed <rdar://problem/5197621> closing second window crashed webkit (13660)
        http://bugs.webkit.org/show_bug.cgi?id=13660

        No test case; not testable.

        * page/mac/FrameMac.mm:
        (WebCore::Frame::cleanupPlatformScriptObjects): Check if the interpreter is null;
        if so, we don't want to do work that may lazily create it while the Frame is being
        destroyed.

2007-05-11  Oliver Hunt  <oliver@apple.com>

        Reviewed by Brady.
        
        <rdar://problem/5017375> WebKit should disable SVG in Dashboard
        
        Prevents an SVG document or element from being created when in
        dashboard compatibility mode.
        
        Manually parsing, or using XHR to created a document removes our 
        ability to detect Dashboard compatibility mode, so we also perform
        the check when importing nodes from one document into another.

        * dom/DOMImplementation.cpp:
        (WebCore::DOMImplementation::createDocument):
          Don't create an SVGDocument if we're in dashboard compatibility mode
          
        * dom/Document.cpp:
        (WebCore::Document::importNode):
          Don't import SVG nodes if we're in dashboard compatibility mode
          
        * ksvg2/scripts/make_names.pl:
          Don't create SVG elements for documents that are in dashboard
          compatibility mode

2007-05-11  Holger Hans Peter Freyther  <zecke@selfish.org>

        Reviewed by Maciej.

        Bug 13676: [cairo/gdk] Provide implementation for ImageBufferCairo
        http://bugs.webkit.org/show_bug.cgi?id=13676

        There are no test cases that explicitly cover platform/graphics at present.

        * platform/graphics/ImageBuffer.h: Add cairo bits
        * platform/graphics/cairo/ImageBufferCairo.cpp: Untested implementation of the ImagerBuffer using the image_surface
        (WebCore::ImageBuffer::create): Create a reasonable sized surface
        (WebCore::ImageBuffer::ImageBuffer): Use a cairo_surface and create a GraphicsContext. GraphicsContext takes the cairo_t ownership
        (WebCore::ImageBuffer::~ImageBuffer): Unref the surface
        (WebCore::ImageBuffer::context): simply return the GraphicsContext, it should be possible to directly draw on it.

2007-05-11  Mitz Pettel  <mitz@webkit.org>

        Release build fix.

        * platform/mac/ShapeArabic.c:
        (shapeArabic):

2007-05-11  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Darin Adler.

        Removed +[WebScriptObject scriptObjectForJSObject:frame:] because the
        WebScriptObject API has some serious limitations that make it not ready
        to be used everywhere the C API is used. Hopefully we can add a good
        ObjC API in the future that doesn't suffer from this problem.
        
        Preliminary notes about these limitations are in <rdar://problem/4876466>.

        * bindings/objc/WebScriptObject.mm:
        * bindings/objc/WebScriptObjectPendingPublic.h:

2007-05-11  Mitz Pettel  <mitz@webkit.org>

        Reviewed by Darin.

        - fix http://bugs.webkit.org/show_bug.cgi?id=13635
          REGRESSION: Cannot log in to webmail.co.za account

        Test: fast/dom/HTMLOptionElement/option-text.html

        Despite the specification that the 'text' attribute of HTMLOptionElement
        is "the text contained within the option element", other browsers return
        the text as displayed in the list box or popup, which is without leading,
        trailing and collapsible whitespace.

        * html/HTMLOptionElement.cpp:
        (WebCore::HTMLOptionElement::text): Moved the code to trim and collapse
        whitespace and replace backslashes with the currency symbol into this
        function.
        (WebCore::HTMLOptionElement::optionText): Left only the code that adds
        the leading spaces for grouped options. Removed code that, in quirks mode,
        displayed the label if the option element contained no text. That behavior
        did not match WinIE and the description of the expected behavior in
        fast/forms/HTMLOptionElement_label06.html.

2007-05-11  Mitz Pettel  <mitz@webkit.org>

        Reviewed by Darin.

        - fix http://bugs.webkit.org/show_bug.cgi?id=13572
          Arabic characters are not correctly joined when using Arial

        No tests added because standard fonts do not use the character-based shaping
        code path.

        Added shapeArabic(), a private version of u_shapeArabic() from ICU,
        patched to shape Arabic characters used in Persian, Urdu, Sindhi, etc.
        (whose contextual forms belong to the Arabic Presentation Forms-A block).

        * WebCore.xcodeproj/project.pbxproj: Added ShapeArabic.{c,h}.
        * platform/mac/FontMac.mm:
        (WebCore::shapeArabic): Changed to call shapeArabic() instead of u_shapeArabic().
        * platform/mac/ShapeArabic.c: Added. Based on ushape.c from ICU, with
        additional shaping data and logic for Arabic Presentation Forms-A. Removed
        many options that are not used in WebKit and code that malloc()ed a temporary
        buffer and reversed the string.
        (changeLamAlef):
        (specialChar):
        (getLink):
        (isTashkeelChar):
        (shapeUnicode):
        (shapeArabic):
        * platform/mac/ShapeArabic.h: Added.

2007-05-11  Darin Adler  <darin@apple.com>

        Reviewed by Mitz.

        - fix http://bugs.webkit.org/show_bug.cgi?id=7452
          <rdar://problem/3211749> line breaks ignored after <wbr> in <pre> block (affects livejournal.com)

        - fix http://bugs.webkit.org/show_bug.cgi?id=10657
          <rdar://problem/4274588> <wbr> tags are ignored

        - fix http://bugs.webkit.org/show_bug.cgi?id=12689
          <wbr> :before/:after content causes line break

        - fix <rdar://problem/5127366> DOM tree isn't correct when parsing with <wbr>

        Test: fast/text/wbr-pre.html
        Test: fast/text/wbr.html
        Test: fast/css-generated-content/wbr-with-before-content.html
        Test: fast/parser/parse-wbr.html

        * html/HTMLElement.h:
        * html/HTMLElement.cpp:
        (WebCore::HTMLElement::endTagRequirement): Use the same end tag requirement for a <wbr>
        element as for a <br> element, TagStatusForbidden.
        (WebCore::HTMLElement::tagPriority): Use the same priority for a <wbr> element as for a
        <br> element, 0.
        (WebCore::HTMLElement::createRenderer): Added. Create a RenderWordBreak to trigger the
        new rendering code paths.

        * rendering/RenderFlow.h: Add a virtual isWordBreak so we can detect RenderWordBreak.

        * rendering/RenderWordBreak.h: Added.
        * rendering/RenderWordBreak.cpp: Added.

        * WebCore.pro: Added new files.
        * WebCore.xcodeproj/project.pbxproj: Added new files.
        * WebCoreSources.bkl: Added new files.

        * rendering/RenderBlock.cpp: (WebCore::RenderBlock::calcInlinePrefWidths): Reset the
        line when we hit a <wbr>.
        * rendering/bidi.cpp: (WebCore::RenderBlock::findNextLineBreak): Add a line break when
        we hit a <wbr>.

        * dom/Node.cpp: (Node::createRendererIfNeeded): Fix a null check for the case where
        createRenderer returns 0 even though rendererIsNeeded returned true. I can't reproduce
        it on demand, but while running layout tests I hit this once. Since there was already
        a null check here, I rearranged it so it guards all the code that uses the renderer.
        Later we might want to figure out under exactly what circumstances rendererIsNeeded
        will return true but createRenderer return 0 and consider eliminating them.

2007-05-11  David Hyatt  <hyatt@apple.com>

        Fix for bug 13675, focus rings don't repaint properly on editable
        continuations.

        Reviewed by olliej

        (WebCore::InlineFlowBox::paint):
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::paintObject):
        (WebCore::continuationOutlineTable):
        (WebCore::RenderBlock::addContinuationWithOutline):
        (WebCore::RenderBlock::paintContinuationOutlines):
        * rendering/RenderBlock.h:
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::absoluteClippedOverflowRect):
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::repaintAfterLayoutIfNeeded):
        (WebCore::RenderObject::absoluteOutlineBox):

2007-05-11  Rob Buis  <buis@kde.org>

        Reviewed by Oliver.

        Cleanups mostly inspired by Coverage results.

        * ksvg2/css/SVGCSSParser.cpp:
        (WebCore::CSSParser::parseSVGValue):
        (WebCore::CSSParser::parseSVGStrokeDasharray):
        * ksvg2/css/SVGRenderStyleDefs.cpp:
        (StyleFillData::operator==):
        * ksvg2/svg/SVGColor.cpp:
        (WebCore::SVGColor::colorFromRGBColorString):

2007-05-11  Holger Freyther <freyther@kde.org>

        Reviewed by Mark Rowe.

        Move libcurl configuration into WebKit.pri so it will be used by GdkLauncher.

        * WebCore.pro:

2007-05-10  David Hyatt  <hyatt@apple.com>

        <rdar://problem/5015522> Bounds rectangle of unloaded images is 
        drawn briefly while loading
        
        When the image is null and has no size, don't draw the grey
        rectangles or alt text any more.  Wait for an actual error to
        occur with the image before we start showing alt text and borders.

        (Images with no source set at all will continue to show alt text and
        borders immediately.)

        Reviewed by bradee-oh

        * rendering/RenderImage.cpp:
        (WebCore::RenderImage::paint):

2007-05-10  Mitz Pettel  <mitz@webkit.org>

        Reviewed by Darin.

        - fix http://bugs.webkit.org/show_bug.cgi?id=13655
          Incomplete repaint when text-shadow is used in a render layer with explicit height

        Test: fast/repaint/layer-full-repaint.html

        Removed custom repaint logic from RenderLayer. repaintAfterLayoutIfNeeded()
        knows how to do everything we need now. The only catch is that we cannot
        rely on its "do a full repaint if the object needs layout" behavior, since
        by the time we call it, the needs layout flag has been reset. The solution
        is to cache the need for a full repaint in the layer.

        * page/FrameView.cpp:
        (WebCore::FrameView::layout): Removed call to checkForRepaintOnResize().
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::checkForRepaintOnResize): Removed.
        (WebCore::RenderLayer::RenderLayer): Replaced the m_repaintOverflowOnResize
        flag with a m_needsFullRepaint flag, which indicates that the layer needs
        to do a full repaint in the next call to updateLayerPositions().
        (WebCore::RenderLayer::updateLayerPositions): Simplified the repaint logic.
        Either call repaintAfterLayoutIfNeeded() or do a full repaint, depending on
        m_needsFullRepaint.
        * rendering/RenderLayer.h:
        (WebCore::RenderLayer::setNeedsFullRepaint):
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::setNeedsLayout): Mark the layer for full repaint.

2007-05-10  Justin Garcia  <justin.garcia@apple.com>

        Reviewed by ggaren

        <rdar://problem/5195166> Incorrect proposedRange DOMRange passed to WebViewEditing delegate
        
        In setModifyBias, we must cache the start and the end 
        because the calls to setBase and setExtent can modify 
        them (added a testcase).
        The temporary SelectionController that we use in modify() to
        produce the proposed range that will be passed to 
        shouldChangeSelectedDOMRange must have the same m_modifyBias
        as the original SelectionController, or else when the 
        modification is performed, setModifyBias can swap the base 
        and the extent incorrectly (added a testcase).
        Renamed m_modifyBias to m_lastChangeWasHorizontalExtension.
        Renamed setModifyBias to willBeModified.

        * editing/SelectionController.cpp:
        (WebCore::SelectionController::SelectionController):
        (WebCore::SelectionController::setSelection):
        (WebCore::SelectionController::willBeModified):
        (WebCore::SelectionController::modify):
        * editing/SelectionController.h:
        (WebCore::SelectionController::setLastChangeWasHorizontalExtension):
        * page/EventHandler.cpp:
        (WebCore::EventHandler::handleMousePressEventSingleClick):
        (WebCore::EventHandler::updateSelectionForMouseDragOverPosition):

2007-05-10  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Darin Adler.

        "IconDatabase::sharedIconDatabase()" => "iconDatabase()" for terseness,
        in the style of WebCore::cache().

        * WebCore.exp:
        * history/HistoryItem.cpp: Removed retainIconInDatabase because calling
        "retain" in order to release something is really confusing and, now that
        iconDatabase() is more terse, we don't need this helper to shorten the
        syntax. (The isEmpty() check is also done by the database, so we don't 
        need it either.)

        (WebCore::IconDatabase::~IconDatabase): ASSERT that our destructor isn't
        called. We're a singleton, so it's confusing to have tear-down code.

2007-05-10  Adele Peterson  <adele@apple.com>

        Reviewed by Hyatt.

        WebCore part of fix for <rdar://problem/4100616> Doing a "find" in RSS doesn't scroll to result

        Test: fast/overflow/scroll-nested-positioned-layer-in-overflow.html

        Merged visibleSelectionRect into selectionRect.  selectionRect() now takes an argument to determine
        whether or not to return a rect that clips to the visible content.  This change makes all of the implementations of selectionRect
        consistent by having them all consider the repaint rect when clipping to visible content.

        * page/Frame.cpp:
        (WebCore::Frame::revealSelection): Call selectionRect with clipToVisibleContent = false, so we can get a rect that's not visible to reveal.
        (WebCore::Frame::selectionRect): Added clipToVisibleContent argument, and merged visibleSelectionRect into this method.
        (WebCore::Frame::setIsActive): Use selectionRect instead of visibleSelectionRect.
        * page/Frame.h:
        * page/mac/FrameMac.mm: (WebCore::Frame::selectionImage): Update layout before creating the image.  Use selectionRect instead of visibleSelectionRect.
        * page/DragController.cpp: (WebCore::dragLocForSelectionDrag): Use selectionRect instead of visibleSelectionRect.

        * rendering/RenderBR.h: (WebCore::RenderBR::selectionRect): Updated argument.
        * rendering/RenderBlock.h: (WebCore::RenderBlock::selectionRect): ditto.
        * rendering/RenderSVGInlineText.cpp: (WebCore::RenderSVGInlineText::selectionRect): ditto.
        * rendering/RenderSVGInlineText.h: ditto.
        * rendering/RenderObject.h: 
        (WebCore::RenderObject::selectionRect): ditto.
        (WebCore::RenderObject::SelectionInfo::SelectionInfo): ditto.
        * rendering/RenderView.cpp:
        (WebCore::RenderView::selectionRect): ditto.
        (WebCore::RenderView::setSelection): ditto.
        * rendering/RenderView.h:

        * rendering/RenderText.h:
        * rendering/RenderText.cpp: (WebCore::RenderText::selectionRect): Only call computeAbsoluteRepaintRect when clipping to visible content.
        Otherwise, just adjust the rect to the correct position.
        * rendering/RenderListMarker.h:
        * rendering/RenderListMarker.cpp: (WebCore::RenderListMarker::selectionRect):
          To match what we do in RenderText, if we're trying to clip to visible content, just call computeAbsoluteRepaintRect.
        * rendering/RenderReplaced.h:
        * rendering/RenderReplaced.cpp: (WebCore::RenderReplaced::selectionRect): ditto.

        * rendering/RenderLayer.cpp: (WebCore::RenderLayer::scrollRectToVisible): Check for a parent layer at the beginning, so we can try to scroll all of our parent layers 
          first, before trying to scroll the top level view.  Also, don't try to scroll overflow layers that have -webkit-line-clamp restricting the height.
          This will prevent us from revealing text hidden by the slider in Safari RSS.

        * WebCore.exp: Update symbols for WebKit.

2007-05-10  David Hyatt  <hyatt@apple.com>

        Fix for:

        <rdar://problem/5195272> REGRESSION: broke outline rings for continuations 
        with empty inline containers
        
        http://bugs.webkit.org/show_bug.cgi?id=13667

        Make sure to only include collapsed top/bottom margins of the block portion
        of the continuation if we know for sure that we have inline line boxes before
        and after that would prevent the collapse from going further.

        In plain English: the focus rings were too tall. :)

        Reviewed by beth

        * rendering/RenderFlow.cpp:
        (WebCore::RenderFlow::addFocusRingRects):

2007-05-10  David Hyatt  <hyatt@apple.com>

        Fix for:

        <rdar://problem/5067235> REGRESSION: Excessively wide table, impossible to resize

        The table used white-space: pre-wrap, which is supported only by WebKit.  There
        was a bug with the computation of min pref width for pre-wrap text.

        Reviewed by mitzpettel

        fast/text/white-space/pre-wrap-line-test.html

        * rendering/RenderText.cpp:
        (WebCore::RenderText::calcPrefWidths):

2007-05-10  Brady Eidson  <beidson@apple.com>

        Reviewed by Oliver

        Cleanup from my earlier Java Applet patch.  We should keep a central location to query if 
        a mime type counts as a Java Applet

        * html/HTMLObjectElement.cpp:
        (WebCore::HTMLObjectElement::containsJavaApplet): Query MimeTypeRegistry on the type

        * platform/MimeTypeRegistry.cpp:
        (WebCore::MimeTypeRegistry::isSupportedImageMIMEType): Update style
        (WebCore::MimeTypeRegistry::isSupportedImageResourceMIMEType): Ditto
        (WebCore::MimeTypeRegistry::isSupportedNonImageMIMEType): Ditto
        (WebCore::MimeTypeRegistry::isJavaAppletMIMEType): Perform the Java Applet check
        * platform/MimeTypeRegistry.h:

        * rendering/RenderPartObject.cpp:
        (WebCore::RenderPartObject::updateWidget): Query MimeTypeRegistry on the type

2007-05-10  Patti Hoa  <patti@apple.com>

        Reviewed by Darin.
        
        <rdar://problem/4720109> Sentence textMarker methods do not work well with empty lines
        
        * bridge/mac/WebCoreAXObject.mm:
        (-[WebCoreAXObject doAXNextSentenceEndTextMarkerForTextMarker:]):
        (-[WebCoreAXObject doAXPreviousSentenceStartTextMarkerForTextMarker:]):
        When a marker position is given, the sentence ax methods automatically shift position by one to make sure
        not to ask for the current sentence again.  This is generally fine except when the position
        shift over an empty line break, which is should be considered a separate sentence. In this case, 
        if we used the shifted position to ask for sentence boundary, ICU parser is not given the text data
        containing the newline to correctly determine the sentence boundary.  Since the ax sentence method is 
        explicitly shifting the position to ask for sentence boundary, it should make sure not to skip over important
        character that can be a standalone sentence.
        * editing/visible_units.cpp:
        (WebCore::nextBoundary):
        When determining boundary, don't stop on a collapsed range, such as newline.  
        Just pick the next valid position to use as boundary.

2007-05-10  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Oliver.

        - WebCore part of fix for:
        <rdar://problem/5063277> blank screen after login to Citibank Online (accessing document before frame starts loading cancels load)
        <rdar://problem/5159541> REGRESSION (r20972): Wall Street Journal pages replaced by advertisements (13465)

        The basic approach is to have Frames start out containing an empty document instead of absolutely nothing,
        so there is no need to initialize them on demand. Various side effects of that cause both of these bugs.
        
        However, this caused many regressions so I had to fix the fallout.
        
        * WebCore.exp: fix symbol exports
        * bindings/js/kjs_window.cpp:
        (KJS::createNewWindow): useless "created" bool (we don't need it here)
        (KJS::WindowFunc::callAsFunction): detect if we created a new frame, because if so,
        we need to initialize the domain (can't count on it not having a document), also
        don't try to make a new document for it.
        Also, stop properly.
        * css/cssstyleselector.cpp:
        (WebCore::CSSStyleSelector::CSSStyleSelector): don't count on document having a view here
        * html/HTMLObjectElement.cpp:
        (WebCore::HTMLObjectElement::isImageType): Ask client, to match how other <object> renderer
        decisions are made.
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::FrameLoader): Initialize new data members
        (WebCore::FrameLoader::init): Do the slightly tricky sequence of steps to properly make
        an empty document with everything hooked up.
        (WebCore::FrameLoader::createWindow): Added "created" bool.
        (WebCore::FrameLoader::stopLoading): (whitespace change)
        (WebCore::FrameLoader::begin): Don't try to create an empty document.
        (WebCore::FrameLoader::finishedParsing): If creating an initial empty document, don't
        do any of this work.
        (WebCore::FrameLoader::checkCompleted): Do checkLoadComplete() as well.
        (WebCore::FrameLoader::baseURL): don't check for null document
        (WebCore::FrameLoader::baseTarget): ditto
        (WebCore::FrameLoader::completeURL): ditto
        (WebCore::FrameLoader::didTellBridgeAboutLoad): ditto
        (WebCore::FrameLoader::scheduleLocationChange): determine duringLoad differently; doc won't
        be null.
        (WebCore::FrameLoader::gotoAnchor): don't check for null document
        (WebCore::FrameLoader::canTarget): don't check for null document
        (WebCore::FrameLoader::stopForUserCancel): new method for explicit stops like window.stop().
        (WebCore::FrameLoader::transitionToCommitted): check for pre-loaded state properly
        (WebCore::FrameLoader::createEmptyDocument): removed
        (WebCore::FrameLoader::checkLoadCompleteForThisFrame): don't send delegate callbacks when making initial
        doc.
        (WebCore::FrameLoader::tokenizerProcessedData): Assume document; just checkCompleted now that it
        does checkLoadComplete.
        (WebCore::FrameLoader::receivedMainResourceError): assume document
        (WebCore::FrameLoader::saveDocumentState): Assume there's a document except during initial load
        (WebCore::FrameLoader::mainReceivedCompleteError): do checkCompleted, not checkLoadComplete
        (WebCore::FrameLoader::continueLoadWithData): assume document
        * loader/FrameLoader.h:
        * loader/MainResourceLoader.cpp:
        (WebCore::MainResourceLoader::receivedError): Add more ref protection and do things in a slightly
        different order.
        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::document): don't force document creation, just assert there is one.
        * page/Frame.cpp:
        (WebCore::Frame::init): Added init method.
        (WebCore::Frame::pageDestroyed): when a frame is removed, make sure to check if the parent is
        done loading.
        * page/Frame.h:
        * page/mac/WebCoreFrameBridge.mm:
        (-[WebCoreFrameBridge stringByEvaluatingJavaScriptFromString:forceUserGesture:]): No need to force
        document.
        (-[WebCoreFrameBridge aeDescByEvaluatingJavaScriptFromString:]): ditto
        * platform/graphics/svg/SVGImage.cpp:
        (WebCore::SVGImage::dataChanged): init the frame
        * rendering/RenderPart.cpp:
        (WebCore::RenderPart::updateWidgetPosition): If a subframe needs layout, then lay it out even
        if the bounds did not change; the content size might be wrong.
        * rendering/RenderTreeAsText.cpp:
        (WebCore::externalRepresentation): Don't crash if the frame lacks a view.

2007-05-10  David Hyatt  <hyatt@apple.com>

        Fix for:

        <rdar://problem/5146757> REGRESSION: div that wrapped to screen width in 
        tiger no longer wraps
        
        http://bugs.webkit.org/show_bug.cgi?id=13654

        Reviewed by mitz

        fast/text/whitespace/normal-after-nowrap-breaking.html

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::calcInlinePrefWidths):

2007-05-10  David Hyatt  <hyatt@apple.com>

        Fix for:

        <rdar://problem/4778099> Links with nested continuations fail to 
        paint their outlines (11255)
        
        http://bugs.webkit.org/show_bug.cgi?id=11255

        Fix multiple bugs with outline painting of continuations to ensure that
        all combos work (empty/full inline - block with/without margins - 
        empty/full inline).

        Reviewed by mitz

        fast/inline/continuation-outlines.html

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::paintObject):
        * rendering/RenderFlow.cpp:
        (WebCore::RenderFlow::addFocusRingRects):

2007-05-10  David Hyatt  <hyatt@apple.com>

        Fix for:

        <rdar://problem/5193529> REGRESSION: RTL Overflows scrollbar not showing 
        when they should be
        
        Fallout from fix for bug 11926.  Make sure to restrict the fix to the
        RenderView for now, since the full-blown overflow case is pretty involved.

        Reviewed by mitzpettel

        fast/overflow/unreachable-content-bug-rtl.html

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::lowestPosition):
        (WebCore::RenderBlock::rightmostPosition):
        (WebCore::RenderBlock::leftmostPosition):

2007-05-10  Brady Eidson <beidson@apple.com>

        Reviewed by Oliver

        Fix for http://bugs.webkit.org/show_bug.cgi?id=13636 and <rdar://problem/5190816>

        When creating the applets collection, be sure to only count Objects if they contain
        a java applet

        * html/HTMLCollection.cpp:
        (WebCore::HTMLCollection::traverseNextItem): Add the qualifier for Objects that 
          containsJavaApplet() must be true

        * html/HTMLObjectElement.cpp:
        (WebCore::HTMLObjectElement::containsJavaApplet): Check this Object element and inner
          nodes for any Java applets
        * html/HTMLObjectElement.h: 

2007-05-10  David Hyatt  <hyatt@apple.com>

        Fix for:

        <rdar://problem/4694859> SAP: HTML tags with overflow:hidden consume
        space on page, do not consume space in Firefox (11926)

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

        Make sure that unreachable objects along one axis (e.g., top/left) do not
        contribute to the scrollable area in the opposite axis (e.g., right/bottom).

        Reviewed by olliej

        fast/overflow/unreachable-content-test.html

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::lowestPosition):
        (WebCore::RenderBlock::rightmostPosition):
        (WebCore::RenderBlock::leftmostPosition):

2007-05-10  David Hyatt  <hyatt@apple.com>

        Fix for:

        <rdar://problem/4656825> REGRESSION: Japanese TV time table widget:
        part of the number in background has been cut off.

        Now that opacity uses a tight bounding box to clip, we need to make sure
        to factor spillout caused by negative letter spacing into our right
        overflow.  Latch on to the code that does this already for text-stroke
        and text-shadow.

        Reviewed by olliej

        fast/text/letter-spacing-negative-opacity.html

       * rendering/InlineFlowBox.cpp:
        (WebCore::InlineFlowBox::placeBoxesHorizontally):

2007-05-10  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Maciej Stachowiak.
        
        More fix-ups to the WebScriptObject/WebScripting APIs, related to
        <rdar://problem/5140447> API for fetching JSGlobalContextRef from WebView 
        or WebFrame

        * bindings/objc/WebScriptObject.h: Fully specified the surprising rules for
        type conversion between JavaScript and ObjC.
        * bindings/objc/WebScriptObject.mm: Added up-call accessor to WebFrame.
        This is kind of stinky, but I'm OK with it because eventually all of this
        code should move up into WebKit.
        (+[WebScriptObject scriptObjectForJSObject:frame:]):
        (-[WebScriptObject valueForKey:]):
        (-[WebScriptObject JSObject]): 
            - Added _rootObject check because if _rootObject returns NULL it means 
            that _imp is no longer GC protected, so it's not safe to use. 
            - Added _isSafeScript check because that's what WebScriptObject methods
            typically do, even though the value of doing so isn't clear to me.
        * bindings/objc/WebScriptObjectPendingPublic.h: Added WebFrame* parameter
        to -scriptObjectForJSObject:. This is required to wrap JS objects that
        are not already in the wrapper cache. It would be nice to remove this
        limitation of WebScriptObject some day.
        * page/mac/FrameMac.mm:
        (WebCore::Frame::cleanupPlatformScriptObjects): Force removal of m_windowScriptObject
        from the cache, to avoid retrieving the m_windowScriptObject from the previous
        page on a new page load. (It would be non-functional in that case.)

2007-05-10  David Hyatt  <hyatt@apple.com>

        Fix for <rdar://problem/5183697>.

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

        Make sure verticalPositionHint is not called on an inline-block from
        content inside the inline-block (like text).

        Reviewed by olliej

        fast/inline-block/inline-block-vertical-align.html

        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::verticalPositionHint):
        * rendering/RenderText.cpp:
        (WebCore::RenderText::verticalPositionHint):
        * rendering/RenderThemeMac.mm:
        (WebCore::RenderThemeMac::setFontFromControlSize):

2007-05-09  Holger Freyther <zecke@selfish.org>

        Reviewed by Mark Rowe.

        Gdk build fix with SVG enabled.  Stub out ImageBufferCairo.

        * WebCore.pro: Build ImageBufferCairo.cpp
        * platform/graphics/cairo/ImageBufferCairo.cpp: Added.
        (WebCore::ImageBuffer::create):
        (WebCore::ImageBuffer::~ImageBuffer):
        (WebCore::ImageBuffer::context):

2007-05-08  Justin Garcia  <justin.garcia@apple.com>

        Reviewed by darin
        
        <rdar://problem/5017613> Style changes don't effect fully selected ToDo content

        * editing/ApplyStyleCommand.cpp:
        (WebCore::ApplyStyleCommand::applyInlineStyle):
        Use a for loop instead of while(1).
        Simplify loop termination using Range::pastEndNode.
        Don't handle the start.node() == end.node() case 
        specially, it's unnecessary.
        Apply the style change to fully selected plaintext-only
        regions, not with wrapper spans inside the region, but 
        by changing the element's inline style declaration.
        Don't descend into nodes whose children we should ignore.

2007-05-09  Adele Peterson  <adele@apple.com>

        Reviewed by Hyatt.

        Fix for <rdar://problem/5113578> REGRESSION: textfields that set the height but not the font 
        look different from IE & FF because the font is small

        For plain text fields, don't stretch the inner text box.  Center it vertically in the field.

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

2007-05-09  Atul Mehrotra  <atul.mehrotra@celunite.com>

        Gdk build fix.

        * platform/gdk/TemporaryLinkStubs.cpp:
        (Editor::newGeneralClipboard):

2007-05-09  Mitz Pettel  <mitz@webkit.org>

        Reviewed by Dave Hyatt.

        - fix http://bugs.webkit.org/show_bug.cgi?id=13037
          REGRESSION: Copy-on-scroll not reset properly after back/forward navigation

        * page/FrameView.cpp:
        (WebCore::FrameViewPrivate::FrameViewPrivate): Moved initialization of
        m_slowRepaintObjectCount here.
        (WebCore::FrameViewPrivate::reset): Do not reset the slow repaint object
        count here.
        (WebCore::FrameView::useSlowRepaints):
        (WebCore::FrameView::addSlowRepaintObject):
        (WebCore::FrameView::removeSlowRepaintObject): Added an assertion that the
        object count is positive.
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::setStyle): Corrected a mix up between old and new
        style, which caused the object count to be decremented when it was supposed
        to be incremented and vice versa.

2007-05-09  Peter Müller <pm@one.com>

        Reviewed by Dave Hyatt.

        Changed the hardcoded colors that are used for CSS 2.1 system colors.
        Previous colors had numerous conflicts in semantic pairs, which
        made text invisible in highlight, info and menu colored areas.
        The new hardcoded colors are inspired by Aqua.

        Ideally these colors should be fetched through AppKit instead,
        though I am not sure if it is possible to make a 1:1 mapping
        between CSS2.1 system colors and Mac OS X.

        * css/cssstyleselector.cpp:
        (WebCore::):

2007-05-09  Lars Knoll <lars@trolltech.com>

        Fix the Qt build.

        * editing/qt/EditorQt.cpp:

2007-05-08  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Darin Adler.
        
        More fix-ups to the WebScriptObject/WebScripting APIs, related to
        <rdar://problem/5140447> API for fetching JSGlobalContextRef from WebView 
        or WebFrame
        
        1. Added -scriptObjectForJSObject: SPI so you can bridge back from JavaScriptCore
        to WebScriptObject.
        
        2. Fixed WebScriptObject bridging so that you always get the same WebScriptObject
        for a JSObject (like in the DOM). This makes -scriptObjectForJSObject: a
        lot more coherent as an API.

        * bindings/objc/DOMInternal.mm: Renamed wrapperCache to DOMWrapperCache
        to distinguish from the JSWrapperCache. Added typedef for readability.
        (WebCore::getDOMWrapper):
        (WebCore::addDOMWrapper):
        (WebCore::removeDOMWrapper):
        * bindings/objc/WebScriptObject.mm: Added JSWrapperCache, which works just
        like the DOMWrapperCache.
        (WebCore::getJSWrapper):
        (WebCore::addJSWrapper):
        (WebCore::removeJSWrapper):
        (WebCore::createJSWrapper):
        (+[WebScriptObject scriptObjectForJSObject:]): This is the new API. It attempts
        to return a specific DOM wrapper object, or, barring that, it returns a 
        generic WebScriptObject.
        (+[WebScriptObject scriptObjectForJSObject:originRootObject:rootObject:]):
        Added this method to support our old WebScriptObject security and leak 
        checking model, even though it doesn't work very well. 
        (-[WebScriptObject _setImp:originRootObject:rootObject:]):
        (-[WebScriptObject dealloc]):
        (-[WebScriptObject finalize]):
        (+[WebScriptObject _convertValueToObjcValue:originRootObject:rootObject:]):
        * bindings/objc/WebScriptObjectPendingPublic.h:
        * bindings/objc/WebScriptObjectPrivate.h:
        * page/mac/FrameMac.mm:
        (WebCore::Frame::windowScriptObject): Changed to use the new API. This
        fixes a bug where the object sent to -windowScriptObjectAvailable: and returned
        from -windowScriptObject could not be round-tripped.

2007-05-09  Mark Rowe  <mrowe@apple.com>

        Build fix.

        * editing/Editor.cpp:
        (WebCore::findFirstGrammarDetailInRange): Use unsigned rather than int.
        (WebCore::findFirstBadGrammarInRange): Cast to unsigned in assertion.
        (WebCore::isRangeUngrammatical): Remove unused variables.

2007-05-08  Oliver Hunt  <oliver@apple.com>

        Reviewed by Darin.
        
        Fix <rdar://problem/5188938> arc method on Canvas causes hang or crash
        
        Workaround bad behaviour of CGPathAddArc when passed inf as start or
        end angles.

        * platform/graphics/cg/PathCG.cpp:
        (WebCore::Path::addArc):

2007-05-08  Darin Adler  <darin@apple.com>

        Reviewed by Hyatt and Hatcher.

        - fix auto-activation code path so Tiger and Leopard aren't different

        * platform/mac/WebFontCache.mm: (+[WebFontCache fontWithFamily:traits:size:]):
        Do the auto-activation dance first before doing anything else, and ignore the
        font that it returns.

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

        Reviewed by Darin.

        Moved most spelling/grammar logic to C++.  Now calls through to
        WebKit to actually invoke NSSpellChecker.

        * editing/Editor.cpp:
        (WebCore::Editor::ignoreSpelling): Added (ported from EditorMac).
        (WebCore::Editor::learnSpelling): Added (ported from EditorMac).
        (WebCore::findFirstMisspellingInRange): Added (ported from EditorMac).
        (WebCore::paragraphAlignedRangeForRange): Added (ported from EditorMac).
        (WebCore::findFirstGrammarDetailInRange): Added (ported from EditorMac).
        (WebCore::findFirstBadGrammarInRange): Added (ported from EditorMac).
        (WebCore::Editor::advanceToNextMisspelling): Added (ported from EditorMac).
        (WebCore::Editor::isSelectionMisspelled): Added (ported from EditorMac).
        (WebCore::isRangeUngrammatical): Added (ported from EditorMac).
        (WebCore::Editor::isSelectionUngrammatical): Added (ported from EditorMac).
        (WebCore::Editor::guessesForUngrammaticalSelection): Added (ported from EditorMac).
        (WebCore::Editor::guessesForMisspelledSelection): Added (ported from EditorMac).
        (WebCore::Editor::showSpellingGuessPanel): Added (ported from EditorMac).
        (WebCore::Editor::spellingPanelIsShowing): Added (ported from EditorMac).
        (WebCore::Editor::markMisspellingsAfterTypingToPosition): Added (ported from EditorMac).
        (WebCore::markAllMisspellingsInRange): Added (ported from EditorMac).
        (WebCore::markAllBadGrammarInRange): Added (ported from EditorMac).
        (WebCore::markMisspellingsOrBadGrammar): Added (ported from EditorMac).
        (WebCore::Editor::markMisspellings): Added (ported from EditorMac).
        (WebCore::Editor::markBadGrammar): Added (ported from EditorMac).
        * editing/mac/EditorMac.mm: Removed Objective C version of spelling/grammar calls.

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

        Reviewed by Ada.

        Slight modification to last editor method fix.

        * bridge/EditorClient.h:
        * platform/gdk/EditorClientGdk.cpp:
        (WebCore::EditorClientGdk::updateSpellingUIWithGrammarString):
        * platform/gdk/EditorClientGdk.h:
        * platform/graphics/svg/SVGImageEmptyClients.h:
        (WebCore::SVGEmptyEditorClient::updateSpellingUIWithGrammarString):

2007-05-08  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Hyatt.

        http://bugs.webkit.org/show_bug.cgi?id=13480
        window.Attr is undefined

        Test: fast/dom/Window/attr-constructor.html

        * dom/Attr.idl:
        * dom/CDATASection.idl:
        * dom/CharacterData.idl:
        * dom/Comment.idl:
        * dom/DOMImplementation.idl:
        * dom/DocumentType.idl:
        * dom/Entity.idl:
        * dom/EntityReference.idl:
        * dom/Notation.idl:
        * dom/ProcessingInstruction.idl:
        * dom/Text.idl:
        Added GenerateConstructor.

        * page/DOMWindow.idl: Added constructor properties for DOM interfaces.

2007-05-07  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Maciej Stachowiak.

        Fixed <rdar://problem/5140447> API for fetching JSGlobalContextRef from 
        WebView or WebFrame
        
        Added support for new -[WebScriptObject JSObject] and -[WebFrame globalContext]
        APIs.
        
        Also fixed some more cases of <rdar://problem/4395622> API: 
        WebScriptObject.h incorrectly reports that -isSelectorExcludedFromWebScript 
        returns NO by default, and generally cleaned up that documentation.

        * WebCore.exp: A lot of the diff here is from sorting.
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/objc/WebScriptObject.h:
        * bindings/objc/WebScriptObject.mm:
        (-[WebScriptObject JSObject]):
        * bindings/objc/WebScriptObjectPendingPublic.h: Added.

2007-05-08  Lars Knoll <lars@trolltech.com>

        Reviewed by Hyatt.

        Fix valgrind reported uninitialized memory read.

        * rendering/RenderText.cpp:
        (WebCore::RenderText::RenderText):

2007-05-07  Justin Garcia  <justin.garcia@apple.com>

        Reviewed by oliver

        <rdar://problem/4895428> Can't drag selected ToDo
        
        The user tries to drag a selection by mousing down
        on the editable part of a ToDo, which is focusable,
        since it is an editable node within non-editable 
        content.  But we focus focusable elements on mouse 
        down, and focusing the editable piece blows away 
        the selection and prevents the drag. This is how 
        IE behaves, but content seems generally difficult 
        to drag in IE, so this doesn't make it any worse.
        
        Since focus doesn't appear to be cancelable, either
        with a DOM event or an editing delegate, I fixed this
        by delaying the focus of focusable nodes that are 
        selected and inside an already focused node.  The 
        node will be focused if the user mouses up without 
        doing any dragging because the mouse up sets a
        selection, which calls setFocusNodeIfNeeded.

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

2007-05-07  Atul Mehrotra <atul.mehrotra@celunite.com>

        Reviewed by Maciej.

        GDK Build fix

        * platform/gdk/TemporaryLinkStubs.cpp:

2007-05-07  Oliver Hunt  <oliver@apple.com>

        Reviewed by Maciej.

        Correcting comparisons to handle NaN in the same manner
        as other Canvas methods.

        * html/CanvasRenderingContext2D.cpp:
        (WebCore::CanvasRenderingContext2D::arcTo):
        (WebCore::CanvasRenderingContext2D::arc):
          Correcting arc/arcTo to match the WHAT WG draft.
        (WebCore::CanvasRenderingContext2D::rect):
        (WebCore::CanvasRenderingContext2D::clearRect):
        (WebCore::CanvasRenderingContext2D::fillRect):
        (WebCore::CanvasRenderingContext2D::strokeRect):

2007-05-07  David Hyatt  <hyatt@apple.com>

        Add some comments to the glyph/font code (patch from MarvinD, tweaked by
        me to correct a few bits and to make it forward-compatible with the work
        going on in 3315.

        Reviewed by me

        * ChangeLog:
        * platform/Font.cpp:
        (WebCore::Font::glyphDataForCharacter):
        * platform/GlyphPageTreeNode.cpp:
        (WebCore::GlyphPageTreeNode::initializePage):
        * platform/GlyphPageTreeNode.h:

2007-05-07  Justin Garcia  <justin.garcia@apple.com>

        Fix layout test failures.

        * editing/SelectionController.cpp:
        (WebCore::SelectionController::contains): Use comparePositions
        instead of Range::comparePoint, because comparePositions can
        handle positions inside shadow trees.

2007-05-07  Justin Garcia  <justin.garcia@apple.com>

        Reviewed by darin
        
        <rdar://problem/4895428> Can't drag selected To Do if it is not showing a due date
        
        The code in SelectionController::contains returned false 
        incorrectly if the selection end just after a table 
        and the position was inside that table.

        * editing/SelectionController.cpp:
        (WebCore::SelectionController::contains): Compare the position with the
        ends of the selection and then use Range::comparePoint.

2007-05-07  Darin Adler  <darin@apple.com>

        - rolling out setInnerHTML optimization until I can figure out why tests are failing

2007-05-07  Darin Adler  <darin@apple.com>

        Reviewed by Hyatt.

        - fix http://bugs.webkit.org/show_bug.cgi?id=13602
          Amazon product pages keep repainting over and over again

        Optimize setInnerHTML, setOuterHTML, and setInnerText so they don't change the DOM at all
        if they don't need to.

        Test: fast/dom/HTMLElement/set-inner-outer-optimization.html

        * html/HTMLElement.cpp:
        (WebCore::equal): Added. Helper function that compares two Text nodes or two NamedAttrMap
        attribute maps.
        (WebCore::shallowEqual): Added. Helper function that compares two Element nodes or two
        arbitrary nodes.
        (WebCore::replaceChildrenWithFragment): Added. Helper function used by setInnerHTML and
        setInnerText. Optimizes the cases where all the nodes are the same, where both the current
        and the new content are single text nodes, and where the current content is a single node
        that can be replaced with replaceChild.
        (WebCore::replaceChildrenWithText): Added. Helper function used by setInnerText. Optimizes
        the case where the current content is a single text node or a single node that can be
        replaced with replaceChild.
        (WebCore::HTMLElement::setInnerHTML): Changed to call replaceChildrenWithFragment.
        (WebCore::HTMLElement::setOuterHTML): Added special case to optimize when the new content
        exactly matches the current node.
        (WebCore::HTMLElement::setInnerText): Changed to call replaceChildrenWithText in a few
        cases instead of doing removeChildren/appendChild. Changed code that was using
        DeprecatedString to instead use String. Changed general case to use a document fragment
        and replaceChildrenWithFragment.

        * dom/CharacterData.cpp: (WebCore::CharacterData::dispatchModifiedEvent):
        Fixed bug where we would not dispatch the DOMSubtreeModified event unless someone
        was registered for the DOMCharacterDataModified event. Caused trouble in the test.

2007-05-06  Darin Adler  <darin@apple.com>

        - blind try at fixing the Qt build

        * platform/qt/TextBreakIteratorQt.cpp: (WebCore::sentenceBreakIterator):
        Added a placeholder.

2007-05-06  Darin Adler  <darin@apple.com>

        Reviewed by Hyatt.

        - fix http://bugs.webkit.org/show_bug.cgi?id=13537
          Canvex example starts rendering strangely after a while

        * html/CanvasRenderingContext2D.cpp: (WebCore::CanvasRenderingContext2D::drawImage):
        Don't raise an exception if the source or destination rectangle is empty.

2007-05-06  Darin Adler  <darin@apple.com>

        Reviewed by Hyatt.

        - fix <rdar://problem/4585593> REGRESSION: Some 2-byte characters in printed page
          header are drawn with too-large font and clipped

        Doesn't affect text within web pages, so no layout test.

        * platform/mac/FontCacheMac.mm: (WebCore::FontCache::getFontDataForCharacters):
        Base the substitute font on the FontPlatformData rather than the FontDescription.
        Before, it was a mix of both. This works properly for fonts where we have no
        FontDescription and is also more internally consistent.

2007-05-06  Darin Adler  <darin@apple.com>

        Reviewed by Hyatt.

        - http://bugs.webkit.org/show_bug.cgi?id=13606
          some functions are virtual that don't need to be

        * dom/Node.h: Made first/lastChild be inline functions that call virtual functions.
        This lets us hide the functions with another inline function in a derived class,
        yet still override the behavior here in the base class by overriding the virtual
        functions too.
        * dom/Node.cpp:
        (WebCore::Node::virtualFirstChild): Renamed virtual functions. There are now
        non-virtual inline functions that call these virtual functions.
        (WebCore::Node::virtualLastChild): Ditto.

        * dom/ContainerNode.h: Added non-virtual first/lastChild functions that hide the ones
        inherited from the Node class; these also replace the fastFirst/LastChild functions,
        and transparently give callers the faster form if they have a pointer of the right
        type. But still override the virtual functions named virtualFirst/LastChild, because
        those can still be called through a Node*. Removed the "fast" from the names of
        fastSetFirst/LastChild.
        * dom/ContainerNode.cpp:
        (WebCore::ContainerNode::virtualFirstChild): Renamed virtual functions. There are now
        also non-virtual inline versions.
        (WebCore::ContainerNode::virtualLastChild): Ditto.

        * dom/CharacterData.cpp: Removed implementations of data and length functons.
        * dom/CharacterData.h: Made data, setData, length, substringData, appendData,
        insertData, deleteData, and replaceData all non-virtual, and made data and length
        both be inline.

        * dom/NamedAttrMap.h: (WebCore::NamedAttrMap::attributeItem): Removed a null check
        from this function. If the length of the map is known to be greater than 0, then
        the null check isn't needed. But if the length of the map hasn't been checked at all,
        then it's unsafe to call this function since it doesn't range check the array
        index. Thus the null check is never needed. I also looked at all callers.

        * dom/Attr.cpp: (WebCore::Attr::createTextChild):
        * dom/Document.cpp: (WebCore::Document::recalcStyle):
        * dom/Element.cpp: (WebCore::Element::recalcStyle):
        * ksvg2/svg/SVGElement.cpp:
        (WebCore::SVGElement::haveLoadedRequiredResources):
        Removed "fast" prefix from calls to fastFirst/LastChild and fastSetFirst/LastChlld.
        It's not needed any more -- you still get fast behavior if the pointer has a type
        that's ContainerNode or derived from it.

2007-05-06  Mitz Pettel  <mitz@webkit.org>

        Reviewed by Hyatt.

        - fix http://bugs.webkit.org/show_bug.cgi?id=13557
          Crash when dragging selection over absolutely positioned generated content on block element

        Test: fast/css-generated-content/positioned-background-hit-test-crash.html

        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::enclosingElement): Added. Factored out of hitTestLayer().
        (WebCore::RenderLayer::hitTestLayer): Implemented the fix for <rdar://problem/3552346>
        from r6106 to the self hit test as well, namely: return the enclosing element
        for generated positioned content.
        * rendering/RenderLayer.h:

2007-05-06  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Darin.

        http://bugs.webkit.org/show_bug.cgi?id=13584
        <script> code wrongly assumes requests can't fail

        Test: fast/loader/unloadable-script.html

        * html/HTMLScriptElement.cpp:
        (WebCore::HTMLScriptElement::parseMappedAttribute):
        (WebCore::HTMLScriptElement::insertedIntoDocument):
        Check the return value of requestScript().

2007-05-06  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Darin.

        http://bugs.webkit.org/show_bug.cgi?id=13304
        REGRESSION(14784): WebKit doesn't dynamically reflect changes to the highlight color in System Preferences

        Implemented a notification observer that invalidates cached system colors.

        No automated test possible.

        * rendering/RenderTheme.cpp:
        (WebCore::RenderTheme::activeSelectionBackgroundColor):
        (WebCore::RenderTheme::inactiveSelectionBackgroundColor):
        (WebCore::RenderTheme::platformColorsDidChange):
        * rendering/RenderTheme.h:
        * rendering/RenderThemeMac.h:
        * rendering/RenderThemeMac.mm:
        (-[WebCoreRenderThemeNotificationObserver initWithTheme:WebCore::]):
        (-[WebCoreRenderThemeNotificationObserver systemColorsDidChange:]):
        (WebCore::theme):
        (WebCore::RenderThemeMac::RenderThemeMac):
        (WebCore::RenderThemeMac::~RenderThemeMac):
        (WebCore::RenderThemeMac::checkbox):
        (WebCore::RenderThemeMac::radio):
        (WebCore::RenderThemeMac::button):
        (WebCore::RenderThemeMac::popupButton):
        (WebCore::RenderThemeMac::search):
        (WebCore::RenderThemeMac::sliderThumbHorizontal):
        (WebCore::RenderThemeMac::sliderThumbVertical):

2007-05-05  Rob Buis  <buis@kde.org>

        Reviewed by Oliver.

        http://bugs.webkit.org/show_bug.cgi?id=13592
        parseMappedAttribute inconsistency

        Do not use local vars in parseMappedAttribute for attr name and value.

        * ksvg2/svg/SVGAnimateMotionElement.cpp:
        (WebCore::SVGAnimateMotionElement::parseMappedAttribute):
        * ksvg2/svg/SVGAnimateTransformElement.cpp:
        (WebCore::SVGAnimateTransformElement::parseMappedAttribute):
        * ksvg2/svg/SVGAnimationElement.cpp:
        (WebCore::SVGAnimationElement::parseMappedAttribute):
        * ksvg2/svg/SVGCircleElement.cpp:
        (WebCore::SVGCircleElement::parseMappedAttribute):
        * ksvg2/svg/SVGClipPathElement.cpp:
        (WebCore::SVGClipPathElement::parseMappedAttribute):
        * ksvg2/svg/SVGCursorElement.cpp:
        (WebCore::SVGCursorElement::parseMappedAttribute):
        * ksvg2/svg/SVGEllipseElement.cpp:
        (WebCore::SVGEllipseElement::parseMappedAttribute):
        * ksvg2/svg/SVGExternalResourcesRequired.cpp:
        (WebCore::SVGExternalResourcesRequired::parseMappedAttribute):
        * ksvg2/svg/SVGGradientElement.cpp:
        (WebCore::SVGGradientElement::parseMappedAttribute):
        * ksvg2/svg/SVGImageElement.cpp:
        (WebCore::SVGImageElement::parseMappedAttribute):
        * ksvg2/svg/SVGLineElement.cpp:
        (WebCore::SVGLineElement::parseMappedAttribute):
        * ksvg2/svg/SVGLinearGradientElement.cpp:
        (WebCore::SVGLinearGradientElement::parseMappedAttribute):
        * ksvg2/svg/SVGMarkerElement.cpp:
        (WebCore::SVGMarkerElement::parseMappedAttribute):
        * ksvg2/svg/SVGMaskElement.cpp:
        (WebCore::SVGMaskElement::parseMappedAttribute):
        * ksvg2/svg/SVGPathElement.cpp:
        (WebCore::SVGPathElement::parseMappedAttribute):
        * ksvg2/svg/SVGPatternElement.cpp:
        (WebCore::SVGPatternElement::parseMappedAttribute):
        * ksvg2/svg/SVGRadialGradientElement.cpp:
        (WebCore::SVGRadialGradientElement::parseMappedAttribute):
        * ksvg2/svg/SVGRectElement.cpp:
        (WebCore::SVGRectElement::parseMappedAttribute):
        * ksvg2/svg/SVGSVGElement.cpp:
        (WebCore::SVGSVGElement::parseMappedAttribute):
        * ksvg2/svg/SVGScriptElement.cpp:
        (WebCore::SVGScriptElement::parseMappedAttribute):
        * ksvg2/svg/SVGStopElement.cpp:
        (WebCore::SVGStopElement::parseMappedAttribute):
        * ksvg2/svg/SVGTests.cpp:
        (WebCore::SVGTests::parseMappedAttribute):
        * ksvg2/svg/SVGTextContentElement.cpp:
        (WebCore::SVGTextContentElement::parseMappedAttribute):
        * ksvg2/svg/SVGTextPositioningElement.cpp:
        (WebCore::SVGTextPositioningElement::parseMappedAttribute):
        * ksvg2/svg/SVGUseElement.cpp:
        (WebCore::SVGUseElement::parseMappedAttribute):
        * ksvg2/svg/SVGViewElement.cpp:
        (WebCore::SVGViewElement::parseMappedAttribute):
        * ksvg2/svg/SVGZoomAndPan.cpp:
        (WebCore::SVGZoomAndPan::parseMappedAttribute):

2007-05-05  Oliver Hunt  <oliver@apple.com>

        Reviewed by Hyatt.

        Initialise default fill with Color::black rather than parsing
        the string "black"

        * ksvg2/svg/SVGPaint.cpp:
        (WebCore::SVGPaint::defaultFill):

2007-05-04  Steve Falkenburg  <sfalken@apple.com>

        Reviewed by Oliver.

        Use TextBreakIterator for sentence breaking instead of TextBoundaries.

        * WebCore.xcodeproj/project.pbxproj: Added TextBreakIeratorInternalICUMac.mm
        * editing/visible_units.cpp:
        (WebCore::startSentenceBoundary): Call TextBreakIterator instead of TextBoundaries.
        (WebCore::endSentenceBoundary): Call TextBreakIterator instead of TextBoundaries.
        (WebCore::previousSentencePositionBoundary): Call TextBreakIterator instead of TextBoundaries.
        (WebCore::nextSentencePositionBoundary): Call TextBreakIterator instead of TextBoundaries.
        * platform/TextBoundaries.h: Removed findSentenceBoundary, findNextSentenceFromIndex.
        * platform/TextBreakIterator.h: Added sentenceBreakIterator.
        * platform/TextBreakIteratorICU.cpp:
        (WebCore::setUpIterator): Add locale parameter (needed to maintain functionality that TextBoundaries code had).
        (WebCore::characterBreakIterator): Pass en_us for locale (same as old code).
        (WebCore::wordBreakIterator): Pass en_us for locale (same as old code).
        (WebCore::lineBreakIterator): Pass en_us for locale (same as old code).
        (WebCore::sentenceBreakIterator): Added.
        * platform/TextBreakIteratorInternalICU.h: Added.
        * platform/gdk/TemporaryLinkStubs.cpp: Removed findNextSentenceFromIndex, findSentenceBoundary.
        (WebCore::currentTextBreakLocaleID): Added stub.
        * platform/mac/TextBoundaries.mm: Removed currentTextBreakLocaleID, findSentenceBoundary, findNextSentenceFromIndex.
        * platform/mac/TextBreakIteratorInternalICUMac.mm: Added.
        (WebCore::currentTextBreakLocaleID): Moved from TextBoundaries.mm
        * platform/qt/TextBoundaries.cpp: Removed findNextSentenceFromIndex, findSentenceBoundary.

2007-05-04  Adele Peterson  <adele@apple.com>

        Reviewed by Hyatt.

        Fix for <rdar://problem/5116871> REGRESSION: Can't select options in widget's listbox

        Don't use user-select to determine whether or not options can be selected in listboxes.
        This will match Firefox behavior for -moz-user-select.

        * html/HTMLSelectElement.cpp:
        (WebCore::HTMLSelectElement::canSelectAll):
        (WebCore::HTMLSelectElement::listBoxDefaultEventHandler):

2007-05-04  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Tim Hatcher.

        First step in fixing <rdar://problem/5055182> The back cache has no global cap

        Stop giving SnapBack infinite cache-ability. Instead, make SnapBack rely
        on the underlying back cache.

        * WebCore.exp:
        * history/HistoryItem.cpp:
        (WebCore::HistoryItem::HistoryItem):
        * history/HistoryItem.h:
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::purgePageCache):

2007-05-04  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Brady Eidson.
        
        Removed export of clearPageCache(), since it was unused externally. I plan
        to remove its use from WebCore eventually, too.

        Removed usesPageCache(), since it was unused and it duplicated pageCacheSize().

        * WebCore.exp:
        * history/BackForwardList.cpp:
        * history/BackForwardList.h: Moved statics to the top of the class definition.
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::canCachePage):

2007-05-04  Anders Carlsson  <andersca@apple.com>

        Reviewed by Antti.

        <rdar://problem/5179977> Use the correct URLs when dispatching delegate methods for data loads.

        Restore behavior to matching release WebKit by adding a response URL to SubstituteData. If a nil base URL is
        passed, set the _request_ URL to "about:blank", but the response URL to a generated "applewebdata" URL.

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::commitProvisionalLoad):
        First, check for the SubstituteData's response URL.

        (WebCore::FrameLoader::continueAfterNavigationPolicy):
        No need to special case applewebdata URLs here, they're only used in the response.

        * loader/MainResourceLoader.cpp:
        (WebCore::MainResourceLoader::handleDataLoadNow):
        If the substitute data has a response URL, use it.

        (WebCore::MainResourceLoader::loadNow):
        Only load "about:blank" as an empty document if there's no substitute data.

        * loader/SubstituteData.h:
        (WebCore::SubstituteData::SubstituteData):
        (WebCore::SubstituteData::responseURL):
        Add responseURL member to SubstituteData.

2007-05-03  Steve Falkenburg  <sfalken@apple.com>

        Reviewed by Oliver.

        Add missing user description parameter to spelling-related editor client method.

        * bridge/EditorClient.h:
        * platform/gdk/EditorClientGdk.cpp:
        (WebCore::EditorClientGdk::updateSpellingUIWithGrammarString):
        * platform/gdk/EditorClientGdk.h:
        * platform/graphics/svg/SVGImageEmptyClients.h:
        (WebCore::SVGEmptyEditorClient::updateSpellingUIWithGrammarString):

2007-05-03  Brady Eidson  <beidson@apple.com>

        Reviewed by Oliver

        Resolve an outstanding FIXME in Loader::numRequests()

        Before, numRequests() would iterate through the list of requests pending load and the list of currently
        loading requests and tally up a count matching the current DocLoader.

        I noticed while studying and cleaning up the loader code that numRequests() is potentially very hot!
        Indeed load a complex site with many resources and multiple frames, and this method gets called very often,
        tallying up this number every time.

        The FIXME was to keep a collection of Requests mapped to each DocLoader.  In reality, since this map would
        simply be used for retrieving a count, that was overkill.  Keeping a request count in the DocLoader itself
        along with maintaining that count in Loader as requests come and go is a much better way to do this.

        * loader/DocLoader.cpp:
        (WebCore::DocLoader::DocLoader):
        (WebCore::DocLoader::incrementRequestCount):
        (WebCore::DocLoader::decrementRequestCount):
        (WebCore::DocLoader::requestCount): Emulate the defunct Loader::numRequests()
        * loader/DocLoader.h:

        * loader/FrameLoader.cpp:
        (WebCore::numRequests): Call DocLoader::requestCount() directly
        (WebCore::FrameLoader::checkCompleted): Use numRequests()

        * loader/loader.cpp:
        (WebCore::Loader::load): Increment the DocLoader's request count
        (WebCore::Loader::servePendingRequests): If the SubresourceLoader failed to create, decrement the count
        (WebCore::Loader::didFinishLoading): If the Request is not Multipart, decrement the count
        (WebCore::Loader::didFail): If the Request is not Multipart, decrement the count
        (WebCore::Loader::didReceiveResponse): If the Request becomes Multipart, decrement the count
        (WebCore::Loader::cancelRequests): Decrement the count for the pending requests being tossed, and ASSERT the
          count is zero after all requests have been cancelled
        * loader/loader.h:

2007-05-03  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Brady Eidson.
        
        Some cleanup in preparation for fixing <rdar://problem/5055182> The 
        back/forward cache has no global cap

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::provisionalLoadStarted): Moved "Can I cache this
        page?" logic to canCachePage(). Moved "I am caching this page" logic to
        cachePageToHistoryItem().
        (WebCore::FrameLoader::canCachePage): Moved above logic here.
        (WebCore::FrameLoader::cachePageToHistoryItem): Removed bogus NULL check
        and failure return value. Moved above logic here. Don't call setCachedPage()
        until the CachedPage is fully constructed.
        (WebCore::FrameLoader::purgePageCache): Removed comment that duplicated
        the function name.
        * loader/FrameLoader.h:

2007-05-03  Justin Garcia  <justin.garcia@apple.com>

        Reviewed by harrison.

        <rdar://problem/5120281> CrashTracer: [USER] 1 crash in Mail at WebCore::CSSComputedStyleDeclaration::copyInheritableProperties() const

        Problem is that checkAncestor and lastClosed can be nil when createMarkup is called unrendered nodes, and that was not checked for.
        
        * editing/markup.cpp:
        (WebCore::createMarkup):
        Nil-check checkAncestor and lastClosed.

2007-05-03  Timothy Hatcher  <timothy@apple.com>

        Reviewed by Kevin.

        <rdar://problem/5016318> Contextual menu item for opening links is missing in compose windows but present in viewer

        Add the Open Link, Open Link in New Window, Download Linked File and Copy Link menu
        items to the content editable context menu.

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

2007-05-03  Holger Freyther <freyther@kde.org>

        Reviewed by Zack, landed by Simon.
        This is bugzilla bug 13499.

        * WebCore.pro: Place the Qt port into the qt-port scope, add the Gdk port

2007-05-03  Adele Peterson  <adele@apple.com>

        Use BUILDING_ON_TIGER.

        * page/mac/FrameMac.mm: (WebCore::Frame::setUseSecureKeyboardEntry):

2007-05-03  Brady Eidson  <beidson@apple.com>

        Reviewed by Darin

        Some more minor cleanup that resolves a FIXME and ditches another pointless method

        No change in functionality == no layout test

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::commitProvisionalLoad):  Updated a comment
        (WebCore::FrameLoader::continueLoadAfterWillSubmitForm): Folded startLoading() into this method
        (WebCore::FrameLoader::continueLoadAfterNavigationPolicy): continueAfterWillSubmitForm becomes continueLoadAfterWillSubmitForm
        * loader/FrameLoader.h: Removed startLoading()

2007-05-03  Adele Peterson  <adele@apple.com>

        Reviewed by Tim Hatcher.

        Fix for <rdar://problem/4727607> REGRESSION: KeyScript is deprecated, need a new solution for forcing Roman input for password fields on Leopard

        * page/mac/FrameMac.mm: (WebCore::Frame::setUseSecureKeyboardEntry):
        Use TSMSetDocumentProperty and TSMRemoveDocumentProperty on Leopard disable and enable non-ascii input sources.

2007-05-03  Brady Eidson  <beidson@apple.com>

        Reviewed by Anders

        commitProvisionalLoad() was the name of two methods.
        One of them was private and only called from one other private place.
        This was driving me crazy.  I had to change that.

        No change in functionality == no layout test

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::transitionToCommitted): roll commitProvisionalLoad() into this method
        * loader/FrameLoader.h: Removed commitProvisionalLoad()

2007-05-03  Darin Adler  <darin@apple.com>

        Reviewed by Anders.

        - make ICU initialization lazy to speed up application start-up time
          (when it includes an initial webpage load)

        * platform/TextCodecICU.h: Replaced registerEncodingNames and
        registerCodecs with registerBaseEncodingNames, registerBaseCodecs,
        registerExtendedEncodingNames, and registerExtendedCodecs.
        * platform/TextCodecICU.cpp:
        (WebCore::newTextCodecICU): Moved up to the top of the file.
        (WebCore::TextCodecICU::registerBaseEncodingNames): Added. Registers
        just UTF-8.
        (WebCore::TextCodecICU::registerBaseCodecs): Ditto.
        (WebCore::TextCodecICU::registerExtendedEncodingNames): Renamed.
        (WebCore::TextCodecICU::registerExtendedCodecs): Ditto.
        (WebCore::TextCodecICU::createICUConverter): Compare with the name
        "GBK" in a way that does not require extending the maps.

        * platform/TextEncoding.cpp:
        (WebCore::TextEncoding::usesVisualOrdering): Added code so this will
        just return false if we haven't used any extended encoding names yet.
        The result will be correct, and we won't ask for an encoding name that
        will require registering the extended encoding names.
        (WebCore::TextEncoding::isJapanese): Ditto.
        (WebCore::TextEncoding::backslashAsCurrencySymbol): Ditto, but return
        a backslash instead of false.

        * platform/TextEncodingRegistry.h: Added a new function named
         noExtendedTextEncodingNameUsed.
        * platform/TextEncodingRegistry.cpp:
        (WebCore::buildBaseTextCodecMaps): Added. Registers the base encodings,
        including Latin-1 because it's the default, and the UTF encodings.
        (WebCore::extendTextCodecMaps): Added. Registers all the other encodings.
        (WebCore::newTextCodec): Removed the all to buildTextCodecMap because
        we always build the map when making the canonical encoding name.
        (WebCore::atomicCanonicalTextEncodingName): Changed code to build only
        the base maps at first, then extend the maps the first time we run into
        a name we don't know.
        (WebCore::noExtendedTextEncodingNameUsed): Added.

2007-05-03  Mark Rowe  <mrowe@apple.com>

        Qt build fix.  In r21185 the Qt version of WebCore::scaleDragImage was
        updated to have the incorrect signature.

        * platform/qt/DragImageQt.cpp:
        (WebCore::scaleDragImage):

2007-05-02  Beth Dakin  <bdakin@apple.com>

        * dom/Node.h: Just fixing a variable name because it's driving me 
        mad.

2007-05-02  Beth Dakin  <bdakin@apple.com>

        Reviewed by Hyatt.

        Fix for <rdar://problem/4513966> Never-ending identical repaint @ 
        orbitz.com (Safari eating 85% CPU)

        We need to be a little bit more savvy about when we do a FULL style 
        recalc since it can be unnecessary and expensive.

        * css/CSSMutableStyleDeclaration.cpp:
        (WebCore::CSSMutableStyleDeclaration::setChanged): Now takes a 
        StyleChangeType as a parameter.
        (WebCore::CSSMutableStyleDeclaration::setProperty): Send 
        InlineStyleChange as the paramter. This is the optimization!
        * css/CSSMutableStyleDeclaration.h: setChanged takes a 
        StyleChangeType as a parameter.
        * dom/Document.cpp: setChanged now takes a StyleChangeType instead 
        of a bool.
        (WebCore::Document::recalcStyle): Same.
        * dom/Element.cpp: 
        (WebCore::Element::recalcStyle): This is the fix!! Only set change 
        to Force is we use descendant rules AND it's a FullStyleChange.
        * dom/Node.cpp: m_hasStyle was an unused bit on Node, so this patch 
        gets rid of it and uses that extra bit for m_changed to be a 
        StyleChangeType instead of a bool.
        (WebCore::Node::Node):
        (WebCore::Node::setChanged):
        (WebCore::Node::dump):
        * dom/Node.h: Same.
        (WebCore::): Define the StyleChangeType enum.
        (WebCore::Node::hasClass):
        (WebCore::Node::changed):
        (WebCore::Node::styleChangeType):
        (WebCore::Node::setHasClass):
        * dom/StyledElement.cpp:
        (WebCore::StyledElement::parseMappedAttribute): Don't bother 
        calling setHasStyle() since m_hasStyle is gone now. It was never 
        used, and this was the only place it was set.
        * dom/Text.cpp:
        (WebCore::Text::recalcStyle): setChanged now takes a 
        StyleChangeType instead of a bool.
        * html/HTMLFrameSetElement.cpp:
        (WebCore::HTMLFrameSetElement::recalcStyle): Same.
        * html/HTMLSelectElement.cpp:
        (WebCore::HTMLSelectElement::restoreState): Same.
        (WebCore::HTMLSelectElement::reset): Same.
        * html/HTMLTextAreaElement.cpp:
        (WebCore::HTMLTextAreaElement::setValue): Same.
        * ksvg2/misc/SVGTimer.cpp:
        (WebCore::SVGTimer::applyAnimations): Same.
        * ksvg2/svg/SVGUseElement.cpp:
        (WebCore::SVGUseElement::recalcStyle): Same.
        * platform/graphics/svg/SVGResource.cpp:
        (WebCore::SVGResource::repaintClients): Same.

2007-05-02  David Harrison  <harrison@apple.com>

        Reviewed by Antti.

        <rdar://problem/4859132> Grammar must always be checked in entire-sentence chunks, and shouldn't show markers for current sentence

        Restore the remainder of the original fix now that blocking bug rdar://5174862 is addressed.

        John made the original patch on 2007-04-10, but this fell prey to rdar://5157329.
        Justin backed out the whole patch on 2007-04-30 to avoid the crash.
        Justin then restored most of the original patch, but used word granularity instead, to keep the build working.
        I just addressed the root cause of rdar://5157329 in rdar://5174862.
        This patch switches the temp uses of word granularity back to sentence granularity.
        
        * editing/mac/EditorMac.mm:
        (WebCore::Editor::markMisspellingsAfterTypingToPosition):
        * page/Frame.cpp:
        (WebCore::Frame::respondToChangedSelection):

2007-05-02  David Harrison  <harrison@apple.com>

        Reviewed by Antti.

        <rdar://problem/5174862> Crash resulting from DeprecatedString::insert()
        
        Test added: editing/selection/move-by-sentence-001.html

        * editing/visible_units.cpp:
        (WebCore::previousBoundary):
        (WebCore::nextBoundary):
        Use a UChar Vector instead of DeprecatedString.
        Avoid creating an extra string for secure bullet replacement unless it is actually needed.
        
        * platform/DeprecatedString.cpp:
        (WebCore::DeprecatedString::insert):
        Call forceUnicode() before setLength(), so that only the unicode buffer is resized.

       (WebCore::DeprecatedString::setLength):
        Adjust the unicode buffer even if the ascii buffer is valid.
        
2007-05-02  Mitz Pettel  <mitz@webkit.org>

        Reviewed by Brady.

        - http://bugs.webkit.org/show_bug.cgi?id=13564
          Remove friend class FrameLoader from Frame

        No test added since there is no change in functionality.

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::didOpenURL):
        (WebCore::FrameLoader::begin):
        (WebCore::FrameLoader::open):
        * loader/FrameLoader.h: Made clear() private.
        * page/Frame.cpp:
        (WebCore::Frame::setDocument): Changed the argument into a PassRefPtr.
        * page/Frame.h:
        * xml/XSLTProcessor.cpp:
        (WebCore::XSLTProcessor::createDocumentFromSource):

2007-05-02  Mitz Pettel  <mitz@webkit.org>

        Reviewed by Dave Hyatt.

        - fix http://bugs.webkit.org/show_bug.cgi?id=9276
          Quirksmode: Image swap resize bug

        Test: fast/replaced/image-resize-width.html

        * rendering/RenderImage.cpp:
        (WebCore::RenderImage::imageChanged): Moved the call to dirtyPrefWidths()
        before the call to calcWidth().

2007-05-02  David Hyatt  <hyatt@apple.com>

        Fix for bug 13566, broken Dashboard widgets.  setPrefWidthsDirty did
        the wrong thing for text children of a positioned element.

        Reviewed by mitz

        fast/block/positioning/pref-width-change.html

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

2007-05-01  Darin Adler  <darin@apple.com>

        * rendering/RenderReplaced.cpp: Fix typo in a comment.

2007-05-01  David Hyatt  <hyatt@apple.com>

        Fix for 13558, crash when using absolutely positioned generated content
        inside an inline.

        Reviewed by darin

        fast/css-generated-content/absolute-position-inside-inline.html

        * rendering/RenderContainer.cpp:
        (WebCore::RenderContainer::updateBeforeAfterContentForContainer):

2007-05-01  Justin Garcia  <justin.garcia@apple.com>

        Reviewed by darin

        <rdar://problem/5002441> 
        Pressing space key does nothing above quoted content or a signature
        
        Inserting a space under these circumstances inserts a single 
        text node containing a regular space and then does a layout. 
        That space isn't rendered (which is correct).  Whitespace 
        rebalancing is supposed to correct it but failed.  It replaces 
        the space with a non-breaking space, but that change doesn't 
        dirty line boxes (9441) and so the space isn't rendered.
        
        This workaround turns all incoming spaces into non-breaking 
        spaces before they're inserted (they're rebalanced after 
        insertion and turned back into regular spaces if possible).

        * editing/InsertTextCommand.cpp:
        (WebCore::InsertTextCommand::prepareForTextInsertion): Removed
        an old irrelevant FIXME.
        (WebCore::InsertTextCommand::input): Turn incoming spaces into
        non breaking spaces before inserting them.
        
2007-05-01  Darin Adler  <darin@apple.com>

        Reviewed by Hyatt.

        - fix http://bugs.webkit.org/show_bug.cgi?id=13559
          REGRESSION: Canvas aspect ratio is incorrect

        - remove intrinsicWidth/Height functions from RenderObject

        Test: fast/canvas/canvas-size-change-after-layout.html

        * html/HTMLCanvasElement.cpp:
        (WebCore::HTMLCanvasElement::createRenderer): Removed code to set
        the intrinsic size, because the renderer now takes care of this
        in its constructor.
        (WebCore::HTMLCanvasElement::reset): Instead of calling the
        setIntrinsicWidth/Height functions, call canvasSizeChanged, which
        takes care of layout, but only if the size actually changed. Also
        call repaint if the contents of the canvas changed.

        * rendering/RenderApplet.h:
        * rendering/RenderApplet.cpp: (WebCore::RenderApplet::intrinsicSize):
        Override the new intrinsicSize function. This override still doesn't
        make sense, so left a FIXME in here.

        * rendering/RenderBox.h: Added an intrinsicSize function here to replace
        the intrinsicWidth/Height functions removed from RenderObject.
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::calcReplacedWidthUsing): Use intrinsicSize instead
        of intrinsicWidth.
        (WebCore::RenderBox::calcReplacedHeightUsing): Ditto, but for height.

        * rendering/RenderHTMLCanvas.h: Changed the constructor parameter to be
        an HTMLCanvasElement* instead of Node*. Also added a canvasSizeChanged
        function.
        * rendering/RenderHTMLCanvas.cpp:
        (WebCore::RenderHTMLCanvas::RenderHTMLCanvas): Pass an initial intrinsic
        size based on the current size of the canvas element. This is now the
        responsibility of the renderer and the DOM element calls the canvasSizeChanged
        function when the size changes.
        (WebCore::RenderHTMLCanvas::paint): Removed checks of the type of the element,
        and used the node() function because we don't have to worry about the anonymous
        case in this class.
        (WebCore::RenderHTMLCanvas::canvasSizeChanged): Added. Changes the size and
        then calls setNeedsLayout and setPrefWidthsDirty as needed. I based the logic
        here on careful reading of RenderImage::imageChanged.

        * rendering/RenderImage.cpp:
        (WebCore::RenderImage::RenderImage): Pass a default intrinsic size of 0,0
        instead of calling setIntrinsicWidth/Height.
        (WebCore::RenderImage::setImageSizeForAltText): Call the new intrinsic size
        functions instead of the width/height ones. Simplifies the logic since we
        handle both dimensions at once.
        (WebCore::RenderImage::imageChanged): Ditto.
        (WebCore::RenderImage::layout): Ditto.
        (WebCore::RenderImage::calcAspectRatioWidth): Ditto.
        (WebCore::RenderImage::calcAspectRatioHeight): Ditto.

        * rendering/RenderObject.h: Removed intrinsicWidth/Height virtual functions.

        * rendering/RenderReplaced.h: Replaced intrinsicWidth, intrinsicHeight,
        setIntrinsicWidth, setIntrinsicHeight, m_intrinsicWidth, and m_intrinsicHeight
        with intrinsicSize, setIntrinsicSize, and m_intrinsicSize.
        * rendering/RenderReplaced.cpp:
        (WebCore::RenderReplaced::RenderReplaced): Added a second contructor that takes
        an intrinsic size parameter. Also updated constructor since the intrinsic size
        is now an IntSize instead of two integers.
        (WebCore::RenderReplaced::intrinsicSize): Added. No point in making this inline
        because it's a virtual function.
        (WebCore::RenderReplaced::setIntrinsicSize): Added. Didn't make this inline,
        partly because in the future we might want this to be more than just a simple
        setter function, factoring in common code used in both RenderImage and
        RenderHTMLCanvas.

        * rendering/RenderWidget.h: Removed a stray using declaration that wasn't needed.

2007-05-01  David Hyatt  <hyatt@apple.com>

        Fix for hang when incorrectly trying to add before/after content to
        a <select>.  Disallow generated content in all selects and also turn it
        off for <input> buttons.

        Reviewed by aroben

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::setStyle):
        * rendering/RenderButton.cpp:
        (WebCore::RenderButton::canHaveChildren):
        * rendering/RenderButton.h:

2007-05-01  Darin Adler  <darin@apple.com>

        Reviewed by Hyatt.

        - removed the m_implicit bit from Node, freeing up a bit

        - fixed <rdar://problem/5172607> XML parser is creating implicit tbody elements
        - fixed <rdar://problem/5172596> HTML-parser-created tbody elements are being
          ignored when processing CSS child rules

        Test: fast/css/child-selector-implicit-tbody.html

        * css/cssstyleselector.cpp: (WebCore::CSSStyleSelector::checkSelector):
        Removed code that used to look at implicitNode(), which no longer exists.

        * css/html4.css: Added a style rule to handle cases where we have a tr
        inside a table with no intervening table section.

        * dom/Node.h: Removed the bit.
        * dom/Node.cpp:
        (WebCore::Node::Node): Don't initialize the bit.
        (WebCore::Node::dump): Don't dump the bit.

        * dom/XMLTokenizer.cpp:
        (WebCore::XMLTokenizer::startElementNs): Remove the code that made a
        table body element. This is handled in the render tree, the DOM tree
        should not be mangled.
        (WebCore::XMLTokenizer::endElementNs): Removed code that used to look at
        implicitNode(), which no longer exists.

        * html/HTMLElementFactory.cpp: (WebCore::tableSectionConstructor):
        Removed boolean parameter that was passed to the HTMLTableSectionElement
        constructor.
        * html/HTMLParser.cpp: (WebCore::HTMLParser::handleError): Ditto.
        * html/HTMLTableElement.cpp:
        (WebCore::HTMLTableElement::createTHead): Ditto.
        (WebCore::HTMLTableElement::createTFoot): Ditto.
        (WebCore::HTMLTableElement::insertRow): Changed to return a PassRefPtr,
        because it's possible the row could be removed from the table by JavaScript
        code responding to DOM mutation events before the function returns. Just
        something I noticed by code inspection.

        * html/HTMLTableSectionElement.cpp:
        (WebCore::HTMLTableSectionElement::HTMLTableSectionElement): Removed
        boolean "implicit" parameter to the constructor.
        (WebCore::HTMLTableSectionElement::insertRow): Changed to return a
        PassRefPtr for the same reason cited above.

        * html/HTMLTableElement.h: Changed the return value of insertRow to be
        a PassRefPtr.
        * html/HTMLTableSectionElement.h: Ditto.

2007-04-30  David Hyatt  <hyatt@apple.com>

        Fix for bug 12691, generated content and display: table-cell duplicates
        content on a size change.  Make sure that the code to update before/after
        content is smart enough to drill into anonymous containers to find the
        old child.

        Reviewed by olliej

        Added fast/css-generated-content/table-cell-before-content.html

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::setStyle):
        * rendering/RenderButton.cpp:
        (WebCore::RenderButton::updateBeforeAfterContent):
        * rendering/RenderButton.h:
        * rendering/RenderContainer.cpp:
        (WebCore::RenderContainer::beforeAfterContainer):
        (WebCore::RenderContainer::updateBeforeAfterContent):
        (WebCore::RenderContainer::updateBeforeAfterContentForObject):
        * rendering/RenderContainer.h:
        * rendering/RenderInline.cpp:
        (WebCore::RenderInline::setStyle):
        (WebCore::RenderInline::addChildToFlow):
        (WebCore::RenderInline::splitInlines):

2007-04-30  Jungshik Shin <jungshik.shin@gmail.com>

        Reviewed by justin
        
        <http://bugs.webkit.org/show_bug.cgi?id=13552>
        comment to Range::comparePoint in dom/Range.cpp has 
        '0xD0' in place of '-': leading to a compiler warning

        * dom/Range.cpp:
        (WebCore::Range::comparePoint):

2007-04-30  Justin Garcia  <justin.garcia@apple.com>

        Reviewed by darin

        <rdar://problem/4875189> List gets deleted when replacing contents

        * editing/ReplaceSelectionCommand.cpp:
        (WebCore::ReplaceSelectionCommand::doApply): Don't expand
        to include elements, like lists, when deleting a selection 
        to replace it.

2007-04-30  Justin Garcia  <justin.garcia@apple.com>

        Reviewed by ggaren
        
        Buildfix.  Leave in grammar checking machinery to 
        keep WebKit building on other platforms but don't
        operate on sentence sized chunks so that we don't
        re-introduce 5157329.

        * editing/Editor.h:
        * editing/mac/EditorMac.mm:
        (WebCore::Editor::markMisspellingsAfterTypingToPosition):
        (WebCore::markMisspellingsOrBadGrammar):
        (WebCore::Editor::markMisspellings):
        (WebCore::Editor::markBadGrammar):
        * page/Frame.cpp:
        (WebCore::Frame::respondToChangedSelection):

2007-04-30  Justin Garcia  <justin.garcia@apple.com>

        Reviewed by darin

        <rdar://problem/5168598> 
        Crash when deleting a link inside an input field
        
        Deletion code tries to update one of its positions to keep 
        it valid and nullifies it.  Later in mergeParagraphs we try 
        to find out if it's valid by checking to see if it's still in 
        the document and crash.
        
        The fix is just to not bother keeping the position, 
        m_upstreamStart, valid, since after the point in the code 
        under examination, it doesn't need to be valid anymore.  
        Besides, code to update DeleteSelectionCommand's positions 
        should go in the functions that handle the content removal 
        that might invalid them (there are already FIXMEs about this).
        
        Also, users shouldn't be able to insert links (or any rich content)
        into plaintext-only regions like text fields, even if those
        text fields are inside richly editable regions.  This is a 
        separate bug and is filed as 5171552.

        * editing/DeleteSelectionCommand.cpp:
        (WebCore::DeleteSelectionCommand::handleGeneralDelete): Don't
        bother updating m_upstreamStart.

2007-04-30  Patti Hoa  <patti@apple.com>

        Reviewed by Dave Hyatt.
        
        <rdar://problem/5108546> REGRESSION: Zoom follows keyboard focus does not work

        * WebCore.xcodeproj/project.pbxproj:
        Add new file SelectionControllerMac.mm
        * dom/Document.cpp:
        (WebCore::Document::updateSelection):
        Move the code to fire off AXSelectedTextChanged notification to a new method notifyAccessibilityForSelectionChange in SelectionControllerMac.mm
        * editing/SelectionController.cpp:
        (WebCore::SelectionController::setSelection):
        call notifyAccessibilityForSelectionChange to handle firing of accessibility notification and zoomFocusChange
        * editing/SelectionController.h:
        Add notifyAccessibilityForSelectionChange method for Mac platform
        * platform/Widget.h:
        * platform/mac/WidgetMac.mm:
        (WebCore::Widget::convertToScreenCoordinate):
        Add a helper routine that takes IntPoint in local coordinate and convert that to screen coordinate

2007-04-30  Justin Garcia  <justin.garcia@apple.com>

        Reviewed by harrison

        <rdar://problem/5157329> 
        REGRESSION: Crash at WTF::fastFree() when arrowing or deleting backward through editable text (13493)
        
        Backing out the changes for 4859132.

        * editing/Editor.h:
        * editing/mac/EditorMac.mm:
        (WebCore::Editor::markMisspellingsAfterTypingToPosition):
        (WebCore::Editor::markMisspellings):
        * page/Frame.cpp:
        (WebCore::Frame::respondToChangedSelection):

2007-04-29  Antti Koivisto  <antti@apple.com>

        Reviewed by Oliver.

        Fix <rdar://problem/5169261>
        REGRESSION: Google Maps zooming too sensitive when using two fingers on trackpad
        
        Use line based delta values when generating DOM wheel events, use pixel deltas
        for scrolling only.
        
        No test case, requires user interaction and specific hardware.

        * page/EventHandler.cpp:
        (WebCore::EventHandler::handleWheelEvent):
        * platform/PlatformWheelEvent.h:
        (WebCore::PlatformWheelEvent::continuousDeltaX):
        (WebCore::PlatformWheelEvent::continuousDeltaY):
        * platform/mac/WheelEventMac.mm:
        (WebCore::PlatformWheelEvent::PlatformWheelEvent):

2007-04-29  Oliver Hunt  <oliver@apple.com>

        Reviewed by Brady.

        Build fix for experimental features build

        * rendering/RenderForeignObject.cpp:

2007-04-29  Mitz Pettel  <mitz@webkit.org>

        Reviewed by Dave Hyatt.

        - fix http://bugs.webkit.org/show_bug.cgi?id=13544
          REGRESSION (r21120): Member profile frame not erased at Yahoo! Answers

        Test: fast/repaint/layer-hide-when-needs-layout.html

        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::setStyle): If we get a layout hint, we count on
        layout() or updateLayerPositions() to repaint. In the case of a layer
        going invisible, however, we need to repaint here since neither of the
        above will do it.

2007-04-29  Oliver Hunt  <oliver@apple.com>

        Reviewed by Steve.

        Fix for <rdar://problem/5126393> REGRESSION (r19672-19697): Safari drag image drags at original size (13261)

        Added logic to ensure that when we create the drag image
        we're looking at the rendered image size.

        * page/DragController.cpp:
        (WebCore::DragController::doImageDrag):
          Pass the rendered image size to fitDragImageToMaxSize

        * platform/DragImage.cpp:
        (WebCore::fitDragImageToMaxSize):
           Need to do scaling relative to rendered image size

        * platform/DragImage.h:
           scaleDragImage needs x and y scales to allow for them to be
           scaled seperately on a page

        * platform/gdk/DragImageGdk.cpp:
        (WebCore::scaleDragImage):
           Prevent build bustage

        * platform/mac/DragImageMac.mm:
        (WebCore::scaleDragImage):
           scale width and height independently

        * platform/qt/DragImageQt.cpp:
        (WebCore::scaleDragImage):
           Prevent build bustage

2007-04-29  Darin Adler  <darin@apple.com>

        Reviewed by Adele.

        - fix the Gmail part of http://bugs.webkit.org/show_bug.cgi?id=12798
          and <rdar://problem/4118559>

        This patch changes things so that resizing can make things larger than their
        initial size, but not smaller. I believe this resolves the problem for Gmail,
        but you can still get strange behavior if you have a small right-aligned <textarea>.

        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::resize): Rewrote to use more IntPoint and IntSize and add
        in a new minimum-size algorithm. This function now has the side effect of storing
        a new minimumSizeForResizing in the element being resized, and respects any existing
        minimum as well.
        (WebCore::RenderLayer::offsetFromResizeCorner): Reversed this so it converts the
        point into coordinates relative to the resize corner, hence negative numbers mean
        the point is above and to the left. This is used only in the algorithm above.

        * dom/Element.h: Removed unneeded include of Attr.h, and added forward declarations
        as needed. Removed all friend declarations; there was no need for any of them.
        Tweaked formatting of various declarations and removed unneeded parameter names.
        Made as much as possible private, and a couple things public to avoid the need for
        friend classes. Added minimumSizeForResizing, setMinimumSizeForResizing, rareData,
        and createRareData functions.

        * dom/Element.cpp:
        (WebCore::rareDataMap): Added. Function to return the single global map.
        (WebCore::rareDataFromMap): Added. For use by inlined functions to get the
        data from the map in the case where it's present.
        (WebCore::ElementRareData::ElementRareData): Added.
        (WebCore::Element::~Element): Added code to delete the element from the rare
        data map when appropriate.
        (WebCore::Element::rareData): Added.
        (WebCore::Element::createRareData): Added.
        (WebCore::Element::setAttributeNodeNS): Got rid of the old inline version of this,
        since it was the sole reason we had to include Attr.h in Element.h.
        (WebCore::Element::minimumSizeForResizing): Added. Accesses rare data.
        (WebCore::Element::setMinimumSizeForResizing): Ditto.

        * dom/Node.h: Renamed the m_specified bit since it's now used for two purposes.
        Its new long name is m_attrWasSpecifiedOrElementHasRareData.

        * dom/Attr.cpp: (WebCore::Attr::Attr): Updated for bit name change.
        * dom/Attr.h:
        (WebCore::Attr::specified): Ditto.
        (WebCore::Attr::setSpecified): Added, since setting the bit directly is pretty ugly now.
        * dom/Document.cpp: (WebCore::Document::adoptNode): Updated for bit name change.
        * dom/Node.cpp:
        (WebCore::Node::Node): Ditto.
        (WebCore::Node::dump): Ditto.

        * dom/NamedAttrMap.cpp: (WebCore::NamedAttrMap::isReadOnlyNode): Moved out of line,
        since this was the sole reason we had to include Element.h in NamedAttrMap.h.

        * html/HTMLElement.cpp:
        (WebCore::HTMLElement::nodeName): Changed to use tagQName() since that's a public
        way to do something that's now private.
        (WebCore::HTMLElement::cloneNode): Ditto.

        * dom/Attribute.cpp:
        * dom/NamedAttrMap.h:
        * dom/NamedMappedAttrMap.cpp:
        * dom/StyledElement.h:
        * html/HTMLTokenizer.h:
        * xml/XPathFunctions.cpp:
        * xml/XPathStep.cpp:
        Updated includes, and other administrivia.

2007-04-29  Mitz Pettel  <mitz@webkit.org>

        Reviewed by Darin and Hyatt.

        - http://bugs.webkit.org/show_bug.cgi?id=13487
          Implement O(1) absoluteClippedOverflowRect and absoluteOutlineBox during layout for a possible speed gain

        Test for a bug fixed by this patch: fast/repaint/intermediate-layout-position-clip.html

        By keeping track of the total translation and clip during layout, absolutePosition and
        computeAbsoluteRepaintRect become O(1).

        * WebCore.pro: Added LayoutState.cpp
        * WebCore.vcproj/WebCore/WebCore.vcproj: Added LayoutState.{cpp,h}
        * WebCore.xcodeproj/project.pbxproj: Added LayoutState.{cpp,h}
        * WebCoreSources.bkl: Added LayoutState.cpp
        * page/FrameView.cpp:
        (WebCore::FrameView::layout): When doing subtree layout, push an initial layout state for the
        layout root.
        * rendering/LayoutState.cpp: Added. A LayoutState corresponding to a box consists of the origin of
        its coordinate system in view coordinates and possibly the clip rect, in view coordinates, which
        applies to its children.
        (WebCore::LayoutState::LayoutState):
        (WebCore::LayoutState::destroy):
        (WebCore::throw):
        (WebCore::LayoutState::operator delete):
        * rendering/LayoutState.h: Added.
        (WebCore::LayoutState::LayoutState):
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::layoutBlock): Factored out the "only positioned objects" case into
        layoutOnlyPositionedObjects(). Added code to push/pop LayoutState, unless we have columns, in
        which case we disable/enable LayoutState. Removed the translation by the layout delta
        of the old absolute rects, since that is now integral to absoluteClippedOverflowRect() and
        absoluteOutlineBox().
        (WebCore::RenderBlock::layoutOnlyPositionedObjects): Added this helper function that checks for
        and handles the case where only positioned objects need layout. Returns true in that case.
        (WebCore::RenderBlock::repaintOverhangingFloats): Disabled LayoutState when repainting floats, since
        they may belong to other containers.
        (WebCore::RenderBlock::updateFirstLetter): Disabled LayoutState when adding and removing from the
        first letter container, since it may be different than ourselves.
        * rendering/RenderBlock.h:
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::setStyle): Minor cleanup: changed element()->document() to the equivalent document().
        (WebCore::RenderBox::offsetForPositionedInContainer): Added. Factored out common code from
        absolutePosition, computeAbsoluteRepaintRect and RenderLayer::updateLayerPosition into this function.
        (WebCore::RenderBox::absolutePosition): Added an O(1) code path when this function is called during
        layout (and LayoutState has not been disabled). Factored out some code into
        offsetForPositionedInContainer.
        (WebCore::RenderBox::absoluteClippedOverflowRect): Added the layout delta here, so callers don't need
        to.
        (WebCore::RenderBox::computeAbsoluteRepaintRect): Added an O(1) code path when this function is called
        during layout (and LayoutState has not been disabled). Factored out some code into
        offsetForPositionedInContainer.
        * rendering/RenderContainer.cpp:
        (WebCore::RenderContainer::layout): Added LayoutState push/pop.
        * rendering/RenderFlexibleBox.cpp:
        (WebCore::RenderFlexibleBox::layoutBlock): Factored out the "only positioned objects" case into
        layoutOnlyPositionedObjects(). Added LayoutState push/pop. Removed the translation by the layout delta
        of the old absolute rects, since that is now integral to absoluteClippedOverflowRect() and
        absoluteOutlineBox().
        * rendering/RenderFlow.cpp:
        (WebCore::RenderFlow::absoluteClippedOverflowRect): Added an ASSERT.
        * rendering/RenderForeignObject.cpp:
        (WebCore::RenderForeignObject::layout): Disabled LayoutState because it is incompatible with arbitrary
        affine transforms.
        * rendering/RenderHTMLCanvas.cpp:
        (WebCore::RenderHTMLCanvas::layout): Removed the translation by the layout delta of the old absolute
        rects, since that is now integral to absoluteClippedOverflowRect() and absoluteOutlineBox().
        * rendering/RenderImage.cpp:
        (WebCore::RenderImage::layout): Ditto.
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::updateLayerPositions): Added ASSERTs. Factored out some code into
        RenderBox::offsetForPositionedInContainer.
        (WebCore::RenderLayer::updateScrollInfoAfterLayout): Disabled LayoutState around the call to
        scrollToOffset.
        * rendering/RenderListItem.cpp:
        (WebCore::RenderListItem::updateMarkerLocation): Disabled LayoutState when moving the list marker, since
        it can trigger repainting in other containers.
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::isRoot): Minor cleanup: changed element()->document() to the equivalent
        document().
        (WebCore::RenderObject::computeAbsoluteRepaintRect): Removed 'return' at the end of the function.
        (WebCore::RenderObject::container): Reordered to avoid calling isText() twice.
        (WebCore::RenderObject::absoluteOutlineBox): Added the layout delta here, so callers don't need to.
        * rendering/RenderSVGContainer.cpp:
        (WebCore::RenderSVGContainer::layout): Disabled LayoutState because it is incompatible with arbitrary
        affine transforms.
        * rendering/RenderTable.cpp:
        (WebCore::RenderTable::layout):  Factored out the "only positioned objects" case into
        layoutOnlyPositionedObjects(). Added LayoutState push/pop. Removed the translation by the layout delta
        of the old absolute rects, since that is now integral to absoluteClippedOverflowRect() and
        absoluteOutlineBox().
        * rendering/RenderTableCell.cpp:
        (WebCore::RenderTableCell::absoluteClippedOverflowRect): Added the layout delta here, so callers
        don't need to.
        (WebCore::RenderTableCell::computeAbsoluteRepaintRect): For the O(1) code path, skipped the correction
        for the parent row, because RenderTableRow doesn't push a translation into LayoutState.
        (WebCore::RenderTableCell::absolutePosition): Ditto.
        * rendering/RenderTableRow.cpp:
        (WebCore::RenderTableRow::layout): Added LayoutState push/pop.
        * rendering/RenderTableSection.cpp:
        (WebCore::RenderTableSection::setCellWidths): Added LayoutState push/pop if cells are repainted or
        receive layout.
        (WebCore::RenderTableSection::calcRowHeight): Ditto.
        (WebCore::RenderTableSection::layoutRows): Added LayoutState push/pop.
        * rendering/RenderView.cpp:
        (WebCore::RenderView::RenderView):
        (WebCore::RenderView::layout): Added initial LayoutState setup for the layout.
        (WebCore::RenderView::paintBoxDecorations): Minor cleanup: changed element()->document() to the
        equivalent document().
        (WebCore::RenderView::repaintViewRectangle): Ditto.
        (WebCore::RenderView::pushLayoutState): Added. Pushes initial layout state for subtree layout.
        * rendering/RenderView.h:
        (WebCore::RenderView::pushLayoutState):
        (WebCore::RenderView::popLayoutState):
        (WebCore::RenderView::layoutState):
        (WebCore::RenderView::disableLayoutState):
        (WebCore::RenderView::enableLayoutState):

2007-04-29  David Hyatt  <hyatt@apple.com>

        Fix for bugzilla 13535, regression from positioning cleanup a while
        back.  Some code got added to compute available width for a relpositioned
        inline, only the code meant to be used for inline flows and not inline blocks.

        Reviewed by mjs

        fast/block/positioning/inline-block-relposition.html

        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::containingBlockWidthForPositioned):

2007-04-29  Oliver Hunt  <oliver@apple.com>

        Reviewed by Zack.

        Implement basic drag and drop support for qt
        this allows content and link dragging but does not
        provide the DOM data access methods.

        * platform/DragData.h:
        * platform/qt/ClipboardQt.cpp:
        (WebCore::ClipboardQt::ClipboardQt):
        (WebCore::ClipboardQt::~ClipboardQt):
        (WebCore::ClipboardQt::clearData):
        (WebCore::ClipboardQt::clearAllData):
        (WebCore::ClipboardQt::setData):
        (WebCore::ClipboardQt::declareAndWriteDragImage):
        (WebCore::ClipboardQt::writeURL):
        (WebCore::ClipboardQt::writeRange):
        (WebCore::ClipboardQt::hasData):
        * platform/qt/ClipboardQt.h:
        (WebCore::ClipboardQt::clipboardData):
        (WebCore::ClipboardQt::invalidateWritableData):
        * platform/qt/DragDataQt.cpp:
        (WebCore::DragData::canSmartReplace):
        (WebCore::DragData::containsPlainText):
        (WebCore::DragData::asPlainText):
        (WebCore::DragData::createClipboard):
        (WebCore::DragData::containsCompatibleContent):
        (WebCore::DragData::containsURL):
        (WebCore::DragData::asURL):
        (WebCore::DragData::asFragment):

2007-04-28  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Darin and Oliver.

        - change Document to hold onto Frame* instead of FrameView*
        
        This is an architectural cleanup and a prerequisite to fixing citibank login
        in an architecturally sound way.

        Some fixups for the page cache:
        
        * history/CachedPage.cpp:
        (WebCore::CachedPage::restore): Add an assert that the document's view
        matches the cached page's view - this needs to be true by the time this
        function is called.
        (WebCore::CachedPage::clear): Change assert to require frame matching, not
        view matching.
        * history/CachedPage.h:
        (WebCore::CachedPage::view): Add a way to get the view out.
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::begin): pass Frame, not FrameView, when creating document
        (WebCore::FrameLoader::open): restore view based on CachedPage, not Document. 

        Remaining changes are just straightforward updates based on which
        pointer is held or passed:
        
        * dom/DOMImplementation.cpp:
        (WebCore::DOMImplementation::createDocument):
        (WebCore::DOMImplementation::createHTMLDocument):
        * dom/DOMImplementation.h:
        * dom/Document.cpp:
        (WebCore::Document::Document):
        (WebCore::Document::view):
        (WebCore::Document::frame):
        (WebCore::Document::recalcStyle):
        (WebCore::Document::updateLayout):
        (WebCore::Document::attach):
        (WebCore::Document::detach):
        (WebCore::Document::createTokenizer):
        (WebCore::Document::recalcStyleSelector):
        (WebCore::Document::setInPageCache):
        (WebCore::Document::applyXSLTransform):
        * dom/Document.h:
        * html/HTMLDocument.cpp:
        (WebCore::HTMLDocument::HTMLDocument):
        * html/HTMLDocument.h:
        * html/HTMLViewSourceDocument.cpp:
        (WebCore::HTMLViewSourceDocument::HTMLViewSourceDocument):
        * html/HTMLViewSourceDocument.h:
        * ksvg2/svg/SVGDocument.cpp:
        (WebCore::SVGDocument::SVGDocument):
        * ksvg2/svg/SVGDocument.h:
        * loader/ImageDocument.cpp:
        (WebCore::ImageDocument::ImageDocument):
        * loader/ImageDocument.h:
        * loader/PluginDocument.cpp:
        (WebCore::PluginDocument::PluginDocument):
        * loader/PluginDocument.h:
        * loader/TextDocument.cpp:
        (WebCore::TextDocument::TextDocument):
        * loader/TextDocument.h:
        * xml/XSLTProcessor.cpp:
        (WebCore::XSLTProcessor::createDocumentFromSource):
        (WebCore::XSLTProcessor::transformToDocument):
        * xml/XSLTProcessor.h:

2007-04-28  Adele Peterson  <adele@apple.com>

        RS by Darin.

        Update to fix for <rdar://problem/5152299>

        Test: fast/events/no-blur-on-enter-button.html

        * html/HTMLButtonElement.cpp: (WebCore::HTMLButtonElement::defaultEventHandler):
        Don't blur the button when handling the enter key.  This matches our new behavior for input elements.

2007-04-28  Adele Peterson  <adele@apple.com>

        Fix by Darin, reviewed by me.

        Fix for <rdar://problem/5152299> REGRESSION: <button> elements do not respond to space and return key as similar <input> elements do

        Tests:
        fast/forms/button-spacebar-click.html
        fast/forms/button-enter-click.html

        * html/HTMLButtonElement.h: (WebCore::HTMLButtonElement::): Made type enum private.
        Removed unnecessary m_value and m_currValue, and unused m_dirty.
        * html/HTMLButtonElement.cpp:
        (WebCore::HTMLButtonElement::HTMLButtonElement): Removed initialization of m_dirty.
        (WebCore::HTMLButtonElement::parseMappedAttribute): Removed case to parse value and accesskey attributes, which don't do anything.
        (WebCore::HTMLButtonElement::defaultEventHandler): Removed unnecessary check for button type.
         Added cases to handle spacebar and enter keys in the same way that they're handled for <input type=button/reset/submit> buttons.
        (WebCore::HTMLButtonElement::isSuccessfulSubmitButton): Shortened comment.
        (WebCore::HTMLButtonElement::appendFormData): Use value() instead of m_currValue.  Renamed encoding argument to formData.

2007-04-28  Mitz Pettel  <mitz@webkit.org>

        Reviewed by Darin.

        - fix http://bugs.webkit.org/show_bug.cgi?id=13501
          REGRESSION (r21093): Pasting into text field fails and makes the caret disappear

        Test: fast/dynamic/anonymous-block-layer-lost.html

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::removeChild): Avoid cutting off layers when removing
        the anonymous block.

2007-04-28  Mitz Pettel  <mitz@webkit.org>

        Reviewed by Darin.

        - fix http://bugs.webkit.org/show_bug.cgi?id=13471
          REGRESSION (r21045): Secure keyboard entry mode remains in effect after leaving a password field by submitting

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::clear): Replaced direct access to Frame's d->m_doc
        with a call to Frame::setDocument.
        (WebCore::FrameLoader::begin): Ditto.
        (WebCore::FrameLoader::open): Ditto.
        (WebCore::FrameLoader::switchOutLowBandwidthDisplayIfReady): Ditto.
        (WebCore::FrameLoader::canCachePage): Added a comment.
        * manual-tests/secure-keyboard-enabled-after-submit.html: Added.
        * page/Frame.cpp:
        (WebCore::Frame::setDocument): Reset secure keyboard entry, in case the
        old document's focused node has set it.

2007-04-28  Mitz Pettel  <mitz@webkit.org>

        Reviewed by Adele.

        - fix http://bugs.webkit.org/show_bug.cgi?id=13379
          REGRESSION: Cannot add an option to a selected popup

        * manual-tests/update-empty-popup.html: Added.
        * platform/mac/PopupMenuMac.mm:
        (WebCore::PopupMenu::show): Added a call to the client's hidePopup()
        callback before returning in the case that the menu is empty. Otherwise
        the client thinks that the menu stayed open.

2007-04-28  Adele Peterson  <adele@apple.com>

        Reviewed by Darin.

        Fix for <rdar://problem/4806988> REGRESSION: history.go(0) doesn't reload page (affects buttons at facebook.com)

        Test: fast/history/history_reload.html

        * loader/FrameLoader.cpp: (WebCore::FrameLoader::scheduleHistoryNavigation):
        We avoid doing a redirection when going to the same url in a history navigation, but we have to still
        schedule a redirection when the number of steps is zero so we can force a reload.

2007-04-28  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Darin.

        http://bugs.webkit.org/show_bug.cgi?id=13514
        REGRESSION (r20997-21003): Crash in WebCore::Node::document

        Test: fast/dom/NodeList/childNodes-reset-cache.html

        * dom/Node.cpp:
        (WebCore::Node::notifyLocalNodeListsChildrenChanged): Reset the common caches for child node
        lists. We cannot rely on notifications, since there may be no list objects left around.

        * dom/ChildNodeList.cpp:
        (WebCore::ChildNodeList::rootNodeChildrenChanged):
        * dom/ChildNodeList.h:
        Override rootNodeChildrenChanged() with an empty implementation, now that caches are reset
        in Node::notifyLocalNodeListsChildrenChanged().

2007-04-28  Mark Rowe  <mrowe@apple.com>

        Build fix.  Change use of nil to 0 in C++ source file.

        * editing/Editor.cpp:
        (WebCore::Editor::increaseSelectionListLevel):
        (WebCore::Editor::increaseSelectionListLevelOrdered):
        (WebCore::Editor::increaseSelectionListLevelUnordered):

2007-04-28  Darin Adler  <darin@apple.com>

        Reviewed by Adele.

        - fix http://bugs.webkit.org/show_bug.cgi?id=6216
          REGRESSION: getElementsByTagNameNS with empty namespace doesn't work

        * dom/Node.cpp:
        (WebCore::TagNodeList::TagNodeList): Changed parameter to PassRefPtr, tweaked formatting.
        (WebCore::TagNodeList::item): Tweaked formatting.
        (WebCore::TagNodeList::nodeMatches): Tweaked formatting.
        (WebCore::Node::setPrefix): Tweaked formatting.
        (WebCore::Node::getElementsByTagNameNS): Added special case to turn empty namespaces into
        null namespaces.

2007-04-28  Darin Adler  <darin@apple.com>

        Reviewed by Kevin Decker.

        - fix <rdar://problem/5148271> Chinese numbers are incorrect in numbered lists
          (including pasting from TextEdit to Mail)

        Covered by an existing regression test, which had wrong results checked in.

        Hyatt told me not to use the algorithm in the CSS 3 specification, but I didn't listen!
        This corrects mistakes there and makes our results match current Firefox.

        * rendering/RenderListMarker.cpp:
        (WebCore::toCJKIdeographic): Added code to strip off trailing zero digits.
        Added special case for zero, since that's the one case where we don't want
        to strip off trailing zero digits. Fixed mixed-up logic that would put the
        digits in each group backwards.
        (WebCore::listMarkerText): Corrected character values for the CJK_IDEOGRAPHIC case.

2007-04-28  Darin Adler  <darin@apple.com>

        Reviewed by Oliver.

        - fix <rdar://problem/5138250> REGRESSION (r18245): Changing any one aspect
          of a font applies all the aspects to selected text

        Since this bug is only visible with the font panel, I don't
        think there's any way to make a DumpRenderTree-driven test.

        * editing/Editor.cpp: (WebCore::Editor::fontForSelection):
        Set hasMultipleFonts properly. The old code had an early exit
        that was left over from when hasMultipleFonts was a pointer.

2007-04-27  Mitz Pettel  <mitz@webkit.org>

        Reviewed by Dave Hyatt.

        - fix http://bugs.webkit.org/show_bug.cgi?id=13525
          Repainting a listbox schedules a relayout

        No test possible as there is no change to functionality.

        - fix the root cause of http://bugs.webkit.org/show_bug.cgi?id=10862
          REGRESSION: Collapsing form input on www.myspace.com

        No test possible since text fields are no longer implemented as flexboxes.

        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::scheduleRelayout): Added a check that the subtree
        root is in the tree and not free-floating.
        * rendering/bidi.cpp:
        (WebCore::RenderBlock::bidiReorderCharacters): Changed addChild and removeChild
        to appendChildNode and removeChildNode to save some unnecessary overhead.
        These calls still mark the tree for relayout, but the change in scheduleRelayout 
        ensures that a layout won't be scheduled.

2007-04-27  Patti Hoa  <patti@apple.com>

        Reviewed by Darin.
        
        <rdar://problem/5153017> REPRODUCIBLE ASSERT: range != nil in WebViewFactory.mm:415 -[WebViewFactory startOfTextMarkerRange:] (13354)
        
        * bridge/mac/WebCoreAXObject.mm:
        (-[WebCoreAXObject textMarkerRangeForRange:]):
        Fix the range length check.  It was incorrectly assuming that the max range requested cannot be equal
        to the length of the string.  Since NSRange location is index based, it's perfectly valid to have the max
        range equal to the the text length.

2007-04-27  David Harrison  <harrison@apple.com>

        Reviewed by Darin.

        <rdar://problem/5160627> Export JS list creation support as ObjC SPI for Mail

        * WebCore.exp:
        * editing/Editor.h:
        * editing/Editor.cpp:
        (WebCore::Editor::insertOrderedList):
        (WebCore::Editor::insertUnorderedList):
        (WebCore::Editor::canIncreaseSelectionListLevel):
        (WebCore::Editor::canDecreaseSelectionListLevel):
        (WebCore::Editor::increaseSelectionListLevel):
        (WebCore::Editor::increaseSelectionListLevelOrdered):
        (WebCore::Editor::increaseSelectionListLevelUnordered):
        (WebCore::Editor::decreaseSelectionListLevel):
        Add insertOrderedList() and insertUnorderedList().
        Move existing list management functions from WebCoreFrameBridge.
        The level increasing functions now return a PassRefPtr<Node> instead of Node.
        Add check for canEditRichly.
        
        - in many other functions, condense the check for nil client().
        
        * editing/InsertListCommand.h:
        * editing/InsertListCommand.cpp:
        (WebCore::InsertListCommand::insertList):
        (WebCore::InsertListCommand::fixOrphanedListChild):
        (WebCore::InsertListCommand::doApply):
        Add insertList(), which returns the new list element.
        Don't set the list element's ID if the specified ID was an empty string.
                
        * editing/ModifySelectionListLevel.h:
        * editing/ModifySelectionListLevel.cpp:
        (WebCore::IncreaseSelectionListLevelCommand::increaseSelectionListLevelWithType):
        (WebCore::IncreaseSelectionListLevelCommand::increaseSelectionListLevel):
        (WebCore::IncreaseSelectionListLevelCommand::increaseSelectionListLevelOrdered):
        (WebCore::IncreaseSelectionListLevelCommand::increaseSelectionListLevelUnordered):
        Return PassRefPtr<Node> instead of Node.

        * page/mac/WebCoreFrameBridge.h:
        * page/mac/WebCoreFrameBridge.mm:
        Move list management functions to Editor.h and Editor.cpp.


2007-04-27  David Hyatt  <hyatt@apple.com>

        Fix for <rdar://problem/5134254>, toolbar buttons don't work in gmail after double-click.  Make sure
        to clear out the capturing frame, since you don't get a second up when a double-click happens.

        Reviewed by mjs

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

2007-04-27  Justin Garcia  <justin.garcia@apple.com>

        Reviewed by oliver

        <rdar://problem/5164796> 
        Enable execCommand("CreateLink", ...) for caret selections

        * editing/CreateLinkCommand.cpp:
        (WebCore::CreateLinkCommand::doApply): For a caret
        selection, insert a link at the caret position
        with the url as the link text.
        * editing/JSEditor.cpp: Enable CreateLink for caret 
        selections.

2007-04-27  Antti Koivisto  <antti@apple.com>

        Reviewed by Darin, Hyatt.
        
        Fix http://bugs.webkit.org/show_bug.cgi?id=13081
        Empty table cells not handled correctly
        <rdar://problem/5067926>
        
        To match Firefox and IE, empty table cells with variable width need to be
        treated as special case. They generally get zero width.

        * rendering/AutoTableLayout.cpp:
        (WebCore::AutoTableLayout::recalcColumn):
        (WebCore::AutoTableLayout::calcEffectiveWidth):
        (WebCore::AutoTableLayout::layout):
        * rendering/AutoTableLayout.h:
        (WebCore::AutoTableLayout::Layout::Layout):
        * rendering/RenderStyle.h:
        (WebCore::RenderStyle::hasPadding):

2007-04-27  Rob Buis  <buis@kde.org>

        Reviewed by Oliver.

        http://bugs.webkit.org/show_bug.cgi?id=13052
        Text not rendered in a second inline SVG element

        Correct the rendering of svg text when embedded in non-svg container.

        * rendering/RenderSVGText.cpp:
        (WebCore::RenderSVGText::paint):

2007-04-27  Mark Rowe  <mrowe@apple.com>

        Reviewed by Maciej.

        * WebCore.pro: Remove non-existent paths from qmake files.

2007-04-25  Lars Naesbye Christensen <lars@naesbye.dk>

        Reviewed by Timothy Hatcher.

        http://bugs.webkit.org/show_bug.cgi?id=13477
        Bug 13477: Help and context menu cursors need dropshadows.

        * Resources/cellCursor.png:
        * Resources/contextMenuCursor.png:
        * Resources/helpCursor.png:
        * platform/mac/CursorMac.mm:
        (WebCore::contextMenuCursor):
        (WebCore::copyCursor):
        (WebCore::progressCursor):
        (WebCore::noDropCursor):

2007-04-27  Holger Freyther <freyther@kde.org>

        Reviewed by Maciej.

        Remove unmaintained CMake build system.

        * CMakeLists.txt: Removed.

2007-04-26  Matt Perry  <mpComplete@gmail.com>

        Reviewed by Maciej.

        Added a version check to hackAroundLibXMLEntityBug, since that bug has
        been fixed in recent versions of libxml2.

        * dom/XMLTokenizer.cpp:
        (WebCore::hackAroundLibXMLEntityBug):

2007-04-26  Christopher Brichford  <chrisb@adobe.com>

        Reviewed by Timothy Hatcher.

        - Fix for Bug 13204: Submit initial version of mac project files for apollo
          port of WebCore
          http://bugs.webkit.org/show_bug.cgi?id=13204

        * WebCore.apolloproj/mac/WebCore.Debug.xcconfig: Added.
        * WebCore.apolloproj/mac/WebCore.Release.xcconfig: Added.
        * WebCore.apolloproj/mac/WebCore.xcconfig: Added.
        * WebCore.apolloproj/mac/WebCore.xcodeproj/project.pbxproj: Added.

2007-04-26  Alp Toker  <alp@atoker.com>

        Reviewed by Maciej.

        http://bugs.webkit.org/show_bug.cgi?id=13505
        Cast loses precision on x86_64

        * platform/graphics/cairo/GraphicsContextCairo.cpp:
        (WebCore::GraphicsContext::beginTransparencyLayer):
        (WebCore::GraphicsContext::endTransparencyLayer):
        Use a stack of opacity values instead of Cairo user data.

2007-04-26  Mitz Pettel  <mitz@webkit.org>

        Reviewed by Darin.

        - fix http://bugs.webkit.org/show_bug.cgi?id=13500
          REGRESSION: Listbox scrollbar does not reflect actual scrolled position when selected option is added after layout

        Test: fast/forms/listbox-scrollbar-incremental-load.html

        The scroller position was not updated correctly during insertion, since
        scrollbar proportions are updated only during layout

        * rendering/RenderListBox.cpp:
        (WebCore::RenderListBox::selectionChanged): Delay scrolling to reveal the
        selection until after layout if m_optionsChanged is set. Layout is
        guaranteed to happen soon when the flag is set.

2007-04-26  David Hyatt  <hyatt@apple.com>

        Fix for 13511, crash on a counters page.  Make sure that RenderTexts
        never get a null StringImpl.  I would have added an assert that the length
        had to be nonzero also, but unfortunately editing creates empty RenderTexts
        because of its EditingText DOM subclass that always forces renderers to be
        made.  I suppose there is a good reason for this...

        Reviewed by aroben

        * dom/CharacterData.cpp:
        (WebCore::CharacterData::setData):
        (WebCore::CharacterData::appendData):
        (WebCore::CharacterData::insertData):
        (WebCore::CharacterData::deleteData):
        (WebCore::CharacterData::replaceData):
        * rendering/RenderCounter.cpp:
        (WebCore::RenderCounter::RenderCounter):
        * rendering/RenderText.cpp:
        (WebCore::RenderText::RenderText):
        (WebCore::RenderText::trimmedPrefWidths):
        (WebCore::RenderText::setTextWithOffset):
        (WebCore::RenderText::setTextInternal):
        (WebCore::RenderText::setText):

2007-04-26  Alice Liu  <alice.liu@apple.com>

        Reviewed by Oliver.

        * editing/SelectionController.cpp:
        (WebCore::SelectionController::selectAll):
        adding null check

2007-04-26  Justin Garcia  <justin.garcia@apple.com>

        Reviewed by oliver

        <rdar://problem/5120591> 
        Crash when creating a link in Leopard wiki server

        * editing/CreateLinkCommand.cpp:
        (WebCore::CreateLinkCommand::doApply): Use a RefPtr,
        setting the anchor's href can destroy it if there is
        an ancestor with a subtree modified event listener.

2007-04-26  Mitz Pettel  <mitz@webkit.org>

        Reviewed by hyatt

        - http://bugs.webkit.org/show_bug.cgi?id=13496
          Eliminate repaintObjectsBeforeLayout

        No tests added since there is no change to functionality. Several
        tests in fast/repaint test repainting of objects that move during layout.

        * page/FrameView.cpp:
        (WebCore::FrameView::layout):
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::layoutBlockChildren): Removed an early
        setNeedsLayout(false). Resetting the bit here prevents the full repaint
        that we rely on when we decide not to repaint children that move.
        * rendering/RenderBlock.h:
        * rendering/RenderObject.cpp:
        * rendering/RenderObject.h:
        * rendering/RenderTableSection.cpp:
        (WebCore::RenderTableSection::setCellWidths): Replaced the call to
        repaintObjectsBeforeLayout() if the cell didn't need layout with
        an unconditional repaint(). We don't bother with repainting only the
        delta between the old and new widths, since by marking the cell for
        layout results in a full repaint with the new width anyway.

2007-04-26  David Hyatt  <hyatt@apple.com>

        Fix for 13509.  Don't recur to parent inline flows if they have been
        marked as needing layout themselves.

        Reviewed by adele

        * rendering/RenderFlow.cpp:
        (WebCore::RenderFlow::dirtyLinesFromChangedChild):

2007-04-26  Matt Perry  <mpComplete@gmail.com>

        Reviewed and landed by Alexey.

        http://bugs.webkit.org/show_bug.cgi?id=13495
        Crash when referencing an undefined entity in an XHTML document

        Test: fast/parser/badentity.xhtml

        * dom/XMLTokenizer.cpp:
        (WebCore::getEntityHandler): Check for a NULL returned from getXHTMLEntity

2007-04-26  Anders Carlsson  <andersca@apple.com>

        Reviewed by Hyatt.

        <rdar://problem/4851944>
        REGRESSION: With TOT, BMP images can no longer be opened in the browser window
        
        On Tiger, the MIME type for the com.microsoft.bmp UTI isn't in the registry, so add it manually.
        
        * platform/MimeTypeRegistry.cpp:
        (WebCore::initialiseSupportedImageMIMETypes):

2007-04-26  David Hyatt  <hyatt@apple.com>

        Fix for bug 13503, invalidateContainingBlockPrefWidths is 15% of the
        nesting PLT.  Avoid O(n^2) behavior by including inlines in the minmax
        dirty chain.

        Reviewed by kevin

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::calcInlinePrefWidths):
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::setPrefWidthsDirty):
        (WebCore::RenderObject::invalidateContainerPrefWidths):
        * rendering/RenderObject.h:

2007-04-26  Anders Carlsson  <andersca@apple.com>

        Reviewed by Darin.

        <rdar://problem/5067925>
        Reproducible crash (infinite recursion) with a layout test that submits on unload (13078)
        
        Ask the document loader whether it's loading the main resource, since there are cases where the frame 
        loader's variable isn't updated correctly.
        
        In the distant future, the frame loader shouldn't have an instance variable but this is the least intrusive fix for now.
        
        I couldn't come up with a good test case for this since it requires running three tests in a row and scheduleLoad didn't work. Also,
        calling submit in the onunload prevents any new tests from loading!
        
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::isLoading):

2007-04-26  Anders Carlsson  <andersca@apple.com>

        ... and fix the build.
        
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::continueAfterNavigationPolicy):

2007-04-26  Anders Carlsson  <andersca@apple.com>

        Revert the previous change - activeDocumentLoader never returns the policy document loader.
        Instead, add a null check for the policy document loader.
        
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::continueAfterNavigationPolicy):

2007-04-26  Anders Carlsson  <andersca@apple.com>

        Use the active document loader instead of the policy document loader.
        
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::continueAfterNavigationPolicy):

2007-04-26  Anders Carlsson  <andersca@apple.com>

        Reviewed by Maciej.

        <rdar://problem/5049099> documents no longer have a default base URL

        Don't call canHandleRequest if we have valid substitute data and the protocol is "applewebdata".
        
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::continueAfterNavigationPolicy):

2007-04-25  Stephanie Lewis <slewis@apple.com>

        Reviewed by Darin.

        Fix the build for platforms that overload the abs function.        

        * dom/ChildNodeList.cpp:
        (WebCore::ChildNodeList::item):

2007-04-25  David Hyatt  <hyatt@apple.com>

        Fix for bug 13373, make sure to invalidate the pref widths for objects
        with percentage padding.

        Reviewed by beth

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::layoutBlockChildren):
        (WebCore::RenderBlock::layoutPositionedObjects):
        * rendering/bidi.cpp:
        (WebCore::RenderBlock::layoutInlineChildren):

2007-04-25  David Harrison  <harrison@apple.com>

        Comment change. Correct the header name in the endif comment.
        
        * editing/FormatBlockCommand.h:
        Change InsertListCommand_h to FormatBlockCommand_h.

2007-04-25  Darin Adler  <darin@apple.com>

        Reviewed by Hyatt.

        * platform/AtomicString.cpp: (WebCore::AtomicString::add):
        Removed unnecessary use of strlen to check if a string is empty.

2007-04-25  Mitz Pettel  <mitz@webkit.org>

        Build fix.

        * rendering/RenderListMarker.h: Undeleted the m_text member.

2007-04-25  David Hyatt  <hyatt@apple.com>

        Rearchitect calcPrefWidths.  The calculation is now done lazily only when minPrefWidth
        or maxPrefWidth are asked for.  The result of the calculation is cached.

        The new invalidation scheme for pref width invalidation follows the
        containing block hierarchy and knows to halt at positioned objects, since
        they cannot influence the size of their containers.

        Reviewed by darin

        * css/cssstyleselector.cpp:
        (WebCore::CSSStyleSelector::init):
        (WebCore::CSSStyleSelector::initForStyleResolve):
        * page/FrameView.cpp:
        (WebCore::FrameView::layout):
        * rendering/RenderApplet.cpp:
        (WebCore::RenderApplet::layout):
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::makeChildrenNonInline):
        (WebCore::RenderBlock::removeChild):
        (WebCore::RenderBlock::layout):
        (WebCore::RenderBlock::layoutBlock):
        (WebCore::RenderBlock::calcPrefWidths):
        (WebCore::InlineMinMaxIterator::endOfInline):
        (WebCore::shouldGrowTableCellForImage):
        (WebCore::RenderBlock::calcInlinePrefWidths):
        (WebCore::RenderBlock::calcBlockPrefWidths):
        * rendering/RenderBlock.h:
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::setStyle):
        (WebCore::RenderBox::minPrefWidth):
        (WebCore::RenderBox::maxPrefWidth):
        (WebCore::RenderBox::calcWidth):
        (WebCore::RenderBox::calcWidthUsing):
        (WebCore::RenderBox::calcAbsoluteHorizontal):
        (WebCore::RenderBox::calcAbsoluteHorizontalValues):
        * rendering/RenderBox.h:
        * rendering/RenderContainer.cpp:
        (WebCore::RenderContainer::removeChildNode):
        (WebCore::RenderContainer::appendChildNode):
        (WebCore::RenderContainer::insertChildNode):
        (WebCore::RenderContainer::layout):
        * rendering/RenderContainer.h:
        (WebCore::RenderContainer::moveChildNode):
        * rendering/RenderCounter.cpp:
        (WebCore::RenderCounter::dirtyLineBoxes):
        (WebCore::RenderCounter::calcPrefWidths):
        * rendering/RenderCounter.h:
        * rendering/RenderFileUploadControl.cpp:
        (WebCore::RenderFileUploadControl::calcPrefWidths):
        * rendering/RenderFlexibleBox.cpp:
        (WebCore::RenderFlexibleBox::calcHorizontalPrefWidths):
        (WebCore::RenderFlexibleBox::calcVerticalPrefWidths):
        (WebCore::RenderFlexibleBox::calcPrefWidths):
        (WebCore::RenderFlexibleBox::layoutBlock):
        * rendering/RenderForeignObject.cpp:
        (WebCore::RenderForeignObject::layout):
        * rendering/RenderFrameSet.cpp:
        (WebCore::RenderFrameSet::layout):
        * rendering/RenderHTMLCanvas.cpp:
        (WebCore::RenderHTMLCanvas::layout):
        * rendering/RenderImage.cpp:
        (WebCore::RenderImage::layout):
        * rendering/RenderInline.cpp:
        * rendering/RenderInline.h:
        * rendering/RenderListBox.cpp:
        (WebCore::RenderListBox::updateFromElement):
        (WebCore::RenderListBox::calcPrefWidths):
        * rendering/RenderListItem.cpp:
        (WebCore::firstNonMarkerChild):
        (WebCore::RenderListItem::updateMarkerLocation):
        (WebCore::RenderListItem::calcPrefWidths):
        (WebCore::RenderListItem::layout):
        * rendering/RenderListMarker.cpp:
        (WebCore::RenderListMarker::layout):
        (WebCore::RenderListMarker::calcPrefWidths):
        (WebCore::RenderListMarker::updateMargins):
        * rendering/RenderListMarker.h:
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::RenderObject):
        (WebCore::RenderObject::removeChildNode):
        (WebCore::RenderObject::moveChildNode):
        (WebCore::RenderObject::appendChildNode):
        (WebCore::RenderObject::insertChildNode):
        (WebCore::RenderObject::setPrefWidthsDirty):
        (WebCore::RenderObject::invalidateContainingBlockPrefWidths):
        (WebCore::RenderObject::information):
        (WebCore::RenderObject::setStyle):
        * rendering/RenderObject.h:
        (WebCore::RenderObject::layer):
        (WebCore::RenderObject::hasLayer):
        (WebCore::RenderObject::prefWidthsDirty):
        (WebCore::RenderObject::setNeedsLayoutAndPrefWidthsRecalc):
        (WebCore::RenderObject::setHasLayer):
        * rendering/RenderPartObject.cpp:
        (WebCore::RenderPartObject::layout):
        * rendering/RenderSVGContainer.cpp:
        (WebCore::RenderSVGContainer::layout):
        * rendering/RenderSVGContainer.h:
        * rendering/RenderSVGHiddenContainer.cpp:
        * rendering/RenderSVGHiddenContainer.h:
        * rendering/RenderSVGText.cpp:
        (WebCore::RenderSVGText::layout):
        * rendering/RenderTable.cpp:
        (WebCore::RenderTable::calcWidth):
        (WebCore::RenderTable::layout):
        (WebCore::RenderTable::removeChildNode):
        * rendering/RenderTable.h:
        * rendering/RenderTableRow.cpp:
        (WebCore::RenderTableRow::layout):
        * rendering/RenderTableSection.cpp:
        (WebCore::RenderTableSection::removeChildNode):
        * rendering/RenderTableSection.h:
        * rendering/RenderText.cpp:
        (WebCore::RenderText::trimmedPrefWidths):
        (WebCore::isSpaceAccordingToStyle):
        (WebCore::RenderText::minPrefWidth):
        (WebCore::RenderText::maxPrefWidth):
        (WebCore::RenderText::calcPrefWidths):
        (WebCore::RenderText::width):
        * rendering/RenderText.h:
        * rendering/RenderView.cpp:
        (WebCore::RenderView::RenderView):
        (WebCore::RenderView::calcPrefWidths):
        (WebCore::RenderView::layout):
        * rendering/RenderWidget.cpp:
        (WebCore::RenderWidget::layout):

2007-04-25  Steve Falkenburg  <sfalken@apple.com>

        Reviewed by Adam.

        Fix spelling error in spelling method name.
        Expose new spelling callback methods to all platforms.

        * bridge/EditorClient.h:
        * platform/gdk/EditorClientGdk.cpp:
        (WebCore::EditorClientGdk::updateSpellingUIWithGrammarString):
        * platform/gdk/EditorClientGdk.h:
        * platform/graphics/svg/SVGImageEmptyClients.h:
        (WebCore::SVGEmptyEditorClient::updateSpellingUIWithGrammarString):
        (WebCore::SVGEmptyEditorClient::getGuessesForWord):

2007-04-24  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Darin Adler, Tim Hatcher.

        Fixed a few NSAutoreleasePool issues I noticed while reviewing Brady's patch.

        * platform/graphics/mac/GraphicsContextMac.mm:
        (WebCore::GraphicsContext::setCompositeOperation): Call -drain instead of 
        -release, since -release is a no-op in a GC world.

2007-04-25  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Darin.

        http://bugs.webkit.org/show_bug.cgi?id=13445
        NodeList access by index is slow

        * dom/ChildNodeList.cpp:
        (WebCore::ChildNodeList::item): Support iterating backwards from the last accessed node
        or from the last child.
        * dom/NodeList.h: Make cachedLength unsigned.

2007-04-26  Mark Rowe  <mrowe@apple.com>

        Gdk build fix.  Add missing stub.

        * platform/gdk/TemporaryLinkStubs.cpp:
        (Editor::advanceToNextMisspelling):

2007-04-25  Rob Buis  <buis@kde.org>

        Reviewed by Darin.

        http://bugs.webkit.org/show_bug.cgi?id=12163
        SVG text does not appear in a scrolling <div>

        Make sure SVG text is painted when scrolling by taking into account the relative offset of the non-SVG parent in the paintInfo rect.

        * rendering/RenderSVGContainer.cpp:
        (WebCore::RenderSVGContainer::paint):

2007-04-26  Mark Rowe  <mrowe@apple.com>

        Fix non-Mac builds after r21081.

        Stub out new Editor methods for Qt and Gdk, and new SVGEmptyEditorClient methods
        for all non-Mac builds.

        * editing/qt/EditorQt.cpp:
        (WebCore::Editor::showSpellingGuessPanel):
        (WebCore::Editor::spellingPanelIsShowing):
        * page/qt/EventHandlerQt.cpp:
        (WebCore::EventHandler::passWheelEventToWidget):
        (WebCore::EventHandler::passMousePressEventToScrollbar):
        * platform/gdk/TemporaryLinkStubs.cpp:
        (Editor::showSpellingGuessPanel):
        (Editor::spellingPanelIsShowing):
        * platform/graphics/svg/SVGImageEmptyClients.h:
        (WebCore::SVGEmptyEditorClient::ignoreWordInSpellDocument):
        (WebCore::SVGEmptyEditorClient::learnWord):
        (WebCore::SVGEmptyEditorClient::checkSpellingOfString):
        (WebCore::SVGEmptyEditorClient::checkGrammarOfString):
        (WebCore::SVGEmptyEditorClient::udpateSpellingUIWithGrammarString):
        (WebCore::SVGEmptyEditorClient::updateSpellingUIWithMisspelledWord):
        (WebCore::SVGEmptyEditorClient::showSpellingUI):
        (WebCore::SVGEmptyEditorClient::spellingUIIsShowing):
        (WebCore::SVGEmptyEditorClient::getGuessesForWord):

2007-04-25  Anders Carlsson  <andersca@apple.com>

        Reviewed by Ada.

        <rdar://problem/5122153>
        Crash occurs at WebCore::Frame::loader() when switching to Bookmarks view while loading standalone image

        Don't call writeRawData if the data length is 0. (This is checked by the decoder for the non-raw case).

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

2007-04-26  Mark Rowe  <mrowe@apple.com>

        Gdk build fix courtesy of Alp Toker.

        * make-generated-sources.sh:  Remove conditional logic to ensure the
        script exits with the correct exit code.

2007-04-24  Anders Carlsson  <andersca@apple.com>

        Reviewed by Mitz.

        <rdar://problem/4869095> 
        default content type for XMLHttpRequest POSTs changed (breaks Flickrator 0.1 widget)
        
        Use the right MIME type.
        
        * xml/xmlhttprequest.cpp:
        (WebCore::XMLHttpRequest::send):

2007-04-24  Darin Adler  <darin@apple.com>

        Reviewed by Maciej.

        - second round of preparation for Hyatt's "lazy minMaxWidth" change
          http://bugs.webkit.org/show_bug.cgi?id=13431

        These are small changes that are either safe to do first, or unrelated to the main
        change in Hyatt's patch.

        - Preallocate 4 entries each in m_layoutStruct and m_spanCells to save allocation
          in AutoTableLayout.
        - Add an early exit to RenderFlow::dirtyLinesFromChangedChild.
        - Change InlineBox::hasTextChildren() to use a bit directly and never a virtual function.
        - Save a virtual function call by using a local bool variable for isTableCell().

        - Fix containingBlock() so it returns 0 for table cells with no parent.

        - Change all callers who are getting at layer() as a boolean to use hasLayer().
        - Change if statements to max() function calls (only the ones Hyatt had in his patch).
        - Remove some old kdDebug calls.
        - Tweak formatting of some code.
        - Add const in one place.

        * bindings/js/kjs_html.cpp:
        (KJS::HTMLElementFunction::callAsFunction):
        * page/EventHandler.cpp:
        (WebCore::EventHandler::eventMayStartDrag):
        * page/Frame.cpp:
        (WebCore::Frame::clearTimers):
        * rendering/AutoTableLayout.cpp:
        (WebCore::AutoTableLayout::recalcColumn):
        * rendering/AutoTableLayout.h:
        * rendering/InlineBox.h:
        (WebCore::InlineBox::InlineBox):
        (WebCore::InlineBox::hasTextChildren):
        * rendering/InlineFlowBox.cpp:
        (WebCore::InlineFlowBox::nodeAtPoint):
        * rendering/InlineFlowBox.h:
        (WebCore::InlineFlowBox::InlineFlowBox):
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::layoutBlock):
        (WebCore::RenderBlock::repaintOverhangingFloats):
        (WebCore::RenderBlock::paintChildren):
        (WebCore::RenderBlock::paintFloats):
        (WebCore::RenderBlock::fillBlockSelectionGaps):
        (WebCore::RenderBlock::insertFloatingObject):
        (WebCore::RenderBlock::floatRect):
        (WebCore::RenderBlock::lowestPosition):
        (WebCore::RenderBlock::rightmostPosition):
        (WebCore::RenderBlock::leftmostPosition):
        (WebCore::RenderBlock::addOverhangingFloats):
        (WebCore::RenderBlock::nodeAtPoint):
        (WebCore::RenderBlock::hitTestContents):
        (WebCore::RenderBlock::calcPrefWidths):
        (WebCore::InlineMinMaxIterator::next):
        (WebCore::getBorderPaddingMargin):
        (WebCore::RenderBlock::calcInlinePrefWidths):
        (WebCore::RenderBlock::calcBlockPrefWidths):
        * rendering/RenderContainer.cpp:
        (WebCore::RenderContainer::appendChildNode):
        (WebCore::RenderContainer::insertChildNode):
        * rendering/RenderFlexibleBox.cpp:
        (WebCore::RenderFlexibleBox::calcHorizontalPrefWidths):
        (WebCore::RenderFlexibleBox::calcVerticalPrefWidths):
        * rendering/RenderFlow.cpp:
        (WebCore::RenderFlow::dirtyLinesFromChangedChild):
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::updateVisibilityStatus):
        (WebCore::RenderLayer::updateLayerPosition):
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::containingBlock):
        * rendering/RenderTable.cpp:
        (WebCore::RenderTable::paint):
        * rendering/RenderTableCell.cpp:
        (WebCore::RenderTableCell::paintBackgroundsBehindCell):
        * rendering/RenderTableRow.cpp:
        (WebCore::RenderTableRow::nodeAtPoint):
        (WebCore::RenderTableRow::paint):
        * rendering/RenderTableSection.cpp:
        (WebCore::RenderTableSection::nodeAtPoint):
        * rendering/RenderTreeAsText.cpp:
        (WebCore::write):

2007-04-24  Steve Falkenburg  <sfalken@apple.com>

        Reviewed by Darin, Oliver.

        Refactor spelling codepaths

        * bridge/EditorClient.h:
        * page/ContextMenuController.cpp:
        (WebCore::ContextMenuController::contextMenuItemSelected):
        * platform/ContextMenu.cpp:
        (WebCore::ContextMenu::populate):
        (WebCore::ContextMenu::checkOrEnableIfNeeded):
        * platform/gdk/EditorClientGdk.cpp:
        (WebCore::EditorClientGdk::ignoreWordInSpellDocument):
        (WebCore::EditorClientGdk::learnWord):
        (WebCore::EditorClientGdk::checkSpellingOfString):
        (WebCore::EditorClientGdk::checkGrammarOfString):
        (WebCore::EditorClientGdk::udpateSpellingUIWithGrammarString):
        (WebCore::EditorClientGdk::updateSpellingUIWithMisspelledWord):
        (WebCore::EditorClientGdk::showSpellingUI):
        (WebCore::EditorClientGdk::spellingUIIsShowing):
        (WebCore::EditorClientGdk::getGuessesForWord):
        * platform/gdk/EditorClientGdk.h:

2007-04-24  Darin Adler  <darin@apple.com>

        Reviewed by Adele.

        - first round of preparation for Hyatt's "lazy minMaxWidth" change
          http://bugs.webkit.org/show_bug.cgi?id=13431

        This patch limits itself to renaming and making other super-simple
        changes so that the above change will be smaller and easier to review
        and understand.

        Rename:

            calcHorizontalMinMaxWidth -> calcHorizontalPrefWidths
            calcMinMaxWidth -> calcPrefWidths
            calcMinMaxWidthInternal -> calcPrefWidthsInternal
            calcVerticalMinMaxWidth -> calcVerticalPrefWidths
            setNeedsLayoutAndMinMaxRecalc -> setNeedsLayoutAndPrefWidthsRecalc
            trimmedMinMaxWidth -> trimmedPrefWidths

            RenderObject::m_maxWidth -> RenderObject::m_maxPrefWidth
            RenderObject::m_minWidth -> RenderObject::m_minPrefWidth
            RenderObject::maxWidth() -> RenderObject::maxPrefWidth()
            RenderObject::minWidth() -> RenderObject::minPrefWidth()

        Replace m_minMaxKnown, minMaxKnown(), and setMinMaxKnown() with
        m_prefWidthsDirty, prefWidthsDirty(), and setPrefWidthsDirty(),
        a boolean with the opposite sense.

        Convert some uses of if statements into "max".

        Change many uses of layer() to hasLayer(). For now it's just a boolean
        version of layer(), but Hyatt's patch makes it faster by using a bit.

        Added a guard to use of axObjectCache() to make RenderObject destruction
        a little faster for the normal case.

        Removed some assertions that will be removed in Hyatt's patch.

        Made some functions const that will be const in Hyatt's patch.

        Put in some revised comments from Hyatt's patch.

        Removed an unneeded nil check from RenderListMarker::setStyle.

        Moved RootInlineBox::setHorizontalOverflowPositions and
        RootInlineBox::setVerticalSelectionPositions to the RootInlineBox.h
        header and marked them inline.

        * dom/Document.cpp:
        (WebCore::Document::updateStyleSelector):
        * html/HTMLTextAreaElement.cpp:
        (WebCore::HTMLTextAreaElement::parseMappedAttribute):
        * page/Frame.cpp:
        (WebCore::Frame::forceLayoutWithPageWidthRange):
        * rendering/AutoTableLayout.cpp:
        (WebCore::AutoTableLayout::recalcColumn):
        (WebCore::AutoTableLayout::calcPrefWidths):
        (WebCore::AutoTableLayout::calcEffectiveWidth):
        * rendering/AutoTableLayout.h:
        * rendering/CounterNode.cpp:
        (WebCore::CounterNode::recount):
        * rendering/FixedTableLayout.cpp:
        (WebCore::FixedTableLayout::calcPrefWidths):
        * rendering/FixedTableLayout.h:
        * rendering/InlineFlowBox.cpp:
        (WebCore::InlineFlowBox::paint):
        * rendering/RenderApplet.cpp:
        (WebCore::RenderApplet::layout):
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::removeChild):
        (WebCore::RenderBlock::layoutBlock):
        (WebCore::RenderBlock::handleCompactChild):
        (WebCore::RenderBlock::getClearDelta):
        (WebCore::RenderBlock::calcPrefWidths):
        (WebCore::RenderBlock::calcInlinePrefWidths):
        (WebCore::RenderBlock::calcBlockPrefWidths):
        * rendering/RenderBlock.h:
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::RenderBox):
        (WebCore::RenderBox::nodeAtPoint):
        (WebCore::RenderBox::calcWidth):
        (WebCore::RenderBox::calcWidthUsing):
        (WebCore::RenderBox::calcAbsoluteHorizontal):
        (WebCore::RenderBox::calcAbsoluteHorizontalValues):
        * rendering/RenderBox.h:
        (WebCore::RenderBox::minPrefWidth):
        (WebCore::RenderBox::maxPrefWidth):
        * rendering/RenderContainer.cpp:
        (WebCore::RenderContainer::removeChildNode):
        (WebCore::RenderContainer::appendChildNode):
        (WebCore::RenderContainer::insertChildNode):
        (WebCore::RenderContainer::layout):
        * rendering/RenderContainer.h:
        (WebCore::RenderContainer::calcPrefWidths):
        * rendering/RenderCounter.cpp:
        (WebCore::RenderCounter::calcPrefWidths):
        * rendering/RenderCounter.h:
        * rendering/RenderFieldset.cpp:
        (WebCore::RenderFieldset::calcPrefWidths):
        * rendering/RenderFieldset.h:
        * rendering/RenderFileUploadControl.cpp:
        (WebCore::RenderFileUploadControl::calcPrefWidths):
        * rendering/RenderFileUploadControl.h:
        * rendering/RenderFlexibleBox.cpp:
        (WebCore::RenderFlexibleBox::calcHorizontalPrefWidths):
        (WebCore::RenderFlexibleBox::calcVerticalPrefWidths):
        (WebCore::RenderFlexibleBox::calcPrefWidths):
        (WebCore::RenderFlexibleBox::layoutBlock):
        (WebCore::RenderFlexibleBox::allowedChildFlex):
        * rendering/RenderFlexibleBox.h:
        (WebCore::RenderFlexibleBox::hasMultipleLines):
        (WebCore::RenderFlexibleBox::isVertical):
        (WebCore::RenderFlexibleBox::isHorizontal):
        * rendering/RenderFlow.cpp:
        (WebCore::RenderFlow::absoluteClippedOverflowRect):
        * rendering/RenderForeignObject.cpp:
        (WebCore::RenderForeignObject::layout):
        * rendering/RenderFrameSet.cpp:
        (WebCore::RenderFrameSet::layout):
        * rendering/RenderHTMLCanvas.cpp:
        (WebCore::RenderHTMLCanvas::layout):
        * rendering/RenderImage.cpp:
        (WebCore::RenderImage::imageChanged):
        (WebCore::RenderImage::layout):
        (WebCore::RenderImage::calcPrefWidths):
        * rendering/RenderImage.h:
        * rendering/RenderInline.cpp:
        (WebCore::RenderInline::addChildToFlow):
        (WebCore::RenderInline::splitInlines):
        (WebCore::RenderInline::splitFlow):
        (WebCore::RenderInline::calcPrefWidths):
        * rendering/RenderInline.h:
        * rendering/RenderListBox.cpp:
        (WebCore::RenderListBox::updateFromElement):
        (WebCore::RenderListBox::calcPrefWidths):
        * rendering/RenderListBox.h:
        * rendering/RenderListItem.cpp:
        (WebCore::RenderListItem::updateValue):
        (WebCore::RenderListItem::updateMarkerLocation):
        (WebCore::RenderListItem::calcPrefWidths):
        (WebCore::RenderListItem::layout):
        (WebCore::RenderListItem::explicitValueChanged):
        * rendering/RenderListItem.h:
        * rendering/RenderListMarker.cpp:
        (WebCore::RenderListMarker::setStyle):
        (WebCore::RenderListMarker::layout):
        (WebCore::RenderListMarker::imageChanged):
        (WebCore::RenderListMarker::calcPrefWidths):
        (WebCore::RenderListMarker::calcWidth):
        * rendering/RenderListMarker.h:
        * rendering/RenderMenuList.cpp:
        (WebCore::RenderMenuList::updateOptionsWidth):
        (WebCore::RenderMenuList::calcPrefWidths):
        * rendering/RenderMenuList.h:
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::RenderObject):
        (WebCore::addLayers):
        (WebCore::RenderObject::removeLayers):
        (WebCore::RenderObject::moveLayers):
        (WebCore::RenderObject::addAbsoluteRectForLayer):
        (WebCore::RenderObject::checkForRepaintDuringLayout):
        (WebCore::RenderObject::dump):
        (WebCore::RenderObject::setStyle):
        (WebCore::RenderObject::destroy):
        (WebCore::RenderObject::recalcMinMaxWidths):
        * rendering/RenderObject.h:
        (WebCore::RenderObject::hasLayer):
        (WebCore::RenderObject::prefWidthsDirty):
        (WebCore::RenderObject::setPrefWidthsDirty):
        (WebCore::RenderObject::setNeedsLayoutAndPrefWidthsRecalc):
        (WebCore::RenderObject::calcPrefWidths):
        (WebCore::RenderObject::minPrefWidth):
        (WebCore::RenderObject::maxPrefWidth):
        * rendering/RenderPart.cpp:
        (WebCore::RenderPart::setWidget):
        * rendering/RenderPartObject.cpp:
        (WebCore::RenderPartObject::updateWidget):
        (WebCore::RenderPartObject::layout):
        * rendering/RenderReplaced.cpp:
        (WebCore::RenderReplaced::calcPrefWidths):
        * rendering/RenderReplaced.h:
        * rendering/RenderSVGContainer.cpp:
        (WebCore::RenderSVGContainer::calcPrefWidths):
        (WebCore::RenderSVGContainer::layout):
        * rendering/RenderSVGContainer.h:
        * rendering/RenderSVGHiddenContainer.cpp:
        (WebCore::RenderSVGHiddenContainer::calcPrefWidths):
        * rendering/RenderSVGHiddenContainer.h:
        * rendering/RenderSVGText.cpp:
        (WebCore::RenderSVGText::layout):
        * rendering/RenderSlider.cpp:
        (WebCore::RenderSlider::calcPrefWidths):
        * rendering/RenderSlider.h:
        * rendering/RenderTable.cpp:
        (WebCore::RenderTable::calcWidth):
        (WebCore::RenderTable::layout):
        (WebCore::RenderTable::calcPrefWidths):
        (WebCore::RenderTable::splitColumn):
        (WebCore::RenderTable::appendColumn):
        * rendering/RenderTable.h:
        * rendering/RenderTableCell.cpp:
        (WebCore::RenderTableCell::updateFromElement):
        (WebCore::RenderTableCell::styleOrColWidth):
        (WebCore::RenderTableCell::calcPrefWidths):
        * rendering/RenderTableCell.h:
        * rendering/RenderTableCol.cpp:
        (WebCore::RenderTableCol::updateFromElement):
        * rendering/RenderTableRow.cpp:
        (WebCore::RenderTableRow::layout):
        * rendering/RenderTableSection.cpp:
        (WebCore::RenderTableSection::paint):
        * rendering/RenderText.cpp:
        (WebCore::RenderText::trimmedPrefWidths):
        (WebCore::RenderText::calcPrefWidths):
        (WebCore::RenderText::calcPrefWidthsInternal):
        (WebCore::RenderText::setText):
        * rendering/RenderText.h:
        (WebCore::RenderText::minPrefWidth):
        (WebCore::RenderText::maxPrefWidth):
        * rendering/RenderTextControl.cpp:
        (WebCore::RenderTextControl::calcPrefWidths):
        * rendering/RenderTextControl.h:
        * rendering/RenderView.cpp:
        (WebCore::RenderView::RenderView):
        (WebCore::RenderView::calcPrefWidths):
        (WebCore::RenderView::layout):
        * rendering/RenderView.h:
        * rendering/RenderWidget.cpp:
        (WebCore::RenderWidget::layout):
        * rendering/RootInlineBox.cpp:
        * rendering/RootInlineBox.h:
        (WebCore::RootInlineBox::setHorizontalOverflowPositions):
        (WebCore::RootInlineBox::setVerticalSelectionPositions):
        * rendering/TableLayout.h:

2007-04-24  Justin Garcia  <justin.garcia@apple.com>

        Reviewed by oliver
        
        <rdar://problem/5156401> 
        Crash when dragging text into a link inside a table cell

        * editing/CompositeEditCommand.cpp:
        (WebCore::CompositeEditCommand::positionAvoidingSpecialElementBoundary):
        Don't avoid the anchor if doing so would skip over a line break, that
        would put content in the wrong paragraph, which can throw ReplaceSelectionCommand,
        which relies on moveParagraphs into infinite recursion.
        Renamed the input position.
        Don't need to re-fetch the enclosing anchor when preparing to push it down,
        since it hasn't changed since the top of the function.

2007-04-24  Timothy Hatcher  <timothy@apple.com>

        Reviewed by Adam.

        <rdar://problem/5133011> 64-bit: Attempting to paste copied text in a input field results in a crash at WebCore::Range::startPosition()

        Change a couple incorrect uses of LONG_MAX to INT_MAX to match the variable type they are used in.
        The LONG_MAX on 64-bit was overflowing the int variables, causing this crash on paste.

        * bridge/mac/WebCoreAXObject.mm:
        (-[WebCoreAXObject value]):
        * editing/TextIterator.cpp:
        (WebCore::TextIterator::handleTextNode):
        (WebCore::TextIterator::handleTextBox):

2007-04-24  Timothy Hatcher  <timothy@apple.com>

        Reviewed by Adam.

        <rdar://problem/4966982> 64-bit: In a unordered list, TYPE=DISC and TYPE=CIRCLE attribute values are ignored

        We need to draw our full-circle arcs counter-clockwise, since a clockwise arc from 0 to 2Ï is no arc at all!
        This only worked on 32-bit due to a rounding error in CoreGraphics, causing it to draw a full circle anyway.

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

2007-04-24  Brady Eidson  <beidson@apple.com>

        Reviewed by Beth, Hyatt, Ada, and Darin

        <rdar://problem/5011477> and <rdar://problem/5011514>
        Provide support for the icon.db to be moved to a different directory from the old WebKit-style
        icons, and remove the old directory if that is the case

        Support for this starts in WebCore, where we can use the metadata table in the icon.db to track
        whether or not we've ever done the import

        * WebCore.exp:
        * loader/icon/IconDatabase.cpp:
        (WebCore::IconDatabase::defaultDatabaseFilename): Changed to "Icons.db"
        (WebCore::IconDatabase::IconDatabase):
        (WebCore::IconDatabase::deleteAllPreparedStatements): Delete the new statements added
        (WebCore::IconDatabase::imported): Grab this flag from the DB or return the cached flag
        (WebCore::IconDatabase::setImported): Store this flag into the DB
        (WebCore::IconDatabase::importedQuery): Actually do the DB query for this save
        (WebCore::IconDatabase::setImportedQuery): Actually do the DB query for this retrieval
        * loader/icon/IconDatabase.h:

2007-04-24  Darin Adler  <darin@apple.com>

        Reviewed by Justin.

        - fix <rdar://problem/4356361> Selection after multiple delete
          keypresses and undo selects only the last deleted character

        Test: editing/undo/undo-combined-delete-boundary.html
        Test: editing/undo/undo-combined-delete.html
        Test: editing/undo/undo-delete-boundary.html
        Test: editing/undo/undo-delete.html
        Test: editing/undo/undo-forward-delete-boundary.html
        Test: editing/undo/undo-forward-delete.html

        * editing/TypingCommand.cpp:
        (WebCore::TypingCommand::insertText): Fix obviously-wrong code where there were missing
        braces. I couldn't find any real symptom of this, but I think the fix should go in anyway.
        All layout tests still pass.
        (WebCore::TypingCommand::deleteKeyPressed): Added code to compute a selection that goes
        back to the beginning of the composite editing operation.
        (WebCore::TypingCommand::forwardDeleteKeyPressed): Ditto.

        * editing/Selection.h:
        * editing/Selection.cpp: (WebCore::Selection::setWithoutValidation):
        Added. Back door to allow setting the ends of a selection without revalidating,
        because we need to use it on a selection where the endpoints may no longer be
        valid due to mutations done by earlier pieces of the editing operation.

        * editing/EditCommand.h:
        (WebCore::EditCommand::startingSelection): Return a const& for speed.
        (WebCore::EditCommand::endingSelection): Ditto.

2007-04-24  Sam Weinig  <sam@webkit.org>

        Reviewed by Mitz.

        - fix for http://bugs.webkit.org/show_bug.cgi?id=13448
          REGRESSION: setting an input element's value to JavaScript null gives "null"

        Test: fast/forms/input-null.html

        * html/HTMLInputElement.idl: Convert JS null to the empty string on setting
        DOMString attributes.

2007-04-24  Mitz Pettel  <mitz@webkit.org>

        Reviewed by Dave Hyatt.

        - fix http://bugs.webkit.org/show_bug.cgi?id=13453
          Control clip isn't applied to children's backgrounds, outlines and floats

        Test: fast/forms/control-clip.html

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::paint): Apply the clip in all phases that paint
        children. Split PaintPhaseOutline and PaintPhaseChildBlockBackground into
        two phases each, applying the clip only to the children.
        * rendering/RenderListBox.cpp:
        (WebCore::RenderListBox::paintObject): Treat the scrollbar as part of the
        background rather than as a child's background, now that children are
        clipped out.

2007-04-24  Benjamin Otte  <otte@gnome.org>

        Reviewed by Mark Rowe.

        Gdk build system improvements.

        * make-generated-sources.sh: Exit with failure status if make fails.

2007-04-24  Benjamin Otte  <otte@gnome.org>

        Reviewed by Mark Rowe.

        Gdk build system improvements.

        * Projects/gdk/webcore-gdk.bkl:
        fail if running any of the commands failed. In particular
        make-generated-sources.sh

2007-04-23  Beth Dakin  <bdakin@apple.com>

        Reviewed by Adam.

        Fix for <rdar://problem/5155507> REGRESSION: Crash in 
        RenderLayer::setHasVisibleContent()

        * rendering/RenderContainer.cpp:
        (WebCore::RenderContainer::appendChildNode): Must null-check 
        enclosingLayer()
        (WebCore::RenderContainer::insertChildNode): Same.

2007-04-23  David Hyatt  <hyatt@apple.com>

        Fix for bug 13337, deep tag nesting is slow.  This patch fixes a number of O(n^2) issues as well as making
        a few performance optimizations based off profiling.  Details next to each change below.

        Note that calcMinMaxWidth being slow is a critical separate piece of this puzzle.  Until bug 13430 is fixed,
        render tree construction will be O(n^2) (because of the minmaxrecalc bit setting being stupid enough to
        always crawl to the root of the tree) and calcMinMaxWidth will waste tons of unnecessary time.

        When these fixes are combined with the calcMinMaxWidth fix in 13430, the penguin page specified in 13337
        loads in < 2 seconds (down from an infinite hang before).

        Reviewed by aroben, ollie

        * css/cssstyleselector.cpp:
        (WebCore::CSSStyleSelector::locateCousinList):
        (WebCore::CSSStyleSelector::locateSharedStyle):
        * css/csstyleselector.h
        Cap the depth of cousin searching on the shared style optimization.  We will be willing to (at most) crawl
        up the tree the same distance that we were willing to crawl backwards through sibling lists.  Leaving it
        uncapped resulted in pathological style resolution for the case of an infinitely nested chain of singletons.

        * html/HTMLParser.cpp:
        (WebCore::HTMLParser::handleResidualStyleCloseTagAcrossBlocks):
        (WebCore::HTMLParser::popBlock):
        Cap the number of residual style tags that we are willing to reopen.  We will reopen at most 200
        residual style tags, since the assumption is that once that many tags are on the stack, you're probably already
        every kind of bold, italic, and color of the rainbow.

        * rendering/RenderFlow.cpp:
        (WebCore::RenderFlow::absoluteClippedOverflowRect):
        absoluteClippedOverflowRect can just return the empty rect when the inline flow has no line boxes instead of
        doing a bunch of work (and calling containingBlock()) for no reason.

        * rendering/RenderInline.cpp:
        (WebCore::RenderInline::addChildToFlow):
        Remove the useless containingBlock() check from addChildToFlow.  Obviously every inline's containing block
        is a block flow.

        * rendering/bidi.cpp:
        (WebCore::inlineWidth):
        (WebCore::RenderBlock::createLineBoxes):
        Cap the depth of individual line trees to 200.  Again the assumption is that once that many open inlines exist
        all on one line that there's no way this would be intentional.

2007-04-23  David Hyatt  <hyatt@apple.com>

        Fix for bug 13430, cap inline splitting for continuations to a maximum depth of 200.

        Reviewed by olliej, antti

        * rendering/RenderInline.cpp:
        (WebCore::RenderInline::splitInlines):

2007-04-23  Alp Toker  <alp@atoker.com>

        Gdk build fix. Track EventHandler change made in r21042.

        * page/gdk/EventHandlerGdk.cpp:
        (WebCore::EventHandler::passWheelEventToWidget):
        (WebCore::EventHandler::passMousePressEventToScrollbar):

2007-04-23  Timothy Hatcher  <timothy@apple.com>

        Reviewed by Darin.

        <rdar://problem/5024945> -[DOMRange lineBoxRects] doesn't include start and end nodes that have offsets

        * rendering/RenderText.cpp:
        (WebCore::RenderText::addLineBoxRects): Use min(box->len(), end) instead of special-casing UINT_MAX.

2007-04-23  Adele Peterson  <adele@apple.com>

        Fix by Darin, reviewed by me.

        Fix for REGRESSION: Can't upload attachments to bugzilla since the file upload control is reset immediately 
        http://bugs.webkit.org/show_bug.cgi?id=13461

        * rendering/RenderFileUploadControl.cpp: (WebCore::RenderFileUploadControl::updateFromElement):
        Only clear the FileChooser if the value is empty *and* (not or) the filename is empty.

2007-04-23  Adele Peterson  <adele@apple.com>

        Reviewed by Adam.

        Updated fix for <rdar://problem/4887426> Set a reasonable maximum number of recent searches for search menu

        * html/HTMLInputElement.cpp: (WebCore::HTMLInputElement::parseMappedAttribute): Use a const int maxSavedResults instead of magic number 256.

2007-04-23  Timothy Hatcher  <timothy@apple.com>

        Reviewed by Hyatt.

        <rdar://problem/5024945> -[DOMRange lineBoxRects] doesn't include start and end nodes that have offsets

        Don't call selectionRect with a -1 end position, instead use the text length.

        * rendering/RenderText.cpp:
        (WebCore::RenderText::addLineBoxRects):

2007-04-23  Adele Peterson  <adele@apple.com>

        Fixed and reviewed by Darin, Adele, and Oliver.

        WebCore part of fix for <rdar://problem/5107538> REGRESSION: Page scroll when selecting characters from inline input candidate window by arrow buttons
        http://bugs.webkit.org/show_bug.cgi?id=13263

        * dom/KeyboardEvent.h: (WebCore::KeypressCommand::isEmpty): Added helper method.

2007-04-23  Patti Hoa  <patti@apple.com>
        
        <rdar://problem/4938364> Attachment button has different string length between attributeStringForRange and stringForRange
        <rdar://problem/4939536> AXLengthForTextMarkerRange returns zero length for the range of an attachment
        
        Reviewed by Darin.

        * bridge/mac/WebCoreAXObject.mm:
        (nsStringForReplacedNode):
        Added helper routine to check if the replaced node should be exposed as an attachment character in string representation.
        Added an additional check to make sure that text node is not considered a replaced node.
        Removed helper routine AXAttributedStringAppendReplaced since half of the functions are now taken care by nsStringForReplacedNode.
        The other half is directly used in the doAXAttributedStringForTextMarkerRange method.
        (-[WebCoreAXObject doAXStringForTextMarkerRange:]):
        (-[WebCoreAXObject doAXAttributedStringForTextMarkerRange:]):
        Both string and AttrbributedString methods will now utilize the helper routine nsStringForReplacedNode to return replacement
        characters for range occupied by attachment.
        
2007-04-23  Adele Peterson  <adele@apple.com>

        Reviewed by Oliver.

        Fix for <rdar://problem/4887426> Set a reasonable maximum number of recent searches for search menu

        * html/HTMLInputElement.cpp: (WebCore::HTMLInputElement::parseMappedAttribute):
        Enforce a maximum of 256 saved results for the search field.

2007-04-23  Adele Peterson  <adele@apple.com>

        Reviewed by Hyatt & Adam.

        Fix for <rdar://problem/4807799> REGRESSION: calling select() in onSearch handler doesn't work if you hit enter to trigger the event
        Fix for <rdar://problem/5153970> onChange doesn't fire when focusing a popup, using type-ahead to select, and leaving

        This previous behavior to blur controls when hitting enter was added to achieve the result of firing the change event.  Firefox does not
        fire blur- just the change event, so this fix will match Firefox behavior.

        This also fixes a bug where we didn't fire the change event when using type-ahead selection with the popup menu.

        * html/HTMLInputElement.cpp: (WebCore::HTMLInputElement::defaultEventHandler): Fire change event instead of blur event when hitting enter.

        * html/HTMLSelectElement.cpp:
        (WebCore::HTMLSelectElement::dispatchFocusEvent): Now that we have type-ahead selection for popups that can be opened with the arrow keys,
         we should always save the last selection when a popup gets focus, so it can be compared to the current selection when it loses focus.
        (WebCore::HTMLSelectElement::dispatchBlurEvent): For the same reasons as above, we should fire onChange for all popups on blur.

        (WebCore::HTMLSelectElement::menuListDefaultEventHandler): Fire change event instead of blur event when hitting enter.  Removed an unnecessary
         check for form() before calling menuListOnChange().  Removed an unnecessary check for renderer() and usesMenuList().
        (WebCore::HTMLSelectElement::listBoxDefaultEventHandler): Remove call to blur.  Since list boxes fire the change event immediately after an
         action is taken, we don't need to fire anything after hitting enter.
        (WebCore::HTMLSelectElement::menuListOnChange): Reset m_lastOnChangeIndex after firing the change event.

2007-04-23  Anders Carlsson  <andersca@apple.com>

        Reviewed by Ada.

        <rdar://problem/5061022>
        REGRESSION: Acrobat 8 plug-in fails to scroll with trackpad two-finger scroll or mouse wheel (12995)
        
        Pass wheel events to all widgets.
        
        * page/EventHandler.cpp:
        (WebCore::EventHandler::handleWheelEvent):
        * page/EventHandler.h:
        * page/mac/EventHandlerMac.mm:
        (WebCore::EventHandler::passWheelEventToWidget):

2007-04-23  Alp Toker  <alp@atoker.com>

        Reviewed by Mark.

        Save and restore the context state when beginning and ending a transparency layer.

        * platform/graphics/cairo/GraphicsContextCairo.cpp:
        (WebCore::GraphicsContext::beginTransparencyLayer):
        (WebCore::GraphicsContext::endTransparencyLayer):

2007-04-23  Alp Toker  <alp@atoker.com>

        Reviewed by Mark.

        Further implementation and checks. The opacity layer code is not so beautiful
        but gets the job done with fewer complications than maintaining our own stack.

        * platform/graphics/cairo/GraphicsContextCairo.cpp:
        (WebCore::GraphicsContext::translate):
        (WebCore::GraphicsContext::setPlatformStrokeThickness):
        (WebCore::GraphicsContext::beginTransparencyLayer):
        (WebCore::GraphicsContext::endTransparencyLayer):
        (WebCore::GraphicsContext::setCompositeOperation):
        (WebCore::GraphicsContext::rotate):
        (WebCore::GraphicsContext::scale):

2007-04-23  Darin Adler  <darin@apple.com>

        Reviewed by Hyatt.

        - rename box-sizing to -webkit-box-sizing
          because of <rdar://problem/4667227> REGRESSION: Shifted table on page at
          https://us.etrade.com/e/t/home (due to box-sizing)

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::CSSComputedStyleDeclaration::getPropertyCSSValue): Rename.
        * css/CSSPropertyNames.in: Ditto.
        * css/cssparser.cpp: (WebCore::CSSParser::parseValue): Rename and take out comment
        explaining why we aren't prefacing with -webkit.
        * css/cssstyleselector.cpp:
        (WebCore::CSSStyleSelector::applyProperty): Rename.
        * css/html4.css: Rename.
        * css/quirks.css: Rename.

2007-04-23  Alp Toker  <alp@atoker.com>

        Reviewed by Hyatt.

        * platform/graphics/cairo/GraphicsContextCairo.cpp:
        (WebCore::GraphicsContext::drawEllipse):
        (WebCore::GraphicsContext::drawConvexPolygon):
        Fix stroking and filling of ellipses and polygons.
        * platform/graphics/cairo/ImageCairo.cpp:
        (WebCore::BitmapImage::draw): Make use of a new GraphicsContext
        function to simplify the code.
        (WebCore::Image::drawPattern): Now implemented. This makes content
        with tiled patterns (eg. CSS repeat) render correctly.
        * platform/graphics/gdk/ImageGdk.cpp:
        (WebCore::Image::drawPattern): Remove old stub.

2007-04-22  Lars Naesbye Christensen  <lars@naesbye.dk>

        Reviewed by Tim Hatcher.

        Prettier, more modern 'cell' cursor
        http://bugs.webkit.org/show_bug.cgi?id=13441
        Also updates past ChangeLog entries to new email address

        * ChangeLog:
        * ChangeLog-2006-12-31:
        * Resources/cellCursor.png:

2007-04-23  Mark Rowe  <mrowe@apple.com>

        Rubber-stamped by Hyatt.

        Rename cMaxPenderingSourceLengthInLowBandwidthDisplay to cMaxPendingSourceLengthInLowBandwidthDisplay.

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

2007-04-22  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Darin and Geoff.

        - move most of Window's data members into a separate private object, to avoid needing
        to use the oversize allocator for it
        http://bugs.webkit.org/show_bug.cgi?id=13381
        
        It was the only remaining JSObject subclass to use the oversize
        allocator on 32-bit platforms, and having oversize objects around
        makes garbage collection slower so this would hurt performance
        with many tabs/windows open.
        
        No significant effect on JS iBench.

        * bindings/js/kjs_events.cpp:
        (KJS::JSUnprotectedEventListener::JSUnprotectedEventListener):
        (KJS::JSUnprotectedEventListener::~JSUnprotectedEventListener):
        (KJS::JSEventListener::JSEventListener):
        (KJS::JSEventListener::~JSEventListener):
        (KJS::JSLazyEventListener::parseCode):
        * bindings/js/kjs_window.cpp:
        (KJS::WindowPrivate::WindowPrivate):
        (KJS::Window::Window):
        (KJS::Window::~Window):
        (KJS::Window::location):
        (KJS::Window::selection):
        (KJS::Window::locationbar):
        (KJS::Window::menubar):
        (KJS::Window::personalbar):
        (KJS::Window::statusbar):
        (KJS::Window::toolbar):
        (KJS::Window::scrollbars):
        (KJS::Window::mark):
        (KJS::Window::getValueProperty):
        (KJS::Window::findJSEventListener):
        (KJS::Window::findJSUnprotectedEventListener):
        (KJS::Window::clearHelperObjectProperties):
        (KJS::Window::clear):
        (KJS::Window::setCurrentEvent):
        (KJS::Window::setReturnValueSlot):
        (KJS::Window::clearAllTimeouts):
        (KJS::Window::installTimeout):
        (KJS::Window::pauseTimeouts):
        (KJS::Window::resumeTimeouts):
        (KJS::Window::clearTimeout):
        (KJS::Window::timerFired):
        (KJS::Window::disconnectFrame):
        (KJS::Window::jsEventListeners):
        (KJS::Window::jsHTMLEventListeners):
        (KJS::Window::jsUnprotectedEventListeners):
        (KJS::Window::jsUnprotectedHTMLEventListeners):
        * bindings/js/kjs_window.h:

2007-04-22  David Hyatt  <hyatt@apple.com>

        Fix 1% regression on the PLT.  Make sure roundToDevicePixels does no
        work when no scale is in effect.

        Reviewed by mjs

2007-04-22  Darin Adler  <darin@apple.com>

        Reviewed by Oliver.

        - fix small things noticed while looking into a font subsitution bug

        * platform/Font.h: (WebCore::Font::operator==): Corrected a misleading comment.

        * platform/Font.cpp:
        (WebCore::Font::Font): Initialize m_pageZero to 0 in the empty constructor instead
        of leaving it uninitialized. Initialize m_fontList for tighter code. Remove unneeded
        initialization of RefPtr members to 0. Changed the copy constructor to use initialization
        for tighter code.
        (WebCore::Font::operator=): Sorted to match the order from the header and the copy
        constructor, and removed the uneeded self-assignment check.

2007-04-22  Darin Adler  <darin@apple.com>

        Reviewed by Maciej.

        - fix http://bugs.webkit.org/show_bug.cgi?id=5196
          <rdar://problem/4537384> input type=file fields with style=display:none do not post
          their values (5196)

        - fix http://bugs.webkit.org/show_bug.cgi?id=8248
          Can not clear file input field

        * manual-tests/clear-input-file.html: Added.

        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::appendFormData): Remove check that prevents submission of
        form data when there is no renderer or the renderer is invisible. While well-intentioned,
        the rule does not match the behavior of other web browsers.
        (WebCore::HTMLInputElement::setValue): Instead of disallowing all value changes for file
        type, allow changes to the empty string.
        (WebCore::HTMLInputElement::storesValueSeparateFromAttribute): Made file type return true
        for this. 1) The file type does store its value separate from the value attribute.
        2) The code in setInputType() should do the right thing given this new value, according to
        my inspection of the code. 3) The code in both reset() and setValue() will work properly
        if this is true, which was the motivation for changing it.

        * platform/FileChooser.h: Added a clear function.
        * platform/FileChooser.cpp: (WebCore::FileChooser::clear): Clear the filename and the icon.

        * rendering/RenderFileUploadControl.cpp:
        (WebCore::RenderFileUploadControl::valueChanged): Used a local variable to make the code
        a little bit more readable (and match the change below).
        (WebCore::RenderFileUploadControl::updateFromElement): Used local variables a bit more in
        the old code. Added code that will call clear on the FileChooser and repaint if the DOM
        element has an empty value and the FileChooser does not.

2007-04-22  Grace Kloba  <klobag@gmail.com>

        Reviewed by Hyatt.

        Fixes: http://bugs.webkit.org/show_bug.cgi?id=12279
        Implemented two pass loading. Enabled by WTF_USE_LOW_BANDWIDTH_DISPLAY flag.

        * dom/Document.cpp:
        (WebCore::Document::Document): initialize member variable m_inLowBandwidthDisplay

        * dom/Document.h:
        (WebCore::Document::haveStylesheetsLoaded): while in low bandwidth display mode, ignore pending style sheets
        (WebCore::Document::setDocLoader):
        (WebCore::Document::inLowBandwidthDisplay):
        (WebCore::Document::setLowBandwidthDisplay):
        * html/HTMLTokenizer.cpp:
        (WebCore::HTMLTokenizer::scriptHandler): while in low bandwidth display mode, don't execute JavaScript

        * loader/Cache.cpp:
        (WebCore::Cache::requestResource): while in low bandwidth display mode, don't let style sheet and JavaScript block

        * loader/CachedCSSStyleSheet.cpp:
        (WebCore::CachedCSSStyleSheet::checkNotify): add notifyFinished() as client may need "this" pointer

        * loader/DocLoader.h:
        (WebCore::DocLoader::replaceDocument):
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::FrameLoader):
        (WebCore::FrameLoader::requestFrame): while in low bandwidth display mode, don't load sub-frame
        (WebCore::FrameLoader::stopLoading):
        (WebCore::FrameLoader::begin): set to low bandwidth display mode if the top frame is HTML document
        (WebCore::FrameLoader::write):
        (WebCore::FrameLoader::endIfNotLoading):
        (WebCore::FrameLoader::checkCompleted): while in low bandwidth display mode, don't set complete
        (WebCore::FrameLoader::requestObject): while in low bandwidth display mode, don't care Object
        (WebCore::FrameLoader::addLowBandwidthDisplayRequest):
        (WebCore::FrameLoader::removeAllLowbandwidthDisplayRequests):
        (WebCore::FrameLoader::notifyFinished):
        (WebCore::FrameLoader::switchOutLowBandwidthDisplayIfReady):
        * loader/FrameLoader.h:
        (WebCore::FrameLoader::FrameLoader::needToSwitchOutLowBandwidthDisplay):
        (WebCore::FrameLoader::FrameLoader::setUseLowBandwidthDisplay):
        (WebCore::FrameLoader::FrameLoader::useLowBandwidthDisplay):

2007-04-22  Darin Adler  <darin@apple.com>

        Reviewed by Tim Hatcher.

        - fix http://bugs.webkit.org/show_bug.cgi?id=13439
          4 problems found in dashboard-region parser and serializer

        Test: fast/css/dashboard-region-parser.html

        * css/CSSPrimitiveValue.cpp: (WebCore::CSSPrimitiveValue::cssText):
        Fix code that overwrote each additional region with the previous one to
        instead build a space-separated list. Check for the case of an identifier
        that's invalid, since that's (accidentally) how we represent a region
        value that doesn't have explicit top/right/bottom/left values. The old code
        would end up writing out four spaces after the region type.

        * css/cssparser.cpp: (WebCore::CSSParser::parseDashboardRegions):
        Fail to parse if there is something after the "none" identifier or after
        the arguments inside the dashboard-region "function". Also replaced code
        that produced a identifier with CSS_VAL_INVALID in a roundabout way with
        code that does it explicitly.

2007-04-22  Darin Adler  <darin@apple.com>

        Reviewed by Adele.

        - support for fix for <rdar://problem/5100240> REGRESSION: Control-O broken

        * dom/KeyboardEvent.h: Include a vector of command names in the KeypressCommand object
        instead of a single command name.

2007-04-22  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Darin.

        http://bugs.webkit.org/show_bug.cgi?id=13115
        REGRESSION: 1000% performance regression in DOM access by index, which was already slow

        * dom/NodeList.h: Move cached data into a separate class, so it can be shared.

        * dom/Node.h: Replace the set of registered NodeLists with a struct that also
        contains a shared NodeList::Caches (so the size of Node doesn't change).

        * dom/NodeList.cpp:
        (WebCore::NodeList::NodeList):
        (WebCore::NodeList::~NodeList):
        (WebCore::NodeList::recursiveLength):
        (WebCore::NodeList::itemForwardsFromCurrent):
        (WebCore::NodeList::itemBackwardsFromCurrent):
        (WebCore::NodeList::recursiveItem):
        (WebCore::NodeList::itemWithName):
        (WebCore::NodeList::rootNodeChildrenChanged):
        (WebCore::NodeList::NodeListInfo::NodeListInfo):
        (WebCore::NodeList::NodeListInfo::reset):
        * dom/ChildNodeList.cpp:
        (WebCore::ChildNodeList::ChildNodeList):
        (WebCore::ChildNodeList::length):
        (WebCore::ChildNodeList::item):
        (WebCore::ChildNodeList::nodeMatches):
        * dom/ChildNodeList.h:
        * dom/Node.cpp:
        (WebCore::Node::childNodes):
        (WebCore::Node::registerNodeList):
        (WebCore::Node::unregisterNodeList):
        (WebCore::Node::notifyLocalNodeListsAttributeChanged):
        (WebCore::Node::notifyLocalNodeListsChildrenChanged):
        Adjust for the above changes.

2007-04-21  Mitz Pettel  <mitz@webkit.org>

        Reviewed by Darin.

        - fix http://bugs.webkit.org/show_bug.cgi?id=13391
          REGRESSION (r18819): Incomplete repaint of button text

        Test: fast/repaint/control-clip.html

        Ignore controls' lightweight clip in repaint rect computation for now.

        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::computeAbsoluteRepaintRect):

2007-04-21  Darin Adler  <darin@apple.com>

        Reviewed by Adam.

        - fix <rdar://problem/4816343> :-khtml-drag CSS pseudo-class changed to :-webkit-drag, need alias

        * css/CSSSelector.cpp: (WebCore::CSSSelector::extractPseudoType):
        Since Apple documentation claims "-khtml-drag" works, we need to keep it working,
        so add it back as an alias.

2007-04-21  Darin Adler  <darin@apple.com>

        Reviewed by Oliver.

        - fix <rdar://problem/4782422> REGRESSION: -[stringByEvaluatingJavaScriptFromString]
          returns an empty string instead of nil for non-string results

        * page/mac/WebCoreFrameBridge.mm:
        (-[WebCoreFrameBridge stringByEvaluatingJavaScriptFromString:forceUserGesture:]):
        Added a call to nsStringNilIfEmpty to restore the old behavior. It might be nice to
        distinguish the empty string from a non-string result, but there's no obvious way
        to do that, and for compatibility it's probably best to just restore the old
        behavior instead.

2007-04-21  David Hyatt  <hyatt@apple.com>

        Fix for bug 13432, determineFlowSpacing is O(n^2).

        Reviewed by aroben

        * rendering/InlineBox.cpp:
        (WebCore::InlineBox::nextOnLineExists):
        (WebCore::InlineBox::prevOnLineExists):
        * rendering/InlineBox.h:
        (WebCore::InlineBox::InlineBox):

2007-04-21  Lamar Goddard <lamargoddard@gmail.com>

        Reviewed by Darin.

        Fix for http://bugs.webkit.org/show_bug.cgi?id=5262
        <rdar://problem/5018778>
        XMLSerializer drops Namespace information

        Updated WebCore::markup to output namespace information for elements/attributes whose namespace information
        doesn't appear in its scope in the output.

        Added test case: fast/dom/serialize-nodes.xhtml

        * WebCore/editing/markup.cpp:
        (WebCore::createMarkup(const Node*, ...)): Changed call to WebCore::markup to match parameters
        (WebCore::markup): Changed recursive call to match tree structure, removed ASSERT and no longer needed includeSiblings parameter.
        (WebCore::startMarkup): Added optional parameter to track namespaces in the current scope.
        (WebCore::addNamespace): Function to add namespace information to markup.
        (WebCore::shouldAddNamespaceAttr):
        (WebCore::shouldAddNamespaceElem): Functions that test whether namespace information should be added for a given node.
        * WebCore/dom/Document.idl:
        (createElementNS):
        (createAttributeNS):
        (getElementsByTagNameNS): Added [ConvertNullToNullString] to namespaceURI parameter.
        * WebCore/dom/Node.cpp:
        (Node::getElementsByTagNameNS): removed test for namespaceURI being null as null can be a valid namespace.

2007-04-21  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Darin.

        http://bugs.webkit.org/show_bug.cgi?id=13300
        Reproducible crash opening anekdot.ru

        * html/HTMLParser.cpp:
        (WebCore::HTMLParser::HTMLParser):
        (WebCore::HTMLParser::getNode):
        (WebCore::HTMLParser::handleIsindex):
        * html/HTMLParser.h:
        Made HTMLParser::form a RefPtr, and renamed it to m_currentFormElement.
        Made m_currentMapElement a RefPtr.

2007-04-21  Mitz Pettel  <mitz@webkit.org>

        Reviewed by Darin.

        - fix http://bugs.webkit.org/show_bug.cgi?id=13353
          REGRESSION (r20754-20766): Textarea does not resize when scrollbar is present

        Test: fast/overflow/hit-test-overflow-controls.html

        * page/EventHandler.cpp:
        (WebCore::EventHandler::handleMouseMoveEvent): Avoid activating scrollbars
        during layer resize.
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::isPointInOverflowControl): Renamed isPointInScrollbar
        to this, to reflect that it returns true for points in the resize corner
        as well. Changed it to call the layer to do the actual work.
        (WebCore::RenderBlock::nodeAtPoint): Updated for the above rename.
        * rendering/RenderBlock.h:
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::horizontalScrollbarWidget): Fixed typo in this function's
        name (it was horizontaScrollbarWidget).
        (WebCore::RenderLayer::hitTestOverflowControls): Added. Returns whether the
        hit point is in one of the scrollbars or the resize corner, and updates the
        platform scrollbar in the hit test result if a scrollbar was hit.
        * rendering/RenderLayer.h:
        * rendering/RenderListBox.cpp:
        (WebCore::RenderListBox::isPointInOverflowControl): Rename.
        * rendering/RenderListBox.h:

2007-04-21  Mitz Pettel  <mitz@webkit.org>

        Reviewed by Darin.

        - fix http://bugs.webkit.org/show_bug.cgi?id=13417
          Repro crash when the first argument to getMatchedCSSRules is not an element

        Test: fast/dom/Window/getMatchedCSSRules-null-crash.html

        * css/cssstyleselector.cpp:
        (WebCore::CSSStyleSelector::styleRulesForElement): Added null check.

2007-04-21  Mitz Pettel  <mitz@webkit.org>

        Reviewed by Darin.

        - fix http://bugs.webkit.org/show_bug.cgi?id=13416
          Repro crash after referencing the user stylesheet from JavaScript

        No test included because DumpRenderTree does not support setting the user stylesheet.

        * css/cssstyleselector.cpp:
        (WebCore::CSSStyleSelector::CSSStyleSelector):
        (WebCore::CSSStyleSelector::~CSSStyleSelector):
        * css/cssstyleselector.h: Made m_userSheet a RefPtr.

2007-04-21  MorganL  <morganl.webkit@yahoo.com>

        Reviewed by Adam.

        NPObject should be forward declared using 'struct' instead of 'class'

        * page/Frame.h:

2007-04-21  Alp Toker  <alp@atoker.com>

        Gdk build fix.

        * platform/gdk/FontPlatformDataGdk.cpp:
        (WebCore::FontPlatformData::FontPlatformData): Use the correct casts.

2007-04-20  Brady Eidson  <beidson@apple.com>

        Reviewed by Oliver (Black Sheep)

        <rdar://problem/3559794>
        [WebView setMaintainsBackForwardList:] doesn't actually flush out the current page caches

        * WebCore.exp:
        * history/BackForwardList.cpp:
        (WebCore::BackForwardList::BackForwardList): Set the flag to true by default
        (WebCore::BackForwardList::addItem): Check the flag and bail if its false
        (WebCore::BackForwardList::setCapacity): More correct if it set the m_current to 
          NoCurrentItemIndex if we're setting capacity to 0
        (WebCore::BackForwardList::enabled): 
        (WebCore::BackForwardList::setEnabled): If we're disabling, cycle capacity to 0 and 
          back to flush things out
        * history/BackForwardList.h: Add enabled(), setEnabled(bool), and m_enabled

2007-04-20  David Hyatt  <hyatt@apple.com>

        Bug 13424, firstLineStyle and verticalPositionHint together take
        33% of the time on the new tag nesting PLT.  Don't waste time even
        looking for first-line styles if no stylesheet used them.

        Reviewed by beth

        * css/CSSGrammar.y:
        * dom/Document.cpp:
        (WebCore::Document::Document):
        * dom/Document.h:
        (WebCore::Document::usesFirstLineRules):
        (WebCore::Document::setUsesFirstLineRules):
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::verticalPositionHint):
        (WebCore::RenderObject::firstLineStyle):

2007-04-20  Peter Kasting  <pkasting@google.com>

        Reviewed by Oliver.

        - fix http://bugs.webkit.org/show_bug.cgi?id=13420

        * platform/TextEncodingRegistry.cpp:
        (WebCore::addToTextEncodingNameMap): Change a pointer comparison to a
        strcmp(), since the strings here are not necessarily
        pointer-equivalent.

2007-04-20  Darin Adler  <darin@apple.com>

        Reviewed by Geoff Garen and John Sullivan.

        - fix <rdar://problem/4671964> document property on <iframe> elements causes problems for SAP application

        Test: fast/dom/iframe-document.html

        * bindings/js/kjs_html.h: Removed IFrameDocument.
        * bindings/js/kjs_html.cpp: (KJS::JSHTMLElement::iFrameGetter): Ditto.

2007-04-19  Alp Toker  <alp@atoker.com>

        Reviewed by Mark.

        * platform/gdk/FontGdk.cpp:
        (WebCore::Font::drawGlyphs):
        * platform/gdk/FontPlatformDataGdk.cpp:
        (WebCore::FontPlatformData::FontPlatformData): Fix font support in Gdk port.

2007-04-19  David Hyatt  <hyatt@apple.com>

        Fix for bug 13208, implement word-break.  This patch produces a partial
        implementation of word-break.  word-break: break-all is implemented.  In
        addition, a custom value, word-break: break-word is added that is a hybrid
        of word-wrap: break-word and word-break: break-all (and more useful than
        either).

        Reviewed by beth

        Added fast/text/word-break.html

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::CSSComputedStyleDeclaration::getPropertyCSSValue):
        * css/CSSPropertyNames.in:
        * css/CSSValueKeywords.in:
        * css/cssparser.cpp:
        (WebCore::CSSParser::parseValue):
        * css/cssstyleselector.cpp:
        (WebCore::CSSStyleSelector::applyProperty):
        * rendering/RenderStyle.cpp:
        (WebCore::StyleRareInheritedData::StyleRareInheritedData):
        (WebCore::StyleRareInheritedData::operator==):
        (WebCore::RenderStyle::diff):
        * rendering/RenderStyle.h:
        (WebCore::):
        (WebCore::RenderStyle::breakWords):
        (WebCore::RenderStyle::wordBreak):
        (WebCore::RenderStyle::setWordBreak):
        (WebCore::RenderStyle::initialWordBreak):
        (WebCore::RenderStyle::initialWordWrap):
        * rendering/RenderText.cpp:
        (WebCore::RenderText::calcMinMaxWidthInternal):
        * rendering/RenderTextControl.cpp:
        (WebCore::RenderTextControl::createInnerTextStyle):
        (WebCore::RenderTextControl::calcHeight):
        * rendering/bidi.cpp:
        (WebCore::RenderBlock::findNextLineBreak):

2007-04-20  Mark Rowe  <mrowe@apple.com>

        Qt build fix for FreeBSD.

        * WebCore.pro: FreeBSD needs HAVE_PTHREAD_NP_H defined.

2007-04-19  Mitz Pettel  <mitz@webkit.org>

        Reviewed by Darin.

        - fix http://bugs.webkit.org/show_bug.cgi?id=13403
          REGRESSION (r18875-r18899): Can no longer type into search form field after searching and then clicking "back"

        The problem was that the page was loaded from the page cache with a subtree
        marked for layout and the layout timer stopped (having been stopped when the
        page entered the page cache). FrameView::needsLayout() was returning false
        which prevented the pending layout from completing.

        * page/FrameView.cpp:
        (WebCore::FrameView::clear): Removed the call to stop the layout timer, since
        reset() does that already.
        (WebCore::FrameView::needsLayout): Changed to return true if there's a subtree
        pending relayout.

2007-04-19  Justin Garcia  <justin.garcia@apple.com>

        Reviewed by harrison
        
        <rdar://problem/5144139> 
        On delete, <BR> inserted into non-editable ToDo <TABLE> element
        
        The fact that the br was being inserted at a bad position 
        (a non-editable position and one inside a table instead of 
        before it) was fixed in the previous checkin. This change 
        stops us from inserting a br at all, to fix the bug.
        
        After a delete, we need a placeholder if the selection
        started at the start of a paragraph and ended at the end 
        of a paragraph. But not if it starts just before a table 
        and ends inside that table.  We need placeholders to hold 
        open emptied out table cells, but that is handled separately.
        
        Also, moved lineBreakExistsAtPosition to htmlediting.cpp 
        so that it can be used in more places.

        * editing/CompositeEditCommand.cpp:
        (WebCore::CompositeEditCommand::removePlaceholderAt):
        (WebCore::CompositeEditCommand::moveParagraphs):
        * editing/DeleteSelectionCommand.cpp:
        (WebCore::DeleteSelectionCommand::doApply):
        * editing/InsertLineBreakCommand.cpp:
        * editing/InsertParagraphSeparatorCommand.cpp:
        (WebCore::InsertParagraphSeparatorCommand::doApply):
        * editing/htmlediting.cpp:
        (WebCore::lineBreakExistsAtPosition):
        * editing/htmlediting.h:

2007-04-19  Justin Garcia  <justin.garcia@apple.com>

        Reviewed by harrison
        
        Fixes some issues found while investigating:
        <rdar://problem/5144139> On delete, <BR> inserted into non-editable ToDo <TABLE> element
        
        Move the code to handle inserting content before/after
        tables for [table, 0/max] to insertNodeAt, so that
        all insertions get it, not just some.
        Changed insertNodeAt to take in a position instead of a
        node and an offset.

        * editing/CompositeEditCommand.cpp:
        (WebCore::CompositeEditCommand::insertNodeAt):
        (WebCore::CompositeEditCommand::insertNodeAtTabSpanPosition):
        (WebCore::CompositeEditCommand::insertBlockPlaceholder):
        (WebCore::CompositeEditCommand::moveParagraphContentsToNewBlockIfNecessary):
        If paragrahStart.node() is an atomic node, insertNodeAt can handle
        insertion, we don't need to special case it.
        (WebCore::CompositeEditCommand::moveParagraphs):
        (WebCore::CompositeEditCommand::positionAvoidingSpecialElementBoundary):
        * editing/CompositeEditCommand.h:
        * editing/DeleteSelectionCommand.cpp:
        (WebCore::DeleteSelectionCommand::mergeParagraphs):
        (WebCore::DeleteSelectionCommand::doApply):
        * editing/FormatBlockCommand.cpp:
        (WebCore::FormatBlockCommand::doApply):
        * editing/IndentOutdentCommand.cpp:
        (WebCore::IndentOutdentCommand::indentRegion):
        (WebCore::IndentOutdentCommand::outdentParagraph):
        * editing/InsertLineBreakCommand.cpp:
        (WebCore::InsertLineBreakCommand::doApply):
        * editing/InsertListCommand.cpp:
        (WebCore::InsertListCommand::doApply):
        * editing/InsertParagraphSeparatorCommand.cpp:
        (WebCore::InsertParagraphSeparatorCommand::doApply):
        * editing/InsertTextCommand.cpp:
        (WebCore::InsertTextCommand::prepareForTextInsertion): Removed some
        dead code that handled insertion at non-editable positions.
        (WebCore::InsertTextCommand::insertTab):
        * editing/ReplaceSelectionCommand.cpp:
        (WebCore::ReplaceSelectionCommand::doApply):
        (WebCore::ReplaceSelectionCommand::insertNodeAtAndUpdateNodesInserted):
        * editing/ReplaceSelectionCommand.h:

2007-04-19  Mitz Pettel  <mitz@webkit.org>

        Reviewed by Darin.

        - fix http://bugs.webkit.org/show_bug.cgi?id=13336
          REGRESSION (r20646): editing/execCommand/hilitecolor.html crashes under guardMalloc

        Avoid calling selectionRect() and selectionGapRects() on a renderer that needs
        layout.

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::selectionGapRects):
        * rendering/RenderBlock.h:
        (WebCore::RenderBlock::BlockSelectionInfo::BlockSelectionInfo):
        * rendering/RenderListMarker.cpp:
        (WebCore::RenderListMarker::selectionRect):
        * rendering/RenderObject.h:
        (WebCore::RenderObject::SelectionInfo::SelectionInfo):
        * rendering/RenderReplaced.cpp:
        (WebCore::RenderReplaced::selectionRect):
        * rendering/RenderText.cpp:
        (WebCore::RenderText::selectionRect):

2007-04-19  Justin Garcia  <justin.garcia@apple.com>

        Reviewed by darin

        <rdar://problem/5142012> 
        GoogleDocs: Crash at WebCore::Range::startPosition() when creating a list from a link
        
        List creation uses moveParagraphs to push content into list items.
        Its fragment creation (using createMarkup) incorrectly uses regular
        spaces instead of nbsps for spaces that were rendered (11475), which 
        causes spaces to be collapsed during the move operation.  This results 
        in a call to rangeFromLocationAndLength with a location past the end
        of the document.  We use the result from rangeFromLocationAndLength
        (null) and crash.
        
        Also when moveParagraphs tries to push content into a list item surrounded
        by an anchor, it fails because positionAvoidingSpecialElementBoundary avoids 
        the anchor, which also avoids the list item.  This was fixed by pushing
        down anchors before avoiding them.
        
        * editing/CompositeEditCommand.cpp:
        (WebCore::CompositeEditCommand::pushAnchorElementDown): Remove the
        old anchor after we push down clones of it, this is what callers
        expect.
        (WebCore::CompositeEditCommand::pushPartiallySelectedAnchorElementsDown):
        Call the new enclosingAnchorElement, that takes in a position instead
        of a node.
        (WebCore::CompositeEditCommand::moveParagraphs): If spaces collapsed
        as a result of the move, rangeFromLocationAndLength can return null,
        bail and don't try to preserve the selection in that case.
        (WebCore::CompositeEditCommand::positionAvoidingSpecialElementBoundary):
        Moved from htmlediting.cpp.
        Make sure anchors are pushed down before avoiding them so that we don't
        also avoid structural elements like lists and blocks.
        * editing/CompositeEditCommand.h:
        * editing/TypingCommand.cpp: Moved isFirst/LastPositionBefore/AfterTable
        to htmlediting.cpp.
        * editing/htmlediting.cpp:
        Moved positionAvoidingSpecialElementBoundary so that it could call
        pushAnchorElementDown.
        (WebCore::isFirstPositionAfterTable): Moved here.
        (WebCore::isLastPositionBeforeTable): Moved here.
        (WebCore::enclosingAnchorElement): Moved here.
        (WebCore::enclosingListChild): Removed an extraneous space.
        * editing/htmlediting.h:

2007-04-19  Beth Dakin  <bdakin@apple.com>

        Reviewed by Hyatt.

        Fix for <rdar://problem/5120889> Sized table cells w/borders not 
        drawn to correct size

        When table cells have children with %-height, the cells were 
        incorrectly shrinking down to be the size of the child. This 
        exposed another problem with replaced children and sizing.

        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::calcReplacedHeightUsing): The exposed problem. 
        Subtract our borders and padding in the auto or percent table cell 
        containing block case.
        * rendering/RenderTableSection.cpp:
        (WebCore::RenderTableSection::layoutRows): When our children can 
        flex, do not always set the cellTopExtra and cellBottomExtra to 0! 
        That is bad! We should do the same as the non-flex case.

2007-04-19  Anders Carlsson  <andersca@apple.com>

        Reviewed by Geoff.

        http://bugs.webkit.org/show_bug.cgi?id=13333
        Support naturalWidth/naturalHeight on image elements

        * html/HTMLImageElement.cpp:
        (WebCore::HTMLImageElement::naturalWidth):
        (WebCore::HTMLImageElement::naturalHeight):
        * html/HTMLImageElement.h:
        * html/HTMLImageElement.idl:

2007-04-19  Patti Hoa  <patti@apple.com>

        Reviewed by Darin.
        - review suggestion for rdar://5145011 code change
        
        * bridge/mac/WebCoreAXObject.mm:
        (-[WebCoreAXObject value]):
        return early if value attribute is not supported by the attachment view.

2007-04-19  Patti Hoa  <patti@apple.com>

        Reviewed by Darin.

        <rdar://problem/5145011> Allow attachment view of web object to handle accessibility actions
        
        * bridge/mac/WebCoreAXObject.mm:
        (-[WebCoreAXObject value]):
        Only allow asking the attachmentView for value if attachmentView supports this value attribute 
        (-[WebCoreAXObject title]):
        (-[WebCoreAXObject accessibilityAttributeNames]):
        Should not return that long list of unrelated attributes for attachmentView.
        (-[WebCoreAXObject accessibilityActionNames]):
        (-[WebCoreAXObject accessibilityPerformAction:]):
        Allow attachmentView a chance to handle actions.
        (-[WebCoreAXObject accessibilityParameterizedAttributeNames]):
        Should not return that long list of unrelated attributes for attachmentView.
        
2007-04-19  Mitz Pettel  <mitz@webkit.org>

        Reviewed by Hyatt.

        - fix http://bugs.webkit.org/show_bug.cgi?id=13291
          REGRESSION (r19595): WebViewDidBeginEditingNotification not posted when focusing with the mouse

        Covered by editing tests.

        * dom/Document.cpp:
        (WebCore::Document::setFocusedNode): Moved the call to Editor::didBeginEditing()
        back into here.
        * dom/Element.cpp:
        (WebCore::Element::updateFocusAppearance): Removed the call to didBeginEditing().
        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::updateFocusAppearance): Ditto.

2007-04-19  Sam Weinig  <sam@webkit.org>

        Reviewed by Darin.

        - Patch for http://bugs.webkit.org/show_bug.cgi?id=12249
          FCKeditor: <hr>, <ul> and <ol> have id="undefined"

        Convert undefined and null to a null string for third argument of
        execCommand(); 

        Test: editing/execCommand/arguments-combinations.html

        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/kjs_binding.cpp:
        (KJS::valueToStringWithUndefinedOrNullCheck):
        * bindings/js/kjs_binding.h:
        * bindings/scripts/CodeGeneratorJS.pm:
        * dom/Document.idl:

2007-04-19  Alp Toker  <alp@atoker.com>

        Reviewed by hyatt.

        * WebCoreSources.bkl: Remove obsolete source file from build.

2007-04-18  Alp Toker  <alp@atoker.com>

        Gdk build fix.  Reviewed by Sam Weinig.

        Track changes to make GdkLauncher work again.

        * WebCoreSources.bkl:
        * platform/gdk/ChromeClientGdk.h:
        * platform/gdk/TemporaryLinkStubs.cpp:
        (ChromeClientGdk::createWindow):
        (ChromeClientGdk::createModalDialog):
        (Editor::markBadGrammar):

2007-04-17  Brady Eidson  <beidson@apple.com>

        Reviewed by Tim

        <rdar://problem/5008925>
        Expose the NSURLConnection delegate willCacheResponse API to WebResourceLoadDelegate

        * WebCore.xcodeproj/project.pbxproj: Added ResourceLoaderMac.mm

        * loader/FrameLoaderClient.h: Add the willCacheResponse SPI for WebKit to implement

        * loader/ResourceLoader.h:
        * loader/mac/ResourceLoaderMac.mm: Added.
        (WebCore::ResourceLoader::willCacheResponse): Return the new cachedResponse from the client

        * platform/graphics/svg/SVGImageEmptyClients.h:
        (WebCore::SVGEmptyFrameLoaderClient::willCacheResponse): Stub

        * platform/network/ResourceHandleClient.h:
        (WebCore::ResourceHandleClient::willCacheResponse):  Return the new cachedResponse from the client

        * platform/network/mac/ResourceHandleMac.mm:
        (-[WebCoreResourceHandleAsDelegate connection:willCacheResponse:]): Call to get the new 
          cachedURLResponse before calling for the cache policy

2007-04-18  Darin Adler  <darin@apple.com>

        Reviewed by Hyatt.

        - fix http://bugs.webkit.org/show_bug.cgi?id=13375
          REGRESSION (r20901): failing fast/overflow/scrollRevealButton.html

        * dom/Document.cpp: (WebCore::Document::updateLayout):
        If we have a parent frame, update its layout too.

2007-04-18  Alp Toker  <alp@atoker.com>

        Gdk build fix.  Reviewed by Mark.

        * loader/gdk/FrameLoaderClientGdk.cpp:
        (WebCore::FrameLoaderClientGdk::loadedFromCachedPage):
        (WebCore::FrameLoaderClientGdk::setDocumentViewFromCachedPage):
        (WebCore::FrameLoaderClientGdk::saveDocumentViewToCachedPage):
        * loader/gdk/FrameLoaderClientGdk.h:
        * platform/gdk/TemporaryLinkStubs.cpp:
        (CachedPage::close): Track PageCache to CachedPage refactoring.

2007-04-17  Mitz Pettel  <mitz@webkit.org>

        Reviewed by Darin.

        - fix http://bugs.webkit.org/show_bug.cgi?id=13369
          REGRESSION (r13366): Invisible table cell background is painted

        Test: fast/table/invisible-cell-background.html

        * rendering/RenderTableCell.cpp:
        (WebCore::RenderTableCell::paintBackgroundsBehindCell): Don't paint any
        background if the cell is not visible. This behavior matches WinIE and Opera.

2007-04-17  Justin Garcia  <justin.garcia@apple.com>

        Reviewed by harrison

        <rdar://problem/5119244> 
        Crash when indenting a selected ToDo
        
        indentRegion() was using the old (incorrect) editable root 
        getter, which returned null for a valid, editable position, 
        causing the crash.

        * editing/IndentOutdentCommand.cpp:
        (WebCore::IndentOutdentCommand::indentRegion):
        The editable root for a position is editableRootForPosition(p),
        not p.node()->rootEditableElement(), because of VisiblePositions 
        before/after tables, replaced elements and others.

2007-04-17  Justin Garcia  <justin.garcia@apple.com>

        Reviewed by hyatt

        <rdar://problem/5138441> 
        GoogleDocs: Indented text looks like text that's been Quoted
        
        GoogleDocs uses FormatBlock, blockquotes and a style rule
        for blockquotes to implement a "Quote Text" feature.  Styles
        intended only for those blockquotes were added to the 
        blockquotes that we use for indenting.

        * css/html4.css: Removed the webkit-indent-blockquote class rule.
        * editing/IndentOutdentCommand.cpp:
        (WebCore::createIndentBlockquoteElement): Use custom margins
        and turn off border and padding to override author rules for
        blockquotes.

2007-04-17  Justin Garcia  <justin.garcia@apple.com>

        Reviewed by darin

        <rdar://problem/5136770> 
        Gmail Editor: Hang when turning a particular multi-line selection into a list
        
        When InsertListCommand pushes content into list items, 
        it creates an empty list item and then calls moveParagraphs.  
        But moveParagraphs' selection preservation code fails when 
        it encounters empty list items (list items w/o placeholders).
        This causes InsertListCommand to lose track of where it has 
        already been performed, which causes the hang.

        * editing/InsertListCommand.cpp:
        (WebCore::InsertListCommand::doApply): Use brs to hold open 
        empty list items.

2007-04-17  Darin Adler  <darin@apple.com>

        Oops, rolled that last change out. I'll redo it again later after making
        som additional refinments.

2007-04-17  Darin Adler  <darin@apple.com>

        Reviewed by Brady.

        - a few baby steps to try to make lockHistory and userGesture less confusing

        * page/FrameLoadRequest.h:
        (WebCore::FrameLoadRequest::FrameLoadRequest): Add initialization of m_isUserGesture
        to true.
        (WebCore::FrameLoadRequest::shouldLockHistory): Renamed from lockHistory to avoid having
        a getter that sounds like a verb phrase.
        (WebCore::FrameLoadRequest::setShouldLockHistory): Ditto.
        (WebCore::FrameLoadRequest::isUserGesture): Added.
        (WebCore::FrameLoadRequest::setIsUserGesture): Ditto.

        * loader/FrameLoader.h: Remove userGesture parameter from load that takes
        FrameLoadRequest. Remove default values for lockHistory and userGesture parameters,
        since that just makes it more likely we'll forget to pass them in. Remove one of
        the overloads of urlSelected, since it's only called one place.

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::createWindow): Remove userGesture parameter, relying on
        the true default in FrameLoadRequest.
        (WebCore::FrameLoader::urlSelected): Call setShouldLockHistory and setIsUserGesture
        on the FrameLoadRequest, and call load directly; also eliminate the other urlSelected
        overload since this was the only place it was called.
        (WebCore::FrameLoader::load): Remove userGesture parameter, relying on the true
        default in FrameLoadRequest. In the other overload, clean up logic to eliminate the
        argsReferrer variable and get rid of the userGesture parameter, using the value from
        FrameLoadRequest.
        (WebCore::FrameLoader::submitForm): Remove userGesture parameter, relying on the value
        in the FrameLoadRequest. This actually changes behavior.

        * bindings/js/kjs_html.cpp: (KJS::JSHTMLDocument::putValueProperty): Pass
        false for userGesture explicitly instead of relying on default argument.

        * page/ContextMenuController.cpp: (WebCore::ContextMenuController::contextMenuItemSelected):
        Remove userGesture parameter, relying on the true default in FrameLoadRequest.

2007-04-16  David Kilzer  <ddkilzer@webkit.org>

        Reviewed by NOBODY (fixed misspelling).

        * manual-tests/containing-block-position-chage.html: Removed.
        * manual-tests/containing-block-position-change.html: Added.

2007-04-16  Justin Garcia  <justin.garcia@apple.com>

        Reviewed by darin

        <rdar://problem/5134759> 
        GMail Editor: Hang after pasting underlined text multiple times
        
        The moveParagraphs call that ReplaceSelectionCommand
        performs must receive only inline content from createMarkup, 
        or else it will result in another call to moveParagraphs 
        when it performs the move, resulting in infinite recursion.

        * editing/markup.cpp:
        (WebCore::startMarkup): We were only converting a block to
        an inline if it had an inline style declaration or styles 
        coming from matched rules.  Cleaned up this code a bit by 
        handling an element's style separately from its other 
        attributes.

2007-04-16  Darin Adler  <darin@apple.com>

        - get layout tests going again

        * page/mac/FrameMac.mm: (WebCore::Frame::setUseSecureKeyboardEntry):
        Replace assertion with a runtime check. We can consider changing it back to
        an assertion some day, but it's not important.

2007-04-16  Darin Adler  <darin@apple.com>

        Reviewed by John Sullivan.

        - fix http://bugs.webkit.org/show_bug.cgi?id=13303
          <rdar://problem/5126341> REGRESSION: controls in a background Safari window
          maintain active appearance if the address bar has focus (13303)

        - fix a related problem where elements could look focused in non-active windows

        - simplify secure keyboard entry logic in Frame::setIsActive

        * WebCore.exp: Add two new symbols for use by WebKit.

        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::dispatchFocusEvent): Call setUseSecureKeyboardEntryWhenActive
        rather than calling setSecureKeyboardEntry directly -- does nothing if the frame is not active.
        (WebCore::HTMLInputElement::dispatchBlurEvent): Ditto.

        * page/Frame.cpp:
        (WebCore::Frame::setUseSecureKeyboardEntryWhenActive): Added. Calls
        setUseSecureKeyboardEntry only if the frame is active, but also stores away the state,
        so that the setIsActive function doesn't have to recompute it.
        (WebCore::Frame::setIsActive): Rewrote all the comments in the function. Removed the code
        to manage control tints, which are not based on the whether the frame is active but rather
        on AppKit's concept of whether the window should have "key appearance". Simplified the
        logic about when to call setUseSecureKeyboardEntry by using the value of
        m_useSecureKeyboardEntryWhenActive.
        (WebCore::FramePrivate::FramePrivate): Initialize m_useSecureKeyboardEntryWhenActive.
        * page/Frame.h: Made setSecureKeyboardEntry private and renamed it to
        setUseSecureKeyboardEntry, removed isSecureKeyboardEntry, and
        added a public setUseSecureKeyboardEntryWhenActive.
        * page/FramePrivate.h: Added m_useSecureKeyboardEntryWhenActive.
        * page/mac/FrameMac.mm: (WebCore::Frame::setUseSecureKeyboardEntry): Added an assertion,
        and removed isSecureKeyboardEntry().

        * page/FrameView.h: Added updateControlTints.
        * page/FrameView.cpp: (WebCore::FrameView::updateControlTints): Added. Code was moved
        here from setIsActive for two reasons: (1) it makes more sense in the view class, and
        (2) it needs to be called at the appropriate time for AppKit, not when active changes.

        * rendering/RenderTheme.cpp: (WebCore::RenderTheme::isFocused): Added an isActive
        check here to match the logic in the implementation of the CSS pseudo-state.
        * rendering/RenderThemeMac.mm:
        (WebCore::RenderThemeMac::updateFocusedState): Use the isFocused function instead of
        repeating the logic here. Removed the "need to add a key window test here" comment.
        (WebCore::RenderThemeMac::controlSupportsTints): Added a comment about the NSCell
        SPI that's related to the _windowChangedKeyState method we now use in WebHTMLView.

2007-04-16  Darin Adler  <darin@apple.com>

        Reviewed by John Sullivan.

        - fix http://bugs.webkit.org/show_bug.cgi?id=13227
          StringImpl::isLower incorrectly assumes islower returns 1 (it can return any non-0)

        * platform/StringImpl.cpp:
        (WebCore::StringImpl::isLower): Based on test application results, changed to use &&
        instead of trying to use & to avoid branches. Use U16_NEXT so we can handle characters
        outside the BMP. Improved comments.
        (WebCore::StringImpl::lower): Improved comments.
        (WebCore::equalIgnoringCase): Changed to use && instead of trying to use & to avoid
        branches. Improved comments. Added an assertion about the assumption we're
        making that characters in the char* are all ASCII.

2007-04-13  David Kilzer  <ddkilzer@webkit.org>

        Patch and review by hyatt.  Testing and landing by ddkilzer.

        <rdar://problem/5078866>
        tables don't inherit text-align (in strict mode; they're not supposed to in quirks mode)

        Test: fast/css/table-text-align-quirk.html
              fast/css/table-text-align-strict.html

        Previous commit (r20731) removed the wrong property from WebCore/css/html4.css.  However,
        when the correct property was removed, it caused tables to inherit alignment properties
        from tags like <center> and <div align="center">.  This is fixed in
        WebCore::CSSStyleSelector::adjustRenderStyle() by special-casing tables to reset the
        text-align property.

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::valueForTextAlign): Renamed KHTML_CENTER, KHTML_LEFT and KHTML_RIGHT to
        WEBKIT_CENTER, WEBKIT_LEFT and WEBKIT_RIGHT.
        * css/cssparser.cpp:
        (WebCore::CSSParser::parseValue): Ditto.
        * css/cssstyleselector.cpp:
        (WebCore::CSSStyleSelector::adjustRenderStyle): Tables should not support -webkit-center,
        -webkit-left or -webkit-right values for text-align, so reset them back to auto.
        * css/html4.css: Removed "text-align: -webkit-auto;" property from tables selector.  It
        was previously added to css/quirks.css in r20731.
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::determineHorizontalPosition): Renamed KHTML_* to WEBKIT_*.
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::calcHorizontalMargins): Ditto.
        * rendering/RenderFlow.cpp:
        (WebCore::RenderFlow::caretRect): Ditto.
        * rendering/RenderStyle.h: Ditto.
        (WebCore::):
        * rendering/bidi.cpp:
        (WebCore::RenderBlock::computeHorizontalPositionsForLine): Ditto.

2007-04-12  Brady Eidson  <beidson@apple.com>

        Reviewed by Black Sheep

        <rdar://problem/4664154> and http://bugs.webkit.org/show_bug.cgi?id=3546

        When you click on a link that opens in a new window from within gmail, they first create a new window 
        with an empty URL, then immediately document.write() into the window to schedule a redirect.

        Since the initial page doesn't have a URL associated with it, a history item never gets created.  The 
        reasonable solution?  To actually create the history item after the redirect (in updateHistoryForInternalLoad)

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::addHistoryForCurrentLocation): Updates global and B/F history with a new history item
        (WebCore::FrameLoader::updateHistoryForStandardLoad): Call addHistoryForCurrentLocation
        (WebCore::FrameLoader::updateHistoryForInternalLoad): Call addHistoryForCurrentLocation if there is not already
          a current history item
        * loader/FrameLoader.h:

2007-04-12  Oliver Hunt  <oliver@apple.com>

        Reviewed by Adam.

        This fixes <rdar://problem/5060766> -- Frameset with 
        an empty frame crashes due to null document.  Debug
        builds hit the frame->document() assertion in 
        EventHandler::prepareMouseEvent

        This null check seems necessary now, having run through 
        all the logic on the path to this crash it appears that
        we can't avoid this null check.  

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

2007-04-12  Justin Garcia  <justin.garcia@apple.com>

        Reviewed by darin
        
        <rdar://problem/5131716> 
        Clicking just before a ToDo doesn't put the caret before the ToDo
        
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::positionForCoordinates):
        Consider clicks inside the blocks padding, instead of
        incorrectly sending them to the position before the block.

2007-04-12  John Sullivan  <sullivan@apple.com>

        Reviewed by Anders

        - WebCore part of fix for:
        <rdar://problem/5128697> REGRESSION: At least one PDF context menu item isn't appearing on Leopard

        * platform/ContextMenuItem.h:
        (WebCore::):
        add two PDF-related context menu items to enum to keep it in sync with WebKit

        * platform/ContextMenu.cpp:
        (WebCore::ContextMenu::checkOrEnableIfNeeded):
        add the new context menu items to the do-nothing case of a big switch statement

2007-04-12  Simon Hausmann  <hausmann@kde.org>

        Reviewed by Zack.

        Fixed drawing of justified text in the Qt port.

        * platform/qt/FontQt.cpp:
        (Font::drawGlyphs):

2007-04-11  Oliver Hunt  <oliver@apple.com>

        Reviewed by Maciej.

        Adding RetainPtr to the many global obj-c pointers we use in
        C/C++ methods.  This is necessary to prevent GC from collecting
        globals we want to keep around.

        We use RetainPtr in obj-c++ and c++ files, and CFRetain/Release in pure
        obj-c.

        Also made the Pasteboard::m_pasteboard a RetainPtr although it
        shouldn't be necessary as the only NSPasteboard instances that 
        should ever be inserted are the system clipboard and dragging 
        pasteboard.  Neither of which should ever be collected.

        * page/mac/WebCoreFrameBridge.mm:
        (_getPreSmartSet):
        (_getPostSmartSet):
        * platform/Pasteboard.h:
        * platform/graphics/mac/ColorMac.mm:
        (WebCore::nsColor):
        * platform/graphics/mac/GraphicsContextMac.mm:
        (WebCore::GraphicsContext::drawLineForMisspellingOrBadGrammar):
        * platform/mac/FontDataMac.mm:
        (WebCore::webFallbackFontFamily):
        * platform/mac/PasteboardMac.mm:
        (WebCore::writableTypesForURL):
        (WebCore::writableTypesForImage):
        (WebCore::Pasteboard::clear):
        (WebCore::Pasteboard::writeSelection):
        (WebCore::Pasteboard::writeURL):
        (WebCore::Pasteboard::writeFileWrapperAsRTFDAttachment):
        (WebCore::Pasteboard::writeImage):
        (WebCore::Pasteboard::canSmartReplace):
        (WebCore::Pasteboard::plainText):
        (WebCore::Pasteboard::documentFragment):

2007-04-11  Mitz Pettel  <mitz@webkit.org>

        Reviewed by Dave Hyatt.

        - fix http://bugs.webkit.org/show_bug.cgi?id=11362
          Native popup with size="1" wraps options

        Test: fast/forms/menulist-option-wrap.html

        * css/html4.css: Added white-space declaration for select[size="0"] and
        select[size="1"]. Added border-radius declaration for select.

2007-04-11  MorganL  <morganl.webkit@yahoo.com>

        Reviewed by Maciej.

        Add a Frame pointer to ChromeClient methods:
        http://bugs.webkit.org/show_bug.cgi?id=13127

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::createWindow):
        * page/Chrome.cpp:
        (WebCore::Chrome::createWindow):
        (WebCore::Chrome::createModalDialog):
        * page/Chrome.h:
        * page/ChromeClient.h:
        * page/ContextMenuController.cpp:
        (WebCore::openNewWindow):
        * platform/graphics/svg/SVGImageEmptyClients.h:
        (WebCore::SVGEmptyChromeClient::createWindow):
        (WebCore::SVGEmptyChromeClient::createModalDialog):

2007-04-11  Brady Eidson  <beidson@apple.com>

        Reviewed by Ada

        <rdar://problem/5080987> - Crash in DocumentLoader::frameLoader() const

        This was free nil checking lost during the ObjC -> C++ conversion

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::checkLoadCompleteForThisFrame): Null check the DocumentLoader

2007-04-11  Justin Garcia  <justin.garcia@apple.com>

        Reviewed by harrison

        <rdar://problem/5126166> 
        Deleting selection starting at before ToDo checkbox to end of line, inserts a BR in the subsequent ToDo
        
        If a selection ends in a table cell, we shouldn't perform
        a merge after deleting that selection.  We have code in
        place to prevent those merges, but it failed here.
        
        It fails because the end of the selection was [tableCell, 0],
        (normally not a valid VisiblePosition, but valid here
        because the table cell is empty).  We prevent the merge
        if the node of the position at the end of the selection 
        has an enclosingTableCell.  Even though [tableCell, 0] has 
        an enclosing table cell, the node tableCell doesn't, so 
        the check fails.
        
        Fixed this by changing enclosingTableCell to take in
        a position, instead of a node.  The other enclosing element
        getters should be changed in this way as well.

        * editing/DeleteSelectionCommand.cpp:
        (WebCore::DeleteSelectionCommand::initializePositionData):
        Call the new enclosingTableCell.
        * editing/ReplaceSelectionCommand.cpp:
        (WebCore::ReplaceSelectionCommand::shouldMerge): Ditto.
        * editing/htmlediting.cpp:
        (WebCore::enclosingTableCell): Take in a position instead
        of a node.
        * editing/htmlediting.h:

2007-04-12  Mark Rowe  <mrowe@apple.com>

        Qt build fix.

        * WebCore.pro:
        * editing/qt/EditorQt.cpp:
        (WebCore::Editor::markBadGrammar):
        * history/qt/CachedPageQt.cpp: Added.
        (WebCore::CachedPage::close):
        * history/qt/PageCacheQt.cpp: Removed.

2007-04-11  Brady Eidson  <beidson@apple.com>

        Reviewed by Antti

        <rdar://problem/5125648> and http://bugs.webkit.org/show_bug.cgi?id=13326

        Crash opening a link in a new window from Gmail

        Problem here is that the currentHistoryItem in the new window is null.  This *shouldn't* be the case, 
        and is the cause of a very long standing bug - 
        http://bugs.webkit.org/show_bug.cgi?id=3546 - Can't go back to first page in new window opened from gmail

        For now, adding a null check prevents this crash and restores the original, long standing regression
 
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::updateHistoryForInternalLoad): NULL check

2007-04-11  Adam Roben  <aroben@apple.com>

        Reviewed by Anders.

        Made image document copying more cross-platform.

        All layout tests pass.

        * editing/Editor.cpp:
        (WebCore::imageNodeFromImageDocument): Added.
        (WebCore::Editor::canCopy): Called imageNodeFromImageDocument.
        (WebCore::Editor::copy): Ditto.
        (WebCore::Editor::copyImage): Updated for changes to Pasteboard.
        * platform/Pasteboard.h: Made writeImage more general, which allowed
        getting rid of its second incarnation.
        * platform/gdk/TemporaryLinkStubs.cpp:
        * platform/mac/PasteboardMac.mm:
        (WebCore::Pasteboard::writeImage): Collapsed logic from the two
        writeImage methods into one.
        (Pasteboard::writeImage): Updated for Pasteboard changes.
        * platform/qt/PasteboardQt.cpp:
        (WebCore::Pasteboard::writeImage): Ditto.

2007-04-11  Darin Adler  <darin@apple.com>

        * css/CSSValueKeywords.in: Fix a comment.

2007-04-09  Justin Garcia  <justin.garcia@apple.com>

        Reviewed by harrison
        
        <rdar://problem/4932260> 
        Invalid attributed string for attachment range obtained via AXPreviousWordStartTextMarkerForTextMarker
        
        By default, text iterators don't emit anything for replaced 
        elements.  Boundary finding code works around this but has 
        bugs: replaced elements act as sentence boundaries and the 
        above bug, where previousBoundary moves past the start of a 
        word if there is a replaced element just before it. This 
        patch fixes these issues by treating replaced elements as 
        punctuation for boundary finding.

        * editing/TextIterator.cpp:
        (WebCore::SimplifiedBackwardsTextIterator::SimplifiedBackwardsTextIterator):
        Set m_pastStartNode, the node after (in a reverse pre-order traversal) the 
        last one that should be processed.
        (WebCore::SimplifiedBackwardsTextIterator::advance):
        Stop at m_pastStartNode.
        Iterate over nodes in reverse pre-order (TextIterator traverses in 
        pre-orer). This makes knowing when to emit characters after nodes vs. when
        to emit characters before nodes easier.
        Remove the special case for entering a new block, emitting characters 
        after nodes can now be handled generally, in handleNonTextNode(), because
        of the way we traverse.
        Set m_handledChildren to false every iteration since we now do traverse in 
        reverse pre-order.
        (WebCore::SimplifiedBackwardsTextIterator::handleReplacedElement):
        Emit a comma for replaced elements.  We only use this kind of iterator 
        for finding boundaries, so we can do this unconditionally.
        (WebCore::SimplifiedBackwardsTextIterator::handleNonTextNode):
        Don't use emitNewline, instead specify where the newline should be positioned.
        A node is handled before its children, so characters emitted here should 
        be positioned after the node, not before it.
        (WebCore::SimplifiedBackwardsTextIterator::exitNode): 
        Don't use emitNewline, instead specify where the newline should be positioned.
        (WebCore::CharacterIterator::CharacterIterator): 
        Create a TextIterator that emits content for replaced elements, if requested.
        * editing/TextIterator.h:
        * editing/visible_units.cpp:
        (WebCore::previousBoundary): 
        Removed replaced element handling code.
        If the start of the chunk that contained the boundary was in a non-text
        node, then the boundary is not necessarily in that node.  Particularly
        because it is only the end of the chunk that is guaranteed to be a valid
        position in those cases.  We must iterate backwards by character from 
        the end of the chunk to find the boundary.
        (WebCore::nextBoundary): Removed replaced element handling code.

2007-04-10  Brady Eidson  <beidson@apple.com>

        Reviewed by Darin

        <rdar://problem/4887095> - PageCache and PageState should be combined

        These two objects are a relic of when the PageCache was split between WebCore and WebKit
        It just makes good sense to combine them now, and the new object is more appropriately
        called "CachedPage"

        This patch is vast in scope, but simple in depth - anywhere a PageCache or PageState object 
        was used has been adjusted to use a CachedPage object instead.  The most notable change is
        that HistoryItem - which always used to have a PageCache object which may or may not have 
        had a PageState - now may or may not have a CachedPage.  This actually simplifies the 
        HistoryItem code a bit while making the role of CachedPage much more clear.

        * WebCore.exp:
        * WebCore.xcodeproj/project.pbxproj:

        * history/BackForwardList.cpp:
        (WebCore::BackForwardList::addItem):
        (WebCore::BackForwardList::setCapacity):
        (WebCore::BackForwardList::setPageCacheSize):
        (WebCore::BackForwardList::clearPageCache):
        (WebCore::BackForwardList::close):

        * history/PageCache.cpp: Removed.
        * history/PageCache.h: Removed.
        * page/PageState.cpp: Removed.
        * page/PageState.h: Removed.
        * history/CachedPage.cpp: Added.
        (WebCore::CachedPage::create):
        (WebCore::CachedPage::CachedPage):
        (WebCore::CachedPage::~CachedPage):
        (WebCore::CachedPage::restore):
        (WebCore::CachedPage::clear):
        (WebCore::CachedPage::setDocumentLoader):
        (WebCore::CachedPage::documentLoader):
        (WebCore::CachedPage::setTimeStamp):
        (WebCore::CachedPage::setTimeStampToNow):
        (WebCore::CachedPage::timeStamp):
        * history/CachedPage.h: Added.
        (WebCore::CachedPage::document):
        (WebCore::CachedPage::mousePressNode):
        (WebCore::CachedPage::URL):

        * history/HistoryItem.cpp:
        (WebCore::HistoryItem::HistoryItem):
        (WebCore::HistoryItem::setCachedPage):
        (WebCore::HistoryItem::setURL):
        (WebCore::HistoryItem::alwaysAttemptToUseCachedPage):
        (WebCore::HistoryItem::setAlwaysAttemptToUseCachedPage):
        (WebCore::HistoryItem::cachedPage):
        (WebCore::cachedPagesPendingRelease):
        (WebCore::HistoryItem::releaseCachedPagesOrReschedule):
        (WebCore::HistoryItem::releaseAllPendingCachedPages):
        (WebCore::HistoryItem::scheduleCachedPageForRelease):
        * history/HistoryItem.h:
        * history/mac/HistoryItemMac.mm:

        * history/HistoryItemTimer.cpp:
        (WebCore::HistoryItemTimer::HistoryItemTimer):
        (WebCore::HistoryItemTimer::callReleaseCachedPagesOrReschedule):
        * history/HistoryItemTimer.h:

        * history/mac/PageCacheMac.mm: Removed.
        * history/mac/CachedPageMac.mm: Added.
        (WebCore::CachedPage::close):
        (WebCore::CachedPage::setDocumentView):
        (WebCore::CachedPage::documentView):

        * loader/DocumentLoader.cpp:
        (WebCore::DocumentLoader::DocumentLoader):
        (WebCore::DocumentLoader::loadFromCachedPage):
        (WebCore::DocumentLoader::setLoadingFromCachedPage):
        (WebCore::DocumentLoader::isLoadingFromCachedPage):
        * loader/DocumentLoader.h:

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::provisionalLoadStarted):
        (WebCore::FrameLoader::commitProvisionalLoad):
        (WebCore::FrameLoader::transitionToCommitted):
        (WebCore::FrameLoader::open):
        (WebCore::FrameLoader::startLoading):
        (WebCore::FrameLoader::receivedMainResourceError):
        (WebCore::FrameLoader::opened):
        (WebCore::FrameLoader::continueLoadAfterNavigationPolicy):
        (WebCore::FrameLoader::loadProvisionalItemFromCachedPage):
        (WebCore::FrameLoader::cachePageToHistoryItem):
        (WebCore::FrameLoader::createHistoryItem):
        (WebCore::FrameLoader::purgePageCache):
        (WebCore::FrameLoader::invalidateCurrentItemCachedPage):
        (WebCore::FrameLoader::loadItem):
        (WebCore::FrameLoader::updateHistoryForStandardLoad):
        (WebCore::FrameLoader::updateHistoryForClientRedirect):
        (WebCore::FrameLoader::updateHistoryForBackForwardNavigation):
        (WebCore::FrameLoader::updateHistoryForReload):
        (WebCore::FrameLoader::updateHistoryForInternalLoad):
        (WebCore::FrameLoader::updateHistoryForCommit):
        * loader/FrameLoader.h:
        * loader/FrameLoaderClient.h:

        * page/mac/WebCoreFrameBridge.h: Got rid of unused WebCorePageCacheStateKey
        * page/mac/WebCoreFrameBridge.mm: Ditto

        * platform/graphics/svg/SVGImage.cpp:
        * platform/graphics/svg/SVGImageEmptyClients.h: Update to reflect the new names
        (WebCore::SVGEmptyFrameLoaderClient::loadProvisionalItemFromCachedPage):
        (WebCore::SVGEmptyFrameLoaderClient::invalidateCurrentItemCachedPage):
        (WebCore::SVGEmptyFrameLoaderClient::loadedFromCachedPage):
        (WebCore::SVGEmptyFrameLoaderClient::clearLoadingFromCachedPage):
        (WebCore::SVGEmptyFrameLoaderClient::isLoadingFromCachedPage):
        (WebCore::SVGEmptyFrameLoaderClient::setDocumentViewFromCachedPage):
        (WebCore::SVGEmptyFrameLoaderClient::saveDocumentViewToCachedPage):

2007-04-10  Antti Koivisto  <antti@apple.com>

        Reviewed by Hyatt.

        Fix <rdar://5057686> 
        Flex box layout example hangs in WebCore::RenderFlexibleBox::allowedChildFlex
        
        Forcibly distribute remaining pixels if the algorithm is not advancing.

        * rendering/RenderFlexibleBox.cpp:
        (WebCore::RenderFlexibleBox::layoutHorizontalBox):
        (WebCore::RenderFlexibleBox::layoutVerticalBox):

2007-04-11  Mark Rowe  <mrowe@apple.com>

        Build fix.

        * bridge/mac/WebCoreAXObject.mm:
        (-[WebCoreAXObject accessibilityDescription]):

2007-04-10  Patti Hoa <patti@apple.com>

        Reviewed by Justin Garcia.

        <rdar://problem/5122276> Allow focused frame to fire off notification
        Improve accessibility support for Mail WebView embedded Notes.

        * bridge/mac/AXObjectCacheMac.mm:
        (WebCore::AXObjectCache::postNotification):
        The focused document with the selection change should fire the selection changed notification, not the top level document
        * bridge/mac/WebCoreAXObject.mm:
        (-[WebCoreAXObject accessibilityDescription]):
        Allow the name attribute of the html body to be used as the accessibility description

2007-04-09  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Maciej Stachowiak.
        
        Support for fixing fast/forms/textarea-paste-newline.html.
        
        Changed clients to use new preference specifying whether a Page should 
        allow pasting through the DOM API, instead of a global flag.

        Removed old behavior of always allowing DOM paste in debug builds. In 
        light of the new preference-based API, that behavior makes no sense anymore. 
        Instead, developers who want to test paste inside Safari can set the 
        preference for themselves.

        * WebCore.exp:
        * editing/CommandByName.cpp: Removed crazy hack to keep an identically 
        named but invalid copy of the global "pate allowed" flag in this file.
        (WebCore::Frame::enabledPaste):
        * editing/JSEditor.cpp: Removed "always allow" behavior for debug builds.
        (WebCore::JSEditor::queryCommandSupported):
        * editing/JSEditor.h:
        * page/Settings.cpp:
        (WebCore::Settings::setDOMPasteAllowed):
        * page/Settings.h:
        (WebCore::Settings::isDOMPasteAllowed):
        * rendering/RenderTreeAsText.cpp:
        (WebCore::externalRepresentation): Removed crazy hack to allow DOM paste
        after this function has been called.

2007-04-10  John Sullivan  <sullivan@apple.com>

        Reviewed by Tim Hatcher

        - fixed <rdar://problem/4859132> Grammar must always be checked in entire-sentence chunks, 
          and shouldn't show markers for current sentence

        * editing/Editor.h:
        add markBadGrammar, now distinct from markMisspellings

        * editing/mac/EditorMac.mm:
        (WebCore::Editor::markMisspellingsAfterTypingToPosition):
        call markMisspellings on one word, and markBadGrammar on entire sentence
        (WebCore::markMisspellingsOrBadGrammar):
        new static function, extracted from markMisspellings
        (WebCore::Editor::markMisspellings):
        now calls extracted function
        (WebCore::Editor::markBadGrammar):
        new method, calls extracted function

        * page/Frame.cpp:
        (WebCore::Frame::respondToChangedSelection):
        update grammar markers for entire new and old sentences

2007-04-09  Anders Carlsson  <andersca@apple.com>

        Reviewed by John.

        * WebCore.exp:
        Add __ZNK7WebCore11FrameLoader10isCompleteEv.
        
2007-04-09  Brady Eidson  <beidson@apple.com>

        Reviewed by Darin

        Fixes <rdar://4921797> and http://bugs.webkit.org/show_bug.cgi?id=12005

        The original regression was to claim that more loads were the result of a "user gesture" than really
        were.  A lot of the ways a frame load could be kicked off didn't properly set up this flag, and it 
        wasn't properly propagated and respected where it should've been.

        This patch cleans much of that up.  One loose end is the "treatAsUserGesture" flag which is a stop
        gap measure to keep "slow redirects" working to create a new history item.  In the future, we need
        to cleanup the meaning and use of "userGesture" and "lockHistory."  This includes integrating them 
        in to FrameLoadRequest and being very clear of what their meaning actually is at different stages of
        the Frame load process.

        * dom/Document.cpp:
        (WebCore::Document::processHttpEquiv): Pass only the delay for the redirect

        * html/HTMLAnchorElement.cpp:
        (WebCore::HTMLAnchorElement::defaultEventHandler): Pass "lockHistory" false, "userGesture" true

        * ksvg2/svg/SVGAElement.cpp:
        (WebCore::SVGAElement::defaultEventHandler): Pass "lockHistory" false, "userGesture" true

        * loader/FrameLoader.cpp:
        (WebCore::ScheduledRedirection::ScheduledRedirection): Figure "lockHistory" and "userGesture" from the 
          delay here, instead of at 3 other different sites that call this method
        (WebCore::FrameLoader::changeLocation): Set userGesture correctly
        (WebCore::FrameLoader::urlSelected): Propagate userGesture down
        (WebCore::FrameLoader::requestFrame): 
        (WebCore::FrameLoader::receivedFirstData):
        (WebCore::FrameLoader::scheduleRedirection): Pass only the delay here
        (WebCore::FrameLoader::redirectionTimerFired): Set userGesture correctly
        (WebCore::FrameLoader::load):
        (WebCore::FrameLoader::updateHistoryForInternalLoad): Insteading of asserting we aren't a redirect,
          handle the case where we *are* a redirect by updating the previous history item
        * loader/FrameLoader.h:

2007-04-09  Anders Carlsson  <andersca@apple.com>

        Reviewed by Darin.

        <rdar://problem/5120801> 
        http://bugs.webkit.org/show_bug.cgi?id=13247
        Closing a page during slow cloning causes crash in setJSStatusBarText (13247)

        * bindings/js/kjs_window.cpp:
        (KJS::Window::put):
        Return early if m_frame is null. A closed window only has one property, "closed" 
        so no properties should be settable in that case.

2007-04-09  Andrew Wellington  <proton@wiretapped.net>

        Reviewed by Justin Garcia.
        
        Fix for http://bugs.webkit.org/show_bug.cgi?id=12959
        "REGRESSION: Edit -> Copy not enabled on standalone images"

        * dom/Document.h: Add support for determining if a document is an image
        (WebCore::Document::isImageDocument):
        * editing/Editor.cpp:
        (WebCore::Editor::canCopy): Image documents are copyable
        (WebCore::Editor::copy): If copying an image document, call appropriate pasteboard methods
        * loader/ImageDocument.h:
        (WebCore::ImageDocument::isImageDocument): Override to return true for image documents
        * platform/Pasteboard.h: Add new writeImage function to pasteboard
        * platform/mac/PasteboardMac.mm:
        (WebCore::Pasteboard::writeImage): Add writeImage implementation that takes Node and URL
        * platform/qt/PasteboardQt.cpp:
        (WebCore::Pasteboard::writeImage): Stub for Qt implementation of pasteboard

2007-04-08  Oliver Hunt  <oliver@apple.com>

        rs=Adam.

        Add ASSERT(selectedRange) to previous change

        * platform/mac/PasteboardMac.mm:
        (WebCore::Pasteboard::writeSelection):

2007-04-08  Oliver Hunt  <oliver@apple.com>

        rs=Adam.

        Fix minor error when writing selection to pasteboard.
        This shouldn't have an effect as selectedRange should be the
        selected range from source frame, however this is safer.

        * platform/mac/PasteboardMac.mm:
        (WebCore::Pasteboard::writeSelection):

2007-04-08  David Hyatt  <hyatt@apple.com>

        Fix mouseover/out failing layout tests.

        Reviewed by aroben

        * page/EventHandler.cpp:
        (WebCore::EventHandler::handleMouseMoveEvent):
        (WebCore::EventHandler::updateMouseEventTargetNode):
        (WebCore::EventHandler::dispatchMouseEvent):
        * page/EventHandler.h:

2007-04-08  Oliver Hunt  <oliver@apple.com>

        Reviewed by Adam.

        Fix for <rdar://problem/5113621> REGRESSION: Dragging PDF as image does not give any feedback

        If we fail when attempting to create a drag image for a dragged
        image, we fall back to the appropriate icon.

        * page/DragController.cpp:
        (WebCore::DragController::doImageDrag):

2007-04-08  Adam Roben  <aroben@apple.com>

        Reviewed by Oliver.

        Bestowed the gift of -webkit-dashboard-region upon all platforms, since
        there's nothing Mac-specific about it other than the name. This also
        allowed me to get rid of FrameViewMac.mm.

        Removed a lot of #if PLATFORM(MAC):

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::):
        (WebCore::CSSComputedStyleDeclaration::getPropertyCSSValue):
        * css/CSSPrimitiveValue.cpp:
        (WebCore::CSSPrimitiveValue::CSSPrimitiveValue):
        (WebCore::CSSPrimitiveValue::cleanup):
        (WebCore::CSSPrimitiveValue::cssText):
        * css/CSSPrimitiveValue.h:
        (WebCore::CSSPrimitiveValue::getDashboardRegionValue):
        (WebCore::CSSPrimitiveValue::):
        * css/cssparser.cpp:
        (WebCore::CSSParser::parseValue):
        (WebCore::CSSParser::parseDashboardRegions):
        * css/cssparser.h:
        * css/cssstyleselector.cpp:
        (WebCore::CSSStyleSelector::applyProperty):
        * dom/Document.cpp:
        (WebCore::Document::Document):
        * dom/Document.h:
        * page/Frame.cpp:
        (WebCore::Frame::paint):
        * page/Frame.h:
        * page/FrameView.cpp:
        (WebCore::FrameView::layout):
        (WebCore::FrameView::updateDashboardRegions): Moved from FrameViewMac.mm.
        * page/FrameView.h:
        * page/qt/FrameQt.cpp:
        (WebCore::Frame::dashboardRegionsChanged): Stubbed out.
        * platform/gdk/FrameGdk.cpp:
        (WebCore::Frame::dashboardRegionsChanged): Ditto.
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::scrollToOffset):
        (WebCore::RenderLayer::setHasHorizontalScrollbar):
        (WebCore::RenderLayer::setHasVerticalScrollbar):
        (WebCore::RenderLayer::updateScrollInfoAfterLayout):
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::setStyle):

        * WebCore.xcodeproj/project.pbxproj: Removed FrameViewMac.mm.
        * bridge/mac/FrameViewMac.mm: Removed.

2007-04-08  Mark Rowe  <mrowe@apple.com>

        Qt build fix.

        * platform/qt/TemporaryLinkStubs.cpp:

2007-04-06  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Beth Dakin.
        
        Fixed one more case of <rdar://problem/5112273> REGRESSION(TOT): 
        Reproducible crash loading an old version of amazon.com as a web archive

        * bindings/js/JSXMLHttpRequest.cpp:
        (KJS::JSXMLHttpRequestPrototypeFunction::callAsFunction):

2007-04-06  Oliver Hunt  <oliver@apple.com>

        Reviewed by Adam.

        Fix MouseEvent so it's possible to distinguish between
        a MouseMouseEvent with NoButton down, and a move with
        LeftButton down.  It would be nice if the DOM allowed 
        for NoButton to exist, but it doesn't so this is necessary.

        * dom/EventTargetNode.cpp:
        (WebCore::EventTargetNode::dispatchMouseEvent):
        * dom/MouseEvent.cpp:
        (WebCore::MouseEvent::MouseEvent):
        (WebCore::MouseEvent::initMouseEvent):
        * dom/MouseEvent.h:
        (WebCore::MouseEvent::noButton):

2007-04-06  Krzysztof Kowalczyk  <kkowalczyk@gmail.com>

        Not reviewed - gdk build fix.

        * platform/gdk/MouseEventGdk.cpp:

2007-04-06  Krzysztof Kowalczyk  <kkowalczyk@gmail.com>

        Reviewed by darin.

        Coverity fix. Coverity says:
        "Event var_deref_op: Variable "info_ptr" tracked as NULL was dereferenced."

        * platform/image-decoders/png/pngrutil.c:
        (png_handle_gAMA):

2007-04-06  Krzysztof Kowalczyk  <kkowalczyk@gmail.com>

        Reviewed by darin.

        Coverity fix. Coverity says:
        "Event var_deref_model: Variable "(this)->clientptr" tracked as NULL was passed to a function that dereferences it."

        * platform/image-decoders/gif/GIFImageReader.cpp:
        (GIFImageReader::read):

2007-04-06  David Hyatt  <hyatt@apple.com>

        Fix more of the layout test failures caused by fixing the slider layout test failure (sigh).  clear()
        needs to null out the capturingMouseEventsNode in the case where a mousedown or move while captured
        causes a navigation to another page.

        * page/EventHandler.cpp:
        (WebCore::EventHandler::clear):
        (WebCore::EventHandler::handleMouseReleaseEvent):

2007-04-06  David Hyatt  <hyatt@apple.com>

        Fix failing slider layout test.  Don't clear the subframe capture unless we really were capturing on a
        subframe.

        Reviewed by adele, darin

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

2007-04-06  Beth Dakin  <bdakin@apple.com>

        Reviewed by Geoff and Darin.

        Fix for <rdar://problem/4875433> WebView underlines are too thick 
        when scaled small

        When we have a small scale factor, we should follow the line-
        drawing code as if we were printing. Meaning, specifically, that we 
        should not round to device pixels and we should antialias.

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

2007-04-06  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Beth Dakin.
        
        Fixed <rdar://problem/5112273> REGRESSION(TOT): Reproducible crash loading 
        an old version of amazon.com as a web archive
        
        The problem was JavaScript executing inside a frame with a NULL document.
        It's probably a bug that the document was NULL, but we don't want a minor
        bug to be a crasher, and we don't want the DOM to depend on the implementation
        details of the JS bindings, so I added NULL checks.

        * bindings/js/kjs_window.cpp: Call FrameLoader::completeURL instead of
        Document::completeURL, since FrameLoader::completeURL is safe against a
        NULL document.
        (KJS::Window::put):
        (KJS::WindowFunc::callAsFunction):
        (KJS::Location::put):
        (KJS::LocationFunc::callAsFunction):

2007-04-06  David Hyatt  <hyatt@apple.com>

        Fix for bug 13274.  Rework mouse events so that subframe capturing works again.  Make sure
        everything just comes down through the top FrameView even when capturing is in effect.  Update
        scrollbar handling logic so that scrollbars receive events correctly while capturing is in
        effect.  Eliminate the notion of widget capture.  Fix mouse moves so that they only fire
        on the innermost hit frame.

        Reviewed by olliej

        * page/EventHandler.cpp:
        (WebCore::EventHandler::handleMouseDraggedEvent):
        (WebCore::subframeForTargetNode):
        (WebCore::EventHandler::handleMousePressEvent):
        (WebCore::EventHandler::handleMouseMoveEvent):
        (WebCore::EventHandler::handleMouseReleaseEvent):
        * page/EventHandler.h:
        * platform/PopupMenu.h:
        (WebCore::PopupMenu::scrollbarCapturingMouse):
        (WebCore::PopupMenu::setScrollbarCapturingMouse):
        * platform/ScrollBar.h:
        (WebCore::Scrollbar::handleMouseReleaseEvent):
        * platform/Widget.h:
        (WebCore::Widget::geometryChanged):

2007-04-06  Justin Garcia  <justin.garcia@apple.com>

        Reviewed by john

        <rdar://problem/5115601> 
        REGRESSION: Crash deleting a selection that starts in an editable table cell
        
        The selection starts at the start of an editable 
        root that's embedded in a non-editable ToDo (table).  
        Removing the selection removes all editable 
        VisiblePositions from the root.  Then, the creation 
        of mergeDestination fails, and using it causes a crash.

        * editing/DeleteSelectionCommand.cpp:
        (WebCore::DeleteSelectionCommand::mergeParagraphs):
        Nil-check mergeDestination to avoid crashing and
        also insert a break in that case at m_upstreamStart, 
        so that we can create a valid mergeDestination and
        perform the merge.
        
        
2007-04-06  Mitz Pettel  <mitz@webkit.org>

        Reviewed by Oliver.

        Eliminate PlatformMouseEvent::currentEvent.

        No test possible (no change to functionality).

        * page/EventHandler.cpp:
        (WebCore::EventHandler::handleDrag):
        * platform/PlatformMouseEvent.h:
        * platform/gdk/TemporaryLinkStubs.cpp:
        * platform/mac/PlatformMouseEventMac.mm:
        (WebCore::PlatformMouseEvent::PlatformMouseEvent):
        * platform/qt/PlatformMouseEventQt.cpp:
        * platform/win/TemporaryLinkStubs.cpp:

2007-04-05  Oliver Hunt  <oliver@apple.com>

        Reviewed by Maciej.

        Fix for rdar://problem/4849948 -- JSCanvasRenderingContext2D::drawImage
        crashes when given invalid arguments.

        JSCanvasRenderingContext2D frequently casts from JSValue* to JSObject*
        and then checks isObject *after* the cast.  JSObject::isObject is unsafe 
        if applied to a JSImmediate value (null, undefined, etc).  This patch 
        corrects the logic in a number of places by performing the isObject check
        before casting to JSObject.

        * bindings/js/JSCanvasRenderingContext2DCustom.cpp:
        (WebCore::JSCanvasRenderingContext2D::drawImage):
        (WebCore::JSCanvasRenderingContext2D::drawImageFromRect):
        (WebCore::JSCanvasRenderingContext2D::createPattern):

2007-04-05  Adele Peterson  <adele@apple.com>

        Reviewed by Oliver.

        Fix for <rdar://problem/4965597> REGRESSION: mouseup doesn't fire for slider (causes it to always default to max)

        Test: fast/forms/slider-mouse-events.html

        * page/EventHandler.cpp: (WebCore::EventHandler::dispatchMouseEvent):
        Since the actual target node of the event can't be a shadow node, set the target node to the capturing node before adjusting it.

2007-04-05  Kevin McCullough  <kmccullough@apple.com>

        Reviewed by Darin.

        - Added reportLocalLoadFailed to FrameLoader to send an error to the console when
        calls to canLoad fail. 

        * loader/Cache.cpp:
        (WebCore::Cache::requestResource):
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::loadSubframe):
        (WebCore::FrameLoader::loadPlugin):
        (WebCore::FrameLoader::load):
        (WebCore::FrameLoader::reportLocalLoadFailed):
        * loader/FrameLoader.h:
        * loader/SubresourceLoader.cpp:
        (WebCore::SubresourceLoader::create):

2007-04-05  Adele Peterson  <adele@apple.com>

        Reviewed by Maciej.

        Add text-align: -webkit-auto for form controls.  Buttons already override this property to center their text.

        * css/html4.css:

2007-04-05  Krzysztof Kowalczyk  <kkowalczyk@gmail.com>

        Reviewed by rwlbuis.

        Coverity fix. Coverity says:
        "Event var_deref_model: Variable "page" tracked as NULL was passed to a function that dereferences it."

        * platform/Font.cpp:
        (WebCore::Font::glyphDataForCharacter):

2007-04-05  Krzysztof Kowalczyk  <kkowalczyk@gmail.com>

        Reviewed by darin.

        Coverity fix. Coverity says:
        "Event var_deref_model: Variable "unicode" tracked as NULL was passed to a 
        function that dereferences it."

        * platform/DeprecatedString.cpp:
        (WebCore::DeprecatedString::DeprecatedString):

2007-04-05  Adele Peterson  <adele@apple.com>

        Reviewed by Hyatt.

        Fix for <rdar://problem/5113593> REGRESSION: Search fields in RSS pages don't show ibeam cursor

        * css/html4.css: Set the cursor values explicitly for input, textarea (to auto), & select (to default).

2007-04-05  David Hyatt  <hyatt@apple.com>

        Fix for <rdar://problem/5078866> tables should only reset text-align
        in quirks mode.

        Reviewed by beth

        * css/html4.css:
        * css/quirks.css:

2007-04-05  Adele Peterson  <adele@apple.com>

        Fixing typo that's crashing.

        * html/HTMLAnchorElement.cpp: (WebCore::HTMLAnchorElement::defaultEventHandler):
          Use evt instead of null variable k.

2007-04-05  Adele Peterson  <adele@apple.com>

        Reviewed by Hyatt.

        Fix for <rdar://problem/5021500> Cursor should stay as pointer when slider is being dragged

        Don't set the selection ibeam cursor when there's a node that's capturing mouse events.

        * page/EventHandler.cpp:
        (WebCore::selectCursor):
        (WebCore::EventHandler::handleMouseMoveEvent):

2007-04-05  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Beth Dakin.

        More clean-up while fixing <rdar://problem/5112273> REGRESSION(TOT): 
        Reproducible crash loading an old version of amazon.com as a web archive
        
        Layout tests pass.
        
        Removed more superfluous document NULL checks. (Node::document() never 
        returns NULL, and it asserts as much.)
        
        Merged some duplicate editing code into a static inline function.
        
        * page/mac/WebCoreFrameBridge.mm:
        (updateRenderingForBindings): Removed superfluous static_cast.

2007-04-05  Adele Peterson  <adele@apple.com>

        Reviewed by Darin.

        A little cleanup from my last checkin.  Always check if an Event is really a MouseEvent or a KeyboardEvent
        before casting it.

        * html/HTMLAnchorElement.cpp: (WebCore::HTMLAnchorElement::defaultEventHandler):
        * html/HTMLSelectElement.cpp:
        (WebCore::HTMLSelectElement::menuListDefaultEventHandler):
        (WebCore::HTMLSelectElement::listBoxDefaultEventHandler):
        * html/HTMLTextFieldInnerElement.cpp:
        (WebCore::HTMLSearchFieldResultsButtonElement::defaultEventHandler):
        (WebCore::HTMLSearchFieldCancelButtonElement::defaultEventHandler):
        * ksvg2/svg/SVGAElement.cpp: (WebCore::SVGAElement::defaultEventHandler):
        * page/ContextMenuController.cpp: (WebCore::ContextMenuController::handleContextMenuEvent):
        * rendering/RenderFrameSet.cpp: (WebCore::RenderFrameSet::userResize):
        * rendering/RenderSlider.cpp: (WebCore::HTMLSliderThumbElement::defaultEventHandler):

2007-04-05  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Beth Dakin.
        
        Some clean-up while fixing <rdar://problem/5112273> REGRESSION(TOT): 
        Reproducible crash loading an old version of amazon.com as a web archive
        
        Removed superfluous document NULL checks. (Node::document() never returns
        NULL, and it asserts as much.)
        
        Removed duplicate implementation of displayString.
        
        Layout tests pass.

        * bindings/objc/DOMInternal.h:
        * bindings/objc/DOMInternal.mm:
        * html/HTMLGenericFormElement.cpp:
        (WebCore::HTMLGenericFormElement::supportsFocus):
        * html/HTMLPlugInElement.cpp:
        (WebCore::HTMLPlugInElement::createNPObject):
        * platform/ContextMenu.cpp:
        (WebCore::ContextMenu::checkOrEnableIfNeeded):
        * rendering/HitTestResult.cpp:
        (WebCore::displayString):
        * rendering/HitTestResult.h:
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::updateHoverActiveState):

=== Safari-5522.6 ===

2007-04-05  Oliver Hunt  <oliver@apple.com>

        Reviewed by Adam.

        Fix rdar://problem/5030934 -- landscape PDFs embedded as an image are cut off
        also fixes scaling of pdf images

        PDFDocumentImage was not accounting for page rotation in a number of places

        * platform/graphics/cg/PDFDocumentImage.cpp:
        (WebCore::PDFDocumentImage::size):
          we need to account for rotation of the pdf image effecting our bounds
        (WebCore::PDFDocumentImage::draw):
          When compensating for flipped coords we need to use the correct rect for the 
          coordinate space.  We can't pass size() to CGContextDrawPDFDocument as it
          returns the rotated bounds now -- this is also save the old 
          FloatSize -> IntSize -> FloatSize conversions.
          
2007-04-04  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Darin.

        http://bugs.webkit.org/show_bug.cgi?id=13278
        REGRESSION: cannot change SELECT option

        Test: fast/forms/option-change-single-selected.html

        * html/HTMLSelectElement.cpp:
        (WebCore::HTMLSelectElement::setSelectedIndex): If multiple selection is not allowed, 
        be sure to deselect the previous option.

2007-04-04  Adele Peterson  <adele@apple.com>

        Reviewed by Oliver.

        Fix for <rdar://5105009> Prepare for fix to send mousedown and mouseup (but not click) events when right-clicking

        * page/EventHandler.cpp: Don't ever send click events for right-clicks.
        (WebCore::EventHandler::handleMouseDoubleClickEvent):
        (WebCore::EventHandler::handleMouseReleaseEvent):
        
        Check that the mousedown and mouseup are not with the right button before performing default behavior.
        * html/HTMLAnchorElement.cpp: (WebCore::HTMLAnchorElement::defaultEventHandler):
        * html/HTMLInputElement.cpp: (WebCore::HTMLInputElement::defaultEventHandler):
        * html/HTMLSelectElement.cpp:
        (WebCore::HTMLSelectElement::menuListDefaultEventHandler):
        (WebCore::HTMLSelectElement::listBoxDefaultEventHandler):
        * html/HTMLTextFieldInnerElement.cpp:
        (WebCore::HTMLSearchFieldResultsButtonElement::defaultEventHandler):
        (WebCore::HTMLSearchFieldCancelButtonElement::defaultEventHandler):
        * ksvg2/svg/SVGAElement.cpp:(WebCore::SVGAElement::defaultEventHandler):
        * rendering/RenderFrameSet.cpp: (WebCore::RenderFrameSet::userResize):
        * rendering/RenderSlider.cpp: (WebCore::HTMLSliderThumbElement::defaultEventHandler):

2007-04-03  Justin Garcia  <justin.garcia@apple.com>

        Reviewed by darin
        
        <rdar://problem/5026848> Can cut/delete ToDo subunits
        
        We were removing non-editable content during a delete.

        * editing/DeleteSelectionCommand.cpp: 
        (WebCore::DeleteSelectionCommand::initializePositionData): 
        Set m_startRoot and m_endRoot.
        (WebCore::DeleteSelectionCommand::removeNode): If a node
        is not inside both the start and end roots, remove it only
        if it is in editable content.
        * editing/DeleteSelectionCommand.h: Added m_startRoot and 
        m_endRoot, the editable roots that contain the start and end
        of the selection, respectively.  We consult these every
        time we remove a node, and don't want to recompute them 
        on every call to removeNode().

2007-04-03  David Hyatt  <hyatt@apple.com>

        Fix for <rdar://problem/5108896>, make sure the assert for setEncodedSize
        deals with the error case.

        Reviewed by andersca

        * loader/CachedResource.cpp:
        (WebCore::CachedResource::setEncodedSize):

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

        Reviewed by Dave Hyatt.

        * loader/ImageDocument.cpp:
        Don't call error() in stopParsing.

2007-04-03  Justin Garcia  <justin.garcia@apple.com>

        Reviewed by darin
        
        <rdar://problem/5107422> 
        TOT REGRESSION: Delete key fails to delete text, and cursor disappears in Mail.app
        <rdar://problem/5107413> 
        TOT REGRESSION: Crash deleting text in email (infinite recursion in shouldInsertNode)

        * editing/CompositeEditCommand.cpp:
        (WebCore::CompositeEditCommand::moveParagraphs):
        Back out the call to shouldInsert until we
        add WebViewInsertActionMoved, because Mail returns
        NO from shouldInsert for WebViewInsertActionPasted
        to override our Paste operation.

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

        Reviewed by Mitz.

        Make window.innerWidth/innerHeight include the size of any present scrollbar to match Firefox.
        
        Make document.body.clientWidth/clientHeight return the width/height of the visible content when in
        quirks mode to match WinIE.
        
        * bindings/js/kjs_window.cpp:
        (KJS::Window::getValueProperty):
        Return the width and height of the scroll view, not the visible width and height.
        
        * dom/Element.cpp:
        (WebCore::Element::clientWidth):        
        (WebCore::Element::clientHeight):
        Return the visible size if the element is the body element and we're in quirks mode.

2007-04-03  Adele Peterson  <adele@apple.com>

        Reviewed by Darin.

        Updated fix for <rdar://problem/5107095> REGRESSION: disabled text color calculations are slowing down launchtime measurements

        * platform/graphics/Color.cpp: Moved optimization for lightening black and darkening white into the Color class.
        (WebCore::Color::light):
        (WebCore::Color::dark):
        * rendering/RenderTextControl.cpp: (WebCore::disabledTextColor): Skip the difference calculation for black text, which will always be lightened.

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

        Reviewed by Tim.

        <rdar://problem/4649516> 
        Turn off slow script dialog or crank up time that makes it come up
        
        * bindings/js/kjs_binding.cpp:
        (KJS::ScriptInterpreter::ScriptInterpreter):
        Increase the timeout to 10 seconds to match Firefox.

2007-04-03  Mitz Pettel  <mitz@webkit.org>

        Reviewed by Darin.

        - fix http://bugs.webkit.org/show_bug.cgi?id=13251
          editing/style/fontsize-1.html fails intermittently when run multiple times on Intel, generates incorrect DOM

        Covered by existing editing tests.

        * css/CSSPrimitiveValue.cpp:
        (WebCore::CSSPrimitiveValue::getFloatValue): Added ASSERTs that the requested conversion
        is from a scalar type to a scalar type. The intermittent failures in the test were
        the result of trying to convert an identifier type to a scalar type.
        * editing/ApplyStyleCommand.cpp:
        (WebCore::StyleChange::checkForLegacyHTMLStyleChange): Added a check that the
        font-size property value is an absolute length. If it is not (such as in the case
        of relative units or keywords like "x-large"), then no corresponding 'size' attribute
        will be generated for legacy HTML.

2007-04-03  Mitz Pettel  <mitz@webkit.org>

        Reviewed by Darin.

        - fix http://bugs.webkit.org/show_bug.cgi?id=13218
          <rdar://problem/5095977>
          Reproducible crash after call to window.close()

        * manual-tests/stale-currentEvent.html: Added.
        * page/EventHandler.cpp:
        (WebCore::EventHandler::hoverTimerFired): Instead of faking a mouse event,
        just hit-test the last mouse event coordinates and update for hover state
        changes. This eliminates the use of currentEvent, which can be a non-mouse
        event or even a stale event.

2007-04-02  Adele Peterson  <adele@apple.com>

        Reviewed by Maciej.

        Fix for <rdar://problem/5107095> REGRESSION: disabled text color calculations are slowing down launchtime measurements

        Hardcode disabled text colors for the most common cases- black and white.

        * rendering/RenderTextControl.cpp: (WebCore::disabledTextColor):

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

        Fix for <rdar://problem/5105784>, assertion failure in cache.  Encoded sizes were being set to
        garbage by accident because of a mismatch between derived class and base class constructors.  This
        patch cleans all of this up and gets rid of expiration date as a concept separate from the response.

        Reviewed by anders

        * dom/Document.cpp:
        (WebCore::Document::processHttpEquiv):
        * html/HTMLImageLoader.cpp:
        (WebCore::HTMLImageLoader::updateFromElement):
        * loader/Cache.cpp:
        (WebCore::createResource):
        (WebCore::Cache::requestResource):
        * loader/Cache.h:
        * loader/CachedCSSStyleSheet.cpp:
        (WebCore::CachedCSSStyleSheet::CachedCSSStyleSheet):
        * loader/CachedCSSStyleSheet.h:
        * loader/CachedImage.cpp:
        (WebCore::CachedImage::CachedImage):
        * loader/CachedImage.h:
        * loader/CachedResource.cpp:
        (WebCore::CachedResource::CachedResource):
        (WebCore::CachedResource::finish):
        * loader/CachedResource.h:
        * 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::DocLoader):
        (WebCore::DocLoader::requestResource):
        * loader/DocLoader.h:

2007-04-03  Antti Koivisto  <antti@apple.com>

        Reviewed by Hyatt.

        Render tree memory savings, part 3
        
        These changes shrink all RenderBlocks by additional 28 bytes. Together with parts 1 and 2
        RenderBlock goes from 172 bytes to 128 bytes, a saving of 26%.
        
        - Pack bitfields together in RenderFlow
        - Move top/bottom min/max margin values to a struct that is only allocated in case these
          variables have non default values. Usually this is <5% of all blocks. 
        - Move rarely used column variables to hash

        * rendering/RenderBlock.cpp:
        (WebCore::ColumnInfo::ColumnInfo):
        (WebCore::RenderBlock::RenderBlock):
        (WebCore::RenderBlock::~RenderBlock):
        (WebCore::RenderBlock::layoutBlock):
        (WebCore::RenderBlock::collapseMargins):
        (WebCore::RenderBlock::clearFloatsIfNeeded):
        (WebCore::RenderBlock::setCollapsedBottomMargin):
        (WebCore::RenderBlock::layoutBlockChildren):
        (WebCore::RenderBlock::paintColumns):
        (WebCore::RenderBlock::paintObject):
        (WebCore::RenderBlock::fillSelectionGaps):
        (WebCore::RenderBlock::lowestPosition):
        (WebCore::RenderBlock::rightmostPosition):
        (WebCore::RenderBlock::leftmostPosition):
        (WebCore::RenderBlock::nodeAtPoint):
        (WebCore::RenderBlock::hitTestColumns):
        (WebCore::RenderBlock::positionForCoordinates):
        (WebCore::RenderBlock::availableWidth):
        (WebCore::RenderBlock::calcColumnWidth):
        (WebCore::RenderBlock::setDesiredColumnCountAndWidth):
        (WebCore::RenderBlock::desiredColumnWidth):
        (WebCore::RenderBlock::desiredColumnCount):
        (WebCore::RenderBlock::columnRects):
        (WebCore::RenderBlock::layoutColumns):
        (WebCore::RenderBlock::adjustPointToColumnContents):
        (WebCore::RenderBlock::adjustRectForColumns):
        (WebCore::RenderBlock::setMaxTopMargins):
        (WebCore::RenderBlock::setMaxBottomMargins):
        * rendering/RenderBlock.h:
        (WebCore::RenderBlock::maxTopMargin):
        (WebCore::RenderBlock::maxBottomMargin):
        (WebCore::RenderBlock::maxTopPosMargin):
        (WebCore::RenderBlock::maxTopNegMargin):
        (WebCore::RenderBlock::maxBottomPosMargin):
        (WebCore::RenderBlock::maxBottomNegMargin):
        (WebCore::RenderBlock::initMaxMarginValues):
        (WebCore::RenderBlock::MaxMargin::MaxMargin):
        (WebCore::RenderBlock::MaxMargin::topPosDefault):
        (WebCore::RenderBlock::MaxMargin::topNegDefault):
        (WebCore::RenderBlock::MaxMargin::bottomPosDefault):
        (WebCore::RenderBlock::MaxMargin::bottomNegDefault):
        * rendering/RenderFlexibleBox.cpp:
        (WebCore::RenderFlexibleBox::layoutBlock):
        * rendering/RenderFlow.h:
        (WebCore::RenderFlow::RenderFlow):
        (WebCore::RenderFlow::hasColumns):
        * rendering/RenderInline.cpp:
        (WebCore::RenderInline::RenderInline):
        * rendering/RenderInline.h:

2007-04-03  Antti Koivisto  <antti@apple.com>

        Reviewed by Hyatt.

        Fix asserts, these may also be called for rel positioned elements

        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::setStaticX):
        (WebCore::RenderBox::setStaticY):

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

        Throw in an assert to try to track down a problem where an image is being set to a smaller encoded
        size.

        * loader/CachedResource.cpp:
        (WebCore::CachedResource::setEncodedSize):

2007-04-02  Ada Chan  <adachan@apple.com>

        Reviewed by Adele.

        <rdar://5105331> Missing null check in Editor::execCommand
        Added null check.

        * editing/Editor.cpp:
        (WebCore::Editor::execCommand):

2007-04-02  Justin Garcia  <justin.garcia@apple.com>

        Reviewed by darin

        <rdar://problem/5058163> 
        Hitting return inserts a new line between two To Dos, but caret is position after second ToDo

        * editing/InsertParagraphSeparatorCommand.cpp:
        (WebCore::InsertParagraphSeparatorCommand::doApply):
        Removed refPos, it was unused.
        Don't assume that upstream() moves to a different
        node.  This assumption caused the line break to
        be inserted *after* the caret and a bad position
        to be set (added a testcase).
        Use isStartOfParagraph instead of checking
        for the existence of a br because the line might 
        be broken by a newline character in text that 
        preserves newlines.  Paragraphs that are created 
        in other ways, like with blocks, are handled 
        above (added a testcase).

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

        Reviewed by Darin.

        <rdar://problem/4906488> text attributes are not working for frame based web page

        Attribute handling now treats each WebArea as its own world, rather than sometimes
        referring back up to the top WebArea. e.g. getting/setting the selection now
        operates on the WebArea containing the WebCoreAXObject that is being messaged (self).
        The methods that sit above this and are able to go into arbitrary WebAreas
        are accessibilityFocusedUIElement and doAXTextMarkerForPosition, allowing VoiceOver
        to navigate between frames.
        
        * bridge/mac/WebCoreAXObject.mm:
        (-[WebCoreAXObject topRenderer]):
        (-[WebCoreAXObject frameView]):
        (-[WebCoreAXObject topFrameView]):
        Removed topDocument, renamed topView to topFrameView, added frameView.
        
        (-[WebCoreAXObject accessibilityAttributeValue:]):
        AXSelectedTextMarkerRange, AXStartTextMarker, and AXEndTextMarker now use
        self's WebArea, rather than the top WebArea.
        
        (-[WebCoreAXObject doAXTextMarkerRangeForLine:]):
        Use self's WebArea, rather than the top WebArea.

        (-[WebCoreAXObject doAXTextMarkerForPosition:]):
        Use renamed methods for accessing top WebArea.
         
        (-[WebCoreAXObject doAXBoundsForTextMarkerRange:]):
        Use renamed methods for accessing self's WebArea.

        (AXAttributeStringSetColor):
        (AXAttributeStringSetNumber):
        (AXAttributeStringSetFont):
        (AXAttributeStringSetStyle):
        (AXAttributeStringSetElement):
        (-[WebCoreAXObject rendererForView:]):
        Clean up uses of nil and NULL.
        
        (-[WebCoreAXObject accessibilityFocusedUIElement]):
        Find the focused node on the whole page. If there is no focused node,
        return the WebArea for the focused document.
        
        (-[WebCoreAXObject doSetAXSelectedTextMarkerRange:]):
        Use self's WebArea, rather than the top WebArea.

2007-04-02  Antti Koivisto  <antti@apple.com>

        Fix build. This one was not supposed to be checked in.

        * rendering/RenderFlexibleBox.cpp:
        (WebCore::RenderFlexibleBox::layoutBlock):

2007-03-30  Antti Koivisto  <antti@apple.com>

        Reviewed by Hyatt.

        Render tree memory savings, part 2
        
        - Move staticX and staticY variables to RenderLayer since they are only
          applicable to positioned objects
        - Move very rarely used overrideSize variable to hash
        
        These changes shrink all box types by 12 bytes

        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::RenderBox):
        (WebCore::RenderBox::destroy):
        (WebCore::RenderBox::overrideSize):
        (WebCore::RenderBox::setOverrideSize):
        (WebCore::RenderBox::overrideWidth):
        (WebCore::RenderBox::overrideHeight):
        (WebCore::RenderBox::position):
        (WebCore::RenderBox::calcWidth):
        (WebCore::RenderBox::calcHeight):
        (WebCore::RenderBox::staticX):
        (WebCore::RenderBox::staticY):
        (WebCore::RenderBox::setStaticX):
        (WebCore::RenderBox::setStaticY):
        (WebCore::RenderBox::calcAbsoluteHorizontal):
        (WebCore::RenderBox::calcAbsoluteVertical):
        (WebCore::RenderBox::calcAbsoluteHorizontalReplaced):
        (WebCore::RenderBox::calcAbsoluteVerticalReplaced):
        * rendering/RenderBox.h:
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::RenderLayer):
        * rendering/RenderLayer.h:
        (WebCore::RenderLayer::staticX):
        (WebCore::RenderLayer::staticY):
        (WebCore::RenderLayer::setStaticX):
        (WebCore::RenderLayer::setStaticY):
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::RenderObject):
        * rendering/RenderObject.h:
        (WebCore::):
        (WebCore::RenderObject::hasOverrideSize):
        (WebCore::RenderObject::setHasOverrideSize):
        * rendering/RenderWidget.cpp:
        (WebCore::RenderWidget::destroy):

2007-03-31  Krzysztof Kowalczyk  <kkowalczyk@gmail.com>

        Not reviewed - gdk build fix.

        * platform/gdk/TemporaryLinkStubs.cpp:
        (Font::selectionRectForComplexText):
        (Font::drawComplexText):

2007-03-31  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Darin.

        http://bugs.webkit.org/show_bug.cgi?id=12778
        REGRESSION: Nightly won't load Curl plugin for full page use

        * dom/DOMImplementation.cpp:
        (WebCore::DOMImplementation::createDocument): Re-order cases to give more priority to plugins.
        This also fixes Adobe SVG Viewer and any plugins that register XML MIME types.
        Added a case for XHTML to avoid enumerating plugins.

2007-03-31  David Hyatt  <hyatt@apple.com>

        Fix for bug 13234, layout of selected justified text is broken.  Rework TextRuns to avoid having
        from/to members.  Let those be passed in only by the functions that need them (drawing and selection rect).

        Reviewed by mitz

        fast/text/justified-selection-at-edge.html

        * platform/Font.cpp:
        (WebCore::WidthIterator::WidthIterator):
        (WebCore::WidthIterator::advance):
        (WebCore::Font::canUseGlyphCache):
        (WebCore::Font::drawSimpleText):
        (WebCore::Font::drawText):
        (WebCore::Font::floatWidth):
        (WebCore::Font::floatWidthForSimpleText):
        (WebCore::Font::selectionRectForText):
        (WebCore::Font::selectionRectForSimpleText):
        (WebCore::Font::offsetForPositionForSimpleText):
        * platform/Font.h:
        (WebCore::TextRun::m_len):
        * platform/graphics/GraphicsContext.cpp:
        (WebCore::GraphicsContext::drawText):
        (WebCore::GraphicsContext::drawHighlightForText):
        * platform/graphics/GraphicsContext.h:
        * platform/mac/FontMac.mm:
        (WebCore::addDirectionalOverride):
        (WebCore::overrideLayoutOperation):
        (WebCore::ATSULayoutParameters::initialize):
        (WebCore::Font::selectionRectForComplexText):
        (WebCore::Font::drawComplexText):
        (WebCore::Font::floatWidthForComplexText):
        (WebCore::Font::offsetForPositionForComplexText):
        * platform/qt/FontQt.cpp:
        (WebCore::Font::drawComplexText):
        (WebCore::Font::floatWidthForComplexText):
        * platform/qt/TemporaryLinkStubs.cpp:
        (Font::selectionRectForComplexText):
        * rendering/EllipsisBox.cpp:
        (WebCore::EllipsisBox::paint):
        * rendering/InlineTextBox.cpp:
        (WebCore::InlineTextBox::selectionRect):
        (WebCore::InlineTextBox::paint):
        (WebCore::InlineTextBox::paintSelection):
        (WebCore::InlineTextBox::paintMarkedTextBackground):
        (WebCore::InlineTextBox::paintSpellingOrGrammarMarker):
        (WebCore::InlineTextBox::paintTextMatchMarker):
        (WebCore::InlineTextBox::offsetForPosition):
        (WebCore::InlineTextBox::positionForOffset):
        * rendering/RenderListMarker.cpp:
        (WebCore::RenderListMarker::paint):
        (WebCore::RenderListMarker::calcMinMaxWidth):
        (WebCore::RenderListMarker::getRelativeMarkerRect):
        * rendering/RenderMenuList.cpp:
        (WebCore::RenderMenuList::updateOptionsWidth):
        * rendering/RenderText.cpp:
        (WebCore::RenderText::widthFromCache):
        (WebCore::RenderText::width):

2007-03-31  Mitz Pettel  <mitz@webkit.org>

        Reviewed by Darin.

        - fix http://bugs.webkit.org/show_bug.cgi?id=13243
              <rdar://problem/5103226>
          REGRESSION (r20506): Repro crash/assert when using scroll wheel on a list box taller than its contents

        * platform/ScrollBar.cpp:
        (WebCore::Scrollbar::setValue): Cleaned up a little.
        (WebCore::Scrollbar::scroll): Changed to apply the minimum and maximum constraints
        in the right order, and cleaned up a little.

2007-03-31  Mitz Pettel  <mitz@webkit.org>

        Reviewed by Darin.

        - fix http://bugs.webkit.org/show_bug.cgi?id=13242
          REGRESSION: Repro crash when specifying the content property for an image

        Test: fast/images/text-content-crash.html

        * html/HTMLImageElement.cpp:
        (WebCore::HTMLImageElement::parseMappedAttribute): Added a check that the
        renderer is an image.
        (WebCore::HTMLImageElement::attach): Ditto.

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

        Reviewed by Darin.

        A more correct fix for http://bugs.webkit.org/show_bug.cgi?id=13129
        Bug 13129: Democracy Player dies in NSException from WebScriptObject on startup

        The previous attempt at a fix in r20343 attempted to conditionally expose the 'count'
        method.  It did not work which resulted in 'count' always being hidden.  This change
        disables -[WebScriptObject count] completely until it can be determined whether it is
        needed and how to support it without breaking third-party applications.

        * bindings/objc/WebScriptObject.mm:
        (-[WebScriptObject count]):
        * bindings/objc/WebScriptObjectPrivate.h:

2007-03-31  Nicholas Shanks  <webkit@nickshanks.com>

        Reviewed by Adele.

        http://bugs.webkit.org/show_bug.cgi?id=13184
        HTMLImageElement longdesc should be complete resolved URL

        Test: fast/dom/HTMLImageElement/image-longdesc-absolute-url.html

        * html/HTMLImageElement.cpp:
        (WebCore::HTMLImageElement::longDesc): Return absolute URL.
        Behaviour now matches Firefox and Opera.

2007-03-31  Mitz Pettel  <mitz@webkit.org>

        Reviewed by Hyatt.

        - fix http://bugs.webkit.org/show_bug.cgi?id=13209
          REGRESSION (r18756-18765): Incomplete list marker repaint when resizing list item

        Test: fast/repaint/list-marker-2.html

        A list marker can increase the horizontal overflow after layoutInlineChildren(),
        so made that function return only the vertical bounds of the repaint rect. As the
        horizontal bounds, made layoutBlock() just use the overflow bounds after layout.

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::layoutBlock):
        * rendering/RenderBlock.h:
        * rendering/bidi.cpp:
        (WebCore::RenderBlock::layoutInlineChildren):

2007-03-31  Mitz Pettel  <mitz@webkit.org>

        Reviewed by Hyatt.

        - http://bugs.webkit.org/show_bug.cgi?id=13178
          Helvetica zero-width space has non-zero width

        Test: fast/text/wide-zero-width-space.html

        * platform/FontData.cpp:
        (WebCore::FontData::FontData): Force the ZERO WIDTH SPACE glyph to have width
        0, unless the SPACE character maps to the same glyph.

2007-03-31  Mitz Pettel  <mitz@webkit.org>

        Reviewed by Darin.

        - fix http://bugs.webkit.org/show_bug.cgi?id=8016
          REPRO: Safari hangs loading 18 MB page (deeply nested DOM tree)

        Test: fast/tokenizer/lessthan-terminates-tags-and-attrs.html

        * html/HTMLTokenizer.cpp:
        (WebCore::HTMLTokenizer::parseTag): Made "<" terminate tag and attribute
        names. This matches Firefox.

2007-03-31  Alexey Proskuryakov  <ap@webkit.org>

        Debug build fix.

        * xml/XPathValue.cpp:
        (WebCore::XPath::): Define Value::adopt.

2007-03-30  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Darin.

        http://bugs.webkit.org/show_bug.cgi?id=13021
        XPath can be very slow

        This patch finally makes us faster than Firefox 2.0 on this test case.

        * xml/XPathFunctions.cpp:
        (WebCore::XPath::FunConcat::evaluate): Use a Vector buffer for faster appending.
        (WebCore::XPath::FunId::evaluate): Move the result NodeSet into Value instead of copying it.
        (WebCore::XPath::FunLocalName::evaluate): Cosmetic changes.
        (WebCore::XPath::FunNamespaceURI::evaluate): Ditto.
        (WebCore::XPath::FunName::evaluate): Ditto.
        (WebCore::XPath::FunNormalizeSpace::evaluate): Ditto.

        * xml/XPathValue.cpp:
        (WebCore::XPath::Value::toNodeSet):
        (WebCore::XPath::Value::modifiableNodeSet):
        (WebCore::XPath::Value::toBoolean):
        (WebCore::XPath::Value::toNumber):
        (WebCore::XPath::Value::toString):
        * xml/XPathValue.h:
        (WebCore::XPath::ValueData::ValueData):
        (WebCore::XPath::Value::Value):
        Made Value copying faster by putting large data members into a separate refcounted ValueData class.
        Added provisions for moving a NodeSet in and out of Value without copying.
        Made construction safer by moving bool version to a template constructor.
        Removed an (almost) unused default constructor.

        * xml/XPathPredicate.h: Store a Value for literal string and number expressions to avoid 
        constructing one each time.

        * xml/XPathPath.cpp:
        (WebCore::XPath::Filter::evaluate):
        (WebCore::XPath::LocationPath::evaluate):
        (WebCore::XPath::Path::evaluate):
        * xml/XPathPath.h:
        * xml/XPathPredicate.cpp:
        (WebCore::XPath::NumericOp::evaluate):
        (WebCore::XPath::Union::evaluate):
        * xml/XPathResult.cpp:
        (WebCore::XPathResult::snapshotItem):
        * xml/XPathStep.cpp:
        (WebCore::XPath::Step::evaluate):
        (WebCore::XPath::Step::nodesInAxis):
        * xml/XPathStep.h:
        Got rid of unnecessary NodeSet copying in many cases.

2007-03-30  Justin Garcia  <justin.garcia@apple.com>

        Reviewed by john

        <rdar://problem/5076323> Only one To Do can be created by a selection in a message

        When Mail's ToDoify operation called moveToEndOfDocument: 
        with a selection that started just before a ToDo, we'd 
        move them to the end of the document, not to the end
        of the editable root, because we incorrectly checked
        for the editability of positions before ToDos.  Then Mail
        would refuse to create a ToDo because the selection was 
        outside of the region where they allowed editing.

        * editing/SelectionController.cpp:
        (WebCore::SelectionController::modifyExtendingRightForward):
        Check the position for editability, not the position's node,
        since there are editable positions of the form [node, offset]
        where node is contenteditable=false.
        Re-use pos.  Nothing that happens after it's created can invalidate
        it or the position and affinity used to create it.
        (WebCore::SelectionController::modifyMovingRightForward): Ditto.
        (WebCore::SelectionController::modifyExtendingLeftBackward): Ditto.
        (WebCore::SelectionController::modifyMovingLeftBackward): Ditto.
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::paintCaret): Ditto.

2007-03-30  Adele Peterson  <adele@apple.com>

        Reviewed by Darin.

        Added DeleteWordBackward and DeleteWordForward to execCommand.

        * editing/Editor.cpp:
        (WebCore::execDeleteWordBackward):
        (WebCore::execDeleteWordForward):
        (WebCore::CommandEntry::):

2007-03-30  Simon Hausmann  <hausmann@kde.org>

        Reviewed by Zack

        * WebCore.pro: Fix release Qt builds.

2007-03-30  Antti Koivisto  <antti@apple.com>

        Reviewed by bdash.

        Spotted an int that should be float in previous patch.

        * platform/Font.cpp:
        (WebCore::WidthIterator::advance):

2007-03-30  Antti Koivisto  <antti@apple.com>

        Reviewed by Hyatt.

        Render tree memory savings, part 1
        
        - Eliminate caching of monospace char width from RenderText. This optimization is not needed
          anymore since Font already caches space width (RenderText -4 bytes)
        - Eliminate caching of tab width from RenderBlock. Similary this optimization has become
          obsolete (RenderBlock -4 bytes)

        * platform/Font.cpp:
        (WebCore::WidthIterator::advance):
        (WebCore::Font::spaceWidth):
        * platform/Font.h:
        (WebCore::Font::tabWidth):
        * platform/TextStyle.h:
        (WebCore::TextStyle::TextStyle):
        (WebCore::TextStyle::allowTabs):
        * rendering/InlineTextBox.cpp:
        (WebCore::InlineTextBox::selectionRect):
        (WebCore::InlineTextBox::paint):
        (WebCore::InlineTextBox::paintSelection):
        (WebCore::InlineTextBox::paintMarkedTextBackground):
        (WebCore::InlineTextBox::paintSpellingOrGrammarMarker):
        (WebCore::InlineTextBox::paintTextMatchMarker):
        (WebCore::InlineTextBox::offsetForPosition):
        (WebCore::InlineTextBox::positionForOffset):
        * rendering/RenderBlock.cpp:
        (WebCore:::RenderFlow):
        (WebCore::RenderBlock::setStyle):
        * rendering/RenderBlock.h:
        * rendering/RenderObject.cpp:
        * rendering/RenderObject.h:
        * rendering/RenderText.cpp:
        (WebCore::RenderText::RenderText):
        (WebCore::RenderText::setStyle):
        (WebCore::RenderText::widthFromCache):
        (WebCore::RenderText::trimmedMinMaxWidth):
        (WebCore::RenderText::calcMinMaxWidthInternal):
        (WebCore::RenderText::setTextInternal):
        (WebCore::RenderText::width):
        * rendering/RenderText.h:
        (WebCore::RenderText::allowTabs):
        * rendering/bidi.cpp:

2007-03-30  David Hyatt  <hyatt@apple.com>

        Fix (take 2) for bug 4334, flickering when floating elements gain/lose transparency.

        Reviewed by mitz

        * rendering/RenderBlock.cpp:
        * rendering/RenderBlock.h:
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::setStyle):

2007-03-29  Mitz Pettel  <mitz@webkit.org>

        Reviewed by Darin.

        - fix http://bugs.webkit.org/show_bug.cgi?id=13166
          REGRESSION (2005-10-16 - 2005-10-19): Ampersands showing up in the last column of the Gmail contacts table

        Test: fast/tokenizer/write-partial-entity.html

        * html/HTMLTokenizer.cpp:
        (WebCore::HTMLTokenizer::parseTag): Reordered to avoid resetting the buffer position
        after script execution which can write to the buffer.

2007-03-29  Justin Garcia  <justin.garcia@apple.com>

        Reviewed by john

        <rdar://problem/5099303> Deleting after a ToDo puts the caret in the wrong position
        
        We were failing to create the correct selection 
        for DeleteSelectionCommand because the selection extension 
        operations don't skip over non-editable content for editable 
        selections.

        * editing/SelectionController.cpp:
        (WebCore::SelectionController::modifyExtendingRightForward):
        When extending an editable selection, don't extend into
        non-editable content.
        (WebCore::SelectionController::modifyExtendingLeftBackward):
        Ditto.

2007-03-29  Patti Hoa  <patti@apple.com>

        Reviewed by harrison.

        <rdar://problem/4918397> Exception raise inspecting note contents in the background
        * WebCore.xcodeproj/project.pbxproj:
        * bridge/mac/WebCoreAXObject.mm:
        (-[WebCoreAXObject subrole]):
        (-[WebCoreAXObject title]):
        Check that attachment supports the attribute before requesting it.

2007-03-29  Justin Garcia  <justin.garcia@apple.com>

        Reviewed by john

        <rdar://problem/5032066> Delete should work between ToDos
        
        Stop selecting the table when the user attempts to delete
        the line break just after it, instead, extend the selection
        into the last table cell.
        Let deletion merge content into table cells (as long as 
        its not from another table cell).  
        Start calling shouldInsertNode:replacingDOMRange:givenAction: 
        when moving content with moveParagraphs, so that Mail can 
        modify content before it is moved into a ToDo during a delete.

        * editing/CompositeEditCommand.cpp:
        (WebCore::CompositeEditCommand::moveParagraphs): Ask the
        delegate before performing the move.  This will let Mail
        prevent styles from entering a ToDo.
        Added a FIXME about adding a new WebViewInsertAction
        * editing/DeleteSelectionCommand.cpp:
        (WebCore::DeleteSelectionCommand::initializePositionData):
        Allow merging into table cells from content not in a table.
        * editing/SelectionController.cpp:
        (WebCore::SelectionController::modifyExtendingRightForward):
        Don't select the table when extending by character/word from
        just before it.  This code was here to make it easier to select
        tables in order to delete them, but the deletion UI makes it 
        largely unnecessary.
        (WebCore::SelectionController::modifyExtendingLeftBackward):
        Ditto.
        * editing/TypingCommand.cpp:
        (WebCore::isFirstPositionAfterTable): Added.
        (WebCore::isLastPositionBeforeTable): Ditto.
        (WebCore::TypingCommand::deleteKeyPressed): When pressing
        the delete key with a caret at the beginning of a paragraph
        just after a table, move the paragraph into the last table
        cell.
        Do not do this if it would mean moving a block table.
        Removed some old irrelevant comments.
        * editing/htmlediting.cpp: Removed unused functions.
        * editing/htmlediting.h:

2007-03-29  Adam Treat  <adam@staikos.net>

        Reviewed and committed by George Staikos.

        Remove redundant line.

        * platform/qt/FontDataQt.cpp:
        (WebCore::FontData::platformInit):

2007-03-29  Adam Treat  <adam@staikos.net>

        Reviewed by David Hyatt, committed by George Staikos.

        Test: fast/text/justified-selection.html

        Take into account the entire run length to get a proper selection.

        * platform/Font.cpp:
        (WebCore::WidthIterator::WidthIterator):

2007-03-29  David Hyatt  <hyatt@apple.com>

        Fix for <rdar://problem/4545060>, technorati and arstechnica fail because of getComputedStyle not
        reporting display:none properly when it is set.  This is bugzilla bug 13103.

        Reviewed by mitz

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

2007-03-28  Oliver Hunt  <oliver@apple.com>

        Reviewed by Hyatt.

        Rename DocLoader::setPasteInProgress, etc to more generic 
        setAllowStaleResources, etc

        * editing/Editor.cpp:
        (WebCore::Editor::paste):
        * loader/DocLoader.cpp:
        (WebCore::DocLoader::DocLoader):
        (WebCore::DocLoader::checkForReload):
        * loader/DocLoader.h:
        (WebCore::DocLoader::setAllowStaleResources):
        * page/DragController.cpp:
        (WebCore::DragController::concludeDrag):

2007-03-28  Oliver Hunt  <oliver@apple.com>

        Reviewed by Anders and Steve.

        Add a flag to DocLoader to prevent it from reloading 
        when performing a paste or drop operation.
        
        Remove m_cachePolicy from CachedResource as it is never used
        
        Fixes rdar://problem/5044366 : REGRESSION: Repro ASSERT failures 
        dragging image into GMail message in _web_writeImage and 
        documentFragmentFromDragData

        * editing/Editor.cpp:
        (WebCore::Editor::paste):
          prevent the docloader from reloading resources on paste
        * html/HTMLImageLoader.cpp:
        (WebCore::HTMLImageLoader::updateFromElement):
        * loader/Cache.cpp:
        (WebCore::createResource):
        * loader/CachedCSSStyleSheet.cpp:
        (WebCore::CachedCSSStyleSheet::CachedCSSStyleSheet):
        * loader/CachedCSSStyleSheet.h:
        * loader/CachedImage.cpp:
        (WebCore::CachedImage::CachedImage):
        * loader/CachedImage.h:
        * loader/CachedResource.cpp:
        (WebCore::CachedResource::CachedResource):
        * loader/CachedResource.h:
        * 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::DocLoader):
           Tidy up constructor initialise new field
        (WebCore::DocLoader::checkForReload):
           Prevent reload when pasting
        * loader/DocLoader.h:
        (WebCore::DocLoader::setPasteInProgress):
          new field and setter
        * page/DragController.cpp:
        (WebCore::DragController::concludeDrag):
          prevent the docloader from reloading resources on drop

2007-03-27  Krzysztof Kowalczyk  <kkowalczyk@gmail.com>

        Not reviewed - fix typo in gdk build.

        * platform/gdk/ScrollViewGdk.cpp:
        (WebCore::ScrollView::contentsToWindow):

2007-03-28  Maciej Stachowiak  <mjs@apple.com>
        
        Reviewed by Darin.
        
        - fixed <rdar://problem/4820817> Autoscroll is broken in Mail.app (message jumps around when trying to select text)
                
        Handle scrolling external scrollviews around the webview during
        autoscroll or when scrolling into view.
        
        This should also restore performance on BenchJS test 6 lost due to Tim's partial fix.

        * page/FrameView.cpp:
        (WebCore::FrameView::scrollRectIntoViewRecursively):
        * page/FrameView.h:
        * platform/ScrollView.h:
        * platform/gdk/ScrollViewGdk.cpp:
        (WebCore::ScrollView::visibleContentRectConsideringExternalScrollers):
        (WebCore::ScrollView::scrollRectIntoViewRecursively):
        * platform/mac/ScrollViewMac.mm:
        (WebCore::ScrollView::visibleContentRect):
        (WebCore::ScrollView::visibleContentRectConsideringExternalScrollers):
        (WebCore::ScrollView::scrollRectIntoViewRecursively):
        (WebCore::ScrollView::updateContents):
        * platform/qt/ScrollViewQt.cpp:
        (WebCore::ScrollView::visibleContentRectConsideringExternalScrollers):
        (WebCore::ScrollView::scrollRectIntoViewRecursively):
        * platform/win/ScrollViewWin.cpp:
        (WebCore::ScrollView::visibleContentRectConsideringExternalScrollers):
        * platform/win/TemporaryLinkStubs.cpp:
        (WebCore::ScrollView::scrollRectIntoViewRecursively):
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::scrollRectToVisible):
       
2007-03-28  Jungshik Shin  <jungshik.shin@gmail.com>

        Reviewed  and landed by Darin

        Get rid of some misuses of |islower| and |tolower| for non-ASCII characters.
        http://bugs.webkit.org/show_bug.cgi?id=13138

        * platform/StringImpl.cpp:
        (WebCore::StringImpl::isLower):
        (WebCore::StringImpl::lower):
        (WebCore::StringImpl::equalIgnoringCase):

2007-03-28  Antti Koivisto  <antti@apple.com>

        Reviewed by Hyatt.

        Fix <rdar://problem/5092653>
        REGRESSION: Image decoding making scrolling slow
        
        If decoder gave back a null frame (which I think happens regularly if you don't have full frame 
        data yet for image that does not decode incrementally) m_decodedSize was incremented anyway. This
        led to massive growth in calculated image size and eventually made cache prune constantly. 
        
        No test, I don't know how to make one for this.

        * platform/graphics/BitmapImage.cpp:
        (WebCore::BitmapImage::cacheFrame):

2007-03-28  Adele Peterson  <adele@apple.com>

        Reviewed by Kevin M.

        WebCore part of fix for <rdar://problem/5095515> VitalSource Bookshelf should not pass return statements into stringByEvaluatingJavaScriptFromString

        * page/mac/WebCoreFrameBridge.mm: (-[WebCoreFrameBridge stringByEvaluatingJavaScriptFromString:forceUserGesture:]):
        Convert return value to a string.  This matches the behavior in Safari 2.0.

2007-03-28  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Darin.

        http://bugs.webkit.org/show_bug.cgi?id=13190
        XPath incorrectly handles namespaces on attributes

        * xml/XPathStep.cpp:
        (WebCore::XPath::Step::nodesInAxis): Added a special case for faster attribute lookup; gives a slight but 
        measurable performance improvement for bug 13021.
        (WebCore::XPath::Step::nodeMatches): Fixed NameTest for attribute nodes.

        * xml/XPathStep.h:
        (WebCore::XPath::Step::NodeTest::NodeTest):
        (WebCore::XPath::Step::NodeTest::namespaceURI):
        (WebCore::XPath::Step::nodeTest):
        (WebCore::XPath::Step::setNodeTest):
        Move m_namespaceURI to NodeTest, where it belongs. Removed unused m_nodeTestData (oops!).

        * xml/XPathGrammar.y:
        * xml/XPathPath.cpp:
        (WebCore::XPath::LocationPath::optimizeStepPair):
        Accounted for the above change.

2007-03-28  Oliver Hunt  <oliver@apple.com>

        rs=Hyatt.

        Rollout local changes :-/

        * loader/Cache.cpp:
        (WebCore::Cache::pruneAllResources):
        (WebCore::Cache::remove):

2007-03-28  Oliver Hunt  <oliver@apple.com>

        Reviewed by Hyatt.

        Roll out r20511 due to incredible badness

        * loader/Cache.cpp:
        (WebCore::Cache::pruneAllResources):
        (WebCore::Cache::remove):

2007-03-27  Oliver Hunt  <oliver@apple.com>

        Reviewed by Adam.

        Don't enforce text-selection drag delay when we are
        going to drag an image anyway.

        Fixes rdar://problem/4668935

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

2007-03-27  Justin Garcia  <justin.garcia@apple.com>

        Build fix
        
        * editing/markup.cpp:
        (WebCore::startMarkup):

2007-03-27  Justin Garcia  <justin.garcia@apple.com>

        Reviewed by darin
        
        <rdar://problem/5091898> REGRESSION: GMail Editor: A line of underlined text copied with Select All pastes with wrong font family
        
        createMarkup skipped elements if they were blocks
        when called from moveParagraphs (because that function 
        must receive only inline content).  This patch adds 
        code to inline these blocks instead of skipping them 
        so that we don't lose any of the style that they 
        contribute to the copied markup.

        * editing/markup.cpp:
        (WebCore::startMarkup): Add an inlineBlocks option.
        Make sure to overwrite display:block coming from
        a style sheet or the inline style declaration.
        (WebCore::createMarkup): Don't refuse to include a 
        specialCommonAncestor that's a block if we were asked 
        to include only inline content, since we can now inline 
        block elements in startMarkup.

2007-03-27  Adele Peterson  <adele@apple.com>

        Reviewed by Hyatt.

        Fix for <rdar://problem/5026141> REGRESSION: Aperture Viewer Flashes when switching from Index Page to Detail page in Web Gallery

        This disables the paint that occurs after WebCore finishes loading the document.  We should reenable this when we
        move the dispatchDidFinishLoad delegate callback to happen around the same time as the JS onload call.  See <rdar://problem/5092361>.

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

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

        Reviewed by darin
        
        <rdar://problem/5065910> REGRESSION: In Mail and GMail, Can't apply color to pasted line of text
        <rdar://problem/5084241> After deleting a paragraph of colored text, can't change text color
        <rdar://problem/5065605> REGRESSION: Text copied with Select All + Copy loses color on Paste
        <rdar://problem/4916887> GMAIL: Can't apply color to text once it becomes indented

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::CSSComputedStyleDeclaration::copyInheritableProperties):
        If a node's text fill color is invalid, then its children use 
        their font-color as their text fill color (they don't inherit 
        it).  Likewise for stroke color.

2007-03-27  Anders Carlsson  <acarlsson@apple.com>

        * platform/ScrollBar.h:
        Use wtf/MathExtras.h instead of math.h

2007-03-27  Zack Rusin  <zrusin@trolltech.com>

        Fix the compile - when using math.h functions
        actually include the header with them.

        * platform/ScrollBar.h:

2007-03-27  Oliver Hunt  <oliver@apple.com>

        Reviewed by Maciej.

        The WebArchiver needs all the subresources of a document to be accessible
        through the DocLoader, so we can't remove a CachedResource simultaneously
        from the global Cache and all DocLoaders, just because it needs to be 
        reloaded in one.

        Fixes rdar://problem/5044366

        * loader/Cache.cpp:
        (WebCore::Cache::remove):
           Don't evict the resource from all DocLoaders
        * manual-tests/test-iframes-loading-the-same-resource.html: Added.
           Alas it wasn't possible to make a nice layout test, even this manual test
           is not entirely deterministic

2007-03-27  Mark Rowe  <mrowe@apple.com>

        Build fix.

        * platform/GlyphBuffer.h:
        (WebCore::GlyphBuffer::clear):

2007-03-27  Dave Hyatt  <hyatt@apple.com>

        Add support for glyph offsets to the GlyphBuffer.
       
        Reviewed by olliej

        * platform/Font.cpp:
        (WebCore::Font::drawGlyphBuffer):
        * platform/GlyphBuffer.h:
        (WebCore::GlyphBuffer::clear):
        (WebCore::GlyphBuffer::swap):
        (WebCore::GlyphBuffer::offsetAt):
        (WebCore::GlyphBuffer::add):

2007-03-27  Antti Koivisto  <antti@apple.com>

        Keep buildbot happy.

        * platform/mac/PlatformScrollBarMac.mm:
        (WebCore::PlatformScrollbar::scrollbarHit):

2007-03-26  Antti Koivisto  <antti@apple.com>

        Reviewed by Darin.
        
        On Mac, support fine grained wheel events generated by trackpad and Mighty Mouse.
        http://bugs.webkit.org/show_bug.cgi?id=13134
        <rdar://problem/5076249?

        * WebCore.exp:
            Export _wkGetWheelEventDeltas
        * page/EventHandler.cpp:
        (WebCore::EventHandler::handleWheelEvent):
            Remove (0, 0) scroll event hack, it is not needed anymore.
            Do per-pixel scrolling for fine grained events.
        * platform/PlatformWheelEvent.h:
        (WebCore::PlatformWheelEvent::isContinuous):
            Add new m_isContinuous boolean to indicate fine grained wheel events.
        * platform/ScrollBar.cpp:
        (WebCore::Scrollbar::Scrollbar):
        (WebCore::Scrollbar::setValue):
        (WebCore::Scrollbar::setSteps):
        (WebCore::Scrollbar::scroll):
        * platform/ScrollBar.h:
        (WebCore::Scrollbar::value):
            Use float to represent current position to support finer grained scrolling.
            Add ScrollByPixel, remove ScrollByWheel (which was same as ScrollByLine anyway)
        * platform/ScrollTypes.h:
        (WebCore::):
        * platform/gdk/WheelEventGdk.cpp:
        (WebCore::PlatformWheelEvent::PlatformWheelEvent):
            Initalize m_isContinuous
        * platform/mac/WebCoreSystemInterface.h:
        * platform/mac/WebCoreSystemInterface.mm:
            Add wkGetWheelEventDeltas for getting fine grained wheel events
        * platform/mac/WheelEventMac.mm:
        (WebCore::PlatformWheelEvent::PlatformWheelEvent):
            Get the wheel deltas using new wkGetWheelEventDeltas interface
        * platform/qt/WheelEventQt.cpp:
        (WebCore::PlatformWheelEvent::PlatformWheelEvent):
            Initalize m_isContinuous
        * rendering/RenderListBox.cpp:
        (WebCore::RenderListBox::calcHeight):
            Pass item height to scrollbar

2007-03-26  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Darin Adler.

        Fixed <rdar://problem/5088234> REGRESSION: Crash occurs at WebCore::Node::
        createRendererIfNeeded() when changing map views with MS Virtual Earth 
        (http://www.ziprealty.com/)
        
        The cause of the crash was the insertion of a <script> element whose
        script removed it from the document. The <script> element would then be 
        garbage when the insertion routine went on to attach() it.
        
        The solution here is to check that an element is still your child before
        trying to attach() it. This matches the style of checks we do elsewhere
        in the node insertion and removal code.

        * dom/ContainerNode.cpp:
        (WebCore::ContainerNode::insertBefore):
        (WebCore::ContainerNode::replaceChild):
        (WebCore::ContainerNode::appendChild):

2007-03-26  David Carson  <dacarson@gmail.com>

        Reviewed by Darin, landed by Anders.

        Manual test case for: REGRESSION (r19559): Java applet crash
        http://bugs.webkit.org/show_bug.cgi?id=13142
        <rdar://problem/5080340>

        * manual-tests/liveconnect-applet-get-boolean.html: Added.
        * manual-tests/resources/CheckerApplet.class: Added.
        * manual-tests/resources/CheckerApplet.java: Added.

2007-03-26  Mitz Pettel  <mitz@webkit.org>

        Reviewed and landed by Darin.

        - fix http://bugs.webkit.org/show_bug.cgi?id=13194
          <rdar://problem/5087738>
          REGRESSION: Selection rects are wrong for images in search results from images.google.com

        Test: fast/replaced/selection-rect-in-table-cell.html

        * rendering/RenderReplaced.cpp:
        (WebCore::RenderReplaced::selectionRect):

2007-03-26  Geoffrey Garen  <ggaren@apple.com>

        Removed now-stale #includes of <assert.h>.
        
        * WebCorePrefix.h:
        * config.h:
        * css/CSSGrammar.y:
        * platform/Arena.cpp:
        * platform/KURL.cpp:
        * platform/SegmentedString.h:
        * rendering/DataRef.h:
        * rendering/RenderArena.cpp:

2007-03-26  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Kevin McCulough.

        Global replace of "assert(" with "ASSERT(" to assist debugging. Removed
        one instance of commented-out code containing "assert(" instead of replacing it.

2007-03-25  Antti Koivisto  <antti@apple.com>

        Reviewed by Adam.

        Fix <rdar://problem/5049842>
        Gmail Editor: Dragging message text in the message body results in a crash at WebCore::Frame::eventHandler()

        Null check frame in m_dragTarget, it might be gone already.

        * page/EventHandler.cpp:
        (WebCore::EventHandler::updateDragAndDrop):
        (WebCore::EventHandler::cancelDragAndDrop):
        (WebCore::EventHandler::performDragAndDrop):

2007-03-25  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Darin.

        A partial fix for http://bugs.webkit.org/show_bug.cgi?id=13021
        XPath can be very slow

        * xml/XPathExpression.cpp:
        (WebCore::XPathExpression::evaluate): Reset a reference to the context node, as this may prevent the whole document
        from being destroyed in time.

        * dom/Attr.cpp:
        (WebCore::Attr::createTextChild): Instead of calling appendChild(), just do the few operations it really needs to perform.
        * dom/ContainerNode.h:
        (WebCore::ContainerNode::fastSetFirstChild):
        (WebCore::ContainerNode::fastSetLastChild):
        Added operations that let Attr hack internal ContainerNode data (evil, but fast!).

        * xml/XPathStep.cpp:
        (WebCore::XPath::Step::evaluate):
        (WebCore::XPath::Step::nodesInAxis):
        (WebCore::XPath::Step::nodeMatches):
        * xml/XPathStep.h:
        Merged node testing into axis enumeration. This saves a lot of Vector resizing and passing, and is necessary for future 
        optimizations (sometimes, we can just pick the single result node instead of enumerating and filtering the whole axis).

2007-03-24  Mitz Pettel  <mitz@webkit.org>

        Reviewed by Darin.

        - fix http://bugs.webkit.org/show_bug.cgi?id=13156
          REGRESSION (r19621): Pasting breakable content where wrapped line is too long to fit in a textarea fails to draw a horizontal scrollbar

        Test: fast/text/midword-break-after-breakable-char.html

        Breaking in the middle of the word
        is allowed only if no breaking opportunity between words has occurred yet. The
        first position on the line should not be considered "between words" even if
        it is a breaking opportunity.
        
        * rendering/bidi.cpp:
        (WebCore::RenderBlock::findNextLineBreak): Changed according to the above. Also
        cleaned up a couple of lines.

2007-03-24  David Hyatt  <hyatt@apple.com>

        Fix for bugzilla bug 13187, place a hard limit on the amount of decoded data that WebCore will keep
        around even on live pages (pages being displayed in tabs/windows or in the back/forward cache).
        Images will decode to paint and once the decoded data exceeds the cache size, the decoded data will be
        tossed.

        Refine the flushing algorithm to apply the two-pass decode/evict model to each LRU-SP queue individually, rather
        than to all the lists at once.  This allows the cache to evict large encoded resources before flushing small
        or frequently accessed decoded onces.

        Added information on live/decoded data to the cache statistics.

        Reviewed by darin

        * loader/Cache.cpp:
        (WebCore::Cache::Cache):
        (WebCore::Cache::pruneLiveResources):
        (WebCore::Cache::pruneAllResources):
        (WebCore::Cache::setMaximumSize):
        (WebCore::Cache::remove):
        (WebCore::Cache::lruListFor):
        (WebCore::Cache::removeFromLRUList):
        (WebCore::Cache::insertInLRUList):
        (WebCore::Cache::liveLRUListFor):
        (WebCore::Cache::removeFromLiveResourcesList):
        (WebCore::Cache::insertInLiveResourcesList):
        (WebCore::Cache::addToLiveResourcesSize):
        (WebCore::Cache::removeFromLiveResourcesSize):
        (WebCore::Cache::adjustSize):
        (WebCore::Cache::getStatistics):
        * loader/Cache.h:
        (WebCore::Cache::TypeStatistic::TypeStatistic):
        * loader/CachedImage.cpp:
        (WebCore::CachedImage::decodedSizeWillChange):
        (WebCore::CachedImage::decodedSizeChanged):
        * loader/CachedImage.h:
        * loader/CachedResource.cpp:
        (WebCore::CachedResource::CachedResource):
        (WebCore::CachedResource::ref):
        (WebCore::CachedResource::deref):
        (WebCore::CachedResource::setEncodedSize):
        (WebCore::CachedResource::liveResourceAccessed):
        * loader/CachedResource.h:
        (WebCore::CachedResource::liveAccessCount):
        (WebCore::CachedResource::resetLiveAccessCount):
        (WebCore::CachedResource::increaseLiveAccessCount):
        * platform/graphics/BitmapImage.cpp:
        (WebCore::BitmapImage::destroyDecodedData):
        (WebCore::BitmapImage::cacheFrame):
        * platform/graphics/ImageObserver.h:
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::paintBackgroundExtended):
        * rendering/RenderImage.cpp:
        (WebCore::RenderImage::paint):
        * rendering/RenderListMarker.cpp:
        (WebCore::RenderListMarker::paint):
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::paintBorderImage):

2007-03-24  Darin Adler  <darin@apple.com>

        Reviewed by Mitz.

        - fix http://bugs.webkit.org/show_bug.cgi?id=13123
          CSS selectors that use :lang, :not, and namespaces do not serialize correctly

        Test: fast/css/css-selector-text.html

        * css/CSSSelector.cpp: (WebCore::CSSSelector::selectorText): Add the namespace
        prefix for tag or attribute names, the sub-selector for :not, and the argument
        for :lang.

2007-03-24  Brady Eidson  <beidson@apple.com>

        Reviewed by Adam

        <rdar://problem/5086210> - Move RetainPtr to WTF

        * ForwardingHeaders/wtf/RetainPtr.h: Added.
        * WebCore.xcodeproj/project.pbxproj: Removed WebCore/RetainPtr.h
        
        * history/HistoryItem.h: Changed #include to <wtf/RetainPtr.h>
        * history/PageCache.h: Ditto
        * page/mac/WebCoreFrameBridge.mm: Ditto
        * platform/ContextMenu.h: Ditto
        * platform/ContextMenuItem.h: Ditto
        * platform/DragImage.h: Ditto
        * platform/FileChooser.h: Ditto
        * platform/PlatformKeyboardEvent.h: Ditto
        * platform/PopupMenu.h: Ditto
        * platform/SharedBuffer.h: Ditto
        * platform/cf/RetainPtr.h: Removed.
        * platform/graphics/Icon.h: Changed #include
        * platform/mac/ClipboardMac.h: Ditto
        * platform/mac/PasteboardMac.mm: Ditto
        * platform/mac/WidgetMac.mm: Ditto
        * platform/network/AuthenticationChallenge.h: Ditto
        * platform/network/ResourceError.h: Ditto
        * platform/network/ResourceHandle.h: Ditto
        * platform/network/ResourceRequest.h: Ditto
        * platform/network/ResourceResponse.h: Ditto
        * rendering/RenderThemeMac.mm: Ditto

2007-03-24  Mitz Pettel  <mitz@webkit.org>

        Fix for <rdar://problem/5086797>, layoutPending is now reporting incorrect results, which will lead
        to all sorts of layout issues.  This is in bugzilla as 13179.

        Reviewed by hyatt

        - fix http://bugs.webkit.org/show_bug.cgi?id=13179
          REGRESSION (r20410): In debug builds, loading a certain page is suspended until redisplay is forced

        Moved the root->needsLayout() check from layoutPending() to needsLayout()
        to restore the behavior before r20324.

        * page/FrameView.cpp:
        (WebCore::FrameView::layoutPending):
        (WebCore::FrameView::needsLayout):

2007-03-24  Mitz Pettel  <mitz@webkit.org>

        Reviewed by Adele.

        - fix http://bugs.webkit.org/show_bug.cgi?id=13180
              <rdar://problem/5084478>
          Another debug build crash from ASSERTION FAILED: !needsLayout()

        No test possible because updateRendering() is always called after script
        execution.

        * page/FrameView.cpp:
        (WebCore::FrameView::layout): Get the layout root after calling recalcStyle()
        since a style recalc may result in needing to do start layout at the root.

2007-03-24  Nikolas Zimmermann  <zimmermann@kde.org>

        Not reviewed. Build fix.

        Fix FloatRect vs. IntRect confusion.

        * rendering/RenderSVGImage.cpp:
        (WebCore::RenderSVGImage::nodeAtPoint):

2007-03-25  Mark Rowe  <mrowe@apple.com>

        Fix incorrect radar number.

        * platform/network/mac/ResourceHandleMac.mm:
        (-[WebCoreResourceHandleAsDelegate connection:willCacheResponse:]):

2007-03-23  Nikolas Zimmermann  <zimmermann@kde.org>

        Reviewed by Oliver.

        Fix all known RenderSVGImage problems.

        Fixes: http://bugs.webkit.org/show_bug.cgi?id=12126 (RenderSVGImage seems to suffer from integer overflow)
        Fixes: http://bugs.webkit.org/show_bug.cgi?id=12442 (raster images disappearing during script execution (SVG))
        Fixes: http://bugs.webkit.org/show_bug.cgi?id=12572 (WebKit does not properly invalidate image region after image load)

        Added test: svg/custom/scrolling-embedded-svg-file-image-repaint-problem.html

        In RenderSVGImage::paint, do not call shouldPaint() as this will never work properly for SVG renderers, as shouldPaint
        doesn't take into account any special SVG transformation (localTransform/absoluteTransform). Just remove the call.

        Fix hit detection on RenderSVGImage - it didn't work properly at all. No idea why I didn't notice before.
        Thanks Andreas Neumann once again for writing excellent bug reports and pointing me to them :-)

        The carto.net navigation tools work as expected now, and also the "dock like" image effect example.

        * rendering/RenderSVGImage.cpp:
        (WebCore::RenderSVGImage::paint):
        (WebCore::RenderSVGImage::nodeAtPoint):

2007-03-24  Mitz Pettel  <mitz@webkit.org>

        Reviewed by Dave Hyatt.

        - http://bugs.webkit.org/show_bug.cgi?id=13177
          Suppress control characters in the ATSUI code path

        * platform/mac/FontMac.mm:
        (WebCore::overrideLayoutOperation):
        (WebCore::ATSULayoutParameters::initialize):

2007-03-24  David Hyatt  <hyatt@apple.com>

        Fix for <rdar://problem/5086400>, images scrolled offscreen continue to animate.  Safari 2 would
        halt animations when images were no longer visible.

        Reviewed by mjs, olliej

        * platform/graphics/BitmapImage.cpp:
        (WebCore::BitmapImage::advanceAnimation):

2007-03-24  David Hyatt  <hyatt@apple.com>

        Fix for <rdar://problem/508328>, sluggish text entry in search field.  Make sure
        our size actually changed before we decide to do a full repaint because of background/border
        complexities.

        Reviewed by aroben

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

2007-03-23  Dave Hyatt  <hyatt@apple.com>

        Fix for <rdar://problem/5048219>, spurious glyphs in gmail.   This is bugzilla bug 13136, which
        will remain open to cover patching the complex text path.
        
        Reviewed by aroben

        * platform/Font.cpp:
        (WebCore::Font::glyphDataForCharacter):
        * platform/Font.h:
        (WebCore::Font::treatAsZeroWidthSpace):
        * platform/GlyphPageTreeNode.cpp:
        (WebCore::GlyphPageTreeNode::initializePage):

2007-03-23  Mitz Pettel  <mitz@webkit.org>

        Reviewed by Adele.

        - fix http://bugs.webkit.org/show_bug.cgi?id=13153
          REGRESSION: Visual highlighting of pre-populated blank line in textarea is broken

        - fix a bug where selecting across a soft line break did not highlight to
          the end of the first line if it contained skipped whitespace

        Test: fast/text/selection-hard-linebreak.html

        * rendering/InlineTextBox.cpp:
        (WebCore::InlineTextBox::selectionState): Changed to treat a selection that ends on the
        end of a hard line break as if it ends after the line break. Fixed the case of a selection
        that starts and ends in the same text object as the box but does not intersect it
        to return SelectionNone instead of selectionBoth.

2007-03-23  Mitz Pettel  <mitz@webkit.org>

        Reviewed by Adele.

        - fix http://bugs.webkit.org/show_bug.cgi?id=13124
          REGRESSION: Reproducible crash in Widget::getView

        Test: fast/frames/hover-timer-crash.html

        * page/Frame.cpp:
        (WebCore::Frame::setView): Added a call to EventHandler::clear().

2007-03-23  Justin Garcia  <justin.garcia@apple.com>

        Reviewed by adele

        <rdar://problem/5078739> 
        Crash in in ReplaceSelectionCommand if the fragment contains only a style span

        * editing/ReplaceSelectionCommand.cpp:
        (WebCore::ReplaceSelectionCommand::doApply): Check 
        for an empty fragment after removing a redundant
        style span instead of before.

2007-03-23  David Hyatt  <hyatt@apple.com>

        <rdar://problem/5085063>

        Fix non-looping animation on cuteoverload.com. Just always flush
        decoded data for large animated images to avoid our cache getting
        out of sync with the image source.

        Reviewed by ggaren

        * platform/graphics/BitmapImage.cpp:
        (WebCore::BitmapImage::advanceAnimation):

2007-03-23  Adele Peterson  <adele@apple.com>

        Reviewed by Darin.

        Fix for <rdar://problem/5061024> REGRESSION: Returning false from onkeypress event on Input is ignored when key is Tab
        http://bugs.webkit.org/show_bug.cgi?id= 13020

        No known way to add a layout test for this.  We would need a way to know exactly how the event was consumed.

        * page/EventHandler.cpp: (WebCore::EventHandler::defaultKeyboardEventHandler):
          If the keypress event has its default behavior prevented, then we should consider the keydown event handled.

2007-03-23  Justin Garcia  <justin.garcia@apple.com>

        Reviewed by darin

        <rdar://problem/5080333> 
        REGRESSION: Selection changes when changing the alignment of an image
        
        Regression occurred when we started using moveParagraphs
        to move content in applyBlockStyle.  moveParagraphs 
        moves by copying, deleting and reinserting content, and
        so must be accompanied by selection preservation code.
        That code uses rangeFromLocationAndLength and rangeLength,
        which use TextIterators, which don't emit anything for images 
        and other replaced elements, causing this bug.

        * editing/ApplyStyleCommand.cpp:
        (WebCore::ApplyStyleCommand::applyBlockStyle): Ask rangeLength 
        and rangeFromLocationAndLength to request that their
        TextIterators emit spaces for replaced elements.
        Use rangeCompliantEquivalent()s when creating a Range from
        VisiblePositions, since some VisiblePositions have illegal
        deepEquivalent()s.
        * editing/CompositeEditCommand.cpp:
        (WebCore::CompositeEditCommand::moveParagraphs): Ditto.
        * editing/TextIterator.cpp:
        (WebCore::TextIterator::TextIterator):
        (WebCore::TextIterator::handleReplacedElement): Emit
        a space if requested.
        (WebCore::TextIterator::representNodeOffsetZero): Emit
        ranges before m_node, not around m_lastTextNode.  These
        ranges should represent the part of the document associated
        with the emitted character. 
        (WebCore::TextIterator::rangeLength): Take in the new bool.
        (WebCore::TextIterator::rangeFromLocationAndLength): Ditto.
        Also, don't loop an extra time after finding the end of the
        range when we're looking for zero length ranges.  This appeared
        to be a workaround for the bugs fixed in representNodeOffsetZero
        in this patch.
        * editing/TextIterator.h:

2007-03-24  Mark Rowe  <mrowe@apple.com>

        Rubber-stamped by Darin.

        * Configurations/WebCore.xcconfig: Remove unnecessary INFOPLIST_PREPROCESS.

2007-03-23  Darin Adler  <darin@apple.com>

        * html/HTMLBodyElement.cpp: Fix comment typo.

2007-03-23  Adam Treat  <adam@staikos.net>

        Reviewed and committed by George.

        Patch from Adam Treat to make the Qt build work without SVG and XSLT.
        XMLNames is required in any case.

        * WebCore.pro:

2007-03-23  Darin Adler  <darin@apple.com>

        Reviewed by Hyatt.

        - <rdar://problem/5074439> handle margins on frame and iframe elements
          without involving FrameView, FrameLoader, etc.

        * html/HTMLBodyElement.cpp: (WebCore::HTMLBodyElement::insertedIntoDocument):
        Grab the margin from the frame directly here. There was no real benefit
        to doing this via FrameView. Later we can delete quite a bit of unneeded code
        here and in WebKit that exists only to set up the margin values in FrameView,
        which are now unused.

2007-03-23  Adele Peterson  <adele@apple.com>

        Reviewed by Darin.

        Fix for <rdar://problem/5080428> REGRESSION: getting value for hidden input element fails after the fix for Bug 11866
        http://bugs.webkit.org/show_bug.cgi?id=13121

        Rolled out the change for 11866 that made hidden input elements store the value separately from the value attribute.
        Added an m_originalValue field that gets set when the element is done being parsed (in closeRenderer).  In reset,
        use the m_originalValue for hidden input elements.

        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::closeRenderer):
        (WebCore::HTMLInputElement::reset):
        (WebCore::HTMLInputElement::setValue):
        (WebCore::HTMLInputElement::storesValueSeparateFromAttribute):
        * html/HTMLInputElement.h:

2007-03-23  Mitz Pettel  <mitz@webkit.org>

        Reviewed by Dave Hyatt.

        - fix http://bugs.webkit.org/show_bug.cgi?id=13157
              <rdar://problem/5083995>
          List markers positioned incorrectly and don't repaint properly on Oxford homepage

        Test: fast/lists/marker-image-error.html

        * rendering/RenderListMarker.cpp:
        (WebCore::RenderListMarker::imageChanged): Mark ourselves for relayout if
        the image failed to load, since that means we will use a bullet instead.

2007-03-23  Zack Rusin  <zrusin@trolltech.com>

        Fix the compile.

        * platform/graphics/qt/ImageSourceQt.cpp:

2007-03-22  Dave Hyatt  <hyatt@apple.com>

        Fix for <rdar://problem/5083072>.

        * page/Frame.cpp:
        (WebCore::Frame::setPrinting):
        (WebCore::Frame::forceLayoutWithPageWidthRange):
        * page/Frame.h:
        * page/mac/WebCoreFrameBridge.mm:
        (-[WebCoreFrameBridge forceLayoutWithMinimumPageWidth:maximumPageWidth:adjustingViewSize:]):

2007-03-22  Anders Carlsson  <acarlsson@apple.com>

        Reviewed by Ada.

        <rdar://problem/5074974>
        CrashTracer: [USER] repro crash in Safari at com.apple.WebCore: WebCore::FrameLoader::activeDocumentLoader const + 6
        
        * loader/mac/NetscapePlugInStreamLoaderMac.mm:
        (WebCore::NetscapePlugInStreamLoader::didReceiveResponse):
        Don't use ResourceResponse:isHTTP here since that only looks at the protocol instead of if the response came from a 
        HTTP server (and not a web archive).

2007-03-22  Krzysztof Kowalczyk  <kkowalczyk@gmail.com>

        Not reviewed - gdk build fix.

        * platform/graphics/cairo/ImageSourceCairo.cpp:

2007-03-22  Dave Hyatt  <hyatt@apple.com>

        Fix for <rdar://problem/5083473>.  Make sure wheeling still forwards to the frame view even
        when no node is hit.  Technically not ever hitting a node is a regression from the RenderView
        size changes (making it be the size of the initial containing block according to CSS2.1), but
        we should still handle this case gracefully in case it comes up again.
       
        Reviewed by olliej

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

2007-03-22  Justin Garcia  <justin.garcia@apple.com>

        Reviewed by kevin

        <rdar://problem/5081257> 
        REGRESSION: New Mail signatures start out empty

        * editing/VisiblePosition.cpp:
        (WebCore::VisiblePosition::canonicalPosition): Allow
        descent from positions inside the document into an 
        editable body.

2007-03-22  Brady Eidson  <beidson@apple.com>

        Reviewed by Adele and John

        <rdar://5043528> - Prepare for new API
        
        * platform/network/ResourceHandle.cpp:
        (WebCore::ResourceHandle::clearAuthentication): Clear CF type

2007-03-22  Beth Dakin  <bdakin@apple.com>

        Patch by Hyatt, reviewed and committed by me.

        Does not reproduce consistently, so a layout test does not seem 
        possible.

        Fix for <rdar://problem/5082421> Constantly hitting ASSERT(!
        needsLayout()) in RenderView::paint()

        * page/FrameView.cpp:
        (WebCore::FrameView::layoutPending): It is not enough to ask if the 
        layout timer is active. There may be times that we don't have a 
        body yet so we cannot schedule layout yet, but the root still needs 
        layout.  

2007-03-22  John Sullivan  <sullivan@apple.com>

        Reviewed by Darin
        
        Followup for recent fix to 5079700, found by assertion added to Safari.

        * page/mac/FrameMac.mm:
        (WebCore::Frame::searchForLabelsBeforeElement):
        Fixed another place in this method where an empty NSString was being returned instead of nil.
        Cleaned up the style a little too.

2007-03-22  David Hyatt  <hyatt@apple.com>

        Remove unnecessary destroyFrameAtIndex call.  Now that we throw away
        the image source, it is no longer needed.

        Reviewed by beth

        * platform/graphics/BitmapImage.cpp:
        (WebCore::BitmapImage::destroyDecodedData):

2007-03-22  David Harrison  <harrison@apple.com>

        Reviewed by Geoff, Darin.

        <rdar://problem/5077892> In RapidWeaver 3.5.1, a crash occurs when attempting to load Safari Bookmarks in iMedia Browser
        
        * platform/mac/ThreadCheck.mm:
        (WebCore::_WebCoreThreadViolationCheck):
        Change default on Tiger to NSLog rather than raise an exception.

2007-03-22  Darin Adler  <darin@apple.com>

        Reviewed by Brady.

        - use binary_search instead of hash table; slightly better performance and
          less memory use

        * platform/network/ResourceHandle.cpp: (WebCore::ResourceHandle::portAllowed):
        Use binary_search.

2007-03-22  Darin Adler  <darin@apple.com>

        Reviewed by Adele.

        - fix <rdar://problem/5074630> detachChildren call should move from WebKit to WebCore

        * loader/FrameLoader.cpp: (WebCore::FrameLoader::setDocumentLoader):
        Add a call to detachChildren() after the call to prepareForDataSourceReplacement().
        There was no reason for this crucial loading step to be left to the client.

2007-03-22  David Hyatt  <hyatt@apple.com>

        Minor refactoring and cleanup of the bridge calls that want to control layout settings on the RenderView.
        Have the bridge talk through the FrameView instead of just asking for the RenderView directly.

        Add an assert to help catch situations where the RenderView needs layout at paint time, since this is a known
        catastrophic scenario that will (much of the time) result in a crash in RenderTableSection::paint.

        Reviewed by aroben

        * page/FrameView.cpp:
        (WebCore::FrameView::adjustViewSize):
        (WebCore::FrameView::needsLayout):
        (WebCore::FrameView::setNeedsLayout):
        * page/FrameView.h:
        * page/mac/WebCoreFrameBridge.mm:
        (-[WebCoreFrameBridge needsLayout]):
        (-[WebCoreFrameBridge setNeedsLayout]):
        * rendering/RenderView.cpp:
        (WebCore::RenderView::paint):

2007-03-21  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Beth Dakin.
        
        Re-worked the fix in r20375. 'M' and 'm' are not the only commands that
        accept "extra" coordinates -- virtually all commands accept them.

        * ksvg2/svg/SVGParserUtilities.cpp:
        (WebCore::SVGPathParser::parseSVG):

2007-03-21  David Harrison  <harrison@apple.com>

        Reviewed by hyatt.

        <rdar://problem/5072460> CrashTracer: [USER] 1 crashes in Xcode at com.apple.ImageIO.framework: getBandProcPNG + 168

        An NSData object was being alloc/init'd, then returned callers who cast the pointer as a
        CFDataRef, including calling CFRelease on it. The problem is that under garbage collection, the NS
        retain count is ignored (it's always 0), but the CFRetain and CFRelease are not ignored. This
        caused the object to be over-released. The solution that works in both GC and non-GC is to "transfer"
        the initial NS retain count to the CF retain count, using HardRetainWithNSRelease.
        
        The creator of the NSData was SharedBuffer::createNSData. The callers were PDFDocumentImage::dataChanged()
        and ImageSource::setData(). This particular crash involved the ImageSource::setData() case.

        * platform/SharedBuffer.h:
        Declare createCFData().
        
        * platform/graphics/cg/ImageSourceCG.cpp:
        (WebCore::ImageSource::setData):
        Call createCFData instead of createNSData.
        
        * platform/graphics/cg/PDFDocumentImage.cpp:
        (WebCore::PDFDocumentImage::dataChanged):
        Call createCFData instead of createNSData.
        
       * platform/mac/SharedBufferMac.mm:
        (WebCore::SharedBuffer::createCFData):
        Implement createCFData(). Use HardRetainWithNSRelease for gc safety.
        
2007-03-21  Mitz Pettel  <mitz@webkit.org>

        Reviewed by Darin.

        - fix http://bugs.webkit.org/show_bug.cgi?id=13145
          Regression: Scrollbar not resizing after display none

        Test: fast/dynamic/view-overflow.html

        * rendering/RenderView.cpp:
        (WebCore::RenderView::layout): Reset overflowHeight() and overflowWidth()
        before calling docHeight() and docWidth(), since the former act as a lower
        bound for the latter.

2007-03-21  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Beth Dakin.
        
        A little cleanup based work I've been doing on the SVG parsers.

        * ksvg2/svg/SVGParserUtilities.h:
        (WebCore::skipString):
        * ksvg2/svg/SVGPreserveAspectRatio.cpp: Moved checkString into
        SVGParserUtilities.h, so it could be with all its friends. Renamed 
        "checkString" to "skipString" to match the rest of the code and to be 
        clear about which functions move the buffer pointer.
        (WebCore::SVGPreserveAspectRatio::parsePreserveAspectRatio):
        * ksvg2/svg/SVGTransformable.cpp:
        (WebCore::SVGTransformable::parseTransformAttribute): Changed gotos into 
        returns. Removed unnecessary magic number.

2007-03-21  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Beth Dakin.
        
        Fixed <rdar://problem/5078471> SVG rgb color parser runs past end of 
        buffer when running fuzzing test

        * ksvg2/svg/SVGColor.cpp:
        (WebCore::parseNumberOrPercent): Check for past the end condition.
        (WebCore::SVGColor::colorFromRGBColorString): Reversed "read past end
        of buffer, then check if you're past the end" logic.

2007-03-21  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Beth Dakin.
        
        Fixed <rdar://problem/5079410> SVG path parser hangs, exhausts memory when 
        running fuzzer test

        * ksvg2/svg/SVGParserUtilities.cpp:
        (WebCore::SVGPathParser::parseSVG): Don't assume that extra digits are
        always preceded by an 'M' or an 'm'.

2007-03-21  John Sullivan  <sullivan@apple.com>

        Reviewed by Adam
        
        - fixed <rdar://problem/5079700> REGRESSION (r19702): Name/password aren't autofilled 
          or saved for .Mac homepage login

        * page/mac/FrameMac.mm:
        (WebCore::Frame::searchForLabelsBeforeElement):
        don't count empty strings as valid results

2007-03-21  Justin Garcia  <justin.garcia@apple.com>

        Reviewed by darin

        * editing/markup.cpp:
        (WebCore::styleFromMatchedRulesAndInlineDecl): 
        Release the RefPtr to avoid increasing/decreasing
        the refcount unnecessarily.
        (WebCore::propertyMissingOrEqualToNone): Added and used
        instead of converting values to strings.
        (WebCore::elementHasTextDecorationProperty): 
        (WebCore::createMarkup):

2007-03-21  Justin Garcia  <justin.garcia@apple.com>

        Reviewed by oliver

        <rdar://problem/5075944> 
        REGRESSION: Partially selected underlined content pastes as plain text
        
        We stopped adding markup for all the ancestors
        of lastClosed up to the commonAncestorBlock
        because it was adding a lot of unnecessary markup.
        This caused us to lose underlining when copying a 
        partially selected underlined element (even though 
        we put all styles that the copied markup inherits 
        into a style span, because the text-decoration 
        isn't inheritable).

        * editing/markup.cpp:
        (WebCore::styleFromMatchedRulesAndInlineDecl): Moved
        code here.
        (WebCore::elementHasTextDecorationProperty): Added.
        (WebCore::createMarkup): If the copied markup has a
        text-decoration because some common ancestor has
        a text-decoration property set, include that ancestor
        and all its descendants in the copied markup.

2007-03-21  Oliver Hunt  <oliver@apple.com>

        Reviewed by Antti.

        Update a few SVG attribute parsers to be more defensive against
        reading beyond the end of input. 

        Fixes rdar://problem/5077218 -- SVG transform parser runs past
        end of buffer when running fuzzing test

        * ksvg2/svg/SVGParserUtilities.cpp:
        (WebCore::SVGPathParser::parseSVG):
        * ksvg2/svg/SVGParserUtilities.h:
        (WebCore::skipOptionalSpacesOrDelimiter):
        * ksvg2/svg/SVGTransformable.cpp:
        (WebCore::parseTransformParamList):
        (WebCore::SVGTransformable::parseTransformAttribute):

2007-03-21  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Mitz.

        http://bugs.webkit.org/show_bug.cgi?id=13140
        Crash after loading SVG fragment with XMLHttpRequest (Yosemite Map Geology Layer)

        Test: svg/carto.net/frameless-svg-parse-error.html

        * ksvg2/misc/SVGDocumentExtensions.cpp:
        (WebCore::SVGDocumentExtensions::reportError): Added a null check.
        (WebCore::SVGDocumentExtensions::reportWarning): Ditto.

2007-03-21  Beth Dakin  <bdakin@apple.com>

        Reviewed by Geoff.

        Fix for <rdar://problem/5072678> Crash in
        RenderLayer::scrollRectToVisible with MallocScribble enabled

        I tried to fix this earlier today but my fix caused a regression
        scrolling through RSS pages. It turns out that sometimes scroll
        events need to propagate immediately, and sometimes they must be
        delayed or they risk deleting objects that are expected to be
        around after the event has propagated. Mitz's original fix made
        sheduleEvent() only delay events that happen during layout. This
        fix marks two other places in addition to layout where events also
        need to be delayed. These two places are places that were marked
        with FIXMEs that Mitz removed in his original patch. (There was a
        third FIXME in RenderLayer::updateScrollInfoAfterLayout() but that
        case is only called through layout and is covered by Mitz's
        original patch.)

        * page/FrameView.cpp:
        (WebCore::FrameView::~FrameView): Added assertion.
        (WebCore::FrameView::layout): Call new functions to increment and 
        decrement the queued events count.
        (WebCore::FrameView::pauseScheduledEvents):
        (WebCore::FrameView::resumeScheduledEvents): Decrement queued 
        events count and dispatch events if the count has zeroed.
        * page/FrameView.h:
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::scrollRectToVisible):
        (WebCore::Marquee::start):

2007-03-21  Mitz Pettel  <mitz@webkit.org>

        Reviewed by John Sullivan.

        - fix http://bugs.webkit.org/show_bug.cgi?id=13130
          REGRESSION: Sometimes a frame resizer keeps following the mouse after mouseup

        * rendering/RenderFrameSet.cpp:
        (WebCore::RenderFrameSet::userResize): Reordered the code to allow resizing
        to be terminated by a mouseup event regardless of whether the frameset needs
        layout.

2007-03-20  Anders Carlsson  <acarlsson@apple.com>

        Reviewed by Oliver.

        <rdar://problem/5077252> 
        In NetNewsWire 2.1.1 and 3.0d62, a crash occurs after triple-clicking a link on the page
        
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::load):
        Move the m_inStopAllLoaders check to the load function that's common for loading a request or substitute data.

2007-03-20  Brady Eidson  <beidson@apple.com>

        Reviewed by Anders.

        <rdar://problem/5073391> and http://bugs.webkit.org/show_bug.cgi?id=13137

        Crash in IconDatabase when private browsing is enabled.

        The problem was caused by http://trac.webkit.org/projects/webkit/changeset/20182 
        which changed many uses of char[] and Vector<char> to SharedBuffer.  The patch
        tended to literally replace a Vector<char> with RefPtr<SharedBuffers> but forgot
        to enforce the concept that Vector<char>'s always exist, whereas RefPtr<SharedBuffers>
        can be null.  This led to derefs.

        I took the opportunity to rework the iconDB functions to live in a SharedBuffer 
        world, as that didn't exist when they were originally written - now they just return
        SharedBuffers instead of taking a Vector<char>& as a parameter

        * loader/icon/IconDatabase.cpp:
        (WebCore::IconDatabase::imageDataForIconURL): Return a SharedBuffer
        (WebCore::IconDatabase::iconForPageURL): Null check the SharedBuffer before asking
          it if it's empty
        (WebCore::IconDatabase::imageDataForIconURLQuery): Return a new SharedBuffer

        * loader/icon/IconDatabase.h: Return SharedBuffer's instead of taking Vector<char>&'s

2007-03-20  Adam Roben  <aroben@apple.com>

        Rubberstamped by Adele.

        Roll out r20348 because it was causing crashes.

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

2007-03-20  Timothy Hatcher  <timothy@apple.com>

        Reviewed by Kevin Decker.

        Rolling out part of r19828 that caused a scrolling regression in Mail.

        <rdar://problem/4820817> Message jumps around when trying to select text

        * platform/mac/ScrollViewMac.mm:
        (WebCore::ScrollView::visibleContentRect):
        (WebCore::ScrollView::updateContents):

2007-03-20  Brady Eidson  <beidson@apple.com>

        Reviewed by John

        <rdar://5071341> - Crash in IconLoader::finishLoading()
        
        Though the reproducibility of the crash is still elusive, there's been a crasher likely uncovered 
        Hyatt's recent caching changings to the IconLoader.  This crash tends to hit on sites without favicons,
        that serve up complex 404 pages, often when the load is cancelled or redirected.  Occasionally, it *seems*
        the IconLoader is getting failed/cancelled twice.
        
        This patch adds some assertions and a "fail gracefully in a release build" check that will have to
        serve us until we know more about the cause.

        * loader/icon/IconLoader.cpp:
        (WebCore::IconLoader::didFail): Add an assertion to catch this case
        (WebCore::IconLoader::finishLoading): Add an assertion to catch the case, and fail
          gracefully in debug builds.  Also add an efficiency check to not commit to the DB if there is no
          IconURL

2007-03-20  Antti Koivisto  <antti@apple.com>

        Reviewed by Darin.

        - fix http://bugs.webkit.org/show_bug.cgi?id=10747
        REGRESSION: Using two fingers on a trackpad to scroll inside a text area makes the whole page move
        <rdar://problem/5045710>
        
        Eat smooth scroll events in WebCore if pointer is over scrollable area. Not
        really a good fix, smooth scrolling should be supported properly. It should do for now.

        * page/EventHandler.cpp:
        (WebCore::EventHandler::handleWheelEvent):
        * rendering/RenderListBox.cpp:
        (WebCore::RenderListBox::isScrollable):
        * rendering/RenderListBox.h:
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::isScrollable):
        * rendering/RenderObject.h:
        * rendering/RenderTextControl.cpp:
        (WebCore::RenderTextControl::isScrollable):
        * rendering/RenderTextControl.h:

2007-03-20  Beth Dakin  <bdakin@apple.com>

        Reviewed by Geoff.

        Covered by existing test case.

        Fix for <rdar://problem/5072678> Crash in 
        RenderLayer::scrollRectToVisible with MallocScribble enabled

        This removes some code that was added with http://bugs.webkit.org/
        show_bug.cgi?id=8360. This code was not needed to fix that bug, but 
        the idea behind it was that there are times when it is safe for 
        scheduleEvent() to propagate the event immediately. The 
        MallocScribble crash revealed that this assumption was a bit too 
        broad; the cause of the crash was that we were propagating events 
        immediately when it was not safe. Mitz and I discussed this online 
        and we agree that the safest solution is to revert to the old 
        behavior here, and always delay the propagation of the event. 

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

2007-03-20  Brady Eidson  <beidson@apple.com>

        Reviewed by John Sullivan

        Add some very helpful logging to the IconLoader's SubresourceLoaderClient impl.

        * loader/icon/IconLoader.cpp:
        (WebCore::IconLoader::didReceiveResponse):
        (WebCore::IconLoader::didReceiveData):
        (WebCore::IconLoader::didFail):
        (WebCore::IconLoader::didFinishLoading):

2007-03-20  Justin Garcia  <justin.garcia@apple.com>

        Reviewed by darin

        <rdar://problem/5071074> 
        REGRESSION: Links are pasted as plain text at certain positions
        
        moveParagraphs calls createMarkup without annotation, which leaves
        out anchor elements that aren't fully selected.

        * editing/CompositeEditCommand.cpp:
        (WebCore::CompositeEditCommand::moveParagraphs): We don't want 
        createMarkup to do full annotation here.  Doing so could include 
        special ancestor blocks, which would prevent the copied content 
        from appearing in the destination paragraph when it's re-inserted.  
        Annotation would also inline styles from style sheets,  which is 
        unnecessary because the content is being moved to the same 
        document it's being moved from.
        Added a new bool to createMarkup that when true allows markup for 
        special ancestors as long as they are inline when annotation is off.
        * editing/markup.cpp:
        (WebCore::createMarkup): Don't set specialCommonAncestor if annotation
        is off, unless it's inline and we've been told it's ok to include such
        elements.
        * editing/markup.h:

2007-03-20  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Darin.

        http://bugs.webkit.org/show_bug.cgi?id=12497
        Implement XPath result ordering.

        XPath::NodeVector typedef is replaced with a real XPath::NodeSet class that knows how 
        to sort itself, and can remember whether it has been already sorted.

        * CMakeLists.txt:
        * WebCore.pro:
        * WebCore.xcodeproj/project.pbxproj:
        * WebCoreSources.bkl:
        Added XPathNodeSet files.

        * xml/XPathExpression.cpp: Fixed includes.

        * xml/XPathFunctions.cpp:
        (WebCore::XPath::FunId::evaluate): Mark the resulting node-set as unsorted.
        (WebCore::XPath::FunLocalName::evaluate): Replacing NodeVector with NodeSet.
        (WebCore::XPath::FunNamespaceURI::evaluate): Ditto.
        (WebCore::XPath::FunName::evaluate): Ditto.
        (WebCore::XPath::FunCount::evaluate): Ditto.
        (WebCore::XPath::FunSum::evaluate): Ditto.

        * xml/XPathNodeSet.cpp: Added.
        (WebCore::XPath::parentWithDepth):
        (WebCore::XPath::sortBlock):
        (WebCore::XPath::NodeSet::sort): Sort the node-set in document order.
        (WebCore::XPath::NodeSet::reverse): Reverse the order (useful for making axes such as 
        parent or ancestor sorted).
        (WebCore::XPath::NodeSet::firstNode): Returns the first node in document order; currently
        implemented via fully sorting the node-set, but this can obviously be optimized.
        (WebCore::XPath::NodeSet::anyNode): Added for symmetry with firstNode().
        
        * xml/XPathNodeSet.h: Added.
        (WebCore::XPath::NodeSet::NodeSet):
        (WebCore::XPath::NodeSet::operator=):
        (WebCore::XPath::NodeSet::size):
        (WebCore::XPath::NodeSet::isEmpty):
        (WebCore::XPath::NodeSet::operator[]):
        (WebCore::XPath::NodeSet::reserveCapacity):
        (WebCore::XPath::NodeSet::clear):
        (WebCore::XPath::NodeSet::swap):
        (WebCore::XPath::NodeSet::append):
        (WebCore::XPath::NodeSet::markSorted):
        (WebCore::XPath::NodeSet::isSorted):
        Most of these methods just call Vector counterparts. 

        * xml/XPathParser.cpp: Updated the copyright notice.

        * xml/XPathPath.cpp:
        (WebCore::XPath::Filter::evaluate): Replacing NodeVector with NodeSet.
        (WebCore::XPath::Path::evaluate): Ditto.
        (WebCore::XPath::LocationPath::evaluate): Replacing NodeVector with NodeSet. This function
        always marks the result as unsorted, because it is hard to tell whether a step breaks node order.
        Identifying and implementing special cases when it is not necessary to do so is an important
        future optimization.

        * xml/XPathPath.h: Replacing NodeVector with NodeSet.
        * xml/XPathPredicate.cpp:
        (WebCore::XPath::EqTestOp::compare): Replacing NodeVector with NodeSet.
        (WebCore::XPath::Union::evaluate): Replacing NodeVector with NodeSet. Currently, Union just
        marks the result as unordered; we can consider using merge sort to avoid this.

        * xml/XPathResult.cpp:
        (WebCore::XPathResult::XPathResult): Replacing NodeVector with NodeSet.
        (WebCore::XPathResult::singleNodeValue): Ditto.
        (WebCore::XPathResult::snapshotLength): Ditto.
        (WebCore::XPathResult::iterateNext): Ditto.
        (WebCore::XPathResult::snapshotItem): Ditto.
        (WebCore::XPathResult::convertTo): Ditto. Sort the result when requested to.

        * xml/XPathResult.h: Replacing NodeVector with NodeSet.

        * xml/XPathStep.cpp:
        (WebCore::XPath::Step::evaluate): If the input is not sorted, mark the output as such, too.
        (WebCore::XPath::Step::nodesInAxis): Fixed a number of bugs when enumerating with an
        attribute context node.
        (WebCore::XPath::Step::nodeTestMatches): Replacing NodeVector with NodeSet.
        * xml/XPathStep.h: Ditto.

        * xml/XPathUtil.cpp:
        (WebCore::XPath::isValidContextNode): XPath data model doesn't put attribute data into child
        nodes, so passing such node as a context could cause problems.

        * xml/XPathUtil.h: Removed NodeVector typedef.

        * xml/XPathValue.cpp:
        (WebCore::XPath::Value::Value):
        (WebCore::XPath::Value::toNodeSet):
        (WebCore::XPath::Value::toBoolean):
        (WebCore::XPath::Value::toNumber):
        (WebCore::XPath::Value::toString):
        * xml/XPathValue.h:
        (WebCore::XPath::Value::):
        (WebCore::XPath::Value::isNodeSet):
        Replacing NodeVector with NodeSet.

2007-03-21  Mark Rowe  <mrowe@apple.com>

        Build fix.

        * bindings/objc/WebScriptObject.mm:
        (-[WebScriptObject methodForSelector:]):
        (-[WebScriptObject respondsToSelector:]):

2007-03-21  Mark Rowe  <mrowe@apple.com>

        Reviewed by Tim Hatcher.

        Fix for http://bugs.webkit.org/show_bug.cgi?id=13129.
        Bug 13129: Democracy Player dies in NSException from WebScriptObject on startup.

        Some cross-language scripting bridges use the presence of -(int)count to determine
        whether to treat objects as sequence-like.  All WebScriptObject's exposed this method
        which lead to non-collection WebScriptObject's being mishandled by PyObjC.  We now
        expose -count only when the object we wrap looks like a collection from a JavaScript
        point of view (eg, it has a length property).

        * bindings/objc/WebScriptObject.mm:
        (-[WebScriptObject _shouldRespondToCount]):
        (-[WebScriptObject methodForSelector:]):
        (-[WebScriptObject respondsToSelector:]):
        (-[WebScriptObject _count]):
        * bindings/objc/WebScriptObjectPrivate.h:

2007-03-20  Darin Adler  <darin@apple.com>

        * page/EventHandler.cpp: (WebCore::EventHandler::handleMouseMoveEvent):
        Fix obvious typo in the change from last night -- forgot to assign to the variable.

2007-03-20  Dave Hyatt  <hyatt@apple.com>

        Refactor fonts a bit for portability.
       
        Reviewed by aroben

        * platform/Font.cpp:
        (WebCore::Font::drawSimpleText):
        (WebCore::Font::drawGlyphBuffer):
        (WebCore::Font::floatWidthForSimpleText):
        * platform/Font.h:
        * platform/FontData.h:
        (WebCore::FontData::isSystemFont):
        (WebCore::FontData::scriptCache):
        * platform/GlyphBuffer.h:
        (WebCore::GlyphBuffer::add):

2007-03-20  Anders Carlsson  <acarlsson@apple.com>

        Reviewed by Adam.

        Stub out a couple of CFNetwork backend functions.
        
        * platform/network/ResourceHandle.h:

2007-03-19  Oliver Hunt  <oliver@apple.com>

        Reviewed by Ada.

        Protect against possibility of JS detaching a frame (and losing its view)
        midway through a mouse move.

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

2007-03-19  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Darin.

        http://bugs.webkit.org/show_bug.cgi?id=13107
        XPath should raise an exception when trying to parse an unknown function

        Test: fast/xpath/invalid-functions.html

        * xml/XPathFunctions.cpp:
        (WebCore::XPath::createFunction): Return 0 if the function couldn't be created.
        * xml/XPathGrammar.y: Handle nulls returned from createFunction().

2007-03-19  Adele Peterson  <adele@apple.com>

        Reviewed by Beth.

        Fix for http://bugs.webkit.org/show_bug.cgi?id=13087
        <rdar://problem/5064316> REGRESSION: Allow setting the checked attribute in js and in markup for unnamed radio buttons (dominos.com)

        Test: fast/forms/radio_checked_name.html

        We were matching a WinIE quirk that does not allow a user to check and uncheck an unnamed radio button.  But they still
        allow the checked attribute to be set in html, and changed in javascript.  So this change matches that behavior.

        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::parseMappedAttribute): We no longer need a special call to setChecked when parsing the name
         attribute, since we setChecked will now work with unnamed radio buttons.
        (WebCore::HTMLInputElement::preDispatchEventHandler): Added comment.
        (WebCore::HTMLInputElement::setChecked): Don't check for the unnamed radio button case here.
        (WebCore::HTMLInputElement::postDispatchEventHandler): Don't call setChecked for unnamed radio buttons.
        (WebCore::HTMLInputElement::defaultEventHandler): ditto.

2007-03-19  Adam Roben  <aroben@apple.com>

        Rubberstamped by Oliver.

        * bridge/JavaScriptStatistics.cpp: Added missing header for
        correctness.

2007-03-19  Andrew Wellington  <proton@wiretapped.net>

        Reviewed by Maciej.

        Really set Xcode editor to use 4 space indentation (http://webkit.org/coding/coding-style.html)

        * WebCore.xcodeproj/project.pbxproj:

2007-03-19  Justin Garcia  <justin.garcia@apple.com>

        Reviewed by darin
        
        <rdar://problem/5071074> 
        REGRESSION: Links that aren't fully selected copy and paste as only text
        
        We stopped adding markup for all commonAncestorBlocks
        and the ancestors of lastClosed up to them because it 
        was adding a lot of unnecessary markup.

        * editing/markup.cpp:
        (WebCore::createMarkup): Also include markup for nodes
        up to an enclosing anchor.  Cleaned up the code for
        including special common ancestors a bit.

2007-03-19  Nikolas Zimmermann  <zimmermann@kde.org>

        Reviewed by Lars Knoll.

        Fix crash when opening a SVG document which contains SVG elements, but no <svg> root element.
        Moving the mouse was crashing WebKit. Fixes svg/hixie/dynamic/006.xml.

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

2007-03-19  Mitz Pettel  <mitz@webkit.org>

        Reviewed by Hyatt.

        - fix http://bugs.webkit.org/show_bug.cgi?id=13117
        REGRESSION (r14658): Flickering text fields when updating via javascript

        * page/Frame.cpp:
        (WebCore::Frame::forceLayout): Added a flag to allow partial relayout.
        * page/Frame.h:
        * page/mac/WebCoreFrameBridge.mm:
        (-[WebCoreFrameBridge forceLayoutAdjustingViewSize:]): Allow partial relayout
        if not adjusting view size.
        (-[WebCoreFrameBridge needsLayout]): Changed to check for pending subtree
        layout instead of just whether the root needs layout.

2007-03-18  Nikolas Zimmermann  <zimmermann@kde.org>

        Reviewed by Maciej.

        Make JS function calls on POD-types (ie. SVGLength) take effect.
        Calling ie. newValueInSpecifiedUnits on SVGLength works as expected.

        This worked fine before we switched to SVGLength POD type, so this
        can be considered as P1 regression fix.

        Partly fix svg/hixie/dynamic/005-broken.svg. We match Opera now though
        it's not yet completly fixed. Setting baseVal attribute on SVGAnimatedString
        doesn't work as expected - needs a seperated fix.

        * bindings/scripts/CodeGeneratorJS.pm:

2007-03-19  Adele Peterson  <adele@apple.com>

        Reviewed by Adam.

        Adding comments and a little cleanup from my last checkin.

        * html/HTMLSelectElement.cpp:
        (WebCore::HTMLSelectElement::setSelectedIndex): Removed commented out assert.  Added comment about how we use onChange.
        (WebCore::HTMLSelectElement::selectAll): Added comment about how we use saveLastSelection and onChange.
        (WebCore::HTMLSelectElement::dispatchFocusEvent): ditto.
        (WebCore::HTMLSelectElement::dispatchBlurEvent): ditto.
        (WebCore::HTMLSelectElement::menuListDefaultEventHandler): ditto.
        (WebCore::HTMLSelectElement::listBoxDefaultEventHandler): ditto.
        (WebCore::HTMLSelectElement::menuListOnChange): Added assert that usesMenuList() is true.
        (WebCore::HTMLSelectElement::listBoxOnChange): Added assert that usesMenuList() is false.
        (WebCore::HTMLSelectElement::saveLastSelection): Added early return for menu lists.

2007-03-19  Mitz Pettel  <mitz@webkit.org>

        Reviewed by Tim Hatcher.

        - fix http://bugs.webkit.org/show_bug.cgi?id=13091
          REGRESSION (r20075): Wrong text style and pixel break in Apple Store Locator HUD

        Test: fast/innerHTML/additional-inline-style.html

        * editing/markup.cpp:
        (WebCore::startMarkup): Changed to add inline style based on CSS rules only
        in AnnotateForInterchange mode.

2007-03-19  Zack Rusin  <zrusin@trolltech.com>

        Compile fix.

        * platform/qt/ScrollViewQt.cpp:
        (WebCore::ScrollView::update):

2007-03-19  Adam Roben  <aroben@apple.com>

        Reviewed by Hyatt and Maciej.

        Renamed WebCoreJavaScript to JavaScriptStatistics and made it C++ as
        part of <rdar://problem/5071653>.

        All layout tests pass.

        * WebCore.exp: Updated.
        * WebCore.xcodeproj/project.pbxproj: Updated.
        * bridge/JavaScriptStatistics.cpp: Moved from
        bridge/mac/WebCoreJavaScript.mm, and converted to C++.
        (WebCore::collect):
        (WebCore::JavaScriptStatistics::objectCount):
        (WebCore::JavaScriptStatistics::interpreterCount):
        (WebCore::JavaScriptStatistics::protectedObjectCount):
        (WebCore::JavaScriptStatistics::rootObjectTypeCounts):
        (WebCore::JavaScriptStatistics::garbageCollect):
        (WebCore::JavaScriptStatistics::garbageCollectOnAlternateThread):
        (WebCore::JavaScriptStatistics::shouldPrintExceptions):
        (WebCore::JavaScriptStatistics::setShouldPrintExceptions):
        * bridge/JavaScriptStatistics.h: Added.
        * bridge/mac/WebCoreJavaScript.h: Removed.
        * bridge/mac/WebCoreJavaScript.mm: Removed.

2007-03-18  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Mark.

        - avoid static construction (and global variable access) in a smarter, more portable way,
        to later enable MUTLI_THREAD mode to work on other platforms and compilers.
        
        * bindings/js/JSCustomXPathNSResolver.cpp:
        (WebCore::JSCustomXPathNSResolver::lookupNamespaceURI):
        * bindings/js/JSHTMLInputElementBase.cpp:
        (WebCore::JSHTMLInputElementBaseFunction::JSHTMLInputElementBaseFunction):
        * bindings/js/JSHTMLOptionElementConstructor.cpp:
        (WebCore::JSHTMLOptionElementConstructor::JSHTMLOptionElementConstructor):
        * bindings/js/JSXMLHttpRequest.cpp:
        (KJS::JSXMLHttpRequestConstructorImp::JSXMLHttpRequestConstructorImp):
        * bindings/js/JSXSLTProcessor.cpp:
        (KJS::XSLTProcessorConstructorImp::XSLTProcessorConstructorImp):
        * bindings/js/kjs_dom.cpp:
        (KJS::DOMNamedNodeMap::getOwnPropertySlot):
        (KJS::DOMNamedNodesCollection::getOwnPropertySlot):
        * bindings/js/kjs_events.cpp:
        (KJS::JSAbstractEventListener::handleEvent):
        * bindings/js/kjs_html.cpp:
        (KJS::HTMLElementFunction::HTMLElementFunction):
        (KJS::JSHTMLCollection::getOwnPropertySlot):
        * bindings/js/kjs_window.cpp:
        (KJS::ScheduledAction::execute):
        * bindings/objc/WebScriptObject.mm:
        * bindings/scripts/CodeGeneratorJS.pm:

2007-03-18  Andrew Wellington  <proton@wiretapped.net>

        Reviewed by Mark Rowe

        Set Xcode editor to use 4 space indentation (http://webkit.org/coding/coding-style.html)

        * WebCore.xcodeproj/project.pbxproj:

2007-03-18  David Hyatt  <hyatt@apple.com>

        Fix for REGRESSION bug 13108, frame borders being painted when they shouldn't be.  Rework both frame borders
        and resizing to be more like other browsers.

        Reviewed by ggaren

        fast/frames/no-frame-borders.html

        * html/HTMLFrameElement.cpp:
        (WebCore::HTMLFrameElement::HTMLFrameElement):
        (WebCore::HTMLFrameElement::attach):
        (WebCore::HTMLFrameElement::parseMappedAttribute):
        * html/HTMLFrameElement.h:
        (WebCore::HTMLFrameElement::hasFrameBorder):
        * html/HTMLFrameElementBase.cpp:
        (WebCore::HTMLFrameElementBase::HTMLFrameElementBase):
        (WebCore::HTMLFrameElementBase::parseMappedAttribute):
        * html/HTMLFrameElementBase.h:
        * html/HTMLFrameSetElement.cpp:
        (WebCore::HTMLFrameSetElement::attach):
        * html/HTMLFrameSetElement.h:
        (WebCore::HTMLFrameSetElement::hasFrameBorder):
        * html/HTMLIFrameElement.cpp:
        (WebCore::HTMLIFrameElement::HTMLIFrameElement):
        * rendering/RenderFrame.cpp:
        (WebCore::RenderFrame::edgeInfo):
        * rendering/RenderFrame.h:
        * rendering/RenderFrameSet.cpp:
        (WebCore::RenderFrameSet::paint):
        (WebCore::RenderFrameSet::GridAxis::resize):
        (WebCore::RenderFrameSet::fillFromEdgeInfo):
        (WebCore::RenderFrameSet::computeEdgeInfo):
        (WebCore::RenderFrameSet::edgeInfo):
        (WebCore::RenderFrameSet::layout):
        (WebCore::RenderFrameSet::startResizing):
        (WebCore::RenderFrameSet::continueResizing):
        (WebCore::RenderFrameSet::canResizeRow):
        (WebCore::RenderFrameSet::canResizeColumn):
        (WebCore::RenderFrameSet::splitPosition):
        (WebCore::RenderFrameSet::hitTestSplit):
        (WebCore::RenderFrameSet::dump):
        * rendering/RenderFrameSet.h:
        (WebCore::):
        (WebCore::FrameEdgeInfo::FrameEdgeInfo):
        (WebCore::FrameEdgeInfo::preventResize):
        (WebCore::FrameEdgeInfo::allowBorder):
        (WebCore::FrameEdgeInfo::setPreventResize):
        (WebCore::FrameEdgeInfo::setAllowBorder):

2007-03-19  Mark Rowe  <mrowe@apple.com>

        Rubber-stamped by Brady.

        Update references to bugzilla.opendarwin.org with bugs.webkit.org.

        * ChangeLog:
        * WebCore.vcproj/WebCore/build-generated-files.sh:
        * manual-tests/ATSU-bad-layout.html:
        * manual-tests/accidental-strict-mode.html:
        * manual-tests/applet-param-no-name.html:
        * manual-tests/bidi-parens.html:
        * manual-tests/bugzilla-3855.html:
        * manual-tests/bugzilla-4840.html:
        * manual-tests/bugzilla-6821.html:
        * manual-tests/containing-block-position-chage.html:
        * manual-tests/contenteditable-link.html:
        * manual-tests/css3-cursor-fallback-quirks.html:
        * manual-tests/css3-cursor-fallback-strict.html:
        * manual-tests/custom-cursors.html:
        * manual-tests/dictionary-scrolled-iframe.html:
        * manual-tests/dom-manipulation-on-resize.html:
        * manual-tests/drag-image-to-address-bar.html:
        * manual-tests/empty-link-target.html:
        * manual-tests/empty-title-popup.html:
        * manual-tests/first-line-style-crash.html:
        * manual-tests/invalid-mouse-event.html:
        * manual-tests/left-overflow-repaint.html:
        * manual-tests/linkjump-3.html:
        * manual-tests/log-keypress-events.html:
        * manual-tests/named-window-blank-target.html:
        * manual-tests/plain-text-paste.html:
        * manual-tests/plugin-controller-datasource.html:
        * manual-tests/pre-tab-selection-rect.html:
        * manual-tests/redirection-target.html:
        * manual-tests/redraw-page-cache-visited-links.html:
        * manual-tests/reset-initiatedDrag.html:
        * manual-tests/resources/named-window-blank-target-step2.html:
        * manual-tests/resources/named-window-blank-target-step3.html:
        * manual-tests/resources/named-window-blank-target-step4.html:
        * manual-tests/resources/redraw-page-cache-visited-links-2.html:
        * manual-tests/scrollbar-hittest.html:
        * manual-tests/scrollbar-hittest2.html:
        * manual-tests/subview-click-assertion.html:
        * manual-tests/tabbing-input-google.html:
        * manual-tests/text-field-autoscroll.html:
        * manual-tests/textarea-after-stylesheet-link.html:
        * manual-tests/textarea-focus.html:
        * manual-tests/whitespace-pre-affinity.html:

2007-03-18  Krzysztof Kowalczyk  <kkowalczyk@gmail.com>

        Not reviewed - gdk build fix.

        * platform/gdk/ScrollViewGdk.cpp:
        (WebCore::ScrollView::update): add a stub

2007-03-18  Brady Eidson  <beidson@apple.com>

        Reviewed by Hyatt

        http://bugs.webkit.org/show_bug.cgi?id=13111
        When stopped a load before it completes, partial images become the 
        broken image icon

        * loader/loader.cpp:
        (WebCore::Loader::didFail): Split off into a method that knows the 
          difference between failed and cancelled.  If a load is cancelled,
          don't call error() on the object - only remove it from the cache
        (WebCore::Loader::cancelRequests): Call didFail(loader, true)
        * loader/loader.h: Added didFail(SubresourceLoader*, bool cancelled)

2007-03-18  Mitz Pettel  <mitz@webkit.org>

        Reviewed by Adele.

        - fix http://bugs.webkit.org/show_bug.cgi?id=13101
          REGRESSION (NativeTextField): Specifying word-wrap:break-word makes text field wrap

        Test: fast/forms/input-text-word-wrap.html

        * rendering/RenderTextControl.cpp:
        (WebCore::RenderTextControl::createInnerTextStyle): Force the inner block to
        'word-wrap:normal'.

2007-03-18  Dan Waylonis  <waylonis@mac.com>

        Reviewed by Tim Hatcher.

        Fix http://bugs.webkit.org/show_bug.cgi?id=13005
        Bug 13005: WebScriptObject +throwException needs NULL check.

        Add checking for NULL interpreter before throwing exception.

        * bindings/objc/WebScriptObject.mm:
        (+[WebScriptObject throwException:]):

2007-03-18  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Oliver Hunt.
        
        Fixed http://bugs.webkit.org/show_bug.cgi?id=13106
        REGRESSION: Incomplete document.all implementation breaks abtelectronics.com 
        (Style Change Through JavaScript Blanks Content)
        
        When indexing into collections, treat the empty string as an invalid argument,
        instead of the number 0.

        * bindings/js/kjs_html.cpp:
        (KJS::JSHTMLCollection::getOwnPropertySlot):
        (KJS::JSHTMLCollection::callAsFunction):
        (KJS::JSHTMLCollectionPrototypeFunction::callAsFunction):

2007-03-18  David Hyatt  <hyatt@apple.com>

        Use fillRect instead of drawLine, since drawLine has some odd behavior (it's only used for borders).

        Reviewed by aroben

        * platform/graphics/IntRect.h:
        * rendering/RenderFrameSet.cpp:
        (WebCore::RenderFrameSet::paintColumnBorder):
        (WebCore::RenderFrameSet::paintRowBorder):

2007-03-18  David Hyatt  <hyatt@apple.com>

        Change the frameborder color to be light gray for framesets.

        Reviewed by aroben

        * rendering/RenderFrameSet.cpp:
        (WebCore::borderFillColor):
        (WebCore::RenderFrameSet::paintColumnBorder):
        (WebCore::RenderFrameSet::paintRowBorder):

2007-03-18  David Hyatt  <hyatt@apple.com>

        Make iframes work properly with frameborder="0".

        Reviewed by aroben

        * html/HTMLIFrameElement.cpp:
        (WebCore::HTMLIFrameElement::mapToEntry):
        (WebCore::HTMLIFrameElement::parseMappedAttribute):

2007-03-18  David Hyatt  <hyatt@apple.com>

        Add a 2px border by default to <iframe>s for compatibility with other browsers.

        Reviewed by aroben

        * css/html4.css:

2007-03-18  David Hyatt  <hyatt@apple.com>

        Move frame borders out of WebKit and into WebCore.

        Reviewed by aroben, olliej

        * bridge/mac/FrameViewMac.mm:
        * css/html4.css:
        * html/HTMLFrameSetElement.cpp:
        (WebCore::HTMLFrameSetElement::HTMLFrameSetElement):
        (WebCore::HTMLFrameSetElement::mapToEntry):
        (WebCore::HTMLFrameSetElement::parseMappedAttribute):
        (WebCore::HTMLFrameSetElement::attach):
        * html/HTMLFrameSetElement.h:
        (WebCore::HTMLFrameSetElement::hasBorderColor):
        * page/FrameView.cpp:
        (WebCore::FrameViewPrivate::FrameViewPrivate):
        * page/FrameView.h:
        * page/mac/WebCoreFrameBridge.h:
        * platform/graphics/IntRect.h:
        (WebCore::IntRect::topLeft):
        (WebCore::IntRect::topRight):
        (WebCore::IntRect::bottomLeft):
        (WebCore::IntRect::bottomRight):
        * rendering/RenderFrame.cpp:
        (WebCore::RenderFrame::viewCleared):
        * rendering/RenderFrameSet.cpp:
        (WebCore::borderStartEdgeColor):
        (WebCore::borderEndEdgeColor):
        (WebCore::RenderFrameSet::paintColumnBorder):
        (WebCore::RenderFrameSet::paintRowBorder):
        (WebCore::RenderFrameSet::paint):
        * rendering/RenderFrameSet.h:
        * rendering/RenderPartObject.cpp:
        (WebCore::RenderPartObject::viewCleared):
        * rendering/RenderView.cpp:
        (WebCore::RenderView::repaintViewRectangle):

2007-03-17  David Hyatt  <hyatt@apple.com>

        Make onload do an explicit paint when a top-level document is ready (to ensure that a first paint always
        happens before any timers set by the onload can fire).

        Reviewed by aroben

        * dom/Document.cpp:
        (WebCore::Document::implicitClose):
        * platform/ScrollView.h:
        * platform/mac/ScrollViewMac.mm:
        (WebCore::ScrollView::update):

2007-03-17  Dave Hyatt  <hyatt@apple.com>

        Prevent starvation of user input and painting when processing timers.
        If we are already in the processing of a custom timer message, don't allow that
        processing to do another PostMessage.  Force SetTimer to be used instead.
      
        Reviewed by ggaren

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

2007-03-17  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Beth Dakin.

        Fixed <rdar://problem/5070967> REGRESSION (r20211): Repro crash when 
        closing View Source window
        
        I award myself 0 points, and may God have mercy on my soul.

        * bindings/js/kjs_proxy.cpp:
        (WebCore::KJSProxy::~KJSProxy):

2007-03-17  Krzysztof Kowalczyk  <kkowalczyk@gmail.com>

        Not reviewed - gdk build fix.

        * platform/gdk/TemporaryLinkStubs.cpp:
        (Pasteboard::writeURL):

2007-03-17  David Hyatt  <hyatt@apple.com>

        Fix tiny PLT regression.  Don't examine the border/background data for RenderImage when images change
        unless we actually have a border/background.

        Reviewed by Brady

        * rendering/RenderImage.cpp:
        (WebCore::RenderImage::imageChanged):

2007-03-17  Nikolas Zimmermann  <zimmermann@kde.org>

        Reviewed by Sam Weinig.

        Fixes: http://bugs.webkit.org/show_bug.cgi?id=13046 (CSS styles on hover and focus are broken for <use>)
        Fixes: http://bugs.webkit.org/show_bug.cgi?id=12838 (SVG <use> CSS styles broken)
        Added test: svg/custom/use-css-events.svg

        In general this fixes the peepo.co.uk website.

        Forgot to pass the actual StyleChange to the recalcStyle() function,
        when calling it on the shadow tree root element.

        * ksvg2/svg/SVGUseElement.cpp:
        (WebCore::SVGUseElement::recalcStyle):

2007-03-17  Timothy Hatcher  <timothy@apple.com>

        Reviewed by Mark Rowe.

        Made Version.xcconfig smarter when building for different configurations.
        Now uses the 522+ OpenSource version for Debug and Release, while using the
        full 522.4 version for Production builds. The system prefix is also computed
        based on the current system, so 4522.4 on Tiger and 5522.4 on Leopard.

        * Configurations/Version.xcconfig:
        * Configurations/WebCore.xcconfig:

2007-03-17  Antti Koivisto  <antti@apple.com>

        Reviewed by Adele.

        Fix http://bugs.webkit.org/show_bug.cgi?id=12595
        REGRESSION: Can't add item to cart at lnt.com (JS type error)
        <rdar://problem/4722863>
        
        Emulate Firefox behavior where form elements accessed by a name
        can be accessed with that name later even if the name changes or
        even if element is removed from the document.
        
        This is loosely based on Darin's earlier patch for the same problem but
        is much less expansive. It takes somewhat different approach to more closely
        mimic Firefox behavior. Includes expanded test case.

        * bindings/js/JSHTMLFormElementCustom.cpp:
        (WebCore::JSHTMLFormElement::canGetItemsForName):
            Use new the HTMLFormElement::getNamedElements() method
        (WebCore::JSHTMLFormElement::nameGetter):
            Use new the HTMLFormElement::getNamedElements() method
        * html/HTMLFormElement.cpp:
        (WebCore::HTMLFormElement::HTMLFormElement):
        (WebCore::HTMLFormElement::~HTMLFormElement):
        (WebCore::HTMLFormElement::elementForAlias):
        (WebCore::HTMLFormElement::addElementAlias):
            Maintain a map of known element aliases
        (WebCore::HTMLFormElement::getNamedElements):
            Get a list of elements matching the name, based both their
            current names and known aliases (earlier names).
            Keep the alias list in sync.
        * html/HTMLFormElement.h:

2007-03-17  Adele Peterson  <adele@apple.com>

        Reviewed by Hyatt.

        Fix for <rdar://problem/4990050> REGRESSION: onchange gets fired when clicking on a programmatically selected element in a listbox
        http://bugs.webkit.org/show_bug.cgi?id=12725

        Test: updated fast/forms/listbox-onchange.html

        Added HTMLSelectElement::saveLastSelection that is called before changing a selection that could result
        in onChange being called.  m_lastOnChangeIndex and m_lastOnChangeSelection no longer have to be up-to date all the time, 
        they just have to be up-to-date before we execute an action that may trigger onChange.

        * html/HTMLOptionElement.cpp: (WebCore::HTMLOptionElement::setSelectedState): Added.
          The HTMLSelectElement will only set an option's selected state with this method.  This ensures
          that notifyOptionSelected won't get called when the call originates from the select element.
        * html/HTMLOptionElement.h:

        * html/HTMLSelectElement.cpp:
        (WebCore::HTMLSelectElement::deselectItems): Calls setSelectedState.
        (WebCore::HTMLSelectElement::setSelectedIndex): ditto. Don't update the last selection variables here.  Scroll to the new selection.
         The scrolling call used to only be in notifyOptionSelected.  There's no reason we shouldn't scroll when the selection is set through
         the HTMLSelectElement.
        (WebCore::HTMLSelectElement::setValue): Call setSelectedIndex to update all options selected state.
        (WebCore::HTMLSelectElement::restoreState): Call setSelectedState.
        (WebCore::HTMLSelectElement::selectAll): Call saveLastSelection before making the selection, and calling onChange.
        (WebCore::HTMLSelectElement::recalcListItems): Call setSelectedState.  Don't need to save selection here anymore, 
         since it will get saved before we call onChange.
        (WebCore::HTMLSelectElement::reset): ditto.
        (WebCore::HTMLSelectElement::dispatchFocusEvent): Added. Call saveLastSelection for menu lists, since onChange can be fired
         on blur.
        (WebCore::HTMLSelectElement::dispatchBlurEvent): Call menuListOnChange.
        (WebCore::HTMLSelectElement::menuListDefaultEventHandler): Call saveLastSelection before showing the popup window.
        (WebCore::HTMLSelectElement::listBoxDefaultEventHandler):  Call saveLastSelection during mousedown (to prepare for an 
         onchange during mouseup, or after autoscroll).
        (WebCore::HTMLSelectElement::updateListBoxSelection): Call setSelectedState.

        (WebCore::HTMLSelectElement::menuListOnChange): Added. Compares the m_lastOnChangeIndex to the selectedIndex().
        (WebCore::HTMLSelectElement::listBoxOnChange): Move the m_lastOnChangeSelection creation to saveLastSelection.
        (WebCore::HTMLSelectElement::saveLastSelection): Added. Sets m_lastOnChangeIndex or m_lastOnChangeSelection.
        * html/HTMLSelectElement.h:
        * platform/PopupMenu.h:

2007-03-16  Oliver Hunt  <oliver@apple.com>

        Reviewed by Hyatt.

        The old canSaveAsWebArchive call was necessary as stand alone
        images used to be rendered by ImageDocument.

        Fixes rdar://problem/5061252

        * dom/Clipboard.cpp:
        * dom/Clipboard.h:
        (WebCore::Clipboard::setDragHasStarted):
        * page/DragClient.h:
        (WebCore::DragClient::declareAndWriteDragImage):
        * platform/mac/ClipboardMac.mm:
        (WebCore::ClipboardMac::declareAndWriteDragImage):

2007-03-16  Anders Carlsson  <acarlsson@apple.com>

        Reviewed by Maciej.

        <rdar://problem/4869095>
        default content type changed for XMLHttpRequest POSTs changed (breaks Flickrator 0.1 widget)
        
        * xml/xmlhttprequest.cpp:
        (WebCore::XMLHttpRequest::send):

2007-03-16  Brady Eidson  <beidson@apple.com>

        Rubberstamped by Tim Hatcher

        Update the hash table header for Window object properties

        * bindings/js/kjs_window.cpp:

2007-03-16  Brady Eidson  <beidson@apple.com>

        Reviewed by Anders

        <rdar://problem/5061826> and
        http://bugs.webkit.org/show_bug.cgi?id=12863
        Implement window.stop()

        * bindings/js/kjs_window.cpp:
        (KJS::WindowFunc::callAsFunction): Add case Window::Stop
        * bindings/js/kjs_window.h:
        (KJS::Window::): Add "Stop"

2007-03-16  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Brady Eidson.

        Fixed dir creation to account for already existing dirs and missing leading
        dirs in path.
        
        * loader/icon/IconDatabase.cpp:
        (WebCore::makeAllDirectories):

2007-03-16  David Hyatt  <hyatt@apple.com>

        Fix for 13084, assertion failure in the Cache.  Convert the client list
        to a HashCountedSet so that multiple refs and derefs are allowed.

        Fix RenderImage so that if it has the same image used as a background/border
        and as the foreground that it will repaint properly (can be tested using
        border-image and a foreground image).

        Optimize list marker so that it doesn't waste time in the base class method,
        since list markers don't support background or border images.

        Reviewed by andersca

        * ChangeLog:
        * loader/CachedResource.cpp:
        (WebCore::CachedResource::ref):
        * loader/CachedResource.h:
        * loader/CachedResourceClientWalker.cpp:
        (WebCore::CachedResourceClientWalker::CachedResourceClientWalker):
        * loader/CachedResourceClientWalker.h:
        * rendering/RenderImage.cpp:
        (WebCore::RenderImage::imageChanged):
        * rendering/RenderListMarker.cpp:
        (WebCore::RenderListMarker::imageChanged):

2007-03-16  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Anders Carlsson.
        
        Fixed <rdar://problem/5065399> REGRESSION: leaks in Frame::bindingRootObject 
        seen on buildbot

        The problem was that we were initializing the same WebScriptObject twice.
        This caused it to leak its original set of ivars.
        
        I think some refactoring could prevent this situation from arising in the
        first place, but I'm just adding a check at the call site for now, to do 
        the simplest thing.

        * bindings/objc/WebScriptObject.mm:
        (-[WebScriptObject _setImp:originRootObject:rootObject:]): Added ASSERTs
        against multiple calls.

        * bindings/objc/WebScriptObjectPrivate.h: Renamed _initializeWithObjectImp
        to setImp because "init" vs "initialize" was a too subtle indication that
        one was a Cocoa initializer and one was not.

2007-03-16  Lars Knoll <lars@trolltech.com>

        don't use #import in .cpp files.

        * editing/qt/EditorQt.cpp:

2007-03-16  Lars Knoll <lars@trolltech.com>

        Fix the Qt build once again.

        * platform/qt/PasteboardQt.cpp:
        (WebCore::Pasteboard::Pasteboard):
        (WebCore::Pasteboard::writeSelection):
        (WebCore::Pasteboard::plainText):
        (WebCore::Pasteboard::documentFragment):
        (WebCore::Pasteboard::writeURL):
        (WebCore::Pasteboard::writeImage):
        (WebCore::Pasteboard::clear):

2007-03-15  Shrikant Gangoda  <shrikant.gangoda@celunite.com>

        Gdk build fix.

        * loader/gdk/FrameLoaderClientGdk.cpp:
        (WebCore::FrameLoaderClientGdk::blockedError):
        * loader/gdk/FrameLoaderClientGdk.h:

2007-03-15  Beth Dakin  <bdakin@apple.com>

        Reviewed by Geoff.

        Fix for http://bugs.webkit.org/show_bug.cgi?id=13088 REGRESSION
        (r19761-19779): Copy image no longer includes image address 
        (rdar://5067927)

        writeURL() does not need an isImage parameter. Now that it accepts 
        the types as a parameter, we can just declare the appropriate image 
        types within writeImage and send them to writeURL(). Also, 
        declaring the types twice is what broke this.

        * platform/Pasteboard.h:
        * platform/mac/PasteboardMac.mm:
        (WebCore::Pasteboard::writeURL):
        (WebCore::Pasteboard::writeImage):

2007-03-15  Adele Peterson  <adele@apple.com>

        Reviewed by Kevin Decker.

        Fix for <rdar://problem/4926179> Text in menulist control should never update if menu is open

        * rendering/RenderMenuList.cpp: (WebCore::RenderMenuList::updateFromElement):
          Only setTextFromOption if the menu isn't visible.

2007-03-15  Brady Eidson  <beidson@apple.com>

        Reviewed by Oliver

        A few platform specific tweaks

        * platform/cf/RetainPtr.h:
        (WebCore::RetainPtr::releaseRef): Fixed releaseRef to work with CF
        
        * platform/network/ResourceHandle.h: Added a "releaseRef" style call

2007-03-15  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Geoff and Steve.

        * config.h: Remove unneeded hack.

2007-03-15  Justin Garcia  <justin.garcia@apple.com>

        Reviewed by john
        
        <rdar://problem/5062376> 
        REGRESSION: In Mail and Gmail, can't change alignment to text after it has been applied
        
        Bring back the remove step in applyBlockStyle.  It's 
        necessary because addBlockStyleIfNeeded assumes that 
        the properties it adds aren't already on the block that 
        it adds them to.

        * editing/ApplyStyleCommand.cpp:
        (WebCore::ApplyStyleCommand::applyBlockStyle): 
        Bring back the remove step (added a testcase).
        Don't do the add step if m_removeOnly is true (no testcase
        because there aren't any clients using removeOnly functionality
        to remove styles yet, only styled elemets).
        Moved the code for creating new blocks up one level
        to this function so that we can pass blocks to removeCSSStyle.
        When converting VisiblePositions to indices and vice versa,
        use the highest node in the shadow tree if we're in one as
        the scope (working on a testcase).
        (WebCore::ApplyStyleCommand::addBlockStyle): Moved code to
        applyBlockStyle.
        * editing/ApplyStyleCommand.h: 

2007-03-15  Brady Eidson  <beidson@apple.com>

        Reviewed by Maciej

        <rdar://problem/4429701>
        Implements a port blocking black list that matches Firefox's

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::blockedError): Call through to the client for blockedError 
        * loader/FrameLoader.h:

        * loader/FrameLoaderClient.h: Get the "port blocked" error for the current platform

        * loader/ResourceLoader.cpp:
        (WebCore::ResourceLoader::wasBlocked): ResourceHandleClient method to pass on the didFail(error)
        (WebCore::ResourceLoader::blockedError): Following the pattern of "CancelledError()", get the 
          error to fail with for the didFail() call
        * loader/ResourceLoader.h:

        * platform/graphics/svg/SVGImageEmptyClients.h:
        (WebCore::SVGEmptyFrameLoaderClient::blockedError): Added stub

        * platform/network/ResourceHandle.cpp:
        (WebCore::ResourceHandle::create): If the port is blocked, create the handle but schedule it for
          deferred failure on a timer
        (WebCore::ResourceHandle::scheduleBlockedFailure): Do the timer scheduling
        (WebCore::ResourceHandle::fireBlockedFailure): Fire the timer here
        (WebCore::ResourceHandle::portAllowed): Implements checking of Mozilla's
        * platform/network/ResourceHandle.h:
        * platform/network/ResourceHandleClient.h:
        (WebCore::ResourceHandleClient::wasBlocked): Virtual for clients to get the "blocked" message

2007-03-15  Beth Dakin  <bdakin@apple.com>

        Reviewed by Hyatt.

        Fix for <rdar://problem/5065396> REGRESSION: leaks in 
        RenderBlock::layoutInlineChildren seen on buildbot

        This leak appeared after http://trac.webkit.org/projects/webkit/
        changeset/20188. This change shifted line boxes around in 
        removeChild(). But since removeChild() calls 
        setNeedsLayoutAndMinMaxRecalc(), all of the line boxes will be 
        removed once we actually lay out anyway. So this patch fixes the 
        leak by deleting the line boxes instead of shifting them around. 

        * editing/IndentOutdentCommand.cpp:
        (WebCore::IndentOutdentCommand::outdentParagraph): Call into 
        updateLayout(). This fixes an assertion I got in editing/
        execCommand/4976800.html This is very similar to the line box fix I 
        made recently (http://trac.webkit.org/projects/webkit/changeset/
        20177). We need to update layout before relying on VisiblePositions 
        after removing a node.
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::deleteLinesForBlock): New helper function 
        since this functionality is needed in three places now.
        (WebCore::RenderBlock::makeChildrenNonInline): Call into new 
        deleteLinesForBlock().
        (WebCore::RenderBlock::removeChild): Same.
        * rendering/RenderBlock.h:

2007-03-15  Timothy Hatcher  <timothy@apple.com>

        Reviewed by John.

        * Factored out most of our common build settings into .xcconfig files. Anything that was common in
          each build configuration was factored out into the shared .xcconfig file.
        * Adds a Version.xcconfig file to define the current framework version, to be used in other places.
        * Use the new $(BUNDLE_VERSION) (defined in Version.xcconfig) in the preprocessed Info.plist.
        * Use the versions defined in Version.xcconfig to set $(DYLIB_CURRENT_VERSION).

        * Configurations/Base.xcconfig: Added.
        * Configurations/DebugRelease.xcconfig: Added.
        * Configurations/Version.xcconfig: Added.
        * Configurations/WebCore.xcconfig: Added.
        * Info.plist:
        * WebCore.xcodeproj/project.pbxproj:

2007-03-15  Krzysztof Kowalczyk  <kkowalczyk@gmail.com>

        Not reviewed - gdk build fixes.

        * platform/gdk/EditorClientGdk.cpp:
        (WebCore::EditorClientGdk::handleKeypress):
        * platform/graphics/cairo/ImageSourceCairo.cpp:
        (WebCore::ImageSource::setData):
        * platform/graphics/gdk/ImageGdk.cpp:
        (WebCore::Image::loadPlatformResource):

2007-03-14  Justin Garcia  <justin.garcia@apple.com>

        Reviewed by john
        
        ~2x speed up of 5k rich text paste:
        http://shakespeare.mit.edu/hamlet/full.html        

        * editing/ReplaceSelectionCommand.cpp:
        (WebCore::ReplaceSelectionCommand::doApply): Remove the top 
        level style span if it's unnecessary before inserting
        into the document, it's faster than doing it after.
        * editing/ReplaceSelectionCommand.h: Exposed 
        ReplacementFragment::removeNodePreservingChildren so that
        the style span can be removed using non-undoable removes,
        like the rest of the removes done on the ReplacementFragment.
        * editing/markup.cpp:
        (WebCore::createMarkup): Make the style span the top level
        element, otherwise it's useless.  This also facilitates the
        optimization mentioned above.
        When including markup for a fully selected root, include markup
        for all the nodes beneath that fully selected root, to preserve 
        the structure and appearance of the copied markup.  Did this
        by merging with the code for adding markup for descendants of
        special commonAncestorBlocks.

2007-03-15  Beth Dakin  <bdakin@apple.com>

        Rubber-stamped by Adele.

        Rolling out http://trac.webkit.org/projects/webkit/changeset/20148 
        (which is a fix for http://bugs.webkit.org/show_bug.cgi?id=12595 
        and rdar://4722863) because it causes a horrible memory-trasher. 

        * bindings/js/JSHTMLFormElementCustom.cpp:
        (WebCore::JSHTMLFormElement::canGetItemsForName):
        (WebCore::JSHTMLFormElement::nameGetter):
        * bindings/js/kjs_dom.cpp:
        (KJS::):
        (KJS::DOMNamedNodesCollection::DOMNamedNodesCollection):
        (KJS::DOMNamedNodesCollection::lengthGetter):
        (KJS::DOMNamedNodesCollection::indexGetter):
        (KJS::DOMNamedNodesCollection::getOwnPropertySlot):
        * bindings/js/kjs_dom.h:
        (KJS::DOMNamedNodesCollection::classInfo):
        * bindings/js/kjs_html.cpp:
        (KJS::JSHTMLCollection::getNamedItems):
        * dom/ChildNodeList.cpp:
        (WebCore::ChildNodeList::ChildNodeList):
        (WebCore::ChildNodeList::length):
        (WebCore::ChildNodeList::item):
        (WebCore::ChildNodeList::nodeMatches):
        * dom/ChildNodeList.h:
        * dom/NameNodeList.cpp:
        (WebCore::NameNodeList::NameNodeList):
        (WebCore::NameNodeList::item):
        (WebCore::NameNodeList::nodeMatches):
        * dom/NameNodeList.h:
        (WebCore::NameNodeList::rootNodeAttributeChanged):
        * dom/Node.cpp:
        (WebCore::TagNodeList::TagNodeList):
        (WebCore::TagNodeList::nodeMatches):
        (WebCore::Node::registerNodeList):
        (WebCore::Node::unregisterNodeList):
        * dom/Node.h:
        * dom/NodeList.cpp:
        (WebCore::NodeList::NodeList):
        (WebCore::NodeList::~NodeList):
        (WebCore::NodeList::recursiveLength):
        (WebCore::NodeList::itemForwardsFromCurrent):
        (WebCore::NodeList::itemBackwardsFromCurrent):
        (WebCore::NodeList::recursiveItem):
        (WebCore::NodeList::itemWithName):
        (WebCore::NodeList::rootNodeChildrenChanged):
        * dom/NodeList.h:
        (WebCore::NodeList::rootNodeAttributeChanged):
        * html/HTMLFormElement.cpp:
        (WebCore::HTMLFormElement::HTMLFormElement):
        (WebCore::HTMLFormElement::~HTMLFormElement):
        (WebCore::HTMLFormElement::formData):
        (WebCore::HTMLFormElement::parseMappedAttribute):
        (WebCore::HTMLFormElement::removeFormElement):
        * html/HTMLFormElement.h:
        * html/HTMLGenericFormElement.cpp:
        (WebCore::HTMLGenericFormElement::parseMappedAttribute):
        (WebCore::HTMLGenericFormElement::insertedIntoTree):
        * html/HTMLGenericFormElement.h:
        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::parseMappedAttribute):

2007-03-15  Geoffrey Garen  <ggaren@apple.com>

        Added an assert to help catch a bug. Hopefully someone will hit it!
        
        * bindings/js/kjs_proxy.cpp:
        (WebCore::KJSProxy::~KJSProxy):

2007-03-14  Oliver Hunt  <oliver@apple.com>

        Reviewed by Adele.

        Fix for rdar://problem/5061737.
        
        This was a regression from the original Objective-C -> C++ conversion
        for the drag logic.  We don't need to call Range::startNode as we just
        need the document that contains the range.   

        * page/DragController.cpp:
        (WebCore::documentFragmentFromDragData):

2007-03-14  Mitz Pettel  <mitz@webkit.org>

        Reviewed by Hyatt.

        - http://bugs.webkit.org/show_bug.cgi?id=13071
          REGRESSION: Plain text files no longer wrap lines longer than the width of the browser window

        Test: fast/loader/text-document-wrapping.html

        * loader/TextDocument.cpp:
        (WebCore::TextTokenizer::write): Specified word-wrap:break-word for the <pre> element.

2007-03-14  Mitz Pettel  <mitz@webkit.org>

        Reviewed by Hyatt.

        - fix http://bugs.webkit.org/show_bug.cgi?id=13072
          REGRESSION (r15617): white-space: pre-wrap breaks off the last character of a wide word

        Test: fast/text/whitespace/pre-wrap-last-char.html

        * rendering/bidi.cpp:
        (WebCore::RenderBlock::findNextLineBreak): Undid the change from r15617.

2007-03-14  David Hyatt  <hyatt@apple.com>

        Add asserts to help catch double refs and double derefs of CachedResources.

        Reviewed by mjs

        * loader/CachedResource.cpp:
        (WebCore::CachedResource::ref):
        (WebCore::CachedResource::deref):

2007-03-14  Alice Liu  <alice.liu@apple.com>

        Rubber-stamped by Hyatt.

        Adding null check to prevent the crash that happens on 2nd run of iBench HTML load test

        * loader/icon/IconDataCache.cpp:
        (WebCore::IconDataCache::writeToDatabase):

=== Safari-5522.4 ===

2007-03-14  Adele Peterson  <adele@apple.com>

        Reviewed by Adam.

        Fix for <rdar://problem/5062898> REGRESSION: autocomplete window in text fields doesn't come up

        When we moved the initialization of a bunch of variables in the HTMLFormElement constructor, m_autocomplete accidently got initialized to false.

        * html/HTMLFormElement.cpp: (WebCore::HTMLFormElement::HTMLFormElement):

2007-03-14  Steve Falkenburg  <sfalken@apple.com>

        Reviewed by Adam.

        Added missing null check in case this is called on a subframe
        that hasn't started loading.

        * page/Frame.cpp:
        (WebCore::Frame::setMarkedTextMatchesAreHighlighted): Check for a null document.

2007-03-14  Antti Koivisto  <antti@apple.com>

        Reviewed by Geoff.

        Fix http://bugs.webkit.org/show_bug.cgi?id=13060
        REGRESSION: Repro ASSERT failure in Cache::adjustSize running layout tests
        <rdar://5060208>
        
        Script evaluation may have dereffed the CachedScript object already, causing double deref and
        eventually m_liveResourcesSize underflow.

        * html/HTMLScriptElement.cpp:
        (WebCore::HTMLScriptElement::notifyFinished):

2007-03-14  Adele Peterson  <adele@apple.com>

        Reviewed by Darin.

        Added InsertTab, InsertBacktab, InsertLineBreak, and InsertNewline to the editing command table.
        Added Event parameter to execCommand, and to all of the enabled and exec functions.  Right now,
        the event is only used by the newly added commands.  But in the future, many (and possibly all) of
        these editing commands will need to consider the event so they are applied to the correct selection.

        * WebCore.exp:
        * editing/Editor.cpp:
        (WebCore::execCopy):
        (WebCore::execCut):
        (WebCore::execDelete):
        (WebCore::execBackwardDelete):
        (WebCore::execForwardDelete):
        (WebCore::execMoveBackward):
        (WebCore::execMoveBackwardAndModifySelection):
        (WebCore::execMoveUpByPageAndModifyCaret):
        (WebCore::execMoveDown):
        (WebCore::execMoveDownAndModifySelection):
        (WebCore::execMoveForward):
        (WebCore::execMoveForwardAndModifySelection):
        (WebCore::execMoveDownByPageAndModifyCaret):
        (WebCore::execMoveLeft):
        (WebCore::execMoveLeftAndModifySelection):
        (WebCore::execMoveRight):
        (WebCore::execMoveRightAndModifySelection):
        (WebCore::execMoveToBeginningOfDocument):
        (WebCore::execMoveToBeginningOfDocumentAndModifySelection):
        (WebCore::execMoveToBeginningOfSentence):
        (WebCore::execMoveToBeginningOfSentenceAndModifySelection):
        (WebCore::execMoveToBeginningOfLine):
        (WebCore::execMoveToBeginningOfLineAndModifySelection):
        (WebCore::execMoveToBeginningOfParagraph):
        (WebCore::execMoveToBeginningOfParagraphAndModifySelection):
        (WebCore::execMoveToEndOfDocument):
        (WebCore::execMoveToEndOfDocumentAndModifySelection):
        (WebCore::execMoveToEndOfSentence):
        (WebCore::execMoveToEndOfSentenceAndModifySelection):
        (WebCore::execMoveToEndOfLine):
        (WebCore::execMoveToEndOfLineAndModifySelection):
        (WebCore::execMoveToEndOfParagraph):
        (WebCore::execMoveToEndOfParagraphAndModifySelection):
        (WebCore::execMoveParagraphBackwardAndModifySelection):
        (WebCore::execMoveParagraphForwardAndModifySelection):
        (WebCore::execMoveUp):
        (WebCore::execMoveUpAndModifySelection):
        (WebCore::execMoveWordBackward):
        (WebCore::execMoveWordBackwardAndModifySelection):
        (WebCore::execMoveWordForward):
        (WebCore::execMoveWordForwardAndModifySelection):
        (WebCore::execMoveWordLeft):
        (WebCore::execMoveWordLeftAndModifySelection):
        (WebCore::execMoveWordRight):
        (WebCore::execMoveWordRightAndModifySelection):
        (WebCore::execPaste):
        (WebCore::execSelectAll):
        (WebCore::execToggleBold):
        (WebCore::execToggleItalic):
        (WebCore::execRedo):
        (WebCore::execUndo):
        (WebCore::execInsertTab):
        (WebCore::execInsertBacktab):
        (WebCore::execInsertNewline):
        (WebCore::execInsertLineBreak):
        (WebCore::enabled):
        (WebCore::canPaste):
        (WebCore::hasEditableSelection):
        (WebCore::hasEditableRangeSelection):
        (WebCore::hasRangeSelection):
        (WebCore::hasRichlyEditableSelection):
        (WebCore::canRedo):
        (WebCore::canUndo):
        (WebCore::CommandEntry::):
        (WebCore::Editor::toggleBold):

        (WebCore::Editor::execCommand): Added optional event parameter.
        (WebCore::Editor::insertText): Added.  Calls handleTextInputEvent.
        (WebCore::Editor::insertTextWithoutSendingTextEvent): Renamed from insertText.
         Performs the actual insertion without dispatching any event.
        * editing/Editor.h:
        * page/EventHandler.cpp: (WebCore::EventHandler::defaultTextInputEventHandler):
          Call insertTextWithoutSendingTextEvent.

2007-03-14  Justin Garcia  <justin.garcia@apple.com>

        Reviewed by darin
        
        ~3x speedup pasting 5k lines of rich text:
        http://shakespeare.mit.edu/hamlet/full.html
        ~2x speedup pasting 10k lines of plain text
        
        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::computedStyle): Added for convenience.
        * css/CSSComputedStyleDeclaration.h:
        * editing/ReplaceSelectionCommand.cpp:
        (WebCore::ReplaceSelectionCommand::removeRedundantStyles):
        The code that pushed down the top level style span had
        a bug in it that made it do unnecessary work.  Instead of
        fixing the bug I removed the code because it was used to 
        help see more redundancies in second level style spans, but 
        createMarkup now *only* creates a top level style span.
        Only remove redundant styles from style spans and only remove
        unstyled elements if they are style spans.  FF doesn't
        remove redundant styles from elements, or remove redundant 
        font tags on copy/paste.  We could offer this functionality 
        through a separate "cleanup" command.
        * editing/markup.cpp:
        (WebCore::createMarkup): Only add markup for ancestors of 
        lastClosed if we're including markup for acommonAncestorBlock 
        (we do this for commonAncestorBlocks like tables and lists),
        otherwise it's unnecessary/redundant.

2007-03-14  Anders Carlsson  <acarlsson@apple.com>

        Reviewed by Ada.

        Make sure to call ResourceLoader::didReceiveData to ensure that there's a shared buffer with the resource
        data, since SubresourceLoaderClients now make use of that buffer.
        
        * loader/SubresourceLoader.cpp:
        (WebCore::SubresourceLoader::didReceiveData):

2007-03-14  Administrator  <acarlsson@apple.com>

        Get the size from the shared buffer.
        
        * platform/graphics/cg/ImageSourceCG.cpp:
        (WebCore::ImageSource::setData):
        * platform/graphics/cg/PDFDocumentImage.cpp:
        (WebCore::PDFDocumentImage::dataChanged):

2007-03-14  Mitz Pettel  <mitz@webkit.org>

        Reviewed by Hyatt, thumbs up by Darin.

        - fix http://bugs.webkit.org/show_bug.cgi?id=12782
          Reproducible crash in BidiContext::deref

        Test: fast/dynamic/anonymous-block-orphaned-lines.html

        * rendering/InlineBox.cpp:
        (WebCore::InlineBox::root): Added an assertion that we return a root inline box.
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::removeChild): Added code to adopt the line boxes of
        anonymous blocks being destroyed instead of leaving them orphaned, which
        is what caused this crash. The boxes will be deleted on the next layout, but
        this ensures consistency in the mean time.

2007-03-14  Lars Knoll <lars@trolltech.com>

        Reviewed by Antti.

        Fix the Qt build.
        Add a getter to SharedBuffer that returns a reference to the internal
        Vector to avoid an extra copy of the data.

        * platform/SharedBuffer.h:
        (WebCore::SharedBuffer::buffer):
        * platform/graphics/qt/ImageQt.cpp:
        (WebCore::Image::loadPlatformResource):
        * platform/graphics/qt/ImageSourceQt.cpp:
        (WebCore::detectImageFormat):
        (WebCore::createDecoder):
        (WebCore::ImageSource::setData):

2007-03-14  Antti Koivisto  <antti@apple.com>

        Reviewed by Mitz.
        
        Fix <rdar://problem/5058774>
        REGRESSION: In Mail, caret appears oversized when typing in a To Do note
        
        Horizontal and vertical were switched. Was regression from
        http://trac.webkit.org/projects/webkit/changeset/20103

        * rendering/RootInlineBox.cpp:
        (WebCore::RootInlineBox::addHighlightOverflow):

2007-03-14  David Hyatt  <hyatt@apple.com>

        Tweak the data() functions of stylesheets and scripts to be internally consistent.

        * loader/CachedCSSStyleSheet.cpp:
        (WebCore::CachedCSSStyleSheet::data):
        * loader/CachedScript.cpp:
        (WebCore::CachedScript::data):
        * loader/CachedXSLStyleSheet.cpp:
        (WebCore::CachedXSLStyleSheet::data):

2007-03-14  David Hyatt  <hyatt@apple.com>

        Fix Radar 5050688.  

        For large animated GIFs, destroy and recreate the source for every animation frame.  This keeps
        the memory consumption down while giant images are animating.

        Reviewed by andersca

        * platform/graphics/BitmapImage.cpp:
        (WebCore::BitmapImage::BitmapImage):
        (WebCore::BitmapImage::destroyDecodedData):
        (WebCore::BitmapImage::dataChanged):
        (WebCore::BitmapImage::advanceAnimation):
        * platform/graphics/BitmapImage.h:

2007-03-14  David Hyatt  <hyatt@apple.com>

        Make sure to use CFDataCreateWithBytesNoCopy where we can.

        Reviewed by andersca

        * platform/graphics/cg/ImageSourceCG.cpp:
        (WebCore::ImageSource::setData):
        * platform/graphics/cg/PDFDocumentImage.cpp:
        (WebCore::PDFDocumentImage::dataChanged):

2007-03-13  David Hyatt  <hyatt@apple.com>

        Fix for bugzilla bug 13050 and also radar p1 5050645.

        This patch reworks resource loading to avoid having redundant buffers in the icon database and in cached
        images in the WebCore cache.  It also avoids overcopying in top-level image documents and in the icon
        database.

        There is now only one SharedBuffer for a resource and everybody observes that buffer now instead of ever
        making their own.  Even ImageIO uses the SharedBuffer while decoding.

        The page in 13050 dropped from 145mb down to 45mb of memory use with this change for a stunning savings
        of 100mb.

        Reviewed by olliej, mjs

        * WebCore.exp:
        * loader/CachedCSSStyleSheet.cpp:
        (WebCore::CachedCSSStyleSheet::data):
        * loader/CachedCSSStyleSheet.h:
        * loader/CachedImage.cpp:
        (WebCore::CachedImage::data):
        * loader/CachedImage.h:
        * loader/CachedResource.cpp:
        (WebCore::CachedResource::CachedResource):
        (WebCore::CachedResource::~CachedResource):
        * loader/CachedResource.h:
        (WebCore::CachedResource::data):
        * loader/CachedScript.cpp:
        (WebCore::CachedScript::data):
        * loader/CachedScript.h:
        * loader/CachedXSLStyleSheet.cpp:
        (WebCore::CachedXSLStyleSheet::data):
        * loader/CachedXSLStyleSheet.h:
        * loader/DocLoader.cpp:
        (WebCore::DocLoader::checkCacheObjectStatus):
        * loader/ImageDocument.cpp:
        (WebCore::ImageTokenizer::writeRawData):
        (WebCore::ImageTokenizer::finish):
        * loader/icon/IconDataCache.cpp:
        (WebCore::IconDataCache::setImageData):
        (WebCore::IconDataCache::writeToDatabase):
        * loader/icon/IconDataCache.h:
        * loader/icon/IconDatabase.cpp:
        (WebCore::IconDatabase::imageDataForIconURL):
        (WebCore::IconDatabase::iconForPageURL):
        (WebCore::IconDatabase::setIconDataForIconURL):
        (WebCore::IconDatabase::setHaveNoIconForIconURL):
        (WebCore::IconDatabase::imageDataForIconURLQuery):
        * loader/icon/IconDatabase.h:
        * loader/icon/IconLoader.cpp:
        (WebCore::IconLoader::startLoading):
        (WebCore::IconLoader::didReceiveResponse):
        (WebCore::IconLoader::didReceiveData):
        (WebCore::IconLoader::didFail):
        (WebCore::IconLoader::finishLoading):
        (WebCore::IconLoader::clearLoadingState):
        * loader/icon/IconLoader.h:
        * loader/icon/SQLStatement.cpp:
        (WebCore::SQLStatement::getColumnBlobAsVector):
        (WebCore::SQLStatement::isExpired):
        * loader/icon/SQLStatement.h:
        * loader/loader.cpp:
        (WebCore::Loader::didFinishLoading):
        (WebCore::Loader::didReceiveData):
        * page/mac/WebCoreFrameBridge.mm:
        (-[WebCoreFrameBridge getData:andResponse:forURL:]):
        (-[WebCoreFrameBridge getAllResourceDatas:andResponses:]):
        * platform/SharedBuffer.h:
        (WebCore::SharedBuffer::isEmpty):
        * platform/graphics/BitmapImage.cpp:
        (WebCore::BitmapImage::destroyDecodedData):
        (WebCore::BitmapImage::dataChanged):
        * platform/graphics/BitmapImage.h:
        * platform/graphics/Image.cpp:
        (WebCore::Image::setData):
        * platform/graphics/Image.h:
        (WebCore::Image::dataChanged):
        (WebCore::Image::data):
        * platform/graphics/ImageSource.h:
        * platform/graphics/cg/ImageSourceCG.cpp:
        (WebCore::ImageSource::setData):
        * platform/graphics/cg/PDFDocumentImage.cpp:
        (WebCore::PDFDocumentImage::dataChanged):
        * platform/graphics/cg/PDFDocumentImage.h:
        * platform/graphics/mac/ImageMac.mm:
        (WebCore::Image::loadPlatformResource):
        * platform/graphics/svg/SVGImage.cpp:
        (WebCore::SVGImage::setData):
        * platform/mac/PasteboardMac.mm:
        (WebCore::fileWrapperForImage):

2007-03-13  Justin Garcia  <justin.garcia@apple.com>

        Reviewed by darin
        
        <rdar://problem/5046875> 
        Gmail Editor: Applying alignment to selected text in message also applies alignment to signature

        * editing/ApplyStyleCommand.cpp:
        (WebCore::ApplyStyleCommand::doApply): Don't call applyBlockStyle unless
        there is a block style to apply.
        (WebCore::ApplyStyleCommand::applyBlockStyle): Don't do the remove step.
        It was unnecessary and removed properties from blocks that could contain 
        content outside the range being operated on (added a testcase).
        (WebCore::ApplyStyleCommand::addBlockStyleIfNeeded): Used an early return
        instead of if-nesting.
        * editing/ApplyStyleCommand.h:
        * editing/CompositeEditCommand.cpp:
        (WebCore::CompositeEditCommand::moveParagraphContentsToNewBlockIfNecessary):
        Return the new block, if one was created.  Use moveParagraphs to move
        paragraphs into the new block, instead of moving nodes.  The old code moved
        too much (added a testcase).
        * editing/CompositeEditCommand.h:

2007-03-13  Oliver Hunt  <oliver@apple.com>

        Reviewed by Brady.

        To fix <rdar://problem/5044366> we now pass a NSString
        representation of the URL extracted with _web_originalDataAsString
        instead of relying on [NSURL absoluteString] in the bridge

        * page/mac/WebCoreFrameBridge.h:
        * page/mac/WebCoreFrameBridge.mm:
        (-[WebCoreFrameBridge getData:andResponse:forURL:]):

2007-03-13  Brady Eidson  <beidson@apple.com>

        Reviewed by Anders

        <rdar://problem/5048818> - REGRESSION: Incompletely loaded resources being saved to the object cache

        Due to a subtle change in loader behavior back in 10904, we would stop all loaders before calling 
        didFail() on them in the Cache loader.  As a result, we basically cleared all of the Subresource Loaders 
        out of the Cache loader before more properly failing them as errored out.  The result?  Partially loaded
        resources being cached.
        
        Since Loader::didFail() both calls error() on the object *and* removes the loader, the solution is to call 
        didFail() for all cancelled loaders instead of *only* removing them from the set of active loaders.
        
        In addition, pages that didn't completely load were being saved to the back/forward cache.  To fix that,
        I added a null check on the DocumentLoader's error to see if the page ended in an error, or did indeed 
        completely load.

        Note that the layout test for this - if possible - will require other enhancements including possibly adding
        support for window.stop().  That task is documented in <rdar://problem/5061826>

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::provisionalLoadStarted): Fixed a few bugs relating to my original BFCache rewrite to
          more perfectly restore the original behavior - including only caching HTML documents via the 
          m_client->canCachePage() call
        (WebCore::FrameLoader::canCachePage): Don't make the call to m_client->canCachePage() as that serves a different
          purpose
          - Check the mainDocumentError to see if the load ended in error as a further criteria in determining the 
          cachability of a page

        * loader/loader.cpp:
        (WebCore::Loader::cancelRequests): Call didFail(cancelledError()) instead of just removing the loaders from the 
          loaders-in-progress set.  This adds the effect of properly cleaning up the cached object.

2007-03-13  Beth Dakin  <bdakin@apple.com>

        Rendering part reviewed by Hyatt. Editing part consulted with and 
        rubber stamped by Justin and Harrison.

        Fix for <rdar://problem/5025925> A hang occurs in Safari when 
        attempting to print page at http://www.pcadvisor.co.uk

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::makeChildrenNonInline): 
        RenderBlock::makeChildrenNonInline() takes a block's inline 
        children and turns them into block children. If the children had 
        line boxes, those boxes were being leaked. In the layout test I 
        added with the change (and at pcadvisor.co.uk during printing) 
        children were being made non-inline, and then they were being made 
        inline again. This meant that some of the children ended up 
        pointing to totally stale line boxes that are normally just leaked. 
        This caused an infinite loop in RenderFlow::destroy(). This patch 
        simply deletes everyone's line boxes in 
        RenderBlock::makeChildrenNonInline()

        * editing/InsertParagraphSeparatorCommand.cpp:
        (WebCore::InsertParagraphSeparatorCommand::doApply): The other part 
        of this fix is that I added a call to updateLayout in 
        InsertParagraphSeparatorCommand::doApply(). One layout test 
        (editing/spelling/spelling.html) was changed by my patch to 
        RenderBlock. doApply() inserts a node into the render tree. In at 
        least one case in spelling.html, that caused some line boxes to be 
        deleted. Back in doApply() this meant that the RenderTree was out-
        of-date, and we mistakenly thought we were at the end of the 
        paragraph. This caused us to insert a RenderBR() at the end of the 
        tree instead of an empty RenderText(). No one seems to know exactly 
        why we insert either, or if the change is necessarily a problem. It 
        is clear, though, that the RenderTree in doApply() is out-of-date 
        after inserting the node and deleting some line boxes, so it seems 
        prudent to call into updateLayout().

2007-03-13  Adam Roben  <aroben@apple.com>

        Reviewed by Anders.

        * platform/FontData.h: Added m_isSystemFont parameter to match NSFont.

2007-03-13  Beth Dakin  <bdakin@apple.com>

        Reviewed by Maciej.

        Export DocumentLoader::setFrame(). Part of fix for <rdar://
        problem/4277074> 8F32: Help Viewer crashed on clicking link - 
        KHTMLView::viewportMouseReleaseEvent (12647)

        * WebCore.exp:

2007-03-13  Darin Adler  <darin@apple.com>

        Reviewed by Maciej.

        - fix http://bugs.webkit.org/show_bug.cgi?id=12794
          <rdar://problem/5028154> REGRESSION: TripTik planner at aaa.com never
          finishes loading due to unclosed canvas tag (12794)

        Change <canvas> elements so that their contents are parsed normally,
        but not rendered. This change fixes the bug, because normal parsing
        rules close the <canvas> element in that case. The special parser
        stuff was just getting in the way.

        Also do some basic cleanup to the HTML parser. This was motivated by
        an earlier version of this patch that made even more changes to the
        parser, but the cleanup is still worth landing.

        Test: fast/canvas/canvas-hides-fallback.html
        Test: fast/canvas/script-inside-canvas-fallback.html
        Test: fast/canvas/unclosed-canvas-1.html
        Test: fast/canvas/unclosed-canvas-2.html
        Test: fast/canvas/unclosed-canvas-3.html
        Test: fast/canvas/unclosed-canvas-4.html

        * html/HTMLCanvasElement.h: Added a data member to keep track of whether the
        renderer is a RenderHTMLCanvas or not.
        * html/HTMLCanvasElement.cpp:
        (WebCore::HTMLCanvasElement::createRenderer): If JavaScript is enabled, create
        a RenderHTMLCanvas. If it's not, let the default code create the default type
        of renderer, which will result in fallback content being visible. The
        RenderHTMLCanvas class already hides all of its children. Set the m_rendererIsCanvas
        boolean accordingly. Since the actual storage for the canvas is allocated lazily
        when you actually get a drawing context, we don't need to do anything special
        to prevent it when JavaScript is disabled; the relevant functions won't be called.
        (WebCore::HTMLCanvasElement::reset): Protect the code that manipulates the
        RenderHTMLCanvas with a check of m_rendererIsCanvas. This is the only code inside
        the DOM element that relies on the renderer type.

        * html/HTMLParser.h: Removed unneeded includes. Marked HTMLParser as
        Noncopyable. Changed the Document parameter to the constructor to instead
        be HTMLDocument. Renamed discard_until to m_skipModeTag for clarity.
        Removed unused noSpaces function and unneeded public doc() function.
        Moved data members all down to the end so you can see them together in order.
        Renamed map to m_currentMapElement and isindex to m_isindexElement.
        Removed unused end and headLoaded data members.  Renamed m_fragment to
        m_isParsingFragment to make it clearer that it's a boolean, not a fragment.

        * html/HTMLParser.cpp:
        (WebCore::HTMLParser::HTMLParser): Changed to use member construction
        syntax instead of calling reset(). This is especially helpful in the
        fragment case, where calling reset() later on is illegal, so not using
        it in the constructor lets us assert.
        (WebCore::HTMLParser::~HTMLParser): Did an explicit deref instead of
        calling setCurrent for its side effect.
        (WebCore::HTMLParser::reset): Updated for member name changes and removal
        and to use document instead of doc().
        (WebCore::HTMLParser::setCurrent): Use document instead of doc().
        (WebCore::HTMLParser::setSkipMode): Added. No longer inline. Now sets the
        m_inCanvasBeforeFirstOpenTag data member to false.
        (WebCore::HTMLParser::parseToken): Tightened up the skip mode logic at the
        top of the function, and added a FIXME about the strange case there where
        we don't skip yet stay in skip mode. Updated for renaming and doc().
        (WebCore::HTMLParser::insertNode): Updated for renaming and doc().
        (WebCore::HTMLParser::handleError): Ditto.
        (WebCore::HTMLParser::framesetCreateErrorCheck): Ditto.
        (WebCore::HTMLParser::isindexCreateErrorCheck): Changed to use RefPtr.
        (WebCore::HTMLParser::noscriptCreateErrorCheck): Updated for renaming and doc().
        (WebCore::HTMLParser::mapCreateErrorCheck): Ditto.
        (WebCore::HTMLParser::getNode): Removed the special case for canvas here.
        Canvas fallback is now handled in the DOM, not the parser. Updated for
        renaming and doc().
        (WebCore::HTMLParser::allowNestedRedundantTag): Changed a #define into a C++
        constant.
        (WebCore::HTMLParser::processCloseTag): Updated for renaming and doc().
        (WebCore::HTMLParser::isInline): Ditto.
        (WebCore::HTMLParser::tagIsOnStack): Added. Used by new canvas logic.
        (WebCore::HTMLParser::popBlock): Updated for renaming and doc(). Also renamed
        the local variable Elem to elem.
        (WebCore::HTMLParser::createHead): Ditto.
        (WebCore::HTMLParser::handleIsindex): Changed to use RefPtr.
        (WebCore::HTMLParser::startBody): Updated for renaming and doc().
        (WebCore::HTMLParser::finished): Ditto.

2007-03-13  David Hyatt  <hyatt@apple.com>

        Two more cleanup fixes to the cache.  Don't call destroyDecodedData in the BitmapImage destructor, since
        clearing the image source and calling setData on it again causes it to do an extra copy of the encoded
        data.  Since we're about to be destroyed this is just wasteful.

        When the cache prunes, don't allow it to destroy the decoded data of an image that is still actively loading,
        since we've established that ImageIO can actually crash if you yank the rug out from under it like that.

        Reviewed by ggaren

        * loader/Cache.cpp:
        (WebCore::Cache::prune):
        * platform/graphics/BitmapImage.cpp:
        (WebCore::BitmapImage::~BitmapImage):

2007-03-13  Anders Carlsson  <acarlsson@apple.com>

        Try fixing the Qt build.
        
        * editing/Editor.h:
        (WebCore::Editor::setStartNewKillRingSequence):

2007-03-13  David Harrison  <harrison@apple.com>

        Reviewed by Justin.

        <rdar://problem/5031181> cntl-k at end of paragraph adds nothing to the kill ring
        <rdar://problem/5031189> REGRESSION: cntl-y yanks only the most recently killed content

        For rdar://5031181, properly extend the selection before the killring handling, and
        make sure plainText of that selection returns a linefeed.
        
        For rdar://5031189, restore Editor::deleteRange() code that continued current killring,
        even though the range deletion implicitly stopped it via changing the selection.
        
        A byproduct of this change is the elimination of RUNDFINDER vs CONTENT TextIterator. The
        only difference between the two was whether to emit a newline when the range started
        with a blockflow element. No callers actually need that any more.

        Tests added:
        * editing/pasteboard/emacs-ctrl-k-y-001-expected.checksum: Added.
        * editing/pasteboard/emacs-ctrl-k-y-001-expected.png: Added.
        * editing/pasteboard/emacs-ctrl-k-y-001-expected.txt: Added.
        * editing/pasteboard/emacs-ctrl-k-y-001.html: Added.

        * editing/Editor.cpp:
        (WebCore::Editor::deleteRange):
        Clear the "start new kill ring sequence" setting, because it was set to true
        when the selection was updated by deleting the range.
        
        (WebCore::Editor::deleteWithDirection):
        If extending the selection to the end of paragraph resulted in a caret selection,
        extend by character, to handle the case when the selection started as a caret at
        the end of paragraph.
        
        * editing/TextIterator.cpp:
        (WebCore::TextIterator::TextIterator):
        Initialize new member variables for tracking handling of the beginning of the range.
        
        (WebCore::TextIterator::advance):
        Call representNodeOffsetZero on the m_endContainer.
        Move visibility checks into handleTextNode and handleReplacedElement.
        
        (WebCore::TextIterator::handleTextNode):
        (WebCore::TextIterator::handleTextBox):
        Call emitText.
        
        (WebCore::TextIterator::handleReplacedElement):
        Moved visibility check into here.
        
        (WebCore::shouldEmitNewlinesBeforeAndAfterNode):
        
        (WebCore::TextIterator::shouldRepresentNodeOffsetZero):
        (WebCore::TextIterator::representNodeOffsetZero):
        New. Emits proper sequence when encountering offset 0 of a node, including the
        m_endContainer. Started with code from handleNonTextNode.
        
        (WebCore::TextIterator::handleNonTextNode):
        Call representNodeOffsetZero.
        
        (WebCore::TextIterator::exitNode):
        Similar to shouldRepresentNodeOffsetZero, do not emit the newline if the node
        was collapsed, and before any other emitted content.
        
        (WebCore::TextIterator::emitCharacter):
        
        (WebCore::TextIterator::emitText):
        New. Consolidates code used by handleText and handleTextBox.
        
        (WebCore::CharacterIterator::CharacterIterator):
        Removed RUNFINDER.

        (WebCore::WordAwareIterator::WordAwareIterator):
        Removed RUNFINDER.
        
        (WebCore::WordAwareIterator::advance):
        Formatting.

        (WebCore::TextIterator::rangeLength):
        Formatting.
        
        * editing/TextIterator.h:
        Added member variables for tracking handling of the beginning of the range.
        Eliminated concept of RUNDFINDER vs CONTENT TextIterator.
        
        * editing/visible_units.cpp:
        (WebCore::nextBoundary):
        Eliminated concept of RUNDFINDER vs CONTENT TextIterator.

2007-03-13  David Hyatt  <hyatt@apple.com>

        Clean up the null image case in CachedImage::data to make sure the size totals will stay accurate.
        I'm not convinced this case can even be hit, but I'm cleaning it up just in case.

        * loader/CachedImage.cpp:
        (WebCore::CachedImage::data):

2007-03-13  David Hyatt  <hyatt@apple.com>

        Reorder the call to allReferencesRemoved, since otherwise the live object size will become
        incorrect.

        * loader/CachedResource.cpp:
        (WebCore::CachedResource::deref):

2007-03-13  Antti Koivisto  <antti@apple.com>

        Reviewed by Darin.
        
        Fix http://bugs.webkit.org/show_bug.cgi?id=11083
        REGRESSION: Typing tab key fails to insert a tab character in Google Docs editable area
        <rdar://problem/4757650>
        
        Allow inserting tabs in designMode. Backtab behaves like before (matches FF).

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

2007-03-13  David Hyatt  <hyatt@apple.com>

        Fix two counting errors in the decoded size of objects in the WebCore cache.  We need to explicitly
        destroy decoded data when clearing out a partially loaded image that had an error, since the destructor
        (although it does destroy the data) disconnects the observer so that the notification doesn't happen.

        Some CachedImages aren't in the cache (like image documents).  When the decoded size of such an image
        changes we should not notify the cache, since - newsflash - we aren't actually in it.

        Reviewed by ggaren

        * loader/CachedImage.cpp:
        (WebCore::CachedImage::clear):
        (WebCore::CachedImage::decodedSizeChanged):

2007-03-13  Darin Adler  <darin@apple.com>

        Reviewed by Tim Hatcher and John Sullivan.

        - fix <rdar://problem/4915303> CrashTracer: 36 crashes in Safari at
          com.apple.AppKit: -[NSView getRectsBeingDrawn:count:] + 502

        * page/mac/FrameMac.mm: (WebCore::Frame::imageFromRect):
        This was calling drawRect: directly, but NSView's getRectsBeingDrawn:count:
        method was never really safe to call unless it was AppKit that called your
        drawRect: method. Changed it to call drawSingleRect: instead. A little ugly,
        but seems to work and will almost certainly fix the bug.

2007-03-13  Nikolas Zimmermann  <zimmermann@kde.org>

        Reviewed by Maciej.

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

        Call forgetGenericContext in JSSVGPathSeg destructor, otherwhise
        we'll hit an ASSERT in a debug build, when running svg/custom/js-update-path-changes.svg
        a few dozen times in a single WebKit instance. The ASSERT is good and just warns that
        there was already a generic context pointer registered, and the new "to be registered"
        object already exists, but pointing to a different object. That's because garbage collection
        calls the JSSVGPathSeg destructor, but that didn't cleanup the generic context map.

        Only JSSVGPathSeg is hit by this problem, as it's the only non SVGAnimated* type
        using the generic context system while using a custom JSSVGPathSegList implementation.

        Also cleanup JSSVGPathSegListCustom code to call the static forgetGenericContext
        method instead of doing the same using custom code.

        * bindings/js/JSSVGPathSegListCustom.cpp:
        (WebCore::removeFromPathSegContextMap):
        (WebCore::JSSVGPathSegList::clear):
        (WebCore::JSSVGPathSegList::removeItem):
        * bindings/scripts/CodeGeneratorJS.pm:

2007-03-13  Darin Adler  <darin@apple.com>

        Reviewed by Adele.

        - fix http://bugs.webkit.org/show_bug.cgi?id=12595
          <rdar://problem/4722863> REGRESSION: Can't add item to cart at lnt.com
          (JS type error) (12595)

        Test: fast/forms/old-names.html

        * bindings/js/JSHTMLFormElementCustom.cpp:
        (WebCore::JSHTMLFormElement::canGetItemsForName): If the form collection has
        nothing for a given name, try the form's oldNamedElement function.
        (WebCore::JSHTMLFormElement::nameGetter): Ditto.

        * bindings/js/kjs_dom.h: Removed the DOMNamedNodesCollection. Instead we will use
        a class derived from NodeList.
        * bindings/js/kjs_dom.cpp: Ditto.

        * bindings/js/kjs_html.cpp:
        (KJS::VectorNodeList::VectorNodeList): Added. Constructor for a new class derived
        from NodeList to be used for the named items result from a collection -- uses a
        vector of node pointers.
        (KJS::VectorNodeList::length): Added.
        (KJS::VectorNodeList::item): Added.
        (KJS::JSHTMLCollection::getNamedItems): Use VectorNodeList and the existing wrapper
        for NodeList rather than a custom JavaScript class, DOMNamedNodesCollection.

        * dom/ChildNodeList.h:
        * dom/ChildNodeList.cpp:
        (WebCore::ChildNodeList::ChildNodeList): Updated to derive from TreeNodeList,
        since NodeList is now a simpler class.
        (WebCore::ChildNodeList::elementMatches): Updated for name and parameter change.

        * dom/NameNodeList.h:
        * dom/NameNodeList.cpp:
        (WebCore::NameNodeList::NameNodeList): Updated to derive from TreeNodeList,
        since NodeList is now a simpler class.
        (WebCore::NameNodeList::rootNodeAttributeChanged): Updated for name and
        parameter change.

        * dom/Node.h: Change register/unregister functions to take TreeNodeList.
        * dom/Node.cpp:
        (WebCore::TagNodeList::TagNodeList): Updated to derive from TreeNodeList,
        since NodeList is now a simpler abstract class.
        (WebCore::TagNodeList::elementMatches): Updated for name and parameter change.
        (WebCore::Node::registerNodeList): Changed type from NodeList to TreeNodeList.
        (WebCore::Node::unregisterNodeList): Ditto.

        * dom/NodeList.h: Broke NodeList into a simpler base class and a derived class
        with the machinery for iterating a tree, called TreeNodeList.
        * dom/NodeList.cpp:
        (WebCore::NodeList::~NodeList): Added.
        (WebCore::NodeList::itemWithName): Factored out of the old itemWithName.
        (WebCore::TreeNodeList::TreeNodeList): Renamed from NodeList.
        (WebCore::TreeNodeList::~TreeNodeList): Ditto.
        (WebCore::TreeNodeList::recursiveLength): Ditto.
        (WebCore::TreeNodeList::itemForwardsFromCurrent): Ditto.
        (WebCore::TreeNodeList::itemBackwardsFromCurrent): Ditto.
        (WebCore::TreeNodeList::recursiveItem): Ditto.
        (WebCore::TreeNodeList::itemWithName): Factored half of this into this function,
        the other half in NodeList::itemWithName.
        (WebCore::TreeNodeList::rootNodeAttributeChanged): Added. No longer inline.
        (WebCore::TreeNodeList::rootNodeChildrenChanged): Renamed from NodeList.

        * html/HTMLFormElement.h: Added formElementNameChanged and oldNamedElement
        fucntions, and a map called m_oldNames. Also removed m_boundary, which I
        thought I had already done.
        * html/HTMLFormElement.cpp:
        (WebCore::HTMLFormElement::HTMLFormElement): Initialize m_oldNames to 0.
        Switched the rest of the members to initialization syntax.
        (WebCore::HTMLFormElement::~HTMLFormElement): Delete m_oldNames.
        (WebCore::HTMLFormElement::formElementNameChanged): Added. Stores a reference
        to one element under each of its old names.
        (WebCore::HTMLFormElement::oldNamedElement): Added. Returns the old element
        that once had a given name.

        * html/HTMLGenericFormElement.h:
        * html/HTMLGenericFormElement.cpp:
        (WebCore::HTMLGenericFormElement::parseMappedAttribute): When the name
        attribute changes, tell the form about the old name.
        (WebCore::HTMLGenericFormElement::insertedIntoTree): When telling a form
        about an element, also store away the old name so that we can use it
        when the name changes later.

        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::parseMappedAttribute): Added a call to the
        base class in the nameAttr case, so the code in HTMLGenericFormElement
        above will get called in the input element case.

2007-03-13  Antti Koivisto  <antti@apple.com>

        Reviewed by Alexey.

        Alexey spotted a DOS by using string of 64k unbreakable character in
        fix for http://bugs.webkit.org/show_bug.cgi?id=12833

        * dom/Text.cpp:
        (WebCore::Text::createWithLengthLimit):

2007-03-13  Lars Knoll <lars@trolltech.com>

        Fix the Qt build

        * WebCore.pro:

2007-03-13  Rob Buis  <buis@kde.org>

        Reviewed by Darin.

        http://bugs.webkit.org/show_bug.cgi?id=12576
        WebKit does not support xlink:show attributes

        Make an exception for non-empty targets, these should be opened
        in a new window, unless the value is _self.

        * ksvg2/svg/SVGAElement.cpp:
        (WebCore::SVGAElement::defaultEventHandler):

2007-03-13  David Hyatt  <hyatt@apple.com>

        - fix cache issues seen in http://bugs.webkit.org/show_bug.cgi?id=13050
          6 objects and ~200MB leaked after opening then closing tab
          <rdar://problem/5058714>

        Double the encoded size of images for now.  We do this to account for a bug in ImageIO where they hold
        a separate copy of image data.  See <rdar://problem/5050645>.

        Reviewed by aroben.

        * loader/CachedImage.cpp:
        (WebCore::CachedImage::data):

2007-03-12  Krzysztof Kowalczyk  <kkowalczyk@gmail.com>

        Not reviewed - gdk build fix.

        * platform/gdk/TemporaryLinkStubs.cpp:
        (SearchPopupMenu::enabled): add missing stub.

2007-03-12  David Kilzer  <ddkilzer@kilzer.net>

        Reviewed by Darin.

        - fix http://bugs.webkit.org/show_bug.cgi?id=13045
          REGRESSION: Blackboard CourseWare Error with Nightlies after Mar 8

        * html/HTMLFormElement.cpp:
        (WebCore::getUniqueBoundaryString): Speculative fix: remove dashes from
        the boundary prefix that appear after non-dash characters.

2007-03-12  Mitz Pettel  <mitz@webkit.org>

        Reviewed by Anders.

        - fix http://bugs.webkit.org/show_bug.cgi?id=13015
          REGRESSION (r17233-r17241): Repro crash when leaving a page whose unload handler submits a form

        Test: fast/loader/onunload-form-submit-crash-2.html

        * loader/DocumentLoader.cpp:
        (WebCore::DocumentLoader::finishedLoading): Added null check.

2007-03-12  Anders Carlsson  <acarlsson@apple.com>

        Reviewed by Darin.

        <rdar://problem/4900071>
        http://bugs.webkit.org/show_bug.cgi?id=6454
        ASSERTION: Navigating 'back' in frameset: !_private->previousItem (6454)

        Change back the behavior of checkLoadComplete to traverse the entire frame tree instead of
        just the parent frames of the current frame. This is needed in order to reset the previous history item
        for all frames when doing a frame navigation. (This was changed in revision 11819)
        
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::recursiveCheckLoadComplete):
        (WebCore::FrameLoader::checkLoadComplete):
        * loader/FrameLoader.h:

2007-03-12  Justin Garcia  <justin.garcia@apple.com>

        Reviewed by darin
        
        <rdar://problem/5056619> 
        REGRESSION: Gmail Editor: Dragging text into Reply (textarea) field results in a crash at WebCore::InsertNodeBeforeCommand::doApply()
        
        * editing/SelectionController.cpp:
        (WebCore::removingNodeRemovesPosition): Added.
        (WebCore::SelectionController::nodeWillBeRemoved): Clear the
        selection if it's inside a shadow tree.
        * page/DragController.cpp:
        (WebCore::setSelectionToDragCaret): Return false to signal to
        clients that a drop shouldn't be performed if the second attempt
        to set a selection ends up in non-editable content.

2007-03-12  Darin Adler  <darin@apple.com>

        Reviewed by Tim Hatcher.

        - fixed JavaScript wrapper classes to be correct for a variety of cases
          that a new test uncovered: was broken for at least 5 classes

        - fixed Objective-C wrapper classes to be correct for a variety of cases
          that a test case uncovered: was broken for ast least 50 classes

        - added missing DOM API for creating OverflowEvent and WheelEvent instances

        Test: fast/dom/wrapper-classes.html

        * DerivedSources.make: Added missing bindings: HTMLCanvasElement for ObjC,
        CDATASection, Comment, and EntityReference for JavaScript.
        * WebCore.xcodeproj/project.pbxproj: Added those new generated files.

        * bindings/js/JSHTMLElementWrapperFactory.cpp:
        (WebCore::createJSHTMLWrapper): Corrected the wrapper classes for <keygen>,
        which needs an HTMLSelectElement wrapper, and <xmp>, which needs an
        HTMLPreElement wrapper.

        * bindings/objc/DOMInternal.h: Updated for new naming scheme.
        Also moved createDOMWrapper from the KJS namespace to the WebCore namespace.
        * bindings/objc/DOMUtility.mm:
        (KJS::createDOMWrapper): Broke the core function into a separate one, and
        left it in the KJS namespace because Objective-C++ rules make it impossible
        for it to work in the WebCore namespace. Used a macro-based implementation
        to cut down on repeated code, and added missing cases for Counter,
        HTMLOptionsCollection, Range, XPathExpression, XPathResult, Event, RGBColor,
        Rect, Window, DOMImplementation, NodeIterator, TreeWalker, and HTMLCollection.
        (WebCore::createDOMWrapper): The other half of the function.

        * bindings/objc/DOM.mm:
        (WebCore::createElementClassMap): Corrected the wrapper classes for
        <canvas>, which needs a DOMHTMLCanvasElement wrapper, <del>, which needs
        a DOMHTMLModElement wrapper, <embed>, which needs a DOMHTMLEmbedElement
        wrapper, <ins>, which needs a DOMHTMLModElement wrapper, <th>, which needs
        a DOMHTMLTableCellElement wrapper, and <xmp>, which needs an
        DOMHTMLPreElement wrapper.
        (+[DOMNode _wrapNode:]): Updated for new naming scheme.
        (+[DOMNode _wrapEventTarget:]): Ditto.
        (+[DOMNodeFilter _wrapNodeFilter:]): Ditto.
        (ObjCNodeFilterCondition::acceptNode): Ditto.
        (-[DOMDocument createNodeIterator:whatToShow:filter:expandEntityReferences:]): Ditto.
        (-[DOMDocument createTreeWalker:whatToShow:filter:expandEntityReferences:]): Ditto.
        (WebCore::ObjCEventListener::handleEvent): Ditto.

        * dom/Document.cpp: (WebCore::Document::createEvent):
        Added cases for OverflowEvent and WheelEvent.

        * dom/OverflowEvent.h: Added empty constructor and initOverflowEvent.
        * dom/OverflowEvent.cpp:
        (WebCore::OverflowEvent::OverflowEvent): Added.
        (WebCore::OverflowEvent::initOverflowEvent): Added.
        * dom/OverflowEvent.idl: Added initOverflowEvent.

        * bindings/objc/PublicDOMInterfaces.h: Added initOverflowEvent.

        * bindings/objc/DOMCSS.mm:
        (+[DOMStyleSheet _wrapStyleSheet:]): Updated for new naming scheme.
        (+[DOMCSSRule _wrapCSSRule:]): Corrected wrapper for CSSUnknownRule.
        (+[DOMCSSValue _wrapCSSValue:]): Updated for new naming scheme.

        * bindings/js/kjs_css.h:
        (KJS::DOMRGBColor::impl): Added. Used when making an ObjC wrapper.
        (KJS::DOMRect::impl): Ditto.

        * bindings/js/kjs_dom.cpp: (KJS::toJS): Corrected the wrapper classes for
        CDATASection, Comment, and EntityReference.

        * bindings/js/kjs_html.cpp: Corrected the class name for HTMLElement
        (was "DOMHTMLElement") and HTMLCollection (was "Collection").

        * bindings/objc/DOMImplementationFront.h:
        * bindings/objc/DOMImplementationFront.cpp:
        (WebCore::implementationFront): Added new overload that returns a front given
        a JavaScript wrapper. Needed by the code that makes the Objective-C wrapper.

        * bindings/objc/WebScriptObject.mm:
        (+[WebScriptObject _convertValueToObjcValue:originRootObject:rootObject:]):
        Updated since createDOMWrapper is now in the WebCore namespace.

        * bindings/scripts/CodeGeneratorObjC.pm: Update the naming scheme for the
        wrapper creation functions to use _wrapElement: rather then _elementWith:
        style. Removed now-unneeded special cases for things that needed to stay
        upper-case, since we don't have to do the whole lcfirst thing.

        * html/HTMLCanvasElement.idl: Added #if so we can successfully generate the
        Objective-C wrapper for this class, even though we can't yet handle the
        DOMObject return type.

        * html/HTMLOptionsCollection.idl: Added GenerateNativeConverter so we get
        an appropriate toJS function.

        * bindings/objc/DOMEvents.mm:
        (+[DOMEvent _wrapEvent:]):
        * bindings/objc/DOMHTML.mm:
        (-[DOMHTMLDocument createDocumentFragmentWithMarkupString:baseURL:]):
        (-[DOMHTMLDocument createDocumentFragmentWithText:]):
        * bindings/objc/DOMObject.mm:
        (-[DOMObject sheet]):
        * bindings/objc/DOMRGBColor.mm:
        (-[DOMRGBColor red]):
        (-[DOMRGBColor green]):
        (-[DOMRGBColor blue]):
        (-[DOMRGBColor alpha]):
        (+[DOMRGBColor _wrapRGBColor:]):
        * bindings/objc/DOMSVGPathSegInternal.mm:
        (+[DOMSVGPathSeg _wrapSVGPathSeg:]):
        * bindings/objc/DOMXPath.mm:
        (+[DOMNativeXPathNSResolver _wrapXPathNSResolver:]):
        * page/mac/WebCoreFrameBridge.mm:
        (-[WebCoreFrameBridge nodesFromList:]):
        (-[WebCoreFrameBridge elementWithName:inForm:]):
        (-[WebCoreFrameBridge formForElement:]):
        (-[WebCoreFrameBridge currentForm]):
        (-[WebCoreFrameBridge controlsInForm:]):
        (-[WebCoreFrameBridge rangeByAlteringCurrentSelection:SelectionController::direction:SelectionController::granularity:]):
        (-[WebCoreFrameBridge convertNSRangeToDOMRange:]):
        (-[WebCoreFrameBridge markDOMRange]):
        (-[WebCoreFrameBridge markedTextDOMRange]):
        (-[WebCoreFrameBridge smartDeleteRangeForProposedRange:]):
        (-[WebCoreFrameBridge documentFragmentWithMarkupString:baseURLString:]):
        (-[WebCoreFrameBridge documentFragmentWithText:inContext:]):
        (-[WebCoreFrameBridge documentFragmentWithNodesAsParagraphs:]):
        (-[WebCoreFrameBridge replaceSelectionWithNode:selectReplacement:smartReplace:matchStyle:]):
        (-[WebCoreFrameBridge replaceSelectionWithText:selectReplacement:smartReplace:]):
        (-[WebCoreFrameBridge increaseSelectionListLevel]):
        (-[WebCoreFrameBridge increaseSelectionListLevelOrdered]):
        (-[WebCoreFrameBridge increaseSelectionListLevelUnordered]):
        (-[WebCoreFrameBridge dragCaretDOMRange]):
        (-[WebCoreFrameBridge editableDOMRangeForPoint:]):
        (-[WebCoreFrameBridge characterRangeAtPoint:]):
        (-[WebCoreFrameBridge typingStyle]):
        (-[WebCoreFrameBridge rangeOfCharactersAroundCaret]):
        * platform/mac/ClipboardMac.mm:
        (WebCore::ClipboardMac::declareAndWriteDragImage):
        * platform/mac/PasteboardMac.mm:
        (WebCore::Pasteboard::writeSelection):
        Updated for new naming scheme.

2007-03-12  Timothy Hatcher  <timothy@apple.com>

        Reviewed by Darin.

        <rdar://problem/4990691> REGRESSION: Selecting text in Adium's Messages field causes horizontal shift

        Corrected the recursive point conversion and scrolling done in scrollPointRecursively to use the
        document view of each NSClipView.

        * platform/mac/ScrollViewMac.mm:
        (WebCore::ScrollView::scrollPointRecursively): Call convertPoint:fromView: on the document views,
        not the clip views as we encounter them. Then call constrainScrollPoint: on the converted point to
        constrain to the document view bounds. And finally call scrollPoint: on the document view, not the clip view.

2007-03-12  Antti Koivisto  <antti@apple.com>

        Reviewed by Alexey.

        Fix http://bugs.webkit.org/show_bug.cgi?id=12833
        REGRESSION: Selecting text in 6.6MB txt file is sluggish as of the Feb 19th nightly
        <rdar://problem/5028159>
        
        Divide large text blocks (>64kB) over multiple text nodes. This limits linebox searches to
        a manageable subset.
        
        * dom/Text.cpp:
        (WebCore::Text::createWithLengthLimit):
        * dom/Text.h:
        * html/HTMLParser.cpp:
        (WebCore::HTMLParser::parseToken):
        * loader/TextDocument.cpp:
        (WebCore::TextTokenizer::write):

2007-03-12  David Hyatt  <hyatt@apple.com>

        Fix a regression in printing.  Printer fonts need to be part of the
        font cache key, since printer fonts have different glyph widths.
        (Integer antialiasing is used for screen fonts but not for printer fonts.)

        Reviewed by aroben

        * platform/FontCache.cpp:
        (WebCore::FontPlatformDataCacheKey::FontPlatformDataCacheKey):
        (WebCore::FontPlatformDataCacheKey::operator==):
        (WebCore::computeHash):
        (WebCore::FontCache::getCachedFontPlatformData):

2007-03-12  Lars Knoll <lars@trolltech.com>

        add missing symbol to fix the Qt build again.

        * platform/qt/SearchPopupMenuQt.cpp:
        (WebCore::SearchPopupMenu::enabled):

2007-03-12  Adele Peterson  <adele@apple.com>

        Reviewed by Oliver.

        Adding the ability to enable or disable a SearchPopupMenu.

        * platform/SearchPopupMenu.h:
        * platform/mac/SearchPopupMenuMac.mm: (WebCore::SearchPopupMenu::enabled):
        * rendering/RenderTextControl.cpp: (WebCore::RenderTextControl::showPopup):

2007-03-12  Rob Buis  <buis@kde.org>

        Reviewed by Nikolas Zimmermann.

        http://bugs.webkit.org/show_bug.cgi?id=12500
        SVG fails to correctly handle all link style selectors
        http://bugs.webkit.org/show_bug.cgi?id=12567
        <text> elements ignore <a> children

        Allow <a> inside svg text and handle xlink:show.

        * ksvg2/svg/SVGAElement.cpp:
        (WebCore::SVGAElement::createRenderer):
        (WebCore::SVGAElement::defaultEventHandler):
        (WebCore::SVGAElement::childShouldCreateRenderer):
        * ksvg2/svg/SVGAElement.h:
        * ksvg2/svg/SVGElement.h:
        (WebCore::SVGElement::isTextContent):
        * ksvg2/svg/SVGTextContentElement.h:
        (WebCore::SVGTextContentElement::isTextContent):
        * ksvg2/svg/SVGTextElement.cpp:
        (WebCore::SVGTextElement::childShouldCreateRenderer):
        * rendering/SVGInlineFlowBox.cpp:
        (WebCore::translateBox):
        (WebCore::placePositionedBoxesHorizontally):
        (WebCore::placeBoxesVerticallyWithAbsBaseline):

2007-03-12  Adele Peterson  <adele@apple.com>

        Reviewed by Oliver.

        Add a missing parameter to the constructor.

        * platform/PlatformKeyboardEvent.h:
        * platform/win/KeyEventWin.cpp: (WebCore::PlatformKeyboardEvent::PlatformKeyboardEvent):

2007-03-12  Lars Knoll <lars@trolltech.com>

        Fix the Qt build. I still get crashes though :/

        * platform/graphics/qt/ImageDecoderQt.cpp:
        (WebCore::ImageDecoderQt::clearFrame):
        * platform/graphics/qt/ImageDecoderQt.h:
        * platform/graphics/qt/ImageSourceQt.cpp:
        (WebCore::ImageSource::setData):
        (WebCore::ImageSource::frameIsCompleteAtIndex):
        (WebCore::ImageSource::clear):
        (WebCore::ImageSource::destroyFrameAtIndex):
        * platform/qt/ClipboardQt.cpp:
        (WebCore::ClipboardQt::ClipboardQt):
        * platform/qt/ClipboardQt.h:
        * platform/qt/DragDataQt.cpp:
        (WebCore::DragData::createClipboard):

2007-03-11  Krzysztof Kowalczyk  <kkowalczyk@gmail.com>

        Not reviewed - gdk build fixes.

        * platform/gdk/EditorClientGdk.cpp:
        (WebCore::EditorClientGdk::respondToChangedSelection): add stub
        * platform/gdk/EditorClientGdk.h:
        * platform/gdk/FrameGdk.cpp:
        * platform/gdk/TemporaryLinkStubs.cpp:
        (Editor::markMisspellings): add stub

2007-03-11  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Adele.

        http://bugs.webkit.org/show_bug.cgi?id=12560
        W3C XPath test Text_Nodes.svg fails

        * xml/XPathStep.cpp:
        (WebCore::XPath::Step::nodeTestMatches): Revert the fix, as the behavior doesn't appear 
        all that desirable as it did at first glance.

2007-03-11  Oliver Hunt  <oliver@apple.com>

        Reviewed by hyatt.

        Fix for <rdar://problem/5055690> ASSERTION failure on drop into 
        editable element with content changed on drop 

        After setting the selection for a drop into an editable region 
        we make sure the we succeeded.  If we didn't we assume a focus handler
        or similar altered the element contents and try again, if the second
        attempt fails we bail out.

        * page/DragController.cpp:
        (WebCore::setSelectionToDragCaret):
        (WebCore::DragController::concludeDrag):

2007-03-11  Oliver Hunt  <oliver@apple.com>

        Reviewed by Adele.

        Moving Frame{Mac}::respondToChangedSelection to Frame.cpp
        Added new EditorClient method to handle old bridge function
        
        * bridge/EditorClient.h:
           Added respondToChangedSelection to replace old bridge function
        * editing/Editor.cpp:
        (WebCore::Editor::respondToChangedSelection):
           Add client call to replace old bridge call from Frame::respondToChangedSelection
        * editing/SelectionController.cpp:
        (WebCore::SelectionController::setSelection):
           No longer directly call Editor as Frame::respondToChangedSelection
           makes the call
        * page/Frame.cpp:
        (WebCore::Frame::respondToChangedSelection):
           Moved from FrameMac, replaced bridge call with call to Editor
        * page/mac/FrameMac.mm:
           Moved respondToChangedSelection to Frame.cpp
        * page/mac/WebCoreFrameBridge.h:
           Removed respondToChangedSelection from bridge
        * page/qt/FrameQt.cpp:
           Remove stub method for respondToChangedSelection

2007-03-11  Krzysztof Kowalczyk  <kkowalczyk@gmail.com>

        Reviewed by Brady Eidson.

        Linux/gdk fix.

        * loader/gdk/FrameLoaderClientGdk.cpp:
        (WebCore::FrameLoaderClientGdk::shouldGoToHistoryItem): return true so
        that FrameLoader:goBackOrForwards() works.

2007-03-10  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Darin Adler.

        Fixed <rdar://problem/4587763> PAC file: lock inversion between QT and 
        JSCore causes a hang @ www.panoramas.dk
        
        See JavaScriptCore ChangeLog for details.
        
        * bindings/objc/WebScriptObject.mm:
        (_didExecute): Added helpful ASSERT.
        (+[WebScriptObject throwException:]): Added missing JSLock.

2007-03-11  Antti Koivisto  <antti@apple.com>

        Reviewed by Hyatt.

        Optimize linebox memory consumption:
        - move all bitfields to baseclass compacting them
        - make InlineTextBox::m_truncation unsigned short and make it relative to m_start
        - remove extremely rarely used EllipsisBox pointer from RootInlineBox and instead
          use a global hashmap to store it if needed
        - use minimum required number of bits to store BidiStatus enum variables in RootInlineBox
        - move overflow variables in RootInlineBox to a separate struct that is instantiated
          only if any of the variables is set to a value that can't trivially be derived from 
          box x, y, width and height
          
        As a result line box objects shrink:
            InlineBox: 44 -> 44 bytes
            InlineTextBox: 68 -> 60 bytes
            InlineFlowBox: 68 -> 64 bytes
            RootInlineBox: 128 -> 88 bytes
            
        The optimizations possiblity was noticed when debugging http://bugs.webkit.org/show_bug.cgi?id=12833
        Bug 12833: REGRESSION: Selecting text in 6.6MB txt file is sluggish as of the Feb 19th nightly
        <rdar://problem/5028159>
        
        On that page the patch saves 11.5MB or some 21% of linebox memory consumption. It also
        actually improves selection performance somewhat by improving memory locality.

        * rendering/InlineBox.h:
        (WebCore::InlineBox::InlineBox):
        * rendering/InlineFlowBox.h:
        (WebCore::InlineFlowBox::InlineFlowBox):
        * rendering/InlineTextBox.cpp:
        (WebCore::InlineTextBox::placeEllipsisBox):
        (WebCore::InlineTextBox::nodeAtPoint):
        (WebCore::InlineTextBox::paint):
        (WebCore::InlineTextBox::paintDecoration):
        (WebCore::InlineTextBox::paintSpellingOrGrammarMarker):
        (WebCore::InlineTextBox::paintMarkedTextUnderline):
        * rendering/InlineTextBox.h:
        (WebCore::InlineTextBox::InlineTextBox):
        * rendering/RootInlineBox.cpp:
        (WebCore::throw):
        (WebCore::RootInlineBox::Overflow::operator delete):
        (WebCore::RootInlineBox::Overflow::destroy):
        (WebCore::RootInlineBox::destroy):
        (WebCore::RootInlineBox::detachEllipsisBox):
        (WebCore::RootInlineBox::clearTruncation):
        (WebCore::RootInlineBox::placeEllipsis):
        (WebCore::RootInlineBox::paintEllipsisBox):
        (WebCore::RootInlineBox::addHighlightOverflow):
        (WebCore::RootInlineBox::nodeAtPoint):
        (WebCore::RootInlineBox::adjustPosition):
        (WebCore::RootInlineBox::selectionTop):
        (WebCore::RootInlineBox::setLineBreakInfo):
        (WebCore::RootInlineBox::ellipsisBox):
        (WebCore::RootInlineBox::setVerticalOverflowPositions):
        (WebCore::RootInlineBox::setHorizontalOverflowPositions):
        (WebCore::RootInlineBox::setVerticalSelectionPositions):
        * rendering/RootInlineBox.h:
        (WebCore::RootInlineBox::RootInlineBox):
        (WebCore::RootInlineBox::topOverflow):
        (WebCore::RootInlineBox::bottomOverflow):
        (WebCore::RootInlineBox::leftOverflow):
        (WebCore::RootInlineBox::rightOverflow):
        (WebCore::RootInlineBox::lineBreakBidiStatus):
        (WebCore::RootInlineBox::selectionBottom):
        (WebCore::RootInlineBox::Overflow::Overflow):

2007-03-11  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Darin.

        A partial fix for http://bugs.webkit.org/show_bug.cgi?id=13021
        XPath can be very slow

        * xml/XPathExpression.cpp:
        (WebCore::XPathExpression::evaluate): Cache evaluationContext in a local variable.

        * xml/XPathExpressionNode.cpp:
        (WebCore::XPath::Expression::evaluationContext):
        * xml/XPathExpressionNode.h:
        (WebCore::XPath::Expression::addSubExpression):
        (WebCore::XPath::Expression::subExprCount):
        (WebCore::XPath::Expression::subExpr):
        * xml/XPathFunctions.cpp:
        * xml/XPathFunctions.h:
        (WebCore::XPath::Function::setName):
        (WebCore::XPath::Function::arg):
        (WebCore::XPath::Function::argCount):
        (WebCore::XPath::Function::name):
        Made one-liners critical for performance inline.

        * xml/XPathGrammar.y: Fully parse NodeTests, so that strings are no longer passed for what is
        essentially an enum. Use LocationPath accessors to add steps, instead of directly manipulating
        internal data members.

        * xml/XPathParser.cpp:
        (WebCore::XPath::Parser::parseStatement):
        (WebCore::XPath::Parser::registerNodeTest):
        (WebCore::XPath::Parser::deleteNodeTest):
        * xml/XPathParser.h:
        Added support methods for changes in XPathGrammar.y.

        * xml/XPathPath.cpp:
        (WebCore::XPath::Filter::evaluate): Cache evaluationContext in a local variable. Use swap() to avoid
        performing vector assignments.
        (WebCore::XPath::LocationPath::evaluate): Use swap() to avoid performing vector assignments.
        (WebCore::XPath::LocationPath::optimizeStepPair): This new method is called during LocationPath construction, 
        to simplify the path as it's being built. Currently, the only optimized case is "//*" - it is a basis for
        important operations that cannot be efficiently written in XPath 1.0, but can be optimized with a little bit
        of XPath 2.0.
        (WebCore::XPath::LocationPath::appendStep): A new accessor that modifies m_steps and calls optimizeStepPair().
        (WebCore::XPath::LocationPath::insertFirstStep): Ditto.
        * xml/XPathPath.h:
        (WebCore::XPath::LocationPath::setAbsolute): A new accessor.

        * xml/XPathStep.h:
        (WebCore::XPath::Step::NodeTest::):
        (WebCore::XPath::Step::NodeTest::NodeTest):
        (WebCore::XPath::Step::NodeTest::kind):
        (WebCore::XPath::Step::NodeTest::data):
        Step::NodeTest is a new sub-class that represents a fully parsed NodeTest.
        (WebCore::XPath::Step::axis):
        (WebCore::XPath::Step::nodeTest):
        (WebCore::XPath::Step::nodeTestData):
        (WebCore::XPath::Step::namespaceURI):
        (WebCore::XPath::Step::predicates):
        (WebCore::XPath::Step::setAxis):
        (WebCore::XPath::Step::setNodeTest):
        (WebCore::XPath::Step::setNodeTestData):
        (WebCore::XPath::Step::setNamespaceURI):
        (WebCore::XPath::Step::setPredicates):
        New accessors that let optimizeStepPair() manipulate Step data.

        * xml/XPathStep.cpp:
        (WebCore::XPath::Step::Step): Use the new NodeTest class.
        (WebCore::XPath::Step::evaluate): Cache evaluationContext in a local variable. Use swap() to avoid
        performing unneeded vector assignments.
        (WebCore::XPath::Step::nodesInAxis): Cosmetic changes.
        (WebCore::XPath::Step::nodeTestMatches): Use NodeTest instead of parsing the test from string each time.
        Added a partial implementation of XPath 2.0 element() node test.

2007-03-10  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Darin.

        http://bugs.webkit.org/show_bug.cgi?id=12249
        FCKeditor: <hr>, <ul> and <ol> have id="undefined"

        This fixes the attached reduction, but not the original issue.

        Test: editing/execCommand/default-parameters.html

        * dom/Document.h:
        * dom/Document.idl:
        Make second and third execCommand() parameters optional.

2007-03-10  Adele Peterson  <adele@apple.com>

        Reviewed by Maciej.

        Fix for http://bugs.webkit.org/show_bug.cgi?id=13028
        REGRESSION: textField:doCommandBySelector:inFrame: not being called properly

        * html/HTMLInputElement.cpp: (WebCore::HTMLInputElement::defaultEventHandler):
          Before calling the base class defaultEventHandler, which will call handleKeypress, call doTextFieldCommandFromEvent.        

2007-03-10  Mitz Pettel  <mitz@webkit.org>

        Reviewed by Darin.

        - fix http://bugs.webkit.org/show_bug.cgi?id=13013
          REGRESSION: Selection box does not scroll to where the focus jumps when pressing an alphanumeric key

        Test: fast/forms/listbox-typeahead-scroll.html

        * html/HTMLSelectElement.cpp:
        (WebCore::HTMLSelectElement::setSelectedIndex): Reordered to set the active selection's
        anchor and end before selecting the option, since the active selection is used to
        decide where to scroll when the selection is made.
        (WebCore::HTMLSelectElement::defaultEventHandler): Removed redundant check.

2007-03-10  Mitz Pettel  <mitz@webkit.org>

        Reviewed by Darin.

        - fix http://bugs.webkit.org/show_bug.cgi?id=12973
          REGRESSION: Reproducible assert while loading this test file if css is already in the cache

        Test: fast/dom/css-cached-import-rule.html

        Replaced some direct calls to document->stylesheetLoaded() with calls to
        the sheet's checkLoaded(). The latter calls back to the element's sheetLoaded() --
        which notifies the document of the load -- and then updates the sheet's
        loadCompleted() flag, ensuring that it stays in sync with whether the stylesheet
        is still considered pending by the document.

        * dom/ProcessingInstruction.cpp:
        (WebCore::ProcessingInstruction::parseStyleSheet):
        * dom/StyleElement.cpp:
        (WebCore::StyleElement::childrenChanged):
        * html/HTMLLinkElement.cpp:
        (WebCore::HTMLLinkElement::process):
        (WebCore::HTMLLinkElement::setCSSStyleSheet):
        * ksvg2/svg/SVGStyleElement.cpp:
        (WebCore::SVGStyleElement::sheetLoaded):
        * ksvg2/svg/SVGStyleElement.h:

2007-03-10  David Kilzer  <ddkilzer@webkit.org>

        Reviewed by Darin.

        - fix http://bugs.webkit.org/show_bug.cgi?id=9609
          REGRESSION: Missing image icon needs to be moved back to WebKit

        * WebCore.exp: Export WebCore::Image::loadPlatformResource(const char*) for use in
        [WebHTMLView _startDraggingImage:at:operation:event:sourceIsDHTML:DHTMLWroteData:].

2007-03-09  Darin Adler  <darin@apple.com>

        Reviewed by Justin.

        - fix http://bugs.webkit.org/show_bug.cgi?id=8928
          <rdar://problem/5045708> REPRODUCIBLE ASSERT: Cannot paste HTML into a
          contenteditable region in an XHTML document (8928)

        Test: editing/pasteboard/paste-xml.xhtml

        * editing/markup.cpp: (WebCore::createFragmentFromMarkup): Added a check for 0
        here, since createContextualFragment can return 0 for XML documents that fail
        to parse. In my testing, callers all seem equipped to handle 0.

2007-03-09  Mitz Pettel  <mitz@webkit.org>

        Reviewed by Darin.

        - fix http://bugs.webkit.org/show_bug.cgi?id=9929
          REGRESSION: crash on logging in on mijnpostbank.nl

        Test: http/tests/misc/onload-remove-iframe-crash-2.html

        The resulted from an iframe's load event handler removing the iframe
        from the document.

        * dom/Document.cpp:
        (WebCore::Document::implicitClose): Bail out early if an event handler
        removed the frame.
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::FrameLoader):
        (WebCore::FrameLoader::clear):
        (WebCore::FrameLoader::checkCompleted): Protect the frame from deletion
        by event handlers.
        (WebCore::FrameLoader::checkCompletedTimerFired):
        (WebCore::FrameLoader::scheduleCheckCompleted):
        (WebCore::FrameLoader::detachFromParent): Schedule a completion check
        on the parent (in case the child is what has been keeping it from completing).
        * loader/FrameLoader.h:

2007-03-08  David Kilzer  <ddkilzer@webkit.org>

        Reviewed by Beth.

        - fix http://bugs.webkit.org/show_bug.cgi?id=13019
          REGRESSION (r20074): Forms don't submit on a variety of websites

        No tests added since LayoutTests/fast/forms/document-write.html was timing out
        and causing a layout test failure.

        * html/HTMLFormElement.cpp:
        (WebCore::HTMLFormElement::submit): Removed stray code.

2007-03-08  Krzysztof Kowalczyk  <kkowalczyk@gmail.com>

        Not reviewed - gdk build fix.

        * platform/graphics/cairo/ImageSourceCairo.cpp:
        (WebCore::ImageSource::frameIsCompleteAtIndex): add empty stub

2007-03-08  Justin Garcia  <justin.garcia@apple.com>

        Reviewed by harrison
        
        <rdar://problem/4903193> 
        On particular page, Copy is so slow it seems like a hang
        
        ~2x speedup copying:
        http://shakespeare.mit.edu/henryviii/full.html 
        Also produces less bloated markup.

        * editing/markup.cpp:
        (WebCore::startMarkup): Don't wrap text nodes in style spans.
        For Elements, don't inline styles inherited from ancestors.
        (WebCore::createMarkup): No longer necessary to find 
        the root's default style and pass it to startMarkup.
        Add a wrapper span around the markup with the styles
        that all nodes in the markup inherit (the inheritable 
        styles from the common ancestor container's computed style).
        Added a FIXME about unecessary markup for inline ancestors 
        up to the commonAncestorBlock.

2007-03-08  Darin Adler  <darin@apple.com>

        Reviewed by Adele.

        - <rdar://problem/4470381> multipart/form-data boundary security vulnerability

        By making the form data boundary a string with some random data in it, we reduce
        the possibility that anyone could take advantage of it by creating a file that
        intentionally has the boundary string in it.

        * html/HTMLFormElement.h: Removed boundary(), setBoundary(), and m_boundary.
        Marked a lot more stuff private.
        * html/HTMLFormElement.cpp:
        (WebCore::HTMLFormElement::HTMLFormElement): Removed code to initialize
        m_boundary.
        (WebCore::randomNumber): Added. Function that returns a random number, including
        seeding the random number generator the first time it's called. For now, usees the more
        random function random() on Mac OS X and the more-standard rand() on other platforms.
        (WebCore::HTMLFormElement::formData): Take a parameter with the form boundary string,
        and use that instead of m_boundary.
        (WebCore::getUniqueBoundaryString): Added. Makes a boundary string using random numbers
        and base 64 encoding.
        (WebCore::HTMLFormElement::submit): Call getUniqueBoundaryString and pass the boundary
        string into formData for multipart form posts.

2007-03-08  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Adele.
        
        <rdar://problem/4646563> REGRESSION: Unable to send text message from Verizon text message website: vtext.com (12588)
        http://bugs.webkit.org/show_bug.cgi?id=12588

        Carefully revised which focus operations restore previous selection, which clear it, and which
        select the whole control contents.
        
        Tests:
        fast/forms/focus-selection-input.html
        fast/forms/focus-selection-textarea.html
        
        * dom/Element.cpp:
        (WebCore::Element::focus):
        * dom/Element.h:
        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::focus):
        (WebCore::HTMLInputElement::accessKeyAction):
        * html/HTMLInputElement.h:
        * html/HTMLLabelElement.cpp:
        (WebCore::HTMLLabelElement::focus):
        (WebCore::HTMLLabelElement::accessKeyAction):
        * html/HTMLLabelElement.h:
        * html/HTMLLegendElement.cpp:
        (WebCore::HTMLLegendElement::focus):
        * html/HTMLLegendElement.h:
        * html/HTMLTextAreaElement.cpp:
        (WebCore::HTMLTextAreaElement::focus):
        * html/HTMLTextAreaElement.h:
        * page/FocusController.cpp:
        (WebCore::FocusController::advanceFocus):

2007-03-08  Justin Garcia  <justin.garcia@apple.com>

        Reviewed by harrison

        <http://bugs.webkit.org/show_bug.cgi?id=12244>
        FCKeditor: Find dialog doesn't work

        * bindings/js/kjs_window.cpp:
        (KJS::Window::find): Added.  This function doesn't yet 
        support whole word searches, searching in subframes, or
        opening the find dialog.
        (KJS::WindowFunc::callAsFunction):
        * bindings/js/kjs_window.h:
        (KJS::Window::):

2007-03-08  David Hyatt  <hyatt@apple.com>

        Fix regression from throwing away frames of large animated images.  Alter
        animated images so that they refuse to advance the animation until the
        current displayed frame has been fully decoded.

        Reviewed by ggaren

        * platform/graphics/BitmapImage.cpp:
        (WebCore::BitmapImage::startAnimation):
        (WebCore::BitmapImage::advanceAnimation):
        * platform/graphics/ImageSource.h:
        * platform/graphics/cg/ImageSourceCG.cpp:
        (WebCore::ImageSource::frameIsCompleteAtIndex):

2007-03-08  David Hyatt  <hyatt@apple.com>

        Fix 2% performance regression on the PLT.  Increase the large animated
        image cutoff from 1MB to 5MB.

        In addition when pruning we will aggressively discard image sources.

        Reviewed by ggaren

        * platform/graphics/BitmapImage.cpp:
        (WebCore::BitmapImage::destroyDecodedData):

2007-03-08  Timothy Hatcher  <timothy@apple.com>

        Reviewed by John.

        <rdar://problem/4664697> highlighter SPI needs a node parameter to give more context

        Pass the RenderObject's node to customHighlightLineRect and paintCustomHighlight.

        * page/Frame.h:
        * page/mac/FrameMac.mm:
        (WebCore::Frame::customHighlightLineRect):
        (WebCore::Frame::paintCustomHighlight):
        * page/mac/WebCoreFrameBridge.h:
        * rendering/InlineTextBox.cpp:
        (WebCore::InlineTextBox::paintCustomHighlight):
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::paintCustomHighlight):
        * rendering/RootInlineBox.cpp:
        (WebCore::RootInlineBox::addHighlightOverflow):
        (WebCore::RootInlineBox::paintCustomHighlight):

2007-03-08  Justin Garcia  <justin.garcia@apple.com>

        Reviewed by harrison
        
        <http://bugs.webkit.org/show_bug.cgi?id=13000>
        Range.createContextualFragment is not supported

        * dom/Range.cpp:
        (WebCore::Range::createContextualFragment): The
        "startContainer" may not be a container, if the
        range starts inside text.  In that case, look
        to the parent of the start node for an HTMLElement.

2007-03-08  Justin Garcia  <justin.garcia@apple.com>

        Reviewed by harrison
        
        <rdar://problem/5049671>
        Gmail Editor: With linked text, Remove Formatting doesn't always remove underline

        * editing/Editor.cpp:
        (WebCore::Editor::removeFormattingAndStyle): Clear removed
        anchors after the deletion.

2007-03-08  David Kilzer  <ddkilzer@webkit.org>

        Reviewed by NOBODY (build fix).

        Added missing file for r20059:
        <rdar://problem/4708689> -- REGRESSION: Some symbols with 2-byte display as garbage in Hotmail.

        File was taken from this svn repository which contained versions of ucnv.h and ucnv_err.h
        that were identical to ours:
        http://source.icu-project.org/repos/icu/icu/tags/release-3-2/source/common/unicode/ucnv_cb.h

        * icu/unicode/ucnv_cb.h: Added.

2007-03-08  Shrikant Gangoda  <shrikant.gangoda@celunite.com>

        Gdk build fix.

        * platform/graphics/cairo/ImageSourceCairo.cpp:
        (WebCore::ImageSource::~ImageSource):
        (WebCore::ImageSource::clear):

2007-03-08  Oliver Hunt  <oliver@apple.com>

        Reviewed by Adam.

        To match old TEC behaviour when using ICU we need to use 
        a few manual fallback encodings for the GBK/EUC-CN charsets

        <rdar://problem/4708689> -- REGRESSION: Some symbols with 2-byte display as garbage in Hotmail.

        * platform/TextCodecICU.cpp:
        (WebCore::TextCodecICU::TextCodecICU):
        (WebCore::TextCodecICU::createICUConverter):
        (WebCore::gbkEscapes):
        (WebCore::gbkCallbackEscape):
        (WebCore::gbkCallbackSubstitute):
        (WebCore::TextCodecICU::encode):
        * platform/TextCodecICU.h:
        (WebCore::TextCodecICU::needsGBKFallbacks):
        (WebCore::TextCodecICU::setNeedsGBKFallbacks):

2007-03-08  Alexey Proskuryakov  <ap@webkit.org>

        Build fix.

        * xml/XPathUtil.cpp:
        (WebCore::XPath::stringValue):

2007-03-08  David Hyatt  <hyatt@apple.com>

        This patch dramatically reduces the memory consumed by animated images.  For large animated GIFs (defined for
        now as >1mb in terms of decoded frame buffer size), we will now aggressively flush previous frames of the
        animated GIF and just re-decode them on the fly if the animation loops.

        Whenever a large animated GIF has its animation reset, we will also just throw out everything and start
        the animation over (in order to get rid of any cached detritus held in the ImageSource).

        With this patch and the sample GIF used to test, WebKit's memory consumption went from 160MB down to 16MB.

        Reviewed by mjs

        * platform/graphics/BitmapImage.cpp:
        (WebCore::BitmapImage::destroyDecodedData):
        (WebCore::BitmapImage::resetAnimation):
        (WebCore::BitmapImage::advanceAnimation):
        * platform/graphics/ImageSource.h:
        * platform/graphics/cg/ImageSourceCG.cpp:
        (WebCore::ImageSource::~ImageSource):
        (WebCore::ImageSource::clear):

2007-03-08  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Darin.

        http://bugs.webkit.org/show_bug.cgi?id=13006
        XPath string-value is broken for some node types

        Test: fast/xpath/string-value.html

        * xml/XPathUtil.cpp:
        (WebCore::XPath::stringValue): Fix it :-)

2007-03-07  Anders Carlsson  <acarlsson@apple.com>

        Reviewed by Adam.

        <rdar://problem/4981000> 
        http://bugs.webkit.org/show_bug.cgi?id=12634
        REGRESSION: crash loading web archive (12634)
        
        The reason this bug wasn't always reproducible is that it involved sending an event to a plugin while 
        the page was loading. Before we send the event to the plugin we defer loads. The problem was that
        MainResourceLoader::setDefersLoad would not work with data loads.
        
        * loader/DocumentLoader.cpp:
        (WebCore::DocumentLoader::setRequest):
        Only set m_committed to false if we also have a valid unreachable URL.
        
        * loader/MainResourceLoader.cpp:
        (WebCore::MainResourceLoader::setDefersLoading):
        Make sure to stop and start data loads.

2007-03-07  Krzysztof Kowalczyk  <kkowalczyk@gmail.com>

        Not reviewed.

        Gdk build fixes.

        * platform/gdk/EditorClientGdk.cpp:
        (WebCore::EditorClientGdk::handleKeypress): renamed
        (WebCore::EditorClientGdk::handleInputMethodKeypress): add a stub
        * platform/gdk/EditorClientGdk.h:
        * platform/graphics/cairo/ImageSourceCairo.cpp:
        (WebCore::ImageSource::destroyFrameAtIndex): add a stub

2007-03-07  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Darin.

        http://bugs.webkit.org/show_bug.cgi?id=13004
        Repeatedly calling XPathExpression.evaluate() causes crashes or memory leaks

        Removed XPath::Expression::optimize() and related methods, since they were buggy and almost useless.
        Merged doEvaluate() into evaluate(), since this was all evaluate() was doing after the above changes.

        Test: fast/xpath/evaluate-twice.html

        * xml/XPathExpression.cpp:
        (WebCore::XPathExpression::evaluate):
        * xml/XPathExpressionNode.cpp:
        (WebCore::XPath::Expression::Expression):
        (WebCore::XPath::Expression::~Expression):
        * xml/XPathExpressionNode.h:
        * xml/XPathFunctions.cpp:
        (WebCore::XPath::FunLast::evaluate):
        (WebCore::XPath::FunPosition::evaluate):
        (WebCore::XPath::FunId::evaluate):
        (WebCore::XPath::FunLocalName::evaluate):
        (WebCore::XPath::FunNamespaceURI::evaluate):
        (WebCore::XPath::FunName::evaluate):
        (WebCore::XPath::FunCount::evaluate):
        (WebCore::XPath::FunString::evaluate):
        (WebCore::XPath::FunConcat::evaluate):
        (WebCore::XPath::FunStartsWith::evaluate):
        (WebCore::XPath::FunContains::evaluate):
        (WebCore::XPath::FunSubstringBefore::evaluate):
        (WebCore::XPath::FunSubstringAfter::evaluate):
        (WebCore::XPath::FunSubstring::evaluate):
        (WebCore::XPath::FunStringLength::evaluate):
        (WebCore::XPath::FunNormalizeSpace::evaluate):
        (WebCore::XPath::FunTranslate::evaluate):
        (WebCore::XPath::FunBoolean::evaluate):
        (WebCore::XPath::FunNot::evaluate):
        (WebCore::XPath::FunTrue::evaluate):
        (WebCore::XPath::FunLang::evaluate):
        (WebCore::XPath::FunFalse::evaluate):
        (WebCore::XPath::FunNumber::evaluate):
        (WebCore::XPath::FunSum::evaluate):
        (WebCore::XPath::FunFloor::evaluate):
        (WebCore::XPath::FunCeiling::evaluate):
        (WebCore::XPath::FunRound::evaluate):
        * xml/XPathPath.cpp:
        (WebCore::XPath::Filter::evaluate):
        (WebCore::XPath::LocationPath::evaluate):
        (WebCore::XPath::Path::evaluate):
        * xml/XPathPath.h:
        * xml/XPathPredicate.cpp:
        (WebCore::XPath::Number::evaluate):
        (WebCore::XPath::StringExpression::evaluate):
        (WebCore::XPath::Negative::evaluate):
        (WebCore::XPath::NumericOp::evaluate):
        (WebCore::XPath::EqTestOp::evaluate):
        (WebCore::XPath::LogicalOp::evaluate):
        (WebCore::XPath::Union::evaluate):
        * xml/XPathPredicate.h:
        * xml/XPathStep.cpp:
        * xml/XPathStep.h:
        * xml/XPathVariableReference.cpp:
        (WebCore::XPath::VariableReference::evaluate):
        * xml/XPathVariableReference.h:

2007-03-07  Sam Weinig  <sam@webkit.org>

        Reviewed by Tim H.

        Remove unused #import from Objective-C bindings and cleanup the order of #imports.

        * bindings/scripts/CodeGeneratorObjC.pm:

2007-03-07  Sam Weinig  <sam@webkit.org>

        Reviewed by Tim H.

        Make sure the baseURI attribute generates for private Objective-C bindings.

        * dom/Node.idl:

2007-03-07  Anders Carlsson  <acarlsson@apple.com>

        Reviewed by Maciej.

        <rdar://problem/4874059>
        REGRESSION: Painter IX:register - Crash in WebCore:: ResourceLoader::willSendRequest()

        If a load is done from inside of an error delegate method that is called because we cancel another load, 
        the first load should be ignored since this is what shipping WebKit does. 
        
        (Actually, it does load the page in the data source but doesn't do anything with it since the data source
        won't have a web frame).
        
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::load):
        Just bail out if m_isStoppingLoad is true.

2007-03-07  David Hyatt  <hyatt@apple.com>

        Use CGImageRelease instead of CFRelease.

        Reviewed by aroben

        * platform/graphics/cg/ImageCG.cpp:
        (WebCore::FrameData::clear):
        * platform/graphics/cg/ImageSourceCG.cpp:
        (WebCore::ImageSource::destroyFrameAtIndex):

2007-03-07  David Hyatt  <hyatt@apple.com>

        Fix a regression where the cache size overflows because of a double
        subtraction per resource when they got removed from the cache.  Add an
        assert to adjustSize to detect this case in the future.

        Fix ImageSourceCG so that when we flush decoded data from our cache that
        we also flush it from the ImageSource.

        Reviewed by mjs

        * loader/Cache.cpp:
        (WebCore::Cache::adjustSize):
        * platform/graphics/BitmapImage.cpp:
        (WebCore::BitmapImage::~BitmapImage):
        (WebCore::BitmapImage::destroyDecodedData):
        * platform/graphics/Image.h:
        * platform/graphics/ImageSource.h:
        * platform/graphics/cg/ImageSourceCG.cpp:
        (WebCore::ImageSource::setData):
        (WebCore::ImageSource::destroyFrameAtIndex):

2007-03-07  Mitz Pettel  <mitz@webkit.org>

        Reviewed by Darin.

        - fix http://bugs.webkit.org/show_bug.cgi?id=13002
          Incomplete repaint of inset outlines

        Test: fast/repaint/outline-inset.html

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

2007-03-07  Oliver Hunt  <oliver@apple.com>

        Reviewed by Antti.

        Reset mouse down/drag state variables on mouse button release
        
        Fixes <rdar://problem/5044654>: Drag out of some QuickTime plug-ins converting into image drag

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

2007-03-07  Adele Peterson  <adele@apple.com>

        Reviewed by Darin.

        WebCore part of fix for:
        http://bugs.webkit.org/show_bug.cgi?id=10871
        http://bugs.webkit.org/show_bug.cgi?id=12677
        <rdar://problem/4823129> REGRESSION: IME key events different in nightly
        <rdar://problem/4759563> REGRESSION: Return key is always sent when you confirm a clause in kotoeri

        * page/EventHandler.cpp: (WebCore::EventHandler::defaultKeyboardEventHandler): Call handleInputMethodKeypress before actually dispatching the keypress event
          so that input methods have a chance to handle the event.  
          If the input method handles the event (by marking or unmarking text), then we don't need to send the keypress event.
          If an input method doesn't handle the event, then we'll save the data we need to perform the correct action (like what text to insert or what selector to use) 
          when we dispatch the keypress event.

        * dom/KeyboardEvent.h: Added Mac-specific KeypressCommand struct, so we can store command info during handleInputMethodKeypress, and use it during handleKeypress.
        (WebCore::KeyboardEvent::keypressCommand):
        (WebCore::KeyboardEvent::setKeypressCommand):

        * bridge/EditorClient.h:
        * editing/Editor.cpp:
        (WebCore::Editor::handleKeypress): Changed handleKeyPress to handleKeypress.
        (WebCore::Editor::handleInputMethodKeypress): Added.
        * editing/Editor.h:

        * platform/graphics/svg/SVGImageEmptyClients.h:
        (WebCore::SVGEmptyEditorClient::handleKeypress): Changed handleKeyPress to handleKeypress.
        (WebCore::SVGEmptyEditorClient::handleInputMethodKeypress): Added.

2007-03-07  Rob Buis  <buis@kde.org>

        Reviewed by Darin.

        http://bugs.webkit.org/show_bug.cgi?id=12579
        WebKit fails SVG xml:base test

        Implement DOM3 properties baseURI and documentURI to fix
        the testcase in bug 12579.

        * bindings/js/kjs_dom.cpp:
        (KJS::DOMNode::getValueProperty):
        * bindings/js/kjs_domnode.h:
        (KJS::DOMNode::):
        * dom/Document.cpp:
        (WebCore::Document::documentURI):
        (WebCore::Document::setDocumentURI):
        (WebCore::Document::baseURI):
        * dom/Document.h:
        * dom/Document.idl:
        * dom/DocumentType.cpp:
        (WebCore::DocumentType::baseURI):
        * dom/DocumentType.h:
        * dom/Element.cpp:
        (WebCore::Element::baseURI):
        * dom/Element.h:
        * dom/Node.cpp:
        (WebCore::Node::baseURI):
        * dom/Node.h:
        * ksvg2/misc/SVGImageLoader.cpp:
        (WebCore::SVGImageLoader::updateFromElement):
        * ksvg2/svg/SVGImageElement.cpp:
        (WebCore::SVGImageElement::parseMappedAttribute):
        (WebCore::SVGImageElement::attach):

2007-03-07  Anders Carlsson  <acarlsson@apple.com>

        Reviewed by Brady.

        Remove some methods in FrameLoader that just calls down to the active document loader. Since each
        resource loader now has a pointer to its document loader, we can just call directly to the
        document loader.

        * WebCore.exp:
        * loader/FrameLoader.cpp:
        * loader/FrameLoader.h:
        * loader/MainResourceLoader.cpp:
        (WebCore::MainResourceLoader::willSendRequest):
        (WebCore::MainResourceLoader::didReceiveResponse):
        * loader/SubresourceLoader.cpp:
        (WebCore::SubresourceLoader::SubresourceLoader):
        (WebCore::SubresourceLoader::didFinishLoading):
        (WebCore::SubresourceLoader::didFail):
        (WebCore::SubresourceLoader::didCancel):
        * loader/mac/NetscapePlugInStreamLoaderMac.mm:
        (WebCore::NetscapePlugInStreamLoader::didFinishLoading):
        (WebCore::NetscapePlugInStreamLoader::didFail):
        (WebCore::NetscapePlugInStreamLoader::didCancel):

2007-03-06  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Maciej Stachowiak.
        
        Fixed <rdar://problem/4576242> | http://bugs.webkit.org/show_bug.cgi?id=12586
        PAC file: malloc deadlock sometimes causes a hang @ www.apple.com/pro/profiles/ (12586)
        
        No test because this is very difficult to repro, and the new ASSERTs in 
        JavaScriptCore catch the underlying cause while running normal layout tests.
        
        This is a modified version of r14752 on the branch.
        
        The fix is to use a bit inside each node, instead of a hash table, to track 
        which node subtrees are in the process of being marked. This avoids a call 
        to malloc inside mark().
        
        * bindings/js/kjs_binding.cpp:
        (KJS::domObjects):
        (KJS::domNodesPerDocument):
        * bindings/js/kjs_dom.cpp:
        (KJS::DOMNode::mark):
        * dom/Node.cpp:
        (WebCore::Node::Node):
        * dom/Node.h:

2007-03-06  David Hyatt  <hyatt@apple.com>

        This patch reworks the WebCore memory cache to significantly reduce the amount of memory consumed by
        images in the cache and to enhance the accuracy of the cache size as an absolute bound for the objects
        contained within it.  WebCore's memory use over time should significantly improve as a result of these
        changes.

        Cached resources now have both an encoded size (the original data stream) and a decoded size (an estimate of
        the amount of memory consumed by an expanded version of that resource, e.g., the decoded frames of an image).
        Both sizes now count towards the total size of the object and towards the allowed memory cache total.

        By including both totals the reported size of resources will now be larger, and the cache will therefore become
        much more aggressive about flushing.

        Objects are stored in size-adjusted and popularity-aware LRU lists as before, but encoded size is now always
        used when determining the correct LRU list.

        The flush algorithm for the memory cache has been rewritten to first destroy decoded data before evicting
        resources.  By being able to compact its resources without evicting them, the memory cache can now hold many more
        unique resources (encoded) in the same amount of space.  Depending on how much of a hit we want to take from
        re-decoding images, the memory cache could in theory have its size significantly reduced now while still holding
        more resources than it did at the larger size!

        Reviewed by mjs

        * WebCore.xcodeproj/project.pbxproj:
        * loader/Cache.cpp:
        (WebCore::Cache::requestResource):
        (WebCore::Cache::prune):
        (WebCore::Cache::remove):
        (WebCore::Cache::lruListFor):
        (WebCore::Cache::adjustSize):
        * loader/Cache.h:
        * loader/CachedCSSStyleSheet.cpp:
        (WebCore::CachedCSSStyleSheet::data):
        * loader/CachedImage.cpp:
        (WebCore::CachedImage::CachedImage):
        (WebCore::CachedImage::allReferencesRemoved):
        (WebCore::CachedImage::clear):
        (WebCore::CachedImage::data):
        (WebCore::CachedImage::destroyDecodedData):
        (WebCore::CachedImage::decodedSize):
        (WebCore::CachedImage::decodedSizeChanged):
        (WebCore::CachedImage::shouldPauseAnimation):
        * loader/CachedImage.h:
        * loader/CachedResource.cpp:
        (WebCore::CachedResource::CachedResource):
        (WebCore::CachedResource::deref):
        (WebCore::CachedResource::setEncodedSize):
        * loader/CachedResource.h:
        (WebCore::CachedResource::allReferencesRemoved):
        (WebCore::CachedResource::size):
        (WebCore::CachedResource::encodedSize):
        (WebCore::CachedResource::decodedSize):
        (WebCore::CachedResource::destroyDecodedData):
        * loader/CachedScript.cpp:
        (WebCore::CachedScript::data):
        * loader/CachedXSLStyleSheet.cpp:
        (WebCore::CachedXSLStyleSheet::data):
        * platform/graphics/BitmapImage.cpp:
        (WebCore::BitmapImage::BitmapImage):
        (WebCore::BitmapImage::~BitmapImage):
        (WebCore::BitmapImage::destroyDecodedData):
        (WebCore::BitmapImage::pruneDecodedDataIfNeeded):
        (WebCore::BitmapImage::cacheFrame):
        (WebCore::BitmapImage::setNativeData):
        (WebCore::BitmapImage::shouldAnimate):
        (WebCore::BitmapImage::advanceAnimation):
        * platform/graphics/BitmapImage.h:
        (WebCore::BitmapImage::decodedSize):
        * platform/graphics/Image.cpp:
        (WebCore::Image::Image):
        * platform/graphics/Image.h:
        (WebCore::Image::destroyDecodedData):
        (WebCore::Image::decodedSize):
        (WebCore::Image::imageObserver):
        * platform/graphics/ImageAnimationObserver.h: Removed.
        * platform/graphics/ImageObserver.h: Added.
        (WebCore::ImageObserver::~ImageObserver):
        * platform/graphics/svg/SVGImage.cpp:
        (WebCore::SVGImage::SVGImage):
        * platform/graphics/svg/SVGImage.h:

2007-03-06  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Sam Weinig.

        http://bugs.webkit.org/show_bug.cgi?id=12987
        Fix and import 4XPath test_numeric_expr.html

        * xml/XPathPredicate.cpp:
        (WebCore::XPath::Negative::doEvaluate): Convert the argument to number.
        (WebCore::XPath::NumericOp::doEvaluate): Convert the arguments to numbers. Use a correct operation for mod.
        * xml/XPathStep.cpp:
        (WebCore::XPath::Step::nodesInAxis): Do not append parent node if there is none.
        * xml/XPathValue.cpp:
        (WebCore::XPath::Value::toNumber): Do not convert to DeprecatedString just to trim whitespace and to convert to double.
        * platform/DeprecatedString.cpp:
        (WebCore::DeprecatedStringData::makeAscii): Added a FIXME about unreliable makeAscii() behavior.

2007-03-06  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Adele.

        <rdar://problem/4619663> REGRESSION (NativePopup): Popup menu doesn't draw at the correct vertical position (9816)
        
        * platform/mac/PopupMenuMac.mm:
        (WebCore::PopupMenu::show): Make a temporary dummy view with the
        passed in rect, since AppKit will use the view bounds to determine
        what area to exclude when popping up a menu moved to the top of
        the screen.

2007-03-06  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Maciej Stachowiak.

        Fixed all known crashers exposed by run-webkit-tests --threaded [*]. See 
        JavaScriptCore ChangeLog for more details.

        * bindings/js/kjs_binding.cpp:
        (KJS::domNodesPerDocument): Added thread safety ASSERT.
        (KJS::ScriptInterpreter::mark): Removed obsolete logic for marking unsafe
        objects when collecting on a secondary thread. The Collector takes care
        of this now.

        * bindings/js/kjs_binding.h:
        (KJS::DOMObject::DOMObject): Used new API for specifying that WebCore
        objects should be garbage collected on the main thread only.

        * bindings/js/kjs_window.cpp:
        (KJS::ScheduledAction::execute): Moved JSLock to cover implementedsCall() call,
        which, for some subclasses, ends up allocating garbage collected objects.
        (This fix was speculative. I didn't actually see a crash from this.)
        (KJS::Window::timerFired): Added JSLock around ScheduleAction destruction,
        since it destroys a KJS::List.

        * bindings/objc/WebScriptObject.mm:
        (-[WebScriptObject setException:]): Added JSLock. (This fix was speculative. 
        I didn't actually see a crash from this.)

        * bridge/mac/WebCoreScriptDebugger.mm:
        (-[WebCoreScriptCallFrame evaluateWebScript:]): Added JSLock. (This fix 
        was speculative. I didn't actually see a crash from this.)

        * dom/Document.cpp:
        (WebCore::Document::~Document): Added JSLock around modification to 
        domNodesPerDocument(), which can be accessed concurrently during garbage 
        collection.
        * dom/Node.cpp:
        (WebCore::Node::setDocument): ditto.
        
        [*] fast/js/toString-stack-overflow.html is an exception. --threaded mode
        crashes this test because it causes the garbage collector to run frequently,
        and this test crashes if you happen to garbage collect while it's running.
        This is a known issue with stack overflow during the mark phase. It's
        not related to threading.

2007-03-06  Mark Rowe  <mrowe@apple.com>

        Reviewed by Sam Weinig.

        Fix http://bugs.webkit.org/show_bug.cgi?id=12942
        Bug 12942: ASSERTION FAILURE: qantas.com.au changing selected item in <select> via JS

        Test: fast/dom/select-selectedIndex-bug-12942.html.

        * html/HTMLSelectElement.cpp:
        (WebCore::HTMLSelectElement::recalcListItems): Reset m_lastOnChangeIndex when recalculating list items.
        * html/HTMLSelectElement.h:

2007-03-06  Brady Eidson  <beidson@apple.com>

        Rubberstamped by Kevin Decker

        20,000!

        * ChangeLog: Point out revision 20,000

2007-03-06  Krzysztof Kowalczyk  <kkowalczyk@gmail.com>

        Not reviewed.

        Gdk build fix.

        * loader/gdk/FrameLoaderClientGdk.cpp: update userAgent() signature.
        (WebCore::FrameLoaderClientGdk::userAgent):
        * loader/gdk/FrameLoaderClientGdk.h: ditto.

2007-03-06  Mitz Pettel  <mitz@webkit.org>

        Reviewed by Adele.

        - fix http://bugs.webkit.org/show_bug.cgi?id=12986
          REGRESSION(NativeListBox): Listboxes not updated when resized dynamically

        Test: fast/forms/select-change-listbox-size.html

        * html/HTMLSelectElement.cpp:
        (WebCore::HTMLSelectElement::parseMappedAttribute): Reattach on list box size change.

2007-03-06  Mitz Pettel  <mitz@webkit.org>

        Reviewed by Dave Hyatt.

        - fix http://bugs.webkit.org/show_bug.cgi?id=12885
          REGRESSION (r19696): Incomplete background repaint

        Tests: fast/repaint/content-into-overflow.html
               fast/repaint/overflow-into-content.html

        Changed repaintAfterLayoutIfNeeded() to take, in addition to the clipped overflow
        rect, the unclipped border box plus outline, and to repaint any areas that
        were added or removed from that box, in addition to any areas added or removed
        from the clipped overflow rect.

        * platform/graphics/svg/SVGResourceMarker.cpp:
        (WebCore::SVGResourceMarker::draw):
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::layoutBlock):
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::absoluteClippedOverflowRect): Renamed getAbsoluteRepaintRect() to
        this.
        * rendering/RenderBox.h:
        * rendering/RenderFlexibleBox.cpp:
        (WebCore::RenderFlexibleBox::layoutBlock):
        * rendering/RenderFlow.cpp:
        (WebCore::RenderFlow::absoluteClippedOverflowRect):
        * rendering/RenderFlow.h:
        * rendering/RenderForeignObject.cpp:
        (WebCore::RenderForeignObject::layout):
        * rendering/RenderHTMLCanvas.cpp:
        (WebCore::RenderHTMLCanvas::layout):
        * rendering/RenderImage.cpp:
        (WebCore::RenderImage::layout):
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::RenderLayer):
        (WebCore::RenderLayer::checkForRepaintOnResize):
        (WebCore::RenderLayer::updateLayerPositions):
        * rendering/RenderLayer.h:
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::repaint):
        (WebCore::RenderObject::repaintAfterLayoutIfNeeded):
        (WebCore::RenderObject::getAbsoluteRepaintRectWithOutline):
        (WebCore::RenderObject::absoluteClippedOverflowRect):
        (WebCore::RenderObject::absoluteOutlineBox):
        * rendering/RenderObject.h:
        * rendering/RenderPath.cpp:
        (WebCore::RenderPath::layout):
        (WebCore::RenderPath::absoluteClippedOverflowRect):
        (WebCore::RenderPath::absoluteRects):
        (WebCore::RenderPath::drawMarkersIfNeeded):
        * rendering/RenderPath.h:
        * rendering/RenderSVGContainer.cpp:
        (WebCore::RenderSVGContainer::layout):
        (WebCore::RenderSVGContainer::absoluteClippedOverflowRect):
        (WebCore::RenderSVGContainer::absoluteRects):
        * rendering/RenderSVGContainer.h:
        * rendering/RenderSVGHiddenContainer.cpp:
        (WebCore::RenderSVGHiddenContainer::absoluteClippedOverflowRect):
        * rendering/RenderSVGHiddenContainer.h:
        * rendering/RenderSVGImage.cpp:
        (WebCore::RenderSVGImage::imageChanged):
        (WebCore::RenderSVGImage::absoluteClippedOverflowRect):
        (WebCore::RenderSVGImage::absoluteRects):
        * rendering/RenderSVGImage.h:
        * rendering/RenderSVGText.cpp:
        (WebCore::RenderSVGText::absoluteClippedOverflowRect):
        (WebCore::RenderSVGText::layout):
        (WebCore::RenderSVGText::absoluteRects):
        * rendering/RenderSVGText.h:
        * rendering/RenderTable.cpp:
        (WebCore::RenderTable::layout):
        * rendering/RenderTableCell.cpp:
        (WebCore::RenderTableCell::absoluteClippedOverflowRect):
        * rendering/RenderTableCell.h:
        * rendering/RenderTableCol.cpp:
        (WebCore::RenderTableCol::absoluteClippedOverflowRect):
        * rendering/RenderTableCol.h:
        * rendering/RenderTableRow.cpp:
        (WebCore::RenderTableRow::absoluteClippedOverflowRect):
        * rendering/RenderTableRow.h:
        * rendering/RenderText.cpp:
        (WebCore::RenderText::absoluteClippedOverflowRect):
        * rendering/RenderText.h:

2007-03-06  Ian Eng <ian.eng.webkit@gmail.com>

        Reviewed by Maciej.

        - fixed http://bugs.webkit.org/show_bug.cgi?id=12720
        Bug 12720: Re-defining window.location.toString function keeps re-loading forever

        * bindings/js/kjs_window.cpp:
        Disallow replacing functions in LocationTable, and return early without updating URL.

2007-03-06  Kevin McCullough  <kmccullough@apple.com>

        Reviewed by Darin.

        <http://bugs.webkit.org/show_bug.cgi?id=12686>
        REGRESSION: Bloglines.com Feeds tab cannot expand folders in TOT
        - Now all class constructors implement implementsHasInstance.

        * bindings/scripts/CodeGeneratorJS.pm:

2007-03-07  Nikolas Zimmermann  <zimmermann@kde.org>

        Reviewed by Rob & Oliver.

        Preparations for the new SVG text engine.

        Handle baseline-shift / kerning css values correctly.
        Recognize missing svg presentation attribute "font-size-adjust".
        Add all missing svg<->css property mappings in mapToEntry().

        Doesn't affect any layout test (as these properties are not used w/o my text patch).
        While I'm at it, unify the macro names (RS_ -> SVG_RS_) & cleanup style a bit.

        * ksvg2/css/CSSPropertyNames.in:
        * ksvg2/css/SVGCSSParser.cpp:
        (WebCore::CSSParser::parseSVGValue):
        * ksvg2/css/SVGCSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::applySVGProperty):
        * ksvg2/css/SVGRenderStyle.cpp:
        (WebCore::SVGRenderStyle::SVGRenderStyle):
        (WebCore::SVGRenderStyle::operator==):
        (WebCore::SVGRenderStyle::inheritedNotEqual):
        (WebCore::SVGRenderStyle::inheritFrom):
        * ksvg2/css/SVGRenderStyle.h:
        (WebCore::SVGRenderStyle::NonInheritedFlags::):
        (WebCore::SVGRenderStyle::setBitDefaults):
        * ksvg2/css/SVGRenderStyleDefs.cpp:
        (StyleTextData::StyleTextData):
        (StyleTextData::operator==):
        (StyleMiscData::StyleMiscData):
        (StyleMiscData::operator==):
        * ksvg2/css/SVGRenderStyleDefs.h:
        (WebCore::):
        (WebCore::StyleTextData::operator!=):
        * ksvg2/svg/SVGStyledElement.cpp:
        (WebCore::SVGStyledElement::cssPropertyIdForSVGAttributeName):

2007-03-06  Justin Garcia  <justin.garcia@apple.com>

        Reviewed by kevin
        
        <http://bugs.webkit.org/show_bug.cgi?id=12245>
        FCKeditor: Remove Format sometimes doesn't work
        <rdar://problem/4786404>
        Underline style is not removed from selection after performing Remove Format

        * editing/Editor.cpp:
        (WebCore::Editor::removeFormattingAndStyle): Re-wrote this.

2007-03-07  Nikolas Zimmermann  <zimmermann@kde.org>

        Reviewed by Oliver.

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

        Guard against registering pending resources with empty id.
        Be careful with calling recalcStyle() in SVGUseElement, when change is "Detach" we
        have to use special code, as calling attach() on the shadow tree root element will crash,
        because it has no (direct) parent node, only a shadow parent node element.

        * ksvg2/misc/SVGDocumentExtensions.cpp:
        (WebCore::SVGDocumentExtensions::addPendingResource):
        * ksvg2/svg/SVGUseElement.cpp:
        (WebCore::SVGUseElement::recalcStyle):

2007-03-06  Kevin Decker  <kdecker@apple.com>

        Reviewed by Adele.

        Fixed: <rdar://problem/5041660> REGRESSION: <keygen> element broken, prevents users from signing up for Thawte email certs
        
        * bindings/objc/DOM.mm:
        (WebCore::createElementClassMap): Added <keygen> to the DOM bindings so it can be accessed from Objective-C.
        * css/html4.css: Apply the look of the <select> element to <keygen>.
        * html/HTMLElementFactory.cpp:
        (WebCore::keygenConstructor): Added. 
        (WebCore::createFunctionMap): Added keygen.
        * html/HTMLSelectElement.cpp: Made const typeAheadTimeout variable static const. 
        (WebCore::HTMLSelectElement::HTMLSelectElement):  Fix both HTMLSelectElement constructors to initialize the
         same number of member variables. The fact that some fields were not initialized could (and would) crash the
         keygen element when selecting different items. Also removed m_typedString(String()) from the constructor
         initialization because this is not needed.

2007-03-06  Kevin McCullough  <kmccullough@apple.com>

        Reviewed by Darin.

        - Rename a function to clarify its purpose.

        * WebCore.exp:
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::registerURLSchemeAsLocal):
        * loader/FrameLoader.h:

2007-03-06  Adam Roben  <aroben@apple.com>

        Build fix.

        * WebCore.exp: Updated symbols.

2007-03-06  Adam Roben  <aroben@apple.com>

        Reviewed by Anders.

        Added a parameter to all StringTruncator methods to specify whether
        rounding hacks should be on or off.

        No layout test possible.

        * platform/StringTruncator.cpp:
        (WebCore::stringWidth): Added disableRoundingHacks parameter.
        (WebCore::truncateString): Ditto.
        (WebCore::StringTruncator::centerTruncate): Ditto.
        (WebCore::StringTruncator::rightTruncate): Ditto.
        (WebCore::StringTruncator::width): Ditto.
        * platform/StringTruncator.h: Ditto.
        * platform/mac/FileChooserMac.mm:
        (WebCore::FileChooser::basenameForWidth): Pass in false to
        centerTruncate so that the truncation matches the way the text will be
        rendered.

2007-03-06  Anders Carlsson  <acarlsson@apple.com>

        Reviewed by Maciej.

        <rdar://problem/5035045>
        REGRESSION: WebKit browser doesn't display image at http://www.metoffice.gov.uk/weather/satellite/index.html
        
        It turns out WinIE does allow you to access images by their id as special document properties. However, this is only
        allowed when the element also has a name attribute. The value of the name attribute is ignored and can even be empty!
        
        * bindings/js/kjs_html.cpp:
        (KJS::JSHTMLDocument::namedItemGetter):
        Return jsUndefined() if the collection is empty.
        
        * html/HTMLImageElement.cpp:
        (WebCore::HTMLImageElement::parseMappedAttribute):
        (WebCore::HTMLImageElement::insertedIntoDocument):
        (WebCore::HTMLImageElement::removedFromDocument):
        * html/HTMLImageElement.h:
        Add the id attribute value to the extra named item map.
        
        * html/HTMLNameCollection.cpp:
        (WebCore::HTMLNameCollection::traverseNextItem):
        Check for images with name attributes that match, as well as elements with id attributes that match where
        the element also has a name attribute.

2007-03-06  Anders Carlsson  <acarlsson@apple.com>

        Reviewed by Adam.

        WebCore part of patch to make it possible to have different user agents for different URLs.

        * bindings/js/kjs_navigator.cpp:
        (KJS::Navigator::getValueProperty):
        * bindings/js/kjs_proxy.cpp:
        (WebCore::KJSProxy::initScriptIfNeeded):
        * loader/DocumentLoader.cpp:
        (WebCore::DocumentLoader::setLoading):
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::userAgent):
        (WebCore::FrameLoader::loadResourceSynchronously):
        (WebCore::FrameLoader::applyUserAgent):
        * loader/FrameLoader.h:
        * loader/FrameLoaderClient.h:
        * platform/graphics/svg/SVGImageEmptyClients.h:
        (WebCore::SVGEmptyFrameLoaderClient::userAgent):

2007-03-05  Kevin McCullough  <kmccullough@apple.com>

        Reviewed by Mark and Dave H.

        - rdar://problem/5038491
        An oversight of the security fix that prevented remote from loading local is that it
        prevents user style sheets when the site is remote.  This fixes that.

        * loader/Cache.cpp: Propogate and check user style sheet flag.
        (WebCore::createResource):
        (WebCore::Cache::requestResource):
        * loader/Cache.h: Propogate user style sheet flag.
        * loader/CachedCSSStyleSheet.cpp: Propogate user style sheet flag.
        (WebCore::CachedCSSStyleSheet::CachedCSSStyleSheet):
        * loader/CachedCSSStyleSheet.h: Propogate user style sheet flag.
        * loader/DocLoader.cpp: Propogate user style sheet flag.
        (WebCore::DocLoader::requestResource):
        * loader/SubresourceLoader.cpp: Propogate and check user style sheet flag.
        (WebCore::SubresourceLoader::create):
        * loader/SubresourceLoader.h: Add check for user style sheet flag.
        * loader/loader.cpp: Propogate user style sheet flag.
        (WebCore::Loader::load):
        (WebCore::Loader::servePendingRequests):
        * loader/loader.h: Propogate user style sheet flag.

2007-03-06  Nikolas Zimmermann  <zimmermann@kde.org>

        Reviewed by Darin.

        Fixes: http://bugs.webkit.org/show_bug.cgi?id=12936 (Master bug used to track all current use problems.)

        Fixes: http://bugs.webkit.org/show_bug.cgi?id=12926 (transform attribute not respected in nested <use> elements)
        Fixes: http://bugs.webkit.org/show_bug.cgi?id=12267 (getElementById broken for <use>)
        Fixes: http://bugs.webkit.org/show_bug.cgi?id=12916 (use instance in symbol definition does not work)
        Fixes: http://bugs.webkit.org/show_bug.cgi?id=12917 (mouseout event does not occur after scaling use instance)
        Fixes: http://bugs.webkit.org/show_bug.cgi?id=12838 (SVG <use> DOM broken for script)

        Added test: svg/custom/use-nested-transform.svg
        Added test: svg/custom/struct-use-09-b.svg (not yet official W3C-SVG-1.1 testcase)
        Fixes test: svg/custom/use-elementInstance-event-target.svg (rectangle now turns green on first click)

        Fix all (except one) known <use> bug. The remaining bug (12630) is not crucical at all.
        Enable <use> again as default SVG feature, as discussed on webkit-dev.

        dom/Element.cpp needed following tweak: set hasParentStyle to true, if there is no parentNode
        available - which happens for <use> nodes, as it's a shadow node. This fixes recalcStyle behaviour.
        Override recalcStyle() in SVGUseElement, and properly forward the call to the shadow tree root element.
        The shadow tree now receives proper style updates (without having to recreate the whole tree!).

        Override attributeChanged() in SVGUseElement and only call notifyAttributeChange if one of x/y/width/height/xlink:href
        attribute changed - otherwhise we'll end up recreating the tree for every transform/style/(non-existing-attribute) change.

        Do not override transform in nested use situations, but correctly append (right-sided) the translation of the <use> element.
        Some cosmetic fixes: don't add transform="translate(0 0)" attributes if both x/y values are null in the shadow tree.

        Factor out logic for replacing symbol/svg tags in the shadow tree, and also invoke it during expandUseElementsInShadowTree -
        otherwhise <symbol><use xlink:href="#someOtherSymbol"></symbol> the <use> gets expanded to a <symbol>. Though no one expands
        the <symbol> element - and we're end up in hitting an assertion. Avoid that.

        * bindings/js/JSSVGElementWrapperFactory.cpp:
        * bindings/js/kjs_dom.cpp:
        (KJS::toJS):
        * bindings/objc/DOM.mm:
        (WebCore::createElementClassMap):
        * dom/Element.cpp:
        (WebCore::Element::recalcStyle):
        * ksvg2/svg/SVGElement.cpp:
        (WebCore::shadowTreeParentElementForShadowTreeElement):
        (WebCore::SVGElement::dispatchEvent):
        * ksvg2/svg/SVGElementInstance.cpp:
        * ksvg2/svg/SVGElementInstance.h:
        * ksvg2/svg/SVGElementInstance.idl:
        * ksvg2/svg/SVGElementInstanceList.cpp:
        * ksvg2/svg/SVGElementInstanceList.h:
        * ksvg2/svg/SVGElementInstanceList.idl:
        * ksvg2/svg/SVGStyledElement.cpp:
        (WebCore::SVGStyledElement::notifyAttributeChange):
        (WebCore::SVGStyledElement::updateElementInstance):
        * ksvg2/svg/SVGStyledElement.h:
        * ksvg2/svg/SVGUseElement.cpp:
        (WebCore::SVGUseElement::attributeChanged):
        (WebCore::SVGUseElement::notifyAttributeChange):
        (WebCore::SVGUseElement::recalcStyle):
        (WebCore::SVGUseElement::buildPendingResource):
        (WebCore::SVGUseElement::buildShadowTreeForSymbolTag):
        (WebCore::SVGUseElement::alterShadowTreeForSVGTag):
        (WebCore::SVGUseElement::buildShadowTree):
        (WebCore::SVGUseElement::expandUseElementsInShadowTree):
        (WebCore::SVGUseElement::attachShadowTree):
        * ksvg2/svg/SVGUseElement.h:
        * ksvg2/svg/SVGUseElement.idl:
        * ksvg2/svg/svgtags.in:

2007-03-05  Brady Eidson  <beidson@apple.com>

        Reviewed by John

        Fixes <rdar://problem/4974258>
        Adds some key null checking

        * bindings/js/kjs_html.cpp:
        (KJS::JSHTMLElement::implementsCall): Null check doc/frame
        * bindings/objc/DOMInternal.mm:
        (-[WebScriptObject _initializeScriptDOMNodeImp]): Null check doc/frame

2007-03-06  Nikolas Zimmermann  <zimmermann@kde.org>

        Reviewed by Darin.

        Path::normalAngleAtLength() / Path::pointAtLength() don't work correctly.
        pointAtLength() was not implemented, basically and normalAngleAtLength()
        had a bug in the tangent slope calculation.

        The normalAngleAtLength() stuff can only be tested with my local textPath support.
        New LayoutTest: svg/custom/path-textPath-simulation.svg

        * platform/graphics/Path.cpp:
        (WebCore::pathLengthApplierFunction):
        * platform/graphics/PathTraversalState.cpp:
        (WebCore::PathTraversalState::quadraticBezierTo):
        (WebCore::PathTraversalState::cubicBezierTo):
        * platform/graphics/PathTraversalState.h:
        (WebCore::PathTraversalState::):

2007-03-05  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Darin.

        http://bugs.webkit.org/show_bug.cgi?id=12970
        Fix and import 4XPath test_core_functions.html test

        * xml/XPathExpression.cpp:
        (WebCore::XPathExpression::evaluate): Fully initialize the evaluation context.

        * xml/XPathFunctions.cpp:
        (WebCore::XPath::FunSubstring::doEvaluate): Fixed handling of edge cases.
        (WebCore::XPath::FunRound::round): Reimplemented to match the spec; exposed FunRound::round() to be used in
        other functions.

2007-03-05  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Darin.

        http://bugs.webkit.org/show_bug.cgi?id=12954
        XPath relative operations are implemented incorrectly

        * xml/XPathPredicate.cpp:
        (WebCore::XPath::NumericOp::doEvaluate):
        (WebCore::XPath::EqTestOp::compare):
        (WebCore::XPath::EqTestOp::doEvaluate):
        Reimplemented relative equality operations to match the spec.

        * xml/XPathPredicate.h:
        (WebCore::XPath::NumericOp::):
        (WebCore::XPath::EqTestOp::):
        Moved relative operations to EqTestOp.

        * xml/XPathGrammar.y:
        * xml/XPathParser.cpp:
        (WebCore::XPath::Parser::nextTokenInternal):
        (WebCore::XPath::Parser::lex):
        Adapted for the above changes.

2007-03-05  Mark Rowe  <mrowe@apple.com>

        Reviewed by Lars.

        Fix http://bugs.webkit.org/show_bug.cgi?id=12947
        Bug 12947: REGRESSION: ASSERTION FAILED: maxWidth >= 0 in StringTruncator.cpp:109 in WebCore::truncateString()

        Handle nil window correctly in toUserSpace and toDeviceSpace.  On Intel Macs a message to nil that returns a
        float will return 0.0.  We use this as the divisor in calculating a scale factor, which results in NaN being
        introduced into our rect.

        * platform/mac/ScreenMac.mm:
        (WebCore::toUserSpace):
        (WebCore::toDeviceSpace):

2007-03-05  Rob Buis  <buis@kde.org>

        Reviewed by Darin.

        http://bugs.webkit.org/show_bug.cgi?id=12868
        parts of the CSS classes in this simple SVG example are not applied

        Make sure the xml stylesheets are parsed in strict mode.

        * dom/ProcessingInstruction.cpp:
        (WebCore::ProcessingInstruction::parseStyleSheet):

2007-03-04  Adele Peterson  <adele@apple.com>

        Reviewed by Darin.

        Change to dispatch the keypress event during the defaultEventHandler for keydown events.  This matches IE behavior.
        This is preparation for fixing event dispatch with input methods (http://bugs.webkit.org/show_bug.cgi?id=10871)

        Test: fast/events/keydown-keypress-preventDefault.html

        * dom/EventTargetNode.cpp: (WebCore::EventTargetNode::defaultEventHandler): Call the defaultKeyboardEventHandler for keydown events.
        * page/EventHandler.cpp:
        (WebCore::eventTargetNodeForDocument): Return 0 instead of false since the return type in EventTargetNode.
        (WebCore::EventHandler::keyEvent): Removed dispatch of keypress event, since this is now done in the default event handler.
        (WebCore::EventHandler::defaultKeyboardEventHandler): For keydown events, create and dispatch a keypress event.

2007-03-04  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Nikolas Zimmermann (yay!).

        http://bugs.webkit.org/show_bug.cgi?id=12962
        4XPath tests crash on lang() function

        Covered by 4XPath tests, to be landed later.

        * platform/StringImpl.cpp:
        (WebCore::StringImpl::reverseFind): Do not crash with empty strings.
        * xml/XPathFunctions.cpp:
        (WebCore::XPath::FunLang::doEvaluate): Do not crash when an element has no
        attributes. Use a proper namespace for xml:lang (not sure where "xms" came from).
        Rewrote the algorithm for suffix removing to match the spec.

2007-03-02  Anders Carlsson  <acarlsson@apple.com>

        Reviewed by Darin.

        <rdar://problem/5028165> 
        http://bugs.webkit.org/show_bug.cgi?id=12915
        REGRESSION: XMLHttpRequest.abort() does not stop loading (12915)
        
        * loader/DocumentLoader.cpp:
        (WebCore::DocumentLoader::stopLoading):
        Save the value of m_loading since calling FrameLoader::stopLoading could set it to false.
        
        * loader/SubresourceLoader.cpp:
        (WebCore::SubresourceLoader::didCancel):
        * loader/SubresourceLoader.h:
        Get rid of didCancel now, it's not needed anymore.
        
        * xml/xmlhttprequest.cpp:
        (WebCore::XMLHttpRequest::abort):
        Call cancel() instead of stopLoading(). Also, set m_aborted to true so the XMLHttpRequest object
        won't be dereferenced in didFail when aborting.

2007-03-04  Krzysztof Kowalczyk  <kkowalczyk@gmail.com>

        Reviewed by Nikolas Zimmermann.

        Move ScrollView stubs to ScrollViewGdk.cpp

        * platform/gdk/FrameGdk.h: remove comment that no longer makes sense
        * platform/gdk/ScrollViewGdk.cpp:
        (WebCore::ScrollView::addChild):
        (WebCore::ScrollView::removeChild):
        (WebCore::ScrollView::scrollPointRecursively):
        (WebCore::ScrollView::inWindow):
        (WebCore::ScrollView::wheelEvent):
        (WebCore::ScrollView::updateScrollbars):
        (WebCore::ScrollView::updateScrollInfo):
        (WebCore::ScrollView::windowToContents):
        (WebCore::ScrollView::contentsToWindow):
        (WebCore::ScrollView::scrollbarUnderMouse):
        * platform/gdk/TemporaryLinkStubs.cpp:

2007-03-02  Kevin McCullough  <kmccullough@apple.com>

        Reviewed by Geoff.

        - rdar://problem/4922454
        - This fixes a security issue by making remote referrers not able to access local
        resources, unless they register their schemes to be treated as local. The result is
        that those schemes can access local resources and cannot be accessed by remote
        referrers.
        Because this behavior is new a link-on-or-after check is made to determine if the
        app should use the older, less safe, behavior.

        * WebCore.exp: added exported functions
        * bindings/objc/DOM.mm: consolodated function to base class
        (-[DOMElement image]):
        (-[DOMElement _imageTIFFRepresentation]):
        * dom/Document.cpp: Cache the document's ability to load local resources.
        (WebCore::Document::Document):
        (WebCore::Document::setURL):
        (WebCore::Document::shouldBeAllowedToLoadLocalResources):
        (WebCore::Document::stylesheetLoaded):
        * dom/Document.h: Cache the docuent's ability to load local resources.
        (WebCore::Document::getPendingSheet):
        (WebCore::Document::isAllowedToLoadLocalResources):
        * html/HTMLImageLoader.cpp: Moved functionality into base class.
        (WebCore::HTMLImageLoader::updateFromElement):
        (WebCore::HTMLImageLoader::dispatchLoadEvent):
        * html/HTMLLinkElement.cpp: Handles null returns correctly now.
        * html/HTMLTokenizer.cpp: Moved functionality into base class.
        (WebCore::HTMLTokenizer::notifyFinished):
        * ksvg2/misc/SVGImageLoader.cpp: Moved functionality into base class.
        (WebCore::SVGImageLoader::dispatchLoadEvent):
        * loader/Cache.cpp: Checks if the cached resource can be loaded.
        (WebCore::Cache::requestResource):
        * loader/CachedCSSStyleSheet.cpp: Moved functionality into base class.
        (WebCore::CachedCSSStyleSheet::ref):
        (WebCore::CachedCSSStyleSheet::error):
        * loader/CachedImage.cpp: Moved functionality into base class.
        (WebCore::CachedImage::CachedImage):
        * loader/CachedImage.h: Moved functionality into base class.
        (WebCore::CachedImage::canRender):
        * loader/CachedResource.cpp: Cache if the CachedResource should be treated as local
        (WebCore::CachedResource::CachedResource):
        * loader/CachedResource.h: Moved functionality into base class.
        (WebCore::CachedResource::errorOccurred):
        (WebCore::CachedResource::shouldTreatAsLocal):
        * loader/CachedScript.cpp: Moved functionality into base class.
        (WebCore::CachedScript::CachedScript):
        * loader/CachedScript.h: Moved functionality into base class.
        (WebCore::CachedScript::schedule):
        * loader/CachedXBLDocument.cpp: Moved functionality into base class.
        (WebCore::CachedXBLDocument::error):
        * loader/CachedXSLStyleSheet.cpp: Moved functionality into base class.
        (WebCore::CachedXSLStyleSheet::error):
        * loader/FrameLoader.cpp: See comments for each function below.
        (WebCore::FrameLoader::loadSubframe): Use new canLoad.
        (WebCore::FrameLoader::restrictAccessToLocal): return value of linked-on-or-after check.
        (WebCore::FrameLoader::setRestrictAccessToLocal): set value for linked-on-or-after check.
        (WebCore::localSchemes): Return set of schemes that are to be treated as local.
        (WebCore::FrameLoader::loadPlugin): Use new canLoad.
        (WebCore::FrameLoader::canLoad): Now multiple functions that each do the same work but some can take advantage of the cached values, if they were computed previously.
        (WebCore::FrameLoader::shouldHideReferrer): Extracted out the logic to determine if the referrer should be hidden so it is only calculated when needed.
        (WebCore::FrameLoader::loadResourceSynchronously): No longer calls canLoad to get hideReferrer info.
        (WebCore::FrameLoader::registerSchemeAsLocal): Functionality to register a scheme to be treated as local.
        (WebCore::FrameLoader::treatURLAsLocal): Given a URL this function determines if it should be treated as local.
        * loader/FrameLoader.h: Declared functions for this security fix.  See above.
        * loader/MainResourceLoader.cpp: Optized order of bools to regain performance.
        (WebCore::MainResourceLoader::continueAfterContentPolicy):
        * loader/SubresourceLoader.cpp: Now restricts remote from loading local resources.
        (WebCore::SubresourceLoader::create):
        * page/EventHandler.cpp: Moved functionality into base class.
        (WebCore::selectCursor):
        * platform/KURL.cpp: KURLs need to check all the registered schemes now.
        (WebCore::KURL::isLocalFile):
        * rendering/HitTestResult.cpp: Moved functionality into base class.
        (WebCore::HitTestResult::image):
        * rendering/RenderImage.cpp: Moved functionality into base class.
        (WebCore::RenderImage::setCachedImage):
        (WebCore::RenderImage::imageChanged):
        (WebCore::RenderImage::paint):
        (WebCore::RenderImage::layout):
        (WebCore::RenderImage::calcAspectRatioWidth):
        (WebCore::RenderImage::calcAspectRatioHeight):
        * rendering/RenderImage.h: Moved functionality into base class.
        (WebCore::RenderImage::errorOccurred):
        * rendering/RenderListItem.cpp: Moved functionality into base class.
        (WebCore::RenderListItem::setStyle):
        * rendering/RenderListMarker.cpp: Moved functionality into base class.
        (WebCore::RenderListMarker::isImage):
        * xml/xmlhttprequest.cpp: Check doc's cached value instead of determining independently.
        (WebCore::XMLHttpRequest::urlMatchesDocumentDomain):

2007-03-02  Justin Garcia  <justin.garcia@apple.com>

        Reviewed by kevin
        
        <rdar://problem/5028447>
        REGRESSION: Gmail Editor: Copied message text pastes at the wrong font size

        * editing/markup.cpp:
        (WebCore::createMarkup): The style of the div that holds
        a fully selected body's styles didn't include styles inherited
        from the body's ancestors.
        
2007-03-02  Justin Garcia  <justin.garcia@apple.com>

        Reviewed by harrison

        <rdar://problem/4545040>
        innerHTML does not HTML-escape text nodes inside PRE elements
        <rdar://problem/5027857>
        Pasting into Mail from Safari's view-source window renders the HTML

        * editing/HTMLInterchange.cpp:
        (WebCore::convertHTMLTextToInterchangeFormat): Send this function
        the node that the text comes from as a parameter.  It shouldn't convert
        '\n's to spaces/nbsps if the text is coming from text where newlines are
        preserved.
        * editing/HTMLInterchange.h:
        * editing/markup.cpp:
        (WebCore::startMarkup): Escape text inside the children of PREs.

2007-03-02  Sam Weinig  <sam@webkit.org>

        Reviewed by Anders.

        Try to fix the Qt build.

        * platform/qt/TemporaryLinkStubs.cpp: Add stubs.
        (WebCore::searchMenuNoRecentSearchesText):
        (WebCore::searchMenuRecentSearchesText):
        (WebCore::searchMenuClearRecentSearchesText):
        (WebCore::AXWebAreaText):
        (WebCore::AXLinkText):
        (WebCore::AXListMarkerText):
        (WebCore::AXImageMapText):
        (WebCore::AXHeadingText):

2007-03-02  David Harrison  <harrison@apple.com>

        Suggested by Darin.

        A more efficient solution to rdar://4961431.

        * bridge/mac/WebCoreAXObject.mm:
        (-[WebCoreAXObject accessibilityIsIgnored]):

2007-03-01  Justin Garcia  <justin.garcia@apple.com>

        Reviewed by john
        
        <rdar://problem/5032095>
        Gmail Editor: Copied text pastes on a new line instead of current line
        
        Start merge failed to occur because positionAtStartOfInsertedContent
        had a bug.

        * editing/ReplaceSelectionCommand.cpp:
        (WebCore::ReplaceSelectionCommand::positionAtStartOfInsertedContent):
        Was failing when inserting <span><div>foo/div></span>. Return the 
        inserted content's first VisiblePosition.

2007-03-02  Dave Hyatt  <hyatt@apple.com>

        Fix crasher in glyph map code (buffer overrun).

        Reviewed by darin

        * platform/win/GlyphPageTreeNodeWin.cpp:
        (WebCore::GlyphPage::fill):

2007-03-01  Antti Koivisto  <antti@apple.com>

        Reviewed by Maciej.

        Fix for http://bugs.webkit.org/show_bug.cgi?id=12895
        REGRESSION: imagemap: pointer cursor is shown everywhere
        <rdar://problem/5028163>
 
        Image with imagemap should never itself be URLElement in hit test results. 
               
        No layout test, cursor state can't be captured.

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

2007-03-01  Antti Koivisto  <antti@apple.com>

        Reviewed by Maciej.
        
        Fix http://bugs.webkit.org/show_bug.cgi?id=12690
        REGRESSION: can not log in to bank of america with TOT webkit
        <rdar://problem/4990044>
        
        and http://bugs.webkit.org/show_bug.cgi?id=12604
        REGRESSION: After closing the "Would you like to save password" sheet, the form fails 
        to submit automatically at http://www.mac.com/WebObjects/HomePage.woa
        <rdar://problem/4871752>
        
        and http://bugs.webkit.org/show_bug.cgi?id=12020
        REGRESSION: Flickr uploading broken
        <rdar://problem/4928662>
        
        Turn protection against multiple forms submission back on. This approach is buggy 
        but it is way better than not having it at all. Not protecting against this
        breaks number of major sites.
        
        * bridge/mac/WebCoreAXObject.mm:
        (-[WebCoreAXObject accessibilityPerformAction:]):
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::resetMultipleFormSubmissionProtection):
        (WebCore::FrameLoader::submitForm):
        (WebCore::FrameLoader::receivedMainResourceError):
        * loader/FrameLoader.h:
        * page/EventHandler.cpp:
        (WebCore::EventHandler::keyEvent):
        * page/Frame.cpp:
        (WebCore::Frame::setView):
        * page/mac/EventHandlerMac.mm:
        (WebCore::EventHandler::mouseDown):

2007-03-01  Kevin McCullough  <kmccullough@apple.com>

        Reviewed by Adam.

        - Added the test case: external-script-URL-location.html
        - Fix an issue where the url of a document is null after an open if the document
        has no parent.

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

2007-03-01  Anders Carlsson  <acarlsson@apple.com>

        Reviewed by Darin.

        <rdar://problem/4960250> 
        http://bugs.webkit.org/show_bug.cgi?id=11627
        REGRESSION: Reproducible crash at IMDb in WebCore::FrameLoader::stopLoadingSubframes
        
        In rare cases, we could end up calling checkLoadComplete twice for the same frame. This would cause the 
        didFailProvisionalLoad delegate method to be called twice for the same frame, and also cause the provisional document loader
        to be reset to null when other code wasn't expecting it.
        
        This regressed in revision 10904 with the fix for <rdar://problem/4184719>. The fix is to only call stopLoading on the frame
        if either the document loader is loading, or the document is still being parsed. I've verified that the bug is still fixed and
        that no leaks occur.
        
        * loader/DocumentLoader.cpp:
        (WebCore::DocumentLoader::stopLoading):

2007-03-01  Krzysztof Kowalczyk  <kkowalczyk@gmail.com>

        Reviewed by Darin.

        Fix ARM crash due to accessing non-4-byte-aligned memory
        as 32-bit values.

        * platform/AtomicString.cpp:
        (WebCore::UCharBufferTranslator::equal):

2007-03-01  David Harrison  <harrison@apple.com>

        Reviewed by Darin.

        <rdar://problem/5033905> Have the DOM secondary thread check raise an exception by default

        * platform/mac/ThreadCheck.mm:
        (WebCore::_WebCoreThreadViolationCheck):
        Initialize threadViolationIsException to true.

2007-03-01  Brady Eidson  <beidson@apple.com>

        Reviewed by Darin

        <rdar://problem/5030628> - Crash opening a new window with the
        "New windows open to the same page" pref set

        * history/HistoryItem.cpp:
        (WebCore::HistoryItem::HistoryItem): Set the m_subItems vector capacity correctly

2007-03-01  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Maciej.

        http://bugs.webkit.org/show_bug.cgi?id=12801
        Assertion failure in createMarkup() (root) when doing Select All, Copy in an SVG document

        Test: editing/pasteboard/createMarkup-assert.xml

        * editing/markup.cpp:
        (WebCore::createMarkup): Removed the assertion, because it's wrong in a non-HTML world.

2007-02-28  Adam Roben  <aroben@apple.com>

        Reviewed by Oliver and Hyatt.

        Fix <rdar://problem/5024233> Crash while using Find on empty document

        No layout test possible, as this involves a null document.

        * dom/Range.cpp:
        (WebCore::rangeOfContents): Added an ASSERT.
        * page/Frame.cpp:
        (WebCore::Frame::findString): Added a null-check for document().
        (WebCore::Frame::markAllMatchesForText): Ditto.

2007-02-28  Krzysztof Kowalczyk  <kkowalczyk@gmail.com>

        Not reviewed - simple gdk build fix.

        Add stubs for newly introduced localized strings.

        * platform/gdk/TemporaryLinkStubs.cpp:
        (WebCore::searchMenuNoRecentSearchesText):
        (WebCore::searchMenuRecentSearchesText):
        (WebCore::searchMenuClearRecentSearchesText):

2007-02-28  Brady Eidson  <beidson@apple.com>

        Reviewed by Beth

        Move the Thread Safety Check functions into their own header for export to WebKit

        * WebCore.exp: Export the function
        * WebCore.xcodeproj/project.pbxproj: 
        * bindings/scripts/CodeGeneratorObjC.pm: Include the new header
        * platform/Logging.h: Move stuff to ThreadCheck.h
        * platform/ThreadCheck.h: Added.
        * platform/mac/LoggingMac.mm: Move stuff to ThreadCheck.mm
        * platform/mac/ThreadCheck.mm: Added.
        (WebCore::_WebCoreThreadViolationCheck):
        (WebCoreReportThreadViolation):

2007-02-28  Beth Dakin  <bdakin@apple.com>

        Reviewed by Brady.

        Fix for http://bugs.webkit.org/show_bug.cgi?id=12923 REGRESSION: 
        Assertion failure copying standalone image

        * platform/mac/PasteboardMac.mm:
        (WebCore::Pasteboard::writeImage): Use the CachedImage as the 
        resource. This makes more sense anyway. There is no need to null-
        check the renderer or the CachedImage since we return early if 
        there is no Image* and the HitTestResult::image() function checks 
        for these things.

2007-02-28  Adele Peterson  <adele@apple.com>

        Reviewed by Beth.

        Fix for <rdar://problem/4887423> REGRESSION: search results popup menu strings are not localized
        and <rdar://problem/3517227> accessibility-related strings in WebCore are not localized

        Use localized strings from WebKit instead of hard coded strings.

        * bridge/mac/WebCoreAXObject.mm: (-[WebCoreAXObject roleDescription]):
        * page/mac/WebCoreViewFactory.h:
        * platform/LocalizedStrings.h:
        * platform/mac/LocalizedStringsMac.mm:
        (WebCore::searchMenuNoRecentSearchesText):
        (WebCore::searchMenuRecentSearchesText):
        (WebCore::searchMenuClearRecentSearchesText):
        (WebCore::AXWebAreaText):
        (WebCore::AXLinkText):
        (WebCore::AXListMarkerText):
        (WebCore::AXImageMapText):
        (WebCore::AXHeadingText):
        * rendering/RenderTextControl.cpp: (WebCore::RenderTextControl::itemText):

2007-02-27  Antti Koivisto  <antti@apple.com>

        Reviewed by Maciej.

        - fix http://bugs.webkit.org/show_bug.cgi?id=12911
        GoogleDocs: Ordered lists don't update immediately when start attribute changed
        
        Update list marker value when start attribute changes.

        * html/HTMLOListElement.cpp:
        (WebCore::HTMLOListElement::parseMappedAttribute):

2007-02-28  Nikolas Zimmermann  <zimmermann@kde.org>

        Reviewed by Maciej.

        Corrected the use of the new ENABLE() macros in some ksvg2/svg files.
        Add new build-webkit flags "--(no-)xpath" / "--(no-)xslt", to be able
        to switch off build features easily. Also add "--(no-)svg-experimental-features"
        flag, to be able to test filters/animations/use/foreignObject easily.

        * DerivedSources.make:
        * ksvg2/scripts/make_names.pl:
        * ksvg2/svg/SVGFEDiffuseLightingElement.cpp:
        * ksvg2/svg/SVGStyledElement.cpp:
        * ksvg2/svg/SVGUseElement.cpp:

2007-02-28  Rob Buis  <buis@kde.org>

        Reviewed by Maciej.

        http://bugs.webkit.org/show_bug.cgi?id=12609
        Any SVG element will create renderers even when children of HTML elements

        Allow creation of svg renderers only when parent is SVG, except for
        the <svg> element.

        * ksvg2/svg/SVGAElement.h:
        * ksvg2/svg/SVGAnimationElement.h:
        * ksvg2/svg/SVGCircleElement.h:
        * ksvg2/svg/SVGClipPathElement.h:
        (WebCore::SVGClipPathElement::rendererIsNeeded):
        * ksvg2/svg/SVGDefsElement.cpp:
        * ksvg2/svg/SVGDefsElement.h:
        * ksvg2/svg/SVGDescElement.h:
        (WebCore::SVGDescElement::rendererIsNeeded):
        * ksvg2/svg/SVGElement.cpp:
        * ksvg2/svg/SVGEllipseElement.h:
        * ksvg2/svg/SVGFilterElement.h:
        (WebCore::SVGFilterElement::rendererIsNeeded):
        * ksvg2/svg/SVGFilterPrimitiveStandardAttributes.h:
        (WebCore::SVGFilterPrimitiveStandardAttributes::rendererIsNeeded):
        * ksvg2/svg/SVGForeignObjectElement.h:
        * ksvg2/svg/SVGGElement.h:
        * ksvg2/svg/SVGGradientElement.h:
        * ksvg2/svg/SVGImageElement.h:
        * ksvg2/svg/SVGLineElement.h:
        * ksvg2/svg/SVGMarkerElement.h:
        * ksvg2/svg/SVGMaskElement.h:
        * ksvg2/svg/SVGPathElement.h:
        * ksvg2/svg/SVGPatternElement.h:
        * ksvg2/svg/SVGPolyElement.h:
        * ksvg2/svg/SVGRectElement.h:
        * ksvg2/svg/SVGStopElement.h:
        * ksvg2/svg/SVGStyledElement.cpp:
        (WebCore::SVGStyledElement::rendererIsNeeded):
        * ksvg2/svg/SVGStyledElement.h:
        * ksvg2/svg/SVGSwitchElement.h:
        * ksvg2/svg/SVGSymbolElement.h:
        (WebCore::SVGSymbolElement::rendererIsNeeded):
        * ksvg2/svg/SVGTRefElement.h:
        * ksvg2/svg/SVGTSpanElement.h:
        * ksvg2/svg/SVGTextElement.h:
        * ksvg2/svg/SVGTitleElement.h:
        (WebCore::SVGTitleElement::rendererIsNeeded):
        * ksvg2/svg/SVGUseElement.h:
        * ksvg2/svg/SVGViewElement.h:
        (WebCore::SVGViewElement::rendererIsNeeded):

2007-02-28  Rob Buis  <buis@kde.org>

        Reviewed by Maciej.

        http://bugs.webkit.org/show_bug.cgi?id=12913
        Markers do not render in webkit when it misses markerWidth or markerHeight attribute

        Set defaults for markerWidth/markerHeight so markers that do not specify them render.

        * ksvg2/svg/SVGMarkerElement.cpp:
        (WebCore::SVGMarkerElement::SVGMarkerElement):

2007-02-27  Anders Carlsson  <acarlsson@apple.com>

        * loader/ResourceLoader.cpp:
        (WebCore::ResourceLoader::~ResourceLoader):
        Remove comment.

2007-02-27  Justin Garcia  <justin.garcia@apple.com>

        Reviewed by oliver

        <rdar://problem/5027300>
        REGRESSION: Images inserted with align left/right are lost

        * editing/ReplaceSelectionCommand.cpp:
        (WebCore::ReplaceSelectionCommand::shouldMerge):
        Don't attempt to merge to or from a position before 
        or after a block because it will be a no-op and
        lead to infinite recursion.
        In this case it instead resulted in content loss because 
        of bugs in start/endOfParagraph (5027702).
        * editing/visible_units.cpp: Added two FIXMEs for
        the problems with start/endOfParagraph.

2007-02-27  Anders Carlsson  <acarlsson@apple.com>

        Reviewed by Geoff.

        Make resource load delegate methods pass the right document loader.
        
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::willSendRequest):
        (WebCore::FrameLoader::didReceiveResponse):
        (WebCore::FrameLoader::didReceiveData):
        (WebCore::FrameLoader::didFailToLoad):
        (WebCore::FrameLoader::didFinishLoad):
        (WebCore::FrameLoader::didReceiveAuthenticationChallenge):
        (WebCore::FrameLoader::didCancelAuthenticationChallenge):
        Use the resource loader's document loader instead of the active one.
        
        * loader/MainResourceLoader.cpp:
        (WebCore::MainResourceLoader::receivedError):
        Make it so we send the frame load delegate method before the resource load delegate method.
        This was a regression from 2.0 and was caused by the fix to rdar://problem/4609195. Because the way the loader
        now works, both delegate methods will be called.
        
        * loader/ResourceLoader.cpp:
        (WebCore::ResourceLoader::ResourceLoader):
        * loader/ResourceLoader.h:
        (WebCore::ResourceLoader::documentLoader):
        Add document loader pointer to ResourceLoader.

2007-02-27  Mitz Pettel  <mitz@webkit.org>

        Reviewed by Hyatt.

        - fix http://bugs.webkit.org/show_bug.cgi?id=12910
          REGRESSION (r18756-r18765): list-bullet doesn't redraw properly when changing the list's content using JavaScript

        Test: fast/repaint/list-marker.html

        * rendering/RenderListItem.cpp:
        (WebCore::RenderListItem::positionListMarker): Add the marker to the visual
        overflow of all its ancestor blocks up to the list item. This needs to be
        done here since the marker is positioned only after those blocks have been
        laid out.

2007-02-27  Antti Koivisto  <antti@apple.com>

        Reviewed by Hyatt.
        
        - fix http://bugs.webkit.org/show_bug.cgi?id=12918
        REGRESSION: Google Finance dropdown Flickers
        <rdar://4988039>
        
        If a node dies while mouse is over it, it is still supposed to receive
        mouseout event (wasn't case in Tiger webkit). However this event should 
        not propagate to any other nodes. This patch matches Firefox behavior in
        this respect.

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

2007-02-27  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Maciej Stachowiak.
        
        Fixed http://bugs.webkit.org/show_bug.cgi?id=12659 | <rdar://problem/4954306>
        JS objects not collected after closing window @ ebay.com/maps.google.com

        Garbage collect in the KJSProxy destructor, after clearing our reference
        to the interpreter, because that's when the interpreter has torn down fully.

        (Technically speaking, we can't *prove* that we have the only reference to 
        our interpreter, but that's how it works in practice, and manual garbage 
        collection is just an opportunistic optimization, so it's OK for it to 
        work in practice even if it can't be proven in theory.)
        
        Layout tests pass. No leaks reported.

        * bindings/js/kjs_proxy.cpp:
        (WebCore::KJSProxy::~KJSProxy):
        * bindings/js/kjs_proxy.h:
        * page/Page.cpp:
        (WebCore::Page::~Page): Merged pageDestroyed() calls. Moved debug-only
        code to the bottom.
        * page/Frame.cpp:
        (WebCore::Frame::~Frame): Don't call getObject() because globalObject()
        returns a JSObject* already, and the call can leave a pointer to the Window
        object on the stack. Don't check for NULL because it is an invariant of
        JavaScriptCore that no JSObject* can be NULL. Do use a volatile pointer
        for w because the 'w = 0' assignment just screams to the compiler, "Don't
        generate any code for me!"

2007-02-27  Rob Buis  <buis@kde.org>

        Reviewed by David Hyatt.

        http://bugs.webkit.org/show_bug.cgi?id=4128
        !important is ignored in inline styling.

        Handle properties with !important flag better in inline
        style declarations.

        * css/CSSMutableStyleDeclaration.cpp:
        (WebCore::CSSMutableStyleDeclaration::addParsedProperties):

2007-02-27  David Hyatt  <hyatt@apple.com>

        Bug 11435.  Make sure RenderViews always paintBoxDecorations.  They used to before I removed RenderView's
        paint method.  This fix restores the original behavior.

        Reviewed by mitz

        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::setStyle):

2007-02-27  David Hyatt  <hyatt@apple.com>

        Fix for bug 12094, make sure setMinMaxKnown starts off false for the weird/rare case of empty
        plaintext documents (which really are buggy and should be fixed to generate root elements).

        Reviewed by mitz

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

2007-02-27  Dex Deacon  <occupant4@gmail.com>

        Reviewed by Darin.

        Fixed the case where a BackForwardList of capacity==1 would grow without bound.

        * history/BackForwardList.cpp:
        (WebCore::BackForwardList::addItem):

2007-02-22  Lars Naesbye Christensen  <lars@naesbye.dk>

        Reviewed by Maciej.

        http://bugs.webkit.org/show_bug.cgi?id=12848
        Help cursor should have a white outline

        * Resources/helpCursor.png:

2007-02-27  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Maciej.

        http://bugs.webkit.org/show_bug.cgi?id=12594
        REGRESSION: Strange highlight in active input area

        No automated test possible.

        * rendering/InlineTextBox.cpp:
        (WebCore::InlineTextBox::paint): Restore a check lost in r12792.

2007-02-27  Darin Adler  <darin@apple.com>

        Reviewed by Mitz.

        - fix http://bugs.webkit.org/show_bug.cgi?id=12908
          crash in http/tests/incremental/frame-focus-before-load.html

        * page/mac/EventHandlerMac.mm: (WebCore::EventHandler::focusDocumentView):
        Add null checks.

2007-02-27  Darin Adler  <darin@apple.com>

        Reviewed by Alexey.

        - fix http://bugs.webkit.org/show_bug.cgi?id=12909
          should use ICU, not TEC, for MacRoman decoding

        * platform/TextCodecICU.cpp: (WebCore::TextCodecICU::registerEncodingNames):
        Add "macroman" as an alias for "macintosh". We have seen that in use in mail,
        although I'm not sure it's used on the web.

        * platform/mac/mac-encodings.txt: Remove MacRoman line, which was added back
        as part of the patch for bug 4971226. But by adding it to this file rather
        than the ICU codec, we get it only on Mac OS X. And long term we are trying to
        get rid of the use of TEC entirely, so we want this file to be as empty as
        possible.

2007-02-27  Rob Buis  <buis@kde.org>

        Reviewed by Maciej.

        http://bugs.webkit.org/show_bug.cgi?id=12905
        Not all svg shapes should support markers

        Restrict marker usage to svg shapes polyline, polygon, line and path.

        * ksvg2/svg/SVGLineElement.h:
        (WebCore::SVGLineElement::supportsMarkers):
        * ksvg2/svg/SVGPathElement.h:
        (WebCore::SVGPathElement::supportsMarkers):
        * ksvg2/svg/SVGPolyElement.h:
        (WebCore::SVGPolyElement::supportsMarkers):
        * ksvg2/svg/SVGStyledElement.h:
        (WebCore::SVGStyledElement::supportsMarkers):
        * rendering/RenderPath.cpp:
        (WebCore::RenderPath::paint):

2007-02-26  Adele Peterson  <adele@apple.com>

        Reviewed by Lars.

        Fix for http://bugs.webkit.org/show_bug.cgi?id=12902
        <rdar://problem/5012679> REGRESSION: Pressing return key doesn't 
        move caret to next line after applying a font color in GMail

        Test: fast/frames/iframe-window-focus-2.html

        * page/EventHandler.h: Make focusDocumentView public.
        * page/Frame.cpp: (WebCore::Frame::focusWindow): Instead of just setting the focused frame,
          we should set also focus the document view.  The bug here was that since the subframe view
          wasn't the first responder, the key down event was going to the wrong frame.

2007-02-26  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Oliver.

        - fixed <rdar://problem/4946881> Recursive loop with <marker> not caught, crashes in WebCore::SVGPaintServer::draw (11244)
        http://bugs.webkit.org/show_bug.cgi?id=11244

        * platform/graphics/svg/SVGResourceMarker.cpp:
        (WebCore::SVGResourceMarker::draw): Use a HashSet to guard against
        reference cycles.

2007-02-26  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Kevin McCullough.

        - fix Qt build for earlier SVG changes.

        * platform/graphics/svg/qt/SVGResourceFilterQt.cpp:

2007-02-26  Oliver Hunt  <oliver@apple.com>

        Reviewed by Maciej.

        Fix for <rdar://problem/4827378>: Canvas with large height 
        uses lots of memory, computer almost stops responding
         
        Put cap on maximum area of canvas, size is similar too the 
        maximum size allowed by firefox (firefox seems to to cut off 
        at area == 32767 * 9358). 

        Also protect renderer against the possibility of a null context
        (this was triggering a CG warning)

        * html/HTMLCanvasElement.cpp:
        (WebCore::HTMLCanvasElement::createDrawingContext):
           Apply maximum canvas area
        (WebCore::HTMLCanvasElement::createPlatformImage):
           Protect against null CG Context

2007-02-26  Mitz Pettel  <mitz@webkit.org>

        Reviewed by Antti Koivisto.

        - fix http://bugs.webkit.org/show_bug.cgi?id=12899
          Ordered lists not updating dynamically with new styles

        Test: fast/lists/list-style-type-dynamic-change.html

        * rendering/RenderListMarker.cpp:
        (WebCore::RenderListMarker::setStyle): Made changing the marker type trigger
        updating of the marker.

2007-02-26  Adele Peterson  <adele@apple.com>

        Reviewed by Maciej.

        Fix for <rdar://problem/5012761> REGRESSION: form submit invokes wrong event handler

        Test: fast/events/submit-reset-nested-bubble.html

        * dom/EventTargetNode.h: Made handleLocalEvents virtual.
        * html/HTMLFormElement.cpp: (WebCore::HTMLFormElement::handleLocalEvents): If we're
          not in the capture phase, and the target is a different form, and we're handling
          the submitEvent or the resetEvent, then stop propagation of the event.  This matches
          Firefox behavior.  You can only get in this situation if misnested tags cause
          forms to be nested.
        * html/HTMLFormElement.h: Added handleLocalEvents.

2007-02-26  Darin Adler  <darin@apple.com>

        Reviewed by Oliver Hunt.

        - <rdar://problem/5021555> TextCodecICU does not use fallback mappings; it should

        * platform/TextCodecICU.cpp: (WebCore::TextCodecICU::createICUConverter):
        Added a call to ucnv_setFallback(TRUE).

2007-02-26  Oliver Hunt  <oliver@apple.com>

        Reviewed by Adam.

        Fix for rdar://problem/5021127 

        Need to add null check to node -- original Obj-C didn't need 
        the null check due to the Obj-C null messaging semantics

        * editing/Editor.cpp:
        (WebCore::Editor::shouldInsertFragment):

2007-02-26  David Hyatt  <hyatt@apple.com>

        Make text files render using white-space: pre-wrap instead of white-space: pre.
        
        Reviewed by aroben

        * loader/TextDocument.cpp:
        (WebCore::TextTokenizer::write):

2007-02-26  David Hyatt  <hyatt@apple.com>

        Back out the change to add fullyClippedContentRect.  The layout test
        was actually showing more correct results.

        * page/Frame.cpp:
        (WebCore::Frame::visibleSelectionRect):
        (WebCore::Frame::setIsActive):
        (WebCore::Frame::markAllMatchesForText):
        * platform/ScrollView.h:
        * platform/mac/ScrollViewMac.mm:
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::scrollRectToVisible):

2007-02-26  David Hyatt  <hyatt@apple.com>

        Add support for a new property called -webkit-border-fit.  This property
        has two values: border and lines.  The "border" value means the border and
        background paint normally at the border box level.  The "lines" value indicates
        that the border and background should shrink dynamically to snugly hug the
        line boxes of normal flow descendants.

        Reviewed by darin

        fast/borders/border-fit.html

        * WebCore.xcodeproj/project.pbxproj:
        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::):
        (WebCore::CSSComputedStyleDeclaration::getPropertyCSSValue):
        * css/CSSPropertyNames.in:
        * css/CSSValueKeywords.in:
        * css/cssparser.cpp:
        (WebCore::CSSParser::parseValue):
        * css/cssstyleselector.cpp:
        (WebCore::CSSStyleSelector::applyProperty):
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::adjustForBorderFit):
        (WebCore::RenderBlock::borderFitAdjust):
        * rendering/RenderBlock.h:
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::paintBoxDecorations):
        * rendering/RenderBox.h:
        (WebCore::RenderBox::borderFitAdjust):
        * rendering/RenderStyle.cpp:
        (WebCore::StyleRareNonInheritedData::StyleRareNonInheritedData):
        (WebCore::StyleRareNonInheritedData::operator==):
        (WebCore::RenderStyle::diff):
        * rendering/RenderStyle.h:
        (WebCore::):
        (WebCore::RenderStyle::borderFit):
        (WebCore::RenderStyle::setBorderFit):
        (WebCore::RenderStyle::initialBorderFit):

2007-02-26  Adam Roben  <aroben@apple.com>

        Reviewed by Darin.

        Build fix.

        * rendering/RenderTreeAsText.cpp: Can't use #ifndef with ENABLE() macro.

2007-02-26  Adele Peterson  <adele@apple.com>

        Reviewed by Adam.

        Fix for <rdar://problem/4990700> Safari always crashes when attempting to edit/view 
        Yahoo pipes in WebCore::HTMLSelectElement::optionToListIndex

        Test: fast/forms/select-out-of-bounds-index.html

        * html/HTMLSelectElement.cpp:
        (WebCore::HTMLSelectElement::setSelectedIndex): If we're about to deselect all options, then set m_lastOnChangeIndex to -1.
        (WebCore::HTMLSelectElement::optionToListIndex): Moved listSize to a local variable.  Rewrote using a simpler for-loop to prevent out-of-bounds errors.

2007-02-26  Anders Carlsson  <acarlsson@apple.com>

        Reviewed by Geoff.

        <rdar://problem/4816376>
        REGRESSION: NetNewsWire 3.0 - Crashes in WebDocumentLoaderMac::attachToFrame() (12674)
        
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::reload):
        Remove call to setPolicyDocumentLoader here, it's set by the ::load function that we end up calling.

2007-02-26  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Lars.

        - fixed <rdar://problem/5021698> Disable experimental SVG features (12883)
        
        I added an ENABLE_SVG_EXPERIMENTAL_FEATURES define to guard all use of the experimental
        features, and used it to guard relevant tag names, elements, JS bindings and renderers.
        
        I also converted all the existing optional feature defines to
        ENABLE_FOO instead of FOO_SUPPORT since that is the more standard
        way to do it in open source projects and works with the handy new
        ENABLE() macro.

        * CMakeLists.txt:
        * DerivedSources.make:
        * Projects/gdk/webcore-gdk.bkl:
        * WebCore.pro:
        * WebCore.vcproj/WebCore/WebCore.vcproj:
        * WebCore.vcproj/WebCore/build-generated-files.sh:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSCustomXPathNSResolver.cpp:
        * bindings/js/JSCustomXPathNSResolver.h:
        * bindings/js/JSSVGElementWrapperFactory.cpp:
        * bindings/js/JSSVGElementWrapperFactory.h:
        * bindings/js/JSSVGMatrixCustom.cpp:
        * bindings/js/JSSVGPODTypeWrapper.h:
        * bindings/js/JSSVGPathSegCustom.cpp:
        * bindings/js/JSSVGPathSegListCustom.cpp:
        * bindings/js/JSSVGPointListCustom.cpp:
        * bindings/js/JSXSLTProcessor.cpp:
        * bindings/js/JSXSLTProcessor.h:
        * bindings/js/kjs_binding.cpp:
        (KJS::setDOMException):
        * bindings/js/kjs_css.cpp:
        (KJS::toJS):
        * bindings/js/kjs_dom.cpp:
        (KJS::toJS):
        * bindings/js/kjs_html.cpp:
        (KJS::HTMLElementFunction::callAsFunction):
        * bindings/js/kjs_proxy.cpp:
        * bindings/js/kjs_proxy.h:
        * bindings/js/kjs_window.cpp:
        (KJS::Window::getValueProperty):
        * bindings/objc/DOM.mm:
        (WebCore::createElementClassMap):
        (+[DOMNode _nodeWith:]):
        * bindings/objc/DOMCSS.mm:
        (+[DOMCSSValue _CSSValueWith:]):
        * bindings/objc/DOMCustomXPathNSResolver.h:
        * bindings/objc/DOMCustomXPathNSResolver.mm:
        * bindings/objc/DOMEvents.mm:
        (+[DOMEvent _eventWith:]):
        * bindings/objc/DOMInternal.h:
        * bindings/objc/DOMSVGPathSegInternal.mm:
        * bindings/objc/DOMXPath.mm:
        * bindings/objc/ExceptionHandlers.mm:
        (WebCore::raiseDOMException):
        * bindings/objc/PublicDOMInterfaces.h:
        * bindings/scripts/CodeGeneratorJS.pm:
        * bindings/scripts/CodeGeneratorObjC.pm:
        * config.h:
        * css/CSSGrammar.y:
        * css/CSSStyleDeclaration.cpp:
        (WebCore::propertyID):
        * css/StyleBase.h:
        * css/cssparser.cpp:
        (WebCore::CSSParser::parseValue):
        * css/cssparser.h:
        * css/cssstyleselector.cpp:
        (WebCore::CSSStyleSelector::loadDefaultStyle):
        (WebCore::CSSStyleSelector::initForStyleResolve):
        (WebCore::checkPseudoState):
        (WebCore::CSSStyleSelector::adjustRenderStyle):
        (WebCore::CSSStyleSelector::applyProperty):
        * css/cssstyleselector.h:
        * dom/DOMImplementation.cpp:
        (WebCore::DOMImplementation::hasFeature):
        (WebCore::DOMImplementation::createDocument):
        * dom/Document.cpp:
        (WebCore::Document::Document):
        (WebCore::Document::~Document):
        (WebCore::Document::createElement):
        (WebCore::Document::implicitClose):
        (WebCore::Document::recalcStyleSelector):
        (WebCore::Document::createEvent):
        * dom/Document.h:
        * dom/Document.idl:
        * dom/Event.cpp:
        * dom/Event.h:
        * dom/EventTarget.cpp:
        * dom/EventTarget.h:
        * dom/MappedAttributeEntry.h:
        (WebCore::):
        * dom/Node.cpp:
        (WebCore::Node::createRendererIfNeeded):
        (WebCore::Node::shadowAncestorNode):
        * dom/Node.h:
        * dom/ProcessingInstruction.cpp:
        (WebCore::ProcessingInstruction::ProcessingInstruction):
        (WebCore::ProcessingInstruction::checkStyleSheet):
        (WebCore::ProcessingInstruction::setCSSStyleSheet):
        * dom/ProcessingInstruction.h:
        * dom/Text.cpp:
        (WebCore::Text::createRenderer):
        * dom/XMLTokenizer.cpp:
        (WebCore::XMLTokenizer::startElementNs):
        (WebCore::XMLTokenizer::endElementNs):
        (WebCore::XMLTokenizer::processingInstruction):
        (WebCore::XMLTokenizer::end):
        (WebCore::XMLTokenizer::insertErrorMessageBlock):
        * dom/XMLTokenizer.h:
        * html/HTMLEmbedElement.cpp:
        * html/HTMLEmbedElement.h:
        * html/HTMLObjectElement.cpp:
        * html/HTMLObjectElement.h:
        * ksvg2/css/SVGCSSParser.cpp:
        * ksvg2/css/SVGCSSStyleSelector.cpp:
        * ksvg2/css/SVGRenderStyle.cpp:
        * ksvg2/css/SVGRenderStyle.h:
        * ksvg2/css/SVGRenderStyleDefs.cpp:
        * ksvg2/css/SVGRenderStyleDefs.h:
        * ksvg2/events/JSSVGLazyEventListener.cpp:
        * ksvg2/events/JSSVGLazyEventListener.h:
        * ksvg2/events/SVGZoomEvent.cpp:
        * ksvg2/events/SVGZoomEvent.h:
        * ksvg2/misc/KCanvasRenderingStyle.cpp:
        * ksvg2/misc/KCanvasRenderingStyle.h:
        * ksvg2/misc/PointerEventsHitRules.cpp:
        * ksvg2/misc/PointerEventsHitRules.h:
        * ksvg2/misc/SVGDocumentExtensions.cpp:
        * ksvg2/misc/SVGDocumentExtensions.h:
        * ksvg2/misc/SVGImageLoader.cpp:
        * ksvg2/misc/SVGImageLoader.h:
        * ksvg2/misc/SVGTimer.cpp:
        * ksvg2/misc/SVGTimer.h:
        * ksvg2/misc/TimeScheduler.cpp:
        * ksvg2/misc/TimeScheduler.h:
        * ksvg2/scripts/make_names.pl:
        * ksvg2/svg/ColorDistance.cpp:
        * ksvg2/svg/ColorDistance.h:
        * ksvg2/svg/GradientAttributes.h:
        * ksvg2/svg/LinearGradientAttributes.h:
        * ksvg2/svg/PatternAttributes.h:
        * ksvg2/svg/RadialGradientAttributes.h:
        * ksvg2/svg/SVGAElement.cpp:
        * ksvg2/svg/SVGAElement.h:
        * ksvg2/svg/SVGAngle.cpp:
        * ksvg2/svg/SVGAngle.h:
        * ksvg2/svg/SVGAnimateColorElement.cpp:
        * ksvg2/svg/SVGAnimateColorElement.h:
        * ksvg2/svg/SVGAnimateElement.cpp:
        * ksvg2/svg/SVGAnimateElement.h:
        * ksvg2/svg/SVGAnimateElement.idl:
        * ksvg2/svg/SVGAnimateMotionElement.cpp:
        * ksvg2/svg/SVGAnimateMotionElement.h:
        * ksvg2/svg/SVGAnimateTransformElement.cpp:
        * ksvg2/svg/SVGAnimateTransformElement.h:
        * ksvg2/svg/SVGAnimateTransformElement.idl:
        * ksvg2/svg/SVGAnimatedPathData.cpp:
        * ksvg2/svg/SVGAnimatedPathData.h:
        * ksvg2/svg/SVGAnimatedPoints.cpp:
        * ksvg2/svg/SVGAnimatedPoints.h:
        * ksvg2/svg/SVGAnimatedTemplate.h:
        * ksvg2/svg/SVGAnimationElement.cpp:
        * ksvg2/svg/SVGAnimationElement.h:
        * ksvg2/svg/SVGCircleElement.cpp:
        * ksvg2/svg/SVGCircleElement.h:
        * ksvg2/svg/SVGClipPathElement.cpp:
        * ksvg2/svg/SVGClipPathElement.h:
        * ksvg2/svg/SVGColor.cpp:
        * ksvg2/svg/SVGColor.h:
        * ksvg2/svg/SVGComponentTransferFunctionElement.cpp:
        * ksvg2/svg/SVGComponentTransferFunctionElement.h:
        * ksvg2/svg/SVGCursorElement.cpp:
        * ksvg2/svg/SVGCursorElement.h:
        * ksvg2/svg/SVGDefsElement.cpp:
        * ksvg2/svg/SVGDefsElement.h:
        * ksvg2/svg/SVGDescElement.cpp:
        * ksvg2/svg/SVGDescElement.h:
        * ksvg2/svg/SVGDocument.cpp:
        * ksvg2/svg/SVGDocument.h:
        * ksvg2/svg/SVGElement.cpp:
        (WebCore::SVGElement::dispatchEvent):
        * ksvg2/svg/SVGElement.h:
        * ksvg2/svg/SVGElementInstance.cpp:
        * ksvg2/svg/SVGElementInstance.h:
        * ksvg2/svg/SVGElementInstance.idl:
        * ksvg2/svg/SVGElementInstanceList.cpp:
        * ksvg2/svg/SVGElementInstanceList.h:
        * ksvg2/svg/SVGElementInstanceList.idl:
        * ksvg2/svg/SVGEllipseElement.cpp:
        * ksvg2/svg/SVGEllipseElement.h:
        * ksvg2/svg/SVGException.h:
        * ksvg2/svg/SVGExternalResourcesRequired.cpp:
        * ksvg2/svg/SVGExternalResourcesRequired.h:
        * ksvg2/svg/SVGFEBlendElement.cpp:
        * ksvg2/svg/SVGFEBlendElement.h:
        * ksvg2/svg/SVGFEBlendElement.idl:
        * ksvg2/svg/SVGFEColorMatrixElement.cpp:
        * ksvg2/svg/SVGFEColorMatrixElement.h:
        * ksvg2/svg/SVGFEColorMatrixElement.idl:
        * ksvg2/svg/SVGFEComponentTransferElement.cpp:
        * ksvg2/svg/SVGFEComponentTransferElement.h:
        * ksvg2/svg/SVGFEComponentTransferElement.idl:
        * ksvg2/svg/SVGFECompositeElement.cpp:
        * ksvg2/svg/SVGFECompositeElement.h:
        * ksvg2/svg/SVGFECompositeElement.idl:
        * ksvg2/svg/SVGFEDiffuseLightingElement.cpp:
        * ksvg2/svg/SVGFEDiffuseLightingElement.h:
        * ksvg2/svg/SVGFEDiffuseLightingElement.idl:
        * ksvg2/svg/SVGFEDisplacementMapElement.cpp:
        * ksvg2/svg/SVGFEDisplacementMapElement.h:
        * ksvg2/svg/SVGFEDisplacementMapElement.idl:
        * ksvg2/svg/SVGFEDistantLightElement.cpp:
        * ksvg2/svg/SVGFEDistantLightElement.h:
        * ksvg2/svg/SVGFEDistantLightElement.idl:
        * ksvg2/svg/SVGFEFloodElement.cpp:
        * ksvg2/svg/SVGFEFloodElement.h:
        * ksvg2/svg/SVGFEFloodElement.idl:
        * ksvg2/svg/SVGFEFuncAElement.cpp:
        * ksvg2/svg/SVGFEFuncAElement.h:
        * ksvg2/svg/SVGFEFuncAElement.idl:
        * ksvg2/svg/SVGFEFuncBElement.cpp:
        * ksvg2/svg/SVGFEFuncBElement.h:
        * ksvg2/svg/SVGFEFuncBElement.idl:
        * ksvg2/svg/SVGFEFuncGElement.cpp:
        * ksvg2/svg/SVGFEFuncGElement.h:
        * ksvg2/svg/SVGFEFuncGElement.idl:
        * ksvg2/svg/SVGFEFuncRElement.cpp:
        * ksvg2/svg/SVGFEFuncRElement.h:
        * ksvg2/svg/SVGFEFuncRElement.idl:
        * ksvg2/svg/SVGFEGaussianBlurElement.cpp:
        * ksvg2/svg/SVGFEGaussianBlurElement.h:
        * ksvg2/svg/SVGFEGaussianBlurElement.idl:
        * ksvg2/svg/SVGFEImageElement.cpp:
        * ksvg2/svg/SVGFEImageElement.h:
        * ksvg2/svg/SVGFEImageElement.idl:
        * ksvg2/svg/SVGFELightElement.cpp:
        * ksvg2/svg/SVGFELightElement.h:
        * ksvg2/svg/SVGFEMergeElement.cpp:
        * ksvg2/svg/SVGFEMergeElement.h:
        * ksvg2/svg/SVGFEMergeElement.idl:
        * ksvg2/svg/SVGFEMergeNodeElement.cpp:
        * ksvg2/svg/SVGFEMergeNodeElement.h:
        * ksvg2/svg/SVGFEMergeNodeElement.idl:
        * ksvg2/svg/SVGFEOffsetElement.cpp:
        * ksvg2/svg/SVGFEOffsetElement.h:
        * ksvg2/svg/SVGFEOffsetElement.idl:
        * ksvg2/svg/SVGFEPointLightElement.cpp:
        * ksvg2/svg/SVGFEPointLightElement.h:
        * ksvg2/svg/SVGFEPointLightElement.idl:
        * ksvg2/svg/SVGFESpecularLightingElement.cpp:
        * ksvg2/svg/SVGFESpecularLightingElement.h:
        * ksvg2/svg/SVGFESpecularLightingElement.idl:
        * ksvg2/svg/SVGFESpotLightElement.cpp:
        * ksvg2/svg/SVGFESpotLightElement.h:
        * ksvg2/svg/SVGFESpotLightElement.idl:
        * ksvg2/svg/SVGFETileElement.cpp:
        * ksvg2/svg/SVGFETileElement.h:
        * ksvg2/svg/SVGFETileElement.idl:
        * ksvg2/svg/SVGFETurbulenceElement.cpp:
        * ksvg2/svg/SVGFETurbulenceElement.h:
        * ksvg2/svg/SVGFETurbulenceElement.idl:
        * ksvg2/svg/SVGFilterElement.cpp:
        * ksvg2/svg/SVGFilterElement.h:
        * ksvg2/svg/SVGFilterElement.idl:
        * ksvg2/svg/SVGFilterPrimitiveStandardAttributes.cpp:
        * ksvg2/svg/SVGFilterPrimitiveStandardAttributes.h:
        * ksvg2/svg/SVGFitToViewBox.cpp:
        * ksvg2/svg/SVGFitToViewBox.h:
        * ksvg2/svg/SVGForeignObjectElement.cpp:
        * ksvg2/svg/SVGForeignObjectElement.h:
        * ksvg2/svg/SVGForeignObjectElement.idl:
        * ksvg2/svg/SVGGElement.cpp:
        * ksvg2/svg/SVGGElement.h:
        * ksvg2/svg/SVGGradientElement.cpp:
        * ksvg2/svg/SVGGradientElement.h:
        * ksvg2/svg/SVGImageElement.cpp:
        * ksvg2/svg/SVGImageElement.h:
        * ksvg2/svg/SVGLangSpace.cpp:
        * ksvg2/svg/SVGLangSpace.h:
        * ksvg2/svg/SVGLength.cpp:
        * ksvg2/svg/SVGLength.h:
        * ksvg2/svg/SVGLengthList.cpp:
        * ksvg2/svg/SVGLengthList.h:
        * ksvg2/svg/SVGLineElement.cpp:
        * ksvg2/svg/SVGLineElement.h:
        * ksvg2/svg/SVGLinearGradientElement.cpp:
        * ksvg2/svg/SVGLinearGradientElement.h:
        * ksvg2/svg/SVGList.h:
        * ksvg2/svg/SVGListTraits.h:
        * ksvg2/svg/SVGLocatable.cpp:
        (WebCore::SVGLocatable::nearestViewportElement):
        (WebCore::SVGLocatable::farthestViewportElement):
        * ksvg2/svg/SVGLocatable.h:
        * ksvg2/svg/SVGMPathElement.cpp:
        * ksvg2/svg/SVGMPathElement.h:
        * ksvg2/svg/SVGMarkerElement.cpp:
        * ksvg2/svg/SVGMarkerElement.h:
        * ksvg2/svg/SVGMaskElement.cpp:
        * ksvg2/svg/SVGMaskElement.h:
        * ksvg2/svg/SVGMetadataElement.cpp:
        * ksvg2/svg/SVGMetadataElement.h:
        * ksvg2/svg/SVGNumberList.cpp:
        * ksvg2/svg/SVGNumberList.h:
        * ksvg2/svg/SVGPaint.cpp:
        * ksvg2/svg/SVGPaint.h:
        * ksvg2/svg/SVGParserUtilities.cpp:
        * ksvg2/svg/SVGParserUtilities.h:
        * ksvg2/svg/SVGPathElement.cpp:
        * ksvg2/svg/SVGPathElement.h:
        * ksvg2/svg/SVGPathSeg.h:
        * ksvg2/svg/SVGPathSegArc.cpp:
        * ksvg2/svg/SVGPathSegArc.h:
        * ksvg2/svg/SVGPathSegClosePath.cpp:
        * ksvg2/svg/SVGPathSegClosePath.h:
        * ksvg2/svg/SVGPathSegCurvetoCubic.cpp:
        * ksvg2/svg/SVGPathSegCurvetoCubic.h:
        * ksvg2/svg/SVGPathSegCurvetoCubicSmooth.cpp:
        * ksvg2/svg/SVGPathSegCurvetoCubicSmooth.h:
        * ksvg2/svg/SVGPathSegCurvetoQuadratic.cpp:
        * ksvg2/svg/SVGPathSegCurvetoQuadratic.h:
        * ksvg2/svg/SVGPathSegCurvetoQuadraticSmooth.cpp:
        * ksvg2/svg/SVGPathSegCurvetoQuadraticSmooth.h:
        * ksvg2/svg/SVGPathSegLineto.cpp:
        * ksvg2/svg/SVGPathSegLineto.h:
        * ksvg2/svg/SVGPathSegLinetoHorizontal.cpp:
        * ksvg2/svg/SVGPathSegLinetoHorizontal.h:
        * ksvg2/svg/SVGPathSegLinetoVertical.cpp:
        * ksvg2/svg/SVGPathSegLinetoVertical.h:
        * ksvg2/svg/SVGPathSegList.cpp:
        * ksvg2/svg/SVGPathSegList.h:
        * ksvg2/svg/SVGPathSegMoveto.cpp:
        * ksvg2/svg/SVGPathSegMoveto.h:
        * ksvg2/svg/SVGPatternElement.cpp:
        * ksvg2/svg/SVGPatternElement.h:
        * ksvg2/svg/SVGPointList.cpp:
        * ksvg2/svg/SVGPointList.h:
        * ksvg2/svg/SVGPolyElement.cpp:
        * ksvg2/svg/SVGPolyElement.h:
        * ksvg2/svg/SVGPolygonElement.cpp:
        * ksvg2/svg/SVGPolygonElement.h:
        * ksvg2/svg/SVGPolylineElement.cpp:
        * ksvg2/svg/SVGPolylineElement.h:
        * ksvg2/svg/SVGPreserveAspectRatio.cpp:
        * ksvg2/svg/SVGPreserveAspectRatio.h:
        * ksvg2/svg/SVGRadialGradientElement.cpp:
        * ksvg2/svg/SVGRadialGradientElement.h:
        * ksvg2/svg/SVGRectElement.cpp:
        * ksvg2/svg/SVGRectElement.h:
        * ksvg2/svg/SVGRenderingIntent.h:
        * ksvg2/svg/SVGSVGElement.cpp:
        * ksvg2/svg/SVGSVGElement.h:
        * ksvg2/svg/SVGScriptElement.cpp:
        * ksvg2/svg/SVGScriptElement.h:
        * ksvg2/svg/SVGSetElement.cpp:
        * ksvg2/svg/SVGSetElement.h:
        * ksvg2/svg/SVGStopElement.cpp:
        * ksvg2/svg/SVGStopElement.h:
        * ksvg2/svg/SVGStringList.cpp:
        * ksvg2/svg/SVGStringList.h:
        * ksvg2/svg/SVGStylable.cpp:
        * ksvg2/svg/SVGStylable.h:
        * ksvg2/svg/SVGStyleElement.cpp:
        * ksvg2/svg/SVGStyleElement.h:
        * ksvg2/svg/SVGStyledElement.cpp:
        (WebCore::SVGStyledElement::notifyAttributeChange):
        * ksvg2/svg/SVGStyledElement.h:
        * ksvg2/svg/SVGStyledLocatableElement.cpp:
        * ksvg2/svg/SVGStyledLocatableElement.h:
        * ksvg2/svg/SVGStyledTransformableElement.cpp:
        * ksvg2/svg/SVGStyledTransformableElement.h:
        * ksvg2/svg/SVGSwitchElement.cpp:
        * ksvg2/svg/SVGSwitchElement.h:
        * ksvg2/svg/SVGSymbolElement.cpp:
        * ksvg2/svg/SVGSymbolElement.h:
        * ksvg2/svg/SVGTRefElement.cpp:
        * ksvg2/svg/SVGTRefElement.h:
        * ksvg2/svg/SVGTSpanElement.cpp:
        * ksvg2/svg/SVGTSpanElement.h:
        * ksvg2/svg/SVGTests.cpp:
        * ksvg2/svg/SVGTests.h:
        * ksvg2/svg/SVGTextContentElement.cpp:
        * ksvg2/svg/SVGTextContentElement.h:
        * ksvg2/svg/SVGTextElement.cpp:
        * ksvg2/svg/SVGTextElement.h:
        * ksvg2/svg/SVGTextPositioningElement.cpp:
        * ksvg2/svg/SVGTextPositioningElement.h:
        * ksvg2/svg/SVGTitleElement.cpp:
        * ksvg2/svg/SVGTitleElement.h:
        * ksvg2/svg/SVGTransform.cpp:
        * ksvg2/svg/SVGTransform.h:
        * ksvg2/svg/SVGTransformDistance.cpp:
        * ksvg2/svg/SVGTransformDistance.h:
        * ksvg2/svg/SVGTransformList.cpp:
        * ksvg2/svg/SVGTransformList.h:
        * ksvg2/svg/SVGTransformable.cpp:
        * ksvg2/svg/SVGTransformable.h:
        * ksvg2/svg/SVGURIReference.cpp:
        * ksvg2/svg/SVGURIReference.h:
        * ksvg2/svg/SVGUnitTypes.h:
        * ksvg2/svg/SVGUseElement.cpp:
        * ksvg2/svg/SVGUseElement.h:
        * ksvg2/svg/SVGUseElement.idl:
        * ksvg2/svg/SVGViewElement.cpp:
        * ksvg2/svg/SVGViewElement.h:
        * ksvg2/svg/SVGZoomAndPan.cpp:
        * ksvg2/svg/SVGZoomAndPan.h:
        * ksvg2/svg/svgtags.in:
        * loader/Cache.cpp:
        (WebCore::createResource):
        (WebCore::Cache::getStatistics):
        * loader/Cache.h:
        * loader/CachedImage.cpp:
        (WebCore::CachedImage::createImage):
        * loader/CachedResource.h:
        (WebCore::CachedResource::):
        * loader/CachedResourceClient.h:
        * loader/CachedXBLDocument.cpp:
        * loader/CachedXBLDocument.h:
        * loader/CachedXSLStyleSheet.cpp:
        * loader/CachedXSLStyleSheet.h:
        * loader/DocLoader.cpp:
        * loader/DocLoader.h:
        * page/DOMWindow.idl:
        * page/EventHandler.cpp:
        (WebCore::EventHandler::handleMouseMoveEvent):
        (WebCore::selectCursor):
        * page/Frame.cpp:
        (WebCore::Frame::Frame):
        * page/PageState.cpp:
        (WebCore::PageState::PageState):
        (WebCore::PageState::restore):
        * platform/MimeTypeRegistry.cpp:
        (WebCore::initialiseSupportedNonImageMimeTypes):
        * platform/graphics/FloatPoint3D.cpp:
        * platform/graphics/FloatPoint3D.h:
        * platform/graphics/ImageBuffer.cpp:
        (WebCore::ImageBuffer::renderSubtreeToImage):
        * platform/graphics/svg/SVGImage.cpp:
        * platform/graphics/svg/SVGImage.h:
        * platform/graphics/svg/SVGImageEmptyClients.h:
        * platform/graphics/svg/SVGPaintServer.cpp:
        * platform/graphics/svg/SVGPaintServer.h:
        * platform/graphics/svg/SVGPaintServerGradient.cpp:
        * platform/graphics/svg/SVGPaintServerGradient.h:
        * platform/graphics/svg/SVGPaintServerLinearGradient.cpp:
        * platform/graphics/svg/SVGPaintServerLinearGradient.h:
        * platform/graphics/svg/SVGPaintServerPattern.cpp:
        * platform/graphics/svg/SVGPaintServerPattern.h:
        * platform/graphics/svg/SVGPaintServerRadialGradient.cpp:
        * platform/graphics/svg/SVGPaintServerRadialGradient.h:
        * platform/graphics/svg/SVGPaintServerSolid.cpp:
        * platform/graphics/svg/SVGPaintServerSolid.h:
        * platform/graphics/svg/SVGResource.cpp:
        * platform/graphics/svg/SVGResource.h:
        * platform/graphics/svg/SVGResourceClipper.cpp:
        * platform/graphics/svg/SVGResourceClipper.h:
        * platform/graphics/svg/SVGResourceFilter.cpp:
        * platform/graphics/svg/SVGResourceFilter.h:
        * platform/graphics/svg/SVGResourceMarker.cpp:
        * platform/graphics/svg/SVGResourceMarker.h:
        * platform/graphics/svg/SVGResourceMasker.cpp:
        * platform/graphics/svg/SVGResourceMasker.h:
        * platform/graphics/svg/cg/CgSupport.cpp:
        * platform/graphics/svg/cg/CgSupport.h:
        * platform/graphics/svg/cg/RenderPathCg.cpp:
        * platform/graphics/svg/cg/SVGPaintServerCg.cpp:
        * platform/graphics/svg/cg/SVGPaintServerGradientCg.cpp:
        * platform/graphics/svg/cg/SVGPaintServerPatternCg.cpp:
        * platform/graphics/svg/cg/SVGPaintServerSolidCg.cpp:
        * platform/graphics/svg/cg/SVGResourceClipperCg.cpp:
        * platform/graphics/svg/cg/SVGResourceFilterCg.mm:
        * platform/graphics/svg/cg/SVGResourceMaskerCg.mm:
        * 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:
        * platform/graphics/svg/filters/cg/SVGFEColorMatrixCg.mm:
        * platform/graphics/svg/filters/cg/SVGFEComponentTransferCg.mm:
        * platform/graphics/svg/filters/cg/SVGFECompositeCg.mm:
        * platform/graphics/svg/filters/cg/SVGFEDiffuseLightingCg.mm:
        * platform/graphics/svg/filters/cg/SVGFEDisplacementMapCg.mm:
        * platform/graphics/svg/filters/cg/SVGFEFloodCg.mm:
        * platform/graphics/svg/filters/cg/SVGFEGaussianBlurCg.mm:
        * platform/graphics/svg/filters/cg/SVGFEHelpersCg.h:
        * platform/graphics/svg/filters/cg/SVGFEHelpersCg.mm:
        * platform/graphics/svg/filters/cg/SVGFEImageCg.mm:
        * platform/graphics/svg/filters/cg/SVGFEMergeCg.mm:
        * platform/graphics/svg/filters/cg/SVGFEOffsetCg.mm:
        * platform/graphics/svg/filters/cg/SVGFESpecularLightingCg.mm:
        * platform/graphics/svg/filters/cg/SVGFETileCg.mm:
        * platform/graphics/svg/filters/cg/SVGFilterEffectCg.mm:
        * platform/graphics/svg/qt/SVGPaintServerGradientQt.cpp:
        * platform/graphics/svg/qt/SVGPaintServerLinearGradientQt.cpp:
        * platform/graphics/svg/qt/SVGPaintServerPatternQt.cpp:
        * platform/graphics/svg/qt/SVGPaintServerQt.cpp:
        * platform/graphics/svg/qt/SVGPaintServerRadialGradientQt.cpp:
        * platform/graphics/svg/qt/SVGPaintServerSolidQt.cpp:
        * platform/graphics/svg/qt/SVGResourceClipperQt.cpp:
        * platform/graphics/svg/qt/SVGResourceFilterQt.cpp:
        * platform/graphics/svg/qt/SVGResourceMaskerQt.cpp:
        * rendering/HitTestResult.cpp:
        (WebCore::HitTestResult::absoluteImageURL):
        (WebCore::HitTestResult::absoluteLinkURL):
        (WebCore::HitTestResult::isLiveLink):
        * rendering/RenderForeignObject.cpp:
        * rendering/RenderForeignObject.h:
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::isTransparent):
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::containingBlock):
        * rendering/RenderObject.h:
        * rendering/RenderPath.cpp:
        * rendering/RenderPath.h:
        * rendering/RenderSVGBlock.cpp:
        * rendering/RenderSVGBlock.h:
        * rendering/RenderSVGContainer.cpp:
        * rendering/RenderSVGContainer.h:
        * rendering/RenderSVGGradientStop.cpp:
        * rendering/RenderSVGGradientStop.h:
        * rendering/RenderSVGHiddenContainer.cpp:
        * rendering/RenderSVGHiddenContainer.h:
        * rendering/RenderSVGImage.cpp:
        * rendering/RenderSVGImage.h:
        * rendering/RenderSVGInline.cpp:
        * rendering/RenderSVGInline.h:
        * rendering/RenderSVGInlineText.cpp:
        * rendering/RenderSVGInlineText.h:
        * rendering/RenderSVGTSpan.cpp:
        * rendering/RenderSVGTSpan.h:
        * rendering/RenderSVGText.cpp:
        * rendering/RenderSVGText.h:
        * rendering/RenderStyle.cpp:
        (WebCore::StyleRareNonInheritedData::StyleRareNonInheritedData):
        (WebCore::StyleRareNonInheritedData::~StyleRareNonInheritedData):
        (WebCore::StyleRareNonInheritedData::operator==):
        (WebCore::RenderStyle::RenderStyle):
        (WebCore::RenderStyle::inheritFrom):
        (WebCore::RenderStyle::operator==):
        (WebCore::RenderStyle::inheritedNotEqual):
        (WebCore::RenderStyle::diff):
        * rendering/RenderStyle.h:
        * rendering/RenderText.cpp:
        (WebCore::RenderText::setStyle):
        (WebCore::RenderText::setTextInternal):
        * rendering/RenderTreeAsText.cpp:
        (WebCore::write):
        (WebCore::externalRepresentation):
        * rendering/SVGInlineFlowBox.cpp:
        * rendering/SVGInlineFlowBox.h:
        * rendering/SVGRenderTreeAsText.cpp:
        * rendering/SVGRenderTreeAsText.h:
        * rendering/SVGRootInlineBox.cpp:
        * rendering/SVGRootInlineBox.h:
        * rendering/bidi.cpp:
        (WebCore::shouldPreserveNewline):
        (WebCore::RenderBlock::findNextLineBreak):
        * webcore-base.bkl:
        * xml/NativeXPathNSResolver.cpp:
        * xml/NativeXPathNSResolver.h:
        * xml/XPathEvaluator.cpp:
        * xml/XPathEvaluator.h:
        * xml/XPathExpression.cpp:
        * xml/XPathExpression.h:
        * xml/XPathExpressionNode.cpp:
        * xml/XPathExpressionNode.h:
        * xml/XPathFunctions.cpp:
        * xml/XPathFunctions.h:
        * xml/XPathGrammar.y:
        * xml/XPathNSResolver.cpp:
        * xml/XPathNSResolver.h:
        * xml/XPathNamespace.cpp:
        * xml/XPathNamespace.h:
        * xml/XPathParser.cpp:
        * xml/XPathParser.h:
        * xml/XPathPath.cpp:
        * xml/XPathPath.h:
        * xml/XPathPredicate.cpp:
        * xml/XPathPredicate.h:
        * xml/XPathResult.cpp:
        * xml/XPathResult.h:
        * xml/XPathStep.cpp:
        * xml/XPathStep.h:
        * xml/XPathUtil.cpp:
        * xml/XPathUtil.h:
        * xml/XPathValue.cpp:
        * xml/XPathValue.h:
        * xml/XPathVariableReference.cpp:
        * xml/XPathVariableReference.h:
        * xml/XSLImportRule.cpp:
        * xml/XSLImportRule.h:
        * xml/XSLStyleSheet.cpp:
        * xml/XSLStyleSheet.h:
        * xml/XSLTProcessor.cpp:
        * xml/XSLTProcessor.h:

2007-02-25  Mitz Pettel  <mitz@webkit.org>

        Reviewed by David Hyatt.

        - fix http://bugs.webkit.org/show_bug.cgi?id=12886
          Crash with Scriptalicious javascript library

        Test: fast/dynamic/float-withdrawal.html

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::layoutBlockChildren): Detect when a child block had
        intruding floats in a previous layout, and in that case force it to relayout.

2007-02-25  David Hyatt  <hyatt@apple.com>

        Revert my change to the default fill color.  Just set the color to transparent explicitly when
        drawing textarea resizer frames.

        * platform/graphics/GraphicsContext.cpp:
        (WebCore::GraphicsContextState::GraphicsContextState):
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::paintOverflowControls):

2007-02-25  Sam Weinig  <sam@webkit.org>

        Update forgotten files.

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

2007-02-25  David Hyatt  <hyatt@apple.com>

        Fix for regression caused by changing the containing block of positioned elements with no positioned ancestor
        to be the initial containing block (represented in our tree by the RenderView).  Rework RenderView's layout
        to have very few special cases.   Now it will just relayout its children when the width/height of the
        view actually changes.  Positioned elements no longer get a special additional layout, since width/height
        adjustments are caught by the base class already anyway.

        Reviewed by mjs, darin

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::layoutBlock):
        * rendering/RenderFlexibleBox.cpp:
        (WebCore::RenderFlexibleBox::layoutBlock):
        (WebCore::RenderFlexibleBox::layoutVerticalBox):
        * rendering/RenderView.cpp:
        (WebCore::RenderView::RenderView):
        (WebCore::RenderView::layout):
        * rendering/RenderView.h:

2007-02-25  Maciej Stachowiak  <mjs@apple.com>

        Not reviewed, build fix.

        - fix build breakage

        * platform/gdk/ScrollViewGdk.cpp:
        (WebCore::ScrollView::fullyClippedContentRect):
        * platform/qt/ScrollViewQt.cpp:
        (WebCore::ScrollView::fullyClippedContentRect):

2007-02-24  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Adam.

        - fixed layout test failure in fast/overflow/scrollRevealButton
        
        I added a new ScrollView method, fullyClippedContentRect, that vies the content rect
        as clipped by all ancestor scroll views, not just this one. Currently it only works
        correctly on mac however. visibleContentRect, only accounting for the clipping from
        this particular scroll view, is sufficient for most purposes.

        * page/Frame.cpp:
        (WebCore::Frame::visibleSelectionRect):
        (WebCore::Frame::setIsActive):
        (WebCore::Frame::markAllMatchesForText):
        * platform/ScrollView.h:
        * platform/gdk/ScrollViewGdk.cpp:
        (WebCore::ScrolView::fullyClippedContentRect):
        * platform/mac/ScrollViewMac.mm:
        (WebCore::ScrollView::fullyClippedContentRect):
        * platform/qt/ScrollViewQt.cpp:
        (WebCore::ScrolView::fullyClippedContentRect):
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::scrollRectToVisible):

2007-02-24  Adam Roben  <aroben@apple.com>

        Reviewed by Steve.

        "Look Up in Dictionary" context menu item should be Mac-only for now,
        since it's only implemented on that platform (<rdar://problem/5021468>)

        * platform/ContextMenu.cpp:
        (WebCore::ContextMenu::populate): Wrap all instances of the dictionary
        menu item in #if PLATFORM(MAC).

2007-02-24  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Darin Adler.
        
        Fixed <rdar://problem/4987649> leaks in BidiRun::operator new seen while 
        running WebKit unit tests
        
        In bidi.cpp, some functions allocate BidiRuns and put them in a global data
        structure, while others uses the BidiRuns in the global data structure. 
        The caller is responsible for knowing which functions may allocate runs
        and which may use them, and calling deleteBidiRuns() at the appropriate time.

        The fix is to add some calls to deleteBidiRuns() where they were missing.
        
        I also added a BidiRun counter because these two leaks were introduced by
        our two bidi.cpp experts, so the odds that leaks will creep in again
        in the future seem pretty high.

        * rendering/bidi.cpp:
        (WebCore::RenderBlock::bidiReorderCharacters): Added  missing call to
        deleteBidiRuns().
        (WebCore::BidiRunCounter::~BidiRunCounter):
        (WebCore::BidiRun::operator delete):
        (WebCore::RenderBlock::layoutInlineChildren): Added missing call to
        deleteBidiRuns(). Moved call to deleteBidiRuns() to same scope as call to
        bidiReorderLine(), to emphasize that they go together like new/delete.
        In theory, the old code was just as good, but I didn't want to rely on
        theory.

2007-02-24  David Harrison  <harrison@apple.com>

        Reviewed by Kevin.

        <rdar://problem/4961431> Image with empty string alt tag should be ignored

        * bridge/mac/WebCoreAXObject.mm:
        (-[WebCoreAXObject accessibilityIsIgnored]):
        Ignore img element that has an alt attribute, but that string is empty.

2007-02-24  Krzysztof Kowalczyk  <kkowalczyk@gmail.com>

        Reviewed by Adam Roben.

        Gdk improvements.

        * platform/gdk/FrameGdk.cpp: only scroll on keydown, not both keydown and keyup.
        (WebCore::FrameGdk::keyPress):
        (WebCore::FrameGdk::handleGdkEvent):
        (WebCore::Frame::print):
        (WebCore::Frame::issueTransposeCommand):
        (WebCore::Frame::respondToChangedSelection):
        (WebCore::Frame::cleanupPlatformScriptObjects):
        (WebCore::Frame::dragImageForSelection):
        * platform/network/gdk/ResourceHandleManager.cpp: don't free memory that
        doesn't belong to us.
        (WebCore::ResourceHandleManager::downloadTimerCallback):

2007-02-23  Kevin Decker <kdecker@apple.com>

        Reviewed by Anders.

        Fixed: <rdar://problem/4971226> REGRESSION: Replying to closed HTML mail message does not quote original body (12503)
        
        There were two problems here:
        
        * page/mac/WebCoreFrameBridge.mm:
        (+[WebCoreFrameBridge stringWithData:textEncodingName:]): The old code said  "if there is no text encoding name than
         assume WindowsLatin1 (iso-8859-1) and try to decode that". That's not sufficient because it doesn't handle the fallback
         case for unknown encodings. This method will now attempt to decode using WindowsLatin1 for unknown encoding types.
        * platform/mac/mac-encodings.txt: Added the missing "macroman" encoding type. 

2007-02-23  Mitz Pettel  <mitz@webkit.org>

        Reviewed by Maciej.

        - fix http://bugs.webkit.org/show_bug.cgi?id=12856
          REGRESSION (r13685): Canceling the suggestion popup does not revert the change

        * editing/ReplaceSelectionCommand.cpp:
        (WebCore::ReplaceSelectionCommand::doApply): If the fragment to be inserted
        is empty, first delete the selection, and only then bail out. 

2007-02-23  Anders Carlsson  <acarlsson@apple.com>

        Reviewed by Adam.

        <rdar://problem/5001923> 
        REGRESSION: Crash when navigating forward from an error page in WebFrameLoaderClient::dispatchDidReceiveContentLength

        Fix an error that was introduced in revision r18541. We should check if the provisional document loader 
        has an unreachable URL, not the actual document loader.
        
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::updateHistoryForCommit):

2007-02-23  Mitz Pettel  <mitz@webkit.org>

        Reviewed by Darin.

        - fix http://bugs.webkit.org/show_bug.cgi?id=12823
          REGRESSION(r16968-16977): unable to prevent selection by cancelling "selectstart" event

        Test: fast/events/selectstart-during-autoscroll.html

        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::autoscroll): Invoke the renderer's shouldSelect() --
        which dispatches the selection DOM event and gives it a chance to cancel
        the selection -- before updating the selection during autoscroll.

2007-02-23  Oliver Hunt  <oliver@apple.com>

        Reviewed by Adam.

        Fix for http://bugs.webkit.org/show_bug.cgi?id=12870

        It turns out short circuiting DragData::containsURL() was bad
 
        * manual-tests/directory-drop-on-view.html: Added.
        * platform/mac/DragDataMac.mm:
        (WebCore::DragData::containsURL):

2007-02-23  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Mitz.

        - 12.5% speedup on BenchJS test 6
        Partial fix for http://bugs.webkit.org/show_bug.cgi?id=12866
        
        It turns out that calling documentVisibleRect on an NSScrollView is pretty expensive,
        and calling visibleRect even more so. Take measures to call them less often.

        * platform/mac/ScrollViewMac.mm:
        (WebCore::ScrollView::visibleContentRect): Use documentVisibleRect when possible.
        (WebCore::ScrollView::updateContents): Use visibleContentRect to be able to use
        documentVisibleRect when possible.
        * rendering/RenderView.cpp:
        (WebCore::RenderView::repaintViewRectangle): Don't get or intersect with viewRect
        if we don't have a parent frame, since the ScrollView will do that anyway. Also,
        don't get contentX and contentY separately since they are in the viewRect already.
        (WebCore::RenderView::viewRect): Use visibleContentRect instead of getting each
        coordinate individually, to avoid calling documentVisibleRect repeatedly.

2007-02-23  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Mitz.

        - 2% speedup on BenchJS test 6
        Partial fix for http://bugs.webkit.org/show_bug.cgi?id=12866

        * css/CSSPrimitiveValue.cpp:
        (WebCore::CSSPrimitiveValue::cssText): Use format() instead of
        number() followed by append of a constant string.

2007-02-22  George Staikos  <staikos@kde.org>

        Fix the Qt build.

        * platform/qt/ClipboardQt.cpp:
        (WebCore::ClipboardQt::ClipboardQt):

2007-02-22  Krzysztof Kowalczyk  <kkowalczyk@gmail.com>

        Reviewed by Adam Roben, who never sleeps.

        To avoid code duplication, move notImplementedGdk() macro to a separate
        header file. Remove existing notImplementedGdk() macros and replace
        remaining notImplemented() to notImplementedGdk() in gdk code.

        * loader/gdk/DocumentLoaderGdk.cpp:
        (WebCore::DocumentLoader::getResponseModifiedHeader):
        * loader/gdk/FrameLoaderClientGdk.cpp:
        (WebCore::FrameLoaderClientGdk::hasWebView):
        (WebCore::FrameLoaderClientGdk::hasFrameView):
        * page/gdk/ContextMenuClientGdk.cpp:
        (WebCore::ContextMenuClientGdk::contextMenuDestroyed):
        (WebCore::ContextMenuClientGdk::getCustomMenuFromDefaultItems):
        (WebCore::ContextMenuClientGdk::contextMenuItemSelected):
        (WebCore::ContextMenuClientGdk::downloadURL):
        (WebCore::ContextMenuClientGdk::copyImageToClipboard):
        (WebCore::ContextMenuClientGdk::searchWithGoogle):
        (WebCore::ContextMenuClientGdk::lookUpInDictionary):
        (WebCore::ContextMenuClientGdk::speak):
        (WebCore::ContextMenuClientGdk::stopSpeaking):
        * page/gdk/EventHandlerGdk.cpp:
        * platform/gdk/CursorGdk.cpp:
        (WebCore::Cursor::Cursor):
        * platform/gdk/EditorClientGdk.cpp:
        * platform/gdk/NotImplementedGdk.h: Added.
        * platform/gdk/PopupMenuGdk.cpp:
        (WebCore::PopupMenu::PopupMenu):
        (WebCore::PopupMenu::~PopupMenu):
        (WebCore::PopupMenu::show):
        (WebCore::PopupMenu::hide):
        (WebCore::PopupMenu::updateFromElement):
        * platform/gdk/RenderThemeGdk.cpp:
        * platform/gdk/ScreenGdk.cpp:
        (WebCore::screenDepth):
        (WebCore::screenDepthPerComponent):
        (WebCore::screenIsMonochrome):
        (WebCore::screenRect):
        (WebCore::screenAvailableRect):
        * platform/gdk/TemporaryLinkStubs.cpp:
        * platform/graphics/gdk/ImageGdk.cpp:
        (WebCore::Image::drawPattern):
        * platform/network/gdk/ResourceHandleCurl.cpp:
        (WebCore::ResourceHandle::setDefersLoading):
        * platform/network/gdk/ResourceHandleManager.cpp:
        (WebCore::ResourceHandleManager::setupPUT):
        (WebCore::ResourceHandleManager::setupPOST):

2007-02-22  Ian Eng  <ian.eng.webkit@gmail.com>

        Reviewed by Maciej.

        - Patch for http://bugs.webkit.org/show_bug.cgi?id=12850
          Leaks >10k objects

        and

        - http://bugs.webkit.org/show_bug.cgi?id=12853
          add a EventListener leak counter

        Problem: RemoveEventListener leaks memory if the listener is not
        registered.
        Fix: Added Window::findJSEventListener function w/o creating a 
        JSEventListener; Renamed getJSEventListener to findOrCreateJSEventListener;

        As an enhancement, added a leak counter for EventListeners.

        Added a test case, LayoutTests/fast/events/remove-event-listener.html.

        * WebCore/bindings/js/kjs_dom.cpp:
        * WebCore/bindings/js/kjs_window.h:
        * WebCore/bindings/js/kjs_window.cpp:
        * WebCore/bindings/js/kjs_event.cpp: Add a leak counter.
        * WebCore/bindings/js/JSXMLHttpRequest.cpp:
        * LayoutTests/fast/events/remove-event-listener.html:

2007-02-22  Anders Carlsson  <acarlsson@apple.com>

        Reviewed by Geoff.

        <rdar://problem/4998203> 
        REGRESSION: Back-forward list gets messed up when navigating to error pages with back-forward cache turned off
        
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::load):
        Remove call to setPolicyDocumentLoader(), the policy document loader is set immediately after, and setting it before 
        calling shouldReloadToHandleUnreachableURL causes us to get the wrong URL.
        
        (WebCore::FrameLoader::shouldReloadToHandleUnreachableURL):
        Check if the unreachable URL is equal to the document loader's request.
        
        (WebCore::FrameLoader::checkLoadCompleteForThisFrame):
        Check the provisional document loader's unreachable URL.

2007-02-22  Justin Garcia  <justin.garcia@apple.com>

        Reviewed by darin
        
        <rdar://problem/5007143>
        REGRESSION: WebKit doesn't remember horizontal position of caret when moving forward by line

        * editing/SelectionController.cpp:
        (WebCore::SelectionController::SelectionController): Initialize 
        m_xPosForVerticalArrowNavigation.
        (WebCore::SelectionController::setSelection): Call the new setter.
        (WebCore::SelectionController::modifyMovingRightForward): For line
        and paragraph granularities, use the saved xPosForVerticalArrowNavigation 
        even if the old selection was a range. Use the x position of the 
        *start*, not the end of the selection if there is no saved 
        xPosForVerticalArrowNavigation.  This matches TextEdit's behavior.
        (WebCore::SelectionController::modifyMovingLeftBackward): For line
        and paragraph granularities, use the saved xPosForVerticalArrowNavigation 
        even if the old selection was a range.
        (WebCore::SelectionController::modify): Preserve the xPosForVerticalArrowNavigation
        for line and paragraph granularities.
        (WebCore::SelectionController::xPosForVerticalArrowNavigation): Removed
        the recalc bool because it is now always false.
        (WebCore::SelectionController::setXPosForVerticalArrowNavigation): Added.
        * editing/SelectionController.h: Moved m_xPosForVerticalArrowNavigation
        from Frame.
        * page/Frame.cpp: Moved m_xPosForVerticalArrowNavigation to SelectionController.
        * page/Frame.h: Ditto.
        * page/FramePrivate.h: Ditto.

2007-02-22  Beth Dakin  <bdakin@apple.com>

        Reviewed by Adam. Manual test added.

        Fix for http://bugs.webkit.org/show_bug.cgi?id=12399 REGRESSION: 
        Unable to prevent default context menu from appearing. <rdar://
        problem/5017416>

        This problem appeared because of two facets of the current context 
        menu design. First, all context menu events are now considered to 
        be "swallowed" since we take care of building up the regular 
        context menu through the defaultEventHandler(). Second, the context 
        menu controller holds onto it's context menu until a new one is 
        created. There would be logistical problems changing this since 
        AppKit relies on the menu being around for as long as it is
        visible on the screen and we don't get any notification once the 
        menu is popped-down.

        This patch fixes the problem by giving WebKit a way to clear the 
        controller's context menu. WebKit now clears the menu before it 
        propagates a new context menu event through the DOM.

        * WebCore.exp:
        * manual-tests/DOMContextMenuEvent.html: Added.
        * page/ContextMenuController.cpp:
        (WebCore::ContextMenuController::clearContextMenu):
        * page/ContextMenuController.h:

2007-02-22  John Sullivan  <sullivan@apple.com>

        Reviewed by Kevin and Adele
        
        - fixed <rdar://problem/4129417> Need final art for textarea's resize corner
        
        This probably broke some layout pixel tests since the image changed. I'm going to
        track those down in a moment (non-trivial since there are a bunch failing for other
        reasons).

        * Resources/textAreaResizeCorner.tiff:
        new art

        * Resources/deleteButton.tiff:
        * Resources/deleteButtonPressed.tiff:
        these got smaller when I ran compress-tiffs on this directory
        
2007-02-22  Oliver Hunt  <oliver@apple.com>

        Reviewed by Ada, Lou and Steve.

        Moving basic components of ClipboardMac to Clipboard, 
        last of the basic common code merge will come later (namely setting the 
        drag element/image).
        
        Tidying up in DragController including a few bad PassRefPtr uses and
        removing unnecessary accessors.  Also initialise fields properly to
        fix <rdar:/problems/5014889>

        * dom/Clipboard.cpp:
        (WebCore::Clipboard::Clipboard):
          New constructor
          
        * dom/Clipboard.h:
        (WebCore::Clipboard::isForDragging):
        (WebCore::Clipboard::dragLocation):
        (WebCore::Clipboard::dragImage):
        (WebCore::Clipboard::dragImageElement):
          Exposing common data
          
        * page/DragController.cpp:
        (WebCore::DragController::DragController):
          Initialise m_isHandlingDrag (oops)
        (WebCore::documentFragmentFromDragData):
        (WebCore::DragController::tryDocumentDrag):
          Fixing PassRefPtr misuse
        (WebCore::DragController::canProcessDrag):
        (WebCore::DragController::startDrag):
        (WebCore::DragController::doSystemDrag):
          Make sure we're using the correct coordinate space
          
        * page/EventHandler.cpp:
        (WebCore::EventHandler::handleDrag):
          Reset drag source correctly
          
        * platform/mac/ClipboardMac.h:
        * platform/mac/ClipboardMac.mm:
        (WebCore::ClipboardMac::ClipboardMac):
          update constructor to use new Clipboard constructor

2007-02-22  Adele Peterson  <adele@apple.com>

        Reviewed by Darin.

        Fix for <rdar://problem/5014970> 9A374: Tabs don't work in the message body

        Test: fast/events/keypress-insert-tab.html

        * page/EventHandler.cpp: (WebCore::EventHandler::defaultTextInputEventHandler):
          If the defaultTabEventHandler doesn't handle the event, then go on to the insertText case.

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

        Reviewed by Darin.

        <rdar://problem/4948887> REGRESSION: Correct differences in public DOM API that inadvertently changed in Leopard

        * bindings/objc/PublicDOMInterfaces.h: Changes return types for two size properties, adds deprecated DOMEventTarget methods.
        * bindings/scripts/CodeGeneratorObjC.pm: Fixed public API checking for protocols, adds support for ConvertToString.
        * dom/EventTarget.idl: Marks addEventListener and removeEventListener with the OldStyleObjC attribute.
        * html/HTMLBaseFontElement.idl: Changes the size property to a DOMString for ObjC only.
        * html/HTMLInputElement.idl: Changes the size property to a DOMString for ObjC only.
        * html/HTMLOptionsCollection.idl: Changes the length property to be unsigned.

2007-02-22  Adele Peterson  <adele@apple.com>

        Reviewed by John.

        Fix <rdar://problem/5016969> REGRESSION: "Check Spelling As You Type" context menu item is never checked

        * platform/ContextMenu.cpp: (WebCore::ContextMenu::checkOrEnableIfNeeded): Set shouldCheck for ContextMenuItemTagCheckSpellingWhileTyping.

2007-02-22  Antti Koivisto  <antti@apple.com>

        Reviewed by Darin.

        - fix http://bugs.webkit.org/show_bug.cgi?id=11447
        REGRESSION(NativeListBox): List not scrolled to preselected option
        <rdar://problem/4957463>
        
        Initiate scroll when selected <option> is added to <select>.

        * html/HTMLOptionElement.cpp:
        (WebCore::HTMLOptionElement::insertedIntoDocument):
        * html/HTMLOptionElement.h:
        * html/HTMLSelectElement.cpp:
        (WebCore::HTMLSelectElement::notifyOptionSelected):
        (WebCore::HTMLSelectElement::updateListBoxSelection):
        (WebCore::HTMLSelectElement::scrollToSelection):
        * html/HTMLSelectElement.h:

2007-02-22  Zack Rusin  <zrusin@trolltech.com>

        Reviewed by Lars

        Fix sites with fixed positioned backgrounds.

        * platform/qt/ScrollViewQt.cpp:
        (WebCore::ScrollView::setStaticBackground):

2007-02-22  Zack Rusin  <zrusin@trolltech.com>

        Reviewed by Lars

        Properly implement canvas/scrollview's. Get
        rid of ScrollViewCanvas and replace it with
        a tailor abstractscrollview (now in qwebframe).
        Scrolling of pages is finally completely smooth.

        * WebCore.pro:
        * platform/ScrollView.h:
        * platform/qt/ScrollViewCanvasQt.cpp: Removed.
        * platform/qt/ScrollViewCanvasQt.h: Removed.
        * platform/qt/ScrollViewQt.cpp:
        (WebCore::ScrollView::ScrollView):
        (WebCore::ScrollView::setScrollArea):
        (WebCore::ScrollView::updateContents):
        (WebCore::ScrollView::resizeContents):
        (WebCore::ScrollView::contentsWidth):
        (WebCore::ScrollView::contentsHeight):
        (WebCore::ScrollView::contentsToWindow):
        (WebCore::ScrollView::windowToContents):
        (WebCore::ScrollView::addChild):
        * platform/qt/WidgetQt.cpp:
        (WebCore::WidgetPrivate::canvas):
        (WebCore::WidgetPrivate::parentScroll):
        (WebCore::WidgetPrivate::setGeometry):
        (WebCore::WidgetPrivate::geometry):
        (WebCore::Widget::frameGeometry):
        (WebCore::Widget::setQWidget):
        (WebCore::Widget::setFrameGeometry):

2007-02-21  Krzysztof Kowalczyk  <kkowalczyk@gmail.com>

        Reviewed by Adam Roben.

        Improve notImplemented() macro for gdk. Rename to notImplementedGdk() to
        give it a unique name (so that it doesn't clash with notImplemented()
        for other platforms).
        Make it print a given warning only once, so that frequently called
        functions don't clutter the output.
        Don't print the warning if DISABLE_NI_WARNING env variable is set.

        * loader/gdk/FrameLoaderClientGdk.cpp:
        (WebCore::FrameLoaderClientGdk::dispatchDidReceiveAuthenticationChallenge):
        (WebCore::FrameLoaderClientGdk::dispatchDidCancelAuthenticationChallenge):
        (WebCore::FrameLoaderClientGdk::dispatchWillSendRequest):
        (WebCore::FrameLoaderClientGdk::assignIdentifierToInitialRequest):
        (WebCore::FrameLoaderClientGdk::createPlugin):
        (WebCore::FrameLoaderClientGdk::createFrame):
        (WebCore::FrameLoaderClientGdk::redirectDataToPlugin):
        (WebCore::FrameLoaderClientGdk::createJavaAppletWidget):
        (WebCore::FrameLoaderClientGdk::objectContentType):
        (WebCore::FrameLoaderClientGdk::overrideMediaType):
        (WebCore::FrameLoaderClientGdk::windowObjectCleared):
        (WebCore::FrameLoaderClientGdk::hasWebView):
        (WebCore::FrameLoaderClientGdk::hasFrameView):
        (WebCore::FrameLoaderClientGdk::frameLoadCompleted):
        (WebCore::FrameLoaderClientGdk::saveViewStateToItem):
        (WebCore::FrameLoaderClientGdk::restoreViewState):
        (WebCore::FrameLoaderClientGdk::privateBrowsingEnabled):
        (WebCore::FrameLoaderClientGdk::makeDocumentView):
        (WebCore::FrameLoaderClientGdk::makeRepresentation):
        (WebCore::FrameLoaderClientGdk::forceLayout):
        (WebCore::FrameLoaderClientGdk::forceLayoutForNonHTML):
        (WebCore::FrameLoaderClientGdk::setCopiesOnScroll):
        (WebCore::FrameLoaderClientGdk::detachedFromParent1):
        (WebCore::FrameLoaderClientGdk::detachedFromParent2):
        (WebCore::FrameLoaderClientGdk::detachedFromParent3):
        (WebCore::FrameLoaderClientGdk::detachedFromParent4):
        (WebCore::FrameLoaderClientGdk::loadedFromPageCache):
        (WebCore::FrameLoaderClientGdk::dispatchDidHandleOnloadEvents):
        (WebCore::FrameLoaderClientGdk::dispatchDidReceiveServerRedirectForProvisionalLoad):
        (WebCore::FrameLoaderClientGdk::dispatchDidCancelClientRedirect):
        (WebCore::FrameLoaderClientGdk::dispatchWillPerformClientRedirect):
        (WebCore::FrameLoaderClientGdk::dispatchDidChangeLocationWithinPage):
        (WebCore::FrameLoaderClientGdk::dispatchWillClose):
        (WebCore::FrameLoaderClientGdk::dispatchDidReceiveIcon):
        (WebCore::FrameLoaderClientGdk::dispatchDidStartProvisionalLoad):
        (WebCore::FrameLoaderClientGdk::dispatchDidReceiveTitle):
        (WebCore::FrameLoaderClientGdk::dispatchDidCommitLoad):
        (WebCore::FrameLoaderClientGdk::dispatchDidFinishDocumentLoad):
        (WebCore::FrameLoaderClientGdk::dispatchDidFirstLayout):
        (WebCore::FrameLoaderClientGdk::dispatchShow):
        (WebCore::FrameLoaderClientGdk::cancelPolicyCheck):
        (WebCore::FrameLoaderClientGdk::dispatchDidLoadMainResource):
        (WebCore::FrameLoaderClientGdk::revertToProvisionalState):
        (WebCore::FrameLoaderClientGdk::clearUnarchivingState):
        (WebCore::FrameLoaderClientGdk::willChangeTitle):
        (WebCore::FrameLoaderClientGdk::finishedLoading):
        (WebCore::FrameLoaderClientGdk::finalSetupForReplace):
        (WebCore::FrameLoaderClientGdk::setDefersLoading):
        (WebCore::FrameLoaderClientGdk::isArchiveLoadPending):
        (WebCore::FrameLoaderClientGdk::cancelPendingArchiveLoad):
        (WebCore::FrameLoaderClientGdk::clearArchivedResources):
        (WebCore::FrameLoaderClientGdk::canHandleRequest):
        (WebCore::FrameLoaderClientGdk::canShowMIMEType):
        (WebCore::FrameLoaderClientGdk::representationExistsForURLScheme):
        (WebCore::FrameLoaderClientGdk::generatedMIMETypeForURLScheme):
        (WebCore::FrameLoaderClientGdk::provisionalLoadStarted):
        (WebCore::FrameLoaderClientGdk::didFinishLoad):
        (WebCore::FrameLoaderClientGdk::prepareForDataSourceReplacement):
        (WebCore::FrameLoaderClientGdk::setTitle):
        (WebCore::FrameLoaderClientGdk::setDocumentViewFromPageCache):
        (WebCore::FrameLoaderClientGdk::dispatchDidReceiveContentLength):
        (WebCore::FrameLoaderClientGdk::dispatchDidFinishLoading):
        (WebCore::FrameLoaderClientGdk::dispatchDidFailLoading):
        (WebCore::FrameLoaderClientGdk::dispatchDidLoadResourceFromMemoryCache):
        (WebCore::FrameLoaderClientGdk::dispatchDidFailProvisionalLoad):
        (WebCore::FrameLoaderClientGdk::dispatchDidFailLoad):
        (WebCore::FrameLoaderClientGdk::download):
        (WebCore::FrameLoaderClientGdk::cancelledError):
        (WebCore::FrameLoaderClientGdk::cannotShowURLError):
        (WebCore::FrameLoaderClientGdk::interruptForPolicyChangeError):
        (WebCore::FrameLoaderClientGdk::cannotShowMIMETypeError):
        (WebCore::FrameLoaderClientGdk::fileDoesNotExistError):
        (WebCore::FrameLoaderClientGdk::shouldFallBack):
        (WebCore::FrameLoaderClientGdk::willUseArchive):
        (WebCore::FrameLoaderClientGdk::saveDocumentViewToPageCache):
        (WebCore::FrameLoaderClientGdk::canCachePage):
        (WebCore::FrameLoaderClientGdk::dispatchCreatePage):
        (WebCore::FrameLoaderClientGdk::dispatchUnableToImplementPolicy):
        (WebCore::FrameLoaderClientGdk::setMainDocumentError):
        (WebCore::FrameLoaderClientGdk::startDownload):
        (WebCore::FrameLoaderClientGdk::updateGlobalHistoryForStandardLoad):
        (WebCore::FrameLoaderClientGdk::updateGlobalHistoryForReload):
        (WebCore::FrameLoaderClientGdk::shouldGoToHistoryItem):
        * page/gdk/EventHandlerGdk.cpp:
        (WebCore::EventHandler::passMouseDownEventToWidget):
        (WebCore::EventHandler::eventActivatedView):
        (WebCore::EventHandler::passSubframeEventToSubframe):
        (WebCore::EventHandler::passWheelEventToWidget):
        (WebCore::EventHandler::createDraggingClipboard):
        * platform/gdk/EditorClientGdk.cpp:
        (WebCore::EditorClientGdk::shouldDeleteRange):
        (WebCore::EditorClientGdk::isContinuousSpellCheckingEnabled):
        (WebCore::EditorClientGdk::isGrammarCheckingEnabled):
        (WebCore::EditorClientGdk::spellCheckerDocumentTag):
        (WebCore::EditorClientGdk::shouldBeginEditing):
        (WebCore::EditorClientGdk::shouldEndEditing):
        (WebCore::EditorClientGdk::shouldInsertText):
        (WebCore::EditorClientGdk::shouldChangeSelectedRange):
        (WebCore::EditorClientGdk::shouldApplyStyle):
        (WebCore::EditorClientGdk::didBeginEditing):
        (WebCore::EditorClientGdk::respondToChangedContents):
        (WebCore::EditorClientGdk::didEndEditing):
        (WebCore::EditorClientGdk::didWriteSelectionToPasteboard):
        (WebCore::EditorClientGdk::didSetSelectionTypesForPasteboard):
        (WebCore::EditorClientGdk::selectWordBeforeMenuEvent):
        (WebCore::EditorClientGdk::isEditable):
        (WebCore::EditorClientGdk::registerCommandForUndo):
        (WebCore::EditorClientGdk::registerCommandForRedo):
        (WebCore::EditorClientGdk::clearUndoRedoOperations):
        (WebCore::EditorClientGdk::canUndo):
        (WebCore::EditorClientGdk::canRedo):
        (WebCore::EditorClientGdk::undo):
        (WebCore::EditorClientGdk::redo):
        (WebCore::EditorClientGdk::shouldInsertNode):
        (WebCore::EditorClientGdk::pageDestroyed):
        (WebCore::EditorClientGdk::smartInsertDeleteEnabled):
        (WebCore::EditorClientGdk::toggleContinuousSpellChecking):
        (WebCore::EditorClientGdk::textFieldDidBeginEditing):
        (WebCore::EditorClientGdk::textFieldDidEndEditing):
        (WebCore::EditorClientGdk::textDidChangeInTextField):
        (WebCore::EditorClientGdk::doTextFieldCommandFromEvent):
        (WebCore::EditorClientGdk::textWillBeDeletedInTextField):
        (WebCore::EditorClientGdk::textDidChangeInTextArea):
        * platform/gdk/RenderThemeGdk.cpp:
        (WebCore::RenderThemeGdk::setCheckboxSize):
        (WebCore::RenderThemeGdk::setRadioSize):
        (WebCore::RenderThemeGdk::adjustTextFieldStyle):
        * platform/gdk/TemporaryLinkStubs.cpp:
        (FrameView::updateBorder):
        (Widget::setEnabled):
        (Widget::isEnabled):
        (Widget::focusPolicy):
        (Widget::enableFlushDrawing):
        (Widget::disableFlushDrawing):
        (Widget::lockDrawingFocus):
        (Widget::unlockDrawingFocus):
        (Widget::removeFromParent):
        (Widget::paint):
        (Widget::setIsSelected):
        (Widget::invalidate):
        (Widget::invalidateRect):
        (PlatformMouseEvent::PlatformMouseEvent):
        (WebCore::findNextSentenceFromIndex):
        (WebCore::findSentenceBoundary):
        (WebCore::findNextWordFromIndex):
        (ChromeClientGdk::chromeDestroyed):
        (ChromeClientGdk::windowRect):
        (ChromeClientGdk::setWindowRect):
        (ChromeClientGdk::pageRect):
        (ChromeClientGdk::scaleFactor):
        (ChromeClientGdk::focus):
        (ChromeClientGdk::unfocus):
        (ChromeClientGdk::createWindow):
        (ChromeClientGdk::createModalDialog):
        (ChromeClientGdk::show):
        (ChromeClientGdk::canRunModal):
        (ChromeClientGdk::runModal):
        (ChromeClientGdk::setToolbarsVisible):
        (ChromeClientGdk::toolbarsVisible):
        (ChromeClientGdk::setStatusbarVisible):
        (ChromeClientGdk::statusbarVisible):
        (ChromeClientGdk::setScrollbarsVisible):
        (ChromeClientGdk::scrollbarsVisible):
        (ChromeClientGdk::setMenubarVisible):
        (ChromeClientGdk::menubarVisible):
        (ChromeClientGdk::setResizable):
        (ChromeClientGdk::closeWindowSoon):
        (ChromeClientGdk::canTakeFocus):
        (ChromeClientGdk::takeFocus):
        (ChromeClientGdk::canRunBeforeUnloadConfirmPanel):
        (ChromeClientGdk::addMessageToConsole):
        (ChromeClientGdk::runBeforeUnloadConfirmPanel):
        (ChromeClientGdk::runJavaScriptAlert):
        (ChromeClientGdk::runJavaScriptConfirm):
        (ChromeClientGdk::runJavaScriptPrompt):
        (ChromeClientGdk::setStatusbarText):
        (ChromeClientGdk::shouldInterruptJavaScript):
        (ChromeClientGdk::tabsToLinks):
        (ChromeClientGdk::windowResizerRect):
        (ChromeClientGdk::addToDirtyRegion):
        (ChromeClientGdk::scrollBackingStore):
        (ChromeClientGdk::updateBackingStore):
        (PlugInInfoStore::createPluginInfoForPluginAtIndex):
        (PlugInInfoStore::pluginCount):
        (WebCore::PlugInInfoStore::supportsMIMEType):
        (WebCore::refreshPlugins):
        (SearchPopupMenu::saveRecentSearches):
        (SearchPopupMenu::loadRecentSearches):
        (SearchPopupMenu::SearchPopupMenu):
        (PlatformScrollbar::PlatformScrollbar):
        (PlatformScrollbar::~PlatformScrollbar):
        (PlatformScrollbar::setEnabled):
        (PlatformScrollbar::paint):
        (PlatformScrollbar::updateThumbPosition):
        (PlatformScrollbar::updateThumbProportion):
        (PlatformScrollbar::setRect):
        (FileChooser::FileChooser):
        (FileChooser::~FileChooser):
        (FileChooser::openFileChooser):
        (FileChooser::basenameForWidth):
        (ResourceHandle::willLoadFromCache):
        (ResourceHandle::loadsBlocked):
        (ResourceHandle::loadResourceSynchronously):
        (Icon::Icon):
        (Icon::~Icon):
        (Icon::newIconForFile):
        (Icon::paint):
        (Font::drawComplexText):
        (Font::floatWidthForComplexText):
        (Font::offsetForPositionForComplexText):
        (PageCache::close):
        (Editor::ignoreSpelling):
        (Editor::learnSpelling):
        (Editor::isSelectionUngrammatical):
        (Editor::isSelectionMisspelled):
        (Editor::guessesForMisspelledSelection):
        (Editor::guessesForUngrammaticalSelection):
        (Editor::markMisspellingsAfterTypingToPosition):
        (Editor::newGeneralClipboard):
        (Pasteboard::generalPasteboard):
        (Pasteboard::writeSelection):
        (Pasteboard::writeURL):
        (Pasteboard::writeImage):
        (Pasteboard::clear):
        (Pasteboard::canSmartReplace):
        (Pasteboard::documentFragment):
        (Pasteboard::plainText):
        (Pasteboard::Pasteboard):
        (Pasteboard::~Pasteboard):
        (ContextMenu::ContextMenu):
        (ContextMenu::~ContextMenu):
        (ContextMenu::appendItem):
        (ContextMenuItem::ContextMenuItem):
        (ContextMenuItem::~ContextMenuItem):
        (ContextMenuItem::releasePlatformDescription):
        (ContextMenuItem::type):
        (ContextMenuItem::setType):
        (ContextMenuItem::action):
        (ContextMenuItem::setAction):
        (ContextMenuItem::title):
        (ContextMenuItem::setTitle):
        (ContextMenuItem::platformSubMenu):
        (ContextMenuItem::setSubMenu):
        (ContextMenuItem::setChecked):
        (ContextMenuItem::setEnabled):
        (WebCore::supportedKeySizes):
        (WebCore::systemBeep):
        (WebCore::userIdleTime):

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

        Reviewed by Hyatt.

        - fix http://bugs.webkit.org/show_bug.cgi?id=12820
        REGRESSION (r19706): Caret not painted after popup, failing editing/pasteboard/4641033

        Yet another attempt to figure out exactly who should paint the caret.

        * editing/SelectionController.cpp:
        (WebCore::SelectionController::isInsideNode):
        * editing/SelectionController.h:
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::paintCaret):

2007-02-21  Mitz Pettel  <mitz@webkit.org>

        Reviewed by Hyatt.

        - fix http://bugs.webkit.org/show_bug.cgi?id=12818
          REGRESSION (r19148): shacknews.com does not render completely

        Test: fast/dynamic/staticY-marking-parents-regression.html

        Changed calls to setChildNeedsLayout(true) during layout to
        setChildNeedsLayout(true, false). Prior to r19148, the default behavior
        of marking containers did not matter because the caller was the container
        and was already marked, but r19148 added marking of the parent of
        objects with static Y, which can be different from the caller and not
        necessarily marked already.

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::collapseMargins):
        (WebCore::RenderBlock::clearFloatsIfNeeded):
        (WebCore::RenderBlock::layoutBlockChildren):
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::setStaticY):
        * rendering/RenderFlexibleBox.cpp:
        (WebCore::RenderFlexibleBox::layoutVerticalBox):

2007-02-21  Brady Eidson  <beidson@apple.com>

        Reviewed by Dave Harrison

        <rdar://problem/5014313> - Crash in FrameLoader::restoreScrollPositionAndViewState() 
        after regaining network connection

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::restoreScrollPositionAndViewState):  Leave an assertion for debug
        build exploration, but gracefully handle the release build case

2007-02-21  Timothy Hatcher  <timothy@apple.com>

        Rubber-stamped by Darin.

        * bindings/objc/PublicDOMInterfaces.h: Add missing classes that are really public.
        Also adds the deprecated selector for getComputedStyle: on DOMDocument.

2007-02-21  Justin Garcia  <justin.garcia@apple.com>

        Reviewed by john
        
        <rdar://problem/5012665>
        Removing indent from list moves the caret to the line below

        Selection preservation during indent, outdent and list 
        operations uses rangeFromLocationAndLength.  Ranges returned 
        by rangeFromLocationAndLength were incorrect for locations 
        just before the line breaks that are emitted after blocks.  
        This is because TextIterator emitted bad ranges for these line 
        breaks (ranges that started and ended *after* the block).  
        The fix corrects the start but not the end.  This is acceptible 
        because there is code in rangeFromLocationAndLength that corrects 
        the ends of runs using the start of the run and VisiblePosition 
        creation.
        
        * editing/TextIterator.cpp:
        (WebCore::TextIterator::exitNode): Emit a position *inside* 
        the block, after its contents.

2007-02-21  Adele Peterson  <adele@apple.com>

        Reviewed by Darin.

        Fix for <rdar://problem/4999030> Indexing into select element to get to items in the options collection is broken

        Test: fast/forms/select-index-setter.html

        Added indexSetter for HTMLSelectElement.

        * WebCore.xcodeproj/project.pbxproj: Added JSHTMLSelectElementCustom.h

        * bindings/js/JSHTMLOptionsCollectionCustom.cpp: (WebCore::JSHTMLOptionsCollection::indexSetter):
          Moved code to selectIndexSetter so it can be shared between these classes.
        * bindings/js/JSHTMLSelectElementCustom.cpp:
        (WebCore::selectIndexSetter): Added.  Moved from JSHTMLOptionsCollection::indexSetter.
        (WebCore::JSHTMLSelectElement::indexSetter): Calls selectIndexSetter.
        * bindings/js/JSHTMLSelectElementCustom.h: Added.
        * html/HTMLSelectElement.idl: Added HasCustomIndexSetter keyword.

        * bindings/scripts/CodeGeneratorJS.pm: When generating "put" methods, if the propertyName is a number, call the indexSetter first,
          and then call the version of lookupPut that will also try to use the parent's lookup table.  This matches the order of our
          old code, before we autogenerated the JSHTMLSelectElement class.

2007-02-21  George Staikos  <staikos@kde.org>

        Reviewed by Zack.

        Add files to the build.

        * WebCore.pro:

2007-02-21  Zack Rusin  <zrusin@trolltech.com>

        Reviewed by Lars

        Implementing popups for the Qt platform.

        * WebCore.pro:
        * platform/PopupMenu.h:
        * platform/Widget.h:
        * platform/qt/PopupMenuQt.cpp:
        (WebCore::PopupMenu::PopupMenu):
        (WebCore::PopupMenu::clear):
        (WebCore::PopupMenu::populate):
        (WebCore::PopupMenu::show):
        (WebCore::PopupMenu::hide):
        * platform/qt/QWebPopup.cpp: Added.
        (WebCore::QWebPopup::QWebPopup):
        (WebCore::QWebPopup::exec):
        (WebCore::QWebPopup::hideEvent):
        (WebCore::QWebPopup::activeChanged):
        * platform/qt/QWebPopup.h: Added.
        * platform/qt/WidgetQt.cpp:
        (WebCore::Widget::canvas):

2007-02-21  George Staikos  <staikos@kde.org>

        Reviewed by Zack.

        Remove unneeded hack now.

        * platform/qt/RenderThemeQt.cpp:
        (WebCore::RenderThemeQt::setCheckboxSize):

2007-02-21  Zack Rusin  <zrusin@trolltech.com>

        Reviewed by Lars

        Fix rendering of lineedits and remove the spurious
        padding on push-buttons.

        * platform/qt/RenderThemeQt.cpp:
        (WebCore::RenderThemeQt::baselinePosition):
        (WebCore::RenderThemeQt::adjustTextFieldStyle):
        (WebCore::RenderThemeQt::sizeForFont):
        (WebCore::RenderThemeQt::setButtonPadding):

2007-02-21  Zack Rusin  <zrusin@trolltech.com>

        Fix compilation.

        * platform/qt/PasteboardQt.cpp:
        (WebCore::Pasteboard::writeURL):
        (WebCore::Pasteboard::writeImage):

2007-02-20  Adam Roben  <aroben@apple.com>

        Preemptive build fix.

        * platform/mac/FontCacheMac.mm: Remove unused (and non-existent) header.

2007-02-20  Adam Roben  <aroben@apple.com>

        Fix the build the right way.

        * platform/StringTruncator.cpp:
        (WebCore::truncateString): Keep all widths as floats.

2007-02-20  Beth Dakin  <bdakin@apple.com>

        Reviewed by Maciej.

        Implement writeImage() on Pasteboard so that the context menus can 
        call into the editor for the "Copy image" command instead of 
        calling across the clients.

        * WebCore.exp:
        * WebCore.xcodeproj/project.pbxproj:
        * editing/Editor.cpp:
        (WebCore::Editor::copyImage): Call into the Pasteboard.
        * editing/Editor.h:
        * loader/mac/LoaderNSURLExtras.h: A new NSURL extra needed inside 
        WebCore.
        * loader/mac/LoaderNSURLExtras.m: Made this file Objective-C++ 
        (from Objective-C) since the call into the MIMETypeRegistry will 
        return a Vector.
        (urlByRemovingComponent): Cast to build as Obj-C++
        (urlWithDataRelativeToURL): Same.
        (vectorContainsString): Helper.
        (suggestedFilenameWithMIMEType): New function.
        * page/ContextMenuClient.h: Remove copyImageToClipboard()
        * page/ContextMenuController.cpp:
        (WebCore::ContextMenuController::contextMenuItemSelected): Call 
        into the editor instead of the client.
        * page/mac/WebCoreViewFactory.h: New localized String.
        * platform/LocalizedStrings.h: Same.
        * platform/MimeTypeRegistry.h: Expose two additional functions for 
        MIMEType information from WebCore System Interface.
        * platform/Pasteboard.h:
        * platform/SharedBuffer.h: Make platformData() and platformDataSize
        () public since they are needed to write the image to the 
        pasteboard.
        * platform/mac/LocalizedStringsMac.mm: New localized string.
        (WebCore::copyImageUnknownFileLabel):
        * platform/mac/MimeTypeRegistryMac.mm:
        (WebCore::MimeTypeRegistry::getExtensionsForMIMEType):
        (WebCore::MimeTypeRegistry::getPreferredExtensionForMIMEType):
        * platform/mac/PasteboardMac.mm:
        (WebCore::writableTypesForImage):
        (WebCore::Pasteboard::writeURL): Write the correct types if the url 
        is for an image.
        (WebCore::fileWrapperForImage):
        (WebCore::Pasteboard::writeFileWrapperAsRTFDAttachment):
        (WebCore::Pasteboard::writeImage):
        * platform/mac/WebCoreNSStringExtras.h: Added. Some the the 
        NSStringExtras that were in WebKit are now needed by WebCore. To 
        avoid having two copies of these functions, I just moved the 
        implementations to WebCore. The WebKit functions just call into 
        WebCore.
        * platform/mac/WebCoreNSStringExtras.mm: Added.
        (hasCaseInsensitiveSuffix):
        (hasCaseInsensitiveSubstring):
        (filenameByFixingIllegalCharacters):
        * platform/mac/WebCoreSystemInterface.h: 
        wkGetPreferredExtensionForMIMEType and wkGetExtensionsForMIMEType 
        are now needed in WebCore as well as WebKit.
        * platform/mac/WebCoreSystemInterface.mm:

2007-02-20  Adam Roben  <aroben@apple.com>

        Build fix.

        * platform/StringTruncator.cpp:
        (WebCore::truncateString): Added explicit casts.

2007-02-20  Adam Roben  <aroben@apple.com>

        Reviewed by Darin and Anders.

        Fix <rdar://problem/4736215> Make WebCoreStringTruncator use WebCore types

        * WebCore.exp: Updated symbols.
        * WebCore.xcodeproj/project.pbxproj: Updated file names.
        * bridge/mac/WebCoreStringTruncator.h: Removed.
        * bridge/mac/WebCoreStringTruncator.mm: Removed.
        * platform/StringTruncator.cpp: Added. Moved from bridge/mac/WebCoreStringTruncator.mm.
        (WebCore::textBreakAtOrPreceding): Added.
        (WebCore::boundedTextBreakFollowing): Added.
        (WebCore::centerTruncateToBuffer):
        (WebCore::rightTruncateToBuffer):
        (WebCore::stringWidth): Now takes a const Font& instead of a Font*.
        (WebCore::truncateString):
        (WebCore::StringTruncator::centerTruncate):
        (WebCore::StringTruncator::rightTruncate):
        (WebCore::StringTruncator::width):
        * platform/StringTruncator.h: Added.
        * platform/TextBreakIterator.h: Added isTextBreak declaration.
        * platform/TextBreakIteratorICU.cpp:
        (WebCore::isTextBreak): Implemented.
        * platform/mac/FileChooserMac.mm:
        (WebCore::FileChooser::basenameForWidth): Updated for changes to WebCoreStringTruncator.
        * platform/qt/TextBreakIteratorQt.cpp:
        (WebCore::isTextBreak): Stubbed out.

2007-02-20  Justin Garcia  <justin.garcia@apple.com>

        Reviewed by harrison

        <rdar://problem/5006779>
        REGRESSION: Paste and Match Style of quoted text onto empty line yields quoted text
        
        We decided to change the copy/paste behavior in both
        the Paste and the Paste and Match Style cases.

        * editing/markup.cpp:
        (WebCore::createMarkup): Don't add mail blockquote wrappers
        unless the user selected one or more paragraphs.

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

        Reviewed by Mark Rowe.

        <rdar://problem/4912899> WebCore project ObjC @property cleanup

        * bindings/objc/DOMObject.h: Add the new style @property
        * bindings/objc/PublicDOMInterfaces.h: Update to the new style @property
        * bindings/scripts/CodeGeneratorObjC.pm: Export both new and old style @properties

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

        Reviewed by Sam Weinig.

        <rdar://problem/5007248> need to export symbols for DOM exception constants

        * WebCore.exp: Adds DOMEventException, DOMException, DOMRangeException, DOMXPathException

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

        Reviewed by Darin.

        <rdar://problem/4900579> WebKit -finalize methods are not thread-safe; design change needed

        Call WebCoreObjCFinalizeOnMainThread from the initialize method of all the classes
        that have a finalizer that needs called on the main thread.

        * WebCore.exp:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/objc/WebScriptObject.mm:
        (+[WebScriptObject initialize]):
        * bridge/mac/WebCoreScriptDebugger.mm:
        (+[WebCoreScriptDebugger initialize]):
        * platform/mac/SharedBufferMac.mm:
        (+[SharedBufferData initialize]):
        * platform/mac/WebCoreObjCExtras.c: Added.
        (WebCoreObjCFinalizeOnMainThread):
        * platform/mac/WebCoreObjCExtras.h: Added.

2007-02-20  Geoffrey Garen  <ggaren@apple.com>

        Not not reviewed by Mitz Pettel.

        Fixed http://bugs.webkit.org/show_bug.cgi?id=12827 | <rdar://problem/5006671> 
        REGRESSION: -[DOMCSSStyleDeclaration setValue:forKey:] doesn't have an 
        immediate effect
        
        Let's just pretend this never happened.
        
        I attempted a layout test but I couldn't get the old code to fail because 
        there's no obvious way to isolate the ObjC bindings in a test that's 
        controlled by JS.
        
        * bindings/objc/WebScriptObject.mm:
        (_didExecute):

2007-02-20  Krzysztof Kowalczyk  <kkowalczyk@gmail.com>

        Reviewed by Maciej S.

        Gdk build fixes for recent refactorings.

        * Projects/gdk/webcore-gdk.bkl:
        * WebCoreSources.bkl:
        * page/gdk/DragControllerGdk.cpp:
        (WebCore::DragController::dragOperation):
        (WebCore::DragController::maxDragImageSize):
        * page/gdk/EventHandlerGdk.cpp:
        (WebCore::EventHandler::createDraggingClipboard):
        * platform/DragImage.h:
        * platform/gdk/ChromeClientGdk.h:
        * platform/gdk/CursorGdk.cpp:
        (WebCore::verticalTextCursor):
        (WebCore::cellCursor):
        (WebCore::contextMenuCursor):
        (WebCore::noDropCursor):
        (WebCore::copyCursor):
        (WebCore::progressCursor):
        (WebCore::aliasCursor):
        (WebCore::noneCursor):
        (WebCore::notAllowedCursor):
        * platform/gdk/EditorClientGdk.cpp:
        (WebCore::EditorClientGdk::shouldChangeSelectedRange):
        (WebCore::EditorClientGdk::isEditable):
        (WebCore::EditorClientGdk::textFieldDidBeginEditing):
        (WebCore::EditorClientGdk::textFieldDidEndEditing):
        (WebCore::EditorClientGdk::textDidChangeInTextField):
        (WebCore::EditorClientGdk::doTextFieldCommandFromEvent):
        (WebCore::EditorClientGdk::textWillBeDeletedInTextField):
        (WebCore::EditorClientGdk::textDidChangeInTextArea):
        * platform/gdk/EditorClientGdk.h:
        * platform/gdk/FrameGdk.cpp:
        (WebCore::Frame::print):
        (WebCore::Frame::issueTransposeCommand):
        (WebCore::Frame::respondToChangedSelection):
        (WebCore::Frame::cleanupPlatformScriptObjects):
        (WebCore::Frame::isCharacterSmartReplaceExempt):
        (WebCore::Frame::dragImageForSelection):
        * platform/gdk/FrameGdk.h:
        * platform/gdk/MimeTypeRegistryGdk.cpp: Added.
        * platform/gdk/TemporaryLinkStubs.cpp:
        (ChromeClientGdk::tabsToLinks):
        (ChromeClientGdk::windowResizerRect):
        (ChromeClientGdk::addToDirtyRegion):
        (ChromeClientGdk::scrollBackingStore):
        (ChromeClientGdk::updateBackingStore):
        * webcore-base.bkl:

2007-02-20  Krzysztof Kowalczyk  <kkowalczyk@gmail.com>

        Reviewed by Darin.

        Allow over-writting Product, ProductSub, Vendor and VendorSub
        js properties via #define WEBCORE_NAVIGATOR_*

        * bindings/js/kjs_navigator.cpp:
        (KJS::Navigator::getValueProperty):

2007-02-20  Darin Adler  <darin@apple.com>

        Reviewed by Anders.

        - prepare to fix some "stop loading" bugs by moving state from the
          FrameLoader class to the DocumentLoader class

        * WebCore.exp: Update since cancelMainResourceLoad is now on the document loader.

        * html/HTMLDocument.h:
        * html/HTMLDocument.cpp:
        (WebCore::HTMLDocument::HTMLDocument): Removed unused bodyElement and htmlElement
        data members.
        (WebCore::HTMLDocument::lastModified): Call getResponseModifiedHeader directly on
        the document loader.

        * loader/DocumentLoader.h: Moved m_mainResourceLoader, m_subresourceLoaders, and
        m_plugInStreamLoaders here.
        * loader/DocumentLoader.cpp:
        (WebCore::cancelAll): Moved here from FrameLoader.
        (WebCore::setAllDefersLoading): Ditto.
        (WebCore::DocumentLoader::mainResourceData): Moved the body of FrameLoader's
        mainResourceData function here.
        (WebCore::DocumentLoader::stopLoading): Replaced calls to hasMainResourceLoader
        and cancelMainResourceLoad with code that works directly on m_mainResourceLoader.
        Call the stop functions moved from FrameLoader here on ourselves.
        (WebCore::DocumentLoader::setupForReplaceByMIMEType): Ditto.
        (WebCore::DocumentLoader::setPrimaryLoadComplete): Moved the code to store the
        main resource data here; it doesn't require separate functions.
        (WebCore::DocumentLoader::isLoadingInAPISense): Removed call to isLoadingSubresources
        and instead just check if the m_subresourceLoaders set is empty.
        (WebCore::DocumentLoader::setDefersLoading): Moved code here from FrameLoader.
        (WebCore::DocumentLoader::stopLoadingPlugIns): Ditto.
        (WebCore::DocumentLoader::stopLoadingSubresources): Ditto.
        (WebCore::DocumentLoader::addSubresourceLoader): Ditto.
        (WebCore::DocumentLoader::removeSubresourceLoader): Ditto.
        (WebCore::DocumentLoader::addPlugInStreamLoader): Ditto.
        (WebCore::DocumentLoader::removePlugInStreamLoader): Ditto.
        (WebCore::DocumentLoader::isLoadingSubresources): Ditto.
        (WebCore::DocumentLoader::isLoadingPlugIns): Ditto.
        (WebCore::DocumentLoader::startLoadingMainResource): Ditto.
        (WebCore::DocumentLoader::cancelMainResourceLoad): Ditto.

        * loader/FrameLoader.h: Removed stopLoadingPlugIns, stopLoadingSubresources,
        cancelMainResourceLoad, hasMainResourceLoader, isLoadingSubresources,
        mainResourceData, releaseMainResourceLoader, lastModified, startLoadingMainResource,
        isLoadingPlugIns, m_mainResourceLoader, m_subresourceLoaders, m_plugInStreamLoaders,
        m_responseRefreshHeader, and m_responseModifiedHeader.
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::setDefersLoading): Call setDefersLoading on all the document
        loaders.
        (WebCore::FrameLoader::stopLoading): Get rid of code to set m_responseRefreshHeader
        and m_responseModifiedHeader.
        (WebCore::FrameLoader::receivedFirstData): Call httpHeaderField on the response
        here to get the Refresh, instead of storing it in a data member.
        (WebCore::FrameLoader::addPlugInStreamLoader): Change to just call this on the
        document loader.
        (WebCore::FrameLoader::removePlugInStreamLoader): Ditto.
        (WebCore::FrameLoader::isLoading): Change to call isLoadingSubresources and
        isLoadingPlugIns on the document loader.
        (WebCore::FrameLoader::addSubresourceLoader): Change to just call this on the
        document loader.
        (WebCore::FrameLoader::removeSubresourceLoader): Ditto.
        (WebCore::FrameLoader::commitProvisionalLoad): Call stopLoadingSubresources and
        stopLoadingPlugIns on the document loader. Removed code to set
        m_responseModifiedHeader.
        (WebCore::FrameLoader::startLoading): Call isLoadingMainResource and
        startLoadingMainResource on the document loader.

        * loader/ImageDocument.cpp: (WebCore::ImageTokenizer::finish): Call
        mainResourceData() on the document loader instead of the frame loader.

        - other changes

        * loader/DocLoader.cpp:
        (WebCore::DocLoader::checkCacheObjectStatus): Fixed indentation.

2007-02-20  Zack Rusin  <zrusin@trolltech.com>

        Reviewed by Lars

        Fix focus handling and make the forms
        work as expected.

        * platform/qt/ScrollViewQt.cpp:
        (WebCore::ScrollView::setScrollArea):
        * platform/qt/WidgetQt.cpp:
        (WebCore::WidgetPrivate::WidgetPrivate):
        (WebCore::WidgetPrivate::canvas):
        (WebCore::Widget::hasFocus):
        (WebCore::Widget::setFocus):
        (WebCore::Widget::clearFocus):
        (WebCore::Widget::setFont):
        (WebCore::Widget::setQWidget):
        (WebCore::Widget::focusPolicy):

2007-02-20  Mitz Pettel  <mitz@webkit.org>

        Reviewed by Darin and then Sam.

        - fix http://bugs.webkit.org/show_bug.cgi?id=10735
          Clicking in SVG results causes WebKit to consume 100% CPU for several minutes

        No test since there is no change in functionality.

        * CMakeLists.txt:
        * WebCore.pro:
        * WebCore.xcodeproj/project.pbxproj: Added PositionIterator.{cpp,h}.
        * WebCoreSources.bkl:
        * dom/Position.cpp:
        (WebCore::Position::Position): Added converting constructor from
        PositionIterator.
        (WebCore::Position::previous): Changed assert() to ASSERT().
        (WebCore::Position::next): Ditto.
        (WebCore::isStreamer): Changed the argument to a PositionIterator.
        (WebCore::Position::upstream): Changed to use PositionIterator.
        (WebCore::Position::downstream): Ditto.
        (WebCore::Position::inRenderedText): Made public.
        (WebCore::Position::hasRenderedNonAnonymousDescendantsWithHeight): Changed
        into a static member function.
        (WebCore::Position::nodeIsUserSelectNone): Ditto.
        * dom/Position.h:
        * dom/PositionIterator.cpp: Added. A Position iterator with constant-time
        increment, decrement, and several predicates on the Position it is at.
        Conversion to/from Position is O(n) in the offset.
        (WebCore::PositionIterator::increment):
        (WebCore::PositionIterator::decrement):
        (WebCore::PositionIterator::atStart):
        (WebCore::PositionIterator::atEnd):
        (WebCore::PositionIterator::atStartOfNode):
        (WebCore::PositionIterator::atEndOfNode):
        (WebCore::PositionIterator::isCandidate):
        * dom/PositionIterator.h: Added.
        (WebCore::PositionIterator::PositionIterator):
        (WebCore::PositionIterator::node):
        (WebCore::PositionIterator::offsetInLeafNode):
        * editing/htmlediting.cpp:
        (WebCore::nextCandidate): Changed to use PositionIterator.
        (WebCore::previousCandidate): Changed to use PositionIterator.

2007-02-20  Rob Buis  <buis@kde.org>

        Reviewed by Darin.

        http://bugs.webkit.org/show_bug.cgi?id=12439
        SVG parser complains about points attribute in polygon and polyline element

        Return true when the parsed points specification is valid.

        * ksvg2/svg/SVGParserUtilities.cpp:
        (WebCore::parseNumber):
        (WebCore::SVGPolyParser::parsePoints):
        * ksvg2/svg/SVGPolyElement.cpp:
        (WebCore::SVGPolyElement::parseMappedAttribute):

2007-02-20  Zack Rusin  <zrusin@trolltech.com>

        Reviewed by Lars

        Make editing of forms work plus make sure that non-void methods
        always return something.

        * WebCore.pro:
        * loader/qt/DocumentLoaderQt.cpp:
        (WebCore::DocumentLoader::getResponseModifiedHeader):
        * platform/qt/ClipboardQt.cpp:
        (WebCore::ClipboardQt::setData):

2007-02-20  Zack Rusin  <zrusin@trolltech.com>

        Reviewed by Lars

        Refactor and fix the implementation of theming of
        form elements on the Qt platform.

        * platform/qt/RenderThemeQt.cpp:
        (WebCore::theme):
        (WebCore::RenderThemeQt::RenderThemeQt):
        (WebCore::RenderThemeQt::supportsHover):
        (WebCore::RenderThemeQt::supportsFocusRing):
        (WebCore::RenderThemeQt::baselinePosition):
        (WebCore::RenderThemeQt::controlSupportsTints):
        (WebCore::RenderThemeQt::supportsControlTints):
        (WebCore::RenderThemeQt::adjustRepaintRect):
        (WebCore::RenderThemeQt::paintResizeControl):
        (WebCore::RenderThemeQt::platformActiveSelectionBackgroundColor):
        (WebCore::RenderThemeQt::platformInactiveSelectionBackgroundColor):
        (WebCore::RenderThemeQt::platformActiveSelectionForegroundColor):
        (WebCore::RenderThemeQt::platformInactiveSelectionForegroundColor):
        (WebCore::RenderThemeQt::systemFont):
        (WebCore::RenderThemeQt::minimumMenuListSize):
        (WebCore::RenderThemeQt::adjustSliderThumbSize):
        (WebCore::RenderThemeQt::paintCheckbox):
        (WebCore::RenderThemeQt::paintRadio):
        (WebCore::RenderThemeQt::setRadioSize):
        (WebCore::RenderThemeQt::adjustButtonStyle):
        (WebCore::RenderThemeQt::setButtonSize):
        (WebCore::RenderThemeQt::adjustTextFieldStyle):
        (WebCore::RenderThemeQt::adjustMenuListStyle):
        (WebCore::RenderThemeQt::paintMenuList):
        (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):
        (WebCore::RenderThemeQt::supportsFocus):
        (WebCore::RenderThemeQt::getStylePainterAndWidgetFromPaintInfo):
        (WebCore::RenderThemeQt::applyTheme):
        (WebCore::RenderThemeQt::setSizeFromFont):
        (WebCore::RenderThemeQt::sizeForFont):
        (WebCore::RenderThemeQt::setButtonPadding):
        (WebCore::RenderThemeQt::setPopupPadding):
        (WebCore::RenderThemeQt::setPrimitiveSize):
        * platform/qt/RenderThemeQt.h: Added.

2007-02-19  Lars Naesbye Christensen <lars@naesbye.dk>

        Reviewed by Maciej.

        http://bugs.webkit.org/show_bug.cgi?id=12815
        Two image files not included in project file

        * WebCore.xcodeproj/project.pbxproj: Added crossHairCursor.png and
        notAllowedCursor.png.

2007-02-19  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Adam Roben.

        Fixed some leaks in RenderThemeMac.
        
        No test case because 'leaks' can't detect these leaks inside DRT, even if
        DRT forces the WebView to paint. ('leaks' can detect these leaks inside
        Safari. Weird.)
        
        * rendering/RenderThemeMac.h:
            - Renamed data members to m_*, to match our style guidelines.
            - Renamed *Is* to is**, to match our style guidelines.
            - Removed a few unnecessary data members.
            - Made cached values like m_checkbox mutable, since they can change
            inside functions that don't change the logical state of a RenderTheme
            object. (The alternative was to make some const functions non-const.)

        (WebCore::RenderThemeMac::paintMenuList): Took CFType pointers that just 
        used to leak and placed them in RetainPtrs.
        (WebCore::RenderThemeMac::paintMenuListButtonGradients): ditto

        Factored inline implementations of lazy initialization into these accessor
        functions, for better encapsulation:
        
        (WebCore::RenderThemeMac::checkbox):
        (WebCore::RenderThemeMac::radio):
        (WebCore::RenderThemeMac::button):
        (WebCore::RenderThemeMac::popupButton):
        (WebCore::RenderThemeMac::search):
        (WebCore::RenderThemeMac::sliderThumbHorizontal): The inline version of
        this initialization used to confuse the retained data member with a local
        stack value, causing both a leak and a failure to initialize. Fixed now.
        (WebCore::RenderThemeMac::sliderThumbVertical): ditto
        (WebCore::RenderThemeMac::resizeCornerImage):

2007-02-19  Mitz Pettel  <mitz@webkit.org>

        Reviewed by Hyatt.

        - fix http://bugs.webkit.org/show_bug.cgi?id=12817
          REGRESSION (r18634): Table border-collapse problems with right margin

        Test: fast/repaint/table-outer-border.html

        * rendering/RenderTable.cpp:
        (WebCore::RenderTable::layout): Reordered to initialize horizontal overflow
        after table sections have computed their outer horizontal borders.

2007-02-19  John Sullivan  <sullivan@apple.com>

        Reviewed by Darin
        
        - fixed <rdar://problem/4613701> REGRESSION: A line break in the source HTML of a link becomes visible after drag & drop

        * page/DragController.cpp:
        (WebCore::DragController::startDrag):
        Call simplifyWhiteSpace() on the proposed link title to match what's displayed on the web page, instead of using the
        raw source HTML text.

2007-02-19  David Hyatt  <hyatt@apple.com>

        Fix for Radar 4981605, regression where button grows randomly when a select is
        opened.  With the new form controls, the WinIE quirk for using line width
        ended up being used for them more.

        This patch removes the quirk after verifying that Firefox doesn't implement
        the quirk at all.  usesLineWidth is being renamed to shrinksToAvoidFloats to
        make it clear that the new method only applies to block objects that avoid floats
        and that have auto width.

        Also fixed a regression where whitespace after a floating <select> at the start
        of a block got incorrectly rendered.  Make sure skipWhitespace always skips
        through floating/positioned elements regardless of the whitespace setting (this
        way the white-space:pre value on floating <select>s doesn't cause trouble).

        Reviewed by darin

        fast/block/float/float-avoidance.html

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::collapseMargins):
        (WebCore::RenderBlock::clearFloatsIfNeeded):
        (WebCore::RenderBlock::layoutBlockChildren):
        (WebCore::RenderBlock::markAllDescendantsWithFloatsForLayout):
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::containingBlockWidth):
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::shrinkToAvoidFloats):
        * rendering/RenderObject.h:
        * rendering/bidi.cpp:
        (WebCore::RenderBlock::skipWhitespace):

2007-02-19  Zalan Bujtas  <zbujtas@gmail.com>

        Reviewed by Darin.

        Update stylesheet href, when document's baseUrl changes. It needs
        update when the stylesheet is constructed before the parser hits the base tag.
        http://bugs.webkit.org/show_bug.cgi?id=12214

        * css/StyleSheet.h:
        (WebCore::StyleSheet::setHref):
        * dom/Document.cpp:
        (WebCore::Document::setBaseURL):
        * dom/Document.h:

2007-02-19  Mitz Pettel  <mitz@webkit.org>

        Reviewed by Adam.

        - fix http://bugs.webkit.org/show_bug.cgi?id=11518
          REGRESSION (r14376): View Source not available after Back navigation from a non-HTML page

        The FrameLoader's responseMIMEType was not being updated when a page was
        brought back from the page cache.
        
        Moved the line that updates the MIME type from commitProvisionalLoad() to
        transitionToCommitted().

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::commitProvisionalLoad):
        (WebCore::FrameLoader::transitionToCommitted):

2007-02-19  Anders Carlsson  <acarlsson@apple.com>

        Reviewed by Oliver.

        Make DragController::maxDragImageSize a function to get rid of the global initializer.
        
        * page/DragController.cpp:
        (WebCore::DragController::doImageDrag):
        * page/DragController.h:
        * page/mac/DragControllerMac.mm:
        (WebCore::DragController::maxDragImageSize):
        * page/qt/DragControllerQt.cpp:
        (WebCore::DragController::maxDragImageSize):

2007-02-19  Darin Adler  <darin@apple.com>

        Reviewed by Hyatt.

        - <rdar://problem/5006414> REGRESSION: Crash occurs at WebCore::Frame::loader()
          when loading AFL Ladder widget

        * html/HTMLFrameElementBase.cpp: (WebCore::HTMLFrameElementBase::openURL):
        Add missing null check so this fails without crashing when called on an element
        that's no longer in a frame.

2007-02-19  Antti Koivisto  <antti@apple.com>

        Reviewed by Mitz.

        - fix for http://bugs.webkit.org/show_bug.cgi?id=10990
          REGRESSION: Pressing a pop-up's access key doesn't focus it
          <rdar://problem/4823138>
          
        Focus the select element too in accessKeyAction.

        * html/HTMLSelectElement.cpp:
        (WebCore::HTMLSelectElement::accessKeyAction):

2007-02-18  Antti Koivisto  <antti@apple.com>

        Reviewed by Hyatt.

        - really fix http://bugs.webkit.org/show_bug.cgi?id=11974
        REGRESSION: Caret drawn over input when smaller than font size on initial focus
        <rdar://problem/4960258>
        
        Avoid double painting caret when it is on a block element.
        
        Layout test for this already went in previous try (it only fails in pixel mode) in r19626.

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::paintCaret):

2007-02-19  Lars Knoll <lars@trolltech.com>

        Added a one line patch from Olliej to create the
        clipboard on demand (to stop things from crashing), 
        and added lots of notImplemented() warnings all 
        over the place.

        * platform/qt/ClipboardQt.cpp:
        (WebCore::ClipboardQt::ClipboardQt):
        (WebCore::ClipboardQt::clearData):
        (WebCore::ClipboardQt::clearAllData):
        (WebCore::ClipboardQt::getData):
        (WebCore::ClipboardQt::setData):
        (WebCore::ClipboardQt::types):
        (WebCore::ClipboardQt::dragLocation):
        (WebCore::ClipboardQt::dragImage):
        (WebCore::ClipboardQt::setDragImage):
        (WebCore::ClipboardQt::dragImageElement):
        (WebCore::ClipboardQt::setDragImageElement):
        (WebCore::ClipboardQt::createDragImage):
        (WebCore::ClipboardQt::declareAndWriteDragImage):
        (WebCore::ClipboardQt::writeURL):
        (WebCore::ClipboardQt::writeRange):
        (WebCore::ClipboardQt::hasData):
        * platform/qt/DragDataQt.cpp:
        (WebCore::DragData::canSmartReplace):
        (WebCore::DragData::containsColor):
        (WebCore::DragData::containsPlainText):
        (WebCore::DragData::asPlainText):
        (WebCore::DragData::asColor):
        (WebCore::DragData::createClipboard):
        (WebCore::DragData::containsCompatibleContent):
        (WebCore::DragData::containsURL):
        (WebCore::DragData::asURL):
        (WebCore::DragData::asFragment):

2007-02-19  Lars Knoll <lars@trolltech.com>

        Compile again.

        * platform/qt/ClipboardQt.cpp:
        (WebCore::ClipboardQt::types):

2007-02-17  Lars Knoll <lars@trolltech.com>

        Reviewed by Maciej.
        
        Additional coding by Maciej, additional review by Oliver.

        Get rid of the FrameMac and FrameQt classes. Instead
        move all methods into Frame directly, and implement
        some platform specific methods in foo/FrameFoo.cpp.

        Some general cleanup in Frame:
        * Move some methods out of Frame, to the place where they 
        belong.
        * Unify the different ways of creating the JavaScript wrappers
        for <object>, <embed> and <applet>
        * Some cleanup of the WebCoreFrameBridge

        * ForwardingHeaders/bindings/NP_jsobject.h: Added.
        * ForwardingHeaders/bindings/npruntime_impl.h: Added.
        * ForwardingHeaders/bindings/runtime_root.h: Added.
        * WebCore.exp:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/kjs_binding.cpp:
        (KJS::ScriptInterpreter::shouldInterruptScript):
        * bindings/objc/DOM.mm:
        (-[DOMNode KJS::Bindings::]):
        * bindings/objc/DOMInternal.mm:
        (-[WebScriptObject _initializeScriptDOMNodeImp]):
        * bridge/EditorClient.h:
        * bridge/mac/FrameViewMac.mm:
        (WebCore::FrameView::updateBorder):
        (WebCore::FrameView::updateDashboardRegions):
        * bridge/mac/WebCoreAXObject.mm:
        (-[WebCoreAXObject rendererForView:]):
        * dom/Position.cpp:
        (WebCore::Position::next):
        * editing/CommandByName.cpp:
        (WebCore::Frame::execCopy):
        (WebCore::Frame::execCut):
        (WebCore::Frame::execPaste):
        * editing/Editor.cpp:
        (WebCore::Editor::canEdit):
        (WebCore::Editor::pasteWithPasteboard):
        (WebCore::Editor::paste):
        (WebCore::Editor::pasteAsPlainText):
        * editing/Editor.h:
        * editing/JSEditor.cpp:
        * html/HTMLAppletElement.cpp:
        (WebCore::HTMLAppletElement::getInstance):
        * html/HTMLEmbedElement.cpp:
        (WebCore::HTMLEmbedElement::getInstance):
        * html/HTMLFormElement.cpp:
        (WebCore::HTMLFormElement::formData):
        * html/HTMLObjectElement.cpp:
        (WebCore::HTMLObjectElement::getInstance):
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::clear):
        (WebCore::FrameLoader::detachFromParent):
        * loader/mac/ImageDocumentMac.mm:
        (WebCore::finishImageLoad):
        * loader/qt/DocumentLoaderQt.cpp:
        * page/Chrome.cpp:
        (WebCore::Chrome::shouldInterruptJavaScript):
        * page/Chrome.h:
        * page/ChromeClient.h:
        * page/Frame.cpp:
        (WebCore::Frame::~Frame):
        (WebCore::Frame::markedTextRange):
        (WebCore::Frame::shouldChangeSelection):
        (WebCore::Frame::shouldDeleteSelection):
        (WebCore::Frame::isContentEditable):
        (WebCore::Frame::setSecureKeyboardEntry):
        (WebCore::Frame::isSecureKeyboardEntry):
        (WebCore::Frame::bindingRootObject):
        (WebCore::Frame::createRootObject):
        (WebCore::Frame::windowScriptNPObject):
        (WebCore::Frame::cleanupScriptObjects):
        (WebCore::FramePrivate::FramePrivate):
        * page/Frame.h:
        * page/FramePrivate.h:
        * page/FrameView.h:
        * page/mac/EventHandlerMac.mm:
        (WebCore::EventHandler::tabsToLinks):
        (WebCore::EventHandler::tabsToAllControls):
        (WebCore::EventHandler::focusDocumentView):
        (WebCore::EventHandler::passMouseDownEventToWidget):
        (WebCore::EventHandler::handleDrag):
        (WebCore::EventHandler::sendFakeEventsAfterWidgetTracking):
        (WebCore::EventHandler::keyboardUIMode):
        * page/mac/FrameMac.h: Removed.
        * page/mac/FrameMac.mm:
        (WebCore::Frame::setBridge):
        (WebCore::Frame::bridge):
        (WebCore::Frame::searchForLabelsAboveCell):
        (WebCore::Frame::searchForLabelsBeforeElement):
        (WebCore::Frame::matchLabelsAgainstElement):
        (WebCore::Frame::focusWindow):
        (WebCore::Frame::unfocusWindow):
        (WebCore::Frame::imageFromRect):
        (WebCore::Frame::selectionImage):
        (WebCore::Frame::snapshotDragImage):
        (WebCore::Frame::fontAttributesForSelectionStart):
        (WebCore::Frame::baseWritingDirectionForSelectionStart):
        (WebCore::Frame::print):
        (WebCore::Frame::issuePasteCommand):
        (WebCore::Frame::issueTransposeCommand):
        (WebCore::Frame::respondToChangedSelection):
        (WebCore::Frame::textFieldDidBeginEditing):
        (WebCore::Frame::textFieldDidEndEditing):
        (WebCore::Frame::textDidChangeInTextField):
        (WebCore::Frame::textDidChangeInTextArea):
        (WebCore::Frame::doTextFieldCommandFromEvent):
        (WebCore::Frame::textWillBeDeletedInTextField):
        (WebCore::Frame::setSecureKeyboardEntry):
        (WebCore::Frame::isSecureKeyboardEntry):
        (WebCore::Frame::setMarkedTextRange):
        (WebCore::Frame::dashboardRegionsDictionary):
        (WebCore::Frame::dashboardRegionsChanged):
        (WebCore::Frame::willPopupMenu):
        (WebCore::Frame::isCharacterSmartReplaceExempt):
        (WebCore::Frame::setNeedsReapplyStyles):
        (WebCore::Frame::customHighlightLineRect):
        (WebCore::Frame::paintCustomHighlight):
        (WebCore::Frame::createScriptInstanceForWidget):
        (WebCore::Frame::windowScriptObject):
        (WebCore::Frame::cleanupPlatformScriptObjects):
        * page/mac/WebCoreFrameBridge.h:
        * page/mac/WebCoreFrameBridge.mm:
        (createRootObject):
        (bridge):
        (-[WebCoreFrameBridge _frame]):
        * page/qt/EventHandlerQt.cpp:
        * page/qt/FrameQt.cpp:
        (WebCore::Frame::unfocusWindow):
        (WebCore::Frame::focusWindow):
        (WebCore::Frame::issueTransposeCommand):
        (WebCore::Frame::respondToChangedSelection):
        (WebCore::Frame::print):
        (WebCore::Frame::createScriptInstanceForWidget):
        (WebCore::Frame::cleanupPlatformScriptObjects):
        (WebCore::Frame::isCharacterSmartReplaceExempt):
        * page/qt/FrameQt.h: Removed.
        * platform/MimeTypeRegistry.h:
        * platform/graphics/svg/SVGImage.cpp:
        (WebCore::SVGImage::setData):
        * platform/graphics/svg/SVGImageEmptyClients.h:
        (WebCore::SVGEmptyChromeClient::shouldInterruptJavaScript):
        (WebCore::SVGEmptyEditorClient::shouldChangeSelectedRange):
        * platform/mac/ClipboardMac.h:
        * platform/mac/ClipboardMac.mm:
        (WebCore::ClipboardMac::ClipboardMac):
        * platform/mac/FileChooserMac.mm:
        (-[OpenPanelController beginSheetWithFrame:]):
        * platform/mac/MimeTypeRegistryMac.mm:
        (WebCore::MimeTypeRegistry::getMIMETypeForPath):
        * platform/mac/PopupMenuMac.mm:
        (WebCore::PopupMenu::show):
        * platform/mac/WidgetMac.mm:
        (WebCore::Widget::setFocus):
        (WebCore::Widget::setIsSelected):
        * platform/network/mac/ResourceHandleMac.mm:
        * platform/network/qt/ResourceHandleManagerQt.cpp:
        * platform/network/qt/ResourceHandleQt.cpp:
        (WebCore::ResourceHandle::start):
        * platform/qt/MimeTypeRegistryQt.cpp:
        (WebCore::MimeTypeRegistry::getMIMETypeForPath):
        * platform/qt/PopupMenuQt.cpp:
        * platform/qt/ScrollViewCanvasQt.cpp:
        * platform/qt/ScrollViewQt.cpp:
        * platform/win/TemporaryLinkStubs.cpp:
        * rendering/InlineTextBox.cpp:
        (WebCore::InlineTextBox::paintCustomHighlight):
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::paintCustomHighlight):
        * rendering/RootInlineBox.cpp:
        (WebCore::RootInlineBox::addHighlightOverflow):
        (WebCore::RootInlineBox::paintCustomHighlight):

2007-02-18  Oliver Hunt  <oliver@apple.com>

        Reviewed by NOBODY (Buildfix).

        Oops, missed a 'const'

        * platform/qt/ClipboardQt.h:

2007-02-18  Oliver Hunt  <oliver@apple.com>

        Reviewed by Adam.

        Adding stubbed out implementation of Clipboard for Qt to stop
        it crashing whenever someone drags the mouse.

        * WebCore.pro:
        * page/qt/EventHandlerQt.cpp:
        (WebCore::EventHandler::createDraggingClipboard):
        * platform/qt/ClipboardQt.cpp: Added.
        (WebCore::ClipboardQt::ClipboardQt):
        (WebCore::ClipboardQt::clearData):
        (WebCore::ClipboardQt::clearAllData):
        (WebCore::ClipboardQt::getData):
        (WebCore::ClipboardQt::setData):
        (WebCore::ClipboardQt::types):
        (WebCore::ClipboardQt::dragLocation):
        (WebCore::ClipboardQt::dragImage):
        (WebCore::ClipboardQt::setDragImage):
        (WebCore::ClipboardQt::dragImageElement):
        (WebCore::ClipboardQt::setDragImageElement):
        (WebCore::ClipboardQt::createDragImage):
        (WebCore::ClipboardQt::declareAndWriteDragImage):
        (WebCore::ClipboardQt::writeURL):
        (WebCore::ClipboardQt::writeRange):
        (WebCore::ClipboardQt::hasData):
        * platform/qt/ClipboardQt.h: Added.
        (WebCore::ClipboardQt::~ClipboardQt):
        (WebCore::ClipboardQt::isForDragging):

2007-02-18  Oliver Hunt  <oliver@apple.com>

        Reviewed by Adam.

        Don't even attempt to do a document based drag if there isn't a document
        Fixes rdar://problem/4960109

        * page/DragController.cpp:
        (WebCore::DragController::tryDocumentDrag):  
           Null check m_document
        (WebCore::DragController::tryDHTMLDrag):
           ASSERT(m_document) -- tryDocumentDrag is the only 
           thing that will ever call us, but lets play it safe

2007-02-18  Adam Roben  <aroben@apple.com>

        Reviewed by Hyatt.

        A little preparation for <rdar://problem/5006872>.

        * platform/PopupMenu.h:

2007-02-18  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Adele.

        http://bugs.webkit.org/show_bug.cgi?id=12807
        XPath incorrectly converts NaN to boolean

        Test: fast/xpath/nan-to-boolean.html

        * xml/XPathValue.cpp:
        (WebCore::XPath::Value::toBoolean): Convert NaN to false.
        * xml/XPathFunctions.cpp:
        (WebCore::XPath::FunSubstringAfter::doEvaluate): Fix substring-after to actually work.

2007-02-18  Mitz Pettel  <mitz@webkit.org>

        Reviewed by Hyatt.

        - fix http://bugs.webkit.org/show_bug.cgi?id=12123
          REGRESSION: Incomplete repaint of floats' overflows

        Tests: fast/repaint/float-overflow.html
               fast/repaint/float-overflow-right.html
               fast/repaint/table-cell-vertical-overflow.html

        - fix http://bugs.webkit.org/show_bug.cgi?id=10116
          REGRESSION: Menu item drawn 2 pixels short on WWDC 2006 Attendee Site

        Reflected in existing test results.

        Unified floats and overflow for the purposes of painting and hit-testing.
        Overhanging and overflowing floats are now factored into a block's overflow
        unless their painting has been propagated to an ancestor.

        Changed table cells to no longer expand to enclose overflow, thus making
        it purely "visual overflow", having no effect on layout in WebCore. It
        still determines scrolling dimensions.

        * rendering/InlineFlowBox.cpp:
        (WebCore::InlineFlowBox::placeBoxesHorizontally): Include inline blocks'
        horizontal overflow in the inline box's dimensions.
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::layoutBlock): Removed the expand to enclose overflows
        behavior. Added code to add this block's floats (and their overflow) to its
        overflow rect if it is not in a block formatting context. Otherwise, the
        inclusion of floats in the overflow is deferred until this block's parent
        examines its floats and possibly adopts overhanging floats.
        (WebCore::RenderBlock::layoutBlockChildren):
        (WebCore::RenderBlock::paint): 
        (WebCore::RenderBlock::floatRect): Made non-virtual and changed to return an empty
        rect if there are no floats or the floats are clipped, instead of returning the border
        box.
        (WebCore::RenderBlock::addOverhangingFloats): Any floats of the child that
        are not to be painted by the parent are added to the child's overflow rect.
        (WebCore::RenderBlock::addVisualOverflow): Added. Adjusts the overflow
        bounds to include the given rect.
        (WebCore::RenderBlock::nodeAtPoint):
        * rendering/RenderBlock.h:
        * rendering/RenderFlexibleBox.cpp:
        (WebCore::RenderFlexibleBox::layoutBlock): 
        (WebCore::RenderFlexibleBox::layoutHorizontalBox): After placing a normal
        child, add its floats to its overflow, since painting of floats does not
        propagate to flexible boxes. 
        (WebCore::RenderFlexibleBox::layoutVerticalBox): Ditto.
        * rendering/RenderForeignObject.cpp:
        (WebCore::RenderForeignObject::layout):
        * rendering/RenderHTMLCanvas.cpp:
        (WebCore::RenderHTMLCanvas::layout):
        * rendering/RenderImage.cpp:
        (WebCore::RenderImage::layout):
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::updateLayerPositions):
        (WebCore::RenderLayer::absoluteBoundingBox):
        * rendering/RenderLayer.h:
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::repaintAfterLayoutIfNeeded):
        * rendering/RenderObject.h:
        (WebCore::RenderObject::expandsToEncloseOverhangingFloats):
        * rendering/RenderPath.cpp:
        (WebCore::RenderPath::layout):
        * rendering/RenderSVGContainer.cpp:
        (WebCore::RenderSVGContainer::layout):
        * rendering/RenderSVGText.cpp:
        (WebCore::RenderSVGText::layout):
        * rendering/RenderTable.h: Removed the override of overflowHeight() since now tables can have
        vertical overflow.
        * rendering/RenderTableCell.cpp:
        (WebCore::RenderTableCell::paint): Made sure that overflow is repainted.
        * rendering/RenderTableCell.h:
        (WebCore::RenderTableCell::expandsToEncloseOverhangingFloats): Removed.
        * rendering/RenderTableSection.cpp:
        (WebCore::RenderTableSection::RenderTableSection):
        (WebCore::RenderTableSection::layoutRows): Factor in vertical overflow from cells.
        (WebCore::RenderTableSection::paint):
        * rendering/RenderTableSection.h:
        (WebCore::RenderTableSection::overflowHeight):
        (WebCore::RenderTableSection::overflowTop):

2007-02-18  Oliver Hunt  <oliver@apple.com>

        Reviewed by NOBODY (Buildfix).

        Build fix for the build fix -- can't call something that isn't a function

        * platform/qt/CursorQt.cpp:
        (WebCore::notAllowedCursor):

2007-02-18  Oliver Hunt  <oliver@apple.com>

        Reviewed by NOBODY (Build fix).

        Adding platform/DragImage.cpp and platform/qt/DragImageQt.cpp to the Qt
        project files

        Stubbed method for WebCore::notAllowedCursor -- not sure what it should return, 
        have returned blank cursor, possibly needs to return something else

        * WebCore.pro:
        * platform/qt/CursorQt.cpp:
        (WebCore::notAllowedCursor):

2007-02-18  Oliver Hunt  <oliver@apple.com>

        Reviewed by NOBODY (Buildfix).

        Sigh, obnoxious occasional auto conversion from float to int

        * platform/mac/ClipboardMac.mm:
        (WebCore::ClipboardMac::createDragImage):

2007-02-18  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Hyatt.

        http://bugs.webkit.org/show_bug.cgi?id=12799
        REGRESSION: Webpage doesn't load correctly (www.cincinnati.com
        redirects to the wrong URL)

        Test: http/tests/misc/refresh-meta-with-newline.html

        * platform/network/HTTPParsers.cpp:
        (WebCore::skipWhiteSpace):
        (WebCore::parseHTTPRefresh):
        * platform/network/HTTPParsers.h:
        In HTML, all characters with codes <= 0x20 are whitespace, while in
        HTTP, only space and tab are such.

        * dom/Document.cpp:
        (WebCore::Document::processHttpEquiv):
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::receivedFirstData):
        Pass parseHTTPRefresh() a flag telling about the source of data.

2007-02-18  Oliver Hunt  <oliver@apple.com>

        Reviewed by NOBODY (Build fix).

        Buld fix -- surprisingly RetainPtr doesn't exist on Qt

        * platform/DragImage.h:

2007-02-18  Oliver Hunt  <oliver@apple.com>

        Reviewed by Adam.

        More drag and drop migration, now the entirety of the
        drag initiation logic has been rendered platform independent
        This has required a number of new interfaces, and a reasonable
        amount of logic migration.

        As a side effect, this patch also fixes rdar://problem/4945341

        There are some basic Qt stubs that should stop the build from failing,
        however the absence of ClipboardQt means any attempt to initiate a drag 
        may cause a crash.

        * WebCore.exp:
           Exporting new symbols

        * WebCore.xcodeproj/project.pbxproj:
           New files

        * dom/Clipboard.cpp:
        (WebCore::Clipboard::canSaveAsWebArchive):
          Migrated from WebKit

        * dom/Clipboard.h:
          Added more methods to allow Clipboard to be used as a 
          platform independent container for drag and drop

        * page/DragClient.h:
        (WebCore::DragClient::declareAndWriteDragImage):
          This is a mac only helper function, so i've made it have an empty implementation,
          that way we won't need a PLATFORM(MAC) block in SVGImageEmptyClients

        * page/DragController.cpp:
        (WebCore::DragController::dragExited):
        (WebCore::DragController::performDrag):
        (WebCore::DragController::tryDocumentDrag): 
        (WebCore::DragController::tryDHTMLDrag):
          Using RefPtrs now
        (WebCore::getCachedImage):
        (WebCore::getImage):
          Helper functions                   
        (WebCore::dragLocForDHTMLDrag):
        (WebCore::dragLocForSelectionDrag):
        (WebCore::DragController::startDrag):
        (WebCore::DragController::doImageDrag):
        (WebCore::DragController::doSystemDrag):
          Logic that generates drag images and clipboard content, and
          initiates the actual system drag operation

        * page/DragController.h:
          Method and variable declarations

        * page/EventHandler.cpp:
        (WebCore::EventHandler::handleDrag):
          handleDrag is now platform independent
        (WebCore::EventHandler::handleTextInputEvent):
           formatting

        * page/EventHandler.h:
        (WebCore::EventHandler::eventLoopHandleMouseDragged):
          Forgot to define this stub function 

        * page/Frame.h:
          Declaring dragImageForSelection to provide drag image for selected content

        * page/mac/DragControllerMac.mm:
          Defining drag images control vars

        * page/mac/EventHandlerMac.mm:
        (WebCore::EventHandler::createDraggingClipboard):
          Migrated old clipboard creation to here

        * page/mac/FrameMac.mm:
        (WebCore::Frame::dragImageForSelection):
          Wrap FrameMac::selectionImage

        * page/qt/DragControllerQt.cpp:
          Defining drag images control vars

        * page/qt/EventHandlerQt.cpp:
        (WebCore::EventHandler::createDraggingClipboard):
          stub

        * page/qt/FrameQt.cpp:
        (WebCore::Frame::dragImageForSelection):
          stub

        * platform/DragImage.cpp: Added.
        (WebCore::fitDragImageToMaxSize):
        (WebCore::createDragImageForSelection):
           Platform independent processing for drag images

        * platform/DragImage.h: Added.
           Declaring typedefs and wrapper functions to abstract the handling
           of drag images 

        * platform/Pasteboard.h:
          Declaring extracted writeURL and writeSelection methods

        * platform/graphics/svg/SVGImageEmptyClients.h:
        (WebCore::SVGEmptyDragClient::willPerformDragSourceAction):
        (WebCore::SVGEmptyDragClient::startDrag):
        (WebCore::SVGEmptyDragClient::createDragImageForLink):
          Stubs FTW!

        * platform/mac/ClipboardMac.h:
        (WebCore::ClipboardMac::pasteboard):
          Provide accessor for underlying NSPasteboard

        * platform/mac/ClipboardMac.mm:
        (WebCore::ClipboardMac::hasData):
        (WebCore::ClipboardMac::writeRange):
        (WebCore::ClipboardMac::writeURL):
        (WebCore::ClipboardMac::declareAndWriteDragImage):
        (WebCore::ClipboardMac::createDragImage):
           Implemented new Clipboarid functionality.
        (WebCore::ClipboardMac::dragNSImage):
           Made this a const method

        * platform/mac/DragImageMac.mm: Added.
        (WebCore::dragImageSize):
        (WebCore::deleteDragImage):
        (WebCore::scaleDragImage):
        (WebCore::dissolveDragImageToFraction):
        (WebCore::createDragImageFromImage):
        (WebCore::createDragImageIconForCachedImage):
           Implemented platform specific DragImage functions

        * platform/mac/PasteboardMac.mm:
        (WebCore::writeSelection):
        (WebCore::Pasteboard::writeSelection):
        (WebCore::writeURL):
        (WebCore::Pasteboard::writeURL):
           Extracted member implementations of these functions, so that
           Clipboard could also make use of this functionality.
           Pasteboard methods now call the new non-member implementations.
           Also fixed implementations to respect the list of requested types.

        * platform/qt/DragImageQt.cpp: Added.
        (WebCore::dragImageSize):
        (WebCore::deleteDragImage):
        (WebCore::scaleDragImage):
        (WebCore::dissolveDragImageToFraction):
        (WebCore::createDragImageFromImage):
        (WebCore::createDragImageIconForCachedImage):  
          Stubs

2007-02-17  David Hyatt  <hyatt@apple.com>

        Fix textarea resizers to not fill with black by making sure the fill color starts off as
        transparent instead of black.

        Reviewed by aroben

        * platform/graphics/GraphicsContext.cpp:
        (WebCore::GraphicsContextState::GraphicsContextState):

2007-02-17  Lars Knoll <lars@trolltech.com>

        Reviewed by Adam.

        fix http://bugs.webkit.org/show_bug.cgi?id=11476
        <rdar://problem/4960247> REGRESSION: Nesting the IMG tag inside of a
        MAP fails to render correctly in ToT

        Test: fast/images/image-in-map.html

        * html/HTMLMapElement.cpp:
        (WebCore::HTMLMapElement::checkDTD):

2007-02-17  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Maciej.

        http://bugs.webkit.org/show_bug.cgi?id=12733
        XPath namespace is attached to a wrong step

        * xml/XPathGrammar.y: NAMETEST is different from other NodeTests in that its
        resulting type is an expanded name, rather than a string. It is not really possible 
        to store the namespace inside Parser, because it gets used in wrong steps then.

        * xml/XPathParser.cpp:
        (WebCore::XPath::Parser::expandQName):
        * xml/XPathParser.h:
        Moved code that expands a QName from XPathGrammar.y. Removed m_currentNamespaceURI.

        * xml/XPathStep.cpp:
        (WebCore::XPath::Step::Step):
        * xml/XPathStep.h:
        Added a constructor that takes a namespace.

2007-02-17  Mitz Pettel  <mitz@webkit.org>

        Reviewed by Maciej.

        - fix http://bugs.webkit.org/show_bug.cgi?id=12479
          ASSERTION FAILURE: resource->inCache() in WebCore::Cache::remove

        Test: fast/loader/simultaneous-reloads-assert.html

        * loader/Cache.cpp:
        (WebCore::Cache::remove): Replaced the assertion with a check whether the
        resource is in the cache. The resource could have been removed from the cache
        as a result of a reload occurring simultaneously in a different document.

2007-02-12  Lars Naesbye Christensen  <lars@naesbye.dk>

        Reviewed by Adam.

        Fix for http://bugs.webkit.org/show_bug.cgi?id=12711
        Prettier and more distinct cursors

        * Resources/crossHairCursor.png: Added.
        * Resources/northEastSouthWestResizeCursor.png:
        * Resources/northWestSouthEastResizeCursor.png:
        * Resources/notAllowedCursor.png: Added.
        * page/EventHandler.cpp: (WebCore::selectCursor):
        * platform/Cursor.h:
        * platform/mac/CursorMac.mm:
        (WebCore::crossCursor):
        (WebCore::notAllowedCursor):

2007-02-16  Mitz Pettel  <mitz@webkit.org>

        Reviewed by Darin.

        - fix http://bugs.webkit.org/show_bug.cgi?id=12780
          REGRESSION (r19341-r19385): Reproducible crash in "onselectstart" event

        Test: fast/events/shadow-boundary-crossing.html

        * dom/EventTargetNode.cpp:
        (WebCore::EventTargetNode::dispatchGenericEvent): Changed to use the new
        eventParentNode() function for constructing the chain of ancestors for
        capture and bubbling.
        * dom/Node.h:
        (WebCore::Node::eventParentNode): Added. Returns the node's parent for the
        purpose of of event capture and bubbling. The base class implementation is
        to return the parent node.
        * ksvg2/svg/SVGElement.h:
        (WebCore::SVGElement::eventParentNode): Added. Since in SVG events bubble
        to and can be captured across the shadow DOM boundary, returns the shadow parent
        for shadow nodes.

2007-02-17  Dave Hyatt <hyatt@apple.com>

        Change how textarea resizers paint to more closely match the way the main window resizer paints.
        
        Reviewed by olliej

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

2007-02-17  Krzysztof Kowalczyk  <kkowalczyk@gmail.com>

        Reviewed by Adam Roben.

        Fix crashes on ARM due to different struct packing. Based on a patch
        from Mike Emmel.

        * platform/DeprecatedString.cpp: compile-time assert to make sure sizeof(DeprecatedChar) == 2
        * platform/DeprecatedString.h: pack DeprecatedChar struct to ensure that
        sizeof(DeprecatedChar) == 2. Move _internalBuffer in DeprecatedStringData
        to the end, to avoid crashes on ARM due to different struct packing.

2007-02-16  Adele Peterson  <adele@apple.com>

        Reviewed by Mitz.

        Fix for http://bugs.webkit.org/show_bug.cgi?id=11534
        <rdar://problem/4946947> REGRESSION: Readonly text fields don't scroll when selecting content

        Test: fast/forms/input-readonly-autoscroll.html

        Implemented autoscroll methods for RenderTextControl, so this works on non-editable text controls.

        * rendering/RenderTextControl.cpp: (WebCore::RenderTextControl::autoscroll):
        * rendering/RenderTextControl.h: (WebCore::RenderTextControl::shouldAutoscroll):

2007-02-17  Krzysztof Kowalczyk  <kkowalczyk@gmail.com>

        Reviewed by Adam Roben.

        Curl networking improvements inspired by Mike Emmel's patches in
        http://bugs.webkit.org/show_bug.cgi?id=11332.
        Fix FrameLoaderClientGdk due to changed FrameLoaderClient API.

        * loader/gdk/FrameLoaderClientGdk.cpp: Massage for changed API.
        (WebCore::FrameLoaderClientGdk::saveViewStateToItem):
        (WebCore::FrameLoaderClientGdk::restoreViewState):
        (WebCore::FrameLoaderClientGdk::generatedMIMETypeForURLScheme):
        (WebCore::FrameLoaderClientGdk::willUseArchive):
        * loader/gdk/FrameLoaderClientGdk.h: Ditto.
        * platform/network/ResourceHandleInternal.h: Remember url and custom headers
        for the request lifetime and free them at the end.
        (WebCore::ResourceHandleInternal::ResourceHandleInternal):
        * platform/network/gdk/ResourceHandleCurl.cpp: Ditto.
        (WebCore::ResourceHandleInternal::~ResourceHandleInternal):
        * platform/network/gdk/ResourceHandleManager.cpp: url improvements:
        - remove m_useSimple code-path since it wasn't used anywhere
        - don't use hashmap for keeping track of outstanding jobs - curl does it anyway
        - set custom headers from request
        - enable gzip and deflate through Accept-Encoding
        - setup curl to share cookies and DNS cache between requests
        - enable persisting of cookies in a file (if client provides file name
          for cookies via ResourceHandleManager::setCookieJarFileName())
        (WebCore::ResourceHandleManager::ResourceHandleManager):
        (WebCore::ResourceHandleManager::setCookieJarFileName):
        (WebCore::ResourceHandleManager::downloadTimerCallback):
        (WebCore::ResourceHandleManager::removeFromCurl):
        (WebCore::ResourceHandleManager::setupPUT):
        (WebCore::ResourceHandleManager::setupPOST):
        (WebCore::ResourceHandleManager::add):
        (WebCore::ResourceHandleManager::cancel):
        * platform/network/gdk/ResourceHandleManager.h:

2007-02-17  Krzysztof Kowalczyk  <kkowalczyk@gmail.com>

        Reviewed by Adam Roben.

        Gdk fixes.

        * page/gdk/EventHandlerGdk.cpp: Comment out chatty message.
        (WebCore::EventHandler::handleDrag):
        * platform/gdk/EditorClientGdk.cpp: Enable entering text into text field.
        (WebCore::EditorClientGdk::shouldInsertText):

2007-02-16  Krzysztof Kowalczyk  <kkowalczyk@gmail.com>

        Reviewed by Adam Roben.

        Move Path implementation from TemporaryLinkStubs.cpp to
        its own file.
        Implement setLineCap, setLineJoin and setMiterLimit for
        cairo's GraphicsContext.

        * WebCoreSources.bkl:
        * platform/gdk/TemporaryLinkStubs.cpp:
        * platform/graphics/cairo/GraphicsContextCairo.cpp:
        (WebCore::GraphicsContext::setPlatformFillColor):
        (WebCore::GraphicsContext::setPlatformStrokeColor):
        (WebCore::GraphicsContext::setLineCap):
        (WebCore::GraphicsContext::setLineJoin):
        (WebCore::GraphicsContext::setMiterLimit):
        * platform/graphics/cairo/PathCairo.cpp: Added.
        (WebCore::Path::Path):
        (WebCore::Path::~Path):
        (WebCore::Path::contains):
        (WebCore::Path::translate):
        (WebCore::Path::boundingRect):
        (WebCore::Path::operator=):
        (WebCore::Path::clear):
        (WebCore::Path::moveTo):
        (WebCore::Path::addLineTo):
        (WebCore::Path::addQuadCurveTo):
        (WebCore::Path::addBezierCurveTo):
        (WebCore::Path::addArcTo):
        (WebCore::Path::closeSubpath):
        (WebCore::Path::addArc):
        (WebCore::Path::addRect):
        (WebCore::Path::addEllipse):
        (WebCore::Path::transform):
        (WebCore::Path::apply):

2007-02-16  Ada Chan  <adachan@apple.com>

        Reviewed by Adam and Maciej.

        Use a RefPtr to store the old hover node.

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

2007-02-16  Darin Adler  <darin@apple.com>

        Reviewed by Adele.

        - fix <rdar://problem/4990864> ASSERT in FormDelegate.m while dragging text between frames

        This symptom is specific to Safari, so no layout test.

        * editing/DeleteSelectionCommand.cpp:
        (WebCore::DeleteSelectionCommand::doApply): Only call textWillBeDeletedInTextField if the
        text field is focused.
        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::aboutToUnload): Only call textFieldDidEndEditing if the text
        field is focused.
        (WebCore::HTMLInputElement::dispatchBlurEvent): Remove unneeded type cast.
        (WebCore::HTMLInputElement::defaultEventHandler): Only call doTextFieldCommandFromEvent if
        the text field is focused.
        * rendering/RenderTextControl.cpp:
        (WebCore::RenderTextControl::subtreeHasChanged): Only call textDidChangeInTextArea,
        textFieldDidBeginEditing, and textDidChangeInTextField if the element is focused.

2007-02-16  Anders Carlsson  <acarlsson@apple.com>

        Reviewed by Adam.

        <rdar://problem/4943985> 
        REGRESSION: Dragging standalone images to Finder fails to download the image file
        
        Set the data and response on the image resource. Also, since this is platform-independent we don't need to do it in 
        ImageDocumentMac.mm
        
        * loader/ImageDocument.cpp:
        (WebCore::ImageTokenizer::finish):
        * loader/mac/ImageDocumentMac.h:
        * loader/mac/ImageDocumentMac.mm:
        (WebCore::finishImageLoad):

2007-02-16  David Harrison  <harrison@apple.com>

        Reviewed by Adam.

        <rdar://problem/5004746> Need mechanism to protect against WebKit calls from secondary threads (DOM APIs)

        * platform/mac/LoggingMac.mm:
        (WebCore::_WebCoreThreadViolationCheck):
        Change the default to log the violations.

2007-02-16  Adele Peterson  <adele@apple.com>

        Reviewed by Mitz.

        Fixed: http://bugs.webkit.org/show_bug.cgi?id=12768
        <rdar://problem/4995250> REGRESSION: Crash occurs at WebCore::RenderLayer::scrollToOffset() when leaving page that has focus in field

        No test case added.  This crash doesn't occur in DumpRenderTree because the B/F cache is turned off.

        * dom/Node.cpp: (WebCore::Node::willRemove): Check that the document is not in the page cache before 

        * dom/Element.cpp: (WebCore::Element::updateFocusAppearance): Added restorePreviousSelection argument, with appropriate default values.
        * dom/Element.h: ditto.
        * html/HTMLInputElement.cpp: (WebCore::HTMLInputElement::updateFocusAppearance): ditto.
        * html/HTMLInputElement.h: ditto.
        * html/HTMLTextAreaElement.cpp: (WebCore::HTMLTextAreaElement::updateFocusAppearance): ditto.
        * html/HTMLTextAreaElement.h: ditto.

        * page/PageState.cpp: (WebCore::PageState::restore): Call updateFocusAppearance on the focused node for this page.  Pass true for the
          restorePreviousSelection argument.

        * rendering/RenderLayer.cpp: Added ASSERTS and nil checks on the RenderView.  It shouldn't be null, but if it is, 
          we'll fail silently on release builds.
        (WebCore::RenderLayer::updateLayerPositions):
        (WebCore::RenderLayer::scrollToOffset):
        (WebCore::RenderLayer::windowClipRect):
        (WebCore::RenderLayer::calculateClipRects):
        (WebCore::RenderLayer::calculateRects):
        (WebCore::RenderLayer::intersectsDamageRect):
        (WebCore::RenderLayer::absoluteBoundingBox):

2007-02-16  Anders Carlsson  <acarlsson@apple.com>

        Reviewed by Darin.

        <rdar://problem/4993055> auto_refcount_underflow_error: WebCore::FrameLoader::continueAfterNavigationPolicy () over-releases under GC

        Add ::adoptNS and ::adoptCF methods to RetainPtr to indicate what type of reference to adopt.
        
        * platform/cf/RetainPtr.h:
        (WebCore::):
        (WebCore::adoptNSReference):
        (WebCore::RetainPtr::RetainPtr):
        (WebCore::::adoptCF):
        (WebCore::::adoptNS):
        * platform/mac/FileChooserMac.mm:
        (WebCore::FileChooser::FileChooser):
        * platform/network/mac/ResourceErrorMac.mm:
        (WebCore::ResourceError::operator NSError*):
        * platform/network/mac/ResourceRequestMac.mm:
        (WebCore::ResourceRequest::doUpdatePlatformRequest):
        * platform/network/mac/ResourceResponseMac.mm:
        (WebCore::ResourceResponse::nsURLResponse):

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

        Reviewed by Lost Objective-C Hippyness (or hippiness)

        Oh boy, did I ever botch this one up...

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::saveScrollPositionAndViewStateToItem): Null check the FrameView

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

        Reviewed by Adam's complaint

        Adam wanted me to do an early return, instead.

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

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

        Reviewed by Adele

        Forgot to bring the null check with me when I backed this code out of 
        the FrameLoaderClient

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::saveScrollPositionAndViewStateToItem): null check the HistoryItem

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

        Reviewed by Adam

        Save scroll state for back/forward navigation in FrameLoader, not the client

       * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::saveScrollPositionAndViewStateToItem): Actually save the scroll position
         here instead of asking the FrameLoaderClient
        (WebCore::FrameLoader::restoreScrollPositionAndViewState): Ditto

        * loader/FrameLoaderClient.h: Renamed/repurposed 2 methods

        * platform/graphics/svg/SVGImageEmptyClients.h:
        (WebCore::SVGEmptyFrameLoaderClient::restoreViewState): Ditto
        (WebCore::SVGEmptyFrameLoaderClient::saveViewStateToItem): Ditto

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

        Reviewed by harrison
        
        <rdar://problem/4989774>
        REGRESSION: Pasting a image into a plain text message can place image on a new line

        <span><img><span><img></span></span> will appear as two
        images on different lines because of a layout/rendering
        bug.  This patch avoids the bug by producing cleaner
        markup so that the paste code can safely remove the style 
        spans.

        * editing/markup.cpp:
        (WebCore::createMarkup): Get the default style from the
        editable root or body instead of the document element.
        This produces cleaner markup since we don't inline the 
        root's styles.

2007-02-15  Krzysztof Kowalczyk  <kkowalczyk@gmail.com>

        Reviewed by Adam Roben.

        Add gdk version of ContextMenuClient based on qt version.

        * WebCoreSources.bkl:
        * page/gdk/ContextMenuClientGdk.cpp: Added.
        (WebCore::ContextMenuClientGdk::contextMenuDestroyed):
        (WebCore::ContextMenuClientGdk::getCustomMenuFromDefaultItems):
        (WebCore::ContextMenuClientGdk::contextMenuItemSelected):
        (WebCore::ContextMenuClientGdk::downloadURL):
        (WebCore::ContextMenuClientGdk::copyImageToClipboard):
        (WebCore::ContextMenuClientGdk::searchWithGoogle):
        (WebCore::ContextMenuClientGdk::lookUpInDictionary):
        (WebCore::ContextMenuClientGdk::speak):
        (WebCore::ContextMenuClientGdk::stopSpeaking):
        * page/gdk/ContextMenuClientGdk.h: Added.
        * webcore-base.bkl: curl is needed when building webcore_base files.

2007-02-15  Kevin Decker  <kdecker@apple.com>

       Reviewed by Darin.

       Fixed: <rdar://problem/4983883> Background of a .mov window should not be white

       * loader/PluginDocument.cpp: 
       (WebCore::PluginTokenizer::createDocumentStructure): Set a background color of gray
       for full frame plug-ins, which makes it easier on the eyes. It's also the same 
       gray that PDFKit uses, too.

2007-02-15  Mitz Pettel  <mitz@webkit.org>

        Reviewed by Darin.

        - fix http://bugs.webkit.org/show_bug.cgi?id=12625
          REGRESSION: Crash when closing the web inspector with text selected

        The problem was that selectionRect() was being called on a render tree that
        had pending style changes. The changes were committed as a side effect in
        the middle of traversing the render tree, and the current object got
        deleted as a result. The solution is to update the render tree before
        starting to traverse it.

        The inspector was affected because it makes style changes in response to
        an AppKit notification that's sent right before the windowDidResignKey:
        notification, under which WebKit calls selectionRect(). I couldn't recreate
        the same conditions (having uncommitted style changes in the tree when the
        window becomes inactive) using HTML/JS in Safari, hence the lack of
        a regression test to go with this patch.

        * rendering/RenderView.cpp:
        (WebCore::RenderView::selectionRect): Added call to updateRendering().

2007-02-15  Mitz Pettel  <mitz@webkit.org>

        Reviewed by Darin.

        - fix http://bugs.webkit.org/show_bug.cgi?id=10127
          REGRESSION: Crash undoing delete in textarea

        Document::removeMarkers() was using a Vector iterator (which is just a
        pointer) and inserting into the Vector at the same time, which made the
        iterator invalid as the Vector's data buffer was relocated.
        
        Replaced all instances of Vector<DocumentMarker>::iterator with indices.

        * dom/Document.cpp:
        (WebCore::Document::addMarker):
        (WebCore::Document::copyMarkers):
        (WebCore::Document::removeMarkers):
        (WebCore::Document::repaintMarkers):
        (WebCore::Document::shiftMarkers):

2007-02-15  Mitz Pettel  <mitz@webkit.org>

        Reviewed by Darin.

        - http://bugs.webkit.org/show_bug.cgi?id=12777
          REGRESSION (r18574): User profile pages display incorrectly at ebay.ca

        Fixes existing layout tests: tables/mozilla/bugs/bug45486.html
                                     tables/mozilla_expected_failures/core/col_span2.html

        * rendering/AutoTableLayout.cpp:
        (WebCore::AutoTableLayout::calcEffectiveWidth): Fixed a mismatch between which
        columns count as percentage columns when adding up the total percent and
        which columns count as percentage columns when converting non-percentage
        columns to effectively-percentage.

2007-02-14  Mitz Pettel  <mitz@webkit.org>

        Reviewed by Sam Weinig!

        - fix http://bugs.webkit.org/show_bug.cgi?id=12773
          REGRESSION (r19490): Crash on ipx-server.de

        * manual-tests/background-image-change-in-page-cache.html: Added.
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::imageChanged): Bail out if the object is not in a view,
        which can happen if the document is in the page cache and the same cached
        image used for its background is also being used in another document that
        is currently in view.

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

        Reviewed by Darin.

        Fix http://bugs.webkit.org/show_bug.cgi?id=12517
        <rdar://problem/4971227> REGRESSION: Tab order incorrect when input
        inside frame/iframe gets initial focus (12517)

        Test: fast/events/frame-programmatic-focus.html

        * dom/Element.cpp:
        (WebCore::Element::focus): Call FocusController::setFocusedNode to set
        the focus for the whole page.
        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::focus): Ditto.
        * html/HTMLTextAreaElement.cpp:
        (WebCore::HTMLTextAreaElement::focus): Ditto.
        * page/EventHandler.cpp:
        (WebCore::EventHandler::handleTextInputEvent): Send the textInput
        event to the same target that was sent the keypress event before it.
        * page/FocusController.cpp:
        (WebCore::FocusController::advanceFocus): Added a FIXME.
        (WebCore::FocusController::setFocusedNode): Added. Sets the focused
        node for a whole page.
        * page/FocusController.h: Added declaration.
        * platform/cf/RetainPtr.h: Removed unused pointer_cast functions.

2007-02-14  Justin Garcia  <justin.garcia@apple.com>

        Reviewed by adele
        
        <rdar://problem/4976800>
        Outdent combines 2 separate strings on 2 different lines

        * editing/IndentOutdentCommand.cpp:
        (WebCore::IndentOutdentCommand::outdentParagraph): Add line breaks
        if removing the indented node causes content before or after it to
        collapse into the same paragraph as its content.

2007-02-14  Justin Garcia  <justin.garcia@apple.com>

        Reviewed by adele
        
        <rdar://problem/4960120>
        REGRESSION: First Enter key ignored on initial focus of textarea after page load (11967)
        
        We'd insert a newline, but into an empty div.  We need two newlines
        in that case.

        * editing/InsertLineBreakCommand.cpp:
        (WebCore::lineBreakExistsAtPosition): Returns true if there is a
        br or a '\n' in text that preserves newlines at the incoming position.
        (WebCore::InsertLineBreakCommand::doApply): Fixed to handle the empty
        block case, the anonymous block case.

2007-02-14  Darin Adler  <darin@apple.com>

        Reviewed by Hyatt.

        - test or http://bugs.webkit.org/show_bug.cgi?id=12417
          <rdar://problem/4990046> REGRESSION: pressing "Return" in a <select>
          box does not submit the form (12697)

        Test: fast/forms/select-enter-key.html

        * html/HTMLSelectElement.cpp:
        (WebCore::HTMLSelectElement::listBoxDefaultEventHandler):
        Add code to submit when someone hits the Enter key.

2007-02-14  Anders Carlsson  <acarlsson@apple.com>

        Reviewed by Darin.

        <rdar://problem/4960112>
        http://bugs.webkit.org/show_bug.cgi?id=12417
        REGRESSION: "Are you sure you want to send a form again?" sheet is displayed twice (validator.w3.org)
        
        The problem was that doing a reload would cause the "Cache-Control" HTTP header to be set on the request _after_ the first
        navigation policy delegate callback was called. This would break the request equality check that's used to prevent multiple policy
        delegate callbacks from getting called for the same request. The solution is to set the header as early as possible.
        
        This patch also fixes some bugs in the ResourceRequest equality operator.
        
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::reload):
        Set the "Cache-Control" header field on the request here.
        
        * platform/network/FormData.h:
        (WebCore::operator==):
        Short-circuit if the pointers are the same.
        
        * platform/network/ResourceRequest.cpp:
        (WebCore::operator==):
        Check the equality of the objects, not the pointers.

2007-02-14  David Hyatt  <hyatt@apple.com>

        Move setPlatformData out of FontFallbackListMac.mm and delete the file.  The function was completely
        cross-platform already.

        Reviewed by Ada

        * WebCore.xcodeproj/project.pbxproj:
        * platform/FontFallbackList.cpp:
        (WebCore::FontFallbackList::setPlatformFont):

2007-02-14  David Hyatt  <hyatt@apple.com>

        Make the Font constructor that takes a FontPlatformData cross-platform, since the implementation was already
        completely cross-platform.

        Reviewed by Ada

        * platform/Font.cpp:
        (WebCore::Font::Font):
        * platform/Font.h:
        * platform/mac/FontMac.mm:

2007-02-14  Antti Koivisto  <antti@apple.com>

        Reverting http://bugs.webkit.org/show_bug.cgi?id=11974, it causes repainting problems in some cases.

        * rendering/RenderTextControl.h:
        (WebCore::RenderTextControl::avoidsFloats):

2007-02-14  Antti Koivisto  <antti@apple.com>

        Reviewed by Maciej.
        
        - fix http://bugs.webkit.org/show_bug.cgi?id=11974
        REGRESSION: Caret drawn over input when smaller than font size on initial focus
        <rdar://problem/4960258>
        
        Set controlClip for non-search text controls.

        * rendering/RenderTextControl.h:
        (WebCore::RenderTextControl::hasControlClip):

2007-02-14  Mitz Pettel  <mitz@webkit.org>

        Reviewed by Hyatt.

        - fix http://bugs.webkit.org/show_bug.cgi?id=12726
          REGRESSION (r12073): Text wraps in the middle of a word instead of wrapping at the space before the word

        Test: fast/text/break-word.html

        The wrapW variable used to keep track of the width of the characters scanned
        so far by adding up the widths of individual characters. Because of the
        rounding hack, the total ended up being bigger than the width of the same characters
        when measured together as a single run.

        The fix is to use wrapW only as an upper bound, and once it overflows the line's width,
        fall back on measuring everything from the beginning of the line as one run.

        * rendering/bidi.cpp:
        (WebCore::RenderBlock::findNextLineBreak): Implemented the above fix, including not measuring
        additional single characters once wrapW overflows the line. Also moved the assignment
        to breakNBSP out of the loop since it is constant for the entire text object, made breakWords and
        midWordBreak update only when they might change, and cleaned up a few things.

2007-02-14  Antti Koivisto  <antti@apple.com>

        Reviewed by Hyatt.

        - fix http://bugs.webkit.org/show_bug.cgi?id=11923
        REGRESSION: Placeholder text in password field shows as bullets
        <rdar://problem/4960257> 
        
        Disable textSecurity when placeholder is visible.
        
        * rendering/RenderTextControl.cpp:
        (WebCore::RenderTextControl::updatePlaceholder):

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

        Reviewed by Mark Rowe.

        http://bugs.webkit.org/show_bug.cgi?id=12763
        REGRESSION: button title is displayed incorrectly at quotes.burntelectrons.org

        Test: fast/parser/entities-in-attributes.xhtml

        * dom/XMLTokenizer.cpp:
        (WebCore::getEntityHandler): Set a correct type for the found entity (I'm not really
        sure if XML_INTERNAL_GENERAL_ENTITY is _the_ correct one, but it fixes the problem).

2007-02-13  Darin Adler  <darin@apple.com>

        Reviewed by Hyatt.

        - removed some bogus names (Hyatt smacked me since this doesn't fix a P1)

        * dom/EventNames.h: Removed half-implemented khtmlDragdrop and khtmlMove
        (you could add listeners, but nobody ever sent the events). Renamed the
        other two khtml-prefixed internal event names to use the webkit prefix.

        * bindings/js/kjs_dom.cpp:
        (KJS::DOMEventTargetNode::getValueProperty): Removed ondragdrop and onmove.
        (KJS::DOMEventTargetNode::putValueProperty): Ditto.
        * bindings/js/kjs_dom.h:
        * bindings/js/kjs_window.cpp:
        (KJS::Window::getValueProperty): Ditto.
        (KJS::Window::put): Ditto.
        * bindings/js/kjs_window.h:

        * dom/BeforeTextInsertedEvent.cpp:
        (WebCore::BeforeTextInsertedEvent::BeforeTextInsertedEvent): Renamed to webkit.
        * editing/Editor.cpp:
        (WebCore::dispatchEditableContentChangedEvents): Ditto.
        * editing/ReplaceSelectionCommand.cpp:
        (WebCore::ReplacementFragment::ReplacementFragment): Ditto.
        * html/HTMLTextFieldInnerElement.cpp:
        (WebCore::HTMLTextFieldInnerTextElement::defaultEventHandler): Ditto.

2007-02-13  Darin Adler  <darin@apple.com>

        Rubber stamped by Maciej.

        * dom/EventNames.h: Resort names. Removed unused names.

2007-02-13  Anders Carlsson  <acarlsson@apple.com>

        Reviewed by Kevin Decker.

        <rdar://problem/4990049> 
        http://bugs.webkit.org/show_bug.cgi?id=12718
        REGRESSION: Segmentation fault when loading abc.go.com (12718)

        The problem is that redirecting to about:blank causes the delegate to be released even though the load wasn't finished.
        This is usally not a problem since NSURLConnection retains its delegate. However, the proxy delegate does not retain _it's_ 
        delegate. The solution is to make releaseDelegate clear out the proxy delegate's delegate.
        
        * platform/network/mac/ResourceHandleMac.mm:
        (WebCore::ResourceHandle::releaseDelegate):
        If there's a proxy, nil out its delegate too.

2007-02-13  Dex Deacon  <occupant4@gmail.com>

        Reviewed by Darin.

        - fix for http://bugs.webkit.org/show_bug.cgi?id=12750
          Vector operator== was not defined correctly. It returned void,
          did not accept const Vectors, and used an int instead of size_t. 

        * rendering/RenderStyle.h: Added a != operator for StyleDashboardRegion.
        The only reason this compiled before was that the comparing two vectors
        with a != was simply comparing the pointers.

2007-02-13  Darin Adler  <darin@apple.com>

        - roll out fix for <rdar://problem/4874059> REGRESSION: Painter IX:register -
          Crash in WebCore:: ResourceLoader::willSendRequest()

        This fix was causing a crash in at least one layout test.

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::stopAllLoaders):
        (WebCore::FrameLoader::continueLoadAfterNavigationPolicy):

2007-02-13  Mitz Pettel  <mitz@webkit.org>

        Reviewed by Hyatt.

        - fix http://bugs.webkit.org/show_bug.cgi?id=12746
        REGRESSION (r13853): List item's first line overflows containing div

        Test: fast/lists/item-not-in-list-line-wrapping.html

        * rendering/bidi.cpp:
        (WebCore::RenderBlock::findNextLineBreak): Use the list marker's isInside()
        instead of looking at its style()->listStylePosition(), since if the
        list item is not in a list, the marker is inside regardless of the style.

2007-02-13  Rob Buis  <buis@kde.org>

        Reviewed by Maciej.

        http://bugs.webkit.org/show_bug.cgi?id=12578
        WebKit incorrectly strokes zero-width/height rectangles

        Create an empty path when encountering zero-width/height rectangles, similar to circles with zero radius.

        * platform/graphics/Path.cpp:
        (WebCore::Path::createRectangle):

2007-02-13  Rob Buis  <buis@kde.org>

        Reviewed by Maciej.

        Remove SVGDOMImplementation from the project.

        * CMakeLists.txt:
        * WebCore.pro:
        * ksvg2/svg/SVGDOMImplementation.cpp: Removed.
        * ksvg2/svg/SVGDOMImplementation.h: Removed.

2007-02-13  Brady Eidson <beidson@apple.com>

        Reviewed by Maciej and Adam

        Fixes <rdar://problem/4985497> - Crash when opening a new window to "Same Page"

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::loadItem): Null check documentLoader() since if we're a brand new 
          WebView, cloning the history of another view, we have no documentLoader()

2007-02-12  Antti Koivisto  <antti@apple.com>

        Reviewed by Maciej.

        -fix REGRESSION: <select disabled size="5"> listbox cannot be scrolled
        http://bugs.webkit.org/show_bug.cgi?id=11852
        <rdar://problem/4960129>
        
        Pass mouse press events to scrollbars even if event is swallowed.
        
        No layout test, DumpRenderTree eventSender can't hit scrollbars.

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

2007-02-12  David Hyatt  <hyatt@apple.com>

        Fix for bug 12149 (Radar Bug#4928692), external CSS causes incomplete
        text field focus.

        Make sure to clear out the focus node in willRemove() rather than in
        detach(), since detach/attach caused by style recalc should not affect
        the focused node.

        Reviewed by aroben

        * dom/ContainerNode.cpp:
        (WebCore::ContainerNode::willRemove):
        * dom/Document.cpp:
        (WebCore::Document::focusedNodeRemoved):
        (WebCore::Document::setFocusedNode):
        * dom/Document.h:
        * dom/Element.cpp:
        (WebCore::Element::updateFocusAppearance):
        * dom/Node.cpp:
        (WebCore::Node::willRemove):
        (WebCore::Node::detach):
        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::updateFocusAppearance):

2007-02-12  Kevin McCullough  <kmccullough@apple.com>

        - reverting fix for rdar://problem/4922454 because it caused regressions
          and performance problems

        * bindings/objc/DOM.mm:
        (-[DOMElement image]):
        (-[DOMElement _imageTIFFRepresentation]):
        * dom/XMLTokenizer.cpp:
        (WebCore::XMLTokenizer::notifyFinished):
        * html/HTMLImageLoader.cpp:
        (WebCore::HTMLImageLoader::dispatchLoadEvent):
        * html/HTMLTokenizer.cpp:
        (WebCore::HTMLTokenizer::reset):
        (WebCore::HTMLTokenizer::notifyFinished):
        * ksvg2/misc/SVGImageLoader.cpp:
        (WebCore::SVGImageLoader::dispatchLoadEvent):
        * loader/Cache.cpp:
        (WebCore::Cache::requestResource):
        (WebCore::Cache::remove):
        * loader/CachedImage.h:
        (WebCore::CachedImage::canRender):
        (WebCore::CachedImage::isErrorImage):
        * loader/CachedResource.h:
        * loader/CachedScript.h:
        (WebCore::CachedScript::errorOccurred):
        * loader/DocLoader.cpp:
        (WebCore::DocLoader::requestResource):
        (WebCore::DocLoader::setLoadInProgress):
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::canLoad):
        * page/EventHandler.cpp:
        (WebCore::selectCursor):
        * rendering/HitTestResult.cpp:
        (WebCore::HitTestResult::image):
        * rendering/RenderImage.cpp:
        (WebCore::RenderImage::setCachedImage):
        (WebCore::RenderImage::imageChanged):
        (WebCore::RenderImage::paint):
        (WebCore::RenderImage::layout):
        (WebCore::RenderImage::calcAspectRatioWidth):
        (WebCore::RenderImage::calcAspectRatioHeight):
        * rendering/RenderImage.h:
        (WebCore::RenderImage::isErrorImage):
        * rendering/RenderListItem.cpp:
        (WebCore::RenderListItem::setStyle):
        * rendering/RenderListMarker.cpp:
        (WebCore::RenderListMarker::isImage):

2007-02-12  Mitz Pettel  <mitz@webkit.org>

        Reviewed by Dave Hyatt.

        - fix http://bugs.webkit.org/show_bug.cgi?id=12123
          REGRESSION: Incomplete repaint of floats' overflows

        Tests: fast/repaint/float-overflow.html
               fast/repaint/float-overflow-right.html

        - fix http://bugs.webkit.org/show_bug.cgi?id=10116
          REGRESSION: Menu item drawn 2 pixels short on WWDC 2006 Attendee Site

        Reflected in existing test results.

        Unified floats and overflow for the purposes of painting and hit-testing.
        Overhanging and overflowing floats are now factored into a block's overflow
        unless their painting has been propagated to an ancestor.

        Changed table cells to no longer expand to enclose overflow, thus making
        it purely "visual overflow", having no effect on layout in WebCore. It
        still determines scrolling dimensions.

        * rendering/InlineFlowBox.cpp:
        (WebCore::InlineFlowBox::placeBoxesHorizontally): Include inline blocks'
        horizontal overflow in the inline box's dimensions.
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::layoutBlock): Removed the expand to enclose overflows
        behavior. Added code to add this block's floats (and their overflow) to its
        overflow rect if it is not in a block formatting context. Otherwise, the
        inclusion of floats in the overflow is deferred until this block's parent
        examines its floats and possibly adopts overhanging floats.
        (WebCore::RenderBlock::layoutBlockChildren):
        (WebCore::RenderBlock::paint): 
        (WebCore::RenderBlock::floatRect): Changed to return an empty rect if there
        are no floats or the floats are clipped, instead of returning the border box.
        (WebCore::RenderBlock::addOverhangingFloats): Any floats of the child that
        are not to be painted by the parent are added to the child's overflow rect.
        (WebCore::RenderBlock::addVisualOverflow): Added. Adjusts the overflow
        bounds to include the given rect.
        (WebCore::RenderBlock::nodeAtPoint):
        * rendering/RenderBlock.h:
        * rendering/RenderFlexibleBox.cpp:
        (WebCore::RenderFlexibleBox::layoutBlock): 
        (WebCore::RenderFlexibleBox::layoutHorizontalBox): After placing a normal
        child, add its floats to its overflow, since painting of floats does not
        propagate to flexible boxes. 
        (WebCore::RenderFlexibleBox::layoutVerticalBox): Ditto.
        * rendering/RenderForeignObject.cpp:
        (WebCore::RenderForeignObject::layout):
        * rendering/RenderHTMLCanvas.cpp:
        (WebCore::RenderHTMLCanvas::layout):
        * rendering/RenderImage.cpp:
        (WebCore::RenderImage::layout):
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::updateLayerPositions):
        (WebCore::RenderLayer::absoluteBoundingBox):
        * rendering/RenderLayer.h:
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::repaintAfterLayoutIfNeeded):
        * rendering/RenderObject.h:
        (WebCore::RenderObject::expandsToEncloseOverhangingFloats):
        * rendering/RenderPath.cpp:
        (WebCore::RenderPath::layout):
        * rendering/RenderSVGContainer.cpp:
        (WebCore::RenderSVGContainer::layout):
        * rendering/RenderSVGText.cpp:
        (WebCore::RenderSVGText::layout):
        * rendering/RenderTable.cpp:
        (WebCore::RenderTable::layout):
        * rendering/RenderTableCell.h:
        (WebCore::RenderTableCell::expandsToEncloseOverhangingFloats):

2007-02-12  Darin Adler  <darin@apple.com>

        Reviewed by Hyatt.

        - fix http://bugs.webkit.org/show_bug.cgi?id=12668
          <rdar://problem/4893344> REGRESSION: underline not visible for the international
          input inline hole in most text fields (12668)

        - fix bug where overline and line-through were 1px lower than we intended

        * platform/graphics/GraphicsContext.h: Removed unneeded y offset parameter.
        * platform/graphics/cairo/GraphicsContextCairo.cpp:
        (WebCore::GraphicsContext::drawLineForText): Removed bogus y offset and +1.
        * platform/graphics/cg/GraphicsContextCG.cpp:
        (WebCore::GraphicsContext::drawLineForText): Ditto.
        * platform/graphics/qt/GraphicsContextQt.cpp:
        (WebCore::GraphicsContext::drawLineForText): Ditto.

        * rendering/InlineFlowBox.cpp:
        (WebCore::InlineFlowBox::paintTextDecorations): Added the "+1" that used to be
        inside drawLineForText to the underline-drawing code. Changed the other callers
        of drawLineForText to include the y offset in the y coordinate.
        * rendering/InlineTextBox.cpp:
        (WebCore::InlineTextBox::paintDecoration): Ditto. Also renamed _tx and _ty to
        remove the gratuitious underscores.
        (WebCore::InlineTextBox::paintMarkedTextUnderline): Made the default thickness
        be 1px instead of 0 (which ends up being roughly 1px in the CG code path anyway).
        Fixed the code computing the position to put the underline at the bottom of the
        line (different from regular underlines which are put 1px under the baseline).
        The old code used to put the underline 1px further down in the thick case, and
        2px further down in the non-thick case. Both of those are bad, because they
        could be completely clipped out in many cases.

2007-02-12  Anders Carlsson  <acarlsson@apple.com>

        Reviewed by Darin.

        <rdar://problem/4846962>
        Aperture: Aperture 1.5 - DOM exception occurs when exporting a web gallery

        * dom/ContainerNode.cpp:
        (WebCore::ContainerNode::replaceChild):
        Call checkReplaceChild here.
        
        * dom/Document.cpp:
        (WebCore::Document::canReplaceChild):
        * dom/Document.h:
        Add implementation of canReplaceChild that makes sure that doing the replacement won't cause
        more than one element and document type node to end up in the document.
        
        * dom/Node.cpp:
        (WebCore::Node::canReplaceChild):
        Base implementation of canReplaceChild.
        
        (WebCore::Node::checkReplaceChild):
        New function that does what checAddChild does but calls canReplaceChild.
        
2007-02-12  Kevin Decker <kdecker@apple.com>

        Reviewed by Anders.

        Fixed: <rdar://problem/4874059> REGRESSION: Painter IX:register - Crash in WebCore:: ResourceLoader::willSendRequest()
        
        What happened here was that a WebDataSource was being dealloced *while* a load for that resource is still in progress. 

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::stopAllLoaders): Calling stopAllLoaders cancels loads and informs the frame load delegate accordingly.
        The delegate however may decide to kick off a new provisional load as the result of the cancel. Therefore a local variable 
        for the provisional and main doucment loader is introduced, and we now only nil out the provisional loader if the local and
        member provisional variables represent the exact same load.
        (WebCore::FrameLoader::continueLoadAfterNavigationPolicy): Added the same check here, too.

2007-02-12  Lars Knoll  <lars@trolltech.com>

        Reviewed by Mitz.

        Do not create child renderers for table column groups
        if the child has not a table column display type.

        * dom/Node.cpp:
        (WebCore::Node::createRendererIfNeeded):
        * rendering/RenderObject.h:
        (WebCore::RenderObject::isChildAllowed):
        * rendering/RenderTableCol.cpp:
        (WebCore::RenderTableCol::isChildAllowed):
        * rendering/RenderTableCol.h:

2007-02-12  Antti Koivisto  <antti@apple.com>

        Reviewed by Mitz

        Fix assertion failure in layout test.

        * html/HTMLMapElement.cpp:
        (WebCore::HTMLMapElement::parseMappedAttribute):

2007-02-12  Kevin McCulough  <kmccullough@apple.com>

        Reviewed by Brady.

        - Fixing a performance regression caused by r19500.  The heart of the matter
        is that we now call canLoad on every resource request even ones in the cache,
        to avoid a security issue. So I could not take out the canLoad call, but I
        but I could try to make it more efficient.

        * loader/DocLoader.cpp:
        (WebCore::DocLoader::requestResource):
        (WebCore::DocLoader::setLoadInProgress):
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::canLoad):

2007-02-12  Darin Adler  <darin@apple.com>

        Reviewed by Oliver.

        - fix http://bugs.webkit.org/show_bug.cgi?id=12677
          <rdar://problem/4759563> REGRESSION: Return key is always sent when you confirm
          a clause in kotoeri (12677)

        - fix http://bugs.webkit.org/show_bug.cgi?id=12596
          <rdar://problem/4794346> REGRESSION: Tab key shifts form field focus instead of
          navigating prediction window (12596)

        - fix http://bugs.webkit.org/show_bug.cgi?id=10010
          <rdar://problem/4822935> REGRESSION: Pressing Return with unconfirmed text in
          Hangul inserts carriage return (10010)

        - fix http://bugs.webkit.org/show_bug.cgi?id=12531
          <rdar://problem/4975126> REGRESSION: Inline text input types repeated keys in
          latest nightly (r19336) (12531)

        - fix http://bugs.webkit.org/show_bug.cgi?id=12539
          <rdar://problem/4975130> REGRESSION: Pressing Backspace while in inline input
          area moves to the previous page in history (12539)

        This area still needs work because keypress events are being sent for all the
        events before they go to the input methods, and it seems that this is not
        compatible with what other browsers do and with what sites assume. That's covered
        by this bug:

            http://bugs.webkit.org/show_bug.cgi?id=10871
            <rdar://problem/4823129> REGRESSION: IME key events different in nightly (10871)

        which is still open.

        * bindings/objc/ExceptionHandlers.h: Remove selectRange helper that doesn't really
        belong here, and also isn't needed since the callers don't want to raise ObjC
        exceptions.
        * bindings/objc/ExceptionHandlers.mm: Ditto. Also removed unneeded external globals
        that aren't exported anyway and unneeded includes.

        * bridge/EditorClient.h: Added Mac-specific function, markedTextAbandoned. Long term
        this might move into platform instead, but it's fine to have it on the client for now
        as long as it doesn't cause trouble for platforms other than Mac.

        * dom/EventTargetNode.cpp: (WebCore::EventTargetNode::defaultEventHandler): Since
        all the event handling code in this function is intended to run on the node itself,
        not parent nodes, check and do nothing if this event is bubbling up from another
        node. Added code to call a function on EventHandler for default handling of text
        input events.

        * dom/KeyboardEvent.h:
        * dom/KeyboardEvent.cpp: (WebCore::findKeyboardEvent): Added. Just like the
        findUIEventWithKeyState function, but specific to keyboard events.

        * dom/TextEvent.h: Added isLineBreak and isBackTab flags so that we can carry
        additional information about what a text input event is trying to do, but still
        go through the DOM event machinery.
        * dom/TextEvent.cpp: Ditto.

        * editing/Editor.h:
        * editing/Editor.cpp:
        (WebCore::Editor::handleKeyPress): Removed unneeded check of isCaretOrRange, since
        isContentEditable already checks that.
        (WebCore::Editor::canEdit): Ditto.
        (WebCore::Editor::canEditRichly): Ditto.
        (WebCore::Editor::canPaste): Changed to call canEdit for brevity.
        (WebCore::Editor::replaceSelectionWithText): Changed to take a const String&.
        (WebCore::Editor::shouldInsertText): Ditto.
        (WebCore::hasEditableSelection): Removed unneeded check of isCaretOrRange, since
        isContentEditable already checks that.
        (WebCore::Editor::Editor): Initialize the new m_ignoreMarkedTextSelectionChange
        flag. Moved here from WebHTMLView.
        (WebCore::Editor::insertText): Moved most of the code from -[WebHTMLView insertText:]
        here, since this needs to be done in response to a text input event and we don't want
        to go back over the WebKit side for that.
        (WebCore::Editor::insertLineBreak): Added. Moved here from -[WebHTMLView insertLineBreak:]
        for the same reason -- needs to be done in response to text input events.
        (WebCore::Editor::insertParagraphSeparator): Ditto.
        (WebCore::Editor::selectMarkedText): Added. Used by insertText.
        (WebCore::Editor::discardMarkedText): Added. Used by insertText.
        (WebCore::Editor::unmarkText): Added. Used by insertText.
        * editing/mac/EditorMac.mm:
        (WebCore::Editor::unmarkText): Added. Used by insertText.

        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::canHaveSelection): Changed to use isTextField to avoid repeating
        the switch statement.
        (WebCore::HTMLInputElement::selectionStart): Ditto.
        (WebCore::HTMLInputElement::selectionEnd): Ditto.
        (WebCore::HTMLInputElement::setSelectionStart): Ditto.
        (WebCore::HTMLInputElement::setSelectionEnd): Ditto.
        (WebCore::HTMLInputElement::select): Ditto.
        (WebCore::HTMLInputElement::setSelectionRange): Ditto.
        (WebCore::HTMLInputElement::createRenderer): Resorted cases alphaebtically.
        (WebCore::HTMLInputElement::defaultEventHandler): Added code to make hitting return cause the
        form to be submitted when it comes through as a text input event. This is now the normal case
        on Macintosh, because enter key presses normally turn into this. In addition, change the other
        event handling to run only after trying the base defaultEventHandler. That makes the key
        handling done in EventTargetNode take precedence over the event handling here for editable text
        fields, which is what we want. This gets rid of the need for the hack where we check
        inputManagerHasMarkedText and suppress the handling of the enter key.

        * page/EventHandler.h: Removed unneeded includes. Moved EventHandlerDragState down into the
        private part of the class. Changed sendContextMenuEvent to take a const&. Added new
        handleTextInputEvent and defaultTextInputEventHandler functions. Made eventLoopHandleMouseUp
        and eventLoopHandleMouseDragged private. Added private defaultTabEventHandler function.
        * page/EventHandler.cpp:
        (WebCore::EventHandler::sendContextMenuEvent): Changed parameter to be a const&.
        (WebCore::EventHandler::defaultKeyboardEventHandler): Rearranged things so that the key bindings
        handling in handleKeyPress comes before special tab event handling. In cases where the tab turns
        into text to insert, we now handle it in the text input event handler.
        (WebCore::EventHandler::handleTextInputEvent): Added. Creates and dispatches a text input event.
        (WebCore::EventHandler::defaultTextInputEventHandler): Added. Inserts text, but has special cases
        for the tab and newline character cases.
        (WebCore::EventHandler::defaultTabEventHandler): Added. Shared by the tab-handling code in
        the keyboard event and text input event handlers.
        * page/mac/EventHandlerMac.mm: Tweak formatting, remove some unused functions.

        * page/FocusController.h: Removed unnneded includes and forwards, and added an overload of
        advanceFocus that takes a FocusDirection parameter.
        * page/FocusController.cpp: (WebCore::FocusController::advanceFocus): Changed to allow a 0 for
        the event pointer. Also added a version where the direction is passed explicitly, to be used
        for cases where we want to tab backward even if the event doesn't have a shift modifier key set.

        * platform/graphics/svg/SVGImageEmptyClients.h: Updated for change to EditorClient.
        This should really probably just use 0 for the EditorClient.

        * WebCore.exp: Update both for newly used and no-longer-used entry points.

        * page/mac/WebCoreFrameBridge.h:
        * page/mac/WebCoreFrameBridge.mm: Removed two unused methods.

2007-02-12  Antti Koivisto  <antti@apple.com>

        Reviewed by Darin.

        - fixed Imagemap not clickable in www.toptenbooks.net/
        http://bugs.webkit.org/show_bug.cgi?id=12738
        
        Make imagemap names case insensitive in HTML mode

        * dom/Document.cpp:
        (WebCore::Document::getImageMap):
        * html/HTMLMapElement.cpp:
        (WebCore::HTMLMapElement::parseMappedAttribute):

2007-02-12  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Antti.

        - fixed <rdar://problem/4928675> REGRESSION: Crash in CGBlt_copyBytes under WebCore::Font::drawGlyphs (12083)
        http://bugs.webkit.org/show_bug.cgi?id=12083
        
        Test: fast/text/text-shadow-extreme-value.html

        * platform/graphics/cg/GraphicsContextCG.cpp:
        (WebCore::GraphicsContext::setShadow): Clamp shadow value to 1000px, anything more seems to 
        make CG unhappy.

2007-02-11  Brady Eidson <beidson@apple.com>

        Reviewed by Maciej.

        First in what will be a series of HistoryItem enhancements to help debugging

        * history/HistoryItem.cpp:
        (WebCore::HistoryItem::showTree):
        (WebCore::HistoryItem::showTreeWithIndent):
        (showTree): Outside of WebCore namespace, and extern "C" - to make even the 
          DWARF debugger able to find it...  *sigh* 
        * history/HistoryItem.h:

2007-02-11  Eric Seidel  <eric@webkit.org>

        Reviewed by Anders.

        - fixed <rdar://problem/4975133> ASSERT failure and crash right-clicking on image in SVG use test
        http://bugs.webkit.org/show_bug.cgi?id=12580
        
        Test: svg/cust/use-events-crash.svg

        * bindings/js/kjs_dom.cpp:
        (KJS::toJS):
        * ksvg2/svg/SVGElementInstance.cpp:
        (WebCore::SVGElementInstance::toNode):
        * ksvg2/svg/SVGElementInstance.h:

2007-02-11  Mitz Pettel  <mitz@webkit.org>

        Reviewed by Maciej.

        - fix http://bugs.webkit.org/show_bug.cgi?id=10144
          REGRESSION: Reproducible assertion failure in DeleteSelectionCommand::fixupWhitespace()

        Test: fast/text/delete-hard-break-character.html

        The bug was caused by not updating a line whose line break object and offset
        has been deleted. When deleting text, all lines containing the deleted text
        are marked dirty. However, if the first character being deleted is a newline
        which serves as a hard line break for the previous line, then that line will
        not be marked, and since it will be a clean line ending with a line break,
        relayout will begin at the next line. The fix is to check for this when
        determining where to relayout from. 

        * rendering/bidi.cpp:
        (WebCore::RenderBlock::determineStartPosition): Changed the condition for
        including the last clean line in relayout to include the case where the
        last clean line ends with a line break, but that line break is a newline that
        has been deleted.

2007-02-12  Antti Koivisto  <antti@apple.com>

        Reviewed by Maciej.
        
        REGRESSION: Google Calendar cell highlight misplaced
        http://bugs.webkit.org/show_bug.cgi?id=12687
        
        Make offsetLeft/offsetTop/offsetParent behavior match Firefox.

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

2007-02-10  Antti Koivisto  <antti@apple.com>

        Reviewed by Maciej.

        - fixed REGRESSION: No day/week scrollbar in Google Calendar
        http://bugs.webkit.org/show_bug.cgi?id=11985

        Make sure overflow:auto scrollbars are always enabled. If they were overflow:scroll
        and dynamically changed to auto they might still be disabled.

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

2007-02-11  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Hyatt.

        http://bugs.webkit.org/show_bug.cgi?id=12581
        XPath //title shouldn't match <title> in XHTML

        Test: fast/xpath/ensure-null-namespace.xhtml

        * xml/XPathStep.cpp:
        (WebCore::XPath::Step::nodeTestMatches): Only let a null namespace match any for HTML.

2007-02-10  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Adam.

        http://bugs.webkit.org/show_bug.cgi?id=12701
        REGRESSION: After javascript, onChange not triggered when selecting same option

        * html/HTMLSelectElement.cpp:
        (WebCore::HTMLSelectElement::setSelectedIndex): Remember m_lastOnChangeIndex value,
        as it can change from setSelected() now.
        (WebCore::HTMLSelectElement::notifyOptionSelected): Update m_lastOnChangeIndex.

        * manual-tests/select-onchange-after-js.html: Added. Also tests for bug 11402.

2007-02-10  David Carson  <dacarson@gmail.com>`

        Reviewed by Maciej.

        Manual tests for http://bugs.webkit.org/show_bug.cgi?id=12636
        Call different Java methods that take a variety of Array parameters
        from Javascript, passing a Javascript array.

        * manual-tests/liveconnect-applet-array-parameters.html: Added.
        * manual-tests/resources/ArrayParameterTestApplet.class: Added.
        * manual-tests/resources/ArrayParameterTestApplet.java: Added.

2007-02-10  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Maciej.

        http://bugs.webkit.org/show_bug.cgi?id=12724
        Crash when enumerating XPath namespace axis

        * xml/XPathStep.cpp:
        (WebCore::XPath::Step::nodesInAxis): Namespace axis enumeration was broken in that it crashed, and also in that
        it returned attribute nodes instead of XPath namespace ones. Removed it altogether.

2007-02-10  Mitz Pettel  <mitz@webkit.org>

        Reviewed by Adam.

        - fix http://bugs.webkit.org/show_bug.cgi?id=12565
          ASSERTION failure on some declarative animations <rdar://problem/4975132>

        * ksvg2/svg/SVGAnimationElement.cpp:
        (WebCore::parseValues): Changed the string length math to avoid truncating
        the last character of each value.
        * manual-tests/svg-animation-parseValues.svg: Added.

2007-02-10  Mitz Pettel  <mitz@webkit.org>

        Reviewed by Adam.

        - fix http://bugs.webkit.org/show_bug.cgi?id=11621
          REGRESSION (Native slider): slider thumb not updated when the mouse is dragged/released out of range

        No automated test case because dumping the render tree updates layer positions anyway.

        * manual-tests/slider-thumb-tracking.html: Added.
        * rendering/RenderSlider.cpp:
        (WebCore::RenderSlider::setCurrentPosition): Added call to updateLayerPosition()
        for the thumb's layer.

2007-02-09  Brady Eidson <beidson@apple.com>

        Reviewed by Maciej

        <rdar://problem/4965133> WebKit sends file:// url referrers

        * loader/SubresourceLoader.cpp:
        (WebCore::SubresourceLoader::create): In SubresourceLoader::create(), we make a copy of the original request
        to use for the load.  We then call FrameLoader::canLoad() which tells us if we should hide the referer.  Before 
        this fix if it said to hide the referrer, we would simply not apply a new referrer to our copy of the request.
        But if the original request already had a referrer, so did our copy.  We simply have to clear the referrer from
        the copied request.

2007-02-10  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by me, patch from Ian Eng (cleaned up by me some).

        - fixed <rdar://problem/4988091> objects attached to Window not cleared (memory leak)
        
        Test case: fast/dom/Window/window-appendages-cleared.html

        * bindings/js/kjs_window.cpp:
        (KJS::Window::clearHelperObjectProperties):
        (KJS::Window::clear):
        * bindings/js/kjs_window.h:

2007-02-09  Brady Eidson  <beidson@apple.com>

        Reviewed by Tim Hatcher

        <rdar://problem/4985497> - Plugs a potential null DocumentLoader deref when 
        transitioning out of the Bookmarks View

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::recursiveGoToItem): add a null check

2007-02-09  Beth Dakin  <bdakin@apple.com>

        Rubber-stamped by John . . . and Adam.

        * page/ContextMenuController.cpp:
        (WebCore::ContextMenuController::contextMenuItemSelected): Missing 
        break.

2007-02-09  Justin Garcia  <justin.garcia@apple.com>

        Reviewed by darin

        <rdar://problem/4975120>
        REGRESSION: double-cursor after switching window away/back (11770)
        <http://bugs.webkit.org/show_bug.cgi?id=11328>
        Gmail Editor: Caret can simultaneously appear in both the TO: and message body fields

        * page/mac/WebCoreFrameBridge.h: Removed two unused methods
        left over from the old form control implementation.

2007-02-09  John Sullivan  <sullivan@apple.com>

        * rendering/bidi.cpp:
        (WebCore::bidiNext):
        At Darin's suggestion, moved the "next = 0" line from my previous patch to the start of the loop body

2007-02-09  Justin Garcia  <justin.garcia@apple.com>

        Reviewed by john
        
        <rdar://problem/4960116>
        REGRESSION: Nightly Safari crashes in WebCore::SelectionController::xPosForVerticalArrowNavigation (12416)

        * editing/SelectionController.cpp:
        (WebCore::SelectionController::xPosForVerticalArrowNavigation):
        Null check.  VisiblePosition creation can fail if a node that 
        contains the selection was made invisible after the selection 
        was made and before this function is called during a selection 
        modification operation.

2007-02-09  Justin Garcia  <justin.garcia@apple.com>

        Reviewed by john
        
        <rdar://problem/4983858>
        REGRESSION: In a new mail message, attempting to select a single word causes the selection to extend to the previous line

        * editing/TextIterator.cpp:
        (WebCore::SimplifiedBackwardsTextIterator::exitNode):
        We recently split shouldEmitNewlineForNode into
        shouldEmitNewline{Before, After}Node, so this function now
        needs an implementation that is different from
        SimplifiedBackwardsTextIterator::handleNonTextNode.  The
        difference is that we must call shouldEmit*BeforeNode
        instead of shouldEmit*AfterNode since we are a) exiting
        nodes and b) moving backward.

2007-02-09  Justin Garcia  <justin.garcia@apple.com>

        Reviewed by john

        <rdar://problem/4916541>
        Some of the selection isn't preserved during an Indent opreration

        * editing/IndentOutdentCommand.cpp:
        (WebCore::indexForVisiblePosition): Added.
        (WebCore::IndentOutdentCommand::indentRegion): Use rangeLength
        and rangeFromLocationAndLength to restore the selection after
        the repeated moveParagraph calls necessary to perform indent are
        finished.

2007-02-09  John Sullivan  <sullivan@apple.com>

        Reviewed by Kevin Decker
        
        - fixed <rdar://problem/4960095> REPRODUCIBLE HANG: WebKit freezes when printing as PDF
          a certain kind of code (12449)
 
        No test case because I don't know how to make the bug occur without printing.

        * rendering/bidi.cpp:
        (WebCore::bidiNext):
        reset loop's "next" variable after using it; we were setting "current" to the same value
        of "next" each subsequent time through the loop, which is not helpful.

2007-02-09  Darin Adler  <darin@apple.com>

        Reviewed by Adele.

        - Add TextEvent to the DOM (based on the proposed DOM level 3)
          to be used to fix some international input bugs soon.
          At this point, we don't send any text events.

        - Remove some obsolete files.

        * CMakeLists.txt:
        * WebCore.pro:
        * WebCore.xcodeproj/project.pbxproj:
        * WebCoreSources.bkl:
        Add new files, remove obsolete files.

        * DerivedSources.make: Add TextEvent to the Objective-C and JavaScript bindings lists.
        * WebCore.exp: Export DOMTextEvent Objective-C wrapper.

        * bindings/js/kjs_events.cpp: (KJS::toJS): Added TextEvent to the list of Event subclasses
        so we make the right kind of JS wrapper.
        * bindings/objc/DOMEvents.mm: (+[DOMEvent _eventWith:]): Same thing, for Objective-C.

        * bindings/objc/DOMInternal.h: Added DOMTextEventInternal.h.

        * dom/DOMImplementation.cpp: (WebCore::DOMImplementation::hasFeature):
        Added "TextEvents", "3.0" to the list of things we'll answer true for
        (as specified in the DOM Level 3 documentation).
        This isn't so great until we actually send textInput events, but that's coming soon.

        * dom/Document.cpp: (WebCore::Document::createEvent): Add "TextEvent" as a way to make
        a TextEvent (as specified in the DOM Level 3 documentation).

        * dom/Event.h:
        * dom/Event.cpp: (WebCore::Event::isTextEvent): Added virtual function to be used
        for runtime type checking of Event objects (as for other event types).

        * dom/TextEvent.cpp: Added.
        * dom/TextEvent.h: Added.
        * dom/TextEvent.idl: Added.

        * platform/mac/WebCoreWidgetHolder.h: Removed.
        * rendering/CounterListItem.h: Removed.
        * rendering/CounterResetNode.cpp: Removed.
        * rendering/CounterResetNode.h: Removed.

2007-02-09  Anders Carlsson  <acarlsson@apple.com>

        Reviewed by Geoff.

        <rdar://problem/4816376> 
        REGRESSION: NetNewsWire 3.0 - Crashes in WebDocumentLoaderMac::attachToFrame() (12674)
        
        The bug was that the NNW policy delegate never calls back on the policy listener so we'll try to do a load
        while there's a policy decision underway. The extra call to setPolicyDocumentLoader would cause a detached (and deallocated)
        WebDataSource to be reattached and thus causing a crash.
        
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::load):
        Remove extra call to setPolicyDocumentLoader.

2007-02-09  Beth Dakin  <bdakin@apple.com>

        Reviewed by Darin.

        Fix for <rdar://problem/4674537> REGRESSION: Adobe Acrobat 8 - Text 
        blinks when mouse is moved, and is invisible otherwise

        Acrobat 8 was relying on a WebKit bug that was fixed about a year 
        ago with r12753. The bug was that we would not reload a page if the 
        source of an iframe was set to the same value it already was. Now 
        that we have fixed the bug, Acrobat constantly reloads their EULA, 
        making it blinky and impossible to read. 

        No layout test since the fix is to add an Acrobat-specific quirk.

        * WebCore.exp:
        * html/HTMLFrameElementBase.cpp:
        (WebCore::HTMLFrameElementBase::setLocation): If the new url is the 
        same as the old one and we are honoring the Acrobat quirk, don't do 
        anything.
        * page/Settings.cpp:
        (WebCore::Settings::Settings):
        (WebCore::Settings::setNeedsAcrobatFrameReloadingQuirk):
        * page/Settings.h:
        (WebCore::Settings::needsAcrobatFrameReloadingQuirk):

2007-02-09  Brady Eidson  <beidson@apple.com>

        Rubberstamped by Dave Harrison

        Disable the thread-check assertion in WebCore, as well as Webkit

        * WebCore.xcodeproj/project.pbxproj:

2007-02-08  Anders Carlsson  <acarlsson@apple.com>

        Reviewed by Geoff.

        No need to pause timeout checks anymore.
        
        * bindings/js/kjs_window.cpp:
        (KJS::WindowFunc::callAsFunction):

2007-02-09  John Sullivan  <sullivan@apple.com>

        Reviewed by Beth
        
        - WebCore part of fix for radar 4939636, problems with context menu items and binaries linked
          against WebKit 2.0.

        * platform/ContextMenuItem.h:
        (WebCore::):
        Tweaked comment; bumped enum value for new SPI tags to avoid conflict with pre-3.0 SPI tag values.

2007-02-09  Nicholas Shanks  <webkit@nickshanks.com>

        Reviewed by Dave Hyatt.

        Removed broken recognition of :last-* and :only-* selectors

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

2007-02-09  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Mark.

        <rdar://problem/4980176>

        * page/Frame.cpp:
        (WebCore::Frame::pageDestroyed): Since this frame is getting
        disconnected from its page, ensure it is not the focus node.

2007-02-09  Krzysztof  <kkowalczyk@gmail.com>

        Reviewed by Maciej.

        gdklauncher crashes when compiled with NDEBUG defined.

        * Projects/gdk/webcore-gdk.bkl:

2007-02-09  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Mitz.

        <rdar://problem/4971224> REGRESSION: ASSERT in WebCore with Mail (12491)
        http://bugs.webkit.org/show_bug.cgi?id=12491

        No test case. Not testable since there is no way to do substitute
        data loads from layout tests.
        
        * loader/MainResourceLoader.cpp:
        (WebCore::MainResourceLoader::continueAfterContentPolicy): Don't dispatch data load
        callback when loading empty data.

2007-02-09  Mark Rowe  <mrowe@apple.com>

        Reviewed by Maciej.

        http://bugs.webkit.org/show_bug.cgi?id=12705
        REGRESSION: Crash with user stylesheet set

        Allow the Frame::canLoad check to skipped so that user stylesheets can be loaded in remote documents.

        * ChangeLog:
        * loader/DocLoader.cpp:
        (WebCore::DocLoader::requestCSSStyleSheet): Skip canLoad check if this is a user stylesheet.
        (WebCore::DocLoader::requestUserCSSStyleSheet):
        (WebCore::DocLoader::requestResource): Allow canLoad check to be skipped.
        * loader/DocLoader.h:
        * page/Frame.cpp:
        (WebCore::UserStyleSheetLoader::UserStyleSheetLoader):

2007-02-08  Krzysztof Kowalczyk  <kkowalczyk@gmail.com>

        Reviewed by Darin.

        Linux/gdk build fixes.

        * Projects/gdk/webcore-gdk.bkl: Account for file renaming.
        * platform/gdk/KeyEventGdk.cpp: Make gdk's tab key recognized as tab so that
        keyboard link walking works on gdk.
        (WebCore::keyIdentifierForGdkKeyCode):

2007-02-08  Adele Peterson  <adele@apple.com>

        Reviewed by Brady.

        Fix for http://bugs.webkit.org/show_bug.cgi?id=12599
        <rdar://problem/4973507> REGRESSION: When replying in Gmail, the caret disappears when you start to type (12599)

        When a frame's window was focused, the page didn't get updated about the new frame getting focus.
        This was causing handleKeyPress to fail because it kept getting a selection for the wrong frame (which wasn't editable).

        Test: fast/frames/iframe-window-focus.html

        * page/Frame.cpp:
        (WebCore::Frame::focusWindow):
        (WebCore::Frame::unfocusWindow):
        * page/Frame.h:
        * page/mac/FrameMac.mm:
        (WebCore::FrameMac::focusWindow):
        (WebCore::FrameMac::unfocusWindow):

2007-02-08  Adele Peterson  <adele@apple.com>

        Reviewed by Brady.

        Fix for http://bugs.webkit.org/show_bug.cgi?id=12480
        <rdar://problem/4971222> REGRESSION (NativeListBox): Deselecting option causes list to jump to top

        Test: fast/forms/listbox-deselect-scroll.html

        * html/HTMLSelectElement.cpp:
        (WebCore::HTMLSelectElement::activeSelectionStartListIndex): Added.  Returns the index for the active selection.  If there is no active selection,
         it returns the first selected index.
        (WebCore::HTMLSelectElement::activeSelectionEndListIndex): Added.  If there is no active selection, it returns the last selected index.
        * html/HTMLSelectElement.h:
        * rendering/RenderListBox.cpp: (WebCore::RenderListBox::scrollToRevealSelection): Instead of using the first and last selected indices,
          use the active selection indices to determine which item to reveal.  This way, when you're selecting with the keyboard, or the mouse,
          no unnecessary scrolling will occur if the end of your active selection is already visible.

2007-02-08  Adele Peterson  <adele@apple.com>

        Reviewed by Hyatt.

        Fix for <rdar://problem/4963411> Items of SELECT element are incorrectly highlighted when display:block is set

        Test: fast/forms/select-block-background.html

        * rendering/RenderListBox.cpp: (WebCore::RenderListBox::paintObject):
          Paint the item backgrounds during the PaintPhaseChildBlockBackground or PaintPhaseChildBlockBackgrounds phase.

2007-02-08  Mitz Pettel  <mitz@webkit.org>

        Reviewed by Adele.

        - fix http://bugs.webkit.org/show_bug.cgi?id=11047
          REGRESSION: Empty options cause the entire select to collapse
        
        Test: fast/forms/select-empty-option-height.html

        - fix http://bugs.webkit.org/show_bug.cgi?id=10783
          REGRESSION (r16044): Clicking a popup changes layout around it

        * rendering/RenderMenuList.cpp:
        (WebCore::RenderMenuList::setText): If the option text is empty, use a RenderBR
        as inner text, to ensure that the inner div has line height.

2007-02-08  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Beth Dakin.

        Added a hard counter for SubresourceLoaders because the leaks tool now
        ignores them.
        
        * loader/SubresourceLoader.cpp:
        (WebCore::):
        (WebCore::SubresourceLoaderCounter::~SubresourceLoaderCounter):
        (WebCore::SubresourceLoader::SubresourceLoader):
        (WebCore::SubresourceLoader::~SubresourceLoader):
        * page/Frame.cpp: Removed unnecessary #define

2007-02-08  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Beth Dakin.

        Fixed <rdar://problem/4982374> CSSComputedStyleDeclaration::getPropertyCSSValue 
        leak reported by buildbot
        
        The leak was a typo: "new" instead of "return new". I also generously
        deployed RefPtr in places that were holding ref-counted objects in
        bare pointers.

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::valueForShadow):
        (WebCore::CSSComputedStyleDeclaration::getPropertyCSSValue):

2007-02-08  Krzysztof Kowalczyk  <kkowalczyk@gmail.com>

        Reviewed by Adam Roben.

        Linux/gdk build fixes.

        * platform/gdk/EditorClientGdk.cpp: Added. Based on qt version.
        (WebCore::EditorClientGdk::shouldDeleteRange):
        (WebCore::EditorClientGdk::shouldShowDeleteInterface):
        (WebCore::EditorClientGdk::isContinuousSpellCheckingEnabled):
        (WebCore::EditorClientGdk::isGrammarCheckingEnabled):
        (WebCore::EditorClientGdk::spellCheckerDocumentTag):
        (WebCore::EditorClientGdk::shouldBeginEditing):
        (WebCore::EditorClientGdk::shouldEndEditing):
        (WebCore::EditorClientGdk::shouldInsertText):
        (WebCore::EditorClientGdk::shouldApplyStyle):
        (WebCore::EditorClientGdk::didBeginEditing):
        (WebCore::EditorClientGdk::respondToChangedContents):
        (WebCore::EditorClientGdk::didEndEditing):
        (WebCore::EditorClientGdk::didWriteSelectionToPasteboard):
        (WebCore::EditorClientGdk::didSetSelectionTypesForPasteboard):
        (WebCore::EditorClientGdk::selectWordBeforeMenuEvent):
        (WebCore::EditorClientGdk::isEditable):
        (WebCore::EditorClientGdk::registerCommandForUndo):
        (WebCore::EditorClientGdk::registerCommandForRedo):
        (WebCore::EditorClientGdk::clearUndoRedoOperations):
        (WebCore::EditorClientGdk::canUndo):
        (WebCore::EditorClientGdk::canRedo):
        (WebCore::EditorClientGdk::undo):
        (WebCore::EditorClientGdk::redo):
        (WebCore::EditorClientGdk::shouldInsertNode):
        (WebCore::EditorClientGdk::pageDestroyed):
        (WebCore::EditorClientGdk::smartInsertDeleteEnabled):
        (WebCore::EditorClientGdk::toggleContinuousSpellChecking):
        (WebCore::EditorClientGdk::toggleGrammarChecking):
        (WebCore::EditorClientGdk::handleKeyPress):
        (WebCore::EditorClientGdk::EditorClientGdk):
        (WebCore::EditorClientGdk::setPage):
        * platform/gdk/EditorClientGdk.h: Added. Ditto.
        * platform/gdk/FrameGdk.cpp: Add exitAfterLoading and dumpRenderTreeAfterLoading
        as small debugging features. Remove FrameGdkClient as no other platform has Frame*Client
        anymore. Adjust for new APIs.
        (WebCore::FrameGdk::FrameGdk):
        (WebCore::FrameGdk::onDidFinishLoad):
        (WebCore::FrameGdk::dumpRenderTree):
        (WebCore::FrameGdk::keyPress):
        (WebCore::FrameGdk::handleGdkEvent):
        (WebCore::FrameGdk::focusWindow):
        (WebCore::FrameGdk::unfocusWindow):
        (WebCore::FrameGdk::getObjectInstanceForWidget):
        (WebCore::FrameGdk::getEmbedInstanceForWidget):
        (WebCore::FrameGdk::bindingRootObject):
        (WebCore::FrameGdk::print):
        (WebCore::FrameGdk::getAppletInstanceForWidget):
        (WebCore::FrameGdk::issueCutCommand):
        (WebCore::FrameGdk::issueCopyCommand):
        (WebCore::FrameGdk::issuePasteCommand):
        (WebCore::FrameGdk::issueTransposeCommand):
        (WebCore::FrameGdk::issuePasteAndMatchStyleCommand):
        (WebCore::FrameGdk::markedTextRange):
        (WebCore::FrameGdk::shouldChangeSelection):
        (WebCore::FrameGdk::respondToChangedSelection):
        (WebCore::FrameGdk::mimeTypeForFileName):
        * platform/gdk/FrameGdk.h: Ditto.
        (WebCore::FrameGdk::setExitAfterLoading):
        (WebCore::FrameGdk::exitAfterLoading):
        (WebCore::FrameGdk::setDumpRenderTreeAfterLoading):
        (WebCore::FrameGdk::dumpRenderTreeAfterLoading):
        (WebCore::GdkFrame):
        * platform/gdk/TemporaryLinkStubs.cpp: Adjust to new APIs. Small cleanups.
        (FrameView::updateBorder):
        (Widget::setEnabled):
        (Widget::isEnabled):
        (Widget::enableFlushDrawing):
        (Widget::removeFromParent):
        (Widget::paint):
        (Widget::setIsSelected):
        (Widget::invalidate):
        (Widget::invalidateRect):
        (PlatformMouseEvent::PlatformMouseEvent):
        (WebCore::findWordBoundary):
        (ChromeClientGdk::chromeDestroyed):
        (ChromeClientGdk::closeWindowSoon):
        (ChromeClientGdk::canTakeFocus):
        (ChromeClientGdk::takeFocus):
        (ChromeClientGdk::canRunBeforeUnloadConfirmPanel):
        (ChromeClientGdk::addMessageToConsole):
        (ChromeClientGdk::runBeforeUnloadConfirmPanel):
        (ChromeClientGdk::runJavaScriptAlert):
        (ChromeClientGdk::runJavaScriptConfirm):
        (ChromeClientGdk::runJavaScriptPrompt):
        (ChromeClientGdk::setStatusbarText):
        (ChromeClientGdk::shouldInterruptJavaScript):
        (WebCore::inputElementAltText):
        (WebCore::resetButtonDefaultLabel):
        (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):
        (PlugInInfoStore::createPluginInfoForPluginAtIndex):
        (PlugInInfoStore::pluginCount):
        (WebCore::PlugInInfoStore::supportsMIMEType):
        (WebCore::refreshPlugins):
        (SearchPopupMenu::saveRecentSearches):
        (SearchPopupMenu::loadRecentSearches):
        (SearchPopupMenu::SearchPopupMenu):
        (Path::apply):
        (PlatformScrollbar::PlatformScrollbar):
        (PlatformScrollbar::~PlatformScrollbar):
        (PlatformScrollbar::width):
        (PlatformScrollbar::height):
        (PlatformScrollbar::setEnabled):
        (PlatformScrollbar::paint):
        (PlatformScrollbar::updateThumbPosition):
        (PlatformScrollbar::updateThumbProportion):
        (PlatformScrollbar::setRect):
        (ResourceHandle::willLoadFromCache):
        (ResourceHandle::loadsBlocked):
        (ResourceHandle::loadResourceSynchronously):
        (PageCache::close):
        (Editor::ignoreSpelling):
        (Editor::learnSpelling):
        (Editor::isSelectionUngrammatical):
        (Editor::isSelectionMisspelled):
        (Editor::guessesForMisspelledSelection):
        (Editor::guessesForUngrammaticalSelection):
        (Editor::markMisspellingsAfterTypingToPosition):
        (Editor::newGeneralClipboard):
        (Pasteboard::generalPasteboard):
        (Pasteboard::writeSelection):
        (Pasteboard::writeURL):
        (Pasteboard::clear):
        (Pasteboard::canSmartReplace):
        (Pasteboard::documentFragment):
        (Pasteboard::plainText):
        (Pasteboard::Pasteboard):
        (Pasteboard::~Pasteboard):
        (ContextMenu::ContextMenu):
        (ContextMenu::~ContextMenu):
        (ContextMenu::appendItem):
        (ContextMenu::setPlatformDescription):
        (ContextMenu::platformDescription):
        (ContextMenuItem::ContextMenuItem):
        (ContextMenuItem::~ContextMenuItem):
        (ContextMenuItem::releasePlatformDescription):
        (ContextMenuItem::type):
        (ContextMenuItem::setType):
        (ContextMenuItem::action):
        (ContextMenuItem::setAction):
        (ContextMenuItem::title):
        (ContextMenuItem::setTitle):
        (ContextMenuItem::platformSubMenu):
        (ContextMenuItem::setSubMenu):
        (ContextMenuItem::setChecked):
        (ContextMenuItem::setEnabled):
        (WebCore::systemBeep):
        (WebCore::userIdleTime):

2007-02-08  Krzysztof Kowalczyk  <kkowalczyk@gmail.com>

        Reviewed by Adam Roben.

        Linux/gdk build fixes.

        * platform/GlyphPageTreeNode.h: Fix header guard name.
        * platform/gdk/ChromeClientGdk.h:
        * platform/gdk/CursorGdk.cpp:
        (WebCore::verticalTextCursor):
        (WebCore::cellCursor):
        (WebCore::contextMenuCursor):
        (WebCore::noDropCursor):
        (WebCore::copyCursor):
        (WebCore::progressCursor):
        (WebCore::aliasCursor):
        * platform/gdk/MouseEventGdk.cpp:
        (WebCore::PlatformMouseEvent::PlatformMouseEvent):
        * platform/gdk/PageGdk.cpp: Removed. No longer used.
        * platform/gdk/RenderThemeGdk.cpp:
        (WebCore::RenderThemeGdk::getThemeData):
        (WebCore::RenderThemeGdk::setCheckboxSize):
        (WebCore::RenderThemeGdk::paintCheckbox):
        (WebCore::RenderThemeGdk::setRadioSize):
        (WebCore::RenderThemeGdk::paintRadio):
        (WebCore::RenderThemeGdk::paintButton):
        (WebCore::RenderThemeGdk::adjustTextFieldStyle):
        (WebCore::RenderThemeGdk::paintTextField):
        (WebCore::RenderThemeGdk::paintTextArea):
        (WebCore::RenderThemeGdk::systemFont):
        * platform/gdk/RenderThemeGdk.h:
        * platform/gdk/ScreenGdk.cpp:
        (WebCore::screenDepth):
        (WebCore::screenDepthPerComponent):
        (WebCore::screenIsMonochrome):
        (WebCore::screenRect):
        (WebCore::screenAvailableRect):

2007-02-08  Krzysztof Kowalczyk  <kkowalczyk@gmail.com>

        Reviewed by Adam Roben.

        Linux/gdk build fixes for cairo.

        * platform/graphics/GraphicsContext.cpp:
        * platform/graphics/cairo/GraphicsContextCairo.cpp:
        (WebCore::GraphicsContext::GraphicsContext):
        (WebCore::GraphicsContext::strokeArc):
        (WebCore::GraphicsContext::drawFocusRing):
        (WebCore::GraphicsContext::setFocusRingClip):
        (WebCore::GraphicsContext::clearFocusRingClip):
        (WebCore::GraphicsContext::drawLineForMisspellingOrBadGrammar):
        (WebCore::GraphicsContext::origin):
        (WebCore::GraphicsContext::setPlatformFillColor):
        (WebCore::GraphicsContext::setPlatformStrokeColor):
        (WebCore::GraphicsContext::setPlatformStrokeThickness):
        (WebCore::GraphicsContext::setPlatformStrokeStyle):
        (WebCore::GraphicsContext::setPlatformFont):
        (WebCore::GraphicsContext::setURLForRect):
        (WebCore::GraphicsContext::addRoundedRectClip):
        (WebCore::GraphicsContext::addInnerRoundedRectClip):
        (WebCore::GraphicsContext::setShadow):
        (WebCore::GraphicsContext::clearShadow):
        (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::toCairoOperator):
        (WebCore::GraphicsContext::setCompositeOperation):
        (WebCore::GraphicsContext::clip):
        (WebCore::GraphicsContext::rotate):
        (WebCore::GraphicsContext::scale):
        (WebCore::GraphicsContext::clipOut):
        (WebCore::GraphicsContext::clipOutEllipseInRect):
        (WebCore::GraphicsContext::fillRoundedRect):

2007-02-08  Krzysztof Kowalczyk  <kkowalczyk@gmail.com>

        Reviewed by Adam Roben.

        Linux/gdk build fixes.

        * Projects/gdk/webcore-gdk.bkl:
        * WebCoreSources.bkl:
        * webcore-base.bkl:

2007-02-08  Brady Eidson  <beidson@apple.com>

        Reviewed by Tim Hatcher

        Tweaked the thread violation behavior to be disabled by default, and to provide
        an easy breakpoint to set.  
        The possibilities for the "WebCoreThreadCheck" user defaults key are -
          - The value "None" disables thread checking
          - The value "Log" causes an NSLog on a violation
          - The value "Exception" causes exceptions to be raised on a violation

        * platform/Logging.h:
        * platform/mac/LoggingMac.mm:
        (WebCore::_WebCoreThreadViolationCheck):
        (WebCoreReportThreadViolation):  In the global namespace, making breakpoints cake!

2007-02-08  Brady Eidson  <beidson@apple.com>

        Reviewed by Tim Hatcher

        <rdar://problem/4983515> Need mechanism to protect against WebKit calls from secondary threads
        This initial landing is a conservative move until we can be certain of performance impact.
        By writing to the user defaults key @"WebCoreThreadCheck" for the WebKit app you're running -
          - The value "None" disables thread checking
          - The value "Exception" causes exceptions to be raised on a violation
          - The default is to do the check, and NSLog each violation

        * bindings/objc/ExceptionHandlers.h:  Add a "Is Main Thread" assert macro
        * bindings/scripts/CodeGeneratorObjC.pm: Use new mechanism in allocs and deallocs for now

        * platform/Logging.h: Added WebCoreThreadViolationCheck macro
        * platform/mac/LoggingMac.mm:
        (WebCore::_WebCoreThreadViolationCheck): Check for main-threadedness, and do some stuff

2007-02-08  Kevin McCullough  <KMcCullough@apple.com>

        Reviewed by Maciej, Darin, and Mark.

        rdar://problem/4922454
        - Prevents remote sites from executing local scripts.

        * bindings/objc/DOM.mm: - renamed a function that is now in the base class
        (-[DOMElement image]):
        (-[DOMElement _imageTIFFRepresentation]):
        * dom/XMLTokenizer.cpp: - removed needless asserts
        (WebCore::XMLTokenizer::notifyFinished):
        * html/HTMLImageLoader.cpp: - renamed a function that is now in the base class
        (WebCore::HTMLImageLoader::dispatchLoadEvent):
        * html/HTMLTokenizer.cpp: - removed needless asserts
        (WebCore::HTMLTokenizer::reset):
        (WebCore::HTMLTokenizer::notifyFinished):
        * ksvg2/misc/SVGImageLoader.cpp: - renamed a function that is now in the base class
        (WebCore::SVGImageLoader::dispatchLoadEvent):
        * loader/Cache.cpp: - return early if an error occured
        (WebCore::Cache::requestResource):
        (WebCore::Cache::remove):
        * loader/CachedImage.h: - renamed a function that is now in the base class
        (WebCore::CachedImage::canRender):
        * loader/CachedResource.h: - renamed a function that is now in the base class
        (WebCore::CachedResource::errorOccurred):
        * loader/CachedScript.h: - renamed a function that is now in the base class 
        (WebCore::CachedScript::schedule):
        * loader/DocLoader.cpp: - The heart of the fix, prevents resources from being created or retrieved from the cache if a remote site is requesting the local resource.
        (WebCore::DocLoader::requestResource):
        (WebCore::DocLoader::setLoadInProgress):
        * page/EventHandler.cpp: - renamed a function that is now in the base class
        (WebCore::selectCursor):
        * rendering/HitTestResult.cpp: - renamed a function that is now in the base class
        (WebCore::HitTestResult::image):
        * rendering/RenderImage.cpp: - renamed a function that is now in the base class
        (WebCore::RenderImage::setCachedImage):
        (WebCore::RenderImage::imageChanged):
        (WebCore::RenderImage::paint):
        (WebCore::RenderImage::layout):
        (WebCore::RenderImage::calcAspectRatioWidth):
        (WebCore::RenderImage::calcAspectRatioHeight):
        * rendering/RenderImage.h: - renamed a function that is now in the base class
        (WebCore::RenderImage::errorOccurred):
        * rendering/RenderListItem.cpp: - renamed a function that is now in the base class
        (WebCore::RenderListItem::setStyle):
        * rendering/RenderListMarker.cpp: - renamed a function that is now in the base class
        (WebCore::RenderListMarker::isImage):

2007-02-07  Krzysztof Kowalczyk  <kkowalczyk@gmail.com>

        Reviewed by Maciej.

        Add updateGeometry() to gdk's ScrollView. Needed to fix resizing of the window
        in gdk.

        * platform/ScrollView.h:
        * platform/gdk/ScrollViewGdk.cpp:
        (WebCore::ScrollView::updateGeometry):
        (WebCore::ScrollView::setDrawable):

2007-02-07  Krzysztof Kowalczyk  <kkowalczyk@gmail.com>

        Reviewed by Maciej.

        Linux/gdk build fixes.

        * platform/ContextMenuItem.h:
        * platform/PlatformMenuDescription.h:
        * platform/gdk/PopupMenuGdk.cpp: Added. Renamed from RenderPopupMenuGdk.cpp for
        consistency with other platforms.
        (WebCore::PopupMenu::PopupMenu):
        (WebCore::PopupMenu::~PopupMenu):
        * platform/gdk/RenderPopupMenuGdk.cpp: Removed.
        * platform/gdk/RenderPopupMenuGdk.h: Removed.

2007-02-07  Mitz Pettel  <mitz@webkit.org>

        Reviewed by Maciej.

        - fix http://bugs.webkit.org/show_bug.cgi?id=12608
          Incorrect min. width calculation of a series of floats with clear:both and white-space:nowrap

        Test: fast/block/float/nowrap-clear-min-width.html

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::calcInlineMinMaxWidth):

2007-02-07  Mitz Pettel  <mitz@webkit.org>

        Reviewed by Dave Hyatt.

        - fix http://bugs.webkit.org/show_bug.cgi?id=10522
          REGRESSION: Incomplete repaint after table relayout that decreases height

        Test: fast/repaint/intermediate-layout-position.html

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::layoutBlock): Adjust the old bounds by the layout delta,
        to get the block's absolute bounds as they were before its ancestors moved it
        during layout.
        (WebCore::RenderBlock::collapseMargins): Update the layout delta for the child
        when moving it.
        (WebCore::RenderBlock::clearFloatsIfNeeded): Ditto.
        (WebCore::RenderBlock::determineHorizontalPosition): Ditto.
        (WebCore::RenderBlock::layoutBlockChildren): Ditto.
        * rendering/RenderFlexibleBox.cpp:
        (WebCore::RenderFlexibleBox::layoutBlock): Adjust the old bounds by the current
        layout delta.
        * rendering/RenderHTMLCanvas.cpp:
        (WebCore::RenderHTMLCanvas::layout): Ditto.
        * rendering/RenderImage.cpp:
        (WebCore::RenderImage::layout): Ditto.
        * rendering/RenderTable.cpp:
        (WebCore::RenderTable::layout): Ditto.
        * rendering/RenderView.h:
        (WebCore::RenderView::layoutDelta): Added. Keeps track of the offset between
        the position of the object currently being laid out and its position at the
        end of the last layout.
        (WebCore::RenderView::addLayoutDelta): Added.

2007-02-07  Christopher Brichford  <chrisb@adobe.com>

        Reviewed by Brady.

        http://bugs.webkit.org/show_bug.cgi?id=6286
        Very large (~500MB) images cause reproducible Safari crash

        * loader/CachedImage.cpp: 
        (WebCore::CachedImage::bufferData): Detect failure to create a
        large Vector<> and call error() when that happens.

2007-02-07  Mitz Pettel  <mitz@webkit.org>

        Reviewed by Dave Hyatt.

        - fix http://bugs.webkit.org/show_bug.cgi?id=5399
          no-repeat on negatively positioned background images are ignored

        Test: fast/backgrounds/repeat/negative-offset-repeat.html

        - fix http://bugs.webkit.org/show_bug.cgi?id=5821
          Changing background of <col> doesn't repaint the column

        Test: fast/repaint/table-col-background.html

        - fix http://bugs.webkit.org/show_bug.cgi?id=11720
          REGRESSION: large amounts of CPU consumed viewing this site

        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::imageChanged): Added. Finds the border and/or background
        layer(s) that use the image and invalidates only the rect in which the image
        actually paints. There are two special cases in this function: 1) for the body
        element, the background is propagated to the root; 2) inline flows do a full
        repaint.
        (WebCore::RenderBox::calculateBackgroundImageGeometry): Added. Factored out,
        simplified and corrected the calculation of the rectangle into which the background
        image paints, the tile size and the pattern phase.
        (WebCore::RenderBox::paintBackgroundExtended):
        * rendering/RenderBox.h:
        * rendering/RenderObject.cpp:
        * rendering/RenderObject.h:
        (WebCore::RenderObject::imageChanged): Moved the implementation to RenderBox.
        * rendering/RenderTableCol.cpp:
        (WebCore::RenderTableCol::getAbsoluteRepaintRect): Overridden to return the
        table's repaint rect.
        (WebCore::RenderTableCol::imageChanged): Overridden to do a full repaint, which
        currently repaints the entire table.
        * rendering/RenderTableCol.h:
        * rendering/RenderTableRow.cpp:
        (WebCore::RenderTableRow::imageChanged): Overridden to do a full repaint
        of the row, since the backgrounds are painted by the cells.
        * rendering/RenderTableRow.h:
        * rendering/RenderTableSection.cpp:
        (WebCore::RenderTableSection::imageChanged): Overridden to do a full
        repaint of the section, since the backgrounds are painted by the cells.
        * rendering/RenderTableSection.h:

2007-02-07  Anders Carlsson  <acarlsson@apple.com>

        Reviewed by Maciej.

        Move shouldInterruptJavaScript to the Chrome.

        * bindings/js/kjs_binding.cpp:
        (KJS::ScriptInterpreter::shouldInterruptScript):
        * page/Chrome.cpp:
        (WebCore::Chrome::shouldInterruptJavaScript):
        * page/Chrome.h:
        * page/ChromeClient.h:
        * page/Frame.h:
        * page/mac/FrameMac.h:
        * page/mac/FrameMac.mm:
        * page/mac/WebCoreFrameBridge.h:
        * platform/graphics/svg/SVGImageEmptyClients.h:
        (WebCore::SVGEmptyChromeClient::shouldInterruptJavaScript):

2007-02-07  Darin Adler  <darin@apple.com>

        Reviewed by Maciej.

        - <rdar://problem/4826861> WebKit tests show memory leaks in NSHTMLReader, caused by method named "hash"

        * bindings/scripts/CodeGeneratorObjC.pm: Added a list of method names we should never use, since they
        are in base classes WebScriptObject and NSObject. Luckily, only "hash" is causing trouble. Added
        "hash" to the existing special case for "id". Now "hash" is "hashName" just as "id" is "idName".

2007-02-07  Krzysztof Kowalczyk  <kkowalczyk@gmail.com>

        Reviewed by Adam Roben.

        Linux/gdk build fixes for graphics-related stuff.

        * platform/graphics/cairo/ImageCairo.cpp:
        (WebCore::BitmapImage::checkForSolidColor):
        * platform/graphics/cairo/ImageSourceCairo.cpp:
        (WebCore::ImageSource::setData):
        * platform/graphics/gdk/ImageGdk.cpp:
        (WebCore::BitmapImage::initPlatformData):
        (WebCore::BitmapImage::invalidatePlatformData):
        (WebCore::Image::loadPlatformResource):
        (WebCore::Image::drawPattern):

2007-02-07  Krzysztof Kowalczyk  <kkowalczyk@gmail.com>

        Reviewed by Maciej.

        Linux/gdk build fixes related to networking.

        * platform/network/ResourceHandleInternal.h: Add accessor for m_client.
        (WebCore::ResourceHandleInternal::client):
        * platform/network/gdk/ResourceHandleCurl.cpp: Add missing functions and
        massage for changed APIs.
        (WebCore::ResourceHandle::start):
        (WebCore::ResourceHandle::cancel):
        (WebCore::ResourceHandle::bufferedData):
        (WebCore::ResourceHandle::supportsBufferedData):
        (WebCore::ResourceHandle::setDefersLoading):
        * platform/network/gdk/ResourceHandleManager.cpp: Rename get() to
        sharedInstance(). Massaged for changed APIs.
        (WebCore::ResourceHandleManager::sharedInstance):
        (WebCore::writeCallback):
        (WebCore::ResourceHandleManager::downloadTimerCallback):
        (WebCore::ResourceHandleManager::remove):
        * platform/network/gdk/ResourceHandleManager.h: Ditto.

2007-02-07  Krzysztof Kowalczyk  <kkowalczyk@gmail.com>

        Reviewed by Maciej.

        Mismatched type of alloc/free function crashes gdk build.

        * platform/image-decoders/jpeg/JPEGImageDecoder.cpp:
        (WebCore::JPEGImageReader::close):

2007-02-07  Krzysztof Kowalczyk  <kkowalczyk@gmail.com>

        Reviewed by Adam Roben.

        Linux/gdk build fixes - add file based on qt implementation.

        * platform/DragData.h:
        * platform/gdk/DragDataGdk.cpp: Added.

2007-02-07  Krzysztof Kowalczyk  <kkowalczyk@gmail.com>

        Reviewed by Adam Roben.

        Linux/gdk build fixes - add new files based on qt implementation.

        * page/gdk/DragControllerGdk.cpp: Added.
        (WebCore::DragController::dragOperation):
        * page/gdk/EventHandlerGdk.cpp: Added.
        (WebCore::EventHandler::focusDocumentView):
        (WebCore::EventHandler::passWidgetMouseDownEventToWidget):
        (WebCore::EventHandler::handleDrag):
        (WebCore::EventHandler::eventActivatedView):

2007-02-07  Krzysztof Kowalczyk  <kkowalczyk@gmail.com>

        Reviewed by Adam Roben.

        Linux/gdk build fixes - add new files based on Qt implementation.

        * loader/gdk/DocumentLoaderGdk.cpp: Added.
        (WebCore::DocumentLoader::getResponseModifiedHeader):
        * loader/gdk/FrameLoaderClientGdk.cpp: Added.
        (WebCore::FrameLoaderClientGdk::FrameLoaderClientGdk):
        (WebCore::FrameLoaderClientGdk::frame):
        (WebCore::FrameLoaderClientGdk::userAgent):
        (WebCore::FrameLoaderClientGdk::createDocumentLoader):
        (WebCore::FrameLoaderClientGdk::dispatchWillSubmitForm):
        (WebCore::FrameLoaderClientGdk::committedLoad):
        (WebCore::FrameLoaderClientGdk::dispatchDidReceiveAuthenticationChallenge):
        (WebCore::FrameLoaderClientGdk::dispatchDidCancelAuthenticationChallenge):
        (WebCore::FrameLoaderClientGdk::dispatchWillSendRequest):
        (WebCore::FrameLoaderClientGdk::assignIdentifierToInitialRequest):
        (WebCore::FrameLoaderClientGdk::postProgressStartedNotification):
        (WebCore::FrameLoaderClientGdk::postProgressEstimateChangedNotification):
        (WebCore::FrameLoaderClientGdk::postProgressFinishedNotification):
        (WebCore::FrameLoaderClientGdk::frameLoaderDestroyed):
        (WebCore::FrameLoaderClientGdk::dispatchDidReceiveResponse):
        (WebCore::FrameLoaderClientGdk::dispatchDecidePolicyForMIMEType):
        (WebCore::FrameLoaderClientGdk::dispatchDecidePolicyForNewWindowAction):
        (WebCore::FrameLoaderClientGdk::dispatchDecidePolicyForNavigationAction):
        (WebCore::FrameLoaderClientGdk::createPlugin):
        (WebCore::FrameLoaderClientGdk::createFrame):
        (WebCore::FrameLoaderClientGdk::redirectDataToPlugin):
        (WebCore::FrameLoaderClientGdk::createJavaAppletWidget):
        (WebCore::FrameLoaderClientGdk::objectContentType):
        (WebCore::FrameLoaderClientGdk::overrideMediaType):
        (WebCore::FrameLoaderClientGdk::windowObjectCleared):
        (WebCore::FrameLoaderClientGdk::setMainFrameDocumentReady):
        (WebCore::FrameLoaderClientGdk::hasWebView):
        (WebCore::FrameLoaderClientGdk::hasFrameView):
        (WebCore::FrameLoaderClientGdk::dispatchDidFinishLoad):
        (WebCore::FrameLoaderClientGdk::frameLoadCompleted):
        (WebCore::FrameLoaderClientGdk::privateBrowsingEnabled):
        (WebCore::FrameLoaderClientGdk::makeDocumentView):
        (WebCore::FrameLoaderClientGdk::makeRepresentation):
        (WebCore::FrameLoaderClientGdk::forceLayout):
        (WebCore::FrameLoaderClientGdk::forceLayoutForNonHTML):
        (WebCore::FrameLoaderClientGdk::setCopiesOnScroll):
        (WebCore::FrameLoaderClientGdk::detachedFromParent1):
        (WebCore::FrameLoaderClientGdk::detachedFromParent2):
        (WebCore::FrameLoaderClientGdk::detachedFromParent3):
        (WebCore::FrameLoaderClientGdk::detachedFromParent4):
        (WebCore::FrameLoaderClientGdk::loadedFromPageCache):
        (WebCore::FrameLoaderClientGdk::dispatchDidHandleOnloadEvents):
        (WebCore::FrameLoaderClientGdk::dispatchDidReceiveServerRedirectForProvisionalLoad):
        (WebCore::FrameLoaderClientGdk::dispatchDidCancelClientRedirect):
        (WebCore::FrameLoaderClientGdk::dispatchWillPerformClientRedirect):
        (WebCore::FrameLoaderClientGdk::dispatchDidChangeLocationWithinPage):
        (WebCore::FrameLoaderClientGdk::dispatchWillClose):
        (WebCore::FrameLoaderClientGdk::dispatchDidReceiveIcon):
        (WebCore::FrameLoaderClientGdk::dispatchDidStartProvisionalLoad):
        (WebCore::FrameLoaderClientGdk::dispatchDidReceiveTitle):
        (WebCore::FrameLoaderClientGdk::dispatchDidCommitLoad):
        (WebCore::FrameLoaderClientGdk::dispatchDidFinishDocumentLoad):
        (WebCore::FrameLoaderClientGdk::dispatchDidFirstLayout):
        (WebCore::FrameLoaderClientGdk::dispatchShow):
        (WebCore::FrameLoaderClientGdk::cancelPolicyCheck):
        (WebCore::FrameLoaderClientGdk::dispatchDidLoadMainResource):
        (WebCore::FrameLoaderClientGdk::revertToProvisionalState):
        (WebCore::FrameLoaderClientGdk::clearUnarchivingState):
        (WebCore::FrameLoaderClientGdk::willChangeTitle):
        (WebCore::FrameLoaderClientGdk::didChangeTitle):
        (WebCore::FrameLoaderClientGdk::finishedLoading):
        (WebCore::FrameLoaderClientGdk::finalSetupForReplace):
        (WebCore::FrameLoaderClientGdk::setDefersLoading):
        (WebCore::FrameLoaderClientGdk::isArchiveLoadPending):
        (WebCore::FrameLoaderClientGdk::cancelPendingArchiveLoad):
        (WebCore::FrameLoaderClientGdk::clearArchivedResources):
        (WebCore::FrameLoaderClientGdk::canHandleRequest):
        (WebCore::FrameLoaderClientGdk::canShowMIMEType):
        (WebCore::FrameLoaderClientGdk::representationExistsForURLScheme):
        (WebCore::FrameLoaderClientGdk::generatedMIMETypeForURLScheme):
        (WebCore::FrameLoaderClientGdk::restoreScrollPositionAndViewState):
        (WebCore::FrameLoaderClientGdk::provisionalLoadStarted):
        (WebCore::FrameLoaderClientGdk::didFinishLoad):
        (WebCore::FrameLoaderClientGdk::prepareForDataSourceReplacement):
        (WebCore::FrameLoaderClientGdk::setTitle):
        (WebCore::FrameLoaderClientGdk::setDocumentViewFromPageCache):
        (WebCore::FrameLoaderClientGdk::dispatchDidReceiveContentLength):
        (WebCore::FrameLoaderClientGdk::dispatchDidFinishLoading):
        (WebCore::FrameLoaderClientGdk::dispatchDidFailLoading):
        (WebCore::FrameLoaderClientGdk::dispatchDidLoadResourceFromMemoryCache):
        (WebCore::FrameLoaderClientGdk::dispatchDidFailProvisionalLoad):
        (WebCore::FrameLoaderClientGdk::dispatchDidFailLoad):
        (WebCore::FrameLoaderClientGdk::download):
        (WebCore::FrameLoaderClientGdk::cancelledError):
        (WebCore::FrameLoaderClientGdk::cannotShowURLError):
        (WebCore::FrameLoaderClientGdk::interruptForPolicyChangeError):
        (WebCore::FrameLoaderClientGdk::cannotShowMIMETypeError):
        (WebCore::FrameLoaderClientGdk::fileDoesNotExistError):
        (WebCore::FrameLoaderClientGdk::shouldFallBack):
        (WebCore::FrameLoaderClientGdk::willUseArchive):
        (WebCore::FrameLoaderClientGdk::saveScrollPositionAndViewStateToItem):
        (WebCore::FrameLoaderClientGdk::saveDocumentViewToPageCache):
        (WebCore::FrameLoaderClientGdk::canCachePage):
        (WebCore::FrameLoaderClientGdk::dispatchCreatePage):
        (WebCore::FrameLoaderClientGdk::dispatchUnableToImplementPolicy):
        (WebCore::FrameLoaderClientGdk::setMainDocumentError):
        (WebCore::FrameLoaderClientGdk::startDownload):
        (WebCore::FrameLoaderClientGdk::updateGlobalHistoryForStandardLoad):
        (WebCore::FrameLoaderClientGdk::updateGlobalHistoryForReload):
        (WebCore::FrameLoaderClientGdk::shouldGoToHistoryItem):
        * loader/gdk/FrameLoaderClientGdk.h: Added.
        (WebCore::FrameLoaderClientGdk::~FrameLoaderClientGdk):
        (WebCore::FrameLoaderClientGdk::setFrame):

2007-02-07  Krzysztof Kowalczyk  <kkowalczyk@gmail.com>

        Reviewed by Maciej.

        Linux/gdk fixes related to fonts.

        * platform/gdk/FontDataGdk.cpp:
        (WebCore::FontData::platformInit): remove a work-around for older cairo versions
        since Ubuntu 6.10 ships with cairo that is new enough
        * platform/gdk/FontGdk.cpp:
        (WebCore::Font::drawGlyphs):
        * platform/gdk/FontPlatformDataGdk.cpp: Remove unused variables.
        (WebCore::FontPlatformData::FontPlatformData):

2007-02-07  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Darin.

        http://bugs.webkit.org/show_bug.cgi?id=12582
        REGRESSION: Unclosed <title> makes the window display garbage or empty title

        Automatic testing is not possible, and manual testing probably doesn't make sense.

        * loader/DocumentLoader.cpp:
        (WebCore::canonicalizedTitle): Bail out early if the passed in string is all whitespace.

2007-02-06  Anders Carlsson  <acarlsson@apple.com>

        Reviewed by John Sullivan.

        <rdar://problem/4977952>
        REGRESSION: Yahoo Messenger IM is totally blank
        
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::checkContentPolicy):
        Don't ask the policy delegate for content that has valid substitute data.
        
        (WebCore::FrameLoader::checkNavigationPolicy):
        If the loader has substitute data but doesn't have an unreachable URL, let the policy
        delegate decide what to do.

2007-02-07  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Darin Adler.

        Restoring some of the functionality I removed in r19445. It's insufficient for
        each page to cancel keepAlive only for its child frames, because a frame
        can be removed from the page before we get a chance to cancel its keepAlive.
        So, the page destructor has to cancel keepAlive for all frames. This is safe
        because we prohibit closing a WebView while JavaScript is executing.

        * page/Frame.cpp:
        (WebCore::keepAliveSet):
        (WebCore::Frame::keepAlive):
        (WebCore::Frame::cancelAllKeepAlive):
        (WebCore::Frame::lifeSupportTimerFired):
        * page/Frame.h:
        * page/Page.cpp:
        (WebCore::Page::~Page):

2007-02-07  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Darin.

        http://bugs.webkit.org/show_bug.cgi?id=12603
        A crash when trying to use XPath functions normalize-space(), string-length() and number()

        Test: fast/xpath/implicit-node-args.html

        * xml/XPathFunctions.cpp:
        (WebCore::XPath::FunNumber::doEvaluate): Implemented zero parameter case.
        (WebCore::XPath::FunctionMapping::): Corrected descriptions of these functions, as they
        do allow zero parameters.
        (WebCore::XPath::createFunction): Combined the two failure cases to ensure that this
        function never returns 0.

2007-02-07  Zack Rusin  <zrusin@trolltech.com>

        Fix compilation

        * page/qt/EventHandlerQt.cpp:
        (WebCore::EventHandler::eventActivatedView):

2007-02-06  Alice Liu  <alice.liu@apple.com>

        Reviewed by Maciej.

        Added editing command functions for scrolling by page and moving the caret

        * editing/Editor.cpp:
        (WebCore::execMoveUpByPageAndModifyCaret):
        (WebCore::execMoveDownByPageAndModifyCaret):
        (WebCore::CommandEntry::):

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

        Reviewed by john

        <rdar://problem/4922367>
        WebView selectLine: followed by deleteBackward: deletes TABLE element of following line

        * editing/AppendNodeCommand.cpp:
        (WebCore::AppendNodeCommand::doApply): Don't ASSERT when manipulating
        non-editable content that is embedded in editable content.  We'll do 
        this kind of manipulation when removing redundant style spans after
        pasting content that has non-editable pieces.
        * editing/InsertNodeBeforeCommand.cpp:
        (WebCore::InsertNodeBeforeCommand::doApply): Ditto.
        * editing/htmlediting.cpp:
        (WebCore::isContentEditable): Added, wrapper for Node::isContentEditable
        (WebCore::rangeCompliantEquivalent): Although legal, 
        [{table, select, etc.}, {0, numChildren}] don't refer to children of the element, 
        but positions before and after the element.  So, rangeCompliantEquivalent is 
        really responsible for converting illegal positions *and* legal positions 
        that have a special meaning internally.
        * editing/htmlediting.h:

2007-02-06  Anders Carlsson  <acarlsson@apple.com>

        Reviewed by Brady.

        * platform/String.cpp:
        (WebCore::String::ascii):
        Fix dumping null Strings.

2007-02-06  Anders Carlsson  <acarlsson@apple.com>

        Reviewed by Geoff.

        Fix <rdar://problem/4979484>
        
        * css/CSSPrimitiveValue.cpp:
        (WebCore::isCSSTokenizerIdentifier):
        Do the range check before calling isalpha or isalnum.

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

        Reviewed by Darin Adler.

        Fixed Frame/RenderObject/Node leak report seen while running SVG image tests.
        (We'll need this fix if we ever re-enable SVG image.)
        
        The extra reference belonged to the Frame keepAlive timer (so this was
        not a "real" leak, in the end). The Page destructor has code to cancel all 
        Frame keepAlive timers upon the destruction of the last Page, but an SVG 
        image puts a Page within a Page, making this condition impossible to meet.
        
        The fix here is to have each individual page cancel the keepAlive timers 
        belonging to its child frames.
        
        * page/Frame.cpp: Changed the FrameCounter to use WTF logging.
        (WebCore::): Nixed the lifeSupportSet, since it's no longer used.
        (WebCore::Frame::cancelKeepAlive): Renamed from "endLifeSupport" to match
        the name "keepAlive".
        * page/Page.cpp:
        (WebCore::Page::~Page): Made each page cancel its child keepAlive timers 
        and clear its mainFrame, since we may never reach the condition of having 0 Pages.

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

        Rubberstamped by Brady.

        Revert the log channel constants to their old values for all you pretty
        people out there who were using the old ones. I also renamed
        LogResources to LogPlatformLeaks to be a bit more specific.

        * platform/Logging.cpp:
        (WebCore::):
        * platform/Logging.h:

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

        Reviewed by john

        <rdar://problem/4959067>
        Bullets get erased or moved down to another line
        <rdar://problem/4912529>
        Seed: Bulleted list in Note in Mail.app does not work with Japanese input mode
        
        Do not expand the selection to include fully selected 
        special elements when insering text over a selection.

        * editing/CompositeEditCommand.cpp:
        (WebCore::CompositeEditCommand::deleteSelection): Pass
        expandForSpecialElements through to DeleteSelectionCommand's constructor.
        (WebCore::CompositeEditCommand::moveParagraphs): Use the 
        convenience function.
        * editing/CompositeEditCommand.h:
        * editing/DeleteSelectionCommand.h:
        * editing/InsertTextCommand.cpp:
        (WebCore::InsertTextCommand::input): Do not expand the selection
        to be deleted for special elements.
        * editing/ReplaceSelectionCommand.cpp:
        (WebCore::ReplaceSelectionCommand::doApply): Added a FIXME about 
        when we should expand the selection.

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

        Reviewed by Anders Carlsson.
        
        Disabled support for SVG image because it crashes all the time.

        * loader/CachedImage.cpp:
        (WebCore::CachedImage::createImage):

2007-02-06  Mitz Pettel  <mitz@webkit.org>

        Reviewed by Darin.

        - fix http://bugs.webkit.org/show_bug.cgi?id=12518
          Betsson.com crashes browser

        Test: fast/layers/generated-layer-scrollbar-crash.html

        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::createScrollbar): Changed element()->document() to
        document() to work with anonymous objects.
        (WebCore::RenderLayer::updateOverflowStatus): Ditto.

2007-02-06  Eric Seidel  <eric@webkit.org>

        Reviewed by mitz.

        WebKit ignores floating point values for stroke-miterlimit
        http://bugs.webkit.org/show_bug.cgi?id=12577
        
        Test: svg/W3C-SVG-1.1/painting-stroke-07-t.svg

        * ksvg2/css/SVGCSSParser.cpp:
        (WebCore::CSSParser::parseSVGValue):
        * ksvg2/css/SVGCSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::applySVGProperty):
        * ksvg2/css/SVGRenderStyle.h:
        * ksvg2/css/SVGRenderStyleDefs.h:
        (WebCore::StyleStrokeData::operator!=):

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

        Reviewed by Ada and Oliver.

        Adding a new LogResources channel for tracking platform resource usage.

        * platform/Logging.cpp: Added new channel, cleaned up constants to be more readable.
        * platform/Logging.h: Declare new channel.

2007-02-06  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Geoff.

        http://bugs.webkit.org/show_bug.cgi?id=12619
        Non-abbreviated XPaths don't work

        Test: fast/xpath/ancestor-axis.html

        * xml/XPathParser.cpp:
        (WebCore::XPath::Parser::lex): Fix axis name parsing to actually work.
        * xml/XPathStep.cpp:
        (WebCore::XPath::Step::nodeTestMatches): Fix "*" node test to actually work.

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

        Roll out incomplete support for font-stretch (r19350) at Dave Hyatt's request.
        See http://bugs.webkit.org/show_bug.cgi?id=12530#c9 for more info.

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::):
        (WebCore::CSSComputedStyleDeclaration::getPropertyCSSValue):
        * css/cssparser.cpp:
        (WebCore::CSSParser::parseValue):
        * css/cssstyleselector.cpp:
        (WebCore::CSSStyleSelector::applyDeclarations):
        (WebCore::CSSStyleSelector::applyProperty):
        * platform/FontCache.cpp:
        (WebCore::FontPlatformDataCacheKey::FontPlatformDataCacheKey):
        (WebCore::FontPlatformDataCacheKey::operator==):
        (WebCore::computeHash):
        (WebCore::FontPlatformDataCacheKeyTraits::deletedValue):
        (WebCore::FontPlatformDataCacheKeyTraits::emptyValue):
        (WebCore::FontCache::getCachedFontPlatformData):
        * platform/FontDescription.h:
        (WebCore::FontDescription::FontDescription):
        (WebCore::FontDescription::weight):
        (WebCore::FontDescription::setWeight):
        (WebCore::FontDescription::operator==):
        * platform/mac/FontCacheMac.mm:
        (WebCore::FontCache::createFontPlatformData):
        * platform/mac/WebFontCache.mm:
        (acceptableChoice):
        (betterChoice):
        (+[WebFontCache fontWithFamily:traits:size:]):

2007-02-05  Adele Peterson  <adele@apple.com>

        Reviewed by Darin.

        A few small updates to my bidi patch.

        * rendering/RenderFileUploadControl.cpp: (WebCore::RenderFileUploadControl::paintObject): Moved the declaration of the CharacterBuffer outside the if statement since we use its data outside that scope.
        * rendering/RenderListBox.cpp: (WebCore::RenderListBox::paintItemForeground): ditto.
        * rendering/bidi.cpp: (WebCore::RenderBlock::bidiReorderCharacters): Used a PassRefPtr for the BidiContext.

2007-02-05  Adele Peterson  <adele@apple.com>

        Reviewed by Adam.

        Fix for assertion failure in fast/events/objc-keyboard-event-creation.html

        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::selectionStart): Check that the selection offsets are not equal to -1 (which is means the selection has never been set) instead of checking for >= 0.
        (WebCore::HTMLInputElement::selectionEnd): ditto.
        (WebCore::HTMLInputElement::setValue): ditto.
        (WebCore::HTMLInputElement::selection): Return an empty selection if the input is not a text field or if no selection has ever been set in the text field.
        * html/HTMLTextAreaElement.cpp:
        (WebCore::HTMLTextAreaElement::selectionStart): Check that the selection offsets are not equal to -1.
        (WebCore::HTMLTextAreaElement::selectionEnd): ditto.
        (WebCore::HTMLTextAreaElement::setValue): ditto.
        (WebCore::HTMLTextAreaElement::selection): Return an empty selection if no selection has ever been set in the textarea.

        * dom/Position.cpp: Added FIXMEs that we should catch the negative offset earlier.
        (WebCore::Position::previous):
        (WebCore::Position::next):

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

        Reviewed by harrison

        <rdar://problem/4947387>
        REGRESSION Shift Command Left should only select to the beginning of the line

        * editing/Editor.cpp:
        (WebCore::CommandEntry::): Never copy/paste code.

2007-02-05  Darin Adler  <darin@apple.com>

        Reviewed by John Sullivan.

        - fix http://bugs.webkit.org/show_bug.cgi?id=11535
          <rdar://problem/4946959> REGRESSION: onclick="this.select();" not working on new forms (11535)

        Test: fast/forms/input-select-on-click.html

        * page/EventHandler.h: Added m_mouseDownWasSingleClickInSelection boolean.
        Organized other booleans a bit more logically.
        * page/EventHandler.cpp:
        (WebCore::EventHandler::EventHandler): Rearrange order to match EventHandler.h, add
        m_mouseDownWasSingleClickInSelection initialization.
        (WebCore::EventHandler::handleMousePressEventSingleClick): Set m_mouseDownWasSingleClickInSelection
        to true in the appropriate special case.
        (WebCore::EventHandler::handleMousePressEvent): Set m_mouseDownWasSingleClickInSelection to false.
        (WebCore::EventHandler::handleMouseReleaseEvent): Change code to clear selection or set to caret to
        only fire if m_mouseDownWasSingleClickInSelection was true rather than firing for any
        m_mouseDownMayStartSelect case.

2007-02-05  George Staikos  <staikos@kde.org>

        Reviewed by Maciej.

        Send HTTP cookies.

        * platform/network/qt/ResourceHandleManagerQt.cpp:
        (WebCore::RequestQt::RequestQt):

2007-02-05  Adele Peterson  <adele@apple.com>

        Reviewed by Mitz and Anders.

        Fix for http://bugs.webkit.org/show_bug.cgi?id=11811
        <rdar://problem/4947184> REGRESSION (r11783): Hebrew text in list boxes is reversed

        http://bugs.webkit.org/show_bug.cgi?id=11812
        <rdar://problem/4960269> REGRESSION (Native file upload): Hebrew filenames are reversed

        Tests: 
        fast/text/international/bidi-listbox.html
        fast/text/international/bidi-listbox-atsui.html

        * rendering/RenderBlock.h: Added static bidiReorderCharacters that will run the bidi algorithm on a character buffer.
        * rendering/bidi.cpp:
        (WebCore::RenderBlock::bidiReorderCharacters): Added. Creates an anonymous RenderBlock and RenderText to feed into bidiReorderLines.
        (WebCore::RenderBlock::constructLine): Uses the new convenience methods on BidiRun.
        * rendering/bidi.h:
        (WebCore::BidiRun::reversed): Added convenience method.
        (WebCore::BidiRun::dirOverride): ditto.

        * rendering/RenderFileUploadControl.cpp: (WebCore::RenderFileUploadControl::paintObject): Creates a buffer and calls bidiReorderCharacters
          to get a correctly ordered character buffer for drawText.
        * rendering/RenderListBox.cpp: (WebCore::RenderListBox::paintItemForeground): ditto.

2007-02-05  Mitz Pettel  <mitz@webkit.org>

        Reviewed by Darin.

        - fix http://bugs.webkit.org/show_bug.cgi?id=12590
          REGRESSION: Text selection is weird in textareas in Trac wiki editing pages

        Test: fast/repaint/selection-gap-overflow-scroll.html

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::selectionGapRects): Adjust for overflow scroll.

2007-02-05  Mitz Pettel  <mitz@webkit.org>

        Reviewed by Adele.

        - fix http://bugs.webkit.org/show_bug.cgi?id=11916
          REGRESSION (SearchField): RTL search fields are mixed up

        Test: fast/forms/search-rtl.html

        * rendering/RenderTextControl.cpp:
        (WebCore::RenderTextControl::createInnerBlockStyle): Always make the inner
        block LTR so that the results button will be on the left and the cancel
        button will be on the right.
        (WebCore::RenderTextControl::createInnerTextStyle): Inherit the direction
        property directly from the control so that it won't be masked by the inner
        block's LTR override.
        (WebCore::RenderTextControl::nodeAtPoint): Removed code that swapped the
        results and cancel buttons for RTL.
        (WebCore::RenderTextControl::forwardEvent): Ditto.
        (WebCore::RenderTextControl::clientPaddingLeft): Ditto.
        (WebCore::RenderTextControl::clientPaddingRight): Ditto.

2007-02-05  Mitz Pettel  <mitz@webkit.org>

        Reviewed by Adele.

        - fix http://bugs.webkit.org/show_bug.cgi?id=12618
          REGRESSION (SearchField): Dragging across the text and releasing over the clear button clears the field

        Test: fast/forms/search-cancel-button-mouseup.html

        Made the cancel button capturing.

        * html/HTMLTextFieldInnerElement.cpp:
        (WebCore::HTMLSearchFieldCancelButtonElement::HTMLSearchFieldCancelButtonElement):
        (WebCore::HTMLSearchFieldCancelButtonElement::defaultEventHandler):
        * html/HTMLTextFieldInnerElement.h:

2007-02-05  Mitz Pettel  <mitz@webkit.org>

        Reviewed by Darin.

        - fix http://bugs.webkit.org/show_bug.cgi?id=6626
          Arabic & Farsi rendered with no shaping (all glyphs separate, unreadable!)

        No test possible since Mac OS X only ships with fonts that contain shaping
        information.

        * icu/unicode/ushape.h: Added from
        http://www.opensource.apple.com/darwinsource/10.4.8.ppc/ICU-6.2.9/icuSources/common/unicode/
        * platform/FontData.h:
        (WebCore::FontData::shapesArabic): Added. Returns whether the font contains
        shaping information for Arabic or not.
        * platform/mac/FontDataMac.mm:
        (WebCore::FontData::platformInit):
        (WebCore::FontData::checkShapesArabic): Added. Checks whether the font contains
        a glyph metamorphosis table. The heuristic is that if a font contains Arabic glyphs
        and a metamorphosis table, then it includes shaping information for Arabic.
        * platform/mac/FontMac.mm:
        (WebCore::overrideLayoutOperation): Changed to use the same character buffer passed
        to ATSUI instead of the original character buffer and to give zero-width spaces zero
        width.
        (WebCore::isArabicLamWithAlefLigature): Added. Checks if the character is one
        of the Arabic presentation forms of Lam with Alef.
        (WebCore::shapeArabic): Added. This is a wrapper around the ICU Arabic shaping routine
        that replaces each space following a Lam with Alef ligature resulting from shaping
        with a zero-width space.
        (WebCore::ATSULayoutParameters::initialize): Changed to allocate the auxiliary buffer
        lazily for mirroring and Arabic shaping. Added a call to shapeArabic() when required.

2007-02-05  Eric Seidel  <eric@webkit.org>

        No review, build fix only.

        * ksvg2/svg/SVGStyleElement.cpp: add forgotten header.

2007-02-05  Eric Seidel  <eric@webkit.org>

        Reviewed by bdash.

        Fix style name testcase which I broke in my last commit.

        * ksvg2/svg/SVGStyleElement.cpp:
        (WebCore::SVGStyleElement::xmlspace):
        (WebCore::SVGStyleElement::title): override Element::title()
        (WebCore::SVGStyleElement::parseMappedAttribute):
        * ksvg2/svg/SVGStyleElement.h:

2007-02-04  Eric Seidel  <eric@webkit.org>

        Reviewed by darin.

        Fix hand cursor on link hover for SVG
        Fix status text on link hover for SVG
        Fix tooltips on link hover for SVG
        Fix link dragging for SVG
        http://bugs.webkit.org/show_bug.cgi?id=12575
        
        Test: added manual-tests/svg-links.svg

        * dom/Document.cpp:
        (WebCore::Document::prepareMouseEvent):
        * dom/Element.cpp:
        (WebCore::Element::title):
        * dom/Element.h:
        * html/HTMLElement.cpp:
        (WebCore::HTMLElement::setId):
        (WebCore::HTMLElement::title):
        (WebCore::HTMLElement::setTitle):
        (WebCore::HTMLElement::setLang):
        * html/HTMLElement.h:
        * ksvg2/svg/SVGAElement.cpp:
        (WebCore::SVGAElement::title):
        (WebCore::SVGAElement::parseMappedAttribute):
        (WebCore::SVGAElement::defaultEventHandler):
        * ksvg2/svg/SVGAElement.h:
        * ksvg2/svg/SVGTitleElement.cpp:
        * ksvg2/svg/SVGTitleElement.h:
        * manual-tests/svg-links.svg: Added.
        * rendering/HitTestResult.cpp:
        (WebCore::HitTestResult::title):
        (WebCore::HitTestResult::absoluteImageURL):
        (WebCore::HitTestResult::absoluteLinkURL):
        (WebCore::HitTestResult::isLiveLink):
        (WebCore::HitTestResult::titleDisplayString):

2007-02-04  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Darin.

        http://bugs.webkit.org/show_bug.cgi?id=12602
        XPath functions string(), normalize-space() and string-length() don't work
        without arguments

        Test: fast/xpath/implicit-node-args.html

        * xml/XPathFunctions.cpp:
        (WebCore::XPath::FunString::doEvaluate):
        (WebCore::XPath::FunStringLength::doEvaluate):
        (WebCore::XPath::FunNormalizeSpace::doEvaluate):
        Don't try to pass RefPtr<Node> to the Value ctor.

2007-02-04  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Darin.

        http://bugs.webkit.org/show_bug.cgi?id=8791
        XPath should support custom node resolvers

        * bindings/js/JSCustomXPathNSResolver.cpp: Added.
        (WebCore::JSCustomXPathNSResolver::create):
        (WebCore::JSCustomXPathNSResolver::JSCustomXPathNSResolver):
        (WebCore::JSCustomXPathNSResolver::~JSCustomXPathNSResolver):
        (WebCore::JSCustomXPathNSResolver::lookupNamespaceURI):
        * bindings/js/JSCustomXPathNSResolver.h: Added.
        * bindings/objc/DOMCustomXPathNSResolver.h: Added.
        * bindings/objc/DOMCustomXPathNSResolver.mm: Added.
        (WebCore::DOMCustomXPathNSResolver::DOMCustomXPathNSResolver):
        (WebCore::DOMCustomXPathNSResolver::~DOMCustomXPathNSResolver):
        (WebCore::DOMCustomXPathNSResolver::lookupNamespaceURI):
        Wrappers for JS/ObjC objects that can be used as resolvers.

        * bindings/scripts/CodeGeneratorJS.pm:
        * bindings/scripts/CodeGeneratorObjC.pm:
        Use the above wrappers to support custom resolvers.

        * xml/XPathNSResolver.cpp:
        * xml/XPathNSResolver.h:
        Turned this class into an abstract one.

        * xml/NativeXPathNSResolver.cpp: Added.
        (WebCore::NativeXPathNSResolver::NativeXPathNSResolver):
        (WebCore::NativeXPathNSResolver::~NativeXPathNSResolver):
        (WebCore::NativeXPathNSResolver::lookupNamespaceURI):
        * xml/NativeXPathNSResolver.h: Added.
        A XPathNSResolver subclass, doing what XPathNSResolver used to do.

        * xml/XPathEvaluator.cpp:
        (WebCore::XPathEvaluator::createNSResolver): Create a NativeXPathNSResolver.

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

2007-02-04  Oliver Hunt  <oliver@apple.com>

        Reviewed by Adam.

        Tidying up EventHandler, and moving more of
        EventHandlerMac.mm to EventHandler.cpp

        Also added EventHandler::eventLoopHandleMouse[Dragged,Up]
        these are basically helper functions to allow correct event
        handling on MacOS.        

        * page/EventHandler.cpp:
        (WebCore::EventHandler::handleMouseUp):
        (WebCore::EventHandler::dragSourceMovedTo):
        (WebCore::EventHandler::dragSourceEndedAt):
        (WebCore::EventHandler::dispatchDragSrcEvent):
           Moved from EventHandlerMac to EventHandler

        * page/EventHandler.h:
        (WebCore::EventHandler::eventLoopHandleMouseUp):
        (WebCore::EventHandler::eventLoopHandleMouseDragged):
          Null implementations of two Mac helper functions
        * page/mac/EventHandlerMac.mm:
        (WebCore::EventHandler::eventLoopHandleMouseDragged):           
        (WebCore::EventHandler::handleDrag):
          Much tidying, reduced nesting, made less dependent on NS types   
        (WebCore::EventHandler::eventLoopHandleMouseDragged):
        (WebCore::EventHandler::eventLoopHandleMouseUp):  
          Helper functions to let us process events properly on MacOS

        * page/mac/WebCoreFrameBridge.mm:
        (-[WebCoreFrameBridge dragSourceEndedAt:operation:]):

2007-02-04  George Staikos  <staikos@kde.org>

        Reviewed by Zack.

        Some Qt hacks and cleanups - makes rendering of forms much better on
        OS X

        * platform/qt/PlatformKeyboardEventQt.cpp: Add Key_Return/Enter
        (WebCore::keyIdentifierForQtKeyCode):
        (WebCore::windowsKeyCodeForKeyEvent):
        * platform/qt/RenderThemeQt.cpp: Hacks and fix buttons
        (WebCore::RenderThemeQt::addIntrinsicMargins):
        (WebCore::RenderThemeQt::setCheckboxSize):
        (WebCore::RenderThemeQt::supportsFocus):
        (WebCore::RenderThemeQt::applyTheme):

2007-02-03  Maciej Stachowiak  <mjs@apple.com>

        Rubber stamped by Adam.

        - remove obsolete code that has an annoying space in the directory name

        * WebCore.vcproj/Image Viewer/Image Viewer.cpp: Removed.
        * WebCore.vcproj/Image Viewer/Image Viewer.h: Removed.
        * WebCore.vcproj/Image Viewer/Image Viewer.rc: Removed.
        * WebCore.vcproj/Image Viewer/Image Viewer.reg: Removed.
        * WebCore.vcproj/Image Viewer/Image Viewer.vcproj: Removed.
        * WebCore.vcproj/Image Viewer/ImageDocument.cpp: Removed.
        * WebCore.vcproj/Image Viewer/ImageDocument.h: Removed.
        * WebCore.vcproj/Image Viewer/ImageMainFrame.cpp: Removed.
        * WebCore.vcproj/Image Viewer/ImageMainFrame.h: Removed.
        * WebCore.vcproj/Image Viewer/ImageView.cpp: Removed.
        * WebCore.vcproj/Image Viewer/ImageView.h: Removed.
        * WebCore.vcproj/Image Viewer/Resource.h: Removed.
        * WebCore.vcproj/Image Viewer/res/Image Viewer.ico: Removed.
        * WebCore.vcproj/Image Viewer/res/Image ViewerDoc.ico: Removed.
        * WebCore.vcproj/Image Viewer/res/ImageViewer.rc2: Removed.
        * WebCore.vcproj/Image Viewer/res/Toolbar.bmp: Removed.
        * WebCore.vcproj/Image Viewer/stdafx.cpp: Removed.
        * WebCore.vcproj/Image Viewer/stdafx.h: Removed.

2007-02-04  Mitz Pettel  <mitz@webkit.org>

        Reviewed by Oliver.

        - fix http://bugs.webkit.org/show_bug.cgi?id=12564
          REGRESSION: Uncaught AppKit exception when using the scrollwheel while Gmail is loading

        * platform/mac/PlatformMouseEventMac.mm:
        (WebCore::eventNumberForEvent): Scroll wheel events don't have an event number.

2007-02-04  Nikolas Zimmermann  <zimmermann@kde.org>

        Reviewed by Sam.

        Add support for xml:space="preserve" for SVG text.
        It can be modeled by using white-space="pre" and replace \n by spaces.

        Handle xml:space="default" correctly.
        Always remove tabs from SVG text - as demanded by spec.

        Added test: svg/custom/text-whitespace-handling.svg

        * css/svg.css:
        * ksvg2/svg/SVGTextContentElement.cpp:
        (WebCore::SVGTextContentElement::parseMappedAttribute):
        * rendering/RenderText.cpp:
        (WebCore::RenderText::setStyle):
        (WebCore::RenderText::setTextInternal):
        * rendering/bidi.cpp:
        (WebCore::shouldPreserveNewline):
        (WebCore::RenderBlock::skipWhitespace):
        (WebCore::RenderBlock::findNextLineBreak):

2007-02-03  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Darin.

        http://bugs.webkit.org/show_bug.cgi?id=12560
        W3C XPath test Text_Nodes.svg fails

        Covered by dom/svg/level3/xpath/Text_Nodes.svg

        * xml/XPathStep.cpp:
        (WebCore::XPath::Step::nodeTestMatches): Only include the first text sibling in text() matches.

2007-02-03  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Darin.

        http://bugs.webkit.org/show_bug.cgi?id=12485
        XPath id() function doesn't work as root in paths

        Test: fast/xpath/id-path.html

        * xml/XPathPath.cpp:
        (WebCore::XPath::Path::doEvaluate): Implemented.
        (WebCore::XPath::LocationPath::evaluate): A new overload that takes an initial NodeVector.
        (WebCore::XPath::LocationPath::doEvaluate): Moved most of the logic to the new evaluate().

        * xml/XPathPath.h: Added a new evaluate() overload and a using declaration to keep the
        generic one visible.

2007-02-03  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Darin.

        http://bugs.webkit.org/show_bug.cgi?id=12559
        REGRESSION: Crash in checkForHeadCharset() under GuardMalloc

        No tests possible.

        * loader/TextResourceDecoder.cpp:
        (WebCore::TextResourceDecoder::checkForHeadCharset): Fix end of buffer checks; sprinkle a number 
        of new ones over the function.

2007-02-03  David Kilzer  <ddkilzer@webkit.org>

        Reviewed by NOBODY (no-svg build fix).

        * page/EventHandler.cpp: Include FloatPoint.h.

2007-02-03  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Mitz.

        http://bugs.webkit.org/show_bug.cgi?id=12549
        Wrong character encoding at www.ravmilim.co.il

        Test: fast/encoding/meta-charset.html

        * loader/TextResourceDecoder.cpp:
        (WebCore::TextResourceDecoder::checkForHeadCharset): Fix an off by one error.

2007-02-02  Maciej Stachowiak  <mjs@apple.com>
        
        Reviewed by Hyatt & Adele.
        
        - <rdar://problem/4896972> TV guide listings page doesn't finish loading (11674)
        
        Test case: fast/forms/disabled-select-change-index.html
        
        * html/HTMLOptionElement.cpp:
        (WebCore::HTMLOptionElement::setSelected): Allow changing selected state of a disabled
        option.
        
2007-02-03  Nikolas Zimmermann  <zimmermann@kde.org>

        Build fix, not reviewed.

        Blind attempt to fix Qt build.

        * WebCore.pro: Add RenderSVGGradientStop.cpp / RenderSVGHiddenContainer.cpp

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

        Reviewed by Eric & Maciej.

        Fix serveral <use> issues:
        - When events are dispatch to a referenced element, the actual event.target
          has to be set to the corresponding SVGElementInstance object

        - Node::shadowAncestorNode() should _not_ return the shadowParentNode for SVG elements
          This is only needed for the HTML forms concept and breaks event dispatching for SVG shadow tree elements.

        - Add SVGElementInstance as possible EventTarget in bindings/js/kjs_dom.cpp
          (Now event.target returns the actual SVGElementInstance object for a shadow tree element)

        Fixes: http://bugs.webkit.org/show_bug.cgi?id=12502 (Reproducible crash when browsing SVG map.)
        Fixes: http://bugs.webkit.org/show_bug.cgi?id=12511 (<use> has event dispatching issues)

        Added test: svg/custom/use-event-handler-on-use-element.svg
        Added test: svg/custom/use-event-handler-on-referenced-element.svg
        Added test: svg/custom/use-elementInstance-event-target.svg
        Added test: svg/custom/use-elementInstance-methods.svg

        * bindings/js/kjs_dom.cpp:
        (KJS::toJS):
        * dom/EventTarget.cpp:
        (WebCore::EventTarget::toSVGElementInstance):
        * dom/EventTarget.h:
        * dom/EventTargetNode.cpp:
        (WebCore::EventTargetNode::handleLocalEvents):
        (WebCore::EventTargetNode::dispatchGenericEvent):
        (WebCore::EventTargetNode::dispatchEvent):
        * dom/EventTargetNode.h:
        * dom/Node.cpp:
        (WebCore::Node::shadowAncestorNode):
        * ksvg2/svg/SVGElement.cpp:
        (WebCore::shadowTreeParentElementForShadowTreeElement):
        (WebCore::SVGElement::dispatchEvent):
        * ksvg2/svg/SVGElement.h:
        * ksvg2/svg/SVGElementInstance.cpp:
        (WebCore::SVGElementInstance::toSVGElementInstance):
        * ksvg2/svg/SVGElementInstance.h:
        * ksvg2/svg/SVGUseElement.cpp:
        (WebCore::SVGUseElement::notifyAttributeChange):
        (WebCore::SVGUseElement::instanceForShadowTreeElement):
        * ksvg2/svg/SVGUseElement.h:

2007-02-02  Oliver Hunt  <oliver@apple.com>

        Reviewed by Geoff.

        Add guard around accessing [NSEvent eventNumber] to ensure
        we don't attempt to access it on on non-mouse related NSEvent.

        * platform/mac/PlatformMouseEventMac.mm:
        (WebCore::eventNumberForEvent):
        (WebCore::PlatformMouseEvent::PlatformMouseEvent):

2007-02-02  Adam Roben  <aroben@apple.com>

        Reviewed by Anders.

        Try to be a little less selfish about DocumentLoader.

        Spotted while working on <rdar://problem/4957747>.

        * page/ContextMenuController.cpp:
        (WebCore::ContextMenuController::contextMenuItemSelected):
            Everyone can open frames in new windows.

2007-02-02  Nikolas Zimmermann  <zimmermann@kde.org>

        Reviewed by Eric.

        Move xml:space/xml:lang from svgattrs.in to xmlattrs.in where they actually belong.
        Now they are actually recognized by SVGLangSpace::parseMappedAttribute.
        Patch implementing xml:space="preserve" coming soon, which acts as test for this stuff.

        Always build XMLNames.cpp (not only for SVG) and replace all occourences of
        "http://www.w3.org/XML/1998/namespace" by "XMLNames::xmlNamespaceURI".

        * DerivedSources.make:
        * dom/DOMImplementation.cpp:
        (WebCore::DOMImplementation::createDocument):
        * ksvg2/svg/SVGLangSpace.cpp:
        (WebCore::SVGLangSpace::SVGLangSpace):
        (WebCore::SVGLangSpace::parseMappedAttribute):
        * ksvg2/svg/SVGLangSpace.h:
        * ksvg2/svg/svgattrs.in:
        * page/Frame.cpp:
        (WebCore::Frame::Frame):
        * xml/XPathNSResolver.cpp:
        (WebCore::XPathNSResolver::lookupNamespaceURI):
        * xml/xmlattrs.in:

2007-02-02  Beth Dakin  <bdakin@apple.com>

        Reviewed by Maciej.

        Working on a layout test.

        Fix for <rdar://problem/4966100> REGRESSION: Reproducible ASSERT 
        hit at Walgreens.com

        * page/Frame.cpp:
        (WebCore::Frame::setView): If we are setting the view to 0 and 
        detaching the document, call unscheduleRealyout() on the old view 
        before setting it to 0.

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

        Reviewed by Maciej Stachowiak.
        
        Added support for selectively ignoring WebCore::Node leaks during layout
        tests, so that we can ignore known leaks in other components.

        * WebCore.exp:
        * dom/Node.cpp:
        (WebCore::Node::isSupported): Moved isSupported up with the rest of the static functions.

        (WebCore::): Added an ignoreSet, which collects WebCore::Nodes whose lifetime
        we want to ignore. We need to track which nodes to ignore rather than, say,
        just suspending the count, because node destruction depends on lots of
        different variables, so it would be nearly impossible to know when exactly 
        to suspend the count and when exactly to resume it.

        (WebCore::NodeCounter::~NodeCounter): Changed to use WTFLog instead of fprintf.

        (WebCore::Node::startIgnoringLeaks): Do the ignoring.
        (WebCore::Node::stopIgnoringLeaks): ditto
        (WebCore::Node::Node): ditto
        (WebCore::Node::~Node): ditto

        * dom/Node.h: Moved isSupported up with the rest of the static functions.

        * platform/mac/LoggingMac.mm:
        (WebCore::initializeWithUserDefault): Renamed from "initializeLoggingChannel"
        because the real goal here is to honor a user default -- WTFLoggingChannels
        need no run-time initialization. Also replaced "off by default, on if a 
        user default says so" behavior with "only override existing setting if a
        user default says so" behavior. It seemed like a bug that you would specify 
        a channel's on/off state in its definition, but this function would unconditionally
        blow that state away.
        (WebCore::InitializeLoggingChannelsIfNecessary):

2007-02-02  Eric Seidel  <eric@webkit.org>

        Reviewed by mitz.

        Fix gradient stop style resolution to be less of a hack, fixing style invalidation:
        http://bugs.webkit.org/show_bug.cgi?id=12193
        and fix stop-color and stop-opacity not to inherit:
        http://bugs.webkit.org/show_bug.cgi?id=12193
        
        Tests:
        * svg/custom/gradient-stops-style-change.svg: added
        * svg/W3C-SVG-1.1/pservers-grad-18-b.svg: updated

        * WebCore.xcodeproj/project.pbxproj:
        * ksvg2/css/SVGCSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::applySVGProperty):
        * ksvg2/css/SVGRenderStyle.cpp:
        (WebCore::SVGRenderStyle::inheritedNotEqual):
        (WebCore::SVGRenderStyle::inheritFrom):
        * ksvg2/css/SVGRenderStyle.h:
        * ksvg2/svg/SVGDefsElement.cpp:
        (WebCore::SVGDefsElement::createRenderer):
        * ksvg2/svg/SVGGradientElement.cpp:
        (WebCore::SVGGradientElement::createRenderer):
        (WebCore::SVGGradientElement::buildStops):
        * ksvg2/svg/SVGGradientElement.h:
        (WebCore::SVGGradientElement::rendererIsNeeded):
        * ksvg2/svg/SVGStopElement.cpp:
        (WebCore::SVGStopElement::createRenderer):
        * ksvg2/svg/SVGStopElement.h:
        (WebCore::SVGStopElement::rendererIsNeeded):
        * rendering/RenderSVGGradientStop.cpp: Added.
        * rendering/RenderSVGGradientStop.h: Added.
        * rendering/RenderSVGHiddenContainer.cpp: Added.
        * rendering/RenderSVGHiddenContainer.h: Added.
        * rendering/RenderSVGContainer.cpp:
        * rendering/RenderSVGContainer.h:

2007-02-02  Zack Rusin  <zrusin@trolltech.com>

        Reviewed by Lars

        Fix scrolling-on-selection bug by correctly
        scrolling to the offset instead of trying to 
        ensure visibility with margins.

        * platform/qt/ScrollViewQt.cpp:
        (WebCore::ScrollView::scrollPointRecursively):

2007-02-02  Zack Rusin  <zrusin@trolltech.com>

        Reviewed by Lars

        Fix drawing of dashed and colored lines. Pen
        has to be inherited for stroke to stay consistent.

        * platform/graphics/qt/GraphicsContextQt.cpp:
        (WebCore::GraphicsContext::setAlpha):
        (WebCore::GraphicsContext::setPlatformStrokeColor):
        (WebCore::GraphicsContext::setPlatformStrokeStyle):

2007-02-01  Nicholas Shanks  <webkit@nickshanks.com>

        Reviewed by Mark.

        Add support for CSS2 font-stretch property.

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::):
        (WebCore::CSSComputedStyleDeclaration::getPropertyCSSValue):
        * css/cssparser.cpp:
        (WebCore::CSSParser::parseValue):
        * css/cssstyleselector.cpp:
        (WebCore::CSSStyleSelector::applyDeclarations):
        (WebCore::CSSStyleSelector::applyProperty):
        * platform/FontCache.cpp:
        (WebCore::FontPlatformDataCacheKey::FontPlatformDataCacheKey):
        (WebCore::FontPlatformDataCacheKey::operator==):
        (WebCore::computeHash):
        (WebCore::FontPlatformDataCacheKeyTraits::deletedValue):
        (WebCore::FontPlatformDataCacheKeyTraits::emptyValue):
        (WebCore::FontCache::getCachedFontPlatformData):
        * platform/FontDescription.h:
        (WebCore::):
        (WebCore::FontDescription::FontDescription):
        (WebCore::FontDescription::stretch):
        (WebCore::FontDescription::narrowerStretch):
        (WebCore::FontDescription::widerStretch):
        (WebCore::FontDescription::setStretch):
        (WebCore::FontDescription::operator==):
        * platform/mac/FontCacheMac.mm:
        (WebCore::FontCache::createFontPlatformData):
        * platform/mac/WebFontCache.mm:
        (acceptableChoice):
        (betterChoice):
        (+[WebFontCache fontWithFamily:traits:size:]):

2007-02-01  Timothy Hatcher  <timothy@apple.com>

        Reviewed by Mark Rowe.

        <rdar://problem/4969201> REGRESSION: Safari applies the wrong font to BODY element at http://www.apple.com/downloads/dashboard/

        * platform/mac/WebFontCache.mm:
        (+[WebFontCache fontWithFamily:traits:size:]): Don't call [NSFont fontWithName:] with the desiredFamily on Tiger.

2007-02-01  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Darin.

        http://bugs.webkit.org/show_bug.cgi?id=12506
        REGRESSION: Safari doesn't display hebrew text on a web page,
        displayed correctly on Tiger

        * loader/TextResourceDecoder.cpp:
        (WebCore::TextResourceDecoder::checkForHeadCharset): Advance the pointer when necessary.

2007-02-01  George Staikos  <staikos@kde.org>

        Reviewed by Zack and Lars.

        Add a cookie interface for the Qt build.

        * WebCore.pro:
        * platform/qt/CookieJarQt.cpp:
        (WebCore::setCookies):
        (WebCore::cookies):
        (WebCore::cookiesEnabled):

2007-02-01  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Adele.
        
        - fixed <rdar://problem/4922764> ASSERTION: (!m_contentFunction) in PolicyCheck::call trying to visit feed URL (CNN, Apple, etc.)

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::stopPolicyCheck): Call new cancel method instead of call(false) on old check.
        (WebCore::PolicyCheck::cancel): call any callback function that is set with false or PolicyIgnore as
        appropriate.
        * loader/FrameLoader.h:

2007-02-01  Beth Dakin  <bdakin@apple.com>

        Reviewed by Hyatt.

        Fix for http://bugs.webkit.org/show_bug.cgi?id=10517 REGRESSION 
        (r12065-r12082): Navigation graphic wraps to the next line on 
        duart.com and <rdar://problem/4960505> REGRESSION: The Awesome 
        Windows Vista page has a layout error in the header table (10517)

        The problem is that we never supported a quirk that other browsers 
        support where, under very specific circumstances, a table cell will 
        grow to fit an image inside of it. This is only a regression 
        because a bug was fixed were we were 1 pixel off in the calculation 
        of overflow in some cases.

        * rendering/RenderBlock.cpp:
        (WebCore::shouldGrowTableCellForImage):
        (WebCore::RenderBlock::calcInlineMinMaxWidth):

2007-02-01  Zack Rusin  <zrusin@trolltech.com>

        Reviewed by Lars

        Implement native look for comboboxes
        and fix/implement popup menus.

        * platform/PopupMenu.h:
        * platform/qt/PopupMenuQt.cpp:
        (WebCore::PopupMenu::PopupMenu):
        (WebCore::PopupMenu::~PopupMenu):
        (WebCore::PopupMenu::clear):
        (WebCore::PopupMenu::populate):
        (WebCore::PopupMenu::show):
        (WebCore::PopupMenu::hide):
        (WebCore::PopupMenu::updateFromElement):
        * platform/qt/RenderThemeQt.cpp:
        (WebCore::RenderThemeQt::adjustMenuListStyle):
        (WebCore::RenderThemeQt::paintButton):
        (WebCore::RenderThemeQt::paintTextField):
        (WebCore::RenderThemeQt::paintMenuList):

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

        Reviewed by Maciej.

        - fix <rdar://problem/4887428> REGRESSION: Implement slight delay for firing incremental onSearch event

        * rendering/RenderTextControl.h:
        * rendering/RenderTextControl.cpp:
        (WebCore::RenderTextControl::RenderTextControl): Set up timer.
        (WebCore::RenderTextControl::subtreeHasChanged): Start timer here instead of immediately sending event.
        (WebCore::RenderTextControl::searchEventTimerFired): Added. Sends search event.
        (WebCore::RenderTextControl::stopSearchEventTimer): Added.
        (WebCore::RenderTextControl::startSearchEventTimer): Added. Sends search event right away if there is
        no text. If there is some text, sets the timer using the same delay rule as NSSearchField. If you keep
        typing, then the timer keeps getting reset 0.2 seconds into the future until you pause.

        * html/HTMLInputElement.cpp: (WebCore::HTMLInputElement::onSearch): Tell the renderer to
        stop the timer, since we're sending a search event. This helps when a caller other than
        the timer decides to send an explicit search event.

2007-02-01  Maciej Stachowiak  <mjs@apple.com>

        Fix by Darin, reviewed by Maciej.

        - fix ~10% performance regression from encoding fix

        * loader/TextResourceDecoder.cpp:
        (WebCore::TextResourceDecoder::checkForHeadCharset): Fix a logic
        error which made huge strings accidentally.

2007-02-01  Lars Knoll <lars@trolltech.com>

        Fix the Qt build

        * page/qt/EventHandlerQt.cpp:

2007-01-31  Darin Adler  <darin@apple.com>

        Reviewed by Adam and Geoff.

        - fix <rdar://problem/4786767> REGRESSION: <select> controls are not resized when zooming text

        Test: fast/forms/select-width-font-change.html

        * rendering/RenderMenuList.h: Cleaned up formatting a bit. Removed unneeded include of PopupMenu.h.
        Made a lot more things private, including the PopupMenuClient base class, all of the virtual
        functions from PopupMenuClient, and the setTextFromOption function. Added updateOptionsWidth.

        * rendering/RenderMenuList.cpp:
        (WebCore::RenderMenuList::setStyle): Added code to call updateOptionsWidth when the font changes.
        (WebCore::RenderMenuList::updateOptionsWidth): Added. Factored code out of updateFromElement.
        Changed to do nothing when m_optionsWidth is already correct.
        (WebCore::RenderMenuList::updateFromElement): Moved code to recomputed options width to the new
        updateOptionsWidth function.
        (WebCore::RenderMenuList::text): Made const.

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

        Reviewed by Adam.

        Migrate more drag and drop logic to WebCore, start preparing
        to move EventHandler::handleDrag from EventHandlerMac to EventHandler 

        * WebCore.exp:   
          updating methods
                    
        * dom/Clipboard.cpp:
        * dom/Clipboard.h:
        (WebCore::Clipboard::Clipboard):
        (WebCore::Clipboard::setDragHasStarted):
        (WebCore::Clipboard::dragStarted): 
          Moving from ClipboardMac to Clipboard 

        * dom/EventTargetNode.cpp:
        (WebCore::EventTargetNode::dispatchMouseEvent):
          PlatformMouseEvent no longer lies about button state, however 
          DOM Events don't allow NoButton, so we need to convert NoButton 
          to LeftButton when we create a DOM Event from PlatformMouseEvent

        * page/DragClient.h:
          Tidying comment 

        * page/DragController.cpp:
        (WebCore::createMouseEvent):
          Updated for new PlatformMouseEvent constructors
        (WebCore::DragController::mayStartDragAtEventLocation):
          Migrated from WebKit

        * page/DragController.h:
          Added above function declarations

        * page/EventHandler.cpp:
        (WebCore::EventHandler::dragState): 
        (WebCore::EventHandler::dragHysteresisExceeded):
        (WebCore::EventHandler::freeClipboard):
        (WebCore::EventHandler::shouldDragAutoNode):
          Moved from EventHandlerMac
        (WebCore::EventHandler::handleMouseMoveEvent):
        (WebCore::EventHandler::eventMayStartDrag):
        (WebCore::EventHandler::handleMousePressEvent):
          Use DragController     

        * page/EventHandler.h:
          Added DragState struct definition to EventHandler

        * page/mac/EventHandlerMac.mm:
        (WebCore::EventHandler::eventActivatedView):
        (WebCore::EventHandler::handleDrag):
        (WebCore::EventHandler::handleMouseUp):
        (WebCore::EventHandler::mouseDown):
          Update to use DragController and PlatformMouseEvent

        * page/mac/WebCoreFrameBridge.h:
        * page/mac/WebCoreFrameBridge.mm:
        (-[WebCoreFrameBridge dragSourceMovedTo:]):
        (-[WebCoreFrameBridge dragSourceEndedAt:operation:]):
          Use DragController for state

        * platform/PlatformMouseEvent.h:
        (WebCore::):
        (WebCore::PlatformMouseEvent::PlatformMouseEvent):
        (WebCore::PlatformMouseEvent::eventType):
        (WebCore::PlatformMouseEvent::timestamp):
        (WebCore::PlatformMouseEvent::eventNumber):
        (WebCore::PlatformMouseEvent::setClickCount):
          Exposing necessary data for Drag logic

        * platform/mac/ClipboardMac.h:
        * platform/mac/ClipboardMac.mm:
        (WebCore::ClipboardMac::ClipboardMac):
        (WebCore::ClipboardMac::setDragImage):
          Have moved a number of fields from ClipboardMac to Clipboard
          so need to use accessors in a few places now

        * platform/mac/PlatformMouseEventMac.mm:
        (WebCore::mouseButtonForEvent):
        (WebCore::mouseEventForNSEvent):
        (WebCore::PlatformMouseEvent::PlatformMouseEvent):
          Determine MouseEventType, and provide event time info

2007-01-31  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Darin.

        http://bugs.webkit.org/show_bug.cgi?id=12506
        REGRESSION: Safari doesn't display hebrew text on a web page,
        displayed correctly on Tiger

        * loader/TextResourceDecoder.cpp:
        (WebCore::TextResourceDecoder::checkForHeadCharset): Skip over 
        quoted attributes.

2007-01-31  David Carson  <dacarson@gmail.com>

        Reviewed by Darin.

        - fix http://bugs.webkit.org/show_bug.cgi?id=12510
        Initialize the variable m_totalLoops
        Is tested by LayoutTests/fast/css/MarqueeLayoutTest.html

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

2007-01-31  Anders Carlsson  <acarlsson@apple.com>

        Reviewed by Maciej.

        <rdar://problem/4886776>
        REGRESSION: After opening a web archive, location shows the actual URL, not the webarchive file

        * WebCore.exp:
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::continueLoadWithData):
        * loader/FrameLoader.h:
        New function which continues a load but using a given buffer instead.
        
2007-01-31  Adele Peterson  <adele@apple.com>

        Reviewed by Adam.

        Fix for http://bugs.webkit.org/show_bug.cgi?id=12516
        REGRESSION (r19313): All keyboard navigation has stopped working

        For non-editable selections, handleKeyPress doesn't need to call _interceptEditingKeyEvent. 

        * editing/Editor.cpp:
        (WebCore::selectionForEvent): Moved this to the top of the file.
        (WebCore::Editor::handleKeyPress): Do the equivalent of the _canEdit check that used to be in WebKit WebEditorClient::handleKeyPress.

2007-01-31  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Darin Adler.

        Added a Range counter to detect leaks. Tweaked the Node counter.
        
        Also fixed a TextIterator destructive modification bug that I noticed along the
        way. No test case for this bug because no clients have been bitten by it
        yet.

        * dom/Node.cpp: Renamed NodeImplCounter to NodeCounter, changed counter
        to unsigned, fixed formatting to match style guidelines.
        (WebCore::NodeCounter::~NodeCounter):
        (WebCore::Node::Node):
        (WebCore::Node::~Node):

        * dom/Range.cpp:
        (WebCore::RangeCounter::~RangeCounter): Added.
        (WebCore::Range::Range):
        (WebCore::Range::~Range):
        (WebCore::Range::ownerDocument): New accessor, used by TextIterator to avoid
        annoying NULL checks.
        * dom/Range.h:

        * editing/TextIterator.cpp:
        (WebCore::TextIterator::subrange): 
        (1) Don't initialize result with entireRange --  doing so would create a 
        PassRefPtr that pointed to entireRange, so this function would destructively 
        modify the Range you passed it. Initialize it with a new Range instead.
        (2) Don't use a PassRefPtr as a local variable, because they have sneaky
        semantics. Use a RefPtr instead.
        (3) Don't call CharacterIterator::range() willy-nilly, since it does 
        non-trivial work. Use a local variable instead.

2007-01-31  Adele Peterson  <adele@apple.com>

        Reviewed by Darin.

        WebCore part of fix for <rdar://problem/4521461> REGRESSION: when keyPress event changes form focus, inserted key goes to wrong control

        Test: fast/events/keypress-focus-change.html

        * editing/Editor.cpp:
        (WebCore::selectionForEvent): Added.  This computes a selection that considers the case where an event handler 
         has moved the selection outside of a text control.  In that case, we use the target control's selection.
        (WebCore::Editor::insertText): This gets the selectionForEvent, checks that the selection is editable,
         and calls TypingCommand::insertText with the correct selection.

        * editing/TypingCommand.h: Added a version of insertText that takes a selection.  The old version of insertText will call this, and pass
          in the frame's selection.
        * editing/TypingCommand.cpp: (WebCore::TypingCommand::insertText): Added. Uses the passed in selection to 
          set the starting and ending selections correctly so that the editing machinery will insert the text in the correct place.

        * page/Page.h: Added convenience method to get selection from focused or main frame.
        * page/Page.cpp: (WebCore::Page::selection):

        * html/HTMLInputElement.h: Added selection methods to get selection for text controls.
        * html/HTMLInputElement.cpp: (WebCore::HTMLInputElement::selection):
        * html/HTMLTextAreaElement.h:
        * html/HTMLTextAreaElement.cpp: (WebCore::HTMLTextAreaElement::selection):
        * rendering/RenderTextControl.h:
        * rendering/RenderTextControl.cpp: (WebCore::RenderTextControl::selection):

2007-01-31  Darin Adler  <darin@apple.com>

        - fix build

        * ForwardingHeaders/wtf/ListHashSet.h: Added.

2007-01-31  Zack Rusin  <zrusin@trolltech.com>

        Reviewed by Lars

        Return the correct selection color.

        * platform/qt/RenderThemeQt.cpp:
        (WebCore::RenderThemeQt::supportsFocusRing):
        (WebCore::RenderThemeQt::platformActiveSelectionBackgroundColor):
        (WebCore::RenderThemeQt::platformInactiveSelectionBackgroundColor):
        (WebCore::RenderThemeQt::platformActiveSelectionForegroundColor):
        (WebCore::RenderThemeQt::platformInactiveSelectionForegroundColor):

2007-01-31  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Mark.

        - fixed <rdar://problem/4751164> REGRESSION: Safari places text on incorrect button when returning to a page via back [10541]
        http://bugs.webkit.org/show_bug.cgi?id=10541

        * dom/Document.cpp:
        (WebCore::Document::formElementsState):
        * dom/Document.h:
        
        I couldn't figure out the back/forward support in the tests enough
        to make an automated test, but this maual test reproduces the
        problem 100% without this patch:
        
        * manual-tests/back.html: Added.
        * manual-tests/form-control-madness.html: Added.

2007-01-31  David Kilzer  <ddkilzer@kilzer.net>

        Reviewed by Mitz.

        - fix http://bugs.webkit.org/show_bug.cgi?id=12490
          Clean up canPlaceOnLine logic in bidi.cpp

        No test cases since there is no change in functionality.

        * rendering/bidi.cpp:
        (WebCore::RenderBlock::findNextLineBreak): Simplify canFitOnLine expression.

2007-01-31  Zack Rusin  <zack@kde.org>

        Adding comments explaining how the focus ring implementation
        works on the Qt platform and just move focus ring rendering
        related code to the same spot.

        * platform/graphics/qt/GraphicsContextQt.cpp:
        (WebCore::setFocusRingColorChangeFunction):
        (WebCore::focusRingColor):
        (WebCore::GraphicsContext::drawFocusRing):
        * platform/qt/TemporaryLinkStubs.cpp:

2007-01-31  Zack Rusin  <zrusin@trolltech.com>

        Reviewed by Lars

        Properly propagate key events. 

        * page/qt/FrameQt.cpp:
        * page/qt/FrameQt.h: Remove redundant method.
        * platform/qt/ScrollViewCanvasQt.cpp:
        (WebCore::ScrollViewCanvasQt::handleKeyEvent):

2007-01-31  George Staikos  <staikos@kde.org>

        Reviewed by Zack and Lars.

        Fix double delete on cancel as well as assertion with proxy.

        * platform/network/qt/ResourceHandleManagerQt.cpp:
        (WebCore::WebCoreHttp::getConnection):
        (WebCore::WebCoreHttp::onRequestFinished):
        (WebCore::WebCoreHttp::cancel):

2007-01-31  Mark Rowe  <mrowe@apple.com>

        Reviewed by Oliver.

        * dom/Document.h: Change #if XSLT_SUPPORT to #ifdef XSLT_SUPPORT.

2007-01-31  Lars Knoll <lars@trolltech.com>

        Fix the Qt build.

        * platform/network/qt/ResourceHandleQt.cpp:
        (WebCore::ResourceHandle::setDefersLoading):

2007-01-31  Zack Rusin  <zack@kde.org>

        Reviewed by Eric.

        Implement SVGImage on the Qt platform.

        * WebCore.pro:
        * loader/CachedImage.cpp:
        (WebCore::CachedImage::createImage):
        * platform/graphics/ImageBuffer.h:
        * platform/graphics/qt/ImageBufferQt.cpp:
        (WebCore::ImageBuffer::create):
        (WebCore::ImageBuffer::ImageBuffer):
        (WebCore::ImageBuffer::~ImageBuffer):
        (WebCore::ImageBuffer::context):
        (WebCore::ImageBuffer::pixmap):
        * platform/graphics/svg/SVGImage.cpp:
        (WebCore::SVGImage::nativeImageForCurrentFrame):
        (WebCore::SVGImage::setData):

2007-01-30  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Brady.

        - fixed <rdar://problem/4939366> REGRESSION: Assertion failure and crash when going back in history (12314)

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::createWindow): special case a frame name of "_blank"
        (WebCore::FrameLoader::continueLoadAfterNewWindowPolicy): ditto

2007-01-30  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Anders.

        - fixed <rdar://problem/4963871> REGRESSION: Crash occurs at WebCore::Frame::loader() when attempting to open a saved archive file

        * loader/DocumentLoader.cpp:
        (WebCore::DocumentLoader::request): Removed obsolete FIXME.
        (WebCore::DocumentLoader::initialRequest): Ditto.
        * loader/MainResourceLoader.cpp:
        (WebCore::MainResourceLoader::MainResourceLoader): Handle data loads from a timer, otherwise bad things happen.
        (WebCore::MainResourceLoader::handleDataLoadNow):
        (WebCore::MainResourceLoader::handleDataLoadSoon):
        (WebCore::MainResourceLoader::loadNow):
        (WebCore::MainResourceLoader::didCancel): cancel data load timer
        * loader/MainResourceLoader.h:

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

        Reviewed by Darin.

        <rdar://problem/4961953> Stop using NSString deprecated methods like initWithCString:

        * WebCore.xcodeproj/project.pbxproj:
        * platform/graphics/svg/filters/cg/WKArithmeticFilter.m:
        (-[WKArithmeticFilter init]):
        * platform/graphics/svg/filters/cg/WKComponentMergeFilter.m:
        (-[WKComponentMergeFilter init]):
        * platform/graphics/svg/filters/cg/WKDiffuseLightingFilter.m:
        (-[WKDiffuseLightingFilter init]):
        * platform/graphics/svg/filters/cg/WKDiscreteTransferFilter.m:
        (-[WKDiscreteTransferFilter init]):
        * platform/graphics/svg/filters/cg/WKDisplacementMapFilter.m:
        (-[WKDisplacementMapFilter init]):
        * platform/graphics/svg/filters/cg/WKDistantLightFilter.m:
        (-[WKDistantLightFilter init]):
        * platform/graphics/svg/filters/cg/WKGammaTransferFilter.m:
        (-[WKGammaTransferFilter init]):
        * platform/graphics/svg/filters/cg/WKLinearTransferFilter.m:
        (-[WKLinearTransferFilter init]):
        * platform/graphics/svg/filters/cg/WKNormalMapFilter.m:
        (-[WKNormalMapFilter init]):
        * platform/graphics/svg/filters/cg/WKPointLightFilter.m:
        (-[WKPointLightFilter init]):
        * platform/graphics/svg/filters/cg/WKSpecularLightingFilter.m:
        (-[WKSpecularLightingFilter init]):
        * platform/graphics/svg/filters/cg/WKSpotLightFilter.m:
        (-[WKSpotLightFilter init]):
        * platform/graphics/svg/filters/cg/WKTableTransferFilter.m:
        (-[WKTableTransferFilter init]):

2007-01-30  David Hyatt  <hyatt@apple.com>

        Fix for Radar bug #4679426, golden gate bridge Web site layout broken.
        
        This is a regression caused by the addition of :lang support.  This
        feature caused us to accept any pseudo-class/element with function
        arguments, even ones we couldn't handle.  The site used such a construct
        in conjunction with :not, which turned :not(something-crazy) into not(false).
        This ended up being "true", and so we started matching a rule we used to
        reject.

        The fix is to now aggressively parse pseudo-elements and classes and to
        cause the rejection of an entire rule if any pseudoclass or element within
        any simple selector of that rule is unrecognized.

        Reviewed by darin

        fast/css/invalid-pseudo-classes.html

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

2007-01-30  Mitz Pettel  <mitz@webkit.org>

        Reviewed by Darin.

        - fix http://bugs.webkit.org/show_bug.cgi?id=12487
          REGRESSION: Repro crash when a second background image is animated

        Test: fast/images/animated-background-image-crash.html

        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::arenaDelete): Deref() all background images and the
        border image.

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

        Reviewed by Maciej.

        * dom/EventTarget.h:
        * dom/EventTarget.cpp: (WebCore::EventTarget::toNode):
        Use EventTargetNode instead of Node. Removed unneeded includes.
        Make EventTarget's destructor protected to make it clear that you
        should never delete one.

        * dom/EventTargetNode.h:
        (WebCore::EventTargetNode::toNode):
        Tweaked formatting. Updated for change to return value.

        * platform/graphics/BitmapImage.h: Updated comment for clarity.
        Marked FrameData Noncopyable.

        * platform/graphics/Image.h: Tweaked formatting.

        * platform/graphics/ImageAnimationObserver.h:
        Make ImageAnimationObserver's destructor protected to make it clear that you
        should never delete one.

2007-01-30  Mitz Pettel  <mitz@webkit.org>

        Reviewed by Darin (by way of Hyatt).

        - fix http://bugs.webkit.org/show_bug.cgi?id=12373
          ASSERTION FAILURE: !child->needsLayout() on paypal.com

        Test: fast/table/inline-form-assert.html

        * rendering/RenderContainer.cpp:
        (WebCore::RenderContainer::layout): Changed the assertion to ignore inlines.

2007-01-30  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Darin.

        http://bugs.webkit.org/show_bug.cgi?id=12486
        XPathNSResolver.lookupNamespaceURI should return null if no URI is found

        * xml/XPathNSResolver.idl: added [ConvertNullStringTo=Null].

2007-01-30  Anders Carlsson  <acarlsson@apple.com>

        Reviewed by Maciej.

        Revert the parts of 19244 that removed deferring NSURLConnections, that was not a correct change.
        Remove ASSERTS from loader.cpp that aren't true anymore since the callbacks are invoked without a handle
        when loading a subresource from an archive.

        * loader/MainResourceLoader.cpp:
        (WebCore::MainResourceLoader::loadNow):
        * loader/ResourceLoader.cpp:
        (WebCore::ResourceLoader::releaseResources):
        (WebCore::ResourceLoader::load):
        (WebCore::ResourceLoader::setDefersLoading):
        * loader/loader.cpp:
        (WebCore::Loader::didFail):
        (WebCore::Loader::didReceiveResponse):
        (WebCore::Loader::didReceiveData):
        * platform/network/ResourceHandle.cpp:
        (WebCore::ResourceHandle::ResourceHandle):
        (WebCore::ResourceHandle::create):
        * platform/network/ResourceHandle.h:
        * platform/network/ResourceHandleInternal.h:
        (WebCore::ResourceHandleInternal::ResourceHandleInternal):
        * platform/network/mac/ResourceHandleMac.mm:
        (WebCore::ResourceHandle::start):
        (WebCore::ResourceHandle::setDefersLoading):

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

        Reviewed by John.

        - fix for <rdar://problem/4911504> REGRESSION: With a image selected, ctrl-clicking
          on page displays the wrong contextual menu items "Search in Google", "Search in Spotlight"
          and "Look up in Dictionary"

        * platform/ContextMenu.cpp:
        (WebCore::selectionContainsPossibleWord): Added. Returns true if there are some
        non-whitespace characters in the selection.
        (WebCore::ContextMenu::populate): Don't add SearchSpotlightItem, SearchWebItem,
        or LookInDictionaryItem if selectionContainsPossibleWord returns false.

2007-01-30  Nikolas Zimmermann  <zimmermann@kde.org>

        Reviewed by Oliver.

        Respect stroke-width in absolute repaint rect calculations for SVG text.
        Added test: svg/custom/text-repaint-including-stroke.svg

        * rendering/RenderSVGText.cpp:
        (WebCore::RenderSVGText::relativeBBox):

2007-01-30  Steve Falkenburg  <sfalken@apple.com>

        Reviewed by Oliver.

        Add missing includes.

        * ksvg2/svg/SVGElementInstance.cpp:

2007-01-30  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Darin.

        http://bugs.webkit.org/show_bug.cgi?id=12452
        XPath id() function is not supported

        * xml/XPathFunctions.cpp:
        (WebCore::XPath::isWhitespace): A helper to detect XML whitespace.

        (WebCore::XPath::FunId::isConstant):
        (WebCore::XPath::FunId::doEvaluate):
        (WebCore::XPath::FunctionMapping::):
        Implemented id().

2007-01-30  Zack Rusin  <zrusin@trolltech.com>

        Reviewed by Sam.

        Make the gradients work on the Qt platform.

        * platform/graphics/svg/SVGPaintServerGradient.h:
        * platform/graphics/svg/SVGPaintServerLinearGradient.h:
        * platform/graphics/svg/SVGPaintServerRadialGradient.h:
        * platform/graphics/svg/qt/SVGPaintServerGradientQt.cpp:
        (WebCore::SVGPaintServerGradient::fillColorArray):
        (WebCore::SVGPaintServerGradient::setup):
        * platform/graphics/svg/qt/SVGPaintServerLinearGradientQt.cpp:
        (WebCore::SVGPaintServerLinearGradient::setupGradient):
        * platform/graphics/svg/qt/SVGPaintServerRadialGradientQt.cpp:
        (WebCore::SVGPaintServerRadialGradient::setupGradient):

2007-01-30  Nikolas Zimmermann  <zimmermann@kde.org>

        Reviewed by Eric & Oliver. Leak related fixes reviewed by Mark.

        Finally make the SVG <use> implementation use the proper "shadow tree" concept,
        which is also used by the HTML forms implementation. It's the first time in ksvg
        history that <use> is not implement as a crude hack, but proper & sane.

        Implement deep expansion of use trees both for the instance & shadow tree.
        (<use> on a <symbol> containing a <g> containg a <use> element referencing a <rect>)
 
        The shadow tree is free of any symbol/use tags, but is properly expanded to the
        actual referenced content. The instance tree (SVGElementInstance objects) now exactly
        exposes the "expanded" shadow tree, as required by the specification. Previously
        we cloned referenced <use> elements, so our faked use shadow tree itself contained
        <use> elements. That lead to very nasty bugs - finally these dirty pieces are gone.

        Checked twice that the updating logic works for all weird "deep expansions" cases. Example:
        <rect id="someRect"/> <g id="g"> <symbol> <use xlink:href="#someRect"/> </g> <use xlink:href="#g" id="use"/>
 
        If you walk through the instanceRoot using JavasScript, and explicitely modify some propertties of "someRect"
        -> all instances get updated correctly. For such simple cases it doesn't even involve recloning the shadow tree!

        SVGElementInstance is now an EventTarget, as demanded by the specification - sending events to <use> instances
        will be implemented in a follow-up patch - as well as the "share event listeners with referenced target" logic.

        Fixes all updating/stability issues with svg/carto.net/window.svg.
        Fixes: http://bugs.webkit.org/show_bug.cgi?id=6000 (<use> does not handle recursion safely)

        Added test: svg/custom/use-on-use.svg (deep use referencing)
        Added test: svg/custom/use-on-g-containing-use.svg (nested deep use referencing)
        Added test: svg/custom/use-modify-target-container.svg (instanceRoot scripting, modifying <g> target)
        Added test: svg/custom/use-modify-target-symbol.svg (instanceRoot scripting, modfiying <symbol> target)
        Added test: svg/custom/use-modify-container-in-target.svg (modify <g> within referenced use target -> needs to update instances)
        Added test: svg/custom/use-recursion-1.svg (referencing container, whose children reference itself)
        Added test: svg/custom/use-recursion-2.svg (<use> self referencing)
        Added test: svg/custom/use-recursion-3.svg (<use> self rerencing, within <use> target)
        Added test: svg/custom/use-recursion-4.svg (cyclic referencing, within <use> target)

        * bindings/scripts/CodeGeneratorJS.pm:
        * css/cssstyleselector.cpp:
        (WebCore::CSSStyleSelector::initForStyleResolve):
        (WebCore::CSSStyleSelector::adjustRenderStyle):
        * ksvg2/misc/SVGDocumentExtensions.cpp:
        (WebCore::SVGDocumentExtensions::removeTimeContainer):
        * ksvg2/svg/SVGElement.cpp:
        (WebCore::SVGElement::SVGElement):
        (WebCore::SVGElement::viewportElement):
        * ksvg2/svg/SVGElement.h:
        (WebCore::SVGElement::isShadowNode):
        (WebCore::SVGElement::shadowParentNode):
        (WebCore::SVGElement::setShadowParentNode):
        * ksvg2/svg/SVGElementInstance.cpp:
        (WebCore::SVGElementInstance::SVGElementInstance):
        (WebCore::SVGElementInstance::correspondingUseElement):
        (WebCore::SVGElementInstance::shadowTreeElement):
        (WebCore::SVGElementInstance::setShadowTreeElement):
        (WebCore::containsUseChildNode):
        (WebCore::SVGElementInstance::updateInstance):
        (WebCore::SVGElementInstance::addEventListener):
        (WebCore::SVGElementInstance::removeEventListener):
        (WebCore::SVGElementInstance::dispatchEvent):
        * ksvg2/svg/SVGElementInstance.h:
        (WebCore::SVGElementInstance::refEventTarget):
        (WebCore::SVGElementInstance::derefEventTarget):
        (WebCore::SVGElementInstance::hasOneRef):
        (WebCore::SVGElementInstance::refCount):
        (WebCore::SVGElementInstance::setParent):
        (WebCore::SVGElementInstance::parent):
        * ksvg2/svg/SVGElementInstance.idl:
        * ksvg2/svg/SVGGElement.cpp:
        (WebCore::SVGGElement::localMatrix):
        * ksvg2/svg/SVGGElement.h:
        * ksvg2/svg/SVGHiddenElement.h: Removed.
        * ksvg2/svg/SVGSVGElement.cpp:
        (WebCore::SVGSVGElement::~SVGSVGElement):
        * ksvg2/svg/SVGStyledElement.cpp:
        (WebCore::SVGStyledElement::updateElementInstance):
        * ksvg2/svg/SVGUseElement.cpp:
        (WebCore::SVGUseElement::removedFromDocument):
        (WebCore::SVGUseElement::notifyAttributeChange):
        (WebCore::dumpInstanceTree):
        (WebCore::SVGUseElement::buildPendingResource):
        (WebCore::SVGUseElement::attach):
        (WebCore::SVGUseElement::buildInstanceTree):
        (WebCore::SVGUseElement::handleDeepUseReferencing):
        (WebCore::SVGUseElement::buildShadowTree):
        (WebCore::SVGUseElement::expandUseElementsInShadowTree):
        (WebCore::SVGUseElement::attachShadowTree):
        (WebCore::SVGUseElement::associateInstancesWithShadowTreeElements):
        (WebCore::SVGUseElement::transferUseAttributesToReplacedElement):
        * ksvg2/svg/SVGUseElement.h:

2007-01-30  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Eric.

        <rdar://problem/4928646> REGRESSION: manual-tests/remove-input-file-onchange.html crashes
        
        * platform/FileChooser.h:
        (WebCore::FileChooser::disconnected): New method, so the RenderFileControl can tell when it's
        gotten disconected.
        * rendering/RenderFileUploadControl.cpp:
        (WebCore::RenderFileUploadControl::valueChanged): Avoid calling repainted() when onChange()
        handler destroyed us.

2007-01-30  Simon Hausmann  <hausmann@kde.org>

        Reviewed by Zack.

        Combine libJavaScriptCore into libWebKitQt.
        Build with ELF visibility if possible.

        * WebCore.pro:

2007-01-30  Zack Rusin  <zack@kde.org>

        The method has been removed from the header
        (make it compile)

        * platform/network/qt/ResourceHandleQt.cpp:

2007-01-30  Zack Rusin  <zrusin@trolltech.com>

        Reviewed by aroben

        Compile fix. 

        * loader/ResourceLoader.cpp:
        (WebCore::ResourceLoader::releaseResources):
        (WebCore::ResourceLoader::setDefersLoading):

2007-01-29  Zack Rusin  <zack@kde.org>

        Reviewed by Lars

        Propagate the allows-scrolling property on the frames
        correctly. If the frame has been constructed as non-
        scrolling, respect that and don't show scrollbars.

        * platform/ScrollView.h:
        * platform/qt/ScrollViewQt.cpp:
        (WebCore::ScrollView::ScrollView):
        (WebCore::ScrollView::setHScrollbarMode):
        (WebCore::ScrollView::setVScrollbarMode):
        (WebCore::ScrollView::setAllowsScrolling):

2007-01-29  Geoffrey Garen  <ggaren@apple.com>

        I am the chosen one! I have seen the faces of the final five! I will
        save the WebKit build!
        
        * loader/ResourceLoader.cpp:
        (WebCore::ResourceLoader::load):

2007-01-30  Graham Dennis  <graham.dennis@gmail.com>

        Reviewed by Maciej.

        Part of fix for http://bugs.webkit.org/show_bug.cgi?id=10725
        Image data in from RTFD clipboard data thrown away
        
        ResourceHandles no longer need to be able to defer loading as that is
        now handled by the ResourceLoader.

        * loader/MainResourceLoader.cpp:
        (WebCore::MainResourceLoader::loadNow): updated to remove defersLoading argument.
        * loader/ResourceLoader.cpp:
        (WebCore::ResourceLoader::releaseResources): release the deferred request.
        (WebCore::ResourceLoader::load): defer creating the ResourceHandle instead of
        asking the ResourceHandle to defer loading.
        (WebCore::ResourceLoader::setDefersLoading): create the ResourceHandle if we have deferred creating it.
        * loader/ResourceLoader.h:
        * platform/network/ResourceHandle.cpp: ResourceHandle's don't need to know about deferLoading.
        (WebCore::ResourceHandle::ResourceHandle):
        (WebCore::ResourceHandle::create):
        * platform/network/ResourceHandle.h: ditto.
        * platform/network/ResourceHandleInternal.h: ditto.
        (WebCore::ResourceHandleInternal::ResourceHandleInternal):
        * platform/network/mac/ResourceHandleMac.mm: ditto.
        (WebCore::ResourceHandle::start):

2007-01-29  Brady Eidson  <beidson@apple.com>

        Reviewed by Alice

        Lets use smart pointers, shall we?

        * platform/network/ResourceHandleInternal.h:

2007-01-29  Justin Garcia  <justin.garcia@apple.com>

        Reviewed by harrison
        
        <rdar://problem/4960137>
        ASSERTION FAILURE calling SelectionController::setBaseAndExtent (11833)

        * editing/SelectionController.cpp:
        (WebCore::SelectionController::setSelection): Hand off the selection
        to the selectionController responsible for it, instead of asserting.
        A selection object can't be constructed with endpoints in different 
        documents, so this code is only necessary for one endpoint.

2007-01-29  Ada Chan  <adachan@apple.com>

        Reviewed by Brady.
        
        Moved the update of the title of the current entry in the backforward list to WebCore.

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

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

        Reviewed by Darin.

        More preparation for event handling fixes.

        * bridge/EditorClient.h: Removed EventTargetNode parameter from handleKeyPress since we can just get that from the event.
        * dom/EventTargetNode.cpp: (WebCore::EventTargetNode::defaultEventHandler): ditto.
        * page/EventHandler.cpp: (WebCore::EventHandler::defaultKeyboardEventHandler): ditto.
        * page/EventHandler.h: ditto.
        * platform/graphics/svg/SVGImageEmptyClients.h: (WebCore::SVGEmptyEditorClient::handleKeyPress): ditto.

        * editing/Editor.h:
        * editing/Editor.cpp:
        (WebCore::Editor::handleKeyPress): Removed EventTargetNode parameter.
        (WebCore::Editor::execCommand): Made commandMap use AtomicStringImpls instead of Strings.
        (WebCore::Editor::insertText): Moved from the bridge.

        * page/mac/WebCoreFrameBridge.h: Moved insertText method to Editor.
        * page/mac/WebCoreFrameBridge.mm:

        * WebCore.exp: Updated exports.

2007-01-29  Anders Carlsson  <acarlsson@apple.com>

        Reviewed by Geoff.

        <rdar://problem/4960097>
        http://bugs.webkit.org/show_bug.cgi?id=12444
        Assertion failure in -[WebCoreFrameBridge installInFrame:]
        
        The problem was that the XML tokenizer didn't create elements with 
        createdByParser set to true.
        
        * dom/Document.cpp:
        (WebCore::Document::createElement):
        New method which takes a QName. This is used by both the XML tokenizer and createElementNS.
        
        (WebCore::Document::createElementNS):
        Call new createElement method.
        
        * dom/XMLTokenizer.h:        
        * dom/XMLTokenizer.cpp:
        (WebCore::XMLTokenizer::XMLTokenizer):
        (WebCore::XMLTokenizer::~XMLTokenizer):
        Use an OwnPtr for the pending callbacks object. Also, use String instead of StringImpl in the hash map.
        
        (WebCore::toString):
        (WebCore::XMLTokenizer::startElementNs):
        Call createElement.
        
2007-01-29  Brady Eidson  <beidson@apple.com>

        Reviewed by Oliver

        http://bugs.webkit.org/show_bug.cgi?id=12465
        Only set the iconURL port for non-zero ports

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

2007-01-29  John Sullivan  <sullivan@apple.com>

        * platform/network/mac/ResourceRequestMac.mm:
        Build fix -- removed #import of no-longer-extant WebDataProtocol.h (and also one of the
        two #imports for WebCoreSystemInterface.h, while I was at it)

2007-01-29  Anders Carlsson  <acarlsson@apple.com>

        Reviewed by Oliver.

        * page/DragController.cpp:
        (WebCore::DragController::dragEnteredOrUpdated):
        Only try a drag operation if the drag client explicitly specified that it is OK

2007-01-29  Oliver Hunt  <oliver@apple.com>

        Reviewed by Adam.

        Migrated more drag logic and state to WebCore
                                              
        * page/DragClient.h:       

        * page/DragController.cpp:
        (WebCore::DragController::delegateDragSourceAction):
          New forwarding method for the UI delegate
        * page/DragController.h:
        (WebCore::DragController::dragOffset):
          Now store the drag offset -- the offset of the cursor relative to the drag image)
          in DragController
        * page/EventHandler.cpp:
        (WebCore::EventHandler::allowDHTMLDrag):
          Moved from WebFrameBridge
        * page/EventHandler.h:
        * page/mac/EventHandlerMac.mm:
        (WebCore::EventHandler::eventMayStartDrag):
        (WebCore::EventHandler::handleDrag):                  
          EventHandlerMac now uses EventHandler::allowDHTMLDrag rather than the 
          implementation in WebFrameBridge
        * page/mac/WebCoreFrameBridge.h:
          removed definition of allowDHTMLDrag from WebFrameBridge
        * platform/graphics/svg/SVGImageEmptyClients.h:
        (WebCore::SVGEmptyDragClient::dragSourceActionMaskForPoint):
          Updated empty DragClient

2007-01-29  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Darin.

        http://bugs.webkit.org/show_bug.cgi?id=12359
        XPathEvaluator may return some nodes more than once in a result set

        Test: fast/xpath/nodeset-duplicates.html

        * xml/XPathPath.cpp:
        (WebCore::XPath::LocationPath::doEvaluate): Ensure uniqueness of elements
        in the node-set.

        * xml/XPathPredicate.cpp:
        (WebCore::XPath::Union::doEvaluate): Fixed a uniqueness algorithm that was
        already present here. Added a FIXME about incorrect result ordering.

2007-01-29  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Darin.

        http://bugs.webkit.org/show_bug.cgi?id=12340
        XPathEvaluator behavior does not match Firefox - name() and attribute nodes

        * xml/XPathFunctions.cpp:
        (WebCore::XPath::FunName::doEvaluate): Do not try to append a prefix if it doesn't exist.

2007-01-29  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Darin.

        http://bugs.webkit.org/show_bug.cgi?id=11815
        XPathEvaluator behavior does not match Firefox - substring() and empty element

        Test: fast/xpath/empty-string-substring.html

        * xml/XPathValue.cpp:
        (WebCore::XPath::Value::Value):
        * xml/XPathValue.h:
        Added a constructor taking const char*, so that string literals and arrays don't 
        get converted to boolean values.

2007-01-29  Zack Rusin  <zrusin@trolltech.com>

        Cosmetic fixes - don't resize the widget in the constructor
        (it was a hack from the initial port) and fix the paint
        signature.

        * platform/qt/ScrollViewCanvasQt.cpp:
        (WebCore::ScrollViewCanvasQt::ScrollViewCanvasQt):
        * platform/qt/WidgetQt.cpp:
        (WebCore::Widget::paint):

2007-01-29  Maciej Stachowiak  <mjs@apple.com>

        - change from struct to class to make picky compilers happy

        * loader/SubstituteData.h:

2007-01-30  Mark Rowe  <mrowe@apple.com>

        Reviewed by Maciej.

        http://bugs.webkit.org/show_bug.cgi?id=12458
        Bug 12458: Crash in W3C-SVG-1.1/animate-elem-09-t.svg running layout tests under guard malloc

        * ksvg2/svg/SVGAnimationElement.cpp: 
        (WebCore::parseValues): ptr either points to a ';' or off the end of the buffer.  We're
        interested in what comes before the ';', so start there instead.

2007-01-29  Zack Rusin  <zrusin@trolltech.com>

        Reviewed by Lars.

        Take the scrollbars into considation when computing
        the contents size of the main frame.

        * platform/qt/PlatformScrollBarQt.cpp:
        (WebCore::PlatformScrollbar::paint):
        * platform/qt/ScrollViewQt.cpp:
        (WebCore::ScrollView::visibleWidth):
        (WebCore::ScrollView::visibleHeight):
        (WebCore::ScrollView::visibleContentRect):
        * platform/qt/WidgetQt.cpp:
        (WebCore::Widget::invalidate):
        (WebCore::Widget::invalidateRect):

2007-01-29  Maciej Stachowiak  <mjs@apple.com>

        - fix includes

        * loader/SubstituteData.h:

2007-01-29  Maciej Stachowiak  <mjs@apple.com>

        - added new file that I forgot in the last commit

        * loader/SubstituteData.h: Added.
        (WebCore::SubstituteData::SubstituteData):
        (WebCore::SubstituteData::isValid):
        (WebCore::SubstituteData::content):
        (WebCore::SubstituteData::mimeType):
        (WebCore::SubstituteData::textEncoding):
        (WebCore::SubstituteData::failingURL):

2007-01-29  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Mark.

        - made data loading cross-platform
        - fixed <rdar://problem/4910106>

        * WebCore.exp:
        * WebCore.xcodeproj/project.pbxproj:
        * loader/CachedResource.cpp:
        * loader/CachedResource.h:
        * loader/DocLoader.cpp:
        (WebCore::DocLoader::requestResource):
        * loader/DocumentLoader.cpp:
        (WebCore::DocumentLoader::DocumentLoader):
        (WebCore::DocumentLoader::setRequest):
        (WebCore::DocumentLoader::urlForHistory):
        (WebCore::DocumentLoader::unreachableURL):
        * loader/DocumentLoader.h:
        (WebCore::DocumentLoader::substituteData):
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::load):
        (WebCore::FrameLoader::shouldReloadToHandleUnreachableURL):
        (WebCore::FrameLoader::reloadAllowingStaleData):
        (WebCore::FrameLoader::reload):
        (WebCore::FrameLoader::commitProvisionalLoad):
        (WebCore::FrameLoader::startLoadingMainResource):
        (WebCore::FrameLoader::startLoading):
        (WebCore::FrameLoader::checkNavigationPolicy):
        * loader/FrameLoader.h:
        * loader/FrameLoaderClient.h:
        * loader/MainResourceLoader.cpp:
        (WebCore::MainResourceLoader::willSendRequest):
        (WebCore::MainResourceLoader::continueAfterContentPolicy):
        (WebCore::MainResourceLoader::handleEmptyLoad):
        (WebCore::MainResourceLoader::handleDataLoad):
        (WebCore::MainResourceLoader::loadNow):
        (WebCore::MainResourceLoader::load):
        * loader/MainResourceLoader.h:
        * loader/mac/DocumentLoaderMac.mm:
        * loader/mac/WebDataProtocol.h: Removed.
        * loader/mac/WebDataProtocol.mm: Removed.
        * loader/qt/DocumentLoaderQt.cpp:
        * platform/graphics/svg/SVGImageEmptyClients.h:
        (WebCore::SVGEmptyFrameLoaderClient::createDocumentLoader):

2007-01-29  Zack Rusin  <zrusin@trolltech.com>

        Order the build files alphabetically instead of
        the random mess we had before.

        * WebCore.pro:

2007-01-29  Zack Rusin  <zack@kde.org>

        Reviewed by Lars

        Use the platform independent scrollbar code.
        Remove the redundant empty stubs and forward
        few missing platform scrollbar calls.

        * WebCore.pro:
        * platform/qt/PlatformScrollBarQt.cpp:
        (WebCore::PlatformScrollbar::paint):
        (WebCore::PlatformScrollbar::setRect):

2007-01-29  Lars Knoll <lars@trolltech.com>

        Reviewed by Zack

        Fix the way we handle native widgets (QWidget) inside
        WebCore. Now WebCore::Widget owns the QWidget in all
        cases. This is the only way to get well defined semantics
        for all teh native widgets we have (currently ScrollView
        and ScrollBar, but plugins will follow).

        This has the side effect that one cannot rely on a defined 
        lifetime of a QWebFrame when using the API. 

        * platform/Widget.h:
        * platform/qt/PlatformScrollBarQt.cpp:
        (WebCore::PlatformScrollbar::PlatformScrollbar):
        * platform/qt/ScrollViewQt.cpp:
        (WebCore::ScrollView::addChild):
        (WebCore::ScrollView::removeChild):
        * platform/qt/WidgetQt.cpp:
        (WebCore::WidgetPrivate::WidgetPrivate):
        (WebCore::WidgetPrivate::~WidgetPrivate):
        (WebCore::Widget::qwidget):

2007-01-28  George Staikos  <staikos@kde.org>

        Reviewed by Maciej.

        Don't send data during a redirect -> causes assert failure.

        * platform/network/qt/ResourceHandleManagerQt.cpp:
        (WebCore::ResourceHandleManager::receivedData):

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

        Reviewed by Brady.

        http://bugs.webkit.org/show_bug.cgi?id=11085
        Bug 11085: REGRESSION: favicon.ico always looked for on port 80

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::iconURL): Copy the port over to the favicon URL.

2007-01-28  Adam Roben  <aroben@apple.com>

        Reviewed by Adele.

        Fix http://bugs.webkit.org/show_bug.cgi?id=12453
        REGRESSION(r19197): Tabbing into web page requires two key presses

        All layout tests pass.

        * page/FocusController.cpp:
        (WebCore::FocusController::advanceFocus): If there's no focused frame,
        actually go ahead and find a focusable node instead of just focusing
        the main frame and quitting. This behavior was a holdover from a
        previous desired tabbing behavior with respect to frames.

2007-01-28  David Kilzer  <ddkilzer@webkit.org>

        Reviewed by Darin and David Hyatt.

        - fix http://bugs.webkit.org/show_bug.cgi?id=12423
          Mixing white-space:pre text with non white-space:pre text does not wrap properly

        Test: fast/block/basic/white-space-pre-wraps.html

        * rendering/bidi.cpp:
        (WebCore::RenderBlock::findNextLineBreak): Wrap a non-wrapping text run if it
        appears on a line with previous text runs that do wrap.

2007-01-28  Mitz Pettel  <mitz@webkit.org>

        Reviewed by Darin.

        - fix http://bugs.webkit.org/show_bug.cgi?id=8360
          Repro crash when onscroll handler deletes the scrolled object

        Test: fast/layers/removed-by-scroll-handler.html

        * page/FrameView.cpp:
        (WebCore::FrameViewPrivate::FrameViewPrivate): Added a m_enqueueEvents count.
        (WebCore::FrameView::layout): Raise the enqueue count before starting layout and
        until after enqueued events are dispatched.
        (WebCore::FrameView::scheduleEvent): Made this function dispatch the event
        immediately unless the enqueue count is positive.
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::scrollToOffset): Schedule the scroll event through the
        FrameView.
        (WebCore::RenderLayer::scrollRectToVisible):
        (WebCore::RenderLayer::updateScrollInfoAfterLayout):
        (WebCore::Marquee::start):

2007-01-28  Charles Ying  <charles_ying@yahoo.com>

        Reviewed by eseidel.  Landed by eseidel.

        Fix http://bugs.webkit.org/show_bug.cgi?id=12429
            animateTransform rotate, with cx/cy is broken
            
        SVGTransform now contains a float point to store the rotation center, needed
            to track rotation center for interpolation by animateTransform.
            
        SVGTransform now has an additional constructor:
            SVGTransform(type) to make empty base value transforms that match their
            distanced values.
            
        Removed m_colorDistance and m_transformDistance from their respective classes
            as they are now computed at update time.

        Fix a case where animateTransform did not parse transform values correctly
            according to BNF in W3C spec:

        Test case in:
        * manual-tests/animation/animateTransform-toanimation.svg: Added.

        Fix a case where animateTransform only specified a to animation only.

        Test case in:
        * manual-tests/animation/animateTransform-parser.svg: Added.

        * ksvg2/svg/SVGAnimateColorElement.cpp:
        (WebCore::SVGAnimateColorElement::updateAnimationBaseValueFromElement):
        (WebCore::SVGAnimateColorElement::updateAnimatedValue):
        (WebCore::SVGAnimateColorElement::calculateFromAndToValues):
        * ksvg2/svg/SVGAnimateColorElement.h:
        * ksvg2/svg/SVGAnimateTransformElement.cpp:
        (WebCore::SVGAnimateTransformElement::updateAnimatedValue):
        (WebCore::SVGAnimateTransformElement::updateAnimationBaseValueFromElement):
        (WebCore::SVGAnimateTransformElement::calculateFromAndToValues):
        (WebCore::SVGAnimateTransformElement::parseTransformValue):
        * ksvg2/svg/SVGAnimateTransformElement.h:
        * ksvg2/svg/SVGTransform.cpp:
        (SVGTransform::SVGTransform):
        (SVGTransform::angle):
        (SVGTransform::rotationCenter):
        (SVGTransform::setTranslate):
        (SVGTransform::setScale):
        (SVGTransform::setRotate):
        (SVGTransform::setSkewX):
        (SVGTransform::setSkewY):
        * ksvg2/svg/SVGTransform.h:
        * ksvg2/svg/SVGTransformDistance.cpp:
        (WebCore::SVGTransformDistance::SVGTransformDistance):
        (WebCore::SVGTransformDistance::scaledDistance):
        (WebCore::SVGTransformDistance::addSVGTransforms):
        (WebCore::SVGTransformDistance::addSVGTransform):
        (WebCore::SVGTransformDistance::addToSVGTransform):
        (WebCore::SVGTransformDistance::distance):
        * ksvg2/svg/SVGTransformDistance.h:
        * manual-tests/animation/animateTransform-parser.svg: Added.
        * manual-tests/animation/animateTransform-toanimation.svg: Added.

2007-01-27  Adam Roben  <aroben@apple.com>

        Reviewed by Ada.

        Fix <rdar://problem/4957184> REGRESSION: After creating a new mail
        message, the caret is automatically in message body

        -[WebHTMLView _updateActiveState] was calling
        FocusController::focusedOrMainFrame, which had the surprising
        side-effect of setting the focused frame if there was none. The fix
        was to remove this side-effect.

        No tests possible, as this bug involves focus outside the WebView,
        which we have no support for in DRT.

        Change inspired by Dave Harrison.

        * page/FocusController.cpp:
        (WebCore::FocusController::focusedOrMainFrame): Removed this method's
        non-obvious side-effect of setting the focused frame.
        * WebCore.xcodeproj/project.pbxproj: Version wars.

2007-01-27  Don Gibson  <dgibson77@gmail.com>

        Reviewed by Maciej.

        http://bugs.webkit.org/show_bug.cgi?id=11880: Improve some egregious
        Windows form control drawing issues:
        Provide Classic mode fallbacks for the button/textfield drawing
        routines.
        Provide some basic drawing of menulists (still relatively broken).
        Some cleanup.

        * platform/win/TemporaryLinkStubs.cpp:
        (WebCore::RenderThemeWin::systemFont):
        * rendering/RenderThemeWin.cpp:
        (WebCore::m_menuListTheme):
        (WebCore::RenderThemeWin::close):
        (WebCore::RenderThemeWin::determineClassicState):
        (WebCore::RenderThemeWin::getThemeData):
        (WebCore::RenderThemeWin::paintButton):
        (WebCore::RenderThemeWin::paintTextField):
        (WebCore::RenderThemeWin::paintMenuList):
        (WebCore::RenderThemeWin::paintMenuListButton):
        * rendering/RenderThemeWin.h:
        (WebCore::ThemeData::m_classicState):
        (WebCore::RenderThemeWin::setRadioSize):
        (WebCore::RenderThemeWin::paintTextArea):

2007-01-27  David Kilzer  <ddkilzer@webkit.org>

        Reviewed by Adam.

        - fix http://bugs.webkit.org/show_bug.cgi?id=12260
          Windows platform build is not maintained

        * loader/win/FrameLoaderWin.cpp:
        * platform/network/win/ResourceHandleWin.cpp:
        * platform/win/TemporaryLinkStubs.cpp:
        (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::DocumentLoader::unreachableURL):
        (WebCore::FrameLoader::redirectDataToPlugin):
        (WebCore::FrameLoader::partClearedInBegin):
        (WebCore::FrameLoader::createPlugin):

2007-01-27  Sam Weinig  <sam@webkit.org>

        Reviewed by Mitz.

        - Patch for http://bugs.webkit.org/show_bug.cgi?id=11957
          REGRESSION: Unordered List Bullets too big and changing from size

        * rendering/RenderListMarker.cpp:
        (WebCore::RenderListMarker::paint): Explicitly set the stroke size to 1.0f.

2007-01-27  Lars Knoll <lars@trolltech.com>

        Fix the Qt build and disable the usage
        of QScrollbars for PlatformScrollBar for 
        now as it causes crashes in the layout tests.

        * WebCore.pro:
        * ksvg2/svg/SVGTransformDistance.cpp:
        * page/qt/FrameQt.cpp:
        (WebCore::FrameQt::FrameQt):
        (WebCore::FrameQt::bindingRootObject):
        (WebCore::FrameQt::createRootObject):
        * page/qt/FrameQt.h:
        * platform/qt/PlatformScrollBarQt.cpp:
        (WebCore::PlatformScrollbar::PlatformScrollbar):
        * platform/qt/ScrollViewQt.cpp:
        (WebCore::ScrollView::addChild):

2007-01-27  David Kilzer  <ddkilzer@kilzer.net>

        Reviewed by NOBODY (buildbot build fix).

        * ksvg2/svg/ColorDistance.cpp:
        (WebCore::ColorDistance::scaledDistance): Added static cast of arguments to int.

2007-01-27  Rob Buis  <buis@kde.org>

        Reviewed by NOBODY (typo in method name fix).

        * ksvg2/svg/SVGSVGElement.cpp:
        (WebCore::SVGSVGElement::addSVGWindowEventListener):
        (WebCore::SVGSVGElement::parseMappedAttribute):
        * ksvg2/svg/SVGSVGElement.h:

2007-01-27  Eric Seidel  <eric@webkit.org>

        Reviewed by olliej.

        Fix support for SVG's <set> element.

        Manual test added.

        * ksvg2/svg/SVGSetElement.cpp:
        (WebCore::SVGSetElement::updateAnimatedValue):
        (WebCore::SVGSetElement::calculateFromAndToValues):
        * ksvg2/svg/SVGSetElement.h:
        * manual-tests/animation/set-to.svg: Added.

2007-01-27  Alexey Proskuryakov  <ap@webkit.org>

        Release build fix.

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

2007-01-27  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Darin.

        http://bugs.webkit.org/show_bug.cgi?id=12389
        Chinese decoding error at hk.antispam.yahoo.com

        Test: fast/encoding/noscript-in-head.html

        * loader/TextResourceDecoder.cpp:
        (WebCore::TextResourceDecoder::checkForHeadCharset): We were already allowing 
        NOSCRIPT tags in head, let's actually skip over their content.

2007-01-26  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Maciej Stachowiak.
        
        Fixed <rdar://problem/4608404> WebScriptObject's _executionContext lack 
        of ownership policy causes crashes (e.g., in Dashcode)

        Added RootObject ref-counting goodness.

        * page/mac/FrameMac.h:
        * page/mac/FrameMac.mm:
        (WebCore::FrameMac::cleanupPluginObjects): Invalidate our RootObjects 
        instead of detroying them. Track _bindingRootObject separately from the
        rest of our RootObjects, since it has its own variable.

        * page/mac/WebCoreFrameBridge.mm:
        (createRootObject): Use the Frame's new, more encapsulated function to
        create a RootObject.

        * bindings/objc/WebScriptObject.mm: Nixed rootObject setters, since they
        were unused and they complicated reference-counting.

2007-01-26  David Kilzer  <ddkilzer@webkit.org>

        Reviewed by Eric.

        Release build fix.

        * ksvg2/svg/SVGAnimationElement.cpp:
        (WebCore::SVGAnimationElement::calculateValueIndexAndPercentagePast): Added static cast
        to unsigned when calculating flooredValueIndex.

2007-01-26  Darin Adler  <darin@apple.com>

        - checked in slightly newer revision of the patch below

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::CSSComputedStyleDeclaration::getPropertyCSSValue):
        Grouped all the unimplemented values at the bottom. Fixed the ifdef for
        CSS_PROP__WEBKIT_DASHBOARD_REGION so that it compiles on all platforms.

        * css/cssparser.cpp: (WebCore::CSSParser::parseValue): Removed default
        case and added type so that the compiler warns about missing properties.
        * css/cssstyleselector.cpp: (WebCore::CSSStyleSelector::applyProperty): Ditto.

2007-01-26  Darin Adler  <darin@apple.com>

        Reviewed by Beth.

        - fix http://bugs.webkit.org/show_bug.cgi?id=12412
          "unimplemented propertyID: 46" seen at dojotoolkit.org

        Covered by fast/css/computed-style.html

        * css/CSSPropertyNames.in: Sorted the file into two separate sections, one
        for properties without the -webkit- prefix and another for properties with.

        * css/makeprop: Generate a CSSPropertyID enum instead of a set of #defines.
        Removed unused CSS_PROP_MIN and CSS_PROP_MAX. Renamed CSS_PROP_TOTAL to
        numCSSProperties and changed it to a const int instead of #define.
        Added a declaration of getPropertyName in the header. Changed the return
        type of getPropertyName to const char* and the parameter type to CSSPropertyID.

        * css/CSSComputedStyleDeclaration.cpp: Sort the lists of properties in
        an easier to maintain order -- properties without a WebKit prefix first.
        (WebCore::valueForLength): Changed return value to PassRefPtr.
        (WebCore::valueForMaxLength): Ditto.
        (WebCore::valueForBorderStyle): Ditto.
        (WebCore::valueForTextAlign): Ditto.
        (WebCore::valueForAppearance): Added.
        (WebCore::valueForMarginCollapse): Added.
        (WebCore::valueForShadow): Changed return value to PassRefPtr.
        (WebCore::getPositionOffsetValue): Ditto.
        (WebCore::currentColorOrValidColor): Ditto.
        (WebCore::CSSComputedStyleDeclaration::cssText): Added cast since
        getPropertyName now takes an enum value.
        (WebCore::primitiveValueFromLength): Changed return value to PassRefPtr.
        (WebCore::CSSComputedStyleDeclaration::getPropertyCSSValue):
        Added cast to CSSPropertyID so that gcc will detect missing enums in the
        switch statement. Simplified the background-size and border-spacing
        implementations so they don't have local variables. Added lots of cases
        to the switch statement for unimplemented properties. Implemented the
        outline-width, box-sizing, -webkit-appearance, -webkit-rtl-ordering,
        -webkit-user-drag, and -webkit-user-select properties.
        (WebCore::CSSComputedStyleDeclaration::item): Added cast since
        getPropertyName now takes an enum value.

        * css/CSSMutableStyleDeclaration.cpp: Removed declaration of getPropertyName.
        (WebCore::CSSMutableStyleDeclaration::item): Added cast since
        getPropertyName now takes an enum value.

        * css/CSSProperty.cpp: Removed declaration of getPropertyName.
        (WebCore::CSSProperty::cssText): Added cast since
        getPropertyName now takes an enum value and returns a const char*.

        * css/CSSStyleDeclaration.cpp: Removed declaration of getPropertyName.
        (WebCore::CSSStyleDeclaration::getPropertyShorthand): Added cast since
        getPropertyName now takes an enum value and returns a const char*.

2007-01-26  Alice Liu  <alice.liu@apple.com>

        Reviewed by Brady.

        Fixed <rdar://problem/4838076> CrashTracer: 10 crashes in Mail at com.apple.WebCore: WTF::HashMap<WebCore::String

        * loader/DocLoader.cpp:
        (WebCore::DocLoader::requestResource):
        Added nil check around resource from cache.

2007-01-26  Adam Roben  <aroben@apple.com>

        Reviewed by Oliver.

        Build fix.

        * ksvg2/svg/SVGAnimationElement.cpp:
        (WebCore::SVGAnimationElement::calculateValueIndexAndPercentagePast):
        Keep index variables as unsigned until we need to convert to float.

2007-01-26  Alice Liu  <alice.liu@apple.com>

        Reviewed by Ada.

        Fixed <rdar://problem/4919097> REGRESSION: Ctrl-Y fails to yank (11076)

        * editing/Editor.cpp:
        (WebCore::Editor::deleteWithDirection):
        If there's no selection, locally create a range that is to the end of the granularity unit and pass that to deleteRange(). 

2007-01-26  Sam Weinig  <sam@webkit.org>

        Reviewed by Maciej.

        Qt build fix.

        * page/qt/EventHandlerQt.cpp:

2007-01-26  Dex Deacon  <occupant4@gmail.com>

        Reviewed by Hyatt.

        Fix so that we only relayout frameset children on calls to layout.

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

2007-01-26  Oliver Hunt  <oliver@apple.com>

        Build Fix

        * ksvg2/svg/ColorDistance.cpp:
        * ksvg2/svg/SVGAnimationElement.cpp:
        (WebCore::SVGAnimationElement::handleTimerEvent):

2007-01-26  Eric Seidel  <eric@webkit.org>

        Reviewed by olliej.

        Add support for calcMode, keyTimes and (nearly) keySplines.
        http://bugs.webkit.org/show_bug.cgi?id=12350
        Re-architect much of the animation system to remove huge sections of code.
        Added new ColorDistance, SVGTransformDistance to simplify animateColor, animateTransform calculations.
        I also added basic <animateMotion> support since it was so easy w/ the new architecture.
        
        Adding manual animation tests until bug 12074 is fixed.

        * WebCore.xcodeproj/project.pbxproj:
        * ksvg2/misc/SVGTimer.cpp:
        (WebCore::SVGTimer::applyAnimations):
        * ksvg2/svg/ColorDistance.cpp: Added.
        (WebCore::ColorDistance::ColorDistance):
        (WebCore::clampColorValue):
        (WebCore::ColorDistance::scaledDistance):
        (WebCore::ColorDistance::addColorsAndClamp):
        (WebCore::ColorDistance::addToColorAndClamp):
        (WebCore::ColorDistance::isZero):
        (WebCore::ColorDistance::distance):
        * ksvg2/svg/ColorDistance.h: Added.
        * ksvg2/svg/SVGAnimateColorElement.cpp:
        (WebCore::SVGAnimateColorElement::SVGAnimateColorElement):
        (WebCore::SVGAnimateColorElement::updateAnimationBaseValueFromElement):
        (WebCore::SVGAnimateColorElement::applyAnimatedValueToElement):
        (WebCore::SVGAnimateColorElement::updateAnimatedValue):
        (WebCore::SVGAnimateColorElement::calculateFromAndToValues):
        * ksvg2/svg/SVGAnimateColorElement.h:
        (WebCore::SVGAnimateColorElement::contextElement):
        * ksvg2/svg/SVGAnimateElement.h:
        (WebCore::SVGAnimateElement::updateAnimatedValue):
        (WebCore::SVGAnimateElement::calculateFromAndToValues):
        * ksvg2/svg/SVGAnimateMotionElement.cpp:
        (WebCore::SVGAnimateMotionElement::hasValidTarget):
        (WebCore::SVGAnimateMotionElement::updateAnimatedValue):
        (WebCore::parsePoint):
        (WebCore::SVGAnimateMotionElement::calculateFromAndToValues):
        (WebCore::SVGAnimateMotionElement::updateAnimationBaseValueFromElement):
        (WebCore::SVGAnimateMotionElement::applyAnimatedValueToElement):
        * ksvg2/svg/SVGAnimateMotionElement.h:
        * ksvg2/svg/SVGAnimateTransformElement.cpp:
        (WebCore::SVGAnimateTransformElement::SVGAnimateTransformElement):
        (WebCore::SVGAnimateTransformElement::updateAnimatedValue):
        (WebCore::SVGAnimateTransformElement::updateAnimationBaseValueFromElement):
        (WebCore::SVGAnimateTransformElement::applyAnimatedValueToElement):
        (WebCore::SVGAnimateTransformElement::calculateFromAndToValues):
        (WebCore::SVGAnimateTransformElement::parseTransformValue):
        * ksvg2/svg/SVGAnimateTransformElement.h:
        (WebCore::SVGAnimateTransformElement::contextElement):
        * ksvg2/svg/SVGAnimationElement.cpp:
        (WebCore::SVGAnimationElement::parseKeyNumbers):
        (WebCore::parseValues):
        (WebCore::parseKeySplines):
        (WebCore::SVGAnimationElement::parseMappedAttribute):
        (WebCore::SVGAnimationElement::targetAttributeAnimatedValue):
        (WebCore::SVGAnimationElement::setTargetAttributeAnimatedValue):
        (WebCore::SVGAnimationElement::detectAnimationMode):
        (WebCore::adjustPercentagePastForKeySplines):
        (WebCore::SVGAnimationElement::valueIndexAndPercentagePastForDistance):
        (WebCore::SVGAnimationElement::calculateTotalDistance):
        (WebCore::caculateValueIndexForKeyTimes):
        (WebCore::SVGAnimationElement::isValidAnimation):
        (WebCore::SVGAnimationElement::calculateValueIndexAndPercentagePast):
        (WebCore::SVGAnimationElement::updateAnimationBaseValueFromElement):
        (WebCore::SVGAnimationElement::applyAnimatedValueToElement):
        (WebCore::SVGAnimationElement::handleTimerEvent):
        (WebCore::SVGAnimationElement::updateAnimatedValueForElapsedSeconds):
        * ksvg2/svg/SVGAnimationElement.h:
        * ksvg2/svg/SVGParserUtilities.cpp:
        (WebCore::SVGPolyParser::parsePoints):
        * ksvg2/svg/SVGParserUtilities.h:
        * ksvg2/svg/SVGSetElement.cpp:
        * ksvg2/svg/SVGSetElement.h:
        (WebCore::SVGSetElement::updateAnimatedValue):
        (WebCore::SVGSetElement::calculateFromAndToValues):
        * ksvg2/svg/SVGTransform.cpp:
        (SVGTransform::type):
        (SVGTransform::translate):
        (SVGTransform::scale):
        (SVGTransform::setSkewX):
        (SVGTransform::setSkewY):
        * ksvg2/svg/SVGTransform.h:
        (WebCore::operator==):
        (WebCore::operator!=):
        * ksvg2/svg/SVGTransformDistance.cpp: Added.
        (WebCore::SVGTransformDistance::SVGTransformDistance):
        (WebCore::SVGTransformDistance::scaledDistance):
        (WebCore::SVGTransformDistance::addSVGTransforms):
        (WebCore::SVGTransformDistance::addSVGTransform):
        (WebCore::SVGTransformDistance::addToSVGTransform):
        (WebCore::SVGTransformDistance::isZero):
        (WebCore::SVGTransformDistance::distance):
        * ksvg2/svg/SVGTransformDistance.h: Added.
        * ksvg2/svg/SVGTransformList.cpp:
        (SVGTransformList::concatenateForType):
        * ksvg2/svg/SVGTransformList.h:
        * manual-tests/animation/animateColor-by.svg: Added.
        * manual-tests/animation/animateColor-from-by.svg: Added.
        * manual-tests/animation/animateColor-repeat-indefinite.svg: Added.
        * manual-tests/animation/animateColor-to-from.svg: Added.
        * manual-tests/animation/animateColor-to.svg: Added.
        * manual-tests/animation/animateColor-values-simple.svg: Added.
        * manual-tests/animation/animateMotion-to.svg: Added.
        * manual-tests/animation/animateTransform-keyTimes.svg: Added.
        * manual-tests/animation/animateTransform-repeat-once.svg: Added.

2007-01-26  Beth Dakin  <bdakin@apple.com>

        Reviewed by Darin.

        Fix for <rdar://problem/4956565> REGRESSION: After scrolling frame, 
        hovering over link in this frame doesn't change cursor to pointing 
        hand

        The mouseMove event was not being propagated correctly after using 
        the mouse to scroll the frame because m_mousePressed was never 
        getting set to false.

        * page/EventHandler.cpp:
        (WebCore::EventHandler::handleMousePressEvent): This code does not 
        belong here.
        * page/EventHandler.h: lastEventIsMouseUp() is only ever relevant 
        in EventHandlerMac, so it can just be a static function there.
        * page/mac/EventHandlerMac.mm:
        (WebCore::lastEventIsMouseUp): Make this static.
        (WebCore::EventHandler::passMouseDownEventToWidget): Here is where 
        we need to set m_mousePressed to false if lastEventIsMouseUp() is 
        true.

2007-01-26  David Hyatt  <hyatt@apple.com>

        Fix for style regression caused by strictness checking of the number of properties.  This caused code like:
        "width: 20 px" to fail, because we interpreted it as two values and rejected it.  Our old code allowed 20 to be
        used like a pixel value and then ignored the orphaned unit.

        This patch actually scans the list of values looking for orphaned units and reattaches them to the numeric
        values that they should correspond to.  This means rules like "width: 5 em" will now work in quirks mdoe and
        the "em" unit type will be honored.

        Reviewed by beth

        * WebCore.xcodeproj/project.pbxproj:
        * css/cssparser.cpp:
        (WebCore::unitFromString):
        (WebCore::CSSParser::checkForOrphanedUnits):
        (WebCore::CSSParser::parseValue):
        * css/cssparser.h:
        (WebCore::ValueList::valueAt):
        (WebCore::ValueList::deleteValueAt):

2007-01-26  George Staikos  <staikos@kde.org>

        Reviewed by Zack.

        Qt implementation.

        * WebCore.pro:
        * platform/qt/FontPlatformDataQt.cpp:
        (WebCore::FontPlatformData::FontPlatformData):
        * platform/qt/ScrollViewQt.cpp:
        (WebCore::ScrollView::scrollbarUnderMouse):

2007-01-26  Brady Eidson  <beidson@apple.com>

        Reviewed by Anders' rubberstamp
        
        Warning about unreferenced formal parameter caused compile to fail

        * platform/cf/RetainPtr.h:
        (WebCore::adoptCFReference):

2007-01-26  Darin Adler  <darin@apple.com>

        Reviewed by Brady.

        - fix <rdar://problem/4956688> move Mac-specific part of icon code into IconMac
        - fix a GC-compatibility problem in the icon code I noticed by code inspection

        * platform/FileChooser.cpp: (WebCore::FileChooser::chooseIcon): Removed Mac-specific
        path check -- that's in newIconForFile now.

        * platform/graphics/Icon.h: Changed the image to be a RetainPtr. The old code was
        using -[NSObject retain] which is not good enough for a pointer in a C++ object.
        * platform/graphics/mac/IconMac.mm:
        (WebCore::Icon::Icon): Got rid of unneeded code to do what RetainPtr does for us.
        (WebCore::Icon::~Icon): Ditto.
        (WebCore::Icon::newIconForFile): Added check for non-absolute file names. Updated
        for use of RetainPtr. Use constructor that takes NSImage.
        (WebCore::Icon::paint): Add get() calls needed now that we are using a RetainPtr.

        * WebCore.xcodeproj/project.pbxproj: Let Xcode do its thing.

2007-01-26  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Maciej.

        http://bugs.webkit.org/show_bug.cgi?id=12385
        Assertion failure when loading subresources from "data:" frames

        Test: fast/loader/opaque-base-url.html

        * platform/KURL.cpp:
        (WebCore::KURL::init): Make the URL invalid if it's relative, but has an opaque or empty base.

2007-01-26  Dex Deacon  <occupant4@gmail.com>

        Reviewed by Darin.

        * page/EventHandler.cpp:
        (WebCore::EventHandler::handleMouseMoveEvent):
        Removed a call to invalidateClick(), since we don't want to cancel a
        click if the mouse moves.

2007-01-26  Darin Adler  <darin@apple.com>

        * css/MediaQueryEvaluator.cpp:
        (WebCore::MediaQueryEvaluator::mediaTypeMatchSpecific):
        Oops, forgot a !.

2007-01-26  Darin Adler  <darin@apple.com>

        Patch by Nate Begeman.
        Reviewed by Darin and Maciej.

        - <rdar://problem/4946877> Avoid unnecessary allocations in CSS, patch attached (12401)
          http://bugs.webkit.org/show_bug.cgi?id=12401

        * css/MediaQueryEvaluator.h: Add mediaTypeMatchSpecific, a function that
        takes a char* to avoid creating and destroying a String for simple media
        type queries.
        * css/MediaQueryEvaluator.cpp:
        (WebCore::MediaQueryEvaluator::mediaTypeMatchSpecific): Added. Besides
        avoiding the conversion to String, this also doesn't have the special
        case code to handle "" and "all".

        * css/cssstyleselector.cpp: (WebCore::CSSStyleSelector::matchUARules):
        Call mediaTypeMatchSpecific here when deciding whether to use the
        print version of the user agent style sheet.

        * loader/Cache.cpp: (WebCore::Cache::requestResource): Don't convert to
        a string and back to a KURL when calling createResource. Avoids reparsing
        the URL string.

2007-01-26  Zack Rusin  <zrusin@trolltech.com>

        Reviewed by Lars

        Add history related classes to the project file.

        * WebCore.pro:

2007-01-26  Zack Rusin  <zack@kde.org>

        Reviewed by Lars

        Introduce PlatformScrollBar and try to make 
        the scrollbar behavior a little more sane.

        * WebCore.pro:
        * platform/qt/PlatformScrollBarQt.cpp: Added.
        (WebCore::Scrollbar::Scrollbar):
        (WebCore::Scrollbar::setSteps):
        (WebCore::Scrollbar::scroll):
        (WebCore::Scrollbar::setValue):
        (WebCore::Scrollbar::setProportion):
        (WebCore::PlatformScrollbar::PlatformScrollbar):
        (WebCore::PlatformScrollbar::~PlatformScrollbar):
        (WebCore::PlatformScrollbar::width):
        (WebCore::PlatformScrollbar::height):
        (WebCore::PlatformScrollbar::setEnabled):
        (WebCore::PlatformScrollbar::paint):
        (WebCore::PlatformScrollbar::updateThumbPosition):
        (WebCore::PlatformScrollbar::updateThumbProportion):
        (WebCore::PlatformScrollbar::setRect):
        * platform/qt/ScrollViewQt.cpp:
        (WebCore::ScrollView::addChild):
        * platform/qt/TemporaryLinkStubs.cpp:
        (WebCore::PlatformMouseEvent::PlatformMouseEvent):

2007-01-26  Mitz Pettel  <mitz@webkit.org>

        Reviewed by Darin.

        - fix http://bugs.webkit.org/show_bug.cgi?id=11109
          REGRESSION (r15471): menus are offset on eink.com
          <rdar://problem/4824760>

        Changed offset{Left,Top} to match Firefox. If the body element is statically
        positioned, it is still returned as the offsetParent of elements whose containing
        block is the initial containing block (the root), but their offset{Left,Top} are
        relative to the root. If the body element is positioned, then offsets are relative
        to it. The body's own offset{Left,Top} are always 0. 

        Test: fast/dom/Element/offsetLeft-offsetTop-body-quirk.html

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

2007-01-26  Mitz Pettel  <mitz@webkit.org>

        Reviewed by Darin and Maciej.

        - fix http://bugs.webkit.org/show_bug.cgi?id=10983
          REGRESSION (r12290): Drop shadow of flickr photo note is positioned incorrectly the second time it's shown

        Test: fast/dynamic/staticY.html

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::layoutPositionedObjects): Avoid marking the object's
        parents, since they have already been laid out.
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::setStaticY): Added a call to setChildNeedsLayout() to
        ensure relayout by this box's container (third and fourth cases in the
        layout test).
        * rendering/RenderBox.h:
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::markContainingBlocksForLayout): For positioned objects
        with static y, also mark the object's parent to ensure that it recomputes
        the static y value (first case in the layout test).

2007-01-26  Lars Knoll <lars@trolltech.com>

        Reviewed by Zack

        Get rid of FrameQtClient. It's unused since we moved over
        to the loader.

        * WebCore.pro:
        * page/qt/FrameQt.cpp:
        (WebCore::FrameQt::FrameQt):
        * page/qt/FrameQt.h:
        * page/qt/FrameQtClient.cpp: Removed.
        * page/qt/FrameQtClient.h: Removed.
        * platform/network/ResourceHandleInternal.h:
        * platform/network/qt/ResourceHandleManagerQt.cpp:
        (WebCore::RequestQt::RequestQt):
        (WebCore::ResourceHandleManager::add):
        * platform/network/qt/ResourceHandleManagerQt.h:
        * platform/network/qt/ResourceHandleQt.cpp:
        (WebCore::ResourceHandle::start):

2007-01-26  Zack Rusin  <zack@kde.org>

        Fix the compile

        * WebCore.pro:

2007-01-26  Adam Roben  <aroben@apple.com>

        Reviewed by Maciej.

        Fixed <rdar://problem/4946499>, which made it impossible to tab
        forward into the left frame of tivofaq.com after tabbing out of the
        document.

        * page/FocusController.cpp:
        (WebCore::FocusController::advanceFocus): Clear the focused frame
        before passing off focus to Chrome so that when we re-enter the
        document we start at the main frame instead of the last focused frame.

2007-01-25  Rob Buis  <buis@kde.org>

        Reviewed by olliej.

        http://bugs.webkit.org/show_bug.cgi?id=11911
        SVG exhibits double-text-selection behavior

        Fix selection height of the inline text boxes for svg.

        * WebCore.xcodeproj/project.pbxproj:
        * rendering/InlineTextBox.cpp:
        (WebCore::InlineTextBox::selectionTop):
        (WebCore::InlineTextBox::selectionHeight):
        (WebCore::InlineTextBox::selectionRect):
        (WebCore::InlineTextBox::paintSelection):
        (WebCore::InlineTextBox::paintMarkedTextBackground):
        (WebCore::InlineTextBox::paintCustomHighlight):
        (WebCore::InlineTextBox::paintSpellingOrGrammarMarker):
        (WebCore::InlineTextBox::paintTextMatchMarker):
        * rendering/InlineTextBox.h:
        * rendering/RenderSVGInlineText.cpp:
        (WebCore::RenderSVGInlineText::createInlineTextBox):
        * rendering/RenderSVGInlineText.h:
        * rendering/RenderText.cpp:
        (WebCore::RenderText::createInlineTextBox):
        (WebCore::RenderText::createInlineBox):
        * rendering/RenderText.h:
        * rendering/SVGInlineTextBox.cpp: Added.
        (WebCore::SVGInlineTextBox::selectionTop):
        (WebCore::SVGInlineTextBox::selectionHeight):
        * rendering/SVGInlineTextBox.h: Added.
        (WebCore::SVGInlineTextBox::SVGInlineTextBox):

2007-01-26  Zack Rusin  <zack@kde.org>

        Reviewed by Lars

        Fix drawing of tiled images.

        * WebCore.pro:
        * platform/graphics/qt/ImageQt.cpp:
        (WebCore::BitmapImage::drawPattern):

2007-01-26  Zack Rusin  <zack@kde.org>

        Reviewed by Lars

        Fixing image loading - we decode QImages
        but render QPixmaps now. Implement Icon
        class

        * platform/graphics/BitmapImage.h:
        * platform/graphics/Icon.h:
        * platform/graphics/Image.h:
        (WebCore::Image::getPixmap):
        * platform/graphics/qt/IconQt.cpp:
        (WebCore::Icon::Icon):
        (WebCore::Icon::~Icon):
        (WebCore::Icon::newIconForFile):
        (WebCore::Icon::paint):
        * platform/graphics/qt/ImageDecoderQt.cpp:
        (WebCore::ImageDecoderQt::ImageData::ImageData):
        (WebCore::ImageDecoderQt::ReadContext::read):
        (WebCore::ImageDecoderQt::ReadContext::readImageLines):
        (WebCore::ImageDecoderQt::reset):
        (WebCore::ImageDecoderQt::imageAtIndex):
        * platform/graphics/qt/ImageDecoderQt.h:
        * platform/graphics/qt/ImageQt.cpp:
        (WebCore::BitmapImage::drawPattern):
        (WebCore::BitmapImage::getPixmap):
        * platform/graphics/qt/ImageSourceQt.cpp:
        (WebCore::ImageSource::createFrameAtIndex):

2007-01-25  Justin Garcia  <justin.garcia@apple.com>

        Reviewed by oliver
        
        <http://bugs.webkit.org/show_bug.cgi?id=12409>
        REGRESSION (r19039): Drag caret isn't cleared after a drop

        No new layout tests because the regression was
        caught by current layout tests.

        * page/DragController.cpp:
        (WebCore::DragController::concludeDrag): Clear the drag caret.

2007-01-25  Darin Adler  <darin@apple.com>

        Reviewed and landed by Geoffrey Garen.

        - fix http://bugs.webkit.org/show_bug.cgi?id=12342
          REGRESSION: destroying a frame from its own script causes various crashes

        * bindings/js/kjs_window.cpp: (KJS::ScheduledAction::execute):
        Use RefPtr for the frame and the interpreter object so they don't get deleted
        out from underneath us.

        * bindings/js/kjs_proxy.cpp: (WebCore::KJSProxy::evaluate):
        Add a check for a page of 0. This was the only call site for the
        addMessageToConsole function that did not have a check for a page of 0.

2007-01-25 Dirk Mueller  <mueller@kde.org>

        Reviewed and merged by Beth.

        Fix for <rdar://problem/4921692> not processing comments inside a 
        title element leads to XSS (for at least BlogSpot)

        This is equivalent to commit 626791 in the KDE tree. Basically, the 
        patch allows comment parsing in titles to avoid capturing a 
        <script> tag by accident.

        * html/HTMLTokenizer.cpp:
        (WebCore::HTMLTokenizer::parseSpecial):
        (WebCore::HTMLTokenizer::parseComment):

2007-01-25  Darin Adler  <darin@apple.com>

        * ksvg2/svg/SVGPreserveAspectRatio.cpp: Add a couple of comments.

2007-01-25  Darin Adler  <darin@apple.com>

        Reviewed by Maciej.

        - fix http://bugs.webkit.org/show_bug.cgi?id=12365
          Reproducible crash in WebCore::SVGPreserveAspectRatio::parsePreserveAspectRatio
          in svg/W3C-SVG-1.1/animate-elem-40-t.svg under guard malloc
        - fix bug where the parser accepts "meet" or "slice" as an entire string
        - fix bug where "slice" is ignored if the old alignment was "none"
          even if the newly-parsed alignment is something other than "none", and
          "slice" is not ignored if the old alignment was not "none", but the
          newly-parsed alignment is "none"
        - optimize to only call notifyAttributeChange if the attribute actually changed

        Test: svg/dom/preserve-aspect-ratio-parser-test.html

        * ksvg2/svg/SVGPreserveAspectRatio.cpp:
        (WebCore::checkString): Added an overload for using char* constants which is
        much simpler than the old one, and almost as fast.
        (WebCore::SVGPreserveAspectRatio::parsePreserveAspectRatio): Fail if there's no
        more text after "defer". Fail if there's neither "none" nor an x/y specified.
        Check that there's more text before looking at the "m" and "s" for "meet" and
        "slice". Merged the failure and success cases. Only call notifyAttributeChange
        if something changed.

        I think all the "optimized" code where we check the first character before
        calling checkString isn't really helpful, but I decided to leave it as-is
        for now.

2007-01-25  Lars Knoll <lars@trolltech.com>

        Reviewed by Zack

        Trivial implementation of getMIMETypeForExtension.
        Use the above method in the ResourceHandleManager to set
        a mimetype on Resources that don't have one set (which
        includes everything loaded from local disk).

        Should fix quite a few test cases :)

        * platform/network/qt/ResourceHandleManagerQt.cpp:
        (WebCore::ResourceHandleManager::receivedResponse):
        * platform/qt/MimeTypeRegistryQt.cpp:
        (WebCore::):
        (WebCore::MimeTypeRegistry::getMIMETypeForExtension):

2007-01-25 Harald Fernengel <harald@trolltech.com>

        Reviewed by zack

        Compile on platforms where qreal is not a double.

        * platform/graphics/qt/AffineTransformQt.cpp:
        (WebCore::AffineTransform::map):

2007-01-25  Zack Rusin  <zack@kde.org>

        Reviewed by Lars.

        Add wheel event handling and make explicit usage
        of the EventHandler.

        * WebCore.pro:
        * page/qt/EventHandlerQt.cpp:
        (WebCore::EventHandler::focusDocumentView):
        (WebCore::EventHandler::passWidgetMouseDownEventToWidget):
        (WebCore::EventHandler::passMouseDownEventToWidget):
        (WebCore::EventHandler::lastEventIsMouseUp):
        (WebCore::EventHandler::handleMouseUp):
        * platform/PlatformWheelEvent.h:
        * platform/qt/ScrollViewCanvasQt.cpp:
        (WebCore::ScrollViewCanvasQt::ScrollViewCanvasQt):
        (WebCore::ScrollViewCanvasQt::mousePressEvent):
        (WebCore::ScrollViewCanvasQt::wheelEvent):
        (WebCore::ScrollViewCanvasQt::dragEnterEvent):
        (WebCore::ScrollViewCanvasQt::dragLeaveEvent):
        (WebCore::ScrollViewCanvasQt::dragMoveEvent):
        * platform/qt/ScrollViewCanvasQt.h:
        * platform/qt/ScrollViewQt.cpp:
        (WebCore::ScrollView::wheelEvent):
        * platform/qt/WheelEventQt.cpp: Added.
        (WebCore::PlatformWheelEvent::PlatformWheelEvent):

2007-01-25  Rob Buis  <buis@kde.org>

        Reviewed by Maciej.

        http://bugs.webkit.org/show_bug.cgi?id=12391
        SVG containers with viewports should respect overflow when hit testing

        Take into account the overflow property when hit testing <svg>.

        * rendering/RenderSVGContainer.cpp:
        (WebCore::RenderSVGContainer::nodeAtPoint):

2007-01-23  Alice Liu  <alice.liu@apple.com>

        Reviewed by Maciej.

        fixed <rdar://problem/4808039> REGRESSION: eBay ID check never completes
        Also known as http://bugs.webkit.org/show_bug.cgi?id=11230

        * bindings/js/kjs_window.cpp:
        It's not necessary to check safeScript when doing a location.replace, .reload, or .assign
        (KJS::Location::getOwnPropertySlot):
        (KJS::LocationFunc::callAsFunction):

2007-01-25  Alice Liu  <alice.liu@apple.com>

        Reviewed by Geoff and Adele.

        fixed <rdar://problem/4866655> REGRESSION: Copying out of Calculator & CIFIlterWidget is broken on 9A320

        * editing/Editor.cpp:
        (WebCore::Editor::canDHTMLCut):
        (WebCore::Editor::canDHTMLCopy):
        (WebCore::Editor::tryDHTMLCopy):
        (WebCore::Editor::tryDHTMLCut):
        Reverting some mistakes made in r17504:
        Anything in r17503 that used to call mayDHTML* still calls canDHTML* as it was changed in r17504, where canDHTML* now calls !selectionController::isInPasswordField instead of editor::canCopy
        Anything else in r17503 that used to call mayCopy now calls (!)selectionController::isInPasswordField.

        * editing/JSEditor.cpp:
        copy via JS should be enabled as long as selection is not in a password field.  a range selection shouldn't be required. 

2007-01-24  Adele Peterson  <adele@apple.com>

        Reviewed by Brady and Oliver.

        Fix for <rdar://problem/4953504> When the keydown event changes focus, the keypress event should go to the new focused node

        Test: fast/events/keydown-keypress-focus-change.html

        * page/EventHandler.cpp:
        (WebCore::eventTargetNodeForDocument): Added for convenience.
        (WebCore::EventHandler::keyEvent): Moved from EventHandlerMac.mm.  After dispatching the keyDown event,
         recheck the target node for the keyPress event in case its changed.
        * page/EventHandler.h:
        * page/mac/EventHandlerMac.mm: (WebCore::EventHandler::keyEvent):
          Moved the bulk of this code to EventHandler.cpp.

2007-01-24  Geoffrey Garen  <ggaren@apple.com>

        New forwarding header. No review necessary.

        * ForwardingHeaders/kjs/ustring.h: Added.

2007-01-24  Oliver Hunt  <oliver@apple.com>

        Reviewed by Maciej.

        Migrating more drag state information to WebCore

        * page/DragController.cpp:
        * page/DragController.h:
        (WebCore::DragController::dragOperation):
        (WebCore::DragController::setDraggingImageURL):
        (WebCore::DragController::draggingImageURL):
        (WebCore::DragController::setDragOffset):
        (WebCore::DragController::dragOffset):

2007-01-24  Darin Adler  <darin@apple.com>

        Reviewed by Adele.

        - fix http://bugs.webkit.org/show_bug.cgi?id=12331
          REGRESSION(r18951): Selecting text in a textarea makes the page scroll

        Test: fast/events/autoscroll.html

        * rendering/RenderLayer.cpp: (WebCore::RenderLayer::autoscroll):
        Adjust position to be relative to the object's corner for the hit test, but not for the
        scrollRectToVisible call. The previous version accidentally re-used the version that was
        adjusted for the hit test.

2007-01-24  Beth Dakin  <bdakin@apple.com>

        Reviewed by Geoff.

        Fix for <rdar://problem/4948128> REGRESSION: A crash occurs at 
        WebCore::Frame::view() after completing a query at mapquest.com 
        then switching to Bookmarks view

        This is just a null-check. If you are in strict mode and ask for 
        the clientWidth or clientHeight after the document was removed from 
        it's parent, we no longer have a frameView, so we have to null-
        check it. I added null checks for the FrameView in some other 
        places where it seems like we could potentially run into this 
        issue.

        * bindings/objc/DOMHTML.mm:
        (-[DOMHTMLInputElement _rectOnScreen]):
        * bridge/mac/WebCoreAXObject.mm:
        (-[WebCoreAXObject accessibilityAttributeValue:]):
        * dom/ContainerNode.cpp:
        (WebCore::ContainerNode::getUpperLeftCorner):
        * dom/Element.cpp:
        (WebCore::Element::clientWidth): Actual bug fix here!
        (WebCore::Element::clientHeight): And here!
        * ksvg2/svg/SVGLength.cpp:
        (WebCore::SVGLength::PercentageOfViewport):
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::createJavaAppletWidget):
        * page/mac/WebCoreFrameBridge.mm:
        (-[WebCoreFrameBridge computePageRectsWithPrintWidthScaleFactor:printHeight:]):
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::windowClipRect):
        (WebCore::RenderLayer::updateOverflowStatus):
        (WebCore::frameVisibleRect):
        * rendering/RenderListBox.cpp:
        (WebCore::RenderListBox::windowClipRect):
        * rendering/RenderTable.cpp:
        (WebCore::RenderTable::layout):

2007-01-24  Maciej Stachowiak  <mjs@apple.com>

        Not reviewed, just removing accidentally committed file.

        - removed file that shouldn't be there

        * Image Viewer/Image Viewer.aps: Removed.

2007-01-24  Anders Carlsson  <acarlsson@apple.com>

        Reviewed by Geoff and Adam.

        <rdar://problem/4922655>
        http://galeri.milliyet.com.tr/ reproducibly crashes Safari
        
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::requestFrame):
        If the frame already exists, defer the navigation so that we won't end up replacing the document
        while we're parsing it. This is similar to what setting window.location ends up doing.

2007-01-25  Mark Rowe  <mrowe@apple.com>

        Reviewed by Darin.

        * Info.plist: Update copyright string.

2007-01-24  Justin Garcia  <justin.garcia@apple.com>

        Reviewed by harrison

        <rdar://problem/4916235>
        eBay Editor: Crash occurs at WebCore::Range::startPosition() after applying ordered list styling to selected text
        <rdar://problem/4857269>
        REGRESSION: editing/execCommand/create-list-from-range-selection.html no longer works as intended
        <rdar://problem/4916583>
        eBay Editor: Removing a indent from a list item actually deletes the list item instead
        <rdar://problem/4928635>
        designMode outdent causes crash (11750)

        * editing/CompositeEditCommand.cpp:
        (WebCore::CompositeEditCommand::moveParagraphs): Fixed br insertion
        after the pruning of empty containers left over after the paragraph
        to move is removed.
        * editing/DeleteSelectionCommand.cpp:
        (WebCore::DeleteSelectionCommand::DeleteSelectionCommand): There are
        bugs that leave the wrong number of line breaks after a deletion 
        that expands to include special elements (lists/tables).  Added 
        a workaround so that moveParagraphs can avoid these until they 
        are fixed.
        (WebCore::DeleteSelectionCommand::initializeStartEnd): Ditto.
        (WebCore::DeleteSelectionCommand::initializePositionData): Ditto.
        * editing/DeleteSelectionCommand.h:
        * editing/TextIterator.cpp:
        (WebCore::TextIterator::advance): We used to not call exitNode for
        ancestors of a node where the next node in a pre-order traversal is 
        the ranges's pastEndNode().  This is only correct for ancestors that
        contain the end of the range.
        (WebCore::shouldEmitNewlineAfterNode): Added, we should only emit newlines
        after blocks that have VisiblePositions after them.  VisiblePosition creation
        though is too expensive to do here, what I added here is an OK substitute.
        (WebCore::shouldEmitNewlineBeforeNode): Added.  No special logic yet.
        (WebCore::TextIterator::handleNonTextNode): Call shouldEmitNewlineBeforeNode.
        (WebCore::TextIterator::exitNode): Call shouldEmitNewlineAfterNode.
        (WebCore::SimplifiedBackwardsTextIterator::handleNonTextNode): Call
        shouldEmitNewlineAfterNode.

2007-01-24  Darin Adler  <darin@apple.com>

        Reviewed by Mark Rowe.

        * WebCore.xcodeproj/project.pbxproj: Changed to /usr/sbin/sysctl
        so we don't rely on people's paths.

2007-01-24  Darin Adler  <darin@apple.com>

        Reviewed by Adele.

        - a couple minor tweaks to recently-changed things

        * dom/Document.h: Use HTMLHeadElement as type for the head function.
        * dom/Document.cpp: (WebCore::Document::head):

        * ksvg2/svg/SVGElementInstance.cpp:
        (WebCore::SVGElementInstance::~SVGElementInstance): Change loop to
        a for loop and use a local variable for document.

2007-01-24  Oliver Hunt  <oliver@apple.com>

        Reviewed by Adele.

        Fixes DragController to allow a null target Document.
        This is encountered in new tabs/windows that have not 
        loaded any page

        * page/DragController.cpp:
        (WebCore::documentAtPoint):
        (WebCore::DragController::tryDocumentDrag):
        (WebCore::DragController::operationForLoad):
        (WebCore::DragController::concludeDrag):
        * page/mac/DragControllerMac.mm:
        (WebCore::DragController::dragOperation):

2007-01-24  Sam Weinig  <sam@webkit.org>

        Reviewed by Mitz.

        Patch for http://bugs.webkit.org/show_bug.cgi?id=12394
        Cleanup RenderBox

        No functionality changes, just a good old fashion cleanup,
        thus no tests.

        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::RenderBox):
        (WebCore::RenderBox::setStyle):
        (WebCore::RenderBox::destroy):
        (WebCore::RenderBox::setPos):
        (WebCore::RenderBox::calcBorderBoxWidth):
        (WebCore::RenderBox::calcBorderBoxHeight):
        (WebCore::RenderBox::calcContentBoxWidth):
        (WebCore::RenderBox::calcContentBoxHeight):
        (WebCore::RenderBox::nodeAtPoint):
        (WebCore::RenderBox::paintRootBoxDecorations):
        (WebCore::RenderBox::paintBoxDecorations):
        (WebCore::RenderBox::paintBackgrounds):
        (WebCore::RenderBox::paintBackground):
        (WebCore::cacluateBackgroundSize):
        (WebCore::RenderBox::paintBackgroundExtended):
        (WebCore::RenderBox::getOverflowClipRect):
        (WebCore::RenderBox::getClipRect):
        (WebCore::RenderBox::containingBlockWidth):
        (WebCore::RenderBox::absolutePosition):
        (WebCore::RenderBox::dirtyLineBoxes):
        (WebCore::RenderBox::position):
        (WebCore::RenderBox::getAbsoluteRepaintRect):
        (WebCore::RenderBox::computeAbsoluteRepaintRect):
        (WebCore::RenderBox::repaintDuringLayoutIfMoved):
        (WebCore::RenderBox::relativePositionOffsetX):
        (WebCore::RenderBox::relativePositionOffsetY):
        (WebCore::RenderBox::calcWidth):
        (WebCore::RenderBox::calcWidthUsing):
        (WebCore::RenderBox::sizesToIntrinsicWidth):
        (WebCore::RenderBox::calcHorizontalMargins):
        (WebCore::RenderBox::calcHeight):
        (WebCore::RenderBox::calcPercentageHeight):
        (WebCore::RenderBox::calcReplacedWidthUsing):
        (WebCore::RenderBox::calcReplacedHeightUsing):
        (WebCore::RenderBox::availableHeightUsing):
        (WebCore::RenderBox::calcVerticalMargins):
        (WebCore::RenderBox::containingBlockWidthForPositioned):
        (WebCore::RenderBox::calcAbsoluteHorizontal):
        (WebCore::RenderBox::calcAbsoluteHorizontalValues):
        (WebCore::RenderBox::calcAbsoluteVertical):
        (WebCore::RenderBox::calcAbsoluteVerticalValues):
        (WebCore::RenderBox::calcAbsoluteHorizontalReplaced):
        (WebCore::RenderBox::caretRect):
        * rendering/RenderBox.h:
        (WebCore::RenderBox::setOverrideSize):
        (WebCore::RenderBox::width):
        (WebCore::RenderBox::height):
        (WebCore::RenderBox::setWidth):
        (WebCore::RenderBox::setHeight):
        (WebCore::RenderBox::inlineBoxWrapper):
        (WebCore::RenderBox::setInlineBoxWrapper):
        (WebCore::RenderBox::stretchesToViewHeight):
        (WebCore::RenderBox::setStaticX):
        (WebCore::RenderBox::setStaticY):

2007-01-24  Eric Seidel  <eric@webkit.org>

        Reviewed by ap.

        Converted SVGTransform from being Shared<T> to a POD type.

        No functional changes, thus no tests.

        * bindings/scripts/CodeGenerator.pm:
        * bindings/scripts/CodeGeneratorJS.pm:
        * ksvg2/misc/SVGTimer.cpp:
        (WebCore::baseValueTransformList):
        * ksvg2/svg/SVGAnimateTransformElement.cpp:
        (WebCore::SVGAnimateTransformElement::storeInitialValue):
        (WebCore::SVGAnimateTransformElement::resetValues):
        (WebCore::SVGAnimateTransformElement::updateCurrentValue):
        (WebCore::SVGAnimateTransformElement::handleStartCondition):
        (WebCore::SVGAnimateTransformElement::applyAnimationToValue):
        (WebCore::SVGAnimateTransformElement::parseTransformValue):
        * ksvg2/svg/SVGAnimateTransformElement.h:
        * ksvg2/svg/SVGLinearGradientElement.cpp:
        (WebCore::SVGLinearGradientElement::collectGradientProperties):
        * ksvg2/svg/SVGPatternElement.cpp:
        (WebCore::SVGPatternElement::collectPatternProperties):
        * ksvg2/svg/SVGRadialGradientElement.cpp:
        (WebCore::SVGRadialGradientElement::collectGradientProperties):
        * ksvg2/svg/SVGSVGElement.cpp:
        (WebCore::SVGSVGElement::createSVGTransform):
        (WebCore::SVGSVGElement::createSVGTransformFromMatrix):
        * ksvg2/svg/SVGSVGElement.h:
        * ksvg2/svg/SVGStyledTransformableElement.cpp:
        (WebCore::SVGStyledTransformableElement::updateLocalTransform):
        * ksvg2/svg/SVGTextElement.cpp:
        (WebCore::SVGTextElement::updateLocalTransform):
        * ksvg2/svg/SVGTransform.cpp:
        (SVGTransform::SVGTransform):
        (SVGTransform::isValid):
        * ksvg2/svg/SVGTransform.h:
        * ksvg2/svg/SVGTransform.idl:
        * ksvg2/svg/SVGTransformList.cpp:
        (SVGTransformList::SVGTransformList):
        (SVGTransformList::createSVGTransformFromMatrix):
        (SVGTransformList::consolidate):
        (SVGTransformList::concatenate):
        * ksvg2/svg/SVGTransformList.h:
        * ksvg2/svg/SVGTransformable.cpp:
        (WebCore::SVGTransformable::parseTransformAttribute):

2007-01-24  Mark Rowe  <mrowe@apple.com>

        Reviewed by Eric.

        Plug another bunch of SVG memory leaks.

        * ksvg2/misc/SVGDocumentExtensions.cpp:
        (WebCore::SVGDocumentExtensions::~SVGDocumentExtensions): Delete memory we have allocated.
        (WebCore::SVGDocumentExtensions::removePendingResource): Return an auto_ptr to show that we are transferring ownership.
        * ksvg2/misc/SVGDocumentExtensions.h:
        * ksvg2/svg/SVGElement.cpp:
        (WebCore::SVGElement::insertedIntoDocument): Update for use of auto_ptr.

2007-01-23  Mark Rowe  <mrowe@apple.com>

        Reviewed by Brady.

        Plug thousands of node leaks seen running layout tests.

        * ksvg2/svg/SVGElementInstance.cpp:
        (WebCore::SVGElementInstance::~SVGElementInstance): Disassociate ourselves from our children so they will
        be destroyed if we were the only thing referencing them.
        * ksvg2/svg/SVGUseElement.cpp:
        (WebCore::SVGUseElement::removedFromDocument):
        * ksvg2/svg/SVGUseElement.h:

2007-01-23  Alice Liu  <alice.liu@apple.com>

        Reviewed by Brady.

        * editing/Editor.cpp:
        (WebCore::Editor::appliedEditing):
        minor change.  removing unnecessary call to frame to fetch editor

2007-01-23  Mark Rowe  <mrowe@apple.com>

        Reviewed by Adele.

        http://bugs.webkit.org/show_bug.cgi?id=12375
        Bug 12375: REGRESSION(r19038): fast/dom/title-text-property-2.html failing

        Fix regression by making setTitle/updateTitle/removeTitle logic match document.title
        specification at http://whatwg.org/specs/web-apps/current-work/#the-title1.

        * dom/Document.cpp:
        (WebCore::Document::setTitle): Materialize a title element into the head if one doesn't exist when setting
        document.title.  Also update the contents of the title element when the title is set via document.title.
        (WebCore::Document::removeTitle): Update the title based on first title element in the head, if one exists.
        (WebCore::Document::head): Convenience method to retrieve the head element in an HTML document.
        * dom/Document.h:

2007-01-23  Beth Dakin  <bdakin@apple.com>

        Reviewed by Hyatt.

        Follow-up to the fix below for 4843226.

        * rendering/RenderLayer.cpp:
        (WebCore::transparencyClipBox): Has to be recursive or we will miss 
        out on grandchildren!

2007-01-23  Oliver Hunt  <oliver@apple.com>

        Reviewed by Adam.

        Fixes dropping of files into safari

        * page/DragController.cpp:
        (WebCore::DragController::performDrag):

2007-01-23  Brady Eidson  <beidson@apple.com>

        Reviewed by Darin

        Added a couple of CF things previously missed

        * platform/network/ResourceError.h:
        * platform/network/ResourceHandle.h:

2007-01-23  Nikolas Zimmermann  <zimmermann@kde.org>

        Reviewed by Maciej.

        Fix evil genericContext() assertion, which occours sometimes when running DRT.
        Fixes: http://bugs.webkit.org/show_bug.cgi?id=12379

        * bindings/scripts/CodeGeneratorJS.pm:
        * ksvg2/misc/SVGDocumentExtensions.h:
        (WebCore::SVGDocumentExtensions::genericContextMap):
        (WebCore::SVGDocumentExtensions::forgetGenericContext):

2007-01-23  Beth Dakin  <bdakin@apple.com>

        Reviewed by Hyatt.

        Fix for <rdar://problem/4843226> REGRESSION: Pull down menu appears 
        clipped at http://istweb.apple.com/

        * rendering/RenderLayer.cpp:
        (WebCore::transparencyClipBox): Always unite with sibling rects.

2007-01-22  Justin Garcia  <justin.garcia@apple.com>

        Reviewed by john

        <rdar://problem/4920742>
        REGRESSION: GMail Editor: Attempting to remove formatting from selection results in a crash at WebCore::Range::checkDeleteExtract()

        * dom/Range.cpp:
        (WebCore::Range::checkDeleteExtract): Return if there is no
        commonAncestor container or if commonAncestorContainer() throws
        an exception.
        * editing/Editor.cpp:
        (WebCore::Editor::removeFormattingAndStyle): Fixed a bug that reversed
        the order of the selected paragraphs.

2007-01-23  Nikolas Zimmermann  <zimmermann@kde.org>

        Reviewed by Sam.

        Fix dynamic creation/updates of markers, masks, clipPaths, and several tiny pattern issues.
        Added 16 (!) new layout tests covering quite some weird scenerios - Batik & Opera do have problems, we don't.

        Fixes: http://bugs.webkit.org/show_bug.cgi?id=12380
        Fixes: svg/custom/image-with-transform-clip-filter.svg (filter shows up again)

        Added: svg/custom/clip-path-child-changes.svg
        Added: svg/custom/clip-path-href-changes.svg
        Added: svg/custom/clip-path-units-changes.svg
        Added: svg/custom/deep-dynamic-updates.svg
        Added: svg/custom/js-late-clipPath-and-object-creation.svg
        Added: svg/custom/js-late-clipPath-creation.svg
        Added: svg/custom/js-late-marker-and-object-creation.svg
        Added: svg/custom/js-late-marker-creation.svg
        Added: svg/custom/js-late-mask-and-object-creation.svg
        Added: svg/custom/js-late-mask-creation.svg
        Added: svg/custom/js-update-pattern-child.svg
        Added: svg/custom/marker-changes.svg
        Added: svg/custom/marker-child-changes.svg
        Added: svg/custom/marker-viewBox-changes.svg
        Added: svg/custom/mask-changes.svg
        Added: svg/custom/mask-child-changes.svg

        * ksvg2/misc/KCanvasRenderingStyle.cpp:
        (WebCore::KSVGPainterFactory::fillPaintServer):
        (WebCore::KSVGPainterFactory::strokePaintServer):
        * ksvg2/svg/SVGClipPathElement.cpp:
        (WebCore::SVGClipPathElement::notifyAttributeChange):
        * ksvg2/svg/SVGClipPathElement.h:
        * ksvg2/svg/SVGGradientElement.cpp:
        * ksvg2/svg/SVGGradientElement.h:
        * ksvg2/svg/SVGMarkerElement.cpp:
        (WebCore::SVGMarkerElement::canvasResource):
        (WebCore::SVGMarkerElement::notifyAttributeChange):
        * ksvg2/svg/SVGMarkerElement.h:
        * ksvg2/svg/SVGMaskElement.cpp:
        (WebCore::SVGMaskElement::notifyAttributeChange):
        * ksvg2/svg/SVGMaskElement.h:
        * ksvg2/svg/SVGStopElement.cpp:
        (WebCore::SVGStopElement::notifyAttributeChange):
        * ksvg2/svg/SVGStyledElement.cpp:
        (WebCore::SVGStyledElement::notifyAttributeChange):
        (WebCore::SVGStyledElement::notifyResourceParentIfExistant):
        (WebCore::SVGStyledElement::rebuildRenderer):
        * ksvg2/svg/SVGStyledElement.h:
        * ksvg2/svg/SVGUseElement.cpp:
        (WebCore::SVGUseElement::notifyAttributeChange):
        * platform/graphics/svg/SVGResource.cpp:
        (WebCore::SVGResource::invalidate):
        (WebCore::SVGResource::addClient):
        (WebCore::SVGResource::repaintClients):
        * platform/graphics/svg/SVGResource.h:
        * platform/graphics/svg/SVGResourceMarker.cpp:
        (WebCore::SVGResourceMarker::draw):
        (WebCore::SVGResourceMarker::cachedBounds):
        * platform/graphics/svg/SVGResourceMarker.h:
        * rendering/RenderPath.cpp:
        (WebCore::RenderPath::layout):
        (WebCore::RenderPath::getAbsoluteRepaintRect):
        (WebCore::RenderPath::paint):
        (WebCore::drawMarkerWithData):
        (WebCore::RenderPath::drawMarkersIfNeeded):
        * rendering/RenderPath.h:
        * rendering/RenderSVGContainer.cpp:
        (WebCore::RenderSVGContainer::paint):
        (WebCore::RenderSVGContainer::getAbsoluteRepaintRect):
        * rendering/RenderSVGImage.cpp:
        (WebCore::RenderSVGImage::paint):
        (WebCore::RenderSVGImage::getAbsoluteRepaintRect):
        * rendering/SVGInlineFlowBox.cpp:
        (WebCore::paintSVGInlineFlow):

2007-01-23  Adele Peterson  <adele@apple.com>

        Reviewed by Darin.
        
        WebCore part of fix for <rdar://problem/4946753>REGRESSION: Inserting tabs is broken in Mail

        In addition to this fix, I also reorganized some event handling code for keyPress events to
        prepare for another fix.  There's also just a little bit of unrelated cleanup.
        
        * dom/EventTargetNode.cpp: (WebCore::EventTargetNode::defaultEventHandler):
          Move tab focus behavior into new defaultKeyboardEventHandler method.
        
        * bridge/EditorClient.h: Added handleKeyPress.
        * editing/Editor.cpp:
        (WebCore::Editor::handleKeyPress): Added. Calls over to the client method.
        (WebCore::Editor::deleteRange): Removed unnecessary propogateDOMException.
        * editing/Editor.h: Added handleKeyPress.
        (WebCore::Editor::addToKillRing): Formatting cleanup.
        * editing/mac/EditorMac.mm: Removed unnecessary propogateDOMException.
        
        * page/EventHandler.cpp: (WebCore::EventHandler::defaultKeyboardEventHandler): Added. Checks
          the tabKeyCyclesThroughElements setting before advancing focus for tab key events.  Calls handleKeyPress.
        * page/EventHandler.h: Added defaultKeyboardEventHandler.
        
        * page/Page.cpp: (WebCore::Page::Page): Initialize m_tabKeyCyclesThroughElements to true.
        * page/Page.h: Added m_tabKeyCyclesThroughElements.
        (WebCore::Page::setTabKeyCyclesThroughElements): Added.
        (WebCore::Page::tabKeyCyclesThroughElements): Added.
        
        * platform/PlatformKeyboardEvent.h: Added ability to get NSEvent from PlatformKeyboardEvent.
        * platform/mac/KeyEventMac.mm: (WebCore::PlatformKeyboardEvent::PlatformKeyboardEvent):
          Initialize m_macEvent to the NSEvent.
        
        * platform/graphics/svg/SVGImageEmptyClients.h: (WebCore::SVGEmptyEditorClient::handleKeyPress): Added.

2007-01-23  George Staikos  <staikos@kde.org>

        Compile with a released Qt.

        * platform/graphics/qt/ImageQt.cpp:

2007-01-23  Lars Knoll <lars@trolltech.com>

        Reviewed by Zack

        Widget and ScrollView do not own the Qt widgets
        anymore. Make sure they can handle the case of
        a null QWidget and never delete them.

        * platform/qt/ScrollViewQt.cpp:
        (WebCore::ScrollView::setScrollArea):
        (WebCore::ScrollView::updateContents):
        (WebCore::ScrollView::visibleWidth):
        (WebCore::ScrollView::visibleHeight):
        (WebCore::ScrollView::visibleContentRect):
        (WebCore::ScrollView::setContentsPos):
        (WebCore::ScrollView::resizeContents):
        (WebCore::ScrollView::contentsX):
        (WebCore::ScrollView::contentsY):
        (WebCore::ScrollView::contentsWidth):
        (WebCore::ScrollView::contentsHeight):
        (WebCore::ScrollView::scrollOffset):
        (WebCore::ScrollView::scrollBy):
        (WebCore::ScrollView::hScrollbarMode):
        (WebCore::ScrollView::vScrollbarMode):
        (WebCore::ScrollView::setHScrollbarMode):
        (WebCore::ScrollView::setVScrollbarMode):
        * platform/qt/WidgetQt.cpp:
        (WebCore::WidgetPrivate::~WidgetPrivate):
        (WebCore::Widget::setQWidget):

2007-01-23  Zack Rusin  <zack@kde.org>

        Forgot to add one new file to the build.

        * WebCore.pro: Add dom/clipboard.cpp

2007-01-23  Zack Rusin  <zack@kde.org>

        Fix the Qt build

        * page/DragActions.h:
        * page/DragController.cpp:
        * platform/qt/DragDataQt.cpp:
        (WebCore::DragData::canSmartReplace):
        (WebCore::DragData::containsColor):
        (WebCore::DragData::containsPlainText):
        (WebCore::DragData::asPlainText):
        (WebCore::DragData::asColor):
        (WebCore::DragData::createClipboard):
        (WebCore::DragData::containsCompatibleContent):
        (WebCore::DragData::containsURL):
        (WebCore::DragData::asURL):
        (WebCore::DragData::asFragment):
        * platform/qt/FileChooserQt.cpp:

2007-01-23  Lars Knoll <lars@trolltech.com>

        Reviewed by Maciej

        Make the last remaining pieces of the FrameLoader platform 
        independent. Move most of the code over to WebFrameLoaderClient.
        Some smaller cleanups in the WebFrameBridge, and moved some
        platform independent functionality over to the shared code
        in WebCore.
        
        * WebCore.exp:
        * WebCore.pro:
        * WebCore.xcodeproj/project.pbxproj:
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::loadSubframe):
        (WebCore::FrameLoader::shouldUsePlugin):
        (WebCore::FrameLoader::loadPlugin):
        (WebCore::FrameLoader::detachFromParent):
        (WebCore::FrameLoader::partClearedInBegin):
        (WebCore::FrameLoader::createJavaAppletWidget):
        (WebCore::FrameLoader::didChangeTitle):
        * loader/FrameLoader.h:
        * loader/FrameLoaderClient.h:
        * loader/FrameLoaderTypes.h:
        (WebCore::):
        * loader/PluginDocument.cpp:
        (WebCore::PluginTokenizer::writeRawData):
        * loader/mac/FrameLoaderMac.mm: Removed.
        * loader/qt/FrameLoaderQt.cpp: Removed.
        * page/Frame.cpp:
        (WebCore::Frame::Frame):
        * page/FrameView.cpp:
        (WebCore::FrameView::mediaType):
        * page/qt/FrameQt.cpp:
        (WebCore::FrameQt::FrameQt):
        * platform/graphics/svg/SVGImageEmptyClients.h:
        (WebCore::SVGEmptyFrameLoaderClient::makeRepresentation):
        (WebCore::SVGEmptyFrameLoaderClient::dispatchDidLoadResourceFromMemoryCache):
        (WebCore::SVGEmptyFrameLoaderClient::dispatchDidCommitLoad):
        (WebCore::SVGEmptyFrameLoaderClient::dispatchDidFailLoad):
        (WebCore::SVGEmptyFrameLoaderClient::dispatchCreatePage):
        (WebCore::SVGEmptyFrameLoaderClient::dispatchDecidePolicyForNavigationAction):
        (WebCore::SVGEmptyFrameLoaderClient::dispatchUnableToImplementPolicy):
        (WebCore::SVGEmptyFrameLoaderClient::revertToProvisionalState):
        (WebCore::SVGEmptyFrameLoaderClient::setMainDocumentError):
        (WebCore::SVGEmptyFrameLoaderClient::startDownload):
        (WebCore::SVGEmptyFrameLoaderClient::committedLoad):
        (WebCore::SVGEmptyFrameLoaderClient::shouldFallBack):
        (WebCore::SVGEmptyFrameLoaderClient::willUseArchive):
        (WebCore::SVGEmptyFrameLoaderClient::createDocumentLoader):
        (WebCore::SVGEmptyFrameLoaderClient::createFrame):
        (WebCore::SVGEmptyFrameLoaderClient::createPlugin):
        (WebCore::SVGEmptyFrameLoaderClient::createJavaAppletWidget):
        (WebCore::SVGEmptyFrameLoaderClient::objectContentType):
        (WebCore::SVGEmptyFrameLoaderClient::overrideMediaType):
        (WebCore::SVGEmptyFrameLoaderClient::redirectDataToPlugin):
        (WebCore::SVGEmptyFrameLoaderClient::windowObjectCleared):

2007-01-23  Oliver Hunt  <oliver@apple.com>

        Reviewed by Adam.

        Added DragController to handled drag and drop state and control logic.
        Currently this only handles logic for Dragging and Dropping, and is 
        unable to initialise a drag itself.

        platform/DragData encapsulate the paltform Drag data (NSDraggingInfo on Mac, 
        QMimeType in Qt).  This provides methods to pull data out the drag data as a String, 
        a URL, a DocumentFragment (for rich content), or a Colour.

        * WebCore.exp:
        * WebCore.pro:
        * WebCore.xcodeproj/project.pbxproj:
        * dom/Clipboard.cpp: Added.
        (WebCore::Clipboard::setAccessPolicy):
        (WebCore::dragOpFromIEOp):
        (WebCore::IEOpFromDragOp):
        (WebCore::Clipboard::sourceOperation):
        (WebCore::Clipboard::destinationOperation):
        (WebCore::Clipboard::setSourceOperation):
        (WebCore::Clipboard::setDestinationOperation):
        (WebCore::Clipboard::setDropEffect):
        (WebCore::Clipboard::setEffectAllowed):
          move platform independent functions from ClipboardMac to Clipboard

        * dom/Clipboard.h:
        (WebCore::Clipboard::Clipboard):
        (WebCore::Clipboard::dropEffect):
        (WebCore::Clipboard::effectAllowed):
        (WebCore::Clipboard::policy):
          as above -- also removed virtual modifier from now 
          platform independent methods

        * editing/Editor.cpp:
        (WebCore::Editor::smartInsertDeleteEnabled): 
        (WebCore::Editor::shouldApplyStyle):
        * editing/Editor.h:
          adding calls through to EditorClient
         
        * page/DragActions.h: Added.
        (WebCore::):
          Replicates a number of NS* enums in the WebCore namespace

        * page/DragClient.h: Added.
        (WebCore::DragClient::~DragClient):
          Standard client interface for dragging UIDelegate

        * page/DragController.cpp: Added.
        (WebCore::createMouseEvent):
        (WebCore::DragController::DragController):
        (WebCore::DragController::~DragController):
        (WebCore::documentFragmentFromDragData):
        (WebCore::DragController::isMoveDrag):
        (WebCore::visiblePositionForPoint):
        (WebCore::DragController::cancelDrag):
        (WebCore::documentAtPoint):
        (WebCore::DragController::dragEntered):
        (WebCore::DragController::dragExited):
        (WebCore::DragController::dragUpdated):
        (WebCore::DragController::performDrag):
        (WebCore::DragController::dragEnteredOrUpdated):
        (WebCore::DragController::tryDocumentDrag):
        (WebCore::DragController::operationForLoad):
        (WebCore::DragController::concludeDrag):
        (WebCore::DragController::canProcessDrag):
        (WebCore::DragController::tryDHTMLDrag):
          Class to handle state and logic for dragging and dropping

        * page/DragController.h: Added.
        (WebCore::DragController::client):
        (WebCore::DragController::didInitiateDrag):
        (WebCore::DragController::isHandlingDrag):
        (WebCore::DragController::dragOperation):
        (WebCore::DragController::document):
        (WebCore::DragController::dragInitiator):
        (WebCore::DragController::dragDestinationAction):
        (WebCore::DragController::dragSourceAction):
        (WebCore::DragController::dragEnded):
        (WebCore::DragController::setIsHandlingDrag):
        (WebCore::DragController::setDidInitiateDrag):
        (WebCore::DragController::setDragOperation):
        (WebCore::DragController::setDragSourceAction):
        (WebCore::DragController::setDragInitiator):
          See above

        * page/Page.cpp:
        (WebCore::Page::Page):
          Update Page to have DragController

        * page/Page.h:
        (WebCore::Page::dragController):
          ditto

        * page/mac/DragControllerMac.mm: Added.
        (WebCore::DragController::isCopyKeyDown):
        (WebCore::DragController::dragOperation):
          Platform specific portions of the DragController

        * page/mac/EventHandlerMac.mm:
        (WebCore::EventHandler::handleDrag):
        (WebCore::EventHandler::dragSourceEndedAt):
          Convert from NSDragOperation to WebCore::DragOperation

        * page/mac/WebCoreFrameBridge.h:
        * page/mac/WebCoreFrameBridge.mm:
          Remove obsolete Drag functions

        * page/qt/DragControllerQt.cpp: Added.
        (WebCore::DragController::isCopyKeyDown):
        (WebCore::DragController::dragOperation):
          Basic stubs to maintain Qt  build

        * platform/DragData.cpp: Added.
        (WebCore::DragData::DragData):
        * platform/DragData.h: Added.
        (WebCore::DragData::clientPosition):
        (WebCore::DragData::globalPosition):
        (WebCore::DragData::platformData):
        (WebCore::DragData::draggingSourceOperationMask):
          DragData class to encapsulate platform drag data/event

        * platform/graphics/svg/SVGImage.cpp:
        (WebCore::SVGImage::setData):
          Addition of dummy DragClient

        * platform/graphics/svg/SVGImageEmptyClients.h:
        (WebCore::SVGEmptyDragClient::~SVGEmptyDragClient):
        (WebCore::SVGEmptyDragClient::willPerformDragDestinationAction):
        (WebCore::SVGEmptyDragClient::actionMaskForDrag):
        (WebCore::SVGEmptyDragClient::dragControllerDestroyed):
          ditto

        * platform/mac/ClipboardMac.h:
        * platform/mac/ClipboardMac.mm:
        (WebCore::ClipboardMac::ClipboardMac):
        (WebCore::ClipboardMac::clearData):
        (WebCore::ClipboardMac::clearAllData):
        (WebCore::ClipboardMac::getData):
        (WebCore::ClipboardMac::setData):
        (WebCore::ClipboardMac::types):
        (WebCore::ClipboardMac::setDragImage):
         Moving platform independent logic to Clipboard, and updating
         platform specific methods to use appropriate accessors rather than 
         directly manipulating data they no longer own

        * platform/mac/DragDataMac.mm: Added.
        (WebCore::DragData::DragData):
        (WebCore::DragData::canSmartReplace):
        (WebCore::DragData::containsColor):
        (WebCore::DragData::containsPlainText):
        (WebCore::DragData::asPlainText):
        (WebCore::DragData::asColor):
        (WebCore::DragData::createClipboard):
        (WebCore::imageExistsAtPaths):
        (WebCore::DragData::containsCompatibleContent):
        (WebCore::DragData::containsURL):
        (WebCore::DragData::asURL):
        (WebCore::DragData::asFragment):
          Mac implementations of DragData methods.  A number of these use
          a Helper class that accesses WebKit functionality.  That functionality 
          should be migrated to WebCore in the future.

        * platform/mac/PasteboardHelper.h: Added.
        (WebCore::PasteboardHelper::~PasteboardHelper):
          Temporary, and Mac only, helper class to access WebKit functionality 
          from WebCore

        * platform/qt/DragDataQt.cpp: Added.
        (WebCore::DragData::canSmartReplace):
        (WebCore::DragData::containsColor):
        (WebCore::DragData::containsPlainText):
        (WebCore::DragData::asPlainText):
        (WebCore::DragData::asColor):
        (WebCore::DragData::createClipboard):
        (WebCore::DragData::containsCompatibleContent):
        (WebCore::DragData::containsURL):
        (WebCore::DragData::asURL):
        (WebCore::DragData::asFragment):
         Basic stubs to maintain Qt build

        * rendering/HitTestResult.cpp:
        (WebCore::HitTestResult::HitTestResult):
         Correct HitTestResult copy contructor to copy localPoint

2007-01-22  Mark Rowe  <mrowe@apple.com>

        Reviewed by Maciej.

        http://bugs.webkit.org/show_bug.cgi?id=11692
        Bug 11692: REGRESSION(r17352): Disappearing page title

        * dom/Document.cpp:
        (WebCore::Document::setTitle): If the title has already been set explicitly via JavaScript,
        ignore any changes to it due to encountering <title> tags.

2007-01-22  Mitz Pettel  <mitz@webkit.org>

        Reviewed by Darin.

        - fix http://bugs.webkit.org/show_bug.cgi?id=12344
          NativeListBox: item hit testing does not account for top padding and border

        Test: fast/forms/listbox-selection-2.html

        * rendering/RenderListBox.cpp:
        (WebCore::RenderListBox::numVisibleItems): Changed height() to contentHeight()
        since items are visible only in the content box.
        (WebCore::RenderListBox::listIndexAtOffset): Adjusted for vertical padding and
        borders. Changed to return -1 instead of the last item's index if the given offset
        is below the last item.
        (WebCore::RenderListBox::autoscroll): Adjusted for vertical padding and borders.
        (WebCore::RenderListBox::controlClipRect): Changed to return the content box since
        items should not spill into the padding box. This change is the reason the test
        generates pixel results.

2007-01-22  Justin Garcia  <justin.garcia@apple.com>

        Reviewed by darin
        
        <rdar://problem/4944770>
        editing/pasteboard/4641033 layout test is broken (12328)
        
        This layout test failure demonstrates three bugs:
        Smart replace shouldn't be turned on, but is because a word
        selection granularity from the previous test isn't cleared.
        Smart replace shouldn't add any spaces because the paste is performed
        in an empty paragraph.
        Smart replace spaces are added to the text of options inside
        the select element instead of before/after the select element.
        
        This patch fixes the second two problems.  During a 
        ReplaceSelectionCommand, the VisiblePosition for the end of 
        the inserted content is the last position in the last leaf 
        inserted.  This is a problem when the last leaf is inside a 
        select element, since VP creation is inconsistent there.  
        Second, smart spaces were inserted inside the last leaf, not
        at the endOfInsertedContent.

        * editing/ReplaceSelectionCommand.cpp:
        (WebCore::ReplaceSelectionCommand::shouldMergeStart): Renamed 
        m_lastNodeInserted to m_lastLeafInserted.  Use the 
        start/endOfInsertedContent getters.
        (WebCore::ReplaceSelectionCommand::shouldMergeEnd): Ditto.
        (WebCore::ReplaceSelectionCommand::removeNodePreservingChildren): Ditto.
        (WebCore::ReplaceSelectionCommand::removeRedundantStyles): Ditto.
        (WebCore::ReplaceSelectionCommand::positionAtEndOfInsertedContent): Added.
        Special case for when the last leaf inserted is inside a select 
        element: return the VisiblePosition after the select element.
        (WebCore::ReplaceSelectionCommand::positionAtStartOfInsertedContent): Added.
        (WebCore::ReplaceSelectionCommand::doApply): Did renaming.  Used
        the start/endOfInsertedContent getters.  Insert smart replace spaces
        into the right nodes.
        (WebCore::ReplaceSelectionCommand::shouldRemoveEndBR): Renaming.
        (WebCore::ReplaceSelectionCommand::completeHTMLReplacement): Ditto.
        (WebCore::ReplaceSelectionCommand::updateNodesInserted): Ditto.
        * editing/ReplaceSelectionCommand.h:

2007-01-22  Darin Adler  <darin@apple.com>

        Reviewed by Adam.

        - fix http://bugs.webkit.org/show_bug.cgi?id=12273
          REGRESSION: File input value invisible after removing and re-appending

        - made more of the file chooser code cross-platform

        - fixed an Objective-C garbage collection problem in FileChooser

        - tried to remove layering violations where FileChooser in the platform
          directory knows about the rendering and DOM trees (but wasn't able to
          do it entirely)

        * platform/FileChooser.cpp: Added.
        (WebCore::FileChooser::create): Changed parameters.
        (WebCore::FileChooser::chooseFile): Changed to call chooseIcon function.
        (WebCore::FileChooser::chooseIcon): Added.

        * platform/FileChooser.h: Added FileChooserClient so this file doesn't have
        to know about RenderFileUploadControl. Used RetainPtr instead of retain/release
        so this works properly with Objective-C GC. Replaced disconnectUploadControl
        with disconnectClient, which has a simple inline implementation. Moved the
        Document parameter from the constructor to openFileChooser, along with a comment
        about why it should not be there. Added a filename parameter to the constructor
        for the initial filename. Added a font parameter to basenameForWidth so we don't
        depend on having a pointer to the renderer. Removed the uploadControl() and
        document() functions since no one calls either of them.

        * platform/mac/FileChooserMac.mm: Removed code that is now cross-platform.
        (-[OpenPanelController beginSheetWithFrame:]): Added frame parameter, instead
        of storing a document pointer in the FileChooser.
        (WebCore::FileChooser::FileChooser): Updated for changed parameters. Also added
        code to choose the icon based on the initial filename. Pass the adopt parameter
        to the constructor of the RetainPtr.
        (WebCore::FileChooser::~FileChooser): Removed the release call, since the
        RetainPtr will take care of it. Added a call to disconnectFileChooser here.
        There's no need to disconnect at disconnectClient time, and that lets us have
        one more cross-platform function.
        (WebCore::FileChooser::openFileChooser): Added document parameter. Added code
        to get the frame from the document. And added a nil check since there's no
        ironclad guarantee the document won't have outlived its frame.
        (WebCore::FileChooser::basenameForWidth): Added font parameter. Use that instead
        of going at the upload control's style. The caller can handle that now.

        * rendering/RenderFileUploadControl.h: Removed unnecessary includes.
        Made class inherit privately from FileChooserClient. Changed constructor
        parameter to HTMLInputElement rather than Node. Made protected members be
        private instead, and made a couple function members const.
        * rendering/RenderFileUploadControl.cpp: Moved constants to the top of the file,
        but after the "using namespace"
        (WebCore::RenderFileUploadControl::RenderFileUploadControl): Updated for changes
        to the FileChooser::create function and the parameter types.
        (WebCore::RenderFileUploadControl::~RenderFileUploadControl): Removed unneeded
        null check -- there's no case where the FileChooser fails to be created.
        (WebCore::RenderFileUploadControl::click): Pass document to openFileChooser.
        (WebCore::RenderFileUploadControl::updateFromElement): Tweaked code a bit by
        using updateFromElement and setValue instead of casting the renderer to a
        RenderButton and calling setText directly. Put setInputType call here.
        (WebCore::RenderFileUploadControl::maxFilenameWidth): Made const. Broke long line.
        (WebCore::RenderFileUploadControl::createButtonStyle): Made const.
        (WebCore::RenderFileUploadControl::paintObject): Moved buttonShadowHeight constant
        to the top of the file. Call isEmpty instead of checking width and height of
        IntRect for 0. Computed font to pass to FileChooser::basenameForWidth. Broke
        long lines.
        (WebCore::HTMLFileUploadInnerButtonElement::HTMLFileUploadInnerButtonElement):
        Moved the setInputType call to the caller; concept here is that this class is
        as simple as possible, rather than doing as much of the button job as possible.

        * WebCore.xcodeproj/project.pbxproj: Added FileChooser.cpp.
        * WebCore.pro: Ditto.
        * CMakeLists.txt: Ditto.
        * WebCoreSources.bkl: Ditto.

        * platform/gdk/TemporaryLinkStubs.cpp: Updated stubs.
        * platform/qt/FileChooserQt.cpp: Updated stubs.

2007-01-22  Mitz Pettel  <mitz@webkit.org>

        Reviewed by Darin.

        - fix http://bugs.webkit.org/show_bug.cgi?id=12364
          REGRESSSION (NativeListBox): Selected option's background is not clipped to the list box

        Test: fast/forms/select-item-background-clip.html

        * rendering/RenderListBox.cpp:
        (WebCore::RenderListBox::paintItemBackground): Intersect the item's rect with
        the list box's clip rect.

2007-01-22  Darin Adler  <darin@apple.com>

        Reviewed by Beth.

        - fix http://bugs.webkit.org/show_bug.cgi?id=12369
          REGRESSION (r19027): amazon.com home page crashes WebKit r19028 debug build

        I caused this a few hours ago. Oops!

        * rendering/RenderText.cpp: (WebCore::RenderText::setStyle):
        Compute whether the font changed before calling RenderObject::setStyle.

2007-01-22  Beth Dakin  <bdakin@apple.com>

        Reviewed by Maciej.

        Fix for <rdar://problem/4912129> REGRESSION: Crash occurs at 
        WebCore::Frame::eventHandler() after clicking to dismiss a 
        contextual menu on the page

        * page/EventHandler.cpp:
        (WebCore::EventHandler::stopAutoscrollTimer): Added nil-check.

2007-01-22  Darin Adler  <darin@apple.com>

        Reviewed by Mitz.

        Inspired by a much simpler patch by Andrew Wellington <proton@wiretapped.net>.

        - fix http://bugs.webkit.org/show_bug.cgi?id=11197
          REGRESSION: Specifying a counter for a CODE tag's content style property
          on before or after causes a crash.

        Test: fast/css/beforeSelectorOnCodeElement.html

        - fix regression I recently introduced where the monospace cache could be
          used for text that was not ASCII, if text was changed after the style was set

        Test: fast/text/monospace-width-cache.html

        - streamline RenderText.h -- remove unneeded functions, make some needlessly
          virtual functions non-virtual, remove unneeded header includes, replace use
          of Font* with Font& for consistency with RenderStyle, use "text" consistently
          instead of "string"

        * rendering/RenderText.h: Removed unneeded include of "Text.h", declarations of
        SOFT_HYPHEN, DocumentMarker, InlineBox, Position, String. Got rid of friend
        declaration for InlineTextBox. Changed constructor to take a PassRefPtr since
        we do take owership of the passed-in text. Made deleteTextBoxes() private.
        Removed unneeded data(). Made override of length() private so people will use
        the faster textLength() instead. Renamed string() to text() so it matches up
        better with setText(). Same for stringLength(), originalString(), and
        setInternalString(), which are now textLength(), originalText(), and
        setTextInternal(). Renamed the old text() function to characters(), since it
        returns a pointer as StringImpl::characters does. Changed Font* to Font& everywhere.
        Renamed the internal calcMinMaxWidth() function to calcMinMaxWidthInternal() and
        made it non-virtual since it's not overriden anywhere. Also made the
        trimmedMinMaxWidth() function non-virtual. Made containsOnlyWhitespace() private.
        Removed both font() functions (one was needlessly virtual) and element().
        Renamed cacheWidths() to updateMonospaceCharacterWidth() and removed the
        shouldUseMonospaceCache() function. Renamed allAscii() to isAllASCII() and made
        it an inline function. Removed the m_allAsciiChecked flag and renamed the
        m_allAscii flag to m_isAllASCII.
        * rendering/RenderText.cpp:
        (WebCore::RenderText::RenderText): Removed initialization of m_allAsciiChecked.
        Initialize m_isAllASCII. Changed all occurrences of m_str->length() and
        m_str->characters () to use the stringLength() and characters() inline functions
        instead.
        (WebCore::RenderText::setStyle): Replaced the unconditional call to cacheWidths
        with a conditional call to updateMonospaceCharacterWidth. This speeds up the common
        case where style is changed without changing the font.
        (WebCore::RenderText::originalText): Changed code to not depend on overridden
        element() function with casts to a Text node -- this was one of only two call sites.
        Also renamed.
        (WebCore::RenderText::positionForCoordinates): Name change.
        (WebCore::RenderText::caretRect): Ditto.
        (WebCore::RenderText::updateMonospaceCharacterWidth): Renamed from cacheWidths and
        incorporate the check that was formerly in a separate shouldUseMonospaceCache
        function.
        (WebCore::RenderText::widthFromCache): Changed to take a Font& instead of Font*.
        Changed to take advantage of the fact that the string is known to be all ASCII in
        the m_monospaceCharacterWidth code path.
        (WebCore::RenderText::trimmedMinMaxWidth): Ditto. Also use style()->font() instead
        of font(false).
        (WebCore::RenderText::calcMinMaxWidth): Ditto. Also changed to use softHyphen instead
        of SOFT_HYPHEN.
        (WebCore::RenderText::containsOnlyWhitespace): More of the same.
        (WebCore::RenderText::setSelectionState): Ditto.
        (WebCore::RenderText::setTextWithOffset): Ditto.
        (WebCore::isInlineFlowOrEmptyText): Ditto.
        (WebCore::RenderText::setTextInternal): Updated for name changes. Also changed to
        set the m_isAllASCII flag every time, in the more-efficient way we use elsewhere
        (or'ing all the characters together), and to call updateMonospaceCharacterWidth
        if the "all ASCII"-ness of the text changes.
        (WebCore::RenderText::setText): Updated for name changes.
        (WebCore::RenderText::width): More like above.
        (WebCore::RenderText::selectionRect): Ditto.
        (WebCore::RenderText::caretMaxOffset): Ditto.
        (WebCore::RenderText::previousOffset): Ditto.
        (WebCore::RenderText::nextOffset): Ditto.

        * dom/Position.cpp:
        * dom/Range.cpp:
        * editing/CompositeEditCommand.cpp:
        * editing/DeleteSelectionCommand.cpp:
        * editing/VisiblePosition.cpp:
        * html/HTMLElement.cpp:
        Added now-needed include of "Text.h" which is no longer included by "RenderText.h".

        * editing/SelectionController.cpp:
        (WebCore::SelectionController::debugRenderer):
        * editing/TextIterator.cpp:
        (WebCore::TextIterator::handleTextNode):
        (WebCore::TextIterator::handleTextBox):
        (WebCore::SimplifiedBackwardsTextIterator::handleTextNode):
        Update for name changes of stringLength(), string(), and originalString() to
        textLength(), text(), and originalText(), and to always use textLength() instead
        of length() when we have a RenderText* rather than a RenderObject*.
        * editing/visible_units.cpp:
        (WebCore::startOfParagraph): Ditto.
        (WebCore::endOfParagraph): Ditto.
        * rendering/InlineFlowBox.cpp:
        (WebCore::InlineFlowBox::placeBoxesHorizontally): Ditto. Also removed use of the
        RenderObject::font() function and replaced it with explicit access to the style.
        (WebCore::InlineFlowBox::placeBoxesVertically): Ditto.
        * rendering/InlineTextBox.cpp:
        (WebCore::InlineTextBox::selectionRect): Ditto.
        (WebCore::InlineTextBox::isLineBreak): Ditto.
        (WebCore::InlineTextBox::paint): Ditto.
        (WebCore::InlineTextBox::selectionStartEnd): Ditto.
        (WebCore::InlineTextBox::paintSelection): Ditto.
        (WebCore::InlineTextBox::paintMarkedTextBackground): Ditto.
        (WebCore::InlineTextBox::paintSpellingOrGrammarMarker): Ditto.
        (WebCore::InlineTextBox::paintTextMatchMarker): Ditto.
        (WebCore::InlineTextBox::offsetForPosition): Ditto.
        (WebCore::InlineTextBox::positionForOffset): Ditto.
        * rendering/RenderContainer.cpp:
        (WebCore::RenderContainer::addChild): Ditto.
        * rendering/RenderCounter.cpp:
        (WebCore::RenderCounter::originalText): Ditto.
        (WebCore::RenderCounter::calcMinMaxWidth): Ditto.
        * rendering/RenderCounter.h: Ditto.
        * rendering/RenderTextFragment.cpp:
        (WebCore::RenderTextFragment::originalText): Ditto.
        * rendering/RenderTextFragment.h: Ditto.
        * rendering/SVGInlineFlowBox.cpp:
        (WebCore::placePositionedBoxesHorizontally): Ditto.
        (WebCore::placeBoxesVerticallyWithAbsBaseline): Ditto.
        * rendering/bidi.cpp:
        (WebCore::BidiIterator::increment): Ditto.
        (WebCore::BidiIterator::current): Ditto.
        (WebCore::BidiIterator::direction): Ditto.
        (WebCore::addRun): Ditto.
        (WebCore::checkMidpoints): Ditto.
        (WebCore::RenderBlock::computeHorizontalPositionsForLine): Ditto.
        (WebCore::RenderBlock::skipWhitespace): Ditto.
        (WebCore::RenderBlock::findNextLineBreak): Ditto.

        * rendering/RenderBR.h: Updated signature of width function which now takes a
        Font& instead of a Font*.

        * rendering/RenderBlock.cpp: (WebCore::stripTrailingSpace): Updated to no longer
        use the RenderObject::font() function, and added a comment about first-line, which
        is not handled properly here.

        * rendering/RenderMenuList.cpp: (WebCore::RenderMenuList::text):
        * rendering/RenderTreeAsText.cpp: (WebCore::writeTextRun):
        Eliminated use of RenderText::data().

        * rendering/RenderObject.h: Removed RenderObject::font(). This had the bad effect of
        having everyone pass in a boolean rather than using the cleaner style() and
        firstLineStyle() functions in cases where there's no a firstLineStyle boolean.
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::getVerticalPosition): Replaced use of RenderObject::font()
        with direct use of the style instead, which is arguably easier to understand anyway.
        (WebCore::RenderObject::baselinePosition): Ditto.

2007-01-22  Sam Weinig  <sam@webkit.org>

        Reviewed by The Mitz.

        Move JSHTMLSelectElementCustom.cpp from bindings to bindings/js
        where it belongs.

        * WebCore.pro:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/JSHTMLSelectElementCustom.cpp: Removed.
        * bindings/js/JSHTMLSelectElementCustom.cpp: Added.

2007-01-22  Zack Rusin  <zack@kde.org>

        Fix the Qt build.

        * WebCore.pro: adjust after last changes

2007-01-21  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Darin.

        http://bugs.webkit.org/show_bug.cgi?id=10934
        REGRESSION: prototype.js logs error (HTMLFormElement) on webkit builds

        Added constructors for most HTML elements; started auto-generating HTMLSelectElement JS binding.

        Test: fast/dom/Window/element-constructors-on-window.html

        * DerivedSources.make: Generate JSHTMLSelectElement.
        * WebCore.xcodeproj/project.pbxproj: Added JSHTMLSelectElement{Custom}.
        * bindings/js/JSHTMLElementWrapperFactory.cpp: Create a proper binding for SELECT.

        * bindings/js/kjs_html.cpp:
        (KJS::):
        (KJS::JSHTMLElement::classInfo):
        (KJS::JSHTMLElement::accessors):
        (KJS::JSHTMLElement::getOwnPropertySlot):
        (KJS::HTMLElementFunction::callAsFunction):
        (KJS::JSHTMLElement::put):
        * bindings/js/kjs_html.h:
        (KJS::JSHTMLElement::):
        Removed everything related to SELECT. Renamed getHTMLOptionsCollection to toJS for autogenerated code 
        to be happy, and rewrote it using cacheDOMObject.

        * bindings/scripts/CodeGeneratorJS.pm: Added HTMLElement to the list of types that cannot fail conversion.

        * html/HTMLAnchorElement.idl:
        * html/HTMLAppletElement.idl:
        * html/HTMLAreaElement.idl:
        * html/HTMLBRElement.idl:
        * html/HTMLBaseElement.idl:
        * html/HTMLBaseFontElement.idl:
        * html/HTMLBodyElement.idl:
        * html/HTMLButtonElement.idl:
        * html/HTMLCanvasElement.idl:
        * html/HTMLDListElement.idl:
        * html/HTMLDirectoryElement.idl:
        * html/HTMLDivElement.idl:
        * html/HTMLFieldSetElement.idl:
        * html/HTMLFontElement.idl:
        * html/HTMLFormElement.idl:
        * html/HTMLHRElement.idl:
        * html/HTMLHeadElement.idl:
        * html/HTMLHeadingElement.idl:
        * html/HTMLHtmlElement.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/HTMLMenuElement.idl:
        * html/HTMLMetaElement.idl:
        * html/HTMLModElement.idl:
        * html/HTMLOListElement.idl:
        * html/HTMLOptGroupElement.idl:
        * html/HTMLParagraphElement.idl:
        * html/HTMLParamElement.idl:
        * html/HTMLPreElement.idl:
        * html/HTMLQuoteElement.idl:
        * html/HTMLScriptElement.idl:
        * html/HTMLStyleElement.idl:
        * html/HTMLTextAreaElement.idl:
        * html/HTMLTitleElement.idl:
        * html/HTMLUListElement.idl:
        Generate constructors.

        * html/HTMLSelectElement.cpp:
        (WebCore::HTMLSelectElement::length):
        * html/HTMLSelectElement.h:
        Make length() return unsigned for auto-generated code to be happy.

        * html/HTMLSelectElement.idl: Adjusted to be usable for JS.

        * bindings/JSHTMLSelectElementCustom.cpp: Added. Implements remove().

        * page/DOMWindow.idl:
        Added properties for most elements' constructors.

2007-01-21  Mark Rowe  <mrowe@apple.com>

        Reviewed by Maciej.

        http://bugs.webkit.org/show_bug.cgi?id=12357
        Bug 12357: Reproducible crash in WebCore::Settings::isJavaScriptEnabled in svg/custom/js-update-bounce.svg under guard-malloc

        * page/Frame.cpp:
        (WebCore::Frame::~Frame): Access the global object directly rather than via Window::retrieveWindow to prevent our reference to
        a deleted settings object being used.

2007-01-21  Darin Adler  <darin@apple.com>

        Reviewed by Maciej.

        - fix <rdar://problem/4930503> REGRESSION: Page changes title when
          command-clicking on named anchor link (12299)

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::continueFragmentScrollAfterNavigationPolicy):
        Return if shouldContinue is false. This matches the other similar
        functions and prevents us from doing extra work in the "ignore" case.

2007-01-21  Mark Rowe  <mrowe@apple.com>

        Reviewed by Darin.

        http://bugs.webkit.org/show_bug.cgi?id=12355
        Bug 12355: Reproducible crash in WebCore::parseNumber in svg/custom/js-update-bounce.svg under guard-malloc

        * ksvg2/svg/SVGParserUtilities.cpp:
        (WebCore::parseNumber): Parenthesize to prevent reading past end of buffer.

2007-01-21  Mitz Pettel  <mitz@webkit.org>

        Reviewed by Darin.

        - fix http://bugs.webkit.org/show_bug.cgi?id=12345
          REGRESSION: Disabled pop-up text is not grayed out

        Test: fast/forms/select-disabled-appearance.html

        * rendering/RenderThemeMac.mm:
        (WebCore::RenderThemeMac::adjustMenuListStyle):

2007-01-21  Darin Adler  <darin@apple.com>

        - fix non-Mac builds

        * CMakeLists.txt: Added JSDocumentCustom.cpp.
        * WebCore.pro: Ditto.
        * WebCoreSources.bkl: Ditto.

2007-01-21  Mitz Pettel  <mitz@webkit.org>

        Reviewed by Darin.

        - fix http://bugs.webkit.org/show_bug.cgi?id=12353 <rdar://problem/4944599>
          REGRESSION: Crash on load (mutation event dispatch under the image element constructor deletes the element)
    
        Test: fast/dom/HTMLImageElement/constructor-mutation-event-dispatch.html

        * bindings/js/kjs_html.cpp:
        (KJS::ImageConstructorImp::construct): Protect the image element before setting
        its attributes.

2007-01-21  Sam Weinig  <sam@webkit.org>

        Rolling out patch for http://bugs.webkit.org/show_bug.cgi?id=8360.

        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::RenderLayer):
        (WebCore::RenderLayer::scrollToOffset):
        (WebCore::RenderLayer::scrollRectToVisible):
        (WebCore::RenderLayer::updateScrollInfoAfterLayout):
        (WebCore::Marquee::start):
        * rendering/RenderLayer.h:

2007-01-21  David Kilzer  <ddkilzer@webkit.org>

        Reviewed by Darin.

        - fix http://bugs.webkit.org/show_bug.cgi?id=12280
          select element not available by name through document.all
          (dropdown list not available on smarthome.com checkout)

        Test: fast/dom/document-all-select.html

        * html/HTMLCollection.cpp:
        (WebCore::HTMLCollection::checkForNameMatch):
        (WebCore::HTMLCollection::updateNameCache):

2007-01-21  Mitz Pettel  <mitz@webkit.org>

        Reviewed by Darin.

        - http://bugs.webkit.org/show_bug.cgi?id=10805
          REGRESSION (r15720): manual-tests/onblur-remove.html failing

        * manual-tests/onblur-remove.html: Changed the test to not require pressing
        Enter, since the correct behavior for Enter is to send a blur event.

2007-01-21  Sanjay Madhav  <sanjay12@gmail.com>

        Reviewed by Darin.

        Fix for: <rdar://problem/4928583> Memory usage grows when reloading google.com/ig

        JSDocuments are now responsible for marking the DOM wrappers associated with them, when they get marked.
        This fixes a JS object leak when a DOM wrapper has a reference to a JSDocument that is otherwise not reachable.

        Test: fast/dom/gc-10.html

        * WebCore.vcproj/WebCore/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSDocumentCustom.cpp: Added.
        (WebCore::JSDocument::mark):
        * bindings/js/kjs_binding.cpp:
        (KJS::ScriptInterpreter::markDOMNodesForDocument):
        (KJS::ScriptInterpreter::mark):
        * bindings/js/kjs_binding.h:
        * dom/Document.idl:

2007-01-21  Mitz Pettel  <mitz@webkit.org>

        Reviewed by Darin.

        - fix http://bugs.webkit.org/show_bug.cgi?id=10692
          REGRESSION (r14847): Unnecessary scrollbars with position:relative; and overflow:auto;

        Test: fast/overflow/position-relative.html

        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::lowestPosition): Add the relative position offset only
        if 'includeSelf' is true.
        (WebCore::RenderBox::rightmostPosition): Ditto.
        (WebCore::RenderBox::leftmostPosition): Ditto.
        * rendering/RenderFlow.cpp:
        (WebCore::RenderFlow::lowestPosition): Ditto.
        (WebCore::RenderFlow::rightmostPosition): Ditto.
        (WebCore::RenderFlow::leftmostPosition): Ditto.

2007-01-21  Mitz Pettel  <mitz@webkit.org>

        Reviewed by Darin.

        - fix http://bugs.webkit.org/show_bug.cgi?id=10472
          REGRESSION: "add" method of <select> object does not put the <option> object in the correct position

        Test: fast/dom/HTMLSelectElement/options-collection-detached.html

        * html/HTMLSelectElement.cpp:
        (WebCore::HTMLSelectElement::setRecalcListItems): Reset the options collection
        info if the <select> is not in the document. For in-document <select>s this
        happens anyway as a result of the DOM tree version increasing.

2007-01-21  Mitz Pettel  <mitz@webkit.org>

        Reviewed by Darin.

        - fix http://bugs.webkit.org/show_bug.cgi?id=12349
          NativeFileUpload: Button text is not grayed out when the control is disabled

        Covered by fast/forms/file-input-disabled.html 

        * css/html4.css: Changed selectors that had pseudo-classes after the -webkit-file-upload-button
        pseudo-element to have the pseudo-element at the end. Pseudo-elements must be at the end.
        * rendering/RenderFileUploadControl.cpp:
        (WebCore::RenderFileUploadControl::createButtonStyle): Changed to not overwrite the button's
        style with its parent's style. getPseudoStyle() handles inheritance properly.

2007-01-21  Mitz Pettel  <mitz@webkit.org>

        Reviewed by Darin.

        - fix http://bugs.webkit.org/show_bug.cgi?id=12343
          crash in css2.1/t1202-counter-09-b.html

        * platform/Font.cpp:
        (WebCore::Font::glyphDataForCharacter):

2007-01-21  Darin Adler  <darin@apple.com>

        Reviewed by Adam and Mitz.

        - fix http://bugs.webkit.org/show_bug.cgi?id=12347
          REGRESSION: list box scrolling broken (fast/forms/listbox-selection.html)

        Covered by existing test: fast/forms/listbox-selection.html

        * rendering/RenderListBox.h: Added override of layout(), made selectionChanged()
        no longer an inline. Added private scrollToRevealSelection(),
        m_scrollToRevealSelectionAfterLayout, and m_inAutoscroll.
        * rendering/RenderListBox.cpp:
        (WebCore::RenderListBox::RenderListBox): Initialize new data members.
        (WebCore::RenderListBox::updateFromElement): Remove scrolling code.
        (WebCore::RenderListBox::selectionChanged): Moved from header. Calls repaint
        and then scrollToRevealSelection, but if we need layout, instead schedules
        scrollToRevealSelection to be done after layout.
        (WebCore::RenderListBox::layout): Added. After calling base class, calls
        scrollToRevealSelection if the m_scrollToRevealSelectionAfterLayout is set.
        (WebCore::RenderListBox::scrollToRevealSelection): Added. Code was originally
        in updateFromElement.
        (WebCore::RenderListBox::autoscroll): Set m_inAutoscroll so that the
        selectionChanged function knows not to scroll. Also removed the repaint()
        here because updateListBoxSelection() takes care of repainting by calling
        selectionChanged().

2007-01-21  David Kilzer  <ddkilzer@webkit.org>

        * page/EventHandler.cpp:
        (WebCore::EventHandler::handleMouseMoveEvent): Changed #if SVG_SUPPORT to #ifdef SVG_SUPPORT.

2007-01-20  Mitz Pettel  <mitz@webkit.org>

        Reviewed by Maciej.

        - fix http://bugs.webkit.org/show_bug.cgi?id=11115
          REGRESSION: Crash on Flickr after hitting cancel from adding a note

        Test: fast/forms/text-set-value-crash.html

        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::setValue): Added a call to Document::updateRendering().
        * html/HTMLTextAreaElement.cpp:
        (WebCore::HTMLTextAreaElement::setValue): Ditto.

2007-01-20  Mitz Pettel  <mitz@webkit.org>

        Reviewed by Darin.

        - fix http://bugs.webkit.org/show_bug.cgi?id=8360
          Repro crash when onscroll handler deletes the scrolled object

        Test: fast/layers/removed-by-scroll-handler.html

        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::RenderLayer):
        (WebCore::RenderLayer::dispatchScrollEvent): Added. Called when the timer
        fires and dispatches the scroll event to the layer's element.
        (WebCore::RenderLayer::scrollToOffset): Instead of dispatching the scroll
        event from this function, which is called during layout, schedule a 0-duration
        timer to dispatch the event after layout.
        (WebCore::RenderLayer::scrollRectToVisible):
        (WebCore::RenderLayer::updateScrollInfoAfterLayout):
        (WebCore::Marquee::start):
        * rendering/RenderLayer.h:

2007-01-20  Nikolas Zimmermann  <zimmermann@kde.org>

        Reviewed by Sam.

        Fix JS bindings for SVGAnimated{Boolean, Enumeration, Integer, Number, String}.

        Dynamic SVG DOM updates (ie. "someUse.href.baseVal = '#rect'") with these types
        didn't work. Existing gradient updating examples relied on calling setAttribute
        after a SVG DOM update - that was the only reason it worked, added a new test
        only using SVG DOM updates (js-update-stop.svg).

        Added test: js-update-stop.svg
        Added test: use-property-changes-through-dom.svg (change xlink:href, x/y attributes using setAttribute)
        Added test: use-property-changes-through-svg-dom.svg (change xlink:href, x/y attributes using SVG DOM)

        * bindings/js/JSSVGPODTypeWrapper.h:
        (WebCore::JSSVGPODTypeWrapper::commitChange):
        (WebCore::JSSVGPODTypeWrapperCreator::commitChange):
        (WebCore::JSSVGPODTypeWrapperCreatorForList::commitChange):
        * bindings/js/JSSVGPathSegListCustom.cpp:
        (WebCore::updatePathSegContextMap):
        (WebCore::removeFromPathSegContextMap):
        * bindings/scripts/CodeGeneratorJS.pm:
        * ksvg2/misc/SVGDocumentExtensions.h:
        (WebCore::SVGDocumentExtensions::baseValueMap):
        (WebCore::SVGDocumentExtensions::genericContextMap):
        (WebCore::SVGDocumentExtensions::baseValue):
        (WebCore::SVGDocumentExtensions::setBaseValue):
        (WebCore::SVGDocumentExtensions::removeBaseValue):
        (WebCore::SVGDocumentExtensions::hasBaseValue):
        (WebCore::SVGDocumentExtensions::genericContext):
        (WebCore::SVGDocumentExtensions::setGenericContext):
        (WebCore::SVGDocumentExtensions::removeGenericContext):
        (WebCore::SVGDocumentExtensions::hasGenericContext):
        (WebCore::String):
        (WebCore::FloatRect):
        (WebCore::bool):
        (WebCore::double):
        * ksvg2/svg/SVGClipPathElement.h:
        * ksvg2/svg/SVGElement.h:
        (WebCore::SVGElement::notifyAttributeChange):
        * ksvg2/svg/SVGPathSegList.cpp:
        (WebCore::SVGPathSegList::SVGPathSegList):
        (WebCore::SVGPathSegList::context):
        * ksvg2/svg/SVGPathSegList.h:
        * ksvg2/svg/SVGPatternElement.h:
        * ksvg2/svg/SVGPointList.cpp:
        (SVGPointList::SVGPointList):
        (SVGPointList::context):
        * ksvg2/svg/SVGPointList.h:
        * ksvg2/svg/SVGStopElement.cpp:
        (WebCore::SVGStopElement::parseMappedAttribute):
        (WebCore::SVGStopElement::notifyAttributeChange):
        * ksvg2/svg/SVGStopElement.h:
        * ksvg2/svg/SVGUseElement.cpp:
        (WebCore::SVGUseElement::notifyAttributeChange):

2007-01-20  Rob Buis  <buis@kde.org>

        Reviewed by Sam.

        http://bugs.webkit.org/show_bug.cgi?id=12334
        Respect <text> boundaries for svg text selecting

        Make sure the text selection for svg stays inside
        containing blocks.
        Added one manual test since html selection does not
        seem to work for SVG and selectSubString for SVG
        is not implemented yet.

        * manual-tests/svg-text-selection.svg: Added.
        * page/EventHandler.cpp:
        (WebCore::EventHandler::handleMouseMoveEvent):
        * rendering/RenderObject.h:
        (WebCore::RenderObject::isSVGText):
        * rendering/RenderSVGInlineText.h:
        (WebCore::RenderSVGInlineText::isSVGText):
        * rendering/RenderSVGText.h:
        (WebCore::RenderSVGText::isSVGText):

2007-01-19  Adele Peterson  <adele@apple.com>

        Reviewed by Hyatt.

        Fix for: <rdar://problem/4697438> REGRESSION: select menu lists match the wrong css rule on www.chainreaction.com

        Update the size attribute value for select elements to match the numeric value.  This is a special case since this
        attribute is used to determine which control to use.  We want to make sure that the size attribute is valid when we match
        CSS rules.

        Test: fast/forms/select-size.html

        * html/HTMLSelectElement.cpp: (WebCore::HTMLSelectElement::parseMappedAttribute): If the attribute string value is not the
          same as its integer value, then update the attribute value to match the integer.
        * dom/Attribute.h: Made setValue and setPrefix public.

2007-01-19  John Sullivan  <sullivan@apple.com>

        Reviewed by Darin

        - WebCore part of fix for: <rdar://problem/4451715> REGRESSION: On some sites, have to 
          type a character before username/password autofill kicks in

        * loader/FrameLoaderClient.h:
        new dispatchDidFinishDocumentLoad call

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::finishedParsing):
        call dispatchDidFinishDocumentLoad
        
        * platform/graphics/svg/SVGImageEmptyClients.h:
        (WebCore::SVGEmptyFrameLoaderClient::dispatchDidFinishDocumentLoad):
        empty implementation for dispatchDidFinishDocumentLoad

2007-01-19  Adele Peterson  <adele@apple.com>

        Reviewed by Hyatt.

        Fix for <rdar://problem/4760280> REGRESSION: Bottom portion of text hangs off edge of SELECT element at http://macreviewzone.com/index.php
        
        Test: fast/forms/control-restrict-line-height.html

        * rendering/RenderThemeMac.mm: (WebCore::RenderThemeMac::setFontFromControlSize): Don't honor line-height for controls that
          have restricted font size.

2007-01-19  Darin Adler  <darin@apple.com>

        Reviewed by Adele.

        - fix http://bugs.webkit.org/show_bug.cgi?id=11999
          <rdar://problem/4940442> REGRESSION: Incomplete listing in TVListings window (11999)
          Fix was to use the actual size of the renderer in the RenderListBox
          case, instead of always using the size specified by the select element.

        Test: fast/forms/select-list-box-with-height.html

        - fix http://bugs.webkit.org/show_bug.cgi?id=11995
          <rdar://problem/4901834> REGRESSION(NativeListBox): Focus is not placed on
          SELECT after mousing down on OPTION

        Test: fast/forms/select-list-box-mouse-focus.html

        - fix bug where auto-scrolling was not working in list box select elements

        No test yet.

        - fix a missing semicolon in the radio/checkbox section of html4.css

        Test: fast/forms/radio-no-theme-padding.html

        - fix bug where the scroll bars for select elements were pixel-type scroll
          bars even though the scrolling is line at a time scrolling

        No test.

        * html/HTMLSelectElement.cpp:
        (WebCore::HTMLSelectElement::selectAll): Removed an explicit call
        to repaint, since the RenderListBox now does that in selectionChanged.
        (WebCore::HTMLSelectElement::notifyOptionSelected): Call the new
        selectionChanged instead of the old setSelectionChanged.
        (WebCore::HTMLSelectElement::listBoxDefaultEventHandler): Added a call
        to focus. Removed an explicit call to repaint and added a call to the
        new setMouseDownMayStartAutoscroll function in EventHandler. Removed an
        explicit call to repaint as above.
        (WebCore::HTMLSelectElement::updateListBoxSelection): Call the new
        selectionChanged instead of the old setSelectionChanged.

        * page/EventHandler.h: Added setMouseDownMayStartAutoscroll, needed
        because the existing code to set that flag won't get triggered when
        the select element's default event handler handles the event.

        * rendering/RenderListBox.h: Made ScrollbarClient a private base class.
        Removed setSelectionChanged and m_selectionChanged. Added selectionChanged,
        which is really just a synonym for repaint for now. Moved valueChanged,
        the ScrollbarClient function implementations, and itemHeight into the
        private part of the class. Added numVisibleItems() and listHeight() to
        the private section. Changed m_vBar to be a RefPtr.

        * rendering/RenderListBox.cpp: Removed unneeded includes. Moved all
        the constants to the top of the file.
        (WebCore::RenderListBox::RenderListBox): Removed initialization of
        m_selectionChanged because it was removed and of m_vBar because it's
        now a RefPtr which is automaticall initialized.
        (WebCore::RenderListBox::~RenderListBox): Removed the explicit deref of
        m_vBar because it's a RefPtr. Added null checking for FrameView.
        (WebCore::RenderListBox::updateFromElement): Use numItems().
        (WebCore::RenderListBox::calcMinMaxWidth): Added null checking for
        FrameView and used RefPtr for the newly-created scroll bar.
        (WebCore::RenderListBox::size): Tweaked formatting. Also renamed the
        misleading minDefaultSize to maxDefaultSize, since it's a maximum.
        (WebCore::RenderListBox::numVisibleItems): Added. Used in many places
        where size() was used before. This computes the number of rows we have
        room for. We don't need a row space after the last row, and this takes
        that into account.
        (WebCore::RenderListBox::numItems): Tweaked to remove the local variable.
        (WebCore::RenderListBox::listHeight): Added. Total height of all the rows
        and spaces between them.
        (WebCore::RenderListBox::calcHeight): Changed to call itemHeight for the
        row height, and to subtract the last row spacing off since we don't need
        a space after the last row. Changed the scroll bar setup to make it
        correspond to row numbers, not pixel numbers.
        (WebCore::RenderListBox::baselinePosition): Moved the comment to the
        constant declaration at the top of the file.
        (WebCore::RenderListBox::itemBoundingBoxRect): Simplified by using
        the itemHeight() function.
        (WebCore::RenderListBox::paintObject): Changed to use numItems and
        to use numVisibleItems instead of size.
        (WebCore::RenderListBox::isPointInScrollbar): Added get() call since
        m_vBar is now a RefPtr.
        (WebCore::RenderListBox::listIndexAtOffset): Changed to use numItems(),
        itemHeight(), and rearranged a min/max combo so it starts with the low,
        then the value, then the high value for pinning.
        (WebCore::RenderListBox::autoscroll): Use numVisibleItems() instead of
        size().
        (WebCore::RenderListBox::stopAutoscroll): Removed an unneeded nil check
        of the element.
        (WebCore::RenderListBox::scrollToRevealElementAtListIndex): Changed
        to use numItems() and to use numVisibleItems() instead of size().
        Also changed scroll bar code to work more simply now that the scroll
        bar is row-based.
        (WebCore::RenderListBox::listIndexIsVisible): Changed to use
        numVisibleItems() instead of size().
        (WebCore::RenderListBox::valueChanged): Simplified since the scrollbar
        is now row-based. Also removed an unnecessary null check.
        (WebCore::RenderListBox::itemHeight): Updated for name change from
        optionsSpacingMiddle to rowSpacing.
        (WebCore::RenderListBox::scrollHeight): Changed to use listHeight().
        (WebCore::RenderListBox::setScrollTop): Simplified, and removed the code
        that does nothing if the computed list index is visible (which did not
        make sense for this function and seemed a cut and paste error from the
        scrollToReveal function). The scrollbar part is simpler now that it's
        row-based.
        (WebCore::RenderListBox::windowClipRect): Changed to use document()->view()
        so we don't have to include RenderView.h.

        * css/html4.css: Added a semicolon I noticed was missing.

2007-01-19  Beth Dakin  <bdakin@apple.com>

        Reviewed by Maciej and Darin.

        Fix for <rdar://problem/4702420> REGRESSION: Null characters need 
        to be stripped from text nodes (townhall.com)

        This was a regression from the fix for <rdar://problem/3727939>
        Safari strips \0 characters from HTML tags making them valid, which
        was fixed with r12652. We still need to strip null characters in
        text nodes.

        * html/HTMLTokenizer.cpp:
        (WebCore::HTMLTokenizer::write): No behavior change here, this is
        just to make Darin happy.
        (WebCore::HTMLTokenizer::processToken): Call into StringImpl's new 
        createStrippingNull function instead of the normal StringImpl 
        constructor.
        * platform/StringImpl.cpp:
        (WebCore::StringImpl::createStrippingNull): Strip null.
        * platform/StringImpl.h:

2007-01-19  David Kilzer  <ddkilzer@webkit.org>

        Reviewed by NOBODY (no-svg build fix).

        * ksvg2/svg/SVGMPathElement.cpp: Added #ifdef SVG_SUPPORT/#endif guards.

2007-01-19  Anders Carlsson  <acarlsson@apple.com>
        
        Build fix.
        
        * platform/graphics/svg/SVGImageEmptyClients.h:
        (WebCore::SVGEmptyChromeClient::setStatusbarText):

2007-01-18  Anders Carlsson  <acarlsson@apple.com>

        Reviewed by Adam.

        Move JavaScript alert and status bar functions to the chrome.
        
        * bindings/js/kjs_window.cpp:
        (KJS::WindowFunc::callAsFunction):
        * page/Chrome.cpp:
        (WebCore::Chrome::runJavaScriptAlert):
        (WebCore::Chrome::runJavaScriptConfirm):
        (WebCore::Chrome::runJavaScriptPrompt):
        (WebCore::Chrome::setStatusBarText):
        * page/Chrome.h:
        * page/ChromeClient.h:
        * page/Frame.cpp:
        (WebCore::Frame::setJSStatusBarText):
        (WebCore::Frame::setJSDefaultStatusBarText):
        * page/Frame.h:
        * page/mac/FrameMac.h:
        * page/mac/FrameMac.mm:
        * page/mac/WebCoreFrameBridge.h:
        * platform/graphics/svg/SVGImageEmptyClients.h:
        (WebCore::SVGEmptyChromeClient::runJavaScriptAlert):
        (WebCore::SVGEmptyChromeClient::runJavaScriptConfirm):
        (WebCore::SVGEmptyChromeClient::runJavaScriptPrompt):
        (WebCore::SVGEmptyChromeClient::setStatusBarText):

2007-01-19  Zack Rusin  <zack@kde.org>

        Fix the build.

        * WebCore.pro: Add missing files

2007-01-19  Eric Seidel  <eric@webkit.org>

        Reviewed by rwlbuis.

        More cleanup to SVGAnimated* classes.

        No tests possible (only code cleanup)

        * ksvg2/svg/SVGAnimateMotionElement.cpp:
        (WebCore::SVGAnimateMotionElement::applyAnimationToValue):
        * ksvg2/svg/SVGAnimateMotionElement.h:
        * ksvg2/svg/SVGAnimationElement.cpp:
        (WebCore::SVGAnimationElement::parseBeginOrEndValue):
        (WebCore::SVGAnimationElement::parseMappedAttribute):
        (WebCore::SVGAnimationElement::parseClockValue):
        (WebCore::SVGAnimationElement::isIndefinite):
        * ksvg2/svg/SVGAnimationElement.h:

2007-01-19  Nikolas Zimmermann  <zimmermann@kde.org>

        Not reviewed.

        Remove accidently commited debug output. Shame on me :-)

        * ksvg2/svg/SVGUseElement.cpp:
        (WebCore::SVGUseElement::notifyAttributeChange):

2007-01-19  Nikolas Zimmermann  <zimmermann@kde.org>

        Reviewed by Eric.

        Fixes: http://bugs.webkit.org/show_bug.cgi?id=10410 (SVG Slider example renders completely wrong (inserting <use> dynamically doesn't work))
        Fixes: http://bugs.webkit.org/show_bug.cgi?id=11660 (SVG: creation of <use/> elements through scripting/DOM doesn't work)

        Added test: svg/custom/use-instanceRoot-modifications.svg
        Added test: svg/custom/use-on-g.svg
        Added test: svg/custom/use-on-rect.svg
        Added test: svg/custom/use-on-symbol-inside-pattern.svg
        Added test: svg/custom/use-on-symbol.svg
        Added test: svg/custom/use-on-text.svg
        Added test: svg/custom/use-transform.svg

        Fixes: svg/W3C-SVG-1.1/text-text-04-t.svg (missing use elements)
        Fixes: svg/carto.net/button.svg (image buttons didn't appear)
        Fixes: svg/carto.net/colourpicker.svg (slider handles finally show up)
        Fixes: svg/carto.net/slider.svg (slider handles finally show up)
        Fixes: svg/carto.net/window.svg (window decorations show up) 
        Fixes: svg/custom/use-forward-refs.svg (missing use elements)

        Rewrite <use> support with a real-shadow tree (as the spec demands), and implement SVGElementInstance.
        AFAIK we're the first implementing this SVG feature - after ASV3 (!).

        * DerivedSources.make:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/objc/DOMInternal.h:
        * bindings/objc/DOMSVG.h:
        * ksvg2/misc/SVGDocumentExtensions.cpp:
        (WebCore::SVGDocumentExtensions::reportWarning):
        (WebCore::SVGDocumentExtensions::reportError):
        (WebCore::SVGDocumentExtensions::addPendingResource):
        (WebCore::SVGDocumentExtensions::isPendingResource):
        (WebCore::SVGDocumentExtensions::removePendingResource):
        (WebCore::SVGDocumentExtensions::mapInstanceToElement):
        (WebCore::SVGDocumentExtensions::removeInstanceMapping):
        (WebCore::SVGDocumentExtensions::instancesForElement):
        * ksvg2/misc/SVGDocumentExtensions.h:
        * ksvg2/svg/SVGCircleElement.cpp:
        (WebCore::SVGCircleElement::notifyAttributeChange):
        * ksvg2/svg/SVGElement.cpp:
        (WebCore::SVGElement::insertedIntoDocument):
        * ksvg2/svg/SVGElement.h:
        (WebCore::SVGElement::buildPendingResource):
        * ksvg2/svg/SVGElementInstance.cpp:
        (WebCore::SVGElementInstance::SVGElementInstance):
        (WebCore::SVGElementInstance::~SVGElementInstance):
        (WebCore::SVGElementInstance::clonedElement):
        (WebCore::SVGElementInstance::correspondingElement):
        (WebCore::SVGElementInstance::correspondingUseElement):
        (WebCore::SVGElementInstance::parentNode):
        (WebCore::SVGElementInstance::childNodes):
        (WebCore::SVGElementInstance::previousSibling):
        (WebCore::SVGElementInstance::nextSibling):
        (WebCore::SVGElementInstance::firstChild):
        (WebCore::SVGElementInstance::lastChild):
        (WebCore::SVGElementInstance::appendChild):
        (WebCore::SVGElementInstance::updateInstance):
        * ksvg2/svg/SVGElementInstance.h:
        * ksvg2/svg/SVGElementInstance.idl: Added.
        * ksvg2/svg/SVGElementInstanceList.cpp:
        (WebCore::SVGElementInstanceList::SVGElementInstanceList):
        (WebCore::SVGElementInstanceList::length):
        (WebCore::SVGElementInstanceList::item):
        * ksvg2/svg/SVGElementInstanceList.h:
        * ksvg2/svg/SVGElementInstanceList.idl: Added.
        * ksvg2/svg/SVGEllipseElement.cpp:
        (WebCore::SVGEllipseElement::notifyAttributeChange):
        * ksvg2/svg/SVGGElement.cpp:
        * ksvg2/svg/SVGGElement.h:
        (WebCore::SVGGElement::contextElement):
        * ksvg2/svg/SVGGradientElement.cpp:
        * ksvg2/svg/SVGGradientElement.h:
        * ksvg2/svg/SVGHiddenElement.h: Added.
        (WebCore::SVGHiddenElement::Type):
        (WebCore::SVGHiddenElement::~SVGHiddenElement):
        (WebCore::SVGHiddenElement::localName):
        * ksvg2/svg/SVGImageElement.cpp:
        (WebCore::SVGImageElement::notifyAttributeChange):
        * ksvg2/svg/SVGLineElement.cpp:
        (WebCore::SVGLineElement::notifyAttributeChange):
        * ksvg2/svg/SVGPathElement.cpp:
        (WebCore::SVGPathElement::notifyAttributeChange):
        * ksvg2/svg/SVGPatternElement.cpp:
        * ksvg2/svg/SVGPatternElement.h:
        * ksvg2/svg/SVGPolyElement.cpp:
        (WebCore::SVGPolyElement::notifyAttributeChange):
        * ksvg2/svg/SVGRectElement.cpp:
        (WebCore::SVGRectElement::notifyAttributeChange):
        * ksvg2/svg/SVGStyledElement.cpp:
        (WebCore::SVGStyledElement::notifyAttributeChange):
        (WebCore::SVGStyledElement::updateElementInstance):
        * ksvg2/svg/SVGStyledElement.h:
        * ksvg2/svg/SVGUseElement.cpp:
        (WebCore::SVGUseElement::instanceRoot):
        (WebCore::SVGUseElement::animatedInstanceRoot):
        (WebCore::SVGUseElement::hasChildNodes):
        (WebCore::SVGUseElement::insertedIntoDocument):
        (WebCore::SVGUseElement::buildPendingResource):
        (WebCore::SVGUseElement::createRenderer):
        (WebCore::SVGUseElement::buildShadowTree):
        (WebCore::SVGUseElement::recursiveShadowTreeBuilder):
        (WebCore::dumpShadowTree):
        (WebCore::SVGUseElement::addShadowTree):
        * ksvg2/svg/SVGUseElement.h:
        * ksvg2/svg/SVGUseElement.idl:

2007-01-19  Eric Seidel  <eric@webkit.org>

        Reviewed by rwlbuis.

        Add support for SVGMPathElement parsing.

        No test cases possible (SVGAnimateMotion doesn't work yet)

        * WebCore.xcodeproj/project.pbxproj:
        * ksvg2/svg/SVGAnimateMotionElement.cpp:
        (WebCore::SVGAnimateMotionElement::animationPath):
        * ksvg2/svg/SVGMPathElement.cpp: Added.
        (WebCore::SVGMPathElement::SVGMPathElement):
        (WebCore::SVGMPathElement::~SVGMPathElement):
        (WebCore::SVGMPathElement::parseMappedAttribute):
        (WebCore::SVGMPathElement::pathElement):
        * ksvg2/svg/SVGMPathElement.h: Added.
        * ksvg2/svg/SVGNumberList.cpp:
        (WebCore::SVGNumberList::parse): fix typo in comment
        * ksvg2/svg/svgtags.in: add back mpath

2007-01-19  Eric Seidel  <eric@webkit.org>

        Reviewed by rwlbuis.

        Implement better parsing for keyTimes, keySplines and keyPoints.

        Unfortunately none of this code is used much yet, thus isn't very testable.

        * ksvg2/svg/SVGAnimateMotionElement.cpp:
        (WebCore::SVGAnimateMotionElement::parseMappedAttribute):
        * ksvg2/svg/SVGAnimationElement.cpp:
        (WebCore::SVGAnimationElement::parseKeyNumbers):
        (WebCore::parseKeySplines):
        (WebCore::SVGAnimationElement::parseMappedAttribute):
        * ksvg2/svg/SVGAnimationElement.h:
        * ksvg2/svg/SVGNumberList.cpp:
        (WebCore::SVGNumberList::parse):

2007-01-18  Adam Roben  <aroben@apple.com>

        Reviewed by Beth.

        Fix: <rdar://problem/4939672> REGRESSION: With text selected that is
        not a link, the "Remove Link" contextual menu item remains active

        * platform/ContextMenuItem.h: Added enabled method.
        * platform/qt/ContextMenuItemQt.cpp:
        (WebCore::ContextMenuItem::enabled): Implemented.
        * platform/mac/ContextMenuItemMac.mm:
        (WebCore::ContextMenuItem::enabled): Ditto.
        * platform/mac/ContextMenuMac.mm:
        (-[WebCoreMenuTarget validateMenuItem:]): Implemented to fulfill the
        NSMenuValidation protocol.
        
2007-01-18  Beth Dakin  <bdakin@apple.com>

        Reviewed by Adele.

        Fix for <rdar://problem/4939558> REGRESSION: "Search in Google", 
        "Search in Spotlight" and "Look up in Dictionary" are missing 
        initially from the contextual menu

        The bug here is that we select the we were selecting the word after 
        the context menu event was dispatched and after the context menu 
        was built up.

        * page/EventHandler.cpp:
        (WebCore::EventHandler::sendContextMenuEvent): Select the word 
        before dispatching the event. It is safe to remove the check for 
        swallowEvent since WebCore context menus ensure that we always 
        swallow the event anyway.

2007-01-18  Mark Rowe  <mrowe@apple.com>

        Reviewed by Tim H.

        Fix for http://bugs.webkit.org/show_bug.cgi?id=7926
        Bug 7926: Crash using -callWebScriptMethod to access offsetTop property

        * bindings/objc/WebScriptObject.mm:
        (-[WebScriptObject callWebScriptMethod:withArguments:]): Bail out early if function value is an immediate,
        or if the function object is not callable.

2007-01-18  Sam Weinig  <sam@webkit.org>

        Reviewed by Maciej.

        Patch for http://bugs.webkit.org/show_bug.cgi?id=11853
        REGRESSION (r17352): Whitespace in <title> is rendered

        * loader/DocumentLoader.cpp:
        (WebCore::canonicalizedTitle): Changed to also collapse internal
        whitespace.  This required removing an optimization that is no
        longer possible.
        * manual-tests/title-internal-whitespace.html: Added.

2007-01-18  Mitz Pettel  <mitz@webkit.org>

        Reviewed by Maciej.

        - fix http://bugs.webkit.org/show_bug.cgi?id=12039
          Assertion failure in WebCore::Font::primaryFont

        Test: fast/text/font-initial.html

        * css/cssstyleselector.cpp:
        (WebCore::CSSStyleSelector::applyProperty): Give 'font: initial' the
        Standard generic family. This makes the FontDescription different from
        that of the initial font of a GraphicsContext, ensuring that the latter
        will not be used.

2007-01-18  Mitz Pettel  <mitz@webkit.org>

        Reviewed by Darin.

        - fix http://bugs.webkit.org/show_bug.cgi?id=11451
          REGRESSION: Dell.com does not render correctly in ToT (stylesheet not loaded)

        Test: http/tests/misc/css-accept-any-type.html

        * loader/CachedCSSStyleSheet.cpp:
        (WebCore::CachedCSSStyleSheet::CachedCSSStyleSheet): Changed the accept header
        for stylesheets to "text/css,*/*;q=0.1" to match Firefox, accepting CSS served
        as any type.

2007-01-18  Mitz Pettel  <mitz@webkit.org>

        Reviewed by Darin.

        - fix http://bugs.webkit.org/show_bug.cgi?id=11271
        REGRESSION (r12358): Text in display: table unselectable

        Test: editing/selection/display-table-text.html

        * editing/htmlediting.cpp:
        (WebCore::isTableElement): Changed to return false for text nodes.

2007-01-18  Mitz Pettel  <mitz@webkit.org>

        Reviewed by Darin.

        - fix http://bugs.webkit.org/show_bug.cgi?id=6218
          CSS1: WebTextRenderer caches and re-uses fallback renderers that are based on family lists

        This patch takes character-to-glyph mapping out of FontData and instead makes
        each Font keep its own mapping, using a shared set of glyph page fallback trees.

        For each page number there is (at most) one tree. A path from the root to a
        node in the tree corresponds to a fallback list of FontDatas. The node points to
        a page (which may be shared with other nodes) that maps each character in its range
        to a glyph in the first FontData in the fallback list that has it, or to 0 if none of
        the FontDatas has a glyph for that character. A special kind of node, that can
        only occur as a leaf, corresponds to using system fallback fonts after the list
        has been exhausted. This prevents system fallback from polluting non-leaf
        nodes.

        Nodes and pages are initialized lazily and employ "copy on write".

        * CMakeLists.txt:
        * WebCore.pro:
        * WebCore.vcproj/WebCore/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * WebCoreSources.bkl:
        * platform/Font.cpp:
        (WebCore::WidthIterator::WidthIterator): Removed substituteFontData.
        (WebCore::WidthIterator::advance): Moved all character-to-glyph mapping logic out
        of here and replaced it with a call to Font::glyphDataForCharacter().
        (WebCore::Font::Font):
        (WebCore::Font::operator=):
        (WebCore::Font::glyphDataForCharacter): Added. This method performs the lookup in the
        page fallback trees, triggering lazy initialization as needed, and caching pointers to
        the retrieved page tree nodes in the font.
        (WebCore::Font::update):
        (WebCore::Font::drawSimpleText):
        (WebCore::Font::floatWidth):
        (WebCore::Font::floatWidthForSimpleText): Removed substituteFont argument.
        (WebCore::Font::offsetForPositionForSimpleText):
        * platform/Font.h:
        * platform/FontData.cpp:
        (WebCore::FontData::FontData):
        * platform/FontData.h:
        (WebCore::FontData::missingGlyphData): Added. Returns the "missing glyph" GlyphData for
        this FontData.
        * platform/GlyphMap.cpp: Removed.
        * platform/GlyphMap.h: Removed.
        * platform/GlyphPageTreeNode.cpp: Renamed GlyphMap.cpp to this.
        (WebCore::GlyphPageTreeNode::getRoot): Added. Returns the root of the page fallback tree for
        the given page number.
        (WebCore::GlyphPageTreeNode::initializePage): Added. Helper method that initializes the page
        pointer of a node, possibly to a pointer to another node's page or to 0.
        (WebCore::GlyphPageTreeNode::getChild): Added.
        * platform/GlyphPageTreeNode.h: Renamed GlyphMap.h to this.
        (WebCore::GlyphPage::glyphDataForCharacter):
        (WebCore::GlyphPage::setGlyphDataForCharacter):
        (WebCore::GlyphPage::setGlyphDataForIndex):
        (WebCore::GlyphPageTreeNode::GlyphPageTreeNode):
        (WebCore::GlyphPageTreeNode::getRootChild):
        (WebCore::GlyphPageTreeNode::parent):
        (WebCore::GlyphPageTreeNode::page):
        (WebCore::GlyphPageTreeNode::level):
        (WebCore::GlyphPageTreeNode::isSystemFallback): Added. Returns whether the node corresponds
        to the system providing fallback fonts, which is done on a character-by-character basis.
        * platform/gdk/GlyphMapGdk.cpp: Removed.
        * platform/gdk/GlyphPageTreeNodeGdk.cpp: Renamed GlyphMapGdk.cpp to this.
        (WebCore::GlyphPage::fill):
        * platform/mac/FontDataMac.mm:
        (WebCore::FontData::platformInit):
        * platform/mac/FontMac.mm:
        (WebCore::Font::Font):
        * platform/mac/GlyphMapMac.cpp: Removed.
        * platform/mac/GlyphPageTreeNodeMac.cpp: Renamed GlypMapMac.cpp to this.
        (WebCore::GlyphPage::fill): Changed to return false if the font has no glyphs in the page.
        * platform/qt/GlyphMapQt.cpp: Removed.
        * platform/qt/GlyphPageTreeNodeQt.cpp: Renamed GlyphMapQt.cpp to this.
        (WebCore::GlyphPage::fill):
        * platform/win/GlyphMapWin.cpp: Removed.
        * platform/win/GlyphPageTreeNodeWin.cpp: Renamed GlyphMapWin to this.
        (WebCore::GlyphPage::fill):

2007-01-18  Mitz Pettel  <mitz@webkit.org>

        Reviewed by Darin.

        - fix http://bugs.webkit.org/show_bug.cgi?id=9952
          REGRESSION: Repro crash when dragging an image from the window to the address bar

        * page/FrameView.cpp:
        (WebCore::FrameView::~FrameView): Removed the call to Document::detach(). If this
        view is the current view, then the Frame should have already detached the document.
        Added an assertion that this is the case. If this view is not the current view,
        then it cannot access its document, but the page cache should have detached it already.
        Similarly, changed to call RenderPart::setWidget() only if this is the current view
        in the frame.
        (WebCore::FrameView::adjustViewSize): Added an assertion that this view is the current
        view in the frame.
        (WebCore::FrameView::layout): Ditto.
        (WebCore::FrameView::scheduleRelayout): Ditto.
        (WebCore::FrameView::scheduleRelayoutOfSubtree): Ditto.
        (WebCore::FrameView::windowClipRect): Ditto.

2007-01-18  Eric Seidel  <eric@webkit.org>

        Reviewed by bdash.

        No test needed, removed bogus debug-only ASSERT.

        * rendering/RenderSVGContainer.cpp:
        (WebCore::RenderSVGContainer::paint):

2007-01-18  Alice Liu  <alice.liu@apple.com>

        Build Fix

        * platform/mac/PasteboardMac.mm:
        (WebCore::Pasteboard::writeSelection):

2007-01-18  Alice Liu  <alice.liu@apple.com>

        Reviewed by Mark Rowe.

        Fixes the leaks from my last patch, except for the first change below which is a missing delegate call for Mail purposes

        * editing/Editor.cpp:
        (WebCore::Editor::cut):
        * platform/Pasteboard.h:
        * platform/mac/PasteboardMac.mm:
        (WebCore::Pasteboard::Pasteboard):
        (WebCore::Pasteboard::clear):
        (WebCore::Pasteboard::writeSelection):
        (WebCore::Pasteboard::writeURL):
        (WebCore::Pasteboard::plainText):
        (WebCore::Pasteboard::documentFragment):

2007-01-18  David Hyatt  <hyatt@apple.com>

        Make sure layer autoscrolling puts the event coordinates into the layer's coordinate space before
        calling hitTest on it.  Fixes "flashy" selection in textareas.

        Reviewed by darin

        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::autoscroll):
        * rendering/RenderTextControl.cpp:
        (WebCore::RenderTextControl::nodeAtPoint):

2007-01-18  Anders Carlsson  <acarlsson@apple.com>

        Reviewed by Adam.

        Get rid of ResourceLoaderMac.mm and make willCacheResponse platform-independent.
        
        * loader/ResourceLoader.cpp:
        (WebCore::ResourceLoader::willCacheResponse):
        * loader/ResourceLoader.h:
        * loader/mac/ResourceLoaderMac.mm: Removed.
        * platform/network/ResourceHandleClient.h:
        (WebCore::):
        (WebCore::ResourceHandleClient::willCacheResponse):
        (WebCore::ResourceHandleClient::willStopBufferingData):
        * platform/network/mac/ResourceHandleMac.mm:
        (-[WebCoreResourceHandleAsDelegate connection:willCacheResponse:]):

2007-01-18  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by John.

        - fixed <rdar://problem/4887416> REGRESSION (SearchField): Assertion failure in HTMLInputElement::setValueFromRenderer when editing via drag and drop (11846)
        http://bugs.webkit.org/show_bug.cgi?id=11846
        
        * editing/ReplaceSelectionCommand.cpp:
        (WebCore::ReplaceSelectionCommand::doApply): Don't insert extra paragraph separators to avoid
        nesting blocks in plaintext mode, since that's not an issue under normal circumstances.
        * html/HTMLInputElement.h:
        * manual-tests/drag-move-in-search-field.html: Added.
        * rendering/RenderTextControl.cpp:
        (WebCore::RenderTextControl::subtreeHasChanged): constrain the value; we'd
        rather truncate it than end up with an illegal value here.

2007-01-18  Simon Hausmann  <hausmann@kde.org>

        Reviewed by Zack.

        * WebCore.pro: Ha^H^HFix to support massive parallel builds.

2007-01-18  David Kilzer  <ddkilzer@kilzer.net>

        Reviewed by Darin and Mitz.

        - fix http://bugs.webkit.org/show_bug.cgi?id=12305
          REGRESSION: Images do not load in video sections on CNN.com homepage

        <rdar://problem/4931480> REGRESSION: Images do not load in video sections on CNN.com homepage (12305)

        Test: fast/dom/HTMLImageElement/image-lowsrc-getset.html

        * html/HTMLAttributeNames.in: Added lowsrc.
        * html/HTMLImageElement.cpp:
        (WebCore::HTMLImageElement::isURLAttribute): Added lowsrc.
        (WebCore::HTMLImageElement::lowsrc): Added.
        (WebCore::HTMLImageElement::setLowsrc): Added.
        * html/HTMLImageElement.h: Added lowsrc and setLowsrc.
        * html/HTMLImageElement.idl: Added lowsrc.

2007-01-18  Simon Hausmann  <hausmann@kde.org>

        Reviewed by Zack.

        * WebCore.pro: Remove generated files on make clean.

2007-01-17  Alice Liu  <alice.liu@apple.com>

        Reviewed by Harrison.

        Fix for <rdar://problem/4894155> REGRESSION: Extra line break is pasted with content into message body after choosing File - Paste

        Migration of some editing code from WebHTMView to WebCore::Editor
        resulted in not calling pasteboardTypesForSelection, which Mail was
        overriding for the special purpose of adding a type to the
        pasteboard after WebKit did.  This patch adds 2 separate code paths
        for Tiger and Leopard.  On Tiger we give in and call the WebView's
        pasteboardTypesForSelection.  On Leopard we call a delegate after
        the pasteboard types are set. 

        * bridge/EditorClient.h:
        * editing/Editor.h:
        * platform/Pasteboard.h:
        * platform/graphics/svg/SVGImageEmptyClients.h:
        (WebCore::SVGEmptyEditorClient::didSetSelectionTypesForPasteboard):
        (WebCore::SVGEmptyEditorClient::pasteboardTypesForSelection):
        * platform/mac/PasteboardMac.mm:
        (WebCore::Pasteboard::Pasteboard):
        (WebCore::Pasteboard::clear):
        (WebCore::Pasteboard::writeSelection):
        (WebCore::Pasteboard::writeURL):
        (WebCore::Pasteboard::plainText):
        (WebCore::Pasteboard::documentFragment):

2007-01-17  John Sullivan  <sullivan@apple.com>

        Reviewed by Darin

        - WebCore part of fix for <rdar://problem/4462420> REGRESSION: Mail hangs during 
          Replace All if the replacement string contains the search string
        
        * page/Frame.h:
        * page/Frame.cpp:
        (WebCore::Frame::findString):
        new startInSelection parameter -- if true, search starts looking in selection; if false,
        search starts looking after the selection
        
        * page/mac/WebCoreFrameBridge.h:
        * page/mac/WebCoreFrameBridge.mm:
        (-[WebCoreFrameBridge searchFor:direction:caseSensitive:wrap:startInSelection:]):
        new startInSelection parameter, passed through to Frame::findString()

        * editing/JSEditor.cpp:
        pass false for new findString parameter, to match old behavior

2007-01-17  Beth Dakin  <bdakin@apple.com>

        Rubber stamped by Darin.

        * rendering/HitTestResult.cpp: Just added a comment.

2007-01-17  Justin Garcia  <justin.garcia@apple.com>

        Reviewed by darin
        
        <rdar://problem/4920488>
        REGRESSION: A crash occurs at WebCore::Range::processContents () when removing formatting from selected text (that contains a link)

        * dom/Range.cpp:
        (WebCore::Range::commonAncestorContainer): Return null if the nodes
        don't have a common ancestor.  As a side effect, the public 
        commonAncestorContainer now sets an exception if the Range starts
        in one document and ends in another, or starts or ends in a tree
        that's been removed from the document.  The spec doesn't cover
        this and there is no precedent in other browsers for this case because
        they don't allow invalid Ranges (you can create one with WebCore
        by removing a node that contains the start/end of a Range).
        (WebCore::Range::compareBoundaryPoints): If the the two positions
        are in nodes that have no common ancestor, return null.  This doesn't
        change the behavior of the public compareBoundaryPoints: it already
        throws an exception if the two positions are in nodes that don't have
        a common ancestor.  This follows the spec.

2007-01-17  John Sullivan  <sullivan@apple.com>

        The one word was typed by me, but only after debugging for a long time with Darin.

        - fixed <rdar://problem/4912002> REGRESSION: Series of words marked as a single misspelled word

        * editing/TextIterator.cpp:
        (WebCore::WordAwareIterator::WordAwareIterator):
        We were creating a TextIterator with the default kind, but WordAwareIterator is designed to work
        in concert with CharacterIterator, so they need to use the same kind. CharacterIterator uses
        kind RUNFINDER, so WordAwareIterator needs to do so also.

2007-01-17  Adele Peterson  <adele@apple.com>

        Reviewed by Brady.

        Fix for <rdar://problem/4900895> REGRESSION: onChange doesn't always fire for popups that have had value changed by JS

        No test case since you need to open up the menu to fire onChange.

        * html/HTMLSelectElement.cpp: (WebCore::HTMLSelectElement::setSelectedIndex):
          Keep track of m_lastOnChangeIndex even when we're not firing onChange.  Since
          the selected index has changed, we still want the m_lastOnChangeIndex to be up to date when we compare
          it later.  This matches our behavior in Safari 2.0.

2007-01-17  Adele Peterson  <adele@apple.com>

        Reviewed by Darin and John.

        - Fix for <rdar://problem/4816550> REGRESSION: autoscrolling doesn't work after double-click

        * page/EventHandler.cpp: (WebCore::EventHandler::handleMousePressEvent): Set swallowEvent bool instead
          of returning early for double and triple clicks.

2007-01-17  Darin Adler  <darin@apple.com>

        Reviewed by Hyatt.

        * rendering/RenderObject.h: Removed unused nextEditable and previousEditable.
        * rendering/RenderObject.cpp: Ditto.

2007-01-17  Darin Adler  <darin@apple.com>

        Reviewed by Maciej.

        - fix http://bugs.webkit.org/show_bug.cgi?id=12278
          <rdar://problem/4928705> REGRESSION(r13070): Dragged image size includes padding (12278)

        * WebCore.exp: Added HitTestResult::imageRect,
        removed HitTestResult::boundingBox.

        * rendering/HitTestResult.h:
        * rendering/HitTestResult.cpp: (WebCore::HitTestResult::imageRect):
        Added. Returns the content rectangle of the image.

        * rendering/RenderObject.h:
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::absolutePosition): Made const.
        (WebCore::RenderObject::contentBox): Added.
        (WebCore::RenderObject::absoluteContentBox): Added.

        * rendering/RenderBox.h:
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::absolutePosition): Made const.

        * rendering/RenderTableCell.h:
        * rendering/RenderTableCell.cpp:
        (WebCore::RenderTableCell::absolutePosition): Made const.

        * rendering/RenderView.h:
        * rendering/RenderView.cpp:
        (WebCore::RenderView::absolutePosition): Made const.

2007-01-17  Adele Peterson  <adele@apple.com>

        Reviewed by Beth.

        Fix for  http://bugs.webkit.org/show_bug.cgi?id=10139
        <rdar://problem/4823028> REGRESSION: Reproducible crash when selecting a popup/button with ::selection pseudostyle

        Test: fast/css/pseudostyle-anonymous-text.html

        * rendering/RenderObject.cpp: (WebCore::RenderObject::getPseudoStyle): Nil check the node.

2007-01-17  Adele Peterson  <adele@apple.com>

        Reviewed by Anders and John.

        Fix for http://bugs.webkit.org/show_bug.cgi?id=11278
        <rdar://problem/4826875> REGRESSION: Popup width doesn't change to accommodate dynamic changes to options

        Test: fast/forms/menulist-width-change.html

        * rendering/RenderMenuList.cpp: (WebCore::RenderMenuList::updateFromElement):
          When the options change, call setNeedsLayoutAndMinMaxRecalc.

2007-01-16  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Maciej.

        http://bugs.webkit.org/show_bug.cgi?id=12268
        Give object prototypes their own names

        * bindings/js/kjs_html.cpp: Changed the names of KJS:HTMLElement and KJS::HTMLElement to 
        not match the names of their WebCore counterparts. The "DOM" prefix I gave them doesn't 
        seem to carry much sense, but matches some other kjs_html object names.

        * bindings/scripts/CodeGeneratorJS.pm: Append "Proto" to interface name for the prototype's ClassInfo.

        * bindings/js/JSHTMLInputElementBase.cpp:
        (WebCore::JSHTMLInputElementBasePrototypeFunction::callAsFunction):
        (WebCore::JSHTMLInputElementBase::JSHTMLInputElementBase):
        * bindings/js/JSHTMLInputElementBase.h:
        * bindings/js/JSXMLHttpRequest.cpp:
        (KJS::JSXMLHttpRequestConstructorImp::JSXMLHttpRequestConstructorImp):
        (KJS::JSXMLHttpRequest::JSXMLHttpRequest):
        (KJS::JSXMLHttpRequestPrototypeFunction::callAsFunction):
        * bindings/js/JSXMLHttpRequest.h:
        * bindings/js/JSXSLTProcessor.cpp:
        (KJS::JSXSLTProcessor::JSXSLTProcessor):
        (KJS::XSLTProcessorPrototypeFunction::callAsFunction):
        (KJS::XSLTProcessorConstructorImp::XSLTProcessorConstructorImp):
        * bindings/js/kjs_css.cpp:
        (KJS::DOMCSSStyleDeclaration::DOMCSSStyleDeclaration):
        (KJS::DOMCSSStyleDeclarationPrototypeFunction::callAsFunction):
        (KJS::DOMMediaList::DOMMediaList):
        (KJS::KJS::DOMMediaListPrototypeFunction::callAsFunction):
        (KJS::DOMCSSStyleSheet::DOMCSSStyleSheet):
        (KJS::DOMCSSStyleSheetPrototypeFunction::callAsFunction):
        (KJS::DOMCSSValue::DOMCSSValue):
        (KJS::DOMCSSValuePrototypeFunction::callAsFunction):
        * bindings/js/kjs_css.h:
        * bindings/js/kjs_dom.cpp:
        (KJS::DOMNode::DOMNode):
        (KJS::DOMNodePrototypeFunction::callAsFunction):
        (KJS::DOMEventTargetNode::DOMEventTargetNode):
        (KJS::DOMEventTargetNodePrototypeFunction::callAsFunction):
        (KJS::DOMNamedNodeMap::DOMNamedNodeMap):
        (KJS::DOMNamedNodeMapPrototypeFunction::callAsFunction):
        * bindings/js/kjs_dom.h:
        * bindings/js/kjs_domnode.h:
        * bindings/js/kjs_events.cpp:
        (KJS::DOMEvent::DOMEvent):
        (KJS::DOMEventPrototypeFunction::callAsFunction):
        (KJS::Clipboard::Clipboard):
        (KJS::ClipboardPrototypeFunction::callAsFunction):
        * bindings/js/kjs_events.h:
        * bindings/js/kjs_html.cpp:
        (KJS::JSHTMLDocumentPrototypeFunction::callAsFunction):
        (KJS::):
        (KJS::JSHTMLDocument::JSHTMLDocument):
        (KJS::JSHTMLElementPrototypeFunction::callAsFunction):
        (KJS::JSHTMLElement::JSHTMLElement):
        (KJS::JSHTMLCollection::JSHTMLCollection):
        (KJS::JSHTMLCollectionPrototypeFunction::callAsFunction):
        * bindings/js/kjs_html.h:
        * bindings/js/kjs_navigator.cpp:
        * bindings/js/kjs_traversal.cpp:
        (KJS::DOMNodeFilter::DOMNodeFilter):
        (KJS::DOMNodeFilterPrototypeFunction::callAsFunction):
        * bindings/js/kjs_window.cpp:
        (KJS::Window::clear):
        Changed Proto to Prototype, and ProtoFunc to PrototypeFunction.

2007-01-17  Lars Knoll <lars@trolltech.com>

        Reviewed by Zack and Darin

        Fix the Qt build again after the latest Image changes.
        Also make some of the methods implemented in ImageCG 
        crossplatform.

        * platform/graphics/BitmapImage.h:
        * platform/graphics/Image.cpp:
        (WebCore::Image::fillWithSolidColor):
        (WebCore::calculatePatternScale):
        (WebCore::Image::drawTiled):
        * platform/graphics/Image.h:
        * platform/graphics/cg/ImageCG.cpp:
        (WebCore::BitmapImage::draw):
        * platform/graphics/qt/ImageQt.cpp:
        (WebCore::Image::loadPlatformResource):
        (WebCore::Image::drawPattern):
        (WebCore::BitmapImage::initPlatformData):
        (WebCore::BitmapImage::invalidatePlatformData):
        (WebCore::BitmapImage::draw):
        (WebCore::BitmapImage::drawPattern):
        * platform/qt/TemporaryLinkStubs.cpp:

2007-01-17  Darin Adler  <darin@apple.com>

        - quick attempt to fix the Qt build

        * platform/graphics/qt/ImageQt.cpp: (WebCore::BitmapImage::drawTiled):
        Remove obsolete parameters from this stub.

2007-01-17  Eric Seidel  <eric@webkit.org>

        Reviewed by rwlbuis.

        Test: svg/custom/inner-svg-hit-test.svg

        * rendering/RenderSVGContainer.cpp:
        (WebCore::RenderSVGContainer::nodeAtPoint): never allow containers to be hit.

2007-01-17  Lars Knoll <lars@trolltech.com>

        Reviewed by Zack

        Don't call receivedResponse twice for file: URLs.
        Never call back into the ResourceHandleClient once
        cancel() has been called on the ResourceHandle.

        * WebCore.pro:
        * platform/network/qt/ResourceHandleManagerQt.cpp:
        (WebCore::ResourceHandleManager::cancel):
        (WebCore::ResourceHandleManager::receivedResponse):
        (WebCore::ResourceHandleManager::receivedData):
        (WebCore::ResourceHandleManager::receivedFinished):
        (WebCore::FileLoader::request):
        (WebCore::FileLoader::parseDataUrl):
        (WebCore::WebCoreHttp::scheduleNextRequest):
        * platform/network/qt/ResourceHandleManagerQt.h:

2007-01-17  Eric Seidel  <eric@webkit.org>

        No review, build fix only.

        * platform/graphics/cg/ImageCG.cpp: correct drawPatternCombined to drawPattern
        (WebCore::Image::drawPattern):
        (WebCore::Image::drawTiled):

2007-01-17  Eric Seidel  <eric@webkit.org>

        Reviewed by mitz and rwlbuis.
        
        SVGs do not work as background images:
        http://bugs.webkit.org/show_bug.cgi?id=12096

        Tests updated:
        - fast/images/svg-as-background.svg: now passes
        - fast/images/svg-as-tiled-background.svg: now passes

        * platform/graphics/BitmapImage.h:
        (WebCore::BitmapImage::nativeImageForCurrentFrame):
        (WebCore::BitmapImage::mayFillWithSolidColor):
        (WebCore::BitmapImage::solidColor):
        * platform/graphics/Image.h:
        (WebCore::Image::mayFillWithSolidColor):
        (WebCore::Image::solidColor):
        (WebCore::Image::nativeImageForCurrentFrame):
        (WebCore::Image::startAnimation):
        * platform/graphics/cg/ImageCG.cpp:
        (WebCore::Image::drawPatternCallback):
        (WebCore::Image::drawPatternCombined):
        (WebCore::caculatePatternScale):
        (WebCore::Image::drawTiled):
        * platform/graphics/cg/PDFDocumentImage.cpp:
        * platform/graphics/cg/PDFDocumentImage.h:
        * platform/graphics/svg/SVGImage.cpp:
        (WebCore::SVGImage::nativeImageForCurrentFrame):
        * platform/graphics/svg/SVGImage.h:

2007-01-17  Rob Buis  <buis@kde.org>

        Reviewed by Eric

        Add proper condition for rx attribute negative check.

        * ksvg2/svg/SVGRectElement.cpp:
        (WebCore::SVGRectElement::parseMappedAttribute):

2007-01-17  Lars Knoll <lars@trolltech.com>

        Reviewed by Zack

        change all notImplemented() macros to use qDebug
        instead of fprintf(stder, ...)

        * loader/qt/DocumentLoaderQt.cpp:
        * loader/qt/FrameLoaderQt.cpp:
        * page/qt/EventHandlerQt.cpp:
        * page/qt/FrameQt.cpp:
        * platform/graphics/qt/GraphicsContextQt.cpp:
        * platform/graphics/qt/IconQt.cpp:
        * platform/network/qt/ResourceHandleManagerQt.cpp:
        * platform/network/qt/ResourceHandleQt.cpp:
        * platform/qt/CursorQt.cpp:
        * platform/qt/FileChooserQt.cpp:
        * platform/qt/MimeTypeRegistryQt.cpp:
        * platform/qt/PageQt.cpp: Removed.
        * platform/qt/PopupMenuQt.cpp:
        * platform/qt/ScrollViewQt.cpp:
        * platform/qt/TemporaryLinkStubs.cpp:
        * platform/qt/TextBoundaries.cpp:
        * platform/qt/WidgetQt.cpp:

2007-01-16  Brady Eidson  <beidson@apple.com>

        Reviewed by Oliver

        A few enhancements to the HTTP Auth architecture

        * platform/network/ProtectionSpace.cpp:
        (WebCore::ProtectionSpace::isProxy):
        (WebCore::ProtectionSpace::receivesCredentialSecurely):
        * platform/network/ProtectionSpace.h:

2007-01-16  Alice Liu  <alice.liu@apple.com>

        Reviewed by harrison.

        Fixed <rdar://problem/4921134> WebKit needs extensible cut/copy to allow additional types to be written to pasteboard

        * WebCore.xcodeproj/project.pbxproj:
        * bridge/EditorClient.h:
        * editing/Editor.cpp:
        (WebCore::Editor::copy):
        (WebCore::Editor::didWriteSelectionToPasteboard):
        * editing/Editor.h:
        * platform/graphics/svg/SVGImageEmptyClients.h:
        (WebCore::SVGEmptyEditorClient::didWriteSelectionToPasteboard):

2007-01-16  Justin Garcia  <justin.garcia@apple.com>

        Reviewed by harrison
        
        <rdar://problem/4747450>
        Gmail Editor: Caret doesn't always position itself after list marker
        <rdar://problem/4917055>
        GMail Editor: A hang can occur when attempting to apply list styling to selected indented text

        * editing/TextIterator.cpp:
        (WebCore::TextIterator::rangeFromLocationAndLength): Use VisiblePositions
        to compute the end of a run for emitted '\n's, because it's often wrong
        in that case.

2007-01-16  Darin Adler  <darin@apple.com>

        - quick lame attempt to get Qt compiling again

        * platform/qt/ContextMenuQt.cpp: Removed show() function.

2007-01-17  Nicholas Shanks  <contact@nickshanks.com>

        Reviewed by Darin.

        * platform/network/ResourceRequest.h:
        (WebCore::ResourceRequest::setHTTPAccept): Correct argument name.

2007-01-16  Beth Dakin  <bdakin@apple.com>

        Reviewed by Adam.

        Get rid of show() and hide() since they don't do anything.

        * page/ContextMenuController.cpp:
        (WebCore::ContextMenuController::handleContextMenuEvent):
        * platform/ContextMenu.h:
        * platform/mac/ContextMenuMac.mm:

2007-01-16  Lars Knoll <lars@trolltech.com>

        Reviewed by Zack

        Cleaned up the way we create native widgets. They are
        now not created in WebCore anymore, but in the new
        Qt API to WebKit.

        Fix a compile issue in the ResourceHandleManager.

        * WebCore.pro:
        * platform/ScrollView.h:
        * platform/Widget.h:
        (WebCore::ResourceHandleManager::cancel):
        * platform/qt/ScrollViewCanvasQt.cpp:
        (WebCore::ScrollViewCanvasQt::ScrollViewCanvasQt):
        (WebCore::ScrollViewCanvasQt::paintEvent):
        (WebCore::ScrollViewCanvasQt::mouseMoveEvent):
        (WebCore::ScrollViewCanvasQt::mousePressEvent):
        (WebCore::ScrollViewCanvasQt::mouseReleaseEvent):
        (WebCore::ScrollViewCanvasQt::handleKeyEvent):
        * platform/qt/ScrollViewCanvasQt.h:
        * platform/qt/ScrollViewQt.cpp:
        (WebCore::ScrollView::ScrollView):
        (WebCore::ScrollView::setScrollArea):
        (WebCore::ScrollView::addChild):
        * platform/qt/WidgetQt.cpp:
        * platform/network/qt/ResourceHandleManagerQt.cpp:

2007-01-16  Lars Knoll <lars@trolltech.com>

        Reviewed by Zack

        Looks like ResourceHandle _has_ to do everything
        asynchronously if we don't want to run into
        lots of trouble in the loader.

        Implement support data: URLs.

        Remove some unused Qt only code in ResourceHandleClient.h

        * platform/network/ResourceHandleClient.h:
        * platform/network/qt/ResourceHandleManagerQt.cpp:
        (WebCore::RequestQt::setURL):
        (WebCore::ResourceHandleManager::add):
        (WebCore::ResourceHandleManager::cancel):
        (WebCore::ResourceHandleManager::receivedFinished):
        (WebCore::LoaderThread::run):
        (WebCore::FileLoader::request):
        (WebCore::FileLoader::sendData):
        (WebCore::FileLoader::parseDataUrl):
        * platform/network/qt/ResourceHandleManagerQt.h:

2007-01-16  Eric Seidel  <eric@webkit.org>

        Reviewed by mitz.

        Refactor drawTiled implementations in preparation for combining them.
        Removed unused RoundTile code path.

        * platform/graphics/cg/ImageCG.cpp:
        (WebCore::drawPattern):
        (WebCore::BitmapImage::drawTiled):
        (WebCore::caculatePatternScale):

2007-01-16  Darin Adler  <darin@apple.com>

        Reviewed by Mark Rowe.

        - removed unused field from loader

        * loader/loader.cpp:
        (WebCore::Loader::numRequests):
        (WebCore::Loader::cancelRequests):
        * loader/loader.h:

2007-01-15  Rob Buis  <buis@kde.org>

        Reviewed by Eric.

        http://bugs.webkit.org/show_bug.cgi?id=12272
        SVG picture is clipped (edges not visible)

        Expose css dpi constant and use it for svg, making
        1in amount to 96 pixels like for html.

        * css/CSSPrimitiveValue.cpp:
        (WebCore::CSSPrimitiveValue::computeLengthFloat):
        (WebCore::scaleFactorForConversion):
        * css/csshelper.h:
        * ksvg2/svg/SVGLength.cpp:
        (WebCore::SVGLength::value):
        (WebCore::SVGLength::setValue):
        * ksvg2/svg/SVGLength.h:

2007-01-15  Brady Eidson  <beidson@apple.com>

        Reviewed by Adam
        
        CFNet additions

        * platform/network/AuthenticationChallenge.cpp:
        (WebCore::operator==):
        * platform/network/AuthenticationChallenge.h:
        (WebCore::AuthenticationChallenge::sourceHandle):
        (WebCore::AuthenticationChallenge::cfURLAuthChallengeRef):
        * platform/network/ResourceError.h:
        * platform/network/ResourceHandle.h:
        * platform/network/ResourceHandleInternal.h:
        (WebCore::ResourceHandleInternal::ResourceHandleInternal):

2007-01-15  Eric Seidel  <eric@webkit.org>

        Reviewed by hyatt.

        Don't map attributes in namespaces other than null to CSS properties.
        
        Test: svg/custom/attribute-namespace-check.svg

        * ksvg2/svg/SVGStyledElement.cpp:
        (WebCore::SVGStyledElement::cssPropertyIdForSVGAttributeName):

2007-01-15  Lars Naesbye Christensen  <lars@naesbye.dk>

        Reviewed by Darin.

        - http://bugs.webkit.org/show_bug.cgi?id=11112
          add a drop shadow to the hand cursor used for links

        * Resources/linkCursor.png: Added a drop shadow.

2007-01-15  Darin Adler  <darin@apple.com>

        Reviewed by Adam.

        - fix http://bugs.webkit.org/show_bug.cgi?id=12190
          REGRESSION: Placeholder text does not reflect dynamic updates

        Test: fast/forms/placeholder-set-attribute.html

        * html/HTMLTextFieldInnerElement.cpp:
        (WebCore::HTMLSearchFieldCancelButtonElement::defaultEventHandler):
        Call onSearch on the element since I removed it from the renderer.

        * rendering/RenderTextControl.h: Added explicit virtual keywords for overrides
        of virtual functions. Removed the unneeded onSearch function. Made the inheritance
        from PopupMenuClient be private, and made the overrides all private. Replaced the
        showPlaceholderIfNeeded and hidePlaceholderIfNeeded functions with updatePlaceholder.
        * rendering/RenderTextControl.cpp:
        (WebCore::RenderTextControl::createResultsButtonStyle): Added an assertion.
        (WebCore::RenderTextControl::updatePlaceholder): Added. Replaces the two
        functions, showPlaceholderIfNeeded and hidePlaceholderIfNeeded.
        (WebCore::RenderTextControl::updateFromElement): Added call to
        updatePlaceholder before updating the value. Also improved the structure
        of the function and corrected incorrect use of copy and replace.
        (WebCore::RenderTextControl::updateCancelButtonVisibility): Added an
        assertion and removed an unneeded local variable.
        (WebCore::RenderTextControl::subtreeHasChanged): Removed an unneeded
        null check and virtual function calls.
        (WebCore::RenderTextControl::forwardEvent): Replaced calls to the old
        functions with calls to updatePlaceholder.
        (WebCore::RenderTextControl::selectionChanged): Changed code to dispatch
        the select event directly -- I plan to remove the onSelect function, which
        was only called here.
        (WebCore::RenderTextControl::autosaveName): Removed too-specific cast and
        local variable.
        (WebCore::RenderTextControl::addSearchResult): Added assertion and changed
        variable name for clarity.
        (WebCore::RenderTextControl::valueChanged): Changed code to check for empty
        autosave name instead of null for consistency with other call sites that
        manage the autosave name. Also changed the code that dispatches an event
        to call onSearch on the input element so we don't need our own function.

2007-01-15  Eric Seidel  <eric@webkit.org>

        Reviewed by hyatt.

        Fix SVGStyledElement::parseMappedAttribute to only map SVG-allowed CSS properties
        (i.e. width is no longer mapped to CSS for SVG)
        Add SVGStyledElement::mapToEntry to allow RenderStyle-sharing
        http://bugs.webkit.org/show_bug.cgi?id=12060

        * dom/MappedAttributeEntry.h:
        (WebCore::):
        * ksvg2/svg/SVGStyledElement.cpp:
        (WebCore::cssPropertyIdForName): new helper
        (WebCore::mapAttributeToCSSProperty): new helper
        (WebCore::SVGStyledElement::cssPropertyIdForSVGAttributeName): new helper
        (WebCore::SVGStyledElement::mapToEntry): added.
        (WebCore::SVGStyledElement::parseMappedAttribute): use cssPropertyIdForSVGAttributeName
        * ksvg2/svg/SVGStyledElement.h:

2007-01-15  Eric Seidel  <eric@webkit.org>

        Reviewed by bdash.

        Update header guards to follow new style guidelines using new clean-header-guards script.

        * bindings/js/JSHTMLElementWrapperFactory.h:
        * bindings/js/JSHTMLInputElementBase.h:
        * bindings/js/JSHTMLOptionElementConstructor.h:
        * bindings/js/JSSVGElementWrapperFactory.h:
        * bindings/js/JSSVGPODTypeWrapper.h:
        * bindings/js/JSXMLHttpRequest.h:
        * bindings/js/JSXSLTProcessor.h:
        * bindings/js/kjs_binding.h:
        * bindings/js/kjs_css.h:
        * bindings/js/kjs_dom.h:
        * bindings/js/kjs_domnode.h:
        * bindings/js/kjs_events.h:
        * bindings/js/kjs_html.h:
        * bindings/js/kjs_navigator.h:
        * bindings/js/kjs_proxy.h:
        * bindings/js/kjs_traversal.h:
        * bindings/js/kjs_window.h:
        * bridge/EditorClient.h:
        * bridge/History.h:
        * css/CSSStyleSheet.h:
        * css/CSSValue.h:
        * css/CSSValueList.h:
        * css/DashboardRegion.h:
        * css/FontFamilyValue.h:
        * css/FontValue.h:
        * css/MediaFeatureNames.h:
        * css/MediaList.h:
        * css/Pair.h:
        * css/RectImpl.h:
        * css/ShadowValue.h:
        * css/StyleBase.h:
        * css/StyleList.h:
        * css/StyleSheet.h:
        * css/StyleSheetList.h:
        * css/cssstyleselector.h:
        * dom/BeforeTextInsertedEvent.h:
        * dom/CDATASection.h:
        * dom/CharacterData.h:
        * dom/ChildNodeList.h:
        * dom/Comment.h:
        * dom/DOMImplementation.h:
        * dom/DocPtr.h:
        * dom/Document.h:
        * dom/DocumentFragment.h:
        * dom/DocumentMarker.h:
        * dom/DocumentType.h:
        * dom/EditingText.h:
        * dom/Entity.h:
        * dom/EntityReference.h:
        * dom/EventNames.h:
        * dom/EventTargetNode.h:
        * dom/NameNodeList.h:
        * dom/NamedNodeMap.h:
        * dom/Node.h:
        * dom/NodeList.h:
        * dom/Notation.h:
        * dom/Position.h:
        * dom/ProcessingInstruction.h:
        * dom/Range.h:
        * dom/StyleElement.h:
        * dom/Text.h:
        * editing/AppendNodeCommand.h:
        * editing/ApplyStyleCommand.h:
        * editing/BreakBlockquoteCommand.h:
        * editing/CommandByName.h:
        * editing/CompositeEditCommand.h:
        * editing/DeleteButton.h:
        * editing/DeleteButtonController.h:
        * editing/DeleteFromTextNodeCommand.h:
        * editing/DeleteSelectionCommand.h:
        * editing/InsertIntoTextNodeCommand.h:
        * editing/InsertLineBreakCommand.h:
        * editing/InsertNodeBeforeCommand.h:
        * editing/InsertParagraphSeparatorCommand.h:
        * editing/InsertTextCommand.h:
        * editing/JoinTextNodesCommand.h:
        * editing/MergeIdenticalElementsCommand.h:
        * editing/ModifySelectionListLevel.h:
        * editing/MoveSelectionCommand.h:
        * editing/RemoveCSSPropertyCommand.h:
        * editing/RemoveNodeAttributeCommand.h:
        * editing/RemoveNodeCommand.h:
        * editing/RemoveNodePreservingChildrenCommand.h:
        * editing/ReplaceSelectionCommand.h:
        * editing/SetNodeAttributeCommand.h:
        * editing/SplitElementCommand.h:
        * editing/SplitTextNodeCommand.h:
        * editing/SplitTextNodeContainingElementCommand.h:
        * editing/TextGranularity.h:
        * editing/TypingCommand.h:
        * editing/WrapContentsInDummySpanCommand.h:
        * history/BackForwardList.h:
        * history/HistoryItem.h:
        * history/HistoryItemTimer.h:
        * history/PageCache.h:
        * html/CanvasGradient.h:
        * html/CanvasPattern.h:
        * html/CanvasRenderingContext2D.h:
        * html/CanvasStyle.h:
        * html/FormDataList.h:
        * html/HTMLAnchorElement.h:
        * html/HTMLAppletElement.h:
        * html/HTMLAreaElement.h:
        * html/HTMLBRElement.h:
        * html/HTMLBaseElement.h:
        * html/HTMLBaseFontElement.h:
        * html/HTMLBlockquoteElement.h:
        * html/HTMLBodyElement.h:
        * html/HTMLButtonElement.h:
        * html/HTMLCanvasElement.h:
        * html/HTMLCollection.h:
        * html/HTMLDListElement.h:
        * html/HTMLDirectoryElement.h:
        * html/HTMLDivElement.h:
        * html/HTMLElement.h:
        * html/HTMLElementFactory.h:
        * html/HTMLEmbedElement.h:
        * html/HTMLFieldSetElement.h:
        * html/HTMLFontElement.h:
        * html/HTMLFormCollection.h:
        * html/HTMLFormElement.h:
        * html/HTMLFrameSetElement.h:
        * html/HTMLGenericFormElement.h:
        * html/HTMLHRElement.h:
        * html/HTMLHeadElement.h:
        * html/HTMLHeadingElement.h:
        * html/HTMLHtmlElement.h:
        * html/HTMLImageElement.h:
        * html/HTMLImageLoader.h:
        * html/HTMLInputElement.h:
        * html/HTMLIsIndexElement.h:
        * html/HTMLKeygenElement.h:
        * html/HTMLLIElement.h:
        * html/HTMLLabelElement.h:
        * html/HTMLLegendElement.h:
        * html/HTMLLinkElement.h:
        * html/HTMLMapElement.h:
        * html/HTMLMarqueeElement.h:
        * html/HTMLMenuElement.h:
        * html/HTMLMetaElement.h:
        * html/HTMLModElement.h:
        * html/HTMLNameCollection.h:
        * html/HTMLOListElement.h:
        * html/HTMLObjectElement.h:
        * html/HTMLOptGroupElement.h:
        * html/HTMLOptionElement.h:
        * html/HTMLOptionsCollection.h:
        * html/HTMLParagraphElement.h:
        * html/HTMLParamElement.h:
        * html/HTMLParser.h:
        * html/HTMLPlugInElement.h:
        * html/HTMLPreElement.h:
        * html/HTMLQuoteElement.h:
        * html/HTMLScriptElement.h:
        * html/HTMLSelectElement.h:
        * html/HTMLStyleElement.h:
        * html/HTMLTableCaptionElement.h:
        * html/HTMLTableCellElement.h:
        * html/HTMLTableColElement.h:
        * html/HTMLTableElement.h:
        * html/HTMLTablePartElement.h:
        * html/HTMLTableRowElement.h:
        * html/HTMLTableSectionElement.h:
        * html/HTMLTextAreaElement.h:
        * html/HTMLTextFieldInnerElement.h:
        * html/HTMLTitleElement.h:
        * html/HTMLUListElement.h:
        * ksvg2/css/SVGRenderStyle.h:
        * ksvg2/css/SVGRenderStyleDefs.h:
        * ksvg2/events/JSSVGLazyEventListener.h:
        * ksvg2/events/SVGZoomEvent.h:
        * ksvg2/misc/KCanvasRenderingStyle.h:
        * ksvg2/misc/PointerEventsHitRules.h:
        * ksvg2/misc/SVGDocumentExtensions.h:
        * ksvg2/misc/SVGImageLoader.h:
        * ksvg2/misc/TimeScheduler.h:
        * ksvg2/svg/GradientAttributes.h:
        * ksvg2/svg/LinearGradientAttributes.h:
        * ksvg2/svg/PatternAttributes.h:
        * ksvg2/svg/RadialGradientAttributes.h:
        * ksvg2/svg/SVGAElement.h:
        * ksvg2/svg/SVGAngle.h:
        * ksvg2/svg/SVGAnimateColorElement.h:
        * ksvg2/svg/SVGAnimateElement.h:
        * ksvg2/svg/SVGAnimateMotionElement.h:
        * ksvg2/svg/SVGAnimateTransformElement.h:
        * ksvg2/svg/SVGAnimatedPathData.h:
        * ksvg2/svg/SVGAnimatedPoints.h:
        * ksvg2/svg/SVGAnimatedTemplate.h:
        * ksvg2/svg/SVGAnimationElement.h:
        * ksvg2/svg/SVGCircleElement.h:
        * ksvg2/svg/SVGClipPathElement.h:
        * ksvg2/svg/SVGColor.h:
        * ksvg2/svg/SVGComponentTransferFunctionElement.h:
        * ksvg2/svg/SVGCursorElement.h:
        * ksvg2/svg/SVGDOMImplementation.h:
        * ksvg2/svg/SVGDefsElement.h:
        * ksvg2/svg/SVGDescElement.h:
        * ksvg2/svg/SVGDocument.h:
        * ksvg2/svg/SVGElement.h:
        * ksvg2/svg/SVGElementInstance.h:
        * ksvg2/svg/SVGElementInstanceList.h:
        * ksvg2/svg/SVGEllipseElement.h:
        * ksvg2/svg/SVGExternalResourcesRequired.h:
        * ksvg2/svg/SVGFEBlendElement.h:
        * ksvg2/svg/SVGFEColorMatrixElement.h:
        * ksvg2/svg/SVGFEComponentTransferElement.h:
        * ksvg2/svg/SVGFECompositeElement.h:
        * ksvg2/svg/SVGFEDiffuseLightingElement.h:
        * ksvg2/svg/SVGFEDisplacementMapElement.h:
        * ksvg2/svg/SVGFEDistantLightElement.h:
        * ksvg2/svg/SVGFEFloodElement.h:
        * ksvg2/svg/SVGFEFuncAElement.h:
        * ksvg2/svg/SVGFEFuncBElement.h:
        * ksvg2/svg/SVGFEFuncGElement.h:
        * ksvg2/svg/SVGFEFuncRElement.h:
        * ksvg2/svg/SVGFEGaussianBlurElement.h:
        * ksvg2/svg/SVGFEImageElement.h:
        * ksvg2/svg/SVGFELightElement.h:
        * ksvg2/svg/SVGFEMergeElement.h:
        * ksvg2/svg/SVGFEMergeNodeElement.h:
        * ksvg2/svg/SVGFEOffsetElement.h:
        * ksvg2/svg/SVGFEPointLightElement.h:
        * ksvg2/svg/SVGFESpecularLightingElement.h:
        * ksvg2/svg/SVGFESpotLightElement.h:
        * ksvg2/svg/SVGFETileElement.h:
        * ksvg2/svg/SVGFETurbulenceElement.h:
        * ksvg2/svg/SVGFilterElement.h:
        * ksvg2/svg/SVGFilterPrimitiveStandardAttributes.h:
        * ksvg2/svg/SVGFitToViewBox.h:
        * ksvg2/svg/SVGForeignObjectElement.h:
        * ksvg2/svg/SVGGElement.h:
        * ksvg2/svg/SVGGradientElement.h:
        * ksvg2/svg/SVGImageElement.h:
        * ksvg2/svg/SVGLangSpace.h:
        * ksvg2/svg/SVGLength.h:
        * ksvg2/svg/SVGLengthList.h:
        * ksvg2/svg/SVGLineElement.h:
        * ksvg2/svg/SVGLinearGradientElement.h:
        * ksvg2/svg/SVGList.h:
        * ksvg2/svg/SVGListTraits.h:
        * ksvg2/svg/SVGLocatable.h:
        * ksvg2/svg/SVGMarkerElement.h:
        * ksvg2/svg/SVGMaskElement.h:
        * ksvg2/svg/SVGMetadataElement.h:
        * ksvg2/svg/SVGNumberList.h:
        * ksvg2/svg/SVGPaint.h:
        * ksvg2/svg/SVGParserUtilities.h:
        * ksvg2/svg/SVGPathElement.h:
        * ksvg2/svg/SVGPathSeg.h:
        * ksvg2/svg/SVGPathSegArc.h:
        * ksvg2/svg/SVGPathSegClosePath.h:
        * ksvg2/svg/SVGPathSegCurvetoCubic.h:
        * ksvg2/svg/SVGPathSegCurvetoCubicSmooth.h:
        * ksvg2/svg/SVGPathSegCurvetoQuadratic.h:
        * ksvg2/svg/SVGPathSegCurvetoQuadraticSmooth.h:
        * ksvg2/svg/SVGPathSegLineto.h:
        * ksvg2/svg/SVGPathSegLinetoHorizontal.h:
        * ksvg2/svg/SVGPathSegLinetoVertical.h:
        * ksvg2/svg/SVGPathSegList.h:
        * ksvg2/svg/SVGPathSegMoveto.h:
        * ksvg2/svg/SVGPatternElement.h:
        * ksvg2/svg/SVGPointList.h:
        * ksvg2/svg/SVGPolyElement.h:
        * ksvg2/svg/SVGPolygonElement.h:
        * ksvg2/svg/SVGPolylineElement.h:
        * ksvg2/svg/SVGPreserveAspectRatio.h:
        * ksvg2/svg/SVGRadialGradientElement.h:
        * ksvg2/svg/SVGRectElement.h:
        * ksvg2/svg/SVGRenderingIntent.h:
        * ksvg2/svg/SVGSVGElement.h:
        * ksvg2/svg/SVGScriptElement.h:
        * ksvg2/svg/SVGSetElement.h:
        * ksvg2/svg/SVGStopElement.h:
        * ksvg2/svg/SVGStringList.h:
        * ksvg2/svg/SVGStylable.h:
        * ksvg2/svg/SVGStyleElement.h:
        * ksvg2/svg/SVGStyledElement.h:
        * ksvg2/svg/SVGStyledLocatableElement.h:
        * ksvg2/svg/SVGStyledTransformableElement.h:
        * ksvg2/svg/SVGSwitchElement.h:
        * ksvg2/svg/SVGSymbolElement.h:
        * ksvg2/svg/SVGTRefElement.h:
        * ksvg2/svg/SVGTSpanElement.h:
        * ksvg2/svg/SVGTests.h:
        * ksvg2/svg/SVGTextContentElement.h:
        * ksvg2/svg/SVGTextElement.h:
        * ksvg2/svg/SVGTextPositioningElement.h:
        * ksvg2/svg/SVGTitleElement.h:
        * ksvg2/svg/SVGTransform.h:
        * ksvg2/svg/SVGTransformList.h:
        * ksvg2/svg/SVGTransformable.h:
        * ksvg2/svg/SVGURIReference.h:
        * ksvg2/svg/SVGUnitTypes.h:
        * ksvg2/svg/SVGUseElement.h:
        * ksvg2/svg/SVGViewElement.h:
        * ksvg2/svg/SVGZoomAndPan.h:
        * loader/CachedCSSStyleSheet.h:
        * loader/CachedImage.h:
        * loader/CachedXSLStyleSheet.h:
        * loader/DocumentLoader.h:
        * loader/Request.h:
        * loader/SubresourceLoader.h:
        * loader/icon/IconDataCache.h:
        * loader/icon/IconDatabase.h:
        * loader/icon/IconLoader.h:
        * loader/icon/SQLDatabase.h:
        * loader/icon/SQLStatement.h:
        * loader/icon/SQLTransaction.h:
        * page/Frame.h:
        * page/FrameLoadRequest.h:
        * page/FrameTree.h:
        * page/FrameView.h:
        * page/PageState.h:
        * page/Plugin.h:
        * page/qt/FrameQt.h:
        * page/qt/FrameQtClient.h:
        * platform/Arena.h:
        * platform/ArrayImpl.h:
        * platform/Cursor.h:
        * platform/DeprecatedArray.h:
        * platform/DeprecatedCString.h:
        * platform/FileChooser.h:
        * platform/Font.h:
        * platform/FontCache.h:
        * platform/FontData.h:
        * platform/FontDescription.h:
        * platform/FontFamily.h:
        * platform/GlyphBuffer.h:
        * platform/GlyphMap.h:
        * platform/GlyphWidthMap.h:
        * platform/Logging.h:
        * platform/Pasteboard.h:
        * platform/PlatformString.h:
        * platform/PlugInInfoStore.h:
        * platform/PopupMenu.h:
        * platform/PopupMenuClient.h:
        * platform/ScrollBar.h:
        * platform/ScrollView.h:
        * platform/SearchPopupMenu.h:
        * platform/Shared.h:
        * platform/Sound.h:
        * platform/SystemTime.h:
        * platform/Timer.h:
        * platform/Widget.h:
        * platform/cf/RetainPtr.h:
        * platform/gdk/ChromeClientGdk.h:
        * platform/gdk/FontPlatformData.h:
        * platform/gdk/FrameGdk.h:
        * platform/gdk/KeyboardCodes.h:
        * platform/gdk/RenderPopupMenuGdk.h:
        * platform/gdk/RenderThemeGdk.h:
        * platform/graphics/BitmapImage.h:
        * platform/graphics/Color.h:
        * platform/graphics/FloatPoint.h:
        * platform/graphics/FloatPoint3D.h:
        * platform/graphics/FloatRect.h:
        * platform/graphics/Icon.h:
        * platform/graphics/Image.h:
        * platform/graphics/ImageAnimationObserver.h:
        * platform/graphics/ImageBuffer.h:
        * platform/graphics/ImageSource.h:
        * platform/graphics/IntPoint.h:
        * platform/graphics/IntRect.h:
        * platform/graphics/IntSize.h:
        * platform/graphics/IntSizeHash.h:
        * platform/graphics/PathTraversalState.h:
        * platform/graphics/Pen.h:
        * platform/graphics/qt/ImageDecoderQt.h:
        * platform/graphics/svg/SVGImage.h:
        * platform/graphics/svg/SVGImageEmptyClients.h:
        * platform/graphics/svg/SVGPaintServer.h:
        * platform/graphics/svg/SVGPaintServerGradient.h:
        * platform/graphics/svg/SVGPaintServerLinearGradient.h:
        * platform/graphics/svg/SVGPaintServerPattern.h:
        * platform/graphics/svg/SVGPaintServerRadialGradient.h:
        * platform/graphics/svg/SVGPaintServerSolid.h:
        * platform/graphics/svg/SVGResource.h:
        * platform/graphics/svg/SVGResourceClipper.h:
        * platform/graphics/svg/SVGResourceFilter.h:
        * platform/graphics/svg/SVGResourceMarker.h:
        * platform/graphics/svg/SVGResourceMasker.h:
        * platform/graphics/svg/cg/CgSupport.h:
        * platform/graphics/svg/filters/SVGDistantLightSource.h:
        * platform/graphics/svg/filters/SVGFEBlend.h:
        * platform/graphics/svg/filters/SVGFEColorMatrix.h:
        * platform/graphics/svg/filters/SVGFEComponentTransfer.h:
        * platform/graphics/svg/filters/SVGFEComposite.h:
        * platform/graphics/svg/filters/SVGFEConvolveMatrix.h:
        * platform/graphics/svg/filters/SVGFEDiffuseLighting.h:
        * platform/graphics/svg/filters/SVGFEDisplacementMap.h:
        * platform/graphics/svg/filters/SVGFEFlood.h:
        * platform/graphics/svg/filters/SVGFEGaussianBlur.h:
        * platform/graphics/svg/filters/SVGFEImage.h:
        * platform/graphics/svg/filters/SVGFEMerge.h:
        * platform/graphics/svg/filters/SVGFEMorphology.h:
        * platform/graphics/svg/filters/SVGFEOffset.h:
        * platform/graphics/svg/filters/SVGFESpecularLighting.h:
        * platform/graphics/svg/filters/SVGFETile.h:
        * platform/graphics/svg/filters/SVGFETurbulence.h:
        * platform/graphics/svg/filters/SVGFilterEffect.h:
        * platform/graphics/svg/filters/SVGLightSource.h:
        * platform/graphics/svg/filters/SVGPointLightSource.h:
        * platform/graphics/svg/filters/SVGSpotLightSource.h:
        * platform/mac/FontPlatformData.h:
        * platform/mac/PlatformScrollBar.h:
        * platform/network/AuthenticationChallenge.h:
        * platform/network/Credential.h:
        * platform/network/HTTPHeaderMap.h:
        * platform/network/ProtectionSpace.h:
        * platform/network/ResourceError.h:
        * platform/network/ResourceRequest.h:
        * platform/network/ResourceResponse.h:
        * platform/network/cf/FormDataStreamCFNet.h:
        * platform/network/cf/ResourceRequestCFNet.h:
        * platform/network/cf/ResourceResponseCFNet.h:
        * platform/network/gdk/ResourceHandleManager.h:
        * platform/network/mac/AuthenticationMac.h:
        * platform/network/mac/FormDataStreamMac.h:
        * platform/network/qt/ResourceHandleManagerKDE.h:
        * platform/network/qt/ResourceHandleManagerQt.h:
        * platform/network/win/ResourceHandleWin.h:
        * platform/qt/FontPlatformData.h:
        * platform/qt/KeyboardCodes.h:
        * platform/qt/PlatformScrollBar.h:
        * platform/qt/ScrollViewCanvasQt.h:
        * platform/qt/SharedTimerQt.h:
        * platform/win/FontPlatformData.h:
        * platform/win/PlatformScrollBar.h:
        * rendering/AutoTableLayout.h:
        * rendering/HitTestRequest.h:
        * rendering/HitTestResult.h:
        * rendering/InlineBox.h:
        * rendering/InlineFlowBox.h:
        * rendering/Length.h:
        * rendering/ListMarkerBox.h:
        * rendering/RenderBox.h:
        * rendering/RenderMenuList.h:
        * rendering/RenderPart.h:
        * rendering/RenderPartObject.h:
        * rendering/RenderPath.h:
        * rendering/RenderReplaced.h:
        * rendering/RenderSVGContainer.h:
        * rendering/RenderSVGImage.h:
        * rendering/RenderSVGInline.h:
        * rendering/RenderSVGInlineText.h:
        * rendering/RenderSVGTSpan.h:
        * rendering/RenderSVGText.h:
        * rendering/RenderStyle.h:
        * rendering/RenderTableCol.h:
        * rendering/RenderThemeWin.h:
        * rendering/bidi.h:
        * xml/DOMParser.h:
        * xml/XPathEvaluator.h:
        * xml/XPathExpression.h:
        * xml/XPathExpressionNode.h:
        * xml/XPathFunctions.h:
        * xml/XPathNSResolver.h:
        * xml/XPathNamespace.h:
        * xml/XPathParser.h:
        * xml/XPathPath.h:
        * xml/XPathPredicate.h:
        * xml/XPathResult.h:
        * xml/XPathStep.h:
        * xml/XPathUtil.h:
        * xml/XPathValue.h:
        * xml/XPathVariableReference.h:
        * xml/XSLImportRule.h:
        * xml/XSLStyleSheet.h:
        * xml/XSLTProcessor.h:
        * xml/xmlhttprequest.h:

2007-01-15  Anders Carlsson  <acarlsson@apple.com>

        Build fix.
        
        * loader/ProgressTracker.cpp:

2007-01-15  Lars Knoll <lars@trolltech.com>

        Fix the Qt build

        * WebCore.pro:

2007-01-15  Anders Carlsson  <acarlsson@apple.com>

        Reviewed by Darin.

        * loader/ProgressTracker.cpp:
        Set finalProgressValue to its value explicitly instead of calculating it 
        (which causes a global initializer to be generated).

2007-01-15  Anders Carlsson  <acarlsson@apple.com>

        Reviewed by Darin and Adam.

        Move progress tracking down to WebCore.
        
        * WebCore.exp:
        Add ProgressTracker::estimatedProgress() to be used by WebKit.
        
        * WebCore.xcodeproj/project.pbxproj:
        Add ProgressTracker.[cpp|h]
        
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::prepareForLoadStart):
        (WebCore::FrameLoader::clearProvisionalLoad):
        (WebCore::FrameLoader::checkLoadCompleteForThisFrame):
        (WebCore::FrameLoader::startLoading):
        (WebCore::FrameLoader::didReceiveResponse):
        (WebCore::FrameLoader::didReceiveData):
        (WebCore::FrameLoader::didFailToLoad):
        (WebCore::FrameLoader::requestFromDelegate):
        (WebCore::FrameLoader::didFinishLoad):
        Call directly to the progress tracker instead of through the frame loader client.
        
        * loader/FrameLoaderClient.h:
        Get rid of the old methods and add new methods for tracking progress.
        
        * loader/ProgressTracker.cpp: Added.
        (WebCore::ProgressItem::ProgressItem):
        (WebCore::ProgressTracker::ProgressTracker):
        (WebCore::ProgressTracker::~ProgressTracker):
        (WebCore::ProgressTracker::estimatedProgress):
        (WebCore::ProgressTracker::reset):
        (WebCore::ProgressTracker::progressStarted):
        (WebCore::ProgressTracker::progressCompleted):
        (WebCore::ProgressTracker::finalProgressComplete):
        (WebCore::ProgressTracker::incrementProgress):
        (WebCore::ProgressTracker::completeProgress):
        (WebCore::ProgressTracker::createUniqueIdentifier):
        * loader/ProgressTracker.h: Added.
        New per page class which tracks progress.
        
        * loader/ResourceLoader.cpp:
        (WebCore::ResourceLoader::willSendRequest):
        * page/Page.cpp:
        (WebCore::Page::Page):
        * page/Page.h:
        (WebCore::Page::progress):
        Move createUniqueIdentifier to ProgressTracker, add ProgressTracker object to Page.
        
        * platform/graphics/svg/SVGImageEmptyClients.h:
        (WebCore::SVGEmptyFrameLoaderClient::willChangeEstimatedProgress):
        (WebCore::SVGEmptyFrameLoaderClient::didChangeEstimatedProgress):
        (WebCore::SVGEmptyFrameLoaderClient::postProgressStartedNotification):
        (WebCore::SVGEmptyFrameLoaderClient::postProgressEstimateChangedNotification):
        (WebCore::SVGEmptyFrameLoaderClient::postProgressFinishedNotification):
        Add new methods, get rid of the old ones.

2007-01-15  Adam Roben  <aroben@apple.com>

        Reviewed by Anders.

        Fix comment.

        * html/HTMLScriptElement.cpp:
        (WebCore::HTMLScriptElement::shouldExecuteAsJavaScript):

2007-01-15  John Sullivan  <sullivan@apple.com>

        * platform/ContextMenu.cpp:
        (WebCore::ContextMenu::checkOrEnableIfNeeded):
        Leopard build fix; don't declare one of the case values twice

2007-01-15  Mitz Pettel  <mitz@webkit.org>

        Reviewed by Darin.

        - fix http://bugs.webkit.org/show_bug.cgi?id=8604
          rowspan does not work when set through javascript

        Covered by existing tests.

        * rendering/RenderTableCell.cpp:
        (WebCore::RenderTableCell::updateFromElement): Mark the section for grid recalc
        if row span or column span change.

2007-01-15  Adam Roben  <aroben@apple.com>

        Reviewed by Darin.

        Small context menu fixes.

        * platform/ContextMenu.cpp:
        (WebCore::ContextMenu::populate): Fix typo.
        (WebCore::ContextMenu::checkOrEnableIfNeeded): Disabled "No Guesses
        Found", and added all enum values explicitly.

2007-01-15  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Darin.

        http://bugs.webkit.org/show_bug.cgi?id=6272
        XMLHttpRequest freezes on getting a missing document with overridden Content-Length

        http://bugs.webkit.org/show_bug.cgi?id=6212
        Investigate disallowing some XMLHttpRequest headers from being set via setRequestHeader.

        Tests:
        - http/tests/xmlhttprequest/connection-error-sync.html
        - http/tests/xmlhttprequest/set-dangerous-headers.html

        * bindings/js/kjs_binding.cpp:
        (KJS::):
        (KJS::setDOMException): Added support for NETWORK_ERR. Changed the temporary 
        PERMISSION_DENIED error into a special case.

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::loadResourceSynchronously):
        * loader/FrameLoader.h:
        Return the error object to the caller. Removed an extra local variable for error, 
        which shadowed the one from enclosing block.

        * dom/XMLTokenizer.cpp:
        (WebCore::openFunc): 
        * xml/XSLTProcessor.cpp:
        (WebCore::docLoaderFunc): 
        Updated to pass an error object (currently ignored).

        * xml/xmlhttprequest.cpp:
        (WebCore::canSetRequestHeader): Added. The headers to block include the ones from 
        the current XMLHttpRequest draft plus "Via", which is blocked by Firefox.
        (WebCore::XMLHttpRequest::send): Raise an exception if a sync request results in 
        an error.
        (WebCore::XMLHttpRequest::setRequestHeader): Call canSetRequestHeader().
        * xml/xmlhttprequest.h:
        (WebCore::): Added NETWORK_ERR and a comment about PERMISSION_DENIED.

2007-01-15  Zack Rusin  <zack@kde.org>

        Optimizing rendering on the Qt platform. Mainly
        switching from client side QImage to QPixmap's.
        Also cleaning the the ScrollViewCanvasQt code
        quite a bit.

        * platform/graphics/ImageSource.h: use QPixmap
        * platform/graphics/qt/GraphicsContextQt.cpp:
        (WebCore::TransparencyLayer::TransparencyLayer):
        (WebCore::GraphicsContext::clip): clip rects when you can
        * platform/graphics/qt/ImageDecoderQt.cpp:
        (WebCore::ImageDecoderQt::ImageData::ImageData):
        (WebCore::ImageDecoderQt::ReadContext::read):
        (WebCore::ImageDecoderQt::ReadContext::readImageLines):
        (WebCore::ImageDecoderQt::imageAtIndex):
        * platform/graphics/qt/ImageDecoderQt.h: use QPixmap
        * platform/graphics/qt/ImageQt.cpp: QPixmap instead of QImage
        (WebCore::BitmapImage::draw):
        (WebCore::BitmapImage::drawTiled):
        * platform/graphics/qt/ImageSourceQt.cpp:
        (WebCore::):
        (WebCore::ImageSource::createFrameAtIndex):
        (WebCore::ImageSource::frameHasAlphaAtIndex):
        * platform/qt/ScrollViewCanvasQt.cpp: clean up
        (WebCore::ScrollViewCanvasQt::ScrollViewCanvasQt):
        (WebCore::ScrollViewCanvasQt::updateFrameView):
        (WebCore::ScrollViewCanvasQt::paintEvent):
        (WebCore::ScrollViewCanvasQt::mouseMoveEvent):
        (WebCore::ScrollViewCanvasQt::mousePressEvent):
        (WebCore::ScrollViewCanvasQt::mouseReleaseEvent):
        (WebCore::ScrollViewCanvasQt::handleKeyEvent):
        * platform/qt/ScrollViewCanvasQt.h:
        * platform/qt/ScrollViewQt.cpp: remove hacks
        (WebCore::ScrollView::ScrollView):
        (WebCore::ScrollView::setParentWidget):
        (WebCore::ScrollView::updateContents):

2007-01-15  Lars Knoll <lars@trolltech.com>

        Reviewed by Zack

        Fix weird crashes when running the layout tests. The
        reason was that I used KURL (and thus DeprecatedString)
        in a thread. Unfortunately that class is not threadsafe
        at all.

        * platform/network/qt/ResourceHandleManagerQt.cpp:
        (WebCore::RequestQt::RequestQt):
        (WebCore::RequestQt::setURL):
        (WebCore::ResourceHandleManager::add):
        (WebCore::ResourceHandleManager::cancel):
        (WebCore::ResourceHandleManager::receivedResponse):
        (WebCore::FileLoader::request):
        (WebCore::HostInfo::HostInfo):
        (WebCore::NetworkLoader::request):
        (WebCore::NetworkLoader::cancel):
        * platform/network/qt/ResourceHandleManagerQt.h:
        (WebCore::HostInfo::HostInfo):
        (WebCore::HostInfo::isLocalFile):

2007-01-15  Eric Seidel  <eric@webkit.org>

        Reviewed by rwlbuis.

        Make isValid check not malloc 3 SVGStringLists for every element.
        
        No test possible, performance fix only.

        * ksvg2/svg/SVGTests.cpp:
        (WebCore::SVGTests::isValid):

2007-01-15  Rob Buis  <buis@kde.org>

        Reviewed by Eric.

        Remove unused member var.

        * ksvg2/svg/SVGStyledElement.h:

2007-01-15  Rob Buis  <buis@kde.org>

        Reviewed by Eric.

        http://bugs.webkit.org/show_bug.cgi?id=12069
        Hit detection fails under some viewbox constraints

        Do not take viewBox into account when hit testing svg container.

        * rendering/RenderSVGContainer.cpp:
        (WebCore::RenderSVGContainer::nodeAtPoint):

2007-01-15  David Hyatt  <hyatt@apple.com>

        Fix  for 12275, negative margins confuse page breaks.

        Reviewed by Eric

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::paintChildren):

2007-01-15  Eric Seidel  <eric@webkit.org>

        Reviewed by mjs.
        
        SVG gradients do not notice stop additions
        http://bugs.webkit.org/show_bug.cgi?id=12192

        Test: svg/custom/gradient-add-stops.svg

        * ksvg2/svg/SVGGradientElement.cpp:
        (WebCore::SVGGradientElement::childrenChanged):
        * ksvg2/svg/SVGGradientElement.h:

2007-01-14  David Hyatt  <hyatt@apple.com>

        Fix for bug 10356, positioning doesn't work with <svg> elements in XHTML.  Change the requiresLayer
        check to use the DOM, since the old check would fail if the parent block had no element.

        Reviewed by Eric

        Added svg/custom/relative-positioning.html (absolute/fixed too)

        * rendering/RenderSVGContainer.cpp:
        (WebCore::RenderSVGContainer::requiresLayer):

2007-01-14  Eric Seidel  <eric@webkit.org>

        Reviewed by hyatt.
        
        SVG does not correctly handle float: left
        http://bugs.webkit.org/show_bug.cgi?id=12210

        Test: svg/custom/svg-float-border-padding.xml

        * rendering/RenderSVGContainer.cpp:
        (WebCore::RenderSVGContainer::paint):

2007-01-14  David Hyatt  <hyatt@apple.com>

        More work to fix 10145, regression where form elements don't break properly.  Make sure to really use
        the parent of the replaced element's whitespace value everywhere.

        Reviewed by olliej

        fast/replaced/three-selects-break.html

        * rendering/bidi.cpp:
        (WebCore::RenderBlock::findNextLineBreak):

2007-01-14  Sam Weinig  <sam@webkit.org>

        Reviewed by Darin and then by Mitz.

        Patch for http://bugs.webkit.org/show_bug.cgi?id=12228
        Cleanup assorted CSS classes

        * css/CSSBorderImageValue.cpp:
        (WebCore::CSSBorderImageValue::CSSBorderImageValue):
        (WebCore::CSSBorderImageValue::cssText):
        * css/CSSBorderImageValue.h:
        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::valueForLength):
        (WebCore::valueForBorderStyle):
        (WebCore::valueForTextAlign):
        (WebCore::valueForShadow):
        (WebCore::getPositionOffsetValue):
        (WebCore::CSSComputedStyleDeclaration::cssText):
        (WebCore::primitiveValueFromLength):
        (WebCore::CSSComputedStyleDeclaration::getPropertyCSSValue):
        (WebCore::CSSComputedStyleDeclaration::getPropertyPriority):
        (WebCore::CSSComputedStyleDeclaration::removeProperty):
        (WebCore::CSSComputedStyleDeclaration::setProperty):
        (WebCore::CSSComputedStyleDeclaration::length):
        (WebCore::CSSComputedStyleDeclaration::item):
        * css/CSSComputedStyleDeclaration.h:
        * css/CSSCursorImageValue.cpp:
        (WebCore::CSSCursorImageValue::CSSCursorImageValue):
        * css/CSSCursorImageValue.h:
        * css/CSSGrammar.y:
        * css/CSSImageValue.cpp:
        * css/CSSImageValue.h:
        * css/CSSInheritedValue.cpp:
        * css/CSSInheritedValue.h:
        * css/CSSInitialValue.cpp:
        * css/CSSInitialValue.h:
        * css/CSSMutableStyleDeclaration.cpp:
        (WebCore::CSSMutableStyleDeclaration::CSSMutableStyleDeclaration):
        (WebCore::CSSMutableStyleDeclaration::operator=):
        (WebCore::CSSMutableStyleDeclaration::getPropertyValue):
        (WebCore::CSSMutableStyleDeclaration::get4Values):
        (WebCore::CSSMutableStyleDeclaration::getShorthandValue):
        (WebCore::CSSMutableStyleDeclaration::getPropertyCSSValue):
        (WebCore::CSSMutableStyleDeclaration::removeProperty):
        (WebCore::CSSMutableStyleDeclaration::setChanged):
        (WebCore::CSSMutableStyleDeclaration::getPropertyPriority):
        (WebCore::CSSMutableStyleDeclaration::getPropertyShorthand):
        (WebCore::CSSMutableStyleDeclaration::isPropertyImplicit):
        (WebCore::CSSMutableStyleDeclaration::setProperty):
        (WebCore::CSSMutableStyleDeclaration::setImageProperty):
        (WebCore::CSSMutableStyleDeclaration::parseDeclaration):
        (WebCore::CSSMutableStyleDeclaration::addParsedProperties):
        (WebCore::CSSMutableStyleDeclaration::setLengthProperty):
        (WebCore::CSSMutableStyleDeclaration::cssText):
        (WebCore::CSSMutableStyleDeclaration::merge):
        (WebCore::CSSMutableStyleDeclaration::removePropertiesInSet):
        * css/CSSMutableStyleDeclaration.h:
        (WebCore::CSSMutableStyleDeclaration::setProperty):
        (WebCore::CSSMutableStyleDeclaration::removeProperty):
        * css/CSSNamespace.h:
        (WebCore::CSSNamespace::CSSNamespace):
        * css/CSSPrimitiveValue.cpp:
        (WebCore::isCSSTokenizerIdentifier):
        (WebCore::CSSPrimitiveValue::CSSPrimitiveValue):
        (WebCore::CSSPrimitiveValue::cleanup):
        (WebCore::CSSPrimitiveValue::computeLengthInt):
        (WebCore::CSSPrimitiveValue::computeLengthIntForLength):
        (WebCore::CSSPrimitiveValue::computeLengthShort):
        (WebCore::CSSPrimitiveValue::computeLengthFloat):
        (WebCore::CSSPrimitiveValue::setFloatValue):
        (WebCore::scaleFactorForConversion):
        (WebCore::CSSPrimitiveValue::getFloatValue):
        (WebCore::CSSPrimitiveValue::setStringValue):
        (WebCore::CSSPrimitiveValue::getStringValue):
        (WebCore::CSSPrimitiveValue::parseString):
        (WebCore::CSSPrimitiveValue::getIdent):
        (WebCore::CSSPrimitiveValue::cssText):
        * css/CSSPrimitiveValue.h:
        (WebCore::CSSPrimitiveValue::getCounterValue):
        (WebCore::CSSPrimitiveValue::getRectValue):
        (WebCore::CSSPrimitiveValue::getRGBColorValue):
        (WebCore::CSSPrimitiveValue::getPairValue):
        (WebCore::CSSPrimitiveValue::getDashboardRegionValue):
        * css/CSSProperty.cpp:
        (WebCore::operator==):
        * css/CSSProperty.h:
        (WebCore::CSSProperty::operator=):
        * css/CSSQuirkPrimitiveValue.h:
        (WebCore::CSSQuirkPrimitiveValue::CSSQuirkPrimitiveValue):
        * css/CSSRuleList.cpp:
        (WebCore::CSSRuleList::CSSRuleList):
        (WebCore::CSSRuleList::deleteRule):
        (WebCore::CSSRuleList::insertRule):
        * css/CSSRuleList.h:
        (WebCore::CSSRuleList::item):
        * css/CSSSelector.cpp:
        (WebCore::CSSSelector::print):
        (WebCore::CSSSelector::specificity):
        (WebCore::CSSSelector::extractPseudoType):
        (WebCore::CSSSelector::operator==):
        (WebCore::CSSSelector::selectorText):
        * css/CSSSelector.h:
        (WebCore::CSSSelector::CSSSelector):
        (WebCore::CSSSelector::~CSSSelector):
        (WebCore::CSSSelector::append):
        (WebCore::CSSSelector::next):
        (WebCore::CSSSelector::pseudoType):
        (WebCore::CSSSelector::hasTag):
        (WebCore::CSSSelector::hasAttribute):
        * css/CSSStyleDeclaration.cpp:
        (WebCore::propertyID):
        (WebCore::CSSStyleDeclaration::getPropertyPriority):
        (WebCore::CSSStyleDeclaration::getPropertyShorthand):
        (WebCore::CSSStyleDeclaration::isPropertyImplicit):
        (WebCore::CSSStyleDeclaration::setProperty):
        (WebCore::CSSStyleDeclaration::isPropertyName):
        (WebCore::CSSStyleDeclaration::parentRule):
        (WebCore::CSSStyleDeclaration::diff):
        (WebCore::CSSStyleDeclaration::copyPropertiesInSet):
        * css/CSSStyleDeclaration.h:
        * css/Counter.h:
        (WebCore::Counter::Counter):
        (WebCore::Counter::listStyleNumber):
        * css/csshelper.cpp:
        (WebCore::parseURL):
        * css/csshelper.h:
        * css/cssparser.h:
        (WebCore::domString):
        (WebCore::atomicString):
        (WebCore::CSSParser::operator|):
        * css/cssstyleselector.cpp:
        (WebCore::CSSStyleSelector::matchRulesForList):
        (WebCore::CSSStyleSelector::checkSelector):
        (WebCore::CSSStyleSelector::checkOneSelector):
        (WebCore::CSSRuleSet::addRule):

2007-01-14  Mitz Pettel  <mitz@webkit.org>

        Reviewed by Adam.

        - fix http://bugs.webkit.org/show_bug.cgi?id=12264
          REGRESSION (r18843): Webkit crashes on 43Folders.com home page

        Test: fast/tokenizer/ignore-tags-in-iframe.html

        * html/HTMLParser.cpp:
        (WebCore::HTMLParser::reset): Removed unused inSelect member variable.
        (WebCore::HTMLParser::selectCreateErrorCheck): Ditto.
        (WebCore::HTMLParser::processCloseTag): Ditto.
        * html/HTMLParser.h: Ditto.
        * html/HTMLTokenizer.cpp:
        (WebCore::HTMLTokenizer::parseTag): Changed not to process <pre>, <listing>,
        <script>, <style>, <title>, <textarea> and <xmp> if the parser is in skip mode
        (waiting for a close tag of an element whose contents are not parsed,
        such as iframe).
        * html/HTMLTokenizer.h:
        (WebCore::HTMLTokenizer::State::setInStyle): Removed unused bit.
        (WebCore::HTMLTokenizer::State::): Ditto.

2007-01-14  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Darin.

        http://bugs.webkit.org/show_bug.cgi?id=12258
        fast/tokenizer/002 test broken

        * loader/FrameLoader.h: Added a flush parameter to write().
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::write): Ditto.
        (WebCore::FrameLoader::endIfNotLoading): Instead of poorly duplicating the logic in write(),
        call it directly.

2007-01-14  Adam Roben  <aroben@apple.com>

        Reviewed by Maciej.

        Make sure our whitelisting of the type and language attributes of the
        <script> element is enforced in all HTMLTokenizer/HTMLScriptElement
        code paths.

        All layout tests pass.

        * html/HTMLScriptElement.cpp:
        (WebCore::HTMLScriptElement::shouldExecuteAsJavaScript): New method to
        determine whether the script should be executed, given its type and
        language attributes.
        (WebCore::HTMLScriptElement::evaluateScript): Check type/language
        before executing.
        * html/HTMLScriptElement.h: Added new declarations.
        * html/HTMLTokenizer.cpp:
        (WebCore::HTMLTokenizer::begin): Made scriptSrc a String. 
        (WebCore::HTMLTokenizer::scriptHandler): Check
        shouldExecuteAsJavaScript before executing.
        (WebCore::HTMLTokenizer::notifyFinished): Ditto.
        (WebCore::HTMLTokenizer::parseTag): Moved type/language checking from
        here to HTMLScriptElement::shouldExecuteAsJavaScript.
        * html/HTMLTokenizer.h: Made scriptSrc a String, and removed the
        javascript member.

2007-01-14  David Hyatt  <hyatt@apple.com>

        Make sure floats are avoided if you have non-auto column property values.  Fixes the crazy layout
        on http://weblogs.mozillazine.org/roc.

        Reviewed by mitz

        Added fast/multicol/float-avoidance.html

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::avoidsFloats):

2007-01-14  David Hyatt  <hyatt@apple.com>

        Fix for 10145, regression where line breaks are not being honored between adjacent replaced elements.
        When checking for break opportunities where replaced elements are involved, we ignore their white-space
        values and use their parents' instead.  The assumption/idea behind this change is that because the element
        is replaced, its white-space value is irrelevant except as a means of applying style to its interior.

        The CSS spec does not cover this situation, so we're implementing this based off what other browsers seem to
        do.

        Reviewed by aroben

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::CSSComputedStyleDeclaration::getPropertyCSSValue):
        * css/CSSValueKeywords.in:
        * css/cssparser.cpp:
        (WebCore::CSSParser::parseValue):
        * css/cssstyleselector.cpp:
        (WebCore::CSSStyleSelector::applyProperty):
        * page/EventHandler.cpp:
        (WebCore::EventHandler::EventHandler):
        (WebCore::EventHandler::clear):
        (WebCore::EventHandler::handleWheelEvent):
        * page/EventHandler.h:
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::calcHeight):
        * rendering/RenderLayer.cpp:
        (WebCore::Marquee::Marquee):
        (WebCore::Marquee::start):
        (WebCore::Marquee::updateMarqueePosition):
        (WebCore::Marquee::updateMarqueeStyle):
        (WebCore::Marquee::timerFired):
        * rendering/RenderLayer.h:
        * rendering/RenderPartObject.cpp:
        (WebCore::RenderPartObject::viewCleared):
        * rendering/RenderStyle.h:
        (WebCore::):
        * rendering/bidi.cpp:
        (WebCore::RenderBlock::findNextLineBreak):

2007-01-13  David Hyatt  <hyatt@apple.com>

        While optimizing form controls and fixing their clipping, I caused this text zoom regression.  The layout
        of text is necessary because it needs to recalc minmaxwidth.  This is still a really unfortunate
        bit of code... since a lot of properties don't apply to text (e.g., borders), we're marking text renderers
        as dirty when we don't have to.

        Reviewed by mitz

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

2007-01-13  Lars Knoll <lars@trolltech.com>

        Reviewed by Alexey

        String::format() was relying on undefined behaviour, which
        happened to work on lots of systems (Mac and 32bit Linux at least)
        but broke badly on 64bit Linux.
        
        * platform/String.cpp:
        (WebCore::String::format):

2007-01-13  Martin Reddy  <reddy@pixar.com>

        Fix for bug 11924: WebCore would crash on any HTML content
        with a non-empty <table> tag in it on a 64-bit machine. The
        size_t (64bit) vs int (32bit) cast is now fixed in ensureRows,
        and the clients of this function have been updated to check
        for a false return code.

        Reviewed by Darin, landed by Lars

        * rendering/RenderTableSection.cpp:
        (WebCore::RenderTableSection::addChild):
        (WebCore::RenderTableSection::ensureRows):
        (WebCore::RenderTableSection::recalcCells):

2007-01-13  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Darin.

        http://bugs.webkit.org/show_bug.cgi?id=12165
        REGRESSION: text encoding problem at jn.sapo.pt

        Test: fast/encoding/script-in-head.html

        * loader/TextResourceDecoder.cpp:
        (WebCore::TextResourceDecoder::checkForHeadCharset):
        Ignore tags within <script> elements in head, just like we do for <title>.

2007-01-13  Lars Knoll <lars@trolltech.com>

        Reviewed by Maciej

        Don't crash when constructing a GraphicsContext with a 0
        PlatformGraphicsContext and don't do anything if painting
        is disabled.

        * platform/graphics/qt/GraphicsContextQt.cpp:
        (WebCore::GraphicsContextPlatformPrivate::GraphicsContextPlatformPrivate):
        (WebCore::GraphicsContext::origin):
        (WebCore::GraphicsContext::setPlatformFont):
        (WebCore::GraphicsContext::setPlatformStrokeColor):
        (WebCore::GraphicsContext::setPlatformStrokeStyle):
        (WebCore::GraphicsContext::setPlatformStrokeThickness):
        (WebCore::GraphicsContext::setPlatformFillColor):

2007-01-13  Eric Seidel  <eric@webkit.org>

        Reviewed by hyatt.

        RichDraw demo does not live-update in Safari
        (SVG elements should ignore CSS position)
        http://bugs.webkit.org/show_bug.cgi?id=10364

        * css/cssstyleselector.cpp:
        (WebCore::CSSStyleSelector::adjustRenderStyle): ignore position for everything but <svg>
        * ksvg2/svg/SVGStyledElement.cpp:
        (WebCore::SVGStyledElement::rebuildRenderer): move path generation into layout()
        * rendering/RenderContainer.cpp:
        (WebCore::RenderContainer::layout): ASSERT kids marked as having completed layout
        * rendering/RenderPath.cpp:
        (WebCore::RenderPath::layout): move path generation into layout()
        * rendering/RenderSVGContainer.cpp:
        (WebCore::RenderSVGContainer::layout): ASSERT kids marked as having completed layout

2007-01-12  David Hyatt  <hyatt@apple.com>

        Add support for column rules.

        Reviewed by bdash

        fast/multicol/column-rules.html

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::paintColumns):
        * rendering/RenderStyle.h:
        (WebCore::RenderStyle::columnRuleIsTransparent):

2007-01-12  David Hyatt  <hyatt@apple.com>

        Make multicolumn layout work with floats.

        Reviewed by andersca

        Added fast/multicol/float-multicol.html

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::layoutBlock):
        (WebCore::RenderBlock::paintColumns):
        (WebCore::RenderBlock::paintObject):
        * rendering/RenderBlock.h:

2007-01-12  David Kilzer  <ddkilzer@kilzer.net>

        Reviewed by Maciej.

        - fix http://bugs.webkit.org/show_bug.cgi?id=12239
          REGRESSION (r18816-r18818): Assertion failure in 
          WebCore::Length::Length[in-charge](int, WebCore::LengthType, bool)

        Test: fast/css/line-height.html

        * rendering/RenderTextControl.cpp:
        (WebCore::RenderTextControl::createInnerTextStyle): Use a float to create a percent Length.

2007-01-12  Anders Carlsson  <acarlsson@apple.com>

        Reviewed by Darin.

        Use unsigned long for identifiers instead of Objective-C objects.
        
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::loadResourceSynchronously):
        (WebCore::FrameLoader::startLoadingMainResource):
        (WebCore::FrameLoader::startLoading):
        (WebCore::FrameLoader::assignIdentifierToInitialRequest):
        (WebCore::FrameLoader::opened):
        (WebCore::FrameLoader::sendRemainingDelegateMessages):
        (WebCore::FrameLoader::requestFromDelegate):
        (WebCore::FrameLoader::loadedResourceFromMemoryCache):
        * loader/FrameLoader.h:
        * loader/FrameLoaderClient.h:
        * loader/ResourceLoader.cpp:
        (WebCore::ResourceLoader::ResourceLoader):
        (WebCore::ResourceLoader::willSendRequest):
        * loader/ResourceLoader.h:
        (WebCore::ResourceLoader::setIdentifier):
        (WebCore::ResourceLoader::identifier):
        * page/Page.cpp:
        (WebCore::Page::Page):
        (WebCore::Page::createUniqueIdentifier):
        * page/Page.h:
        * platform/graphics/svg/SVGImageEmptyClients.h:
        (WebCore::SVGEmptyFrameLoaderClient::assignIdentifierToInitialRequest):
        (WebCore::SVGEmptyFrameLoaderClient::dispatchWillSendRequest):
        (WebCore::SVGEmptyFrameLoaderClient::dispatchDidReceiveAuthenticationChallenge):
        (WebCore::SVGEmptyFrameLoaderClient::dispatchDidCancelAuthenticationChallenge):
        (WebCore::SVGEmptyFrameLoaderClient::dispatchDidReceiveResponse):
        (WebCore::SVGEmptyFrameLoaderClient::dispatchDidReceiveContentLength):
        (WebCore::SVGEmptyFrameLoaderClient::dispatchDidFinishLoading):
        (WebCore::SVGEmptyFrameLoaderClient::dispatchDidFailLoading):
        (WebCore::SVGEmptyFrameLoaderClient::incrementProgress):
        (WebCore::SVGEmptyFrameLoaderClient::completeProgress):

2007-01-12  Mitz Pettel  <mitz@webkit.org>

        Reviewed by Darin.

        - fix http://bugs.webkit.org/show_bug.cgi?id=12235
          REGRESSION (r18815): Marquees do not scroll

        * css/cssstyleselector.cpp:
        (WebCore::CSSStyleSelector::applyProperty): Apply the '-webkit-marquee' value
        of 'overflow-x' and 'overflow-y'.

2007-01-12  Justin Garcia  <justin.garcia@apple.com>

        Reviewed by hyatt
        
        <rdar://problem/4875425>
        EBay, GMail, and GoogleDocs RTEs font size popups don't work

        Changed execCommand("FontSize", ...) to match the spec 
        and the behavior of other browsers.  It expects a number, 
        n, which, the spec says can be 1 through 7.  Other browsers 
        perform the font size change by creating a font element 
        wrapper with size="n".  We convert n into one of the absolute 
        size CSS keywords (x-small, medium, etc.).

        * editing/JSEditor.cpp: Call cssValueFromFontSizeNumber.  If
        successful, perform the style change.
        * html/HTMLFontElement.cpp:
        (WebCore::HTMLFontElement::cssValueFromFontSizeNumber):  Added.
        Moved this code from parsedMappedAttribute so that it could be
        called from the Editor.
        (WebCore::HTMLFontElement::parseMappedAttribute): Moved code into
        cssValueFromFontSizeNumber.
        * html/HTMLFontElement.h:

2007-01-12  David Hyatt  <hyatt@apple.com>

        Fix for bug 11598, implement lightweight control clipping mechanism for
        buttons, list boxes, and dropdown lists.  Make sure list box respects
        scrollLeft/Top/Width/Height as well as clientWidth/Height.

        Fix bugs in RenderStyle::diff.  CursorData was not being compared properly.
        vertical-align had a non-inline display check that was wrong (preventing
        dynamic changes to keyword-based vertical-align from working).

        Reviewed by mitz

        * page/EventHandler.cpp:
        (WebCore::EventHandler::selectClosestWordFromMouseEvent):
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::layout):
        (WebCore::RenderBlock::layoutBlock):
        (WebCore::RenderBlock::determineHorizontalPosition):
        (WebCore::RenderBlock::layoutBlockChildren):
        (WebCore::RenderBlock::paint):
        (WebCore::RenderBlock::fillHorizontalSelectionGap):
        (WebCore::RenderBlock::nodeAtPoint):
        (WebCore::RenderBlock::layoutColumns):
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::computeAbsoluteRepaintRect):
        * rendering/RenderBox.h:
        * rendering/RenderButton.cpp:
        (WebCore::RenderButton::setStyle):
        (WebCore::RenderButton::controlClipRect):
        * rendering/RenderButton.h:
        (WebCore::RenderButton::hasControlClip):
        * rendering/RenderFlexibleBox.cpp:
        (WebCore::RenderFlexibleBox::layoutBlock):
        (WebCore::RenderFlexibleBox::layoutHorizontalBox):
        (WebCore::RenderFlexibleBox::layoutVerticalBox):
        * rendering/RenderFlow.cpp:
        (WebCore::RenderFlow::addFocusRingRects):
        * rendering/RenderListBox.cpp:
        (WebCore::RenderListBox::itemBoundingBoxRect):
        (WebCore::RenderListBox::paintObject):
        (WebCore::RenderListBox::itemHeight):
        (WebCore::RenderListBox::verticalScrollbarWidth):
        (WebCore::RenderListBox::scrollWidth):
        (WebCore::RenderListBox::scrollHeight):
        (WebCore::RenderListBox::scrollLeft):
        (WebCore::RenderListBox::setScrollLeft):
        (WebCore::RenderListBox::scrollTop):
        (WebCore::RenderListBox::setScrollTop):
        (WebCore::RenderListBox::controlClipRect):
        * rendering/RenderListBox.h:
        (WebCore::RenderListBox::hasControlClip):
        * rendering/RenderMenuList.cpp:
        (WebCore::RenderMenuList::setStyle):
        (WebCore::RenderMenuList::controlClipRect):
        * rendering/RenderMenuList.h:
        (WebCore::RenderMenuList::hasControlClip):
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::verticalScrollbarWidth):
        (WebCore::RenderObject::horizontalScrollbarHeight):
        (WebCore::RenderObject::clientWidth):
        (WebCore::RenderObject::clientHeight):
        (WebCore::RenderObject::setStyle):
        * rendering/RenderObject.h:
        (WebCore::RenderObject::hasControlClip):
        (WebCore::RenderObject::controlClipRect):
        (WebCore::RenderObject::contentWidth):
        (WebCore::RenderObject::contentHeight):
        * rendering/RenderStyle.cpp:
        (WebCore::StyleVisualData::StyleVisualData):
        (WebCore::cursorDataEqvuialent):
        (WebCore::StyleInheritedData::operator==):
        (WebCore::CursorList::operator==):
        (WebCore::RenderStyle::diff):
        * rendering/RenderStyle.h:
        (WebCore::LengthBox::operator!=):
        (WebCore::StyleVisualData::operator==):
        (WebCore::CursorData::operator==):
        (WebCore::CursorData::operator!=):
        (WebCore::CursorList::operator!=):
        (WebCore::RenderStyle::setTableLayout):
        * rendering/bidi.cpp:
        (WebCore::RenderBlock::layoutInlineChildren):

2007-01-12  David Hyatt  <hyatt@apple.com>

        Fix for bug 9934, smaller line heights should not be allowed on
        text fields.

        Reviewed by darin

        * rendering/RenderTextControl.cpp:
        (WebCore::RenderTextControl::createInnerTextStyle):

2007-01-12  Mitz Pettel  <mitz@webkit.org>

        Reviewed by Hyatt.

        - http://bugs.webkit.org/show_bug.cgi?id=12215
          Treat 'overflow' and '-webkit-border-radius' as shorthands when parsing and
          when removing.

        Test: fast/css/remove-shorthand.html (updated)

        * css/CSSMutableStyleDeclaration.cpp:
        (WebCore::initShorthandMap):
        * css/cssparser.cpp:
        (WebCore::CSSParser::parseValue):

2007-01-12  Rob Buis  <buis@kde.org>

        Reviewed by Mitz.

        Do not mix up JSSVGPolygonElement and JSSVGPolylineElement.

        * bindings/js/JSSVGElementWrapperFactory.cpp:

2007-01-12  Kevin Decker <kdecker@apple.com>

        Reviewed by andersca.

        Fixed: <rdar://problem/4701326>21.2 ms launch time regression spent in +[WebPluginDatabase installedPlugins]

        * dom/DOMImplementation.cpp:
        (WebCore::DOMImplementation::createDocument): Added a guard clause for text/html which used to be in WebKit before a lot of the 
        loader plumbing was moved to WebCore.  Pinging the plug-in database to ask it if it supports a given mime type has the side 
        effect of reading from disk on first call, therefore such a check should be a last resort.  

2007-01-12  Mitz Pettel  <mitz@webkit.org>

        Reviewed by Darin.

        - fix http://bugs.webkit.org/show_bug.cgi?id=12223
          REGRESSION: Leaks under CSSStyleSelector::applyProperty

        No test possible (no change to functionality).

        * rendering/RenderObject.h: Removed unused forward declaration.
        * rendering/RenderStyle.cpp:
        (WebCore::StyleRareNonInheritedData::~StyleRareNonInheritedData):
        Delete shadow data.

2007-01-12  Anders Carlsson  <acarlsson@apple.com>

        Build fix.
        
        * WebCore.xcodeproj/project.pbxproj:
        Remove SubresourceLoaderMac.mm.
        
2007-01-12  Lars Knoll <lars@trolltech.com>

        Reviewed by Darin and Anders.

        Make some more of the loader code platform independent.

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::clear):
        (WebCore::FrameLoader::checkLoadCompleteForThisFrame):
        (WebCore::FrameLoader::urlSelected):
        (WebCore::FrameLoader::createEmptyDocument):
        (WebCore::FrameLoader::setTitle):
        (WebCore::FrameLoader::originalRequestURL):
        (WebCore::FrameLoader::referrer):
        * loader/SubresourceLoader.cpp:
        (WebCore::SubresourceLoader::SubresourceLoader):
        (WebCore::SubresourceLoader::load):
        (WebCore::SubresourceLoader::create):
        (WebCore::SubresourceLoader::willSendRequest):
        (WebCore::SubresourceLoader::didReceiveResponse):
        (WebCore::SubresourceLoader::didReceiveData):
        (WebCore::SubresourceLoader::didFinishLoading):
        (WebCore::SubresourceLoader::didFail):
        (WebCore::SubresourceLoader::didCancel):
        (WebCore::SubresourceLoader::stopLoading):
        * loader/SubresourceLoader.h:
        * loader/mac/FrameLoaderMac.mm:
        * loader/mac/SubresourceLoaderMac.mm: Removed.
        * loader/qt/FrameLoaderQt.cpp:

2007-01-12  Lars Knoll <lars@trolltech.com>

        Reviewed by Zack

        Valgrind reported uninitialized variable.

        * platform/network/qt/ResourceHandleManagerQt.cpp:
        (WebCore::FileLoader::request):

2007-01-12  Mitz Pettel  <mitz@webkit.org>

        Reviewed by rwlbuis.

        - add missing null check in new fixed table layout code

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

2007-01-12  Lars Knoll <lars@trolltech.com>

        Fix the Qt build after the Authenitcation changes.

        * WebCore.pro:
        * platform/network/ResourceHandleInternal.h:

2007-01-12  David Hyatt  <hyatt@apple.com>

        Fix for bug 9569.  Make sure the selection offset for selection roots excludes border and padding.

        Reviewed by Eric

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::leftSelectionOffset):
        (WebCore::RenderBlock::rightSelectionOffset):

2007-01-11  David Hyatt  <hyatt@apple.com>

        Fix for bug 8705, readonly text fields should not get focus rings.  Add a rule to that effect to
        html4.css and then also add readonly as a special case for style sharing so that we can retain the
        performance boost from sharing styles on inputs.

        Reviewed by bdash

        * css/cssstyleselector.cpp:
        (WebCore::CSSStyleSelector::canShareStyleWithElement):
        (WebCore::CSSStyleSelector::checkOneSelector):
        * css/html4.css:

2007-01-11  David Hyatt  <hyatt@apple.com>

        Fix for bug 11595.  Autoscrolling of layers didn't really work at all unless the layer was coincidentally
        in the root layer's coordinate space.  The event point was an absolute position within the document, but
        the layer's rect was only local coords.  This patch makes sure to use absolute bounds for the layer
        when comparing it with the point.

        This is covered by the scrollRevealButton test case already in the tree... the results change to be more
        correct.

        Reviewed by ggaren

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

2007-01-11  Brady Eidson  <beidson@apple.com>

        Reviewed by Oliver

        -Move more HTTP Auth handling towards ResourceHandle, away from ResourceHandleClient
        -Make more of ResourceLoader cross-platform

        * loader/ResourceLoader.cpp:
        (WebCore::ResourceLoader::ResourceLoader):
        (WebCore::ResourceLoader::releaseResources):
        (WebCore::ResourceLoader::didCancel):
        (WebCore::ResourceLoader::didReceiveAuthenticationChallenge):
        (WebCore::ResourceLoader::didCancelAuthenticationChallenge):
        (WebCore::ResourceLoader::receivedCancellation):
        * loader/ResourceLoader.h:
        (WebCore::ResourceLoader::willStopBufferingData):
        (WebCore::ResourceLoader::didCancelAuthenticationChallenge):
        (WebCore::ResourceLoader::willCacheResponse):
        * loader/mac/ResourceLoaderMac.mm:
        * platform/network/ResourceHandle.h:
        * platform/network/ResourceHandleClient.h:
        (WebCore::ResourceHandleClient::willStopBufferingData):
        * platform/network/ResourceHandleInternal.h:
        (WebCore::ResourceHandleInternal::ResourceHandleInternal):
        * platform/network/mac/ResourceHandleMac.mm:
        (WebCore::ResourceHandle::didReceiveAuthenticationChallenge):
        (WebCore::ResourceHandle::didCancelAuthenticationChallenge):
        (WebCore::ResourceHandle::receivedCredential):
        (WebCore::ResourceHandle::receivedRequestToContinueWithoutCredential):
        (WebCore::ResourceHandle::receivedCancellation):
        (WebCore::ResourceHandle::clearAuthentication):
        (-[WebCoreResourceHandleAsDelegate connection:didReceiveAuthenticationChallenge:]):
        (-[WebCoreResourceHandleAsDelegate connection:didCancelAuthenticationChallenge:]):
        (-[WebCoreResourceHandleAsDelegate useCredential:forAuthenticationChallenge:]):
        (-[WebCoreResourceHandleAsDelegate continueWithoutCredentialForAuthenticationChallenge:]):
        (-[WebCoreResourceHandleAsDelegate cancelAuthenticationChallenge:]):

2007-01-11  David Hyatt  <hyatt@apple.com>

        A hit test is returning a null renderer.  Make sure to null-check it in the autoscroll code.
        This really shouldn't happen, but I'm just going to bullet proof for now given that it's happening
        on the front page of yahoo.com!

        Reviewed by mark

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

2007-01-11  David Hyatt  <hyatt@apple.com>

        Force column-width to parse in strict mode so that there is no confusion when it is used in the columns
        shorthand (it can be mistaken for column-count otherwise).

        Reviewed by Mark

        fast/multicol/columns-shorthand-parsing.html

        * css/cssparser.cpp:
        (WebCore::CSSParser::parseValue):

2007-01-11  Mitz Pettel  <mitz@webkit.org>

        Reviewed by Hyatt.

        - fix http://bugs.webkit.org/show_bug.cgi?id=12124
          RenderTable::section{Above,Below}() can return the wrong answer for the {footer,header}

        * rendering/RenderTable.cpp:
        (WebCore::resetSectionPointerIfNotBefore): Added this function to help with
        checking if a section being inserted is the going to be the first of its kind.
        (WebCore::RenderTable::addChild): Changed to maintain the pointers to the
        header, the footer, the caption and the first table body properly when objects
        are inserted in the middle. Also changed to make the first caption win over
        any other captions. This matches Firefox and what already used to happen when a
        section recalc took place.
        (WebCore::RenderTable::layout): Changed to use sectionBelow() for iterating
        over the sections from top to bottom.
        (WebCore::RenderTable::calcBorderLeft): Changed to really find the section
        containing the first row.
        (WebCore::RenderTable::calcBorderRight): Ditto.
        (WebCore::RenderTable::sectionAbove): Fixed a bug when the last section was
        skipped if the input was the footer.
        (WebCore::RenderTable::sectionBelow): Ditto for "first" and "header"
        respectively.

2007-01-11  Mitz Pettel  <mitz@webkit.org>

        Reviewed by Hyatt.

        - fix http://bugs.webkit.org/show_bug.cgi?id=12115
          RTL text is jumbled on display

        Fixed fixed table layout. Implemented an algorithm that matches the behavior
        of Firefox, up to rounding errors.

        Fixes three existing table tests.

        * rendering/FixedTableLayout.cpp:
        Undid accidental search-and-replace of "width" to "m_width" in the comments.
        Removed an outdated comment, since WebKit no longer honors table-layout:fixed
        for variable-width tables.
        (WebCore::FixedTableLayout::calcWidthArray): Fixed the logic that finds the
        first row. Changed to divide the width specified for a cell that spans multiple
        columns between the columns rather than assign its entire width to each column.
        (WebCore::FixedTableLayout::calcMinMaxWidth):
        (WebCore::FixedTableLayout::layout): Implemented the behavior observed in
        Firefox.
        * rendering/FixedTableLayout.h:

2007-01-11  Mitz Pettel  <mitz@webkit.org>

        Reviewed by Hyatt.

        - fix http://bugs.webkit.org/show_bug.cgi?id=8438
          iExploder(#460): Assertion failure in RenderObject::drawBorder()

        Test: fast/block/basic/fieldset-stretch-to-legend.html

        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::calcWidth): Stretch to the minimum intrinsic
        width if the object requires it.
        (WebCore::RenderBox::calcHorizontalMargins): Some style cleanup.
        (WebCore::RenderBox::calcAbsoluteHorizontal): Stretch to the minimum
        intrinsic width if the object requires it.
        * rendering/RenderBox.h:
        (WebCore::RenderBox::stretchesToMinIntrinsicWidth): Added. Returns false.
        * rendering/RenderFieldset.cpp:
        (WebCore::RenderFieldset::calcMinMaxWidth): Overloaded RenderBlock's
        implementation to ensure that the legend's will fit in the fieldset's
        minimum intrinsic width.
        (WebCore::RenderFieldset::findLegend): Made const.
        (WebCore::RenderFieldset::paintBoxDecorations):
        (WebCore::RenderFieldset::paintBorderMinusLegend): Fixed the behavior when
        the legend does overflow the fieldset. This is the part of the fix that
        prevents the assertion failure. If the legend intersects with a corner of
        the fieldset's border, that corner will not be painted, even if it is not
        completely occluded. This edge case can be improved with clipping in the
        future. Added FIXME to implement border-radius.
        * rendering/RenderFieldset.h:
        (WebCore::RenderFieldset::stretchesToMinIntrinsicWidth): Overloaded to
        return true.

2007-01-11  Brady Eidson  <beidson@apple.com>

        Reviewed by Build Fix Karma

        I broke the release build (debug build passed)

        * platform/network/mac/AuthenticationMac.mm:
        (WebCore::core):

2007-01-11  Brady Eidson  <beidson@apple.com>

        Reviewed by Anders

        Rewrites HTTP Authentication setting up a more platform-independent structure

        * WebCore.exp:
        * WebCore.xcodeproj/project.pbxproj:
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::didReceiveAuthenticationChallenge):
        (WebCore::FrameLoader::didCancelAuthenticationChallenge):
        * loader/FrameLoader.h:
        * loader/FrameLoaderClient.h:
        * loader/ResourceLoader.cpp:
        (WebCore::ResourceLoader::ResourceLoader):
        (WebCore::ResourceLoader::didCancel):
        * loader/ResourceLoader.h:
        (WebCore::ResourceLoader::didReceiveAuthenticationChallenge):
        (WebCore::ResourceLoader::didCancelAuthenticationChallenge):
        (WebCore::ResourceLoader::receivedCredential):
        (WebCore::ResourceLoader::receivedRequestToContinueWithoutCredential):
        (WebCore::ResourceLoader::receivedCancellation):
        * loader/mac/FrameLoaderMac.mm:
        * loader/mac/ResourceLoaderMac.mm:
        (WebCore::ResourceLoader::didReceiveAuthenticationChallenge):
        (WebCore::ResourceLoader::didCancelAuthenticationChallenge):
        (WebCore::ResourceLoader::receivedCredential):
        (WebCore::ResourceLoader::receivedRequestToContinueWithoutCredential):
        (WebCore::ResourceLoader::receivedCancellation):
        * platform/graphics/svg/SVGImageEmptyClients.h:
        (WebCore::SVGEmptyFrameLoaderClient::dispatchDidReceiveAuthenticationChallenge):
        (WebCore::SVGEmptyFrameLoaderClient::dispatchDidCancelAuthenticationChallenge):
        * platform/network/ResourceHandleClient.h:
        (WebCore::ResourceHandleClient::willSendRequest):
        (WebCore::ResourceHandleClient::didReceiveAuthenticationChallenge):
        (WebCore::ResourceHandleClient::didCancelAuthenticationChallenge):
        (WebCore::ResourceHandleClient::receivedCredential):
        (WebCore::ResourceHandleClient::receivedRequestToContinueWithoutCredential):
        (WebCore::ResourceHandleClient::receivedCancellation):
        (WebCore::ResourceHandleClient::willCacheResponse):
        * platform/network/ResourceResponse.h:
        (WebCore::operator!=):
        * platform/network/URLAuthenticationChallenge.cpp: Added.
        (WebCore::URLAuthenticationChallenge::URLAuthenticationChallenge):
        (WebCore::URLAuthenticationChallenge::previousFailureCount):
        (WebCore::URLAuthenticationChallenge::proposedCredential):
        (WebCore::URLAuthenticationChallenge::protectionSpace):
        (WebCore::URLAuthenticationChallenge::failureResponse):
        (WebCore::URLAuthenticationChallenge::error):
        (WebCore::URLAuthenticationChallenge::isNull):
        (WebCore::URLAuthenticationChallenge::nullify):
        (WebCore::operator==):
        (WebCore::operator!=):
        * platform/network/URLAuthenticationChallenge.h: Added.
        (WebCore::URLAuthenticationChallenge::sender):
        (WebCore::URLAuthenticationChallenge::nsURLAuthenticationChallenge):
        * platform/network/URLCredential.cpp: Added.
        (WebCore::URLCredential::URLCredential):
        (WebCore::URLCredential::user):
        (WebCore::URLCredential::password):
        (WebCore::URLCredential::hasPassword):
        (WebCore::URLCredential::persistence):
        (WebCore::operator==):
        * platform/network/URLCredential.h: Added.
        (WebCore::):
        (WebCore::operator!=):
        * platform/network/URLProtectionSpace.cpp: Added.
        (WebCore::URLProtectionSpace::URLProtectionSpace):
        (WebCore::URLProtectionSpace::host):
        (WebCore::URLProtectionSpace::port):
        (WebCore::URLProtectionSpace::serverType):
        (WebCore::URLProtectionSpace::realm):
        (WebCore::URLProtectionSpace::authenticationScheme):
        (WebCore::operator==):
        * platform/network/URLProtectionSpace.h: Added.
        (WebCore::):
        (WebCore::operator!=):
        * platform/network/mac/AuthenticationMac.h: Added.
        * platform/network/mac/AuthenticationMac.mm: Added.
        (WebCore::URLAuthenticationChallenge::URLAuthenticationChallenge):
        (WebCore::mac):
        (WebCore::core):
        * platform/network/mac/ResourceHandleMac.mm:
        (-[WebCoreResourceHandleAsDelegate connection:didReceiveAuthenticationChallenge:]):
        (-[WebCoreResourceHandleAsDelegate connection:didCancelAuthenticationChallenge:]):
        (-[WebCoreResourceHandleAsDelegate useCredential:forAuthenticationChallenge:]):
        (-[WebCoreResourceHandleAsDelegate continueWithoutCredentialForAuthenticationChallenge:]):
        (-[WebCoreResourceHandleAsDelegate cancelAuthenticationChallenge:]):
        * platform/network/mac/ResourceResponseMac.mm:
        (WebCore::operator==):

2007-01-11  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Anders Carlsson.
        
        Even more cleanup in preparation for fixing <rdar://problem/4608404> 
        WebScriptObject's _executionContext lack of ownership policy causes 
        crashes (e.g., in Dashcode)
        
        Layout tests pass.
        
        Renames:
            findRootObjectForNativeHandleFunction => createRootObject
            FindRootObjectForNativeHandleFunctionPtr => createRootObjectFunction
            rootForView => createRootObject
            getInstanceForView => getPluginInstanceForWidget

        * page/mac/FrameMac.mm:
        (WebCore::FrameMac::getAppletInstanceForWidget): Put the NSView * in a void*
        variable named "nativeHandle" to be more explicit about the fact that JavaScript's
        "nativeHandle" is just an NSView *.

        (WebCore::getPluginInstanceForWidget): This function now does the NSView *
        fetching that its callers used to do.
        (WebCore::FrameMac::getEmbedInstanceForWidget): Updated for rename.
        (WebCore::FrameMac::getObjectInstanceForWidget): ditto

        * page/mac/WebCoreFrameBridge.mm: Killed the WebCoreBridgeInternal category,
        which was really more of a shmategory.
        (createRootObject): Removed rootObjectForView, folding it into its only
        caller, the similarly named rootForView. Renamed the pair to "createRootObject"
        because that's what they do.

        (-[WebCoreFrameBridge init]): Updated for renames

2007-01-11  Anders Carlsson  <acarlsson@apple.com>

        Reviewed by Darin.

        Fix crash on platforms that don't use the new loader yet.
        
        * loader/DocLoader.cpp:
        (WebCore::DocLoader::requestResource):

2007-01-11  Mitz Pettel  <mitz@webkit.org>

        Reviewed by Adam.

        - fix http://bugs.webkit.org/show_bug.cgi?id=11449
          Type-to-select in unopened popups doesn't work with Hebrew

        Test: fast/forms/select-type-ahead-non-latin.html

        * html/HTMLSelectElement.cpp:
        (WebCore::HTMLSelectElement::defaultEventHandler): Changed locale-specific
        isprint() condition to a Unicode isPrintableChar().

2007-01-09  Justin Garcia  <justin.garcia@apple.com>

        Reviewed by geoff
        
        <rdar://problem/4889140>
        GMail Editor: List creation fails in new message

        * editing/InsertListCommand.cpp:
        (WebCore::InsertListCommand::doApply): Inserting the list
        into an empty paragraph not held open by a br or a '\n', 
        will invalidate start and end.  Insert a placeholder and 
        then recompute start and end.

2007-01-11  Lars Knoll <lars@trolltech.com>

        Rubberstamped by Anders

        This one is not needed any longer neither.

        * ChangeLog:
        * WebCore.pro:
        * loader/qt/NavigationActionQt.cpp: Removed.

2007-01-11  Lars Knoll <lars@trolltech.com>

        Reviewed by Anders

        Remove now unused file

        * WebCore.pro:
        * loader/qt/LoaderFunctionsQt.cpp: Removed.

2007-01-11  David Kilzer  <ddkilzer@webkit.org>

        Reviewed by NOBODY (build fix).

        * loader/mac/FrameLoaderMac.mm:  Removed import of LoaderNSURLRequestExtras.h.
        * loader/mac/SubresourceLoaderMac.mm:  Ditto.

2007-01-11  George Staikos  <staikos@kde.org>

        Fix compile.

        * page/qt/FrameQtClient.cpp:

2007-01-11  Anders Carlsson  <acarlsson@apple.com>

        Fix build.
        
        * dom/XMLTokenizer.cpp:
        * loader/CachedCSSStyleSheet.cpp:
        * loader/CachedImage.cpp:
        * loader/DocLoader.cpp:
        * loader/loader.cpp:
        * xml/XSLTProcessor.cpp:
        * xml/xmlhttprequest.cpp:

2007-01-11  Anders Carlsson  <acarlsson@apple.com>

        Reviewed by Adam.

        Loader cleanup, get rid of unused code.
        
        * WebCore.xcodeproj/project.pbxproj:
        * loader/CachedResource.h:
        * loader/DocLoader.cpp:
        (WebCore::DocLoader::requestResource):
        (WebCore::DocLoader::checkCacheObjectStatus):
        * loader/DocLoader.h:
        * loader/LoaderFunctions.h: Removed.
        * loader/mac/CachedResourceMac.mm: Removed.
        * loader/mac/LoaderFunctionsMac.mm: Removed.
        * loader/mac/LoaderNSURLRequestExtras.h: Removed.
        * loader/mac/LoaderNSURLRequestExtras.m: Removed.
        * loader/mac/SubresourceLoaderMac.mm:
        * page/mac/WebCoreFrameBridge.mm:
        * platform/network/ResourceHandle.cpp:

2007-01-11  Beth Dakin  <bdakin@apple.com>

        Reviewed by Adam.

        Fix for http://bugs.webkit.org/show_bug.cgi?id=12135 REGRESSION: 
        <input> and <textarea> not focused on right click (4908884 in 
        Radar)

        * page/EventHandler.cpp:
        (WebCore::EventHandler::sendContextMenuEvent): Since WebcCore now 
        handles the context menu event, we want to ask if we *have* 
        swallowed the event instead of if we *haven't* when deciding to 
        perform a selection. In the past, WebKit handled the event, so 
        swallowEvent was false in the case where we want to pop up a menu. 

2007-01-11  Darin Adler  <darin@apple.com>

        Reviewed by Anders.

        - fix http://bugs.webkit.org/show_bug.cgi?id=12189
          REGRESSION(r18614-18640): Crash in WebCore::SharedBuffer::hasPlatformData()

        * loader/mac/LoaderFunctionsMac.mm: (WebCore::CheckCacheObjectStatus):
        Added null check.

2007-01-11  Darin Adler  <darin@apple.com>

        * platform/CharacterNames.h: Oops! horizontalEllipsis != zeroWidthSpace!

2007-01-11  Lars Knoll <lars@trolltech.com>

        Reviewed by Darin.

        Start using the loader in the Qt port.

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::clear):
        (WebCore::FrameLoader::URL):
        (WebCore::FrameLoader::createEmptyDocument):
        * loader/qt/FrameLoaderQt.cpp:
        (WebCore::FrameLoader::setTitle):
        (WebCore::FrameLoader::originalRequestURL):
        (WebCore::FrameLoader::referrer):
        (WebCore::FrameLoader::checkLoadCompleteForThisFrame):
        * page/qt/FrameQtClient.cpp:
        (WebCore::FrameQtClient::openURL):

2007-01-11  Darin Adler  <darin@apple.com>

        Reviewed by Hyatt.

        - removed a couple Mac bridging classes; put the code in WebKit instead

        * WebCore.exp: Updated for new WebKit uses.

        * WebCore.xcodeproj/project.pbxproj: Removed files.
        * bridge/mac/WebCoreEncodings.h: Removed.
        * bridge/mac/WebCoreEncodings.mm: Removed.
        * bridge/mac/WebMimeTypeRegistryBridge.h: Removed.
        * bridge/mac/WebMimeTypeRegistryBridge.mm: Removed.
        * platform/mac/WebNSAttributedStringExtras.h: Removed.
        * platform/mac/WebNSAttributedStringExtras.mm: Removed.

        * platform/mac/PasteboardMac.mm:
        (WebCore::stripAttachmentCharacters): Added. Moved code from
        WebNSAttributedStringExtras.mm, and fixed a garbage collection problem
        (a global with a plain old retain rather than HardRetain).
        (WebCore::Pasteboard::writeSelection): Updated to use stripAttachmentCharacters.

        - removed some DeprecatedCString use

        * loader/FrameLoader.cpp: Changed to use String more to eliminate use of
        DeprecatedCString here in the mailto form support. But maybe we can remove
        this entirely. Do we really care about mailto forms any more?

        * platform/Pasteboard.h: Removed unneeded DeprecatedCString declaration.

        * platform/PlatformString.h: Added replace that takes two strings.
        * platform/StringImpl.h: Ditto.
        * platform/StringImpl.cpp: (WebCore::StringImpl::replace): Ditto.

        * platform/TextStream.h: Remove DeprecatedCString case.
        * platform/TextStream.cpp: Ditto.

        - made a few more files use CharacterNames.h

        * platform/CharacterNames.h: Added some more character names and
        sorted alphabetically.

        * bridge/mac/WebCoreStringTruncator.mm:
        (centerTruncateToBuffer): Use character name from CharacterNames.h.
        (rightTruncateToBuffer): Ditto.
        (truncateString): Ditto.
        * platform/mac/FontMac.mm: (WebCore::addDirectionalOverride): Ditto.
        * rendering/RenderFlexibleBox.cpp:
        (WebCore::RenderFlexibleBox::layoutVerticalBox): Ditto.
        * rendering/bidi.cpp:
        (WebCore::RenderBlock::checkLinesForTextOverflow): Ditto.

2007-01-11  David Hyatt  <hyatt@apple.com>

        Fix two bugs in positionForCoordinates.  (Make it work when you have a margin in between your border and
        your first child block.)

        Rewrite column rebalancing to have two modes: constrained and unconstrained.  In unconstrained mode,
        the system will dynamically rebalance as it loses space to breaks and compute a final intrinsic height
        for the overall block.  In constrained mode, columns flow into the fixed height block, and extra columns
        spill out horizontally in the appropriate direction (RTL/LTR).

        Make columns work properly with both LTR and RTL overflow blocks.

        Initial column test suite coming soon now that the basic layout is right.

        Reviewed by darin

        * rendering/RenderBlock.cpp:
        (WebCore:::RenderFlow):
        (WebCore::RenderBlock::layoutBlock):
        (WebCore::RenderBlock::paintColumns):
        (WebCore::RenderBlock::lowestPosition):
        (WebCore::RenderBlock::rightmostPosition):
        (WebCore::RenderBlock::leftmostPosition):
        (WebCore::RenderBlock::hitTestColumns):
        (WebCore::RenderBlock::positionForCoordinates):
        (WebCore::RenderBlock::availableWidth):
        (WebCore::RenderBlock::calcColumnWidth):
        (WebCore::RenderBlock::layoutColumns):
        (WebCore::RenderBlock::adjustPointToColumnContents):
        * rendering/RenderBlock.h:
        (WebCore::RenderBlock::hasColumns):

2007-01-10  Rob Buis  <buis@kde.org>

        Reviewed by Eric.

        http://bugs.webkit.org/show_bug.cgi?id=12201
        Fix image dragging issues with http://www.carto.net/papers/svg/gui/scrollbar/index.svg

        Fix calculation of absolute transform so that viewport x,y
        translation is always done, also when viewBox is set.     

        * rendering/RenderSVGContainer.cpp:
        (WebCore::RenderSVGContainer::paint):
        (WebCore::RenderSVGContainer::viewportTransform):
        (WebCore::RenderSVGContainer::absoluteTransform):

2007-01-10  David Hyatt  <hyatt@apple.com>

        Rework positionForCoordinates to be more efficient and to handle multi-column content.  This entailed
        adding a new field to HitTestResult called localPoint that cached the mouse coordinate in the coordinate
        space of the renderer.

        positionForCoordinates now takes local coordinates and so no longer needs to waste time recomputing
        absolute positions over and over again.

        Reviewed by darin

        * bridge/mac/WebCoreAXObject.mm:
        (-[WebCoreAXObject value]):
        (-[WebCoreAXObject doAXTextMarkerRangeForLine:]):
        (-[WebCoreAXObject doAXTextMarkerForPosition:]):
        * dom/Document.cpp:
        (WebCore::Document::prepareMouseEvent):
        * editing/SelectionController.cpp:
        (WebCore::SelectionController::contains):
        * editing/visible_units.cpp:
        (WebCore::previousLinePosition):
        (WebCore::nextLinePosition):
        * page/EventHandler.cpp:
        (WebCore::EventHandler::selectClosestWordFromMouseEvent):
        (WebCore::EventHandler::handleMousePressEventDoubleClick):
        (WebCore::EventHandler::handleMousePressEventTripleClick):
        (WebCore::EventHandler::handleMousePressEventSingleClick):
        (WebCore::EventHandler::handleMouseMoveEvent):
        (WebCore::EventHandler::handleMouseReleaseEvent):
        (WebCore::EventHandler::sendContextMenuEvent):
        * page/EventHandler.h:
        * page/MouseEventWithHitTestResults.cpp:
        (WebCore::MouseEventWithHitTestResults::MouseEventWithHitTestResults):
        * page/MouseEventWithHitTestResults.h:
        (WebCore::MouseEventWithHitTestResults::localPoint):
        * page/mac/WebCoreFrameBridge.mm:
        (-[WebCoreFrameBridge _visiblePositionForPoint:]):
        * rendering/EllipsisBox.cpp:
        (WebCore::EllipsisBox::nodeAtPoint):
        * rendering/HitTestResult.h:
        (WebCore::HitTestResult::localPoint):
        (WebCore::HitTestResult::setLocalPoint):
        * rendering/InlineFlowBox.cpp:
        (WebCore::InlineFlowBox::nodeAtPoint):
        * rendering/InlineTextBox.cpp:
        (WebCore::InlineTextBox::nodeAtPoint):
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::nodeAtPoint):
        (WebCore::RenderBlock::hitTestContents):
        (WebCore::RenderBlock::positionForCoordinates):
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::nodeAtPoint):
        * rendering/RenderContainer.cpp:
        (WebCore::RenderContainer::positionForCoordinates):
        * rendering/RenderFlow.cpp:
        (WebCore::RenderFlow::hitTestLines):
        * rendering/RenderInline.cpp:
        (WebCore::RenderInline::positionForCoordinates):
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::autoscroll):
        (WebCore::RenderLayer::hitTestLayer):
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::updateHitTestResult):
        * rendering/RenderObject.h:
        * rendering/RenderPath.cpp:
        (WebCore::RenderPath::nodeAtPoint):
        * rendering/RenderReplaced.cpp:
        (WebCore::RenderReplaced::positionForCoordinates):
        * rendering/RenderTableRow.cpp:
        (WebCore::RenderTableRow::nodeAtPoint):
        * rendering/RenderTableSection.cpp:
        (WebCore::RenderTableSection::nodeAtPoint):
        * rendering/RenderText.cpp:
        (WebCore::RenderText::positionForCoordinates):
        * rendering/RootInlineBox.cpp:
        (WebCore::RootInlineBox::nodeAtPoint):
        (WebCore::RootInlineBox::closestLeafChildForXPos):
        * rendering/RootInlineBox.h:

2007-01-11  George Staikos  <staikos@kde.org>

        Reviewed by Maciej.

        Fix Qt Build.

        * loader/qt/DocumentLoaderQt.cpp:
        (WebCore::DocumentLoader::getResponseModifiedHeader):

2007-01-10  Kirby White  <KWhiteRight@gmail.com>

        Reviewed by Darin.

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

        Set image size to fit alt text when image or input-image element
        has no src attribute, so that those images show their alt text instead
        of showing nothing at all.

        * html/HTMLImageElement.cpp:
        (WebCore::HTMLImageElement::attach):
        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::attach):
        * rendering/RenderImage.cpp:
        (WebCore::RenderImage::setImageSizeForAltText):
        (WebCore::RenderImage::imageChanged):
        * rendering/RenderImage.h:

2007-01-11  Mark Rowe  <mrowe@apple.com>

        Build fix.

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

2007-01-10  Mitz Pettel  <mitz@webkit.org>

        Reviewed by Darin.

        - fix http://bugs.webkit.org/show_bug.cgi?id=9284
          Quirksmode (CSS1): Removing inline border styles is impossible

        Test: fast/css/remove-shorthand.html

        * css/CSSMutableStyleDeclaration.cpp:
        (WebCore::PropertyLonghand::PropertyLonghand): Added this structure
        containing a pointer to an array if properties and the array's length.
        (WebCore::PropertyLonghand::properties):
        (WebCore::PropertyLonghand::length):
        (WebCore::initShorthandMap): Initialize the mapping from shorthand
        properties to their dependent properties.
        (WebCore::CSSMutableStyleDeclaration::removeProperty): Changed to check
        if the property being removed is a shorthand, and if so, to remove all
        of its dependent properties.
        (WebCore::CSSMutableStyleDeclaration::removePropertiesInSet): Added a
        'notifyChanged' boolean parameter which controls whether this method
        calls setChanged() if it actually removes any property.
        * css/CSSMutableStyleDeclaration.h:

2007-01-10  Steve Falkenburg  <sfalken@apple.com>

        Reviewed by Kevin.

        Removed unnecessary printing state

        * page/FrameView.cpp:
        (WebCore::FrameView::layout):
        * page/mac/WebCoreFrameBridge.mm:
        (-[WebCoreFrameBridge forceLayoutAdjustingViewSize:]):
        (-[WebCoreFrameBridge forceLayoutWithMinimumPageWidth:maximumPageWidth:adjustingViewSize:]):
        (-[WebCoreFrameBridge drawRect:]):
        (-[WebCoreFrameBridge computePageRectsWithPrintWidthScaleFactor:printHeight:]):
        (-[WebCoreFrameBridge adjustPageHeightNew:top:bottom:limit:]):
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::updateLayerPositions):
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::repaint):
        (WebCore::RenderObject::repaintRectangle):
        (WebCore::RenderObject::repaintAfterLayoutIfNeeded):
        * rendering/RenderView.cpp:
        (WebCore::RenderView::RenderView):
        (WebCore::RenderView::calcHeight):
        (WebCore::RenderView::calcWidth):
        (WebCore::RenderView::layout):
        (WebCore::RenderView::paint):
        (WebCore::RenderView::repaintViewRectangle):
        (WebCore::RenderView::computeAbsoluteRepaintRect):
        (WebCore::RenderView::printing):
        (WebCore::RenderView::viewRect):
        (WebCore::RenderView::docHeight):
        (WebCore::RenderView::docWidth):
        * rendering/RenderView.h:
        * rendering/RenderWidget.cpp:
        (WebCore::RenderWidget::updateWidgetPosition):
        * rendering/bidi.cpp:
        (WebCore::RenderBlock::layoutInlineChildren):

2007-01-10  Anders Carlsson  <acarlsson@apple.com>

        Reviewed by Maciej.

        Get the Refresh header directly from the ResourceResponse.
        
        * loader/DocumentLoader.h:
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::commitProvisionalLoad):
        * loader/mac/DocumentLoaderMac.mm:
        (WebCore::DocumentLoader::getResponseModifiedHeader):

2007-01-10  Beth Dakin  <bdakin@apple.com>

        Reviewed by John.

        Fix for <rdar://problem/4914258> REGRESSION: Search in Google now 
        operates on the current WebView instead of invoking Safari's 
        service

        * page/ContextMenuClient.h: New call to the client to search in 
        google.
        * page/ContextMenuController.cpp:
        (WebCore::ContextMenuController::contextMenuItemSelected): Call 
        into the client instead of forming a new url string and loading it.
        * platform/graphics/svg/SVGImageEmptyClients.h:
        (WebCore::SVGEmptyContextMenuClient::searchWithGoogle): New call.

2007-01-10  Adam Roben  <aroben@apple.com>

        Rubberstamped by Darin.

        * page/ContextMenuController.cpp:
        (WebCore::ContextMenuController::contextMenuItemSelected): Pass 0
        instead of an empty Event to FrameLoader::load and
        FrameLoader::urlSelected.

2007-01-10  Anders Carlsson  <acarlsson@apple.com>

        * loader/ResourceLoader.cpp:
        (WebCore::ResourceLoader::~ResourceLoader):
        Disable assertion (I forgot to do this even though I added the comment!)

2007-01-10  Ross Burton  <ross@burtonini.com>

        Reviewed and landed by Anders.

        Fix case in vcproj file (the GTK+ port uses the vcproj file).

        * WebCore.vcproj/WebCore/WebCore.vcproj:

2007-01-10  Lars Knoll  <lars@trolltech.com>

        Make the Qt build compile again after 
        the ResourceLoader was made platform
        independent. 

        * WebCore.pro:
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::didFirstLayout):
        * loader/qt/FrameLoaderQt.cpp:
        * loader/qt/MainResourceLoaderQt.cpp: Removed.
        * loader/qt/ResourceLoaderQt.cpp: Removed.
        * page/qt/FrameQtClient.cpp:
        (WebCore::FrameQtClient::openURL):
        * platform/network/qt/ResourceHandleQt.cpp:
        (WebCore::ResourceHandle::setDefersLoading):

2007-01-10  Anders Carlsson  <acarlsson@apple.com>

        Rubber-stamped by Maciej.
        
        Move most of ResourceLoader and MainResourceLoader into the platform-independent files.
        
        * WebCore.xcodeproj/project.pbxproj:
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::didFinishLoad):
        * loader/MainResourceLoader.cpp:
        (WebCore::MainResourceLoader::MainResourceLoader):
        (WebCore::MainResourceLoader::~MainResourceLoader):
        (WebCore::MainResourceLoader::create):
        (WebCore::MainResourceLoader::receivedError):
        (WebCore::MainResourceLoader::didCancel):
        (WebCore::MainResourceLoader::interruptionForPolicyChangeError):
        (WebCore::MainResourceLoader::stopLoadingForPolicyChange):
        (WebCore::MainResourceLoader::callContinueAfterNavigationPolicy):
        (WebCore::MainResourceLoader::continueAfterNavigationPolicy):
        (WebCore::MainResourceLoader::isPostOrRedirectAfterPost):
        (WebCore::MainResourceLoader::addData):
        (WebCore::MainResourceLoader::willSendRequest):
        (WebCore::shouldLoadAsEmptyDocument):
        (WebCore::MainResourceLoader::continueAfterContentPolicy):
        (WebCore::MainResourceLoader::callContinueAfterContentPolicy):
        (WebCore::MainResourceLoader::didReceiveResponse):
        (WebCore::MainResourceLoader::didReceiveData):
        (WebCore::MainResourceLoader::didFinishLoading):
        (WebCore::MainResourceLoader::didFail):
        (WebCore::MainResourceLoader::loadNow):
        (WebCore::MainResourceLoader::load):
        (WebCore::MainResourceLoader::setDefersLoading):
        * loader/MainResourceLoader.h:
        * loader/ResourceLoader.cpp:
        (WebCore::ResourceLoader::ResourceLoader):
        (WebCore::ResourceLoader::~ResourceLoader):
        (WebCore::ResourceLoader::releaseResources):
        (WebCore::ResourceLoader::load):
        (WebCore::ResourceLoader::setDefersLoading):
        (WebCore::ResourceLoader::frameLoader):
        (WebCore::ResourceLoader::addData):
        (WebCore::ResourceLoader::clearResourceData):
        (WebCore::ResourceLoader::willSendRequest):
        (WebCore::ResourceLoader::didReceiveResponse):
        (WebCore::ResourceLoader::didReceiveData):
        (WebCore::ResourceLoader::willStopBufferingData):
        (WebCore::ResourceLoader::didFinishLoading):
        (WebCore::ResourceLoader::didFinishLoadingOnePart):
        (WebCore::ResourceLoader::didFail):
        (WebCore::ResourceLoader::didCancel):
        (WebCore::ResourceLoader::cancel):
        (WebCore::ResourceLoader::response):
        (WebCore::ResourceLoader::cancelledError):
        * loader/ResourceLoader.h:
        (WebCore::ResourceLoader::willStopBufferingData):
        (WebCore::ResourceLoader::setRequest):
        * loader/mac/FrameLoaderMac.mm:
        * loader/mac/MainResourceLoaderMac.mm: Removed.
        * loader/mac/ResourceLoaderMac.mm:

2007-01-10  Lars Knoll <lars@trolltech.com>

        Move files to the correct location,
        and remove a few unused methods from 
        LoaderFunctionsQt.cpp

        * WebCore.pro:
        * loader/qt/LoaderFunctionsQt.cpp: Added.
        (WebCore::CheckCacheObjectStatus):
        * page/qt/FrameQt.cpp: Added.
        (WebCore::doScroll):
        (WebCore::FrameQt::FrameQt):
        (WebCore::FrameQt::~FrameQt):
        (WebCore::FrameQt::passMouseDownEventToWidget):
        (WebCore::FrameQt::isLoadTypeReload):
        (WebCore::FrameQt::markedTextRange):
        (WebCore::FrameQt::mimeTypeForFileName):
        (WebCore::FrameQt::unfocusWindow):
        (WebCore::FrameQt::focusWindow):
        (WebCore::FrameQt::getEmbedInstanceForWidget):
        (WebCore::FrameQt::getObjectInstanceForWidget):
        (WebCore::FrameQt::getAppletInstanceForWidget):
        (WebCore::FrameQt::issueCutCommand):
        (WebCore::FrameQt::issueCopyCommand):
        (WebCore::FrameQt::issuePasteCommand):
        (WebCore::FrameQt::issuePasteAndMatchStyleCommand):
        (WebCore::FrameQt::issueTransposeCommand):
        (WebCore::FrameQt::respondToChangedSelection):
        (WebCore::FrameQt::shouldChangeSelection):
        (WebCore::FrameQt::print):
        (WebCore::FrameQt::shouldInterruptJavaScript):
        (WebCore::FrameQt::keyEvent):
        (WebCore::FrameQt::setFrameGeometry):
        (WebCore::FrameQt::client):
        (WebCore::FrameQt::createNewWindow):
        (WebCore::FrameQt::goBackOrForward):
        (WebCore::FrameQt::historyURL):
        (WebCore::FrameQt::runJavaScriptAlert):
        (WebCore::FrameQt::runJavaScriptConfirm):
        (WebCore::FrameQt::runJavaScriptPrompt):
        (WebCore::FrameQt::bindingRootObject):
        (WebCore::FrameQt::addPluginRootObject):
        * page/qt/FrameQt.h: Added.
        (WebCore::QtFrame):
        * page/qt/FrameQtClient.cpp: Added.
        (WebCore::FrameQtClient::FrameQtClient):
        (WebCore::FrameQtClient::~FrameQtClient):
        (WebCore::FrameQtClient::setFrame):
        (WebCore::FrameQtClient::openURL):
        (WebCore::FrameQtClient::submitForm):
        (WebCore::FrameQtClient::didReceiveResponse):
        (WebCore::FrameQtClient::didFinishLoading):
        (WebCore::FrameQtClient::didFail):
        (WebCore::FrameQtClient::didReceiveData):
        (WebCore::FrameQtClient::traverseNextFrameStayWithin):
        (WebCore::numRequests):
        (WebCore::FrameQtClient::numPendingOrLoadingRequests):
        * page/qt/FrameQtClient.h: Added.
        * platform/qt/FrameQt.cpp: Removed.
        * platform/qt/FrameQt.h: Removed.
        * platform/qt/FrameQtClient.cpp: Removed.
        * platform/qt/FrameQtClient.h: Removed.
        * platform/qt/LoaderFunctionsQt.cpp: Removed.

2007-01-10  Adam Roben  <aroben@apple.com>

        Reviewed by Geoff.

        Fix: <rdar://problem/4917054> ContextMenuController leaks Events

        No layout tests possible.

        * page/ContextMenuController.cpp:
        (WebCore::ContextMenuController::contextMenuItemSelected): Use RefPtr
        to manage the lifetime of Shared objects.

2007-01-10  Rob Buis  <buis@kde.org>

        Reviewed by Sam.

        http://bugs.webkit.org/show_bug.cgi?id=12196
        SVGPatternElement should not be locatable

        Replace SVGStyledLocatableElement derivation with
        SVGStyledElement.

        * ksvg2/svg/SVGPatternElement.cpp:
        (WebCore::SVGPatternElement::SVGPatternElement):
        * ksvg2/svg/SVGPatternElement.h:

2007-01-10  Nikolas Zimmermann  <zimmermann@kde.org>

        Build fix, not reviewed.

        * rendering/RenderSVGText.cpp: Use correct method name.
        (WebCore::RenderSVGText::relativeBBox):

2007-01-10  Nikolas Zimmermann  <zimmermann@kde.org>

        Reviewed by Eric.

        Fixes: http://bugs.webkit.org/show_bug.cgi?id=10262 (SVG fails to redraw top 20 pixels)
        Fixes: http://bugs.webkit.org/show_bug.cgi?id=10263 (SVG seems to repaint way too many times during load)
        Fixes: http://bugs.webkit.org/show_bug.cgi?id=10404 (Invalidation issues with text skew)
        Fixes: http://bugs.webkit.org/show_bug.cgi?id=10407 (bad SVG text invalidation issues on mouseover/mouseout)
        Fixes: http://bugs.webkit.org/show_bug.cgi?id=10806 (failing manual-tests/svg-repaint-group.svg)
        Fixes: http://bugs.webkit.org/show_bug.cgi?id=10913 (SVG charts from plotkit fail to render unless you scroll them offscreen)
        Fixes: http://bugs.webkit.org/show_bug.cgi?id=10964 (inclusion of svg into svg leave a ghost invisible rectangle)
        Fixes: http://bugs.webkit.org/show_bug.cgi?id=11680 (DojoKit SVG test chart fails to render (clipping issue?))
        Fixes: http://bugs.webkit.org/show_bug.cgi?id=11883 (SVG Text has updating/repainting issues)
        Fixes: http://bugs.webkit.org/show_bug.cgi?id=11907 (RenderSVGContainer does not mark itself for repaint after setting viewBox, slice or align) 
        Fixes: http://bugs.webkit.org/show_bug.cgi?id=11913 (Invalidation issues in SVG javascript-based animation example)
        Fixes: http://bugs.webkit.org/show_bug.cgi?id=11979 (SVG text does not respect font-size scaling in bbox calculation)
        Fixes: http://bugs.webkit.org/show_bug.cgi?id=11984 (SVG <text> does not calculate the correct absoluteRepaintRect)
        Partly fixes: http://bugs.webkit.org/show_bug.cgi?id=10745 (SVG layout needs to move out of DOM and into rendering tree during layout() call)

        Fixes text redrawing issues seen in svg/carto.net (when actually playing with those files, manually)
        Fixes svg/carto.net/window.svg (moving "Navigation Window" caused artefacts)
        Fixes svg/W3C-SVG-1.1/types-basicDOM-01-b.svg (bbox calculations had one pixel offset)

        Large SVG dynamic update rework/optimization. Also fixes SVG printing.

        Rename updateCanvasItem() to rebuildRenderer(), as this is what it really does.

        Do NOT call rebuildRenderer() in notifyAttributeChange() anymore,
        but override notifyAttributeChange() in SVGPathElement/SVGCircleElement/etc..
        (as only primitives using RenderPath as rendering object need this logic!)

        This should clarify what really happens, as discussed with Eric.

        Remove the invocations of notifyAttributeChange() in SVGLength. It's already
        handled by the JS bindings, and we do double updating work. Fixed.

        Because SVG dynamic updates have been flaky in the past, there was a hack introduced
        in RenderPath causing the updateCanvasItem() function to be called _on every layout_ (!!!).
        Finally this hack is gone. Offer RenderSVGContainer::absoluteRects() function to be able
        to use WebInspector for <g> elements (very handy!).

        Remove the unneeded "m_updateVectorial" bool from SVGStyledElement.
        Remove computeAbsoluteRepaintRect() from RenderSVGContainer/RenderSVGImage/RenderSVGText,
        as dicussed with David (we only need to reimplement getAbsoluteRepaintRect there).

        Make RenderSVGText::absoluteRects just use the getAbsoluteRepaintRect() function, instead of
        code duplication. Remove unneeded RenderSVGImage::layout() function (RenderImage does the same).

        Add new function SVGStyledElement::renderStyleForElement, which centralizes the manual style
        resolving needed for gradient stops.

        * ksvg2/svg/SVGCircleElement.cpp:
        (WebCore::SVGCircleElement::notifyAttributeChange):
        (WebCore::SVGCircleElement::hasRelativeValues):
        * ksvg2/svg/SVGCircleElement.h:
        * ksvg2/svg/SVGEllipseElement.cpp:
        (WebCore::SVGEllipseElement::notifyAttributeChange):
        (WebCore::SVGEllipseElement::hasRelativeValues):
        * ksvg2/svg/SVGEllipseElement.h:
        * ksvg2/svg/SVGImageElement.cpp:
        (WebCore::SVGImageElement::notifyAttributeChange):
        * ksvg2/svg/SVGImageElement.h:
        * ksvg2/svg/SVGLength.cpp:
        (WebCore::SVGLength::setValue):
        (WebCore::SVGLength::setValueInSpecifiedUnits):
        * ksvg2/svg/SVGLength.h:
        (WebCore::SVGLength::isRelative):
        * ksvg2/svg/SVGLineElement.cpp:
        (WebCore::SVGLineElement::notifyAttributeChange):
        (WebCore::SVGLineElement::hasRelativeValues):
        * ksvg2/svg/SVGLineElement.h:
        * ksvg2/svg/SVGLocatable.cpp:
        (WebCore::SVGLocatable::getBBox):
        * ksvg2/svg/SVGPathElement.cpp:
        (WebCore::SVGPathElement::notifyAttributeChange):
        * ksvg2/svg/SVGPathElement.h:
        * ksvg2/svg/SVGPolyElement.cpp:
        (WebCore::SVGPolyElement::notifyAttributeChange):
        * ksvg2/svg/SVGPolyElement.h:
        (WebCore::SVGPolyElement::rendererIsNeeded):
        * ksvg2/svg/SVGRectElement.cpp:
        (WebCore::SVGRectElement::notifyAttributeChange):
        (WebCore::SVGRectElement::hasRelativeValues):
        * ksvg2/svg/SVGRectElement.h:
        * ksvg2/svg/SVGSVGElement.cpp:
        (WebCore::SVGSVGElement::hasRelativeValues):
        * ksvg2/svg/SVGSVGElement.h:
        * ksvg2/svg/SVGStyledElement.cpp:
        (WebCore::SVGStyledElement::SVGStyledElement):
        (WebCore::SVGStyledElement::createRenderer):
        (WebCore::SVGStyledElement::notifyAttributeChange):
        (WebCore::SVGStyledElement::rebuildRenderer):
        * ksvg2/svg/SVGStyledElement.h:
        (WebCore::SVGStyledElement::hasRelativeValues):
        * rendering/RenderPath.cpp:
        (WebCore::RenderPath::setLocalTransform):
        (WebCore::RenderPath::fillContains):
        (WebCore::RenderPath::relativeBBox):
        (WebCore::RenderPath::layout):
        (WebCore::RenderPath::getAbsoluteRepaintRect):
        (WebCore::RenderPath::paint):
        (WebCore::RenderPath::nodeAtPoint):
        (WebCore::drawMarkerWithData):
        (WebCore::updateMarkerDataForElement):
        (WebCore::drawStartAndMidMarkers):
        (WebCore::RenderPath::drawMarkersIfNeeded):
        (WebCore::RenderPath::hasRelativeValues):
        * rendering/RenderPath.h:
        * rendering/RenderSVGContainer.cpp:
        (WebCore::RenderSVGContainer::layout):
        (WebCore::RenderSVGContainer::paint):
        (WebCore::RenderSVGContainer::calcViewport):
        (WebCore::RenderSVGContainer::setViewBox):
        (WebCore::RenderSVGContainer::setAlign):
        (WebCore::RenderSVGContainer::viewportTransform):
        (WebCore::RenderSVGContainer::getAbsoluteRepaintRect):
        (WebCore::RenderSVGContainer::absoluteRects):
        (WebCore::RenderSVGContainer::fillContains):
        (WebCore::RenderSVGContainer::strokeContains):
        (WebCore::RenderSVGContainer::relativeBBox):
        (WebCore::RenderSVGContainer::setSlice):
        * rendering/RenderSVGContainer.h:
        * rendering/RenderSVGImage.cpp:
        (WebCore::RenderSVGImage::RenderSVGImage):
        (WebCore::RenderSVGImage::adjustRectsForAspectRatio):
        (WebCore::RenderSVGImage::relativeBBox):
        (WebCore::RenderSVGImage::imageChanged):
        (WebCore::RenderSVGImage::getAbsoluteRepaintRect):
        (WebCore::RenderSVGImage::absoluteRects):
        * rendering/RenderSVGImage.h:
        * rendering/RenderSVGText.cpp:
        (WebCore::RenderSVGText::getAbsoluteRepaintRect):
        (WebCore::RenderSVGText::layout):
        (WebCore::RenderSVGText::createInlineBox):
        (WebCore::RenderSVGText::absoluteRects):
        (WebCore::RenderSVGText::relativeBBox):
        * rendering/RenderSVGText.h:
        * rendering/SVGInlineFlowBox.cpp:
        (WebCore::placePositionedBoxesHorizontally):

2007-01-10  David Hyatt  <hyatt@apple.com>

        Make the selectionRect() method of RenderText better by reusing computeAbsoluteRepaintRect.  This enables
        the method to be multi-column aware and also to understand when the selection is clipped out by overflow.

        Reviewed by bdash

        * rendering/RenderText.cpp:
        (WebCore::RenderText::selectionRect):

2007-01-10  David Hyatt  <hyatt@apple.com>

        Make the absolutePosition method multi-column aware.  Note that there is now a real problem with the
        absoluteRects method, since an object can split across multiple columns and break into multiple rects.
        absolutePosition just returns the top-left corner of the element's box in the first column in which it
        appears.

        Reviewed by bdash

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::adjustRectForColumns):
        * rendering/RenderBlock.h:
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::absolutePosition):
        (WebCore::RenderBox::computeAbsoluteRepaintRect):
        * rendering/RenderFlow.cpp:
        (WebCore::RenderFlow::getAbsoluteRepaintRect):

2007-01-09  David Hyatt  <hyatt@apple.com>

        Avoid crashing when repainting multiple columns... make sure to use the current vector's size and
        not the newly-computed column count.

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::layoutColumns):
        (WebCore::RenderBlock::adjustRepaintRectForColumns):

2007-01-09  David Hyatt  <hyatt@apple.com>

        Break up painting and hit testing of children into helper methods and add multi-column versions for both.
        
        Make incremental repainting able to invalidate the right spot in multiple column layouts so that e.g., link
        hover works.

        Turn off selection gap filling in columns for now until it can be made to work correctly.

        Improve the column balancing heuristic by adding in the block's lineHeight/2 to each column initially to
        account for column break adjustments that shrink the columns slightly.  Avoid clipping of the last column's
        contents by ensuring it gets all the remaining available height.

        Reviewed by mitz

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::paintColumns):
        (WebCore::RenderBlock::paintContents):
        (WebCore::RenderBlock::paintObject):
        (WebCore::RenderBlock::fillSelectionGaps):
        (WebCore::RenderBlock::nodeAtPoint):
        (WebCore::RenderBlock::hitTestColumns):
        (WebCore::RenderBlock::layoutColumns):
        (WebCore::RenderBlock::adjustRepaintRectForColumns):
        * rendering/RenderBlock.h:
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::computeAbsoluteRepaintRect):
        * rendering/RenderFlow.cpp:
        (WebCore::RenderFlow::getAbsoluteRepaintRect):

2007-01-09  Remi Zara  <remi_zara@mac.com>

        Reviewed by Darin and Eric.

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

        Don't use memset to set float to 0

        * platform/graphics/svg/cg/SVGPaintServerGradientCg.cpp:
        (WebCore::cgGradientCallback):

2007-01-09  Anders Carlsson  <acarlsson@apple.com>

        Reviewed by Brady.

        Add default constructor to SharedBuffer.

        * platform/SharedBuffer.cpp:
        (WebCore::SharedBuffer::SharedBuffer):
        * platform/SharedBuffer.h:

2007-01-09  David Hyatt  <hyatt@apple.com>

        This patch gets rudimentary column layout working.  Normal flow content only gets laid out into
        columns properly and painted correctly initially.  What doesn't work: hit testing, incremental repainting,
        column rule painting, child layers.

        Some work needs to be done on the render tree dumper before column tests will be
        meaningful.

        Also reworked overflow and fixed a bunch of bugs with the computation of overflow.  These include an error
        in the height calculations caused by not adding in the horizontal scrollbar height and other errors caused
        by not checking overflow in lowest/rightmostPosition.  Existing tests improve their rendering to match
        Firefox with this change.

        Fixed a bug where a table cell incorrectly expanded to encompass floats inside an overflow:auto block.
        This should not have happened.  Covered by new test fast/overflow/table-overflow-float.html.

        Reviewed by mitz

        * page/Frame.cpp:
        * rendering/RenderBlock.cpp:
        (WebCore:::RenderFlow):
        (WebCore::RenderBlock::layoutBlock):
        (WebCore::RenderBlock::paintContents):
        (WebCore::RenderBlock::paintChildren):
        (WebCore::RenderBlock::paintObject):
        (WebCore::RenderBlock::lowestPosition):
        (WebCore::RenderBlock::rightmostPosition):
        (WebCore::RenderBlock::leftmostPosition):
        (WebCore::RenderBlock::avoidsFloats):
        (WebCore::RenderBlock::nodeAtPoint):
        (WebCore::RenderBlock::hitTestContents):
        (WebCore::RenderBlock::layoutColumns):
        * rendering/RenderBlock.h:
        (WebCore::RenderBlock::hasOverhangingFloats):
        (WebCore::RenderBlock::hasColumns):
        * rendering/RenderFlexibleBox.cpp:
        (WebCore::RenderFlexibleBox::layoutBlock):
        (WebCore::RenderFlexibleBox::layoutHorizontalBox):
        (WebCore::RenderFlexibleBox::layoutVerticalBox):
        * rendering/RenderFlow.cpp:
        (WebCore::RenderFlow::paintLines):
        (WebCore::RenderFlow::lowestPosition):
        (WebCore::RenderFlow::rightmostPosition):
        (WebCore::RenderFlow::leftmostPosition):
        * rendering/RenderFlow.h:
        (WebCore::RenderFlow::hasColumns):
        * rendering/RenderListMarker.cpp:
        (WebCore::RenderListMarker::paint):
        * rendering/RenderObject.h:
        (WebCore::RenderObject::expandsToEncloseOverflow):
        * rendering/RenderTableCell.h:
        (WebCore::RenderTableCell::expandsToEncloseOverflow):
        * rendering/RenderView.cpp:
        (WebCore::RenderView::paint):

2007-01-09  Darin Adler  <darin@apple.com>

        - update all 2007 Apple copyrights for the new company name

        * css/cssstyleselector.cpp:
        * html/HTMLLIElement.cpp:
        * platform/CharacterNames.h:
        * platform/TextBreakIterator.h:
        * platform/TextBreakIteratorICU.cpp:
        * platform/graphics/ImageBuffer.h:
        * rendering/CounterNode.cpp:
        * rendering/CounterNode.h:
        * rendering/RenderBox.h:
        * rendering/RenderContainer.cpp:
        * rendering/RenderCounter.cpp:
        * rendering/RenderCounter.h:
        * rendering/RenderImage.h:
        * rendering/RenderListItem.h:
        * rendering/RenderListMarker.h:
        * rendering/RenderObject.cpp:
        * rendering/RenderObject.h:
        * rendering/RenderStyle.cpp:
        * rendering/RenderStyle.h:
        * rendering/RenderTable.cpp:
        * rendering/RenderTableCell.cpp:
        * rendering/RenderTableCell.h:
        * rendering/RenderText.cpp:
        * rendering/RenderText.h:
        * rendering/RenderTreeAsText.cpp:
        * rendering/SVGRenderTreeAsText.cpp:
        * rendering/break_lines.cpp:

2007-01-09  Justin Garcia  <justin.garcia@apple.com>

        Reviewed by john

        <rdar://problem/4840662>
        REGRESSION: Mail crash when dragging text into a link
        
        moveParagraphs fails to move content into a display:block 
        anchor because of code in positionAvoidingSpecialElementBoundary,
        and so it infinitely recurs.
        
        * editing/htmlediting.cpp:
        (WebCore::positionAvoidingSpecialElementBoundary): Don't avoid anchors
        that have display:block so that content is inserted in the expected
        paragraph.  This fixes the bug and weird behavior when typing before/after
        anchors with display:block.

2007-01-09  Rob Buis  <buis@kde.org>

        Reviewed by Darin.

        http://bugs.webkit.org/show_bug.cgi?id=12145
        Color parsing is too relaxed in strict mode
        http://bugs.webkit.org/show_bug.cgi?id=12166
        REGRESSION (r18480): "336633" is not parsed as a color

        Fix a regression by using String::format return value.
        Also make strict mode more strict for cases where hexcolors
        lack a #.

        * css/cssparser.cpp:
        (WebCore::CSSParser::parseColor):
        (WebCore::CSSParser::parseColorFromValue):
        * css/cssparser.h:

2007-01-09  Darin Adler  <darin@apple.com>

        Reviewed by Maciej.

        - fixed regression where redirects did not have user-agent any more

        Showed up as a failure in one of the http tests, so no new test needed.

        * loader/mac/ResourceLoaderMac.mm: (WebCore::ResourceLoader::willSendRequest):
        Don't use a copy of the ResourceRequest; pass the original so it can be modified.

2007-01-09  Mitz Pettel  <mitz@webkit.org>

        Reviewed by Darin.

        - fix http://bugs.webkit.org/show_bug.cgi?id=11078
          Forms Don't Submit (ASP Pages)

        Test: fast/dom/collection-namedItem-via-item.html

        * bindings/js/kjs_html.cpp:
        (KJS::JSHTMLCollectionProtoFunc::callAsFunction): Changed item() to fall back
        to namedItem() if its argument does not convert to a number.

2007-01-09  Darin Adler  <darin@apple.com>

        Reviewed by Maciej.

        - fix http://bugs.webkit.org/show_bug.cgi?id=12174
          improve Unicode use (less WTF::Unicode:: prefix, centralized character names)

        - got rid of namespace prefixes from most uses of WTF::Unicode

        - updated for removal of WTF::Unicode::memcmp
        - updated for renaming of WTF::Unicode::strcasecmp to umemcasecmp.

        - unified constants for special Unicode characters in a new
          CharacterNames.h header

        * WebCore.xcodeproj/project.pbxproj:
        * css/cssparser.cpp:
        (WebCore::ParseString::lower):
        * dom/Document.cpp:
        (WebCore::isValidNameStart):
        (WebCore::isValidNamePart):
        * dom/Position.cpp:
        (WebCore::Position::leadingWhitespacePosition):
        (WebCore::Position::trailingWhitespacePosition):
        * editing/CompositeEditCommand.cpp:
        (WebCore::isWhitespace):
        * editing/HTMLInterchange.cpp:
        * editing/TextIterator.cpp:
        (WebCore::CircularSearchBuffer::CircularSearchBuffer):
        (WebCore::CircularSearchBuffer::append):
        * editing/htmlediting.cpp:
        (WebCore::stringWithRebalancedWhitespace):
        (WebCore::nonBreakingSpaceString):
        * editing/htmlediting.h:
        * html/HTMLFontElement.cpp:
        (WebCore::parseFontSizeNumber):
        * html/HTMLParser.cpp:
        (WebCore::HTMLParser::handleError):
        * html/HTMLSelectElement.cpp:
        (WebCore::stripLeadingWhiteSpace):
        * platform/Font.cpp:
        (WebCore::WidthIterator::advance):
        (WebCore::WidthIterator::normalizeVoicingMarks):
        * platform/GlyphMap.cpp:
        (WebCore::GlyphMap::locatePage):
        * platform/MimeTypeRegistry.h:
        * platform/StringHash.h:
        * platform/StringImpl.cpp:
        (WebCore::isSpace):
        (WebCore::StringImpl::append):
        (WebCore::StringImpl::insert):
        (WebCore::StringImpl::truncate):
        (WebCore::StringImpl::remove):
        (WebCore::parseLength):
        (WebCore::StringImpl::isLower):
        (WebCore::StringImpl::lower):
        (WebCore::StringImpl::upper):
        (WebCore::StringImpl::secure):
        (WebCore::StringImpl::foldCase):
        (WebCore::StringImpl::capitalize):t
        (WebCore::StringImpl::toInt):
        (WebCore::equalIgnoringCase):
        (WebCore::StringImpl::find):
        * platform/TextBoundaries.h:
        * platform/TextCodec.h:
        * platform/TextCodecLatin1.cpp:
        * platform/TextEncoding.h:
        * platform/TextEncodingRegistry.h:
        * platform/mac/PasteboardMac.mm:
        (WebCore::Pasteboard::writeSelection):
        * platform/mac/TextCodecMac.cpp:
        (WebCore::TextCodecMac::decode):
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::updateFirstLetter):
        * rendering/RenderListMarker.cpp:
        (WebCore::listMarkerText):
        (WebCore::RenderListMarker::paint):
        * rendering/RenderText.cpp:
        (WebCore::RenderText::widthFromCache):
        (WebCore::isSpaceAccordingToStyle):
        (WebCore::RenderText::setInternalString):
        * rendering/RenderTreeAsText.cpp:
        (WebCore::quoteAndEscapeNonPrintables):
        (WebCore::operator<<):
        * rendering/bidi.cpp:
        (WebCore::BidiState::BidiState):
        (WebCore::BidiContext::BidiContext):
        (WebCore::bidiNext):
        (WebCore::bidiFirst):
        (WebCore::BidiIterator::direction):
        (WebCore::appendRun):
        (WebCore::embed):
        (WebCore::RenderBlock::bidiReorderLine):
        (WebCore::RenderBlock::layoutInlineChildren):
        (WebCore::skipNonBreakingSpace):
        (WebCore::RenderBlock::findNextLineBreak):
        * rendering/break_lines.cpp:
        (WebCore::nextBreakablePosition):
        * rendering/break_lines.h:
        * xml/XPathParser.cpp:
        (WebCore::XPath::charCat):

2007-01-09  Dex Deacon  <occupant4@gmail.com>

        Reviewed by Darin.

        - fix http://bugs.webkit.org/show_bug.cgi?id=12170
          RenderView holds dangling reference to RenderObjects as selection markers

        This fixes the crash seen on Windows -- the underlying problem
        may still exist.

        * rendering/RenderText.h:
        (WebCore::RenderText::selectionState):
        Change the m_selectionState enum-bitfield to an unsigned-bitfield,
        because enums on Windows are signed, which caused it to become
        negative (whereas the valid values are all positive).

2007-01-09  Darin Adler  <darin@apple.com>

        Reviewed by Hyatt.

        - http://bugs.webkit.org/show_bug.cgi?id=12175
          port break_lines.cpp to be platform independent

        * platform/TextBreakIterator.h: Added lineBreakIterator.
        Removed ICU-specific stuff from the header.

        * platform/TextBreakIteratorICU.cpp:
        (WebCore::setUpIterator): Added helper to be shared by the three different
        creation functions.
        (WebCore::characterBreakIterator): Changed to use setUpIterator.
        (WebCore::wordBreakIterator): Ditto.
        (WebCore::lineBreakIterator): Added.

        * platform/qt/TextBreakIteratorQt.cpp:
        (WebCore::lineBreakIterator): Added a stub.

        * rendering/break_lines.cpp:
        (WebCore::isBreakableSpace): Added.
        (WebCore::shouldBreakAfter): Added.
        (WebCore::needsAdvancedBreakAnalysis): Added.
        (WebCore::nextBreakablePosition): Changed to use TextBreakIterator on platforms
        other than Mac.

2007-01-09  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Darin.

        - move WebDataProtocol load handling from ResourceLoader to MainResourceLoader
        
        (it's only ever used for main resources)

        * loader/ResourceLoader.h:
        (WebCore::ResourceLoader::setRequest):
        * loader/mac/MainResourceLoaderMac.mm:
        (WebCore::MainResourceLoader::willSendRequest):
        (WebCore::MainResourceLoader::continueAfterContentPolicy):
        * loader/mac/ResourceLoaderMac.mm:
        (WebCore::ResourceLoader::willSendRequest):
        (WebCore::ResourceLoader::didReceiveResponse):

2007-01-09  Rob Buis  <buis@kde.org>

        Reviewed by Eric.

        http://bugs.webkit.org/show_bug.cgi?id=12129
        repaint issue after setting viewBox attribute with ECMAScript

        Make sure RenderSVGContainer updates after setting viewBox from js.

        * ksvg2/svg/SVGSVGElement.cpp:
        (WebCore::SVGSVGElement::parseMappedAttribute):
        * rendering/RenderSVGContainer.cpp:
        (WebCore::RenderSVGContainer::setViewBox):

2007-01-09  Lars Knoll <lars@trolltech.com>

        Make the Qt build compile... again!

        * WebCore.pro:
        * loader/qt/FrameLoaderQt.cpp:
        * platform/graphics/qt/GraphicsContextQt.cpp:
        * platform/graphics/qt/ImageBufferQt.cpp:
        (WebCore::ImageBuffer::create):
        * platform/qt/WidgetQt.cpp:
        (WebCore::Widget::focusPolicy):

2007-01-09  David Hyatt  <hyatt@apple.com>

        Fix for background: inherit bug where background-color wasn't getting properly overridden.  This was a
        regression from Safari 1.3 to 2.0.

        Reviewed by bdash

        fast/backgrounds/background-color-inherit-bug.html

        * css/cssstyleselector.cpp:
        (WebCore::CSSStyleSelector::applyProperty):

2007-01-08  Brady Eidson <beidson@apple.com>

        Reviewed by Brian Dash

        <rdar://problem/4895178> 
        WebCore::BackForwardList vector should be backed by a HashSet to remove
        the potential expense in frequently calling BackForwardList::containsItem()

        * history/BackForwardList.cpp:
        (WebCore::BackForwardList::addItem): Maintain HashSet as well as Vector
        (WebCore::BackForwardList::setCapacity): Ditto
        (WebCore::BackForwardList::close): Ditto
        (WebCore::BackForwardList::removeItem): Ditto
        (WebCore::BackForwardList::containsItem): Make a hash lookup instead of iterate 
        through the Vector
        * history/BackForwardList.h:

2007-01-08  David Hyatt  <hyatt@apple.com>

        Fix a regression where layout is triggering on all recalcStyles, due to a bad comparison
        in the multicol assignment operator.

        * rendering/RenderStyle.cpp:
        (WebCore::StyleMultiColData::operator==):

2007-01-08  Darin Adler  <darin@apple.com>

        - rolled out Beth's RenderFlow::destroy change, which broke 5 editing tests

        * rendering/InlineBox.cpp: (WebCore::InlineBox::root):
        * rendering/RenderFlow.cpp: (WebCore::RenderFlow::destroy):
        Used svn merge to roll the change out.

2007-01-09  Mark Rowe  <mrowe@apple.com>

        Reviewed by Tim H.

        Build fix for 64-bit platforms.

        * platform/graphics/svg/SVGPaintServerGradient.h:
        * platform/graphics/svg/cg/SVGPaintServerGradientCg.cpp:
        (WebCore::SVGPaintServerGradient::updateQuartzGradientStopsCache):

2007-01-08  Anders Carlsson  <acarlsson@apple.com>

        Reviewed by Brady.

        Move some history related functions off the bridge and into FrameLoader directly.

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::canGoBackOrForward):
        (WebCore::FrameLoader::getHistoryLength):
        (WebCore::FrameLoader::historyURL):
        * loader/mac/FrameLoaderMac.mm:
        * page/mac/WebCoreFrameBridge.h:

2007-01-08  Sam Weinig  <sam@webkit.org>

        Reviewed by Mark.

        Adds outline-color to list of computable styles.

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

2007-01-08  Beth Dakin  <bdakin@apple.com>

        Reviewed by Hyatt.

        Fix for a bug that Adam, Hyatt, and I noticed when debugging 
        another problem.

        * rendering/InlineBox.cpp:
        (WebCore::InlineBox::root): Added assertion. If we are casting to a 
        root, we should make sure we are root.
        * rendering/RenderFlow.cpp:
        (WebCore::RenderFlow::destroy): It is not enough to remove the 
        child boxes for anonymous blocks. We need to be more thorough when 
        cleaning these up. Adam's test case illustrates the problem well.

2007-01-08  John Sullivan  <sullivan@apple.com>

        Tweak to previous checkin

        * page/ContextMenuController.cpp:
        (WebCore::ContextMenuController::contextMenuItemSelected):
        Adam suggested I should nil-check frame->page()

2007-01-08  John Sullivan  <sullivan@apple.com>

        Reviewed by Brady and Beth
        
        - fixed <rdar://problem/4912541> GMAIL: With selected text in a rich text message, choosing 
        "Search in Google" displays search results in the message body field

        * page/ContextMenuController.cpp:
        (WebCore::ContextMenuController::contextMenuItemSelected):
        Visit google URL in main frame rather than in current frame

2007-01-08  David Hyatt  <hyatt@apple.com>

        Fix computed style errors for color properties that had invalid colors.
        They should return the value of the 'color' property when their colors
        are not valid.

        Fixed the computed style value for border-top-color (a typo was causing it to
        use border-left-color instead).

        Implement outline-color computed style.

        Reviewed by harrison

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::currentColorOrValidColor):
        (WebCore::CSSComputedStyleDeclaration::getPropertyCSSValue):

2007-01-08  Remi Zara  <remi_zara@mac.com>

        Reviewed by Darin and Eric.

        Fixes: http://bugs.webkit.org/show_bug.cgi?id=12150
        Handle correctly cases where no stops are defined, cases where a
        stop offset value is less than previous stops offset value, and cases
        where a stop offset value is greater than 1.0.
        
        * platform/graphics/svg/SVGPaintServerGradient.cpp:
        (WebCore::SVGPaintServerGradient::setGradientStops): Don't sort stops
        * platform/graphics/svg/cg/SVGPaintServerGradientCg.cpp:
        (WebCore::cgGradientCallback): When there are no stops, use a transparent
        fill
        (WebCore::SVGPaintServerGradient::updateQuartzGradientStopsCache):
        a stop offset must always be considered at greater or equal to all
        preceding stop offsets, but no more than 1.0

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

        Reviewed by Geoff.

        <rdar://problem/4865325> please re-add auto font activation support in WebKit

        * platform/mac/WebFontCache.mm:
        (+[WebFontCache fontWithFamily:traits:size:]):

2007-01-08  Darin Adler  <darin@apple.com>

        Reviewed by Adam.

        - http://bugs.webkit.org/show_bug.cgi?id=12143
          remove Widget code unneeded now that form elements do not use Widget

        * bindings/objc/DOMHTML.mm: (-[DOMHTMLSelectElement _activateItemAtIndex:]):
        Removed useless implementation that would only work with NSView-based
        <select> elements, and added a FIXME about the fact that this function
        doesn't do anything any more. I think it's used by Safari forms auto-fill.

        * bridge/mac/WebCoreAXObject.mm: (-[WebCoreAXObject rendererForView:]):
        Removed code that depends on elementForView:, since that always returns
        nil now.

        * html/HTMLFormElement.cpp: (WebCore::HTMLFormElement::~HTMLFormElement):
        Use a formDestroyed() function rather than clearing m_form directly so that
        this class doesn't have to be a friend of HTMLGenericFormElement.

        * html/HTMLGenericFormElement.h: Removed now-unneeded friend declaration
        for HTMLFormElement. Moved definition of supportsFocus into the .cpp file.
        Added a public formDestroyed function for use by HTMLFormElement.
        * html/HTMLGenericFormElement.cpp:
        (WebCore::HTMLGenericFormElement::attach): Removed widget-specific code.
        (WebCore::HTMLGenericFormElement::isKeyboardFocusable): Ditto.
        (WebCore::HTMLGenericFormElement::isMouseFocusable): Ditto.
        (WebCore::HTMLGenericFormElement::supportsFocus): Added this here; it was
        in the header file before, for no good reason.

        * page/EventHandler.h: Removed unused Mac-specific
        currentEventIsMouseDownInWidget.
        * page/mac/EventHandlerMac.mm: Ditto.

        * page/Frame.cpp: (WebCore::Frame::frameForWidget): Changed to use
        RenderWidget to find the frame rather than the WigetClient element()
        function.

        * page/mac/FrameMac.h: Removed unused bridgeForWidget.
        * page/mac/FrameMac.mm: Ditto.

        * page/mac/WebCoreFrameBridge.h: Removed elementForView.
        * page/mac/WebCoreFrameBridge.mm: Ditto. While the scroll bar still did
        implement WebCoreWidgetHolder, it does not correspond to a DOM element,
        so this method was always returning nil.

        * platform/Widget.h: Moved unused types and functions that are still
        in the platform-specific implementations into a "to be deleted" section:
        FocusPolicy, NoFocus, TabFocus, ClickFocus, StrongFocus, WheelFocus,
        lockDrawingFocus, font, focusPolicy, hasFocus, clearFocus, setFont,
        disableFlushDrawing, enableFlushDrawing, unlockDrawingFocus.
        Removed unused functions that are not in platform-specific implementations:
        sizeHint, baselinePosition, checksDescendantsForFocus.
        * platform/Widget.cpp: Removed functions.

        * platform/WidgetClient.h: Emptied out the class. Soon we can delete it.

        * platform/mac/PlatformScrollBarMac.mm: (-[WebCoreScrollBar mouseDown:]):
        Got rid of unneeded includes, removed use of the WebCoreWidgetHolder
        protocol and the one method in it, and changed the calls to beforeMouseDown
        and afterMouseDown to pass the widget pointer in.

        * platform/mac/WebCoreWidgetHolder.h: Emptied out the file -- to be deleted
        later.

        * platform/mac/WidgetMac.mm:
        (WebCore::Widget::~Widget): Removed code to manage deferredFirstResponder.
        (WebCore::Widget::hasFocus): Removed body of function and replaced with
        an assertion that it's never called. Later we'll remove it.
        (WebCore::Widget::setFocus): Tweaked a bit to work given changes to the
        FrameMac class. Also added a FIXME. Given how this works, it does not
        belong in the platform layer.
        (WebCore::Widget::clearFocus): Removed body of function and replaced with
        an assertion that it's never called. Later we'll remove it.
        (WebCore::Widget::focusPolicy): Ditto.
        (WebCore::Widget::font): Ditto.
        (WebCore::Widget::setFont): Ditto.
        (WebCore::Widget::lockDrawingFocus): Ditto.
        (WebCore::Widget::unlockDrawingFocus): Ditto.
        (WebCore::Widget::disableFlushDrawing): Ditto.
        (WebCore::Widget::enableFlushDrawing): Ditto.
        (WebCore::Widget::paint): Removed obsolete comment.
        (WebCore::Widget::sendConsumedMouseUp): Removed body of function and replaced with
        an assertion that it's never called. Later we'll remove it.
        (WebCore::Widget::setIsSelected): Tweaked a bit to work given changes to the
        FrameMac class. Also added a FIXME. Given how this works, it does not
        belong in the platform layer.
        (WebCore::Widget::beforeMouseDown): Changed to take an explicit Widget parameter.
        (WebCore::Widget::afterMouseDown): Ditto.

        * rendering/RenderApplet.cpp:
        (WebCore::RenderApplet::intrinsicWidth): Changed to not call sizeHint() any more.
        I didn't change the values returned by the function, but they make no sense and
        this should probably be fixed later.
        (WebCore::RenderApplet::intrinsicHeight): Ditto.

        * rendering/RenderWidget.h: Removed unneeded WidgetClient.h include. Changed
        RenderWidget to no longer inherit from WidgetClient. Added a find function to find
        a RenderWidget given a Widget. Removed all the virtual functions that override
        WidgetClient hooks.
        * rendering/RenderWidget.cpp: Removed all the WidgetClient functions.
        (WebCore::widgetRendererMap): Added. Map that gives the RenderWidget for each
        Widget that is owned by a RenderWidget.
        (WebCore::RenderWidget::destroy): Removed the setClient call and added a call to
        remove the widget from the widgetRendererMap.
        (WebCore::RenderWidget::setWidget): Ditto.
        (WebCore::RenderWidget::setStyle): Removed the call to Widget::setFont.
        (WebCore::RenderWidget::find): Added. Returns the RenderWidget for a Widget, if any.

        - other changes

        * dom/Node.cpp:
        (WebCore::Node::dump): Removed unnecessary use of DeprecatedString.
        (WebCore::appendAttributeDesc): Ditto.
        (WebCore::Node::showNode): Ditto.
        (WebCore::Node::formatForDebugger): Ditto.

        * loader/CachedImage.cpp: (WebCore::CachedImage::createImage): Cleaned up
        conditional compilation so adding more MIME types here doesn't make the
        function more and more difficult to read.

        * page/Frame.h: Removed unneeded includes and declarations.
        Tweaked formatting.
        * page/Page.h: Removed unneeded declarations.
        * platform/ScrollView.h: Removed unneeded includes.

        * rendering/RenderBlock.cpp: (WebCore::RenderBlock::renderName): Tweaked formatting.

2007-01-08  Mitz Pettel  <mitz@webkit.org>

        Reviewed by Darin.

        - fix http://bugs.webkit.org/show_bug.cgi?id=12162
          The inheritableProperties array is duplicated

        No test possible (no change to functionality).

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::CSSComputedStyleDeclaration::removeComputedInheritablePropertiesFrom): Added.
        Removes the inheritable properties that CSSComputedStyleDeclaration knows how to compute
        from the given mutable declaration.
        * css/CSSComputedStyleDeclaration.h:
        * css/CSSMutableStyleDeclaration.cpp: Removed one copy of the inheritableProperties array.
        * css/CSSMutableStyleDeclaration.h:
        * editing/ReplaceSelectionCommand.cpp:
        (WebCore::ReplaceSelectionCommand::removeRedundantStyles): Changed to call
        CSSComputedStyleDeclaration::removeComputedInheritablePropertiesFrom.

2007-01-08  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Darin.

        http://bugs.webkit.org/show_bug.cgi?id=12099
        XMLHttpRequest shouldn't honor a charset specified via setRequestHeader

        Test: http/tests/xmlhttprequest/request-encoding.html

        * xml/xmlhttprequest.cpp:
        (WebCore::XMLHttpRequest::send): Don't try to get the charset from Content-Type. Keep checking 
        for unknown charsets, because that will be needed again when we start using document.xmlEncoding.

2007-01-08  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Darin.

        http://bugs.webkit.org/show_bug.cgi?id=7640
        Menu items are displayed as "undefined"

        * bindings/js/kjs_dom.cpp:
        (KJS::DOMNodeProtoFunc::callAsFunction):
        * bindings/js/kjs_domnode.h:
        (KJS::DOMNode::):
        Removed Node::item. No idea why it was there in the first place.

        * bindings/js/kjs_html.cpp:
        (KJS::HTMLElementFunction::callAsFunction):
        * bindings/js/kjs_html.h:
        (KJS::JSHTMLElement::):
        Added HTMLSelectElement::item. It is not in DOM2 IDL, but the spec seems to mentions it anyway:
        "The contained options can be directly accessed through the select element as a collection."

        * html/HTMLSelectElement.cpp:
        (WebCore::HTMLSelectElement::namedItem):
        (WebCore::HTMLSelectElement::item):
        * html/HTMLSelectElement.h:
        * html/HTMLSelectElement.idl:
        Added this method to DOM and IDL, too. Made namedItem() non-virtual.

2007-01-08  Beth Dakin  <bdakin@apple.com>

        Reviewed by Maciej.

        Fix for <rdar://problem/4912254> REGRESSION: After copying text to 
        the clipboard, the paste contextual remains dimmed when it should
        be active

        No layout test for context menu problems.

        * platform/ContextMenu.cpp:
        (WebCore::ContextMenu::checkOrEnableIfNeeded): Remove check to see 
        if the content is richly editable; it only has to be regular 
        editable and the call to canPaste() takes care of that.

2007-01-08  Sam Weinig  <sam@webkit.org>

        Reviewed by Mitz.

        Attempt to fix build for buildbots.

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::columnGap):
        (WebCore::RenderBlock::calcColumnWidth):

2007-01-08  Darin Adler  <darin@apple.com>

        Reviewed by Maciej.

        - fix http://bugs.webkit.org/show_bug.cgi?id=3232
          CSS2: Web Kit does not support all list style types

        Test case showed problems in cjk-ideographic and hebrew
        Test: fast/lists/w3-list-styles.html

        * rendering/RenderListMarker.cpp:
        (WebCore::toCJKIdeographic): Fix the algorithm so it doesn't include leading zeroes.
        I had misread the part that says you start with the decimal form of the number.
        Fix an assertion that was too stringent. Fix the code to collapse consecutive zeroes
        so that it doesn't get confused by intervening "noChar" characters.
        (WebCore::RenderListMarker::paint): Reverse the text before painting if the first character's
        direction is right to left.

2007-01-08  Darin Adler  <darin@apple.com>

        Reviewed by Beth.

        - http://bugs.webkit.org/show_bug.cgi?id=12142
          render tree dump for test results should include the value of list markers

        * rendering/RenderTreeAsText.cpp:
        (WebCore::getTagName): Changed to use String instead of DeprecatedString.
        (WebCore::quoteAndEscapeNonPrintables): Ditto. Also moved up so it can be used
        in the operator below.
        (WebCore::operator<<): Added clause for RenderListMarker that dumps the value
        of the list marker's text.
        (WebCore::nodePosition): Changed to use String instead of DeprecatedString.
        * rendering/SVGRenderTreeAsText.cpp:
        (WebCore::TextStreamSeparator::TextStreamSeparator): Changed to use String
        instead of DeprecatedString.
        (WebCore::getTagName): Ditto.
        (WebCore::write): Ditto.

2007-01-08  Sam Weinig  <sam@webkit.org>

        Reviewed by ap and the rubber stamp of Maciej.

        Patch for http://bugs.webkit.org/show_bug.cgi?id=12164
        Cleanup Tokenizers

        - Moves Tokenizer class into its own file.
        - Move XMLTokenizer declaration from XMLTokenizer.cpp to XMLTokenizer.h
        - Fixup #includes.

        * WebCore.xcodeproj/project.pbxproj:
        * dom/Document.cpp:
        (WebCore::Document::createTokenizer):
        * dom/Tokenizer.h: Added.
        (WebCore::Tokenizer::Tokenizer):
        (WebCore::Tokenizer::~Tokenizer):
        (WebCore::Tokenizer::stopParsing):
        (WebCore::Tokenizer::processingData):
        (WebCore::Tokenizer::executingScript):
        (WebCore::Tokenizer::wantsRawData):
        (WebCore::Tokenizer::writeRawData):
        (WebCore::Tokenizer::inViewSourceMode):
        (WebCore::Tokenizer::setInViewSourceMode):
        (WebCore::Tokenizer::wellFormed):
        (WebCore::Tokenizer::lineNumber):
        (WebCore::Tokenizer::columnNumber):
        * dom/XMLTokenizer.cpp:
        * dom/XMLTokenizer.h:
        (WebCore::XMLTokenizer::):
        (WebCore::XMLTokenizer::setIsXHTMLDocument):
        (WebCore::XMLTokenizer::isXHTMLDocument):
        (WebCore::XMLTokenizer::wellFormed):
        * html/HTMLElement.cpp:
        * html/HTMLTokenizer.h:
        (WebCore::Token::reset):
        (WebCore::HTMLTokenizer::checkBuffer):
        (WebCore::HTMLTokenizer::checkScriptBuffer):
        (WebCore::HTMLTokenizer::State::State):
        (WebCore::HTMLTokenizer::State::setBit):
        * xml/XSLTProcessor.cpp:

2007-01-08  Sam Weinig  <sam@webkit.org>

        Reviewed by Tim H.

        Adds -webkit-box-shadow to list of computable styles.

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

2007-01-08  Rob Buis  <buis@kde.org>

        Reviewed by bdash.

        Initialize the member vars, fixes testcases
        pointer-events-path.svg and pointer-events-text.svg
        on the PPC build.

        * ksvg2/misc/PointerEventsHitRules.cpp:
        (WebCore::PointerEventsHitRules::PointerEventsHitRules):

2007-01-08  David Hyatt  <hyatt@apple.com>

        This patch computes the correct column width and column count.  It ensures that content lays out constrained
        to the column width in one long strip.  It does not yet balance the long strip into multiple columns.

        Reviewed by Mark

        * rendering/RenderBlock.cpp:
        (WebCore:::RenderFlow):
        (WebCore::RenderBlock::layoutBlock):
        (WebCore::RenderBlock::rightOffset):
        (WebCore::RenderBlock::availableWidth):
        (WebCore::RenderBlock::columnGap):
        (WebCore::RenderBlock::calcColumnWidth):
        * rendering/RenderBlock.h:
        * rendering/RenderStyle.h:
        (WebCore::RenderStyle::setColumnWidth):

2007-01-08  David Hyatt  <hyatt@apple.com>

        Fix column-count so that it supports auto just like column-width does.

        Add a new function, availableWidth(), that will be used to return the width available to content placed inside
        a block.  For now it still returns contentWidth(), so no behavioral change has occurred yet.

        Subclass calcWidth() in RenderBlock, but don't change anything yet.  This is where RenderBlock will calc the
        correct column width.

        Reviewed by mark

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::CSSComputedStyleDeclaration::getPropertyCSSValue):
        * css/cssstyleselector.cpp:
        (WebCore::CSSStyleSelector::applyProperty):
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::leftRelOffset):
        (WebCore::RenderBlock::rightRelOffset):
        (WebCore::RenderBlock::getClearDelta):
        (WebCore::RenderBlock::availableWidth):
        (WebCore::RenderBlock::calcWidth):
        * rendering/RenderBlock.h:
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::containingBlockWidth):
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::containingBlockWidth):
        (WebCore::RenderObject::paddingTop):
        (WebCore::RenderObject::paddingBottom):
        (WebCore::RenderObject::paddingLeft):
        (WebCore::RenderObject::paddingRight):
        * rendering/RenderObject.h:
        (WebCore::RenderObject::availableWidth):
        * rendering/RenderStyle.cpp:
        (WebCore::StyleMultiColData::StyleMultiColData):
        (WebCore::StyleMultiColData::operator==):
        * rendering/RenderStyle.h:
        (WebCore::RenderStyle::hasAutoColumnCount):
        (WebCore::RenderStyle::setColumnCount):
        (WebCore::RenderStyle::setHasAutoColumnCount):
        * rendering/RenderTable.cpp:
        (WebCore::RenderTable::calcWidth):

2007-01-08  David Hyatt  <hyatt@apple.com>

        Fix z-index:inherit so that it works properly when inheriting from z-index:auto.

        Reviewed by eric

        fast/layers/zindex-inherit.html

        * css/cssstyleselector.cpp:
        (WebCore::CSSStyleSelector::applyProperty):

2007-01-08  David Hyatt  <hyatt@apple.com>

        Add support for all of the CSS3 multi-column properties in preparation for implementing the
        feature.

        Reviewed by eric

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::):
        (WebCore::CSSComputedStyleDeclaration::getPropertyCSSValue):
        * css/CSSMutableStyleDeclaration.cpp:
        (WebCore::):
        * css/CSSPropertyNames.in:
        * css/cssparser.cpp:
        (WebCore::CSSParser::parseValue):
        * css/cssstyleselector.cpp:
        (WebCore::CSSStyleSelector::applyProperty):
        * rendering/RenderStyle.cpp:
        (WebCore::StyleMultiColData::StyleMultiColData):
        (WebCore::StyleMultiColData::operator==):
        (WebCore::StyleRareNonInheritedData::StyleRareNonInheritedData):
        (WebCore::StyleRareNonInheritedData::operator==):
        (WebCore::RenderStyle::RenderStyle):
        (WebCore::RenderStyle::diff):
        * rendering/RenderStyle.h:
        (WebCore::StyleMultiColData::operator!=):
        (WebCore::StyleMultiColData::ruleWidth):
        (WebCore::RenderStyle::columnWidth):
        (WebCore::RenderStyle::hasAutoColumnWidth):
        (WebCore::RenderStyle::columnCount):
        (WebCore::RenderStyle::columnGap):
        (WebCore::RenderStyle::hasAutoColumnGap):
        (WebCore::RenderStyle::columnRuleColor):
        (WebCore::RenderStyle::columnRuleStyle):
        (WebCore::RenderStyle::columnRuleWidth):
        (WebCore::RenderStyle::columnBreakBefore):
        (WebCore::RenderStyle::columnBreakInside):
        (WebCore::RenderStyle::columnBreakAfter):
        (WebCore::RenderStyle::setColumnWidth):
        (WebCore::RenderStyle::setHasAutoColumnWidth):
        (WebCore::RenderStyle::setColumnCount):
        (WebCore::RenderStyle::setColumnGap):
        (WebCore::RenderStyle::setHasAutoColumnGap):
        (WebCore::RenderStyle::setColumnRuleColor):
        (WebCore::RenderStyle::setColumnRuleStyle):
        (WebCore::RenderStyle::setColumnRuleWidth):
        (WebCore::RenderStyle::resetColumnRule):
        (WebCore::RenderStyle::setColumnBreakBefore):
        (WebCore::RenderStyle::setColumnBreakInside):
        (WebCore::RenderStyle::setColumnBreakAfter):
        (WebCore::RenderStyle::initialColumnCount):
        (WebCore::RenderStyle::initialColumnWidth):

2007-01-07  Rob Buis  <buis@kde.org>

        Reviewed by Eric.

        http://bugs.webkit.org/show_bug.cgi?id=10587
        pointer-events is not implemented for RenderSVGImage or RenderSVGText

        Implement pointer-events for raster images and svg text.

        * WebCore.xcodeproj/project.pbxproj:
        * ksvg2/misc/PointerEventsHitRules.cpp: Added.
        (WebCore::PointerEventsHitRules::PointerEventsHitRules):
        * ksvg2/misc/PointerEventsHitRules.h: Added.
        (WebCore::PointerEventsHitRules::):
        * rendering/RenderPath.cpp:
        (WebCore::RenderPath::nodeAtPoint):
        * rendering/RenderPath.h:
        * rendering/RenderSVGImage.cpp:
        (WebCore::RenderSVGImage::nodeAtPoint):
        * rendering/RenderSVGImage.h:
        * rendering/RenderSVGText.cpp:
        (WebCore::RenderSVGText::nodeAtPoint):
        * rendering/RenderSVGText.h:

2007-01-07  David Hyatt  <hyatt@apple.com>

        Fix a regression where border-radius was not clipping the background when border was set to none.
        Fix multi-line inline flow painting to properly apply border-radius to the background only at the
        beginning of the first line and end of the last line.

        Reviewed by eric

        * rendering/InlineFlowBox.cpp:
        (WebCore::InlineFlowBox::paintBackground):
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::paintBackground):
        (WebCore::RenderBox::paintBackgroundExtended):
        * rendering/RenderBox.h:
        * rendering/RenderObject.h:
        (WebCore::RenderObject::paintBackgroundExtended):

2007-01-07  David Hyatt  <hyatt@apple.com>

        Add support for the CSS3 box-shadow property.

        Reviewed by olliej

        fast/box-shadow/ contains the tests for this feature.

        * platform/graphics/GraphicsContext.cpp:
        (WebCore::GraphicsContext::clipOutRoundedRect):
        * platform/graphics/GraphicsContext.h:
        * platform/graphics/cg/GraphicsContextCG.cpp:
        (WebCore::GraphicsContext::fillRoundedRect):
        (WebCore::GraphicsContext::clipOut):
        (WebCore::GraphicsContext::clipOutEllipseInRect):
        * platform/graphics/qt/GraphicsContextQt.cpp:
        (WebCore::GraphicsContext::fillRoundedRect):
        (WebCore::GraphicsContext::clipOut):
        (WebCore::GraphicsContext::clipOutEllipseInRect):
        * rendering/InlineFlowBox.cpp:
        (WebCore::InlineFlowBox::paint):
        (WebCore::InlineFlowBox::paintBoxShadow):
        (WebCore::InlineFlowBox::paintBoxDecorations):
        (WebCore::shouldDrawTextDecoration):
        (WebCore::InlineFlowBox::paintTextDecorations):
        * rendering/InlineFlowBox.h:
        * rendering/InlineRunBox.h:
        (WebCore::InlineRunBox::paintBoxDecorations):
        (WebCore::InlineRunBox::paintTextDecorations):
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::paintObject):
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::setStyle):
        (WebCore::RenderBox::paintBoxDecorations):
        (WebCore::RenderBox::paintBackgroundExtended):
        * rendering/RenderFieldset.cpp:
        (WebCore::RenderFieldset::paintBoxDecorations):
        * rendering/RenderHTMLCanvas.cpp:
        (WebCore::RenderHTMLCanvas::paint):
        * rendering/RenderImage.cpp:
        (WebCore::RenderImage::paint):
        * rendering/RenderImage.h:
        * rendering/RenderListMarker.cpp:
        (WebCore::RenderListMarker::paint):
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::mustRepaintBackgroundOrBorder):
        (WebCore::RenderObject::paintBoxShadow):
        (WebCore::RenderObject::dump):
        (WebCore::RenderObject::setStyle):
        * rendering/RenderObject.h:
        (WebCore::RenderObject::hasBoxDecorations):
        (WebCore::RenderObject::setHasBoxDecorations):
        * rendering/RenderSVGContainer.cpp:
        (WebCore::RenderSVGContainer::paint):
        * rendering/RenderTable.cpp:
        (WebCore::RenderTable::paint):
        (WebCore::RenderTable::paintBoxDecorations):
        * rendering/RenderTableCell.cpp:
        (WebCore::RenderTableCell::RenderTableCell):
        (WebCore::RenderTableCell::setStyle):
        (WebCore::RenderTableCell::paintBoxDecorations):
        * rendering/RenderWidget.cpp:
        (WebCore::RenderWidget::paint):

2007-01-07  Rob Buis  <buis@kde.org>

        Reviewed by weinig.

        http://bugs.webkit.org/show_bug.cgi?id=10362
        SVG needs to support SVGError events and some form of "error state"

        Report SVG warnings and errors on (JS) console.
        Expose line and column number getters in Tokenizer in
        order to display them with the error message.

        * dom/XMLTokenizer.cpp:
        * dom/XMLTokenizer.h:
        (WebCore::Tokenizer::lineNumber):
        (WebCore::Tokenizer::columnNumber):
        * html/HTMLTokenizer.h:
        (WebCore::HTMLTokenizer::lineNumber):
        (WebCore::HTMLTokenizer::columnNumber):
        * ksvg2/misc/SVGDocumentExtensions.cpp:
        (WebCore::SVGDocumentExtensions::reportWarning):
        (WebCore::SVGDocumentExtensions::reportError):
        * ksvg2/misc/SVGDocumentExtensions.h:
        * ksvg2/svg/SVGCircleElement.cpp:
        (WebCore::SVGCircleElement::parseMappedAttribute):
        * ksvg2/svg/SVGElement.h:
        * ksvg2/svg/SVGEllipseElement.cpp:
        (WebCore::SVGEllipseElement::parseMappedAttribute):
        * ksvg2/svg/SVGFitToViewBox.cpp:
        (WebCore::SVGFitToViewBox::parseViewBox):
        * ksvg2/svg/SVGFitToViewBox.h:
        * ksvg2/svg/SVGImageElement.cpp:
        (WebCore::SVGImageElement::parseMappedAttribute):
        * ksvg2/svg/SVGParserUtilities.cpp:
        (WebCore::SVGPolyParser::parsePoints):
        * ksvg2/svg/SVGParserUtilities.h:
        * ksvg2/svg/SVGPathElement.cpp:
        (WebCore::SVGPathElement::parseMappedAttribute):
        * ksvg2/svg/SVGPatternElement.cpp:
        (WebCore::SVGPatternElement::parseMappedAttribute):
        * ksvg2/svg/SVGPolyElement.cpp:
        (WebCore::SVGPolyElement::parseMappedAttribute):
        * ksvg2/svg/SVGRadialGradientElement.cpp:
        (WebCore::SVGRadialGradientElement::parseMappedAttribute):
        * ksvg2/svg/SVGRectElement.cpp:
        (WebCore::SVGRectElement::parseMappedAttribute):
        * ksvg2/svg/SVGSVGElement.cpp:
        (WebCore::SVGSVGElement::parseMappedAttribute):
        * ksvg2/svg/SVGTextContentElement.cpp:
        (WebCore::SVGTextContentElement::parseMappedAttribute):
        * ksvg2/svg/SVGUseElement.cpp:
        (WebCore::SVGUseElement::parseMappedAttribute):

2007-01-07  Nikolas Zimmermann  <zimmermann@kde.org>

        Reviewed by Sam.

        Cleanup code & fix InlineBox positioning when text-anchor is used.

        * rendering/RenderSVGText.cpp: Cleanup code.
        (WebCore::RenderSVGText::nodeAtPoint):
        (WebCore::RenderSVGText::absoluteRects):
        (WebCore::RenderSVGText::paint):
        * rendering/RenderText.cpp: Remove unused function posOfChar()
        * rendering/RenderText.h: Ditto.
        * rendering/SVGInlineFlowBox.cpp:
        (WebCore::translateBox):
        (WebCore::placePositionedBoxesHorizontally):

2007-01-06  George Staikos  <staikos@kde.org>

        Reviewed by Brady.

        Make the Qt build work.... again.

        * WebCore.pro:
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::requestFromDelegate):
        * loader/qt/DocumentLoaderQt.cpp:
        * loader/qt/FrameLoaderQt.cpp:
        * loader/qt/MainResourceLoaderQt.cpp: Added.
        (WebCore::MainResourceLoader::create):
        * loader/qt/ResourceLoaderQt.cpp:
        (WebCore::ResourceLoader::load):
        (WebCore::ResourceLoader::cancel):
        (WebCore::ResourceLoader::releaseResources):
        (WebCore::ResourceLoader::addData):
        * platform/network/qt/ResourceHandleQt.cpp:
        (WebCore::ResourceHandle::supportsBufferedData):
        (WebCore::ResourceHandle::bufferedData):
        (WebCore::ResourceHandle::loadResourceSynchronously):
        * platform/qt/LoaderFunctionsQt.cpp:
        * platform/qt/TemporaryLinkStubs.cpp: implemented some functions
        (WebCore::screenDepth):
        (WebCore::screenDepthPerComponent):
        (WebCore::screenIsMonochrome):
        (WebCore::screenRect):
        (WebCore::screenAvailableRect):

2007-01-07  Mitz Pettel  <mitz@webkit.org>

        Reviewed by Mark Rowe.

        - fix http://bugs.webkit.org/show_bug.cgi?id=11133

        Test: fast/forms/listbox-clip.html

        * platform/mac/PlatformScrollBarMac.mm:
        (-[WebCoreScrollBar initWithPlatformScrollbar:]): Get the correct scrollbar
        width/height based on control size.
        * rendering/RenderListBox.cpp:
        Renamed optionsSpacingLeft to optionsSpacingHorizontal since it is applied
        on both sides.
        (WebCore::RenderListBox::calcMinMaxWidth): Account for optionsSpacingHorizontal.
        Not including the spacing before went unnoticed since the scrollbar was lying
        about its width by exactly the same amount.
        (WebCore::RenderListBox::paintObject): Clip out the scrollbar.
        (WebCore::RenderListBox::paintItemForeground): Changed for the rename.

2007-01-07  Mitz Pettel  <mitz@webkit.org>

        Reviewed by Hyatt.

        - fix http://bugs.webkit.org/show_bug.cgi?id=11935
          REGRESSION: Changing the overflow style dynamically does not force repaint

        Test: fast/repaint/erase-overflow.html

        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::setStyle): Added a repaint before changing hasOverflowClip
        to true, to ensure that the current overflow is erased.

2007-01-07  Graham Dennis  <graham.dennis@gmail.com>

        Reviewed by Darin.

        Patch for http://bugs.webkit.org/show_bug.cgi?id=12106
        Changed URL from WebResourceLoadDelegate's webView:resource:willSendRequest:... is ignored

        * loader/mac/SubresourceLoaderMac.mm:
        (WebCore::SubresourceLoader::willSendRequest): Use m_originalURL instead of request().url()
        as m_request is not set until the end of ResourceLoader::willSendRequest. Also, ensure that
        the request is updated if the frame's client changes it, and that the SubresourceLoader's client
        gets the new request and not the old one. 

2007-01-07  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Darin.

        http://bugs.webkit.org/show_bug.cgi?id=10313
        xsl:import doesn't work in stylesheets loaded via XMLHttpRequest

        This is a partial fix that makes a couple more steps towards fixing the problem.

        Test: fast/xsl/transform-xhr-doc.xhtml

        * xml/XSLTProcessor.cpp:
        (WebCore::xsltStylesheetPointer): Pass an URL for the stylesheet. I'm not sure why this constructor even needs it, 
        given that it has a Node, but this is a small modifications that makes XSLImportRule try to load from a correct URL.
        (WebCore::XSLTProcessor::transformToString): Fix the crash for real this time.

2007-01-06  Rob Buis  <buis@kde.org>

        Reviewed by Darin.

        http://bugs.webkit.org/show_bug.cgi?id=12125
        overflow attribute of the symbol element not respected

        Copy the attribute map to the cloned node so the overflow on
        the symbol is respected.

        * ksvg2/svg/SVGUseElement.cpp:
        (WebCore::SVGUseElement::closeRenderer):

2007-01-06  Eric Seidel  <eric@webkit.org>

        Reviewed and significantly tweaked by Darin.

        - fix http://bugs.webkit.org/show_bug.cgi?id=12103
          LEAK: Fix the leaking ImageBuffer buffers on TOT

        * ksvg2/svg/SVGMaskElement.h:
        * ksvg2/svg/SVGMaskElement.cpp:
        (WebCore::SVGMaskElement::drawMaskerContent):
        Changed to return auto_ptr since it returns a newly-created ImageBuffer.

        * ksvg2/svg/SVGPatternElement.cpp:
        (WebCore::SVGPatternElement::buildPattern):
        Changed to use auto_ptr since ImageBuffer::create now returns one.

        * platform/graphics/GraphicsContext.h: Removed the include of ImageBuffer.h,
        which was never needed, and the declaration of createImageBuffer, which is
        now a class member function of ImageBuffer.

        * platform/graphics/ImageBuffer.h: Replaced the constructor with a create
        function. Added a comment about the need to move renderSubtreeToImage
        elsewhere. Added an m_data member to store the data so it can be deleted
        when the object is done, made the m_size member non-platform-specific.
        Added a private constructor for use to create the CG version.

        * platform/graphics/cg/GraphicsContextCG.cpp: Removed
        GraphicsContext::createImageBuffer.

        * platform/graphics/cg/ImageBufferCG.cpp:
        (WebCore::ImageBuffer::create): Added. Replaces the old
        GraphicsContext::createImageBuffer function.
        (WebCore::ImageBuffer::ImageBuffer): Added m_data and m_context.
        (WebCore::ImageBuffer::~ImageBuffer): Added a fastFree of the data and got
        rid of the unneeded null check before calling CGImageRelease.

        * platform/graphics/svg/SVGPaintServerGradient.h: Removed the include of
        ImageBuffer.h and declared the ImageBuffer class instead.

        * platform/graphics/svg/SVGPaintServerPattern.h: Removed the include of
        ImageBuffer.h and declared the ImageBuffer class instead, and changed setTile
        to take an auto_ptr since it takes ownership of the ImageBuffer.
        * platform/graphics/svg/SVGPaintServerPattern.cpp:
        (WebCore::SVGPaintServerPattern::setTile): Ditto.

        * platform/graphics/svg/SVGResourceMasker.h: Removed the include of
        ImageBuffer.h and declared the ImageBuffer class instead, and changed setMask
        to take an auto_ptr since it takes ownership of the ImageBuffer.
        * platform/graphics/svg/SVGResourceMasker.cpp:
        (WebCore::SVGResourceMasker::setMask): Ditto.

        * platform/graphics/svg/cg/SVGPaintServerGradientCg.cpp:
        (WebCore::SVGPaintServerGradient::setup): Updated to use auto_ptr.

        * platform/graphics/svg/cg/SVGPaintServerPatternCg.cpp: Updated includes.

        * platform/graphics/svg/cg/SVGResourceMaskerCg.mm:
        (WebCore::SVGResourceMasker::applyMask): Updated to use auto_ptr.

        - other changes

        * ksvg2/svg/SVGAnimateTransformElement.cpp:
        (WebCore::SVGAnimateTransformElement::handleStartCondition):
        Remove unused variables.

2007-01-06  Mitz Pettel  <mitz@webkit.org>

        Reviewed by Maciej.

        - fix http://bugs.webkit.org/show_bug.cgi?id=12136
          REGRESSION: Counters-related leaks

        * rendering/RenderCounter.cpp:
        (WebCore::destroyCounterNodeChildren): Delete the child counter nodes.

2007-01-05  Adele Peterson  <adele@apple.com>

        Release build fix.

        * rendering/RenderListItem.cpp: (WebCore::RenderListItem::explicitValueChanged): Initialize listRenderer.

2007-01-05  Darin Adler  <darin@apple.com>

        Reviewed by Hyatt.

        - eliminated use of DeprecatedString for list item markers
        - eliminated use of DeprecatedValueList for border style collapsing
        - made many members private instead of protected or public

        - reworked counter implementation to fix most of the CSS 2.1 counter tests;
            made CounterNode be a simple non-polymorphic class, moved most counter-
            specific code out of RenderObject into RenderCounter, changed the data
            structure in RenderStyle to be more speed-efficient but less space-
            efficient for nodes with counter styles
        - fixed http://bugs.webkit.org/show_bug.cgi?id=11557

        Tests: css2.1

        - fixed a bug where counter text did not have text transform or text security
          applied to it

        Test: fast/css/counters/counter-text-security.html
        Test: fast/css/counters/counter-text-transform.html

        - improved handling of CSS content property values with data of the wrong
          type; this probably needs a bit more refinement

        Test: fast/css-generated-content/reset-content-to-initial-expected.txt

        - fixed a bug where removing the value attribute from an HTMLLIElement would
          set the list item's value to 0 instead of restoring it to normal

        Test: fast/lists/li-values.html

        - fixed a bug where changing the text security style from one style to another
          would not change the displayed text

        Test: fast/css/text-security.html

        - fixed some problems handling long sequences of counter-related styles;
          still needs more work and some super-large test cases to check if
          recursive algorithms for these that will overflow stack remain

        - added support for list styles decimal-leading-zero, hiragana, hirigana-iroha,
          katakana, katakana-iroha, cjk-ideographic, armenian, and georgian

        Test: fast/lists/decimal-leading-zero.html

        - minor tweaks and bug fixes for other list styles, including range checking

        * WebCore.exp: Updated for RenderListItem change.

        * bridge/mac/WebCoreAXObject.mm: (-[WebCoreAXObject value]): Updated to use
        String instead of DeprecatedString.

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::CSSComputedStyleDeclaration::getPropertyCSSValue): Removed
        implementation for counter styles for now. We should probably restore it
        later, but we need to make sure the returned list is separate from the
        original list in the DOM -- modifying the list should not change the element
        it was computed from.

        * css/Counter.h: Removed unneeded empty constructor and destructor.

        * css/cssstyleselector.cpp:
        (WebCore::applyCounterList): Added. Stores counter directives in hash tables
        that should allow us to efficiently implement dynamic counter changes. Full
        support will have to wait for a future check-in.
        (WebCore::CSSStyleSelector::applyProperty): Changed counter properties to
        call applyCounterList. Reformatted the code to parse the content property for
        changes to RenderStyle and to handle the case where some the items in the
        content list don't generate any content.

        * editing/visible_units.cpp:
        * rendering/RenderBox.cpp:
        * rendering/RenderFlexibleBox.cpp:
        * rendering/RenderFlow.cpp:
        * rendering/RenderSlider.cpp:
        Added includes needed because of header changes.

        * html/HTMLLIElement.H: Removed unneeded m_isValued.
        * html/HTMLLIElement.cpp:
        (WebCore::HTMLLIElement::parseMappedAttribute): To match test results seen
        in WinIE, ignore values that are 0 or negative, and use new functions in
        RenderListItem to communicate the lack of a valid value.
        (WebCore::HTMLLIElement::attach): More of the same.

        * rendering/CounterNode.h: Made CounterNode be a non-polymorphic class,
        removing all the subclasses. Merged in CounterResetNode. Removed
        m_total from CounterResetNode, because it isn't needed for any of
        the styles (decimal-leading-zero always uses two digits). Removed
        m_hasSeparator and m_willNeedLayout since they aren't needed any more.
        Renamed m_count to m_countInParent for clarify, and named the list
        links the same as their associated functions. Removed many functions
        as well.
        * rendering/CounterNode.cpp:
        (WebCore::CounterNode::CounterNode): Added new fields.
        (WebCore::CounterNode::computeCountInParent): Added. Used by recount.
        (WebCore::CounterNode::recount): Simplified by removing unused parameter and the
        "get next" idiom. Changed to be iterative instead of recursive so we can handle
        arbitrarily long lists.
        (WebCore::CounterNode::insertAfter): Moved here from CounterResetNode. Updated
        for field name changes. Corrected rule for when to recount.
        (WebCore::CounterNode::removeChild): Moved here from CounterResetNode. Changed
        to only work on nodes without children. Corrected rule for when to recount.
        (WebCore::nextInPreOrderAfterChildren): Added. For debugging only.
        (WebCore::nextInPreOrder): Ditto.
        (WebCore::showTreeAndMark): Ditto.
        (showTree): Ditto.

        * rendering/CounterListItem.h:
        * rendering/CounterResetNode.h:
        * rendering/CounterResetNode.cpp:
        Marked ready to remove. I'll do the remove in a separate patch, since I have
        to update a lot of different make files when I do.

        * rendering/ListMarkerBox.cpp: (WebCore::ListMarkerBox::isText): Changed for the
        change to RenderListMarker.

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::addChildToFlow): Changed to use functions instead of
        direct field access so the fields can be private and we don't need to be friends.
        (WebCore::RenderBlock::getBaselineOfFirstLineBox): Ditto.
        (WebCore::RenderBlock::getBaselineOfLastLineBox): Ditto.
        * rendering/RenderBlock.h:
        (WebCore::RenderBlock::initMaxMarginValues): Ditto.
        (WebCore::RenderBlock::firstRootBox): Ditto.
        (WebCore::RenderBlock::lastRootBox): Ditto.
        * rendering/RenderBox.h:
        (WebCore::RenderBox::setWidth): Ditto.
        (WebCore::RenderBox::setHeight): Ditto.
        * rendering/RenderButton.cpp:
        (WebCore::RenderButton::addChild): Ditto.
        * rendering/bidi.cpp:
        (WebCore::RenderBlock::determineStartPosition): Ditto.

        * rendering/RenderContainer.h: Renamed m_first and m_last to m_firstChild
        and m_lastChild. Made them private instead of proected. Removed the
        setFirstChild and setLastChild functions.
        * rendering/RenderContainer.cpp:
        (WebCore::RenderContainer::RenderContainer): Updated for field name change.
        Changed all calls to get at fields directly instead of using functions.
        (WebCore::RenderContainer::destroyLeftoverChildren): Ditto.
        (WebCore::updateListMarkerNumbers): Updated for RenderListItem change.
        (WebCore::RenderContainer::addChild): Changed to get at fields directly
        instead of using functions. Also used release() since RenderText::setText
        now takes PassRefPtr.
        (WebCore::RenderContainer::removeChildNode): Changed to get at fields directly
        instead of using functions.
        (WebCore::RenderContainer::updatePseudoChildForObject): Create the anonymous
        box only if at least one of of the items in the content list actually
        generates content. Since a RenderCounter is a RenderText, don't bother making
        a new style for it -- it just shares the style with its parent. Changed code
        to use RenderImage::setCachedImage() instead of of setContentObject().
        Added a call to setIsAnonymousImage() here, which was the only special thing
        that setContentObject() used to do. Pass a reference to the counter to the
        RenderCounter rather than a pointer. Pass document() as the node instead of
        passing the element to RenderCounter, which makes it anonymous automatically,
        and removed the setIsAnonymous call.
        (WebCore::RenderContainer::appendChildNode): Chagned to get at fields directly
        instead of using functions.
        (WebCore::RenderContainer::insertChildNode): Ditto.
        (WebCore::RenderContainer::layout): Ditto.
        (WebCore::RenderContainer::removeLeftoverAnonymousBoxes): Ditto.
        (WebCore::RenderContainer::positionForCoordinates): Ditto.
        (WebCore::RenderContainer::addLineBoxRects): Ditto.

        * rendering/RenderCounter.h: Removed unneeded layout override, never called on a
        text node. Added override of originalString. Replaced CounterData* with a copy of
        the CounterContent -- it's two atomic strings and an integer so it's efficient
        enough to store all three in the render object, and this eliminates the lifetime
        problems we could have if we used a pointer.
        * rendering/RenderCounter.cpp: Removed duplicate copy of list marker code.
        (WebCore::counterMaps): Moved these maps here from RenderObject.
        (WebCore::previousSiblingOrParent): Added.
        (WebCore::lastDescendant): Added.
        (WebCore::previousInPreOrder): Added.
        (WebCore::planCounter): Added.
        (WebCore::findPlaceForCounter): Added.
        (WebCore::counter): New name of function that was named RenderObject::findCounter.
        Also uses a new algorithm that passes all the CSS 2.1 tests.
        (WebCore::RenderCounter::RenderCounter): Changed to take a Document* instead of a
        Node*, since at the moment counters are always anonymous.
        (WebCore::RenderCounter::originalString): Added. This overrides the originalString
        in the RenderText base class so that any text transforms will use the counter's
        value. This code was previously in calcMinMaxWidth.
        (WebCore::RenderCounter::calcMinMaxWidth): Changed to call setInternalString and
        pass originalString -- this uses the counter's value from the counter tree.
        (WebCore::destroyCounterNodeChildren): Added.
        (WebCore::RenderCounter::destroyCounterNodes): Added. Called as needed from
        RenderObject::destroy for objects that have counter nodes.

        * rendering/RenderFlow.h: Made m_continuation private instead of protected.

        * rendering/RenderImage.h: Removed unneeded includes, and unnecessary element()
        function that casts to HTMLElement*. Made image() protected, and made the two
        calcAspectRatio functions private. Removed setContentObject(). Renamed the
        errorOccured() function to isErrorImage() and made it private.
        * rendering/RenderImage.cpp:
        (WebCore::RenderImage::RenderImage): Removed initialization of removed
        m_selectionState field.
        (WebCore::RenderImage::setCachedImage): Rearrange code so it won't try to
        call isErrorImage() on a null image.
        (WebCore::RenderImage::paint): Updated for name change.

        * rendering/RenderListBox.h: Removed unneeded forward declarations.

        * rendering/RenderListItem.h:
        Renamed markerStringValue() to markerText() and made it return a String instead of
        a DeprecatedString. Renamed m_prededfVal to m_explicitValue. Added booleans named
        m_hasExplicitValue and m_isValueUpToDate and marked m_value mutable so it can be
        computed in const member functions.
        (WebCore::RenderListItem::value): Changed to update value on demand at the time
        you ask for it.
        (WebCore::RenderListItem::hasExplicitValue): Added. Use instead of magic -1 value
        to indicate that the item does or does not have an explicit value.
        (WebCore::RenderListItem::explicitValue): Added.
        (WebCore::RenderListItem::setExplicitValue): Added.
        (WebCore::RenderListItem::clearExplicitValue): Added.
        * rendering/RenderListItem.cpp:
        (WebCore::RenderListItem::RenderListItem): Updated to not use magic -1 values.
        (WebCore::RenderListItem::setStyle): Removed call to RenderListMarker::setListItem
        since it's not needed any more, and instead pass the list item to the constructor.
        (WebCore::previousListItem): Made parameter const.
        (WebCore::RenderListItem::calcValue): Restructed the function a bit.
        (WebCore::RenderListItem::updateValueNow): Added. Calls calcValue.
        (WebCore::RenderListItem::updateValue): Added. New name for resetValue(). Unlike
        the old version, this no longer calculates the value until it's asked-for later.
        (WebCore::RenderListItem::markerText): Changed to return String rather than a
        DeprecatedString and to return a null string rather than empty string when there
        is no marker.

        * rendering/RenderListMarker.h: Added listMarkerText function -- common code shared
        with anyone who needs to convert a value into text given a list style.
        Changed constructor to take a RenderListItem and figure out the document from that.
        Added isImage() and isText() functions and removed listImage() function. Changed the
        type of the text() function from DeprecatedString to String. Removed the listItem()
        and seListeItem() functions. Made the getRelativeMarkerRect() function private.
        Renamed m_item to m_text and chagned it from DeprecatedString to String. Renamed
        m_listImage to m_image.
        * rendering/RenderListMarker.cpp:
        (WebCore::toRoman): Added range checking to fix buffer overrun for large or negative
        numbers. Rewrote to use a local UChar array and String rather than prepending to a
        DeprecatedString.
        (WebCore::toAlphabetic): Replaces toLetterString, and is more flexible since it takes
        an alphabet array. Changed to match CSS 3 specification by using decimal numbering for
        0 and negative numbers. Rewrote to use a local UChar array and String rather than
        prepending to a DeprecatedString.
        (WebCore::toHebrewUnder1000): Added. Helper function for Hebrew numbers so we can
        handle numbers up to a million.
        (WebCore::toHebrew): Changed to use toHebrewUnder1000, added a special case for
        zero, negative, and too-large numbers.
        (WebCore::toArmenianUnder10000): Added. Used by toArmenian.
        (WebCore::toArmenian): Added.
        (WebCore::toGeorgian): Added.
        (WebCore::toCJKIdeographic): Added.
        (WebCore::listMarkerText): Added. Moved the code here from calcMinMaxWidth, but added
        support for text for the styles disc, circle, square, decimal-leading-zero, hiragana,
        hirigana-iroha, katakana, katakana-iroha, cjk-ideographic, armenian, and georgian.
        Also changed some of the styles to share the new toAlphabetic function.
        (WebCore::RenderListMarker::RenderListMarker): Updated for name changes and list
        item parameter.
        (WebCore::RenderListMarker::~RenderListMarker): Updated for name changes.
        (WebCore::RenderListMarker::setStyle): Updated for name changes.
        (WebCore::RenderListMarker::isImage): Added. Useful helper that unifies the check
        for no image and the error image.
        (WebCore::RenderListMarker::paint): Updated for name changes to to use isImage()
        and rearranged the code a bit.
        (WebCore::RenderListMarker::imageChanged): Updated for name change
        (WebCore::RenderListMarker::calcMinMaxWidth): Updated for name change, fixed a bug
        where we'd leave the old text around if we were using an image-based marker. Also
        changed the code to use isImage() instead of checking m_listImage.
        (WebCore::RenderListMarker::calcWidth): Changed to use isImage().
        (WebCore::RenderListMarker::lineHeight): Changed to use isImage().
        (WebCore::RenderListMarker::baselinePosition): Changed to use isImage().
        (WebCore::RenderListMarker::getRelativeMarkerRect): Changed to use isImage(),
        restructured the code a little.

        * rendering/RenderObject.h: Removed now-uneeded includes. Removed collectBorders()
        and isFormElement(). Made remove() function and m_hasCounterNodeMap public so
        we could remove friend declarations for RenderListItem and RenderView.
        Moved findCounter() to become a private function inside RenderCounter.cpp.
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::createObject): Fix bug where a contentData() with
        CONTENT_NONE is treated as image content -- only look at the content property
        if it has exactly one entry which is a CONTENT_OBJECT.
        (WebCore::RenderObject::selectionStartEnd): Add const.
        (WebCore::RenderObject::destroy): Moved counter-specific code to
        RenderCounter::destroyCounterNodes.
        (WebCore::RenderObject::recalcMinMaxWidths): Changed code to set m_recalcMinMax
        near the top of the function -- the old code would potentially reset it after it
        was set by the calcMinMaxWidths functions, and possibly skip a future needed
        recalc. That came up in counter test cases. Removed unneeded boolean check right
        after an assertion.

        * rendering/RenderPart.h: Marked two virtual functions virtual for clarity.

        * rendering/RenderReplaced.h: Made shouldPaint be protected, and made
        m_intrinsicWidth, m_intrinsicHeight, and m_selectionState be private.
        Also marked isSelected() const.
        * rendering/RenderReplaced.cpp: Added newly-needed include.
        (WebCore::RenderReplaced::RenderReplaced): Use constructor syntax.
        (WebCore::RenderReplaced::isSelected): Made const and changed to call the
        selectionStartEnd function in the straightforward way.

        * rendering/RenderSVGText.cpp:
        (WebCore::RenderSVGText::absoluteRects): Use functions instead of direct field
        access so the fields can be private.
        (WebCore::RenderSVGText::relativeBBox): Ditto.

        * rendering/RenderStyle.h: Tweaked formatting. Changed names of CSS3 holders
        to say "rare" instead, since it's not all CSS 3. Renamed CounterData to
        CounterContent, since it's used inside ContentData. Changed names of fields in
        ContentData to have m prefix. Moved content and counter fields into the rare
        non-inherited data object. Removed unneeded assignment operator from a class
        that already inherits from Shared which makes it start out noncopyable.
        * rendering/RenderStyle.cpp: Name changes, plus:
        (WebCore::StyleRareNonInheritedData::StyleRareNonInheritedData):
        Updated for added fields (content, counter-reset, counter-increment).
        (WebCore::StyleRareNonInheritedData::~StyleRareNonInheritedData): Ditto.
        (WebCore::StyleRareNonInheritedData::operator==): Reformatted and sorted so it's
        easy to see if any fields are missing.
        (WebCore::operator!=): Added. Compares two CounterContent objects.
        (WebCore::RenderStyle::arenaDelete): Removed code to handle content, which is
        now in the rareNonInheritedData structure.
        (WebCore::RenderStyle::RenderStyle): Ditto.
        (WebCore::RenderStyle::inheritFrom): Ditto.
        (WebCore::RenderStyle::operator==): Ditto.
        (WebCore::RenderStyle::inheritedNotEqual):
        (WebCore::RenderStyle::diff):
        (WebCore::RenderStyle::contentDataEquivalent): Added case for counter,
        which previously would be ignored when determining if content is equivalent.
        (WebCore::RenderStyle::clearContent): Added.
        (WebCore::RenderStyle::setContent): Updated for change in content location.
        (WebCore::ContentData::clear): Changed algorithm so that it's not recursive
        and thus can handle a very long list of ContentData.
        (WebCore::operator==): Added. Compares two CounterDirective objects.
        (WebCore::RenderStyle::counterDirectives): Added.
        (WebCore::RenderStyle::accessCounterDirectives): Added.

        * rendering/RenderTable.h: Made m_currentBorder const to better reflect the
        paint algorithm.
        * rendering/RenderTable.cpp: (WebCore::RenderTable::paint): Changed to use
        Vector instead of DeprecatedValueList for the border styles, and to sort
        rather than inserting in sorted order as we go. Put the code to loop through
        the nodes and collect border styles here instead of in a RenderObject virtual
        function. Also set m_currentBorder to 0 after the loop for greater clarity.

        * rendering/RenderTableCell.h: Added a typedef for a vector of border values.
        Removed the virtual collectBorders and replaced with the non-virtual named
        collectBorderStyles. Also added a static member function named sortBorderStyles.
        * rendering/RenderTableCell.cpp:
        (WebCore::CollapsedBorders::CollapsedBorders): Removed unneeded constructor
        parameter.
        (WebCore::addBorderStyle): Changed to use a vector instead of a
        DeprecatedValueList. Wrote out a loop since Vector doesn't have a contains
        member function. Removed the code to insert the border at a sorted location;
        instead we have a separate call to sort the border styles
        (WebCore::RenderTableCell::collectBorderStyles): Renamed, and changed the
        parameter type.
        (WebCore::compareBorderStylesForQSort): Added.
        (WebCore::RenderTableCell::sortBorderStyles): Added.

        * rendering/RenderText.h: Changed StringImpl parameters in setText functions
        to be PassRefPtr; added a new setInternalString function. Made a bunch of the
        member functions private and made all the data members private instead of
        protected.
        * rendering/RenderText.cpp:
        (WebCore::RenderText::setStyle): Restructure a bit for clarity. Fix case where
        the old style has a different security than the new style. Use release() since
        RenderText::setText now takes PassRefPtr. Always call cacheWidths here.
        (WebCore::RenderText::setTextWithOffset): Changed to take the string as a
        PassRefPtr instead of a raw pointer.
        (WebCore::isInlineFlowOrEmptyText): Added.
        (WebCore::RenderText::setInternalString): Refactored core of setText into a
        separate protected member function that can be used RenderCounter. Changed
        the text security square character to match what's used in list markers.
        Changed the text transform switch statement so that gcc will warn us if we add
        a new value and don't add a case for it.
        (WebCore::RenderText::setText): Refactored most of the function into
        setInternalString. Removed the call to cacheWidths -- that's now done in the
        setStyle function only.

        * rendering/RenderView.h:
        * rendering/RenderView.cpp: (WebCore::RenderView::selectionStartEnd): Now const.

        * rendering/RenderWidget.cpp: Added newly-needed include.
        (WebCore::RenderWidget::setSelectionState): Don't bother setting m_selectionState
        here since RenderReplaced::setSelectionState already does that.

2007-01-05  Anders Carlsson  <acarlsson@apple.com>

        Rubber stamped by Adam.
        
        Move even more code to .cpp files.

        * WebCore.xcodeproj/project.pbxproj:
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::createWindow):
        (WebCore::FrameLoader::load):
        (WebCore::FrameLoader::canLoad):
        (WebCore::FrameLoader::initialRequest):
        (WebCore::FrameLoader::receivedData):
        (WebCore::FrameLoader::setRequest):
        (WebCore::FrameLoader::setResponse):
        (WebCore::FrameLoader::willUseArchive):
        (WebCore::FrameLoader::handleUnimplementablePolicy):
        (WebCore::FrameLoader::cannotShowMIMEType):
        (WebCore::FrameLoader::interruptionForPolicyChangeError):
        (WebCore::FrameLoader::checkNavigationPolicy):
        (WebCore::FrameLoader::checkContentPolicy):
        (WebCore::FrameLoader::shouldReloadToHandleUnreachableURL):
        (WebCore::FrameLoader::reloadAllowingStaleData):
        (WebCore::FrameLoader::reload):
        (WebCore::FrameLoader::finishedLoading):
        (WebCore::FrameLoader::continueAfterWillSubmitForm):
        (WebCore::FrameLoader::submitForm):
        (WebCore::FrameLoader::post):
        (WebCore::FrameLoader::isReloading):
        (WebCore::FrameLoader::loadEmptyDocumentSynchronously):
        (WebCore::FrameLoader::loadResourceSynchronously):
        (WebCore::FrameLoader::startLoadingMainResource):
        (WebCore::FrameLoader::startLoading):
        (WebCore::FrameLoader::cancelMainResourceLoad):
        (WebCore::FrameLoader::identifierForInitialRequest):
        (WebCore::FrameLoader::willSendRequest):
        (WebCore::FrameLoader::didReceiveResponse):
        (WebCore::FrameLoader::didReceiveData):
        (WebCore::FrameLoader::didFailToLoad):
        (WebCore::FrameLoader::originalRequest):
        (WebCore::FrameLoader::receivedMainResourceError):
        (WebCore::FrameLoader::callContinueFragmentScrollAfterNavigationPolicy):
        (WebCore::FrameLoader::continueFragmentScrollAfterNavigationPolicy):
        (WebCore::FrameLoader::opened):
        (WebCore::FrameLoader::dataURLBaseFromRequest):
        (WebCore::FrameLoader::checkNewWindowPolicy):
        (WebCore::FrameLoader::continueAfterNewWindowPolicy):
        (WebCore::FrameLoader::continueAfterNavigationPolicy):
        (WebCore::FrameLoader::callContinueLoadAfterNavigationPolicy):
        (WebCore::FrameLoader::continueLoadAfterNavigationPolicy):
        (WebCore::FrameLoader::callContinueLoadAfterNewWindowPolicy):
        (WebCore::FrameLoader::continueLoadAfterNewWindowPolicy):
        (WebCore::FrameLoader::sendRemainingDelegateMessages):
        (WebCore::FrameLoader::requestFromDelegate):
        (WebCore::FrameLoader::loadedResourceFromMemoryCache):
        (WebCore::FrameLoader::applyUserAgent):
        (WebCore::PolicyCheck::PolicyCheck):
        (WebCore::PolicyCheck::clear):
        (WebCore::PolicyCheck::set):
        (WebCore::PolicyCheck::call):
        (WebCore::PolicyCheck::clearRequest):
        * loader/FrameLoader.h:
        * loader/FrameLoaderClient.h:
        * loader/MainResourceLoader.h:
        * loader/ResourceLoader.h:
        (WebCore::ResourceLoader::setIdentifier):
        (WebCore::ResourceLoader::identifier):
        * loader/mac/FrameLoaderMac.mm:
        (WebCore::FrameLoader::checkLoadCompleteForThisFrame):
        (WebCore::FrameLoader::referrer):
        (WebCore::FrameLoader::didReceiveAuthenticationChallenge):
        (WebCore::FrameLoader::didCancelAuthenticationChallenge):
        (WebCore::FrameLoader::didChangeTitle):
        * platform/graphics/svg/SVGImageEmptyClients.h:
        (WebCore::SVGEmptyFrameLoaderClient::dispatchCreatePage):

2007-01-05  Mitz Pettel  <mitz@webkit.org>

        Reviewed by Hyatt.

        - fix http://bugs.webkit.org/show_bug.cgi?id=12079
          Nested tables don't repaint properly when a certain row is added

        Tests: fast/repaint/table-section-repaint.html
               fast/repaint/table-section-overflow.html

        Fixed repainting when table sections move during layout.

        Made table cells' overflows propagate to table sections and gave tables
        overflows.

        * rendering/RenderTable.cpp:
        (WebCore::RenderTable::layout): Added computation of horizontal and vertical overflows
        based on the caption's and the table sections' overflows.
        Added checks for table sections that change position during layout. When that happens,
        we assume all sections below the first section that moved also moved, and repaint
        everything downwards from there.
        Added calls to repaintDuringLayoutIfMoved() for the caption.
        Changed the way table sections are iterated over and added a FIXME to change it again
        once bug 12124 is fixed.
        (WebCore::RenderTable::paint): Changed to paint overflow.
        (WebCore::RenderTable::outerBorderBottom):
        * rendering/RenderTableSection.cpp:
        (WebCore::RenderTableSection::RenderTableSection):
        (WebCore::RenderTableSection::layoutRows): Added code to compute the section's overflow
        and a flag saying whether any cells in this section overflow.
        (WebCore::RenderTableSection::paint): Changed to paint overflow. If any cell
        in the section has overflow, then all cells are given a chance to paint. This is needed
        because there can be internal overflow, and external overflow can be coming from any
        cell inside.
        * rendering/RenderTableSection.h:
        (WebCore::RenderTableSection::overflowWidth):
        (WebCore::RenderTableSection::overflowLeft):

2007-01-05  Beth Dakin  <bdakin@apple.com>

        Reviewed by Adam.

        Fix for <rdar://problem/4863434> Wrong contextual menu appears for 
        textarea and input elements at http://www.apple.com/feedback/
        ical.html

        No test cases added since context menus are not in DRT.

        * page/ContextMenuController.cpp: 
        (WebCore::ContextMenuController::handleContextMenuEvent): Call 
        EventHandler's hitTestResultAtPoint() instead of just hit testing 
        the layer.

2007-01-05  Anders Carlsson  <acarlsson@apple.com>

        Rubber-stamped by Adam.
        
        Move a bunch of platform independent code over to DocumentLoader.cpp

        * WebCore.xcodeproj/project.pbxproj:
        * loader/DocumentLoader.cpp:
        (WebCore::canonicalizedTitle):
        (WebCore::DocumentLoader::DocumentLoader):
        (WebCore::DocumentLoader::frameLoader):
        (WebCore::DocumentLoader::~DocumentLoader):
        (WebCore::DocumentLoader::setMainResourceData):
        (WebCore::DocumentLoader::mainResourceData):
        (WebCore::DocumentLoader::originalRequest):
        (WebCore::DocumentLoader::originalRequestCopy):
        (WebCore::DocumentLoader::request):
        (WebCore::DocumentLoader::initialRequest):
        (WebCore::DocumentLoader::actualRequest):
        (WebCore::DocumentLoader::URL):
        (WebCore::DocumentLoader::replaceRequestURLForAnchorScroll):
        (WebCore::DocumentLoader::setRequest):
        (WebCore::DocumentLoader::setMainDocumentError):
        (WebCore::DocumentLoader::clearErrors):
        (WebCore::DocumentLoader::mainReceivedError):
        (WebCore::DocumentLoader::stopLoading):
        (WebCore::DocumentLoader::setupForReplace):
        (WebCore::DocumentLoader::commitIfReady):
        (WebCore::DocumentLoader::finishedLoading):
        (WebCore::DocumentLoader::setCommitted):
        (WebCore::DocumentLoader::isCommitted):
        (WebCore::DocumentLoader::setLoading):
        (WebCore::DocumentLoader::isLoading):
        (WebCore::DocumentLoader::commitLoad):
        (WebCore::DocumentLoader::doesProgressiveLoad):
        (WebCore::DocumentLoader::receivedData):
        (WebCore::DocumentLoader::setupForReplaceByMIMEType):
        (WebCore::DocumentLoader::updateLoading):
        (WebCore::DocumentLoader::setFrame):
        (WebCore::DocumentLoader::attachToFrame):
        (WebCore::DocumentLoader::detachFromFrame):
        (WebCore::DocumentLoader::prepareForLoadStart):
        (WebCore::DocumentLoader::setIsClientRedirect):
        (WebCore::DocumentLoader::isClientRedirect):
        (WebCore::DocumentLoader::setPrimaryLoadComplete):
        (WebCore::DocumentLoader::isLoadingInAPISense):
        (WebCore::DocumentLoader::addResponse):
        (WebCore::DocumentLoader::stopRecordingResponses):
        (WebCore::DocumentLoader::title):
        (WebCore::DocumentLoader::setLastCheckedRequest):
        (WebCore::DocumentLoader::lastCheckedRequest):
        (WebCore::DocumentLoader::triggeringAction):
        (WebCore::DocumentLoader::setTriggeringAction):
        (WebCore::DocumentLoader::responses):
        (WebCore::DocumentLoader::setOverrideEncoding):
        (WebCore::DocumentLoader::overrideEncoding):
        (WebCore::DocumentLoader::setTitle):
        (WebCore::DocumentLoader::urlForHistory):
        * loader/DocumentLoader.h:
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::load):
        (WebCore::FrameLoader::committedLoad):
        (WebCore::FrameLoader::setMainDocumentError):
        (WebCore::FrameLoader::mainReceivedCompleteError):
        (WebCore::FrameLoader::mainReceivedError):
        (WebCore::FrameLoader::cancelledError):
        (WebCore::FrameLoader::fileDoesNotExistError):
        (WebCore::FrameLoader::mainResourceData):
        * loader/FrameLoader.h:
        * loader/FrameLoaderClient.h:
        * loader/mac/DocumentLoaderMac.mm:
        (WebCore::DocumentLoader::unreachableURL):
        * loader/mac/FrameLoaderMac.mm:

2007-01-05  Brady Eidson  <beidson@apple.com>

        Reviewed by Eric Seidel

        http://bugs.webkit.org/show_bug.cgi?id=12117
        Fixes null deref when opening links from a gmail account

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::updateHistoryForStandardLoad): Null check m_currentHistoryItem
        (WebCore::FrameLoader::updateHistoryForClientRedirect): Ditto

2007-01-05  Anders Carlsson  <acarlsson@apple.com>

        Move some now cross platform functions over to ResourceLoader.cpp in an attempt to fix the non Mac builds.
        
        * loader/CachedResource.h:
        (WebCore::CachedResource::setAllData):
        * loader/ResourceLoader.cpp:
        (WebCore::ResourceLoader::resourceData):
        * loader/ResourceLoader.h:
        * loader/SubresourceLoader.cpp:
        (WebCore::SubresourceLoader::didFinishLoading):
        * loader/mac/LoaderFunctionsMac.mm:
        * loader/mac/ResourceLoaderMac.mm:
        * platform/SharedBuffer.cpp:
        (WebCore::SharedBuffer::platformDataSize):
        * platform/network/ResourceHandle.h:

2007-01-05  David Hyatt  <hyatt@apple.com>

        Back out fix for 12114.  I missed rule #5 in the float positioning part of the CSS2.1 spec.  Keep all
        the code cleanup though.

        Reviewed by mitz

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::positionNewFloats):

2007-01-05  Anders Carlsson  <acarlsson@apple.com>

        Reviewed by Maciej.

        Add a shared buffer class which is backed by either a vector or an NSData object. This object can also
        be held in a custom NSData subclass. Use this in the loader wherever NSData was used.
        
        * WebCore.exp:
        * WebCore.xcodeproj/project.pbxproj:
        * loader/CachedResource.h:
        (WebCore::CachedResource::allData):
        * loader/DocumentLoader.h:
        * loader/FrameLoader.h:
        * loader/ResourceLoader.h:
        * loader/SubresourceLoaderClient.h:
        (WebCore::SubresourceLoaderClient::didFail):
        * loader/loader.cpp:
        (WebCore::Loader::didFinishLoading):
        * loader/loader.h:
        * loader/mac/DocumentLoaderMac.mm:
        (WebCore::DocumentLoader::setMainResourceData):
        (WebCore::DocumentLoader::mainResourceData):
        (WebCore::DocumentLoader::setupForReplaceByMIMEType):
        * loader/mac/FrameLoaderMac.mm:
        (WebCore::FrameLoader::mainResourceData):
        * loader/mac/ImageDocumentMac.mm:
        (WebCore::finishImageLoad):
        * loader/mac/LoaderFunctionsMac.mm:
        (WebCore::CheckCacheObjectStatus):
        (WebCore::CachedResource::setAllData):
        * loader/mac/NetscapePlugInStreamLoaderMac.mm:
        (WebCore::NetscapePlugInStreamLoader::didFinishLoading):
        * loader/mac/ResourceLoaderMac.mm:
        (WebCore::ResourceLoader::addData):
        (WebCore::ResourceLoader::resourceData):
        (WebCore::ResourceLoader::clearResourceData):
        (WebCore::ResourceLoader::didReceiveData):
        (WebCore::ResourceLoader::willStopBufferingData):
        * loader/mac/SubresourceLoaderMac.mm:
        (WebCore::SubresourceLoader::didReceiveResponse):
        (WebCore::SubresourceLoader::didFinishLoading):
        * page/mac/WebCoreFrameBridge.mm:
        (-[WebCoreFrameBridge getData:andResponse:forURL:]):
        (-[WebCoreFrameBridge getAllResourceDatas:andResponses:]):
        * platform/KURL.h:
        * platform/SharedBuffer.cpp: Added.
        (WebCore::SharedBuffer::SharedBuffer):
        (WebCore::SharedBuffer::size):
        (WebCore::SharedBuffer::data):
        (WebCore::SharedBuffer::append):
        (WebCore::SharedBuffer::clear):
        (WebCore::SharedBuffer::clearPlatformData):
        (WebCore::SharedBuffer::maybeTransferPlatformData):
        (WebCore::SharedBuffer::hasPlatformData):
        (WebCore::SharedBuffer::platformData):
        * platform/SharedBuffer.h: Added.
        * platform/mac/SharedBufferMac.mm: Added.
        (-[SharedBufferData dealloc]):
        (-[SharedBufferData finalize]):
        (-[SharedBufferData initWithSharedBuffer:]):
        (-[SharedBufferData length]):
        (-[SharedBufferData bytes]):
        (WebCore::SharedBuffer::wrapNSData):
        (WebCore::SharedBuffer::SharedBuffer):
        (WebCore::SharedBuffer::createNSData):
        (WebCore::SharedBuffer::hasPlatformData):
        (WebCore::SharedBuffer::platformData):
        (WebCore::SharedBuffer::platformDataSize):
        (WebCore::SharedBuffer::maybeTransferPlatformData):
        (WebCore::SharedBuffer::clearPlatformData):
        * platform/network/ResourceHandle.h:
        * platform/network/ResourceHandleClient.h:
        * platform/network/mac/ResourceHandleMac.mm:
        (WebCore::ResourceHandle::bufferedData):

2007-01-05  Anders Carlsson  <acarlsson@apple.com>

        Reviewed by Adam.

        http://bugs.webkit.org/show_bug.cgi?id=12120
        REGRESSION(r18605): Safari snippet editor no longer works
        
        * loader/mac/ResourceLoaderMac.mm:
        (WebCore::ResourceLoader::willSendRequest):
        Put back the code change in r18607.
        
        * platform/mac/KURLMac.mm:
        (WebCore::KURL::KURL):
        Convert nil NSURLs to null KURLs.

2007-01-04  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Geoff.

        http://bugs.webkit.org/show_bug.cgi?id=7296
        Disable JavaScript exceptions when dynamically changing CSS properties.

        * bindings/js/kjs_css.cpp:
        (KJS::DOMCSSStyleDeclaration::put): Removed the Dashboard quirk logic.

        * css/CSSMutableStyleDeclaration.cpp:
        (WebCore::CSSMutableStyleDeclaration::setProperty): Don't raise an exception if parsing fails.

2007-01-05  Antti Koivisto  <koivisto@iki.fi>

        Reviewed by hyatt.
        
        http://bugs.webkit.org/show_bug.cgi?id=12109
        
        Fix layer visibility in some cases with nested layers.

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

2007-01-05  Lars Knoll <lars@trolltech.com>

        Make it compile with gcc 4.1

        * rendering/RenderTableSection.h:

2007-01-04  Adam Roben  <aroben@apple.com>

        Reviewed by Geoff, cheered by others.

        Dead code elimination.

        All layout tests pass.

        * page/EventHandler.h:
        * page/mac/EventHandlerMac.mm:
        * page/mac/WebCoreFrameBridge.h:
        * page/mac/WebCoreFrameBridge.mm:

2007-01-04  Adam Roben  <aroben@apple.com>

        Reviewed by Geoff.

        Fix: <rdar://4800335> REGRESSION: shift-tabbing from location field
        goes to first field rather than last (businessweek.com)

        Fix: <rdar://4800373> REGRESSION: tabbing from last control focuses
        nothing visible (busniessweek.com)

        Handle tabbing into/out of subframes in WebCore instead of letting
        AppKit do the dirty work. This change also fixes a number of bugs and
        changes some behavior to match other browsers:
          - No frames receive a focus event when the page is first loaded.
          - When a frame is clicked or focused with the keyboard, it receives
            a focus event and all other frames receive a blur event.
          - tabindex values are clamped to the range of a signed short, rather
            than overflowing within an unsigned short.
          - tabindex is respected on frame owner elements, even though HTML4
            says it shouldn't be.
          - Subframes will be focused when tabbing if they don't contain any
            focusable elements within them (it would be nice to only focus the
            frame if it has scrollbars).

        Renamed SelectionDirection to FocusDirection and put it in its own file.

        * page/FocusDirection.h: Added.
        (WebCore::):
        * page/mac/WebCoreFrameBridge.mm: Updated for renames.
        (-[WebCoreFrameBridge nextKeyView]):
        (-[WebCoreFrameBridge previousKeyView]):
        (-[WebCoreFrameBridge nextKeyViewInsideWebFrameViews]):
        (-[WebCoreFrameBridge previousKeyViewInsideWebFrameViews]):

        Moved advanceFocus from EventHandler to FocusController and added
        support for moving into/out of subframes..

        * page/EventHandler.cpp: Moved advanceFocus to FocusController.
        * page/EventHandler.h: Ditto.
        * page/FocusController.cpp:
        (WebCore::deepFocusableNode): Static helper function to find focusable
        nodes nested within frames.
        (WebCore::FocusController::advanceFocus): Moved from EventHandler and
        rewritten to handle subframes.
        * page/FocusController.h: Added advanceFocus declaration.
        * dom/EventTargetNode.cpp:
        (WebCore::EventTargetNode::defaultEventHandler): Updated for the move
        of advanceFocus to FocusController.
        * html/HTMLFrameOwnerElement.h:
        (WebCore::HTMLFrameOwnerElement::isFrameOwnerElement): New method.
        (WebCore::HTMLFrameOwnerElement::isKeyboardFocusable): New virtual
        implementation used to trick Document::nextFocusableNode so that we
        can focus frames.

        Rewrote/renamed
        Document::nextFocusableNode/Document::previousFocusableNode.

        * dom/Document.cpp:
        (WebCore::nextNodeWithExactTabIndex): New static helper
        function.
        (WebCore::previousNodeWithExactTabIndex): Ditto.
        (WebCore::nextNodeWithGreaterTabIndex): Ditto.
        (WebCore::previousNodeWithLowerTabIndex): Ditto.
        (WebCore::Document::nextFocusableNode): Renamed from nextFocusedNode,
        and rewritten with much simpler logic.
        (WebCore::Document::previousFocusableNode): Ditto.
        * dom/Document.h: Updated declarations for renames.
        * page/mac/EventHandlerMac.mm: Updated for rename of SelectionDirection
        to FocusDirection.
        (WebCore::EventHandler::nextKeyViewInFrame): Updated for renames.
        (WebCore::EventHandler::nextKeyViewInFrameHierarchy): Ditto.
        (WebCore::EventHandler::nextKeyView): Ditto.
        (WebCore::EventHandler::focusDocumentView): Added call to
        setFocusedFrame when focusing the document view.
        (WebCore::EventHandler::passMouseDownEventToWidget): Removed LOG_ERROR
        when a nil NSView is returned from AppKit, as this is a fairly common
        occurrence when a RenderWidget has a border.
        (WebCore::EventHandler::passWheelEventToWidget): Added a nil-check of
        the hit-tested NSView.

        Changed storage of tabIndex to a signed short, and added clamping of
        tabindex attribute values to match Firefox's behavior.

        * dom/Node.h: Use a signed short to store m_tabIndex.
        (WebCore::Node::isFrameOwnerElement): New method.
        (WebCore::Node::tabIndex): Updated for signedness.
        (WebCore::Node::setTabIndex): Ditto.
        * html/HTMLAnchorElement.cpp: Remove implementation of tabIndex() so
        that Node::tabIndex() will be called instead and return the clamped
        value (which matches Firefox's behavior).
        * html/HTMLAnchorElement.h: Ditto.
        * html/HTMLAreaElement.cpp: Ditto.
        * html/HTMLAreaElement.h: Ditto.
        * html/HTMLGenericFormElement.cpp: Ditto.
        * html/HTMLGenericFormElement.h: Ditto.
        * html/HTMLObjectElement.cpp: Ditto.
        * html/HTMLObjectElement.h: Ditto.
        * html/HTMLElement.cpp:
        (WebCore::HTMLElement::parseMappedAttribute): Clamp tabIndex to the
        range of a signed short to match Firefox.

        Added two new Chrome methods for transferring focus out of the
        WebView.

        * page/Chrome.cpp:
        (WebCore::Chrome::canTakeFocus):
        (WebCore::Chrome::takeFocus):
        * page/Chrome.h:
        * page/ChromeClient.h:
        * platform/graphics/svg/SVGImageEmptyClients.h: Fixed typo "CromeClient" -> "ChromeClient".
        (WebCore::SVGEmptyChromeClient::~SVGEmptyChromeClient):
        (WebCore::SVGEmptyChromeClient::canTakeFocus):
        (WebCore::SVGEmptyChromeClient::takeFocus):
        * platform/graphics/svg/SVGImage.cpp:
        (WebCore::SVGImage::setData): Fixed typo.

        Miscellaneous:

        * WebCore.exp: Updated/sorted symbols.
        * WebCore.xcodeproj/project.pbxproj: Made FocusController.h Private so
        WebKit can access it.

2007-01-04  Brady Eidson  <beidson@apple.com>

        Reverted Anders' change to fix the world

        * loader/mac/ResourceLoaderMac.mm:
        (WebCore::ResourceLoader::willSendRequest):
        (WebCore::ResourceLoader::didReceiveResponse):

2007-01-04  Mitz Pettel  <mitz@webkit.org>

        Reviewed by Sam Weinig.

        - http://bugs.webkit.org/show_bug.cgi?id=12078
          Clean up RenderTable*

        - Coding style cleanup.
        - Canceled AutoTableLayout and FixedTableLayout being friend classes of
          RenderTable. Instead, added public accessors to RenderTable for what
          the table layout classes need and changed TableLayout::calcMinMaxWidth()
          to take references to the caller's min and max widths.
        - Made RenderTableSection's grid protected and moved code that accessed it
          from RenderTable into RenderTableSection.

        No test possible (no change to functionality).

        * rendering/AutoTableLayout.cpp:
        (WebCore::AutoTableLayout::calcMinMaxWidth):
        (WebCore::AutoTableLayout::layout):
        * rendering/AutoTableLayout.h:
        * rendering/FixedTableLayout.cpp:
        (WebCore::FixedTableLayout::calcWidthArray):
        (WebCore::FixedTableLayout::calcMinMaxWidth):
        (WebCore::FixedTableLayout::layout):
        * rendering/FixedTableLayout.h:
        * rendering/RenderTable.cpp:
        (WebCore::RenderTable::RenderTable):
        (WebCore::RenderTable::~RenderTable):
        (WebCore::RenderTable::setStyle):
        (WebCore::RenderTable::addChild):
        (WebCore::RenderTable::calcWidth):
        (WebCore::RenderTable::layout):
        (WebCore::RenderTable::setCellWidths):
        (WebCore::RenderTable::paint):
        (WebCore::RenderTable::paintBoxDecorations):
        (WebCore::RenderTable::calcMinMaxWidth):
        (WebCore::RenderTable::splitColumn): Factored out the section work
        to RenderTableSection::splitColumn().
        (WebCore::RenderTable::appendColumn): Factored out the section work
        to RenderTableSection::appendColumn().
        (WebCore::RenderTable::colElement):
        (WebCore::RenderTable::recalcSections):
        (WebCore::RenderTable::removeChildNode):
        (WebCore::RenderTable::calcBorderLeft):
        (WebCore::RenderTable::calcBorderRight):
        (WebCore::RenderTable::outerBorderTop):
        (WebCore::RenderTable::outerBorderBottom):
        (WebCore::RenderTable::outerBorderLeft):
        (WebCore::RenderTable::outerBorderRight):
        (WebCore::RenderTable::sectionAbove):
        (WebCore::RenderTable::sectionBelow):
        (WebCore::RenderTable::cellAbove):
        (WebCore::RenderTable::cellBelow):
        (WebCore::RenderTable::cellBefore):
        (WebCore::RenderTable::getOverflowClipRect):
        (WebCore::RenderTable::dump):
        * rendering/RenderTable.h:
        (WebCore::RenderTable::getColumnPos):
        (WebCore::RenderTable::hBorderSpacing):
        (WebCore::RenderTable::vBorderSpacing):
        (WebCore::RenderTable::getRules):
        (WebCore::RenderTable::cellPadding):
        (WebCore::RenderTable::setCellPadding):
        (WebCore::RenderTable::ColumnStruct::ColumnStruct):
        (WebCore::RenderTable::columns): Added this accessor.
        (WebCore::RenderTable::columnPositions): Added this accessor.
        (WebCore::RenderTable::header):
        (WebCore::RenderTable::footer):
        (WebCore::RenderTable::firstBody):
        (WebCore::RenderTable::numEffCols):
        (WebCore::RenderTable::spanOfEffCol):
        (WebCore::RenderTable::colToEffCol):
        (WebCore::RenderTable::effColToCol):
        (WebCore::RenderTable::bordersPaddingAndSpacing):
        (WebCore::RenderTable::needsSectionRecalc):
        (WebCore::RenderTable::setNeedsSectionRecalc): Renamed setNeedSectionRecalc()
        to this.
        (WebCore::RenderTable::hasSections):
        (WebCore::RenderTable::recalcSectionsIfNeeded):
        * rendering/RenderTableCell.cpp:
        (WebCore::RenderTableCell::RenderTableCell):
        (WebCore::RenderTableCell::destroy):
        (WebCore::RenderTableCell::updateFromElement):
        (WebCore::RenderTableCell::styleOrColWidth):
        (WebCore::RenderTableCell::computeAbsoluteRepaintRect):
        (WebCore::RenderTableCell::absolutePosition):
        (WebCore::RenderTableCell::baselinePosition):
        (WebCore::RenderTableCell::setStyle):
        (WebCore::compareBorders):
        (WebCore::RenderTableCell::collapsedTopBorder):
        (WebCore::RenderTableCell::paint):
        (WebCore::collapsedBorderStyle):
        (WebCore::CollapsedBorder::CollapsedBorder):
        (WebCore::CollapsedBorders::CollapsedBorders):
        (WebCore::CollapsedBorders::addBorder):
        (WebCore::CollapsedBorders::nextBorder):
        (WebCore::RenderTableCell::paintCollapsedBorder):
        (WebCore::RenderTableCell::paintBackgroundsBehindCell):
        (WebCore::RenderTableCell::paintBoxDecorations):
        (WebCore::RenderTableCell::dump):
        * rendering/RenderTableCell.h:
        (WebCore::RenderTableCell::colSpan):
        (WebCore::RenderTableCell::setColSpan):
        (WebCore::RenderTableCell::rowSpan):
        (WebCore::RenderTableCell::setRowSpan):
        (WebCore::RenderTableCell::col):
        (WebCore::RenderTableCell::setCol):
        (WebCore::RenderTableCell::row):
        (WebCore::RenderTableCell::setRow):
        (WebCore::RenderTableCell::section):
        (WebCore::RenderTableCell::table):
        (WebCore::RenderTableCell::yPos):
        (WebCore::RenderTableCell::setCellTopExtra):
        (WebCore::RenderTableCell::setCellBottomExtra):
        (WebCore::RenderTableCell::borderTopExtra):
        (WebCore::RenderTableCell::borderBottomExtra):
        * rendering/RenderTableRow.cpp:
        (WebCore::RenderTableRow::destroy):
        (WebCore::RenderTableRow::setStyle):
        (WebCore::RenderTableRow::addChild):
        (WebCore::RenderTableRow::layout):
        (WebCore::RenderTableRow::getAbsoluteRepaintRect):
        (WebCore::RenderTableRow::paint):
        * rendering/RenderTableRow.h:
        (WebCore::RenderTableRow::section):
        (WebCore::RenderTableRow::table):
        (WebCore::RenderTableRow::lineHeight):
        * rendering/RenderTableSection.cpp:
        (WebCore::RenderTableSection::RenderTableSection):
        (WebCore::RenderTableSection::destroy):
        (WebCore::RenderTableSection::setStyle):
        (WebCore::RenderTableSection::addChild):
        (WebCore::RenderTableSection::ensureRows):
        (WebCore::RenderTableSection::addCell):
        (WebCore::RenderTableSection::setCellWidths):
        (WebCore::RenderTableSection::calcRowHeight):
        (WebCore::RenderTableSection::layoutRows):
        (WebCore::RenderTableSection::lowestPosition):
        (WebCore::RenderTableSection::rightmostPosition):
        (WebCore::RenderTableSection::leftmostPosition):
        (WebCore::RenderTableSection::calcOuterBorderTop):
        (WebCore::RenderTableSection::calcOuterBorderBottom):
        (WebCore::RenderTableSection::calcOuterBorderLeft):
        (WebCore::RenderTableSection::calcOuterBorderRight):
        (WebCore::RenderTableSection::paint):
        (WebCore::RenderTableSection::recalcCells):
        (WebCore::RenderTableSection::clearGrid):
        (WebCore::RenderTableSection::numColumns):
        (WebCore::RenderTableSection::appendColumn): Added. Moved code from
        RenderTable::appendColumn() into here.
        (WebCore::RenderTableSection::splitColumn): Added. Moved code from
        RenderTable::splitColumn() into here.
        (WebCore::RenderTableSection::removeChildNode):
        (WebCore::RenderTableSection::dump):
        * rendering/RenderTableSection.h:
        (WebCore::RenderTableSection::renderName):
        (WebCore::RenderTableSection::isTableSection):
        (WebCore::RenderTableSection::lineHeight):
        (WebCore::RenderTableSection::table):
        (WebCore::RenderTableSection::cellAt):
        (WebCore::RenderTableSection::numRows):
        (WebCore::RenderTableSection::recalcCellsIfNeeded):
        (WebCore::RenderTableSection::needsCellRecalc):
        (WebCore::RenderTableSection::setNeedsCellRecalc):
        (WebCore::RenderTableSection::getBaseline):
        * rendering/TableLayout.h:

2007-01-04  Anders Carlsson  <acarlsson@apple.com>

        Reviewed by Adam.

        http://bugs.webkit.org/show_bug.cgi?id=12120
        REGRESSION(r18605): Safari snippet editor no longer works
        
        * loader/mac/ResourceLoaderMac.mm:
        (WebCore::ResourceLoader::willSendRequest):
        Fix logic so applewebdata: URLs no longer cause the underlying URL to be fetched .

2007-01-04  Anders Carlsson  <acarlsson@apple.com>

        Reviewed by Adam.

        Move all remaining instances of NSURLRequest over to ResourceRequest (well, pretty much all).

        * loader/MainResourceLoader.h:
        * loader/ResourceLoader.h:
        * loader/SubresourceLoader.h:
        * loader/mac/FrameLoaderMac.mm:
        (WebCore::FrameLoader::startLoadingMainResource):
        * loader/mac/MainResourceLoaderMac.mm:
        (WebCore::MainResourceLoader::loadNow):
        (WebCore::MainResourceLoader::load):
        (WebCore::MainResourceLoader::setDefersLoading):
        * loader/mac/ResourceLoaderMac.mm:
        (WebCore::ResourceLoader::load):
        * loader/mac/SubresourceLoaderMac.mm:
        (WebCore::SubresourceLoader::load):
        (WebCore::SubresourceLoader::create):
        * platform/graphics/svg/SVGImage.cpp:
        (WebCore::SVGImage::setData):
        * platform/network/mac/ResourceRequestMac.mm:
        (WebCore::ResourceRequest::doUpdatePlatformRequest):

2007-01-04  Anders Carlsson  <acarlsson@apple.com>

        Reviewed by Brady.

        Move more NSURLRequests over to ResourceRequests.
        
        * loader/DocumentLoader.h:
        * loader/FrameLoader.h:
        * loader/FrameLoaderClient.h:
        * loader/MainResourceLoader.h:
        * loader/ResourceLoader.h:
        (WebCore::ResourceLoader::request):
        * loader/SubresourceLoader.h:
        * loader/mac/FrameLoaderMac.mm:
        (WebCore::FrameLoader::willSendRequest):
        (WebCore::FrameLoader::opened):
        (WebCore::FrameLoader::requestFromDelegate):
        (WebCore::FrameLoader::loadedResourceFromMemoryCache):
        (WebCore::FrameLoader::loadResourceSynchronously):
        * loader/mac/MainResourceLoaderMac.mm:
        (WebCore::MainResourceLoader::willSendRequest):
        (WebCore::MainResourceLoader::continueAfterContentPolicy):
        (WebCore::MainResourceLoader::loadNow):
        (WebCore::MainResourceLoader::setDefersLoading):
        * loader/mac/ResourceLoaderMac.mm:
        (WebCore::ResourceLoader::load):
        (WebCore::ResourceLoader::willSendRequest):
        (WebCore::ResourceLoader::didReceiveResponse):
        (WebCore::ResourceLoader::cancelledError):
        * loader/mac/SubresourceLoaderMac.mm:
        (WebCore::SubresourceLoader::willSendRequest):
        * platform/graphics/svg/SVGImageEmptyClients.h:
        (WebCore::SVGEmptyFrameLoaderClient::dispatchWillSendRequest):
        (WebCore::SVGEmptyFrameLoaderClient::dispatchDidLoadResourceFromMemoryCache):
        * platform/network/ResourceRequest.cpp:
        (WebCore::ResourceRequest::isNull):
        * platform/network/ResourceRequest.h:

2007-01-04  Brady Eidson  <beidson@apple.com>

        Reviewed by Mark Rowe

        http://bugs.webkit.org/show_bug.cgi?id=12119
        Changing the behavior of HistoryItem::pageCache() this morning also necessitated
        changing the behavior of HistoryItem::hasPageCache()

        * history/HistoryItem.cpp:
        (WebCore::HistoryItem::hasPageCache): Add the same pendingRelease check pageCache() has

2007-01-04  Mitz Pettel  <mitz@webkit.org>

        Reviewed by Sam Weinig.

        - fix http://bugs.webkit.org/show_bug.cgi?id=12043
          Another assertion failure in WebCore::RenderObject::drawBorder

        Test: fast/borders/border-radius-huge-assert.html

        * platform/graphics/cg/GraphicsContextCG.cpp:
        (WebCore::GraphicsContext::addRoundedRectClip): Fixed the check for border radii
        that do not fit in the given width or height to work with radii that sum up to
        more than MAX_INT.
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::paintBorder): Ditto.

2007-01-04  Justin Garcia  <justin.garcia@apple.com>

        Reviewed by john

        <rdar://problem/4861080>
        GMail Editor: Crash when dropping content into certain list items
        
        A rendering bug (4907469) creates unwanted space at the top of a 
        list item when its contents are wrapped in span.  Dropping content 
        inside that space causes a crash because positionForCoordinates 
        fails there and the code that creates drag carets can't handle it.

        * page/mac/WebCoreFrameBridge.mm:
        (-[WebCoreFrameBridge _visiblePositionForPoint:]): Added the
        that's inside click handling for the case where 
        positionForCoordinates returns null.  We should also fix 
        positionForCoordinates but that's less important: now its only side 
        effect is that a no-op drop is performed instead of a snap back 
        when you drop the contents of one of these list items its own 
        unwanted space.

2007-01-04  Beth Dakin  <bdakin@apple.com>

        Reviewed by Adam.

        Fix for http://bugs.webkit.org/show_bug.cgi?id=12118 REGRESSION 
        (Context menus): No context menu displayed when clicking outside a 
        short document

        No test case added since we do not currently have a way to automate 
        context menus. 

        * page/ContextMenuController.cpp:
        (WebCore::ContextMenuController::handleContextMenuEvent): If the 
        hit test does not find a node, use the document node.

2007-01-04  Anders Carlsson  <acarlsson@apple.com>

        Reviewed by Adam.

        Convert NSURLRequest to ResourceRequest in a few places

        * loader/FrameLoader.h:
        * loader/FrameLoaderClient.h:
        * loader/MainResourceLoader.h:
        * loader/mac/FrameLoaderMac.mm:
        (WebCore::FrameLoader::identifierForInitialRequest):
        (WebCore::FrameLoader::willUseArchive):
        * loader/mac/MainResourceLoaderMac.mm:
        (WebCore::MainResourceLoader::isPostOrRedirectAfterPost):
        * platform/graphics/svg/SVGImageEmptyClients.h:
        (WebCore::SVGEmptyFrameLoaderClient::download):
        (WebCore::SVGEmptyFrameLoaderClient::willUseArchive):

2007-01-04  David Hyatt  <hyatt@apple.com>

        Bug 12114 fix, make sure left/right floats are allowed to go above
        other floats of opposite alignment.

        Reviewed by aroben

        fast/block/float/independent-align-positioning.html

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::positionNewFloats):

2007-01-04  Anders Carlsson  <acarlsson@apple.com>

        Reviewed by Brady.

        http://bugs.webkit.org/show_bug.cgi?id=12116
        REGRESSION: ASSERTION FAILED: URL in +[WebDataProtocol _webIsDataProtocolURL:]
        
        <rdar://problem/4908910> 
        REGRESSION: After switching to Bookmarks view, the browser window is completely empty (no bookmarks are displayed)
        
        * platform/network/ResourceResponse.h:
        (WebCore::ResourceResponse::ResourceResponse):
        Initialize m_isNull

2007-01-04  Beth Dakin  <bdakin@apple.com>

        Reviewed by Adam.

        Turn on WebCore context menus.

        * dom/EventTargetNode.cpp:
        (WebCore::EventTargetNode::defaultEventHandler): Turn on WebCore 
        menus.
        * page/ContextMenuClient.h: Name change and have the 
        former getCustomMenuFromDefaultItems function return the 
        PlatformMenuDescription since it feels funny to have the client set 
        the new platform description.
        * page/ContextMenuController.cpp:
        (WebCore::ContextMenuController::handleContextMenuEvent): Above 
        name change.
        (WebCore::ContextMenuController::contextMenuItemSelected): Use 
        local variable.
        * platform/ContextMenu.cpp:
        (WebCore::createAndAppendSpeechSubMenu): Fix silly mistake -- make 
        "Stop speaking" actually stop speaking.
        * platform/graphics/svg/SVGImageEmptyClients.h: Name change and 
        have the former getCustomMenuFromDefaultItems function return the 
        PlatformMenuDescription since it feels funny to have the client set 
        the new platform description.
       (WebCore::SVGEmptyContextMenuClient::getCustomMenuFromDefaultItems):

2007-01-04  Mitz Pettel  <mitz@webkit.org>

        Reviewed and landed by Brady

        - fix http://bugs.webkit.org/show_bug.cgi?id=12087
          REGRESSION: Reproducible crash going back in Back/Forward history

        Allow a PageCache that is pending release to be resurrected by its
        HistoryItem instead of creating a new PageCache. This avoids the
        the condition of having two PageCaches for the same HistoryItem, one
        current and one pending release but not yet released, which was causing
        this and other bugs before.
        
        Replaced the vector of PageCaches pending release with a set of
        HistoryItems that are pending release of their PageCache.

        * history/HistoryItem.cpp:
        (WebCore::HistoryItem::HistoryItem):
        (WebCore::HistoryItem::setHasPageCache): Check for an existing PageCache
        pending release, and if found, resurrect it by canceling the release.
        (WebCore::HistoryItem::pageCache): Return 0 if the PageCache is pending
        release.
        (WebCore::itemsWithPendingPageCacheToRelease): Renamed pendingPageCacheToRelease
        to this. This method now returns a HashSet of HistoryItems that have scheduled
        their PageCaches for release.
        (WebCore::HistoryItem::releasePageCachesOrReschedule): Renamed releasePageCache
        to this.
        (WebCore::HistoryItem::releasePageCache): Added. Actually closes and releases
        the PageCache.
        (WebCore::HistoryItem::releaseAllPendingPageCaches): Rolled closeObjectsInPendingPageCaches
        into this method.
        (WebCore::HistoryItem::scheduleRelease):
        (WebCore::HistoryItem::cancelRelease): Added.
        * history/HistoryItem.h: Removed unused declaration of scheduleReleaseTimer()
        * history/HistoryItemTimer.cpp:
        (WebCore::HistoryItemTimer::HistoryItemTimer):
        (WebCore::HistoryItemTimer::callReleasePageCachesOrReschedule):
        * history/HistoryItemTimer.h:

2007-01-04  David Hyatt  <hyatt@apple.com>

        Just make the synthetic bold offset always be 1.0.  This fixes bug
        9534, synthetic bold looks doubled.

        Reviewed by olliej

        * platform/mac/FontDataMac.mm:
        (WebCore::FontData::platformInit):

2007-01-04  Anders Carlsson  <acarlsson@apple.com>

        Reviewed by Brady.

        Convert almost all occurrences of NSURLResponse to ResourceResponse.

        * WebCore.exp:
        * loader/DocumentLoader.h:
        * loader/FrameLoader.h:
        * loader/FrameLoaderClient.h:
        * loader/MainResourceLoader.h:
        * loader/NetscapePlugInStreamLoader.h:
        * loader/ResourceLoader.h:
        * loader/SubresourceLoader.h:
        * loader/loader.h:
        * loader/mac/FrameLoaderMac.mm:
        (WebCore::FrameLoader::willSendRequest):
        (WebCore::FrameLoader::didReceiveResponse):
        (WebCore::FrameLoader::opened):
        (WebCore::FrameLoader::sendRemainingDelegateMessages):
        (WebCore::FrameLoader::loadedResourceFromMemoryCache):
        (WebCore::FrameLoader::loadResourceSynchronously):
        * loader/mac/LoaderFunctionsMac.mm:
        (WebCore::CheckCacheObjectStatus):
        * loader/mac/MainResourceLoaderMac.mm:
        (WebCore::MainResourceLoader::isPostOrRedirectAfterPost):
        (WebCore::MainResourceLoader::willSendRequest):
        (WebCore::MainResourceLoader::continueAfterContentPolicy):
        (WebCore::MainResourceLoader::didReceiveResponse):
        (WebCore::MainResourceLoader::loadNow):
        * loader/mac/NetscapePlugInStreamLoaderMac.mm:
        (WebCore::NetscapePlugInStreamLoader::didReceiveResponse):
        * loader/mac/ResourceLoaderMac.mm:
        (WebCore::ResourceLoader::willSendRequest):
        (WebCore::ResourceLoader::didReceiveResponse):
        (WebCore::ResourceLoader::response):
        * loader/mac/SubresourceLoaderMac.mm:
        (WebCore::SubresourceLoader::willSendRequest):
        (WebCore::SubresourceLoader::didReceiveResponse):
        * platform/graphics/svg/SVGImageEmptyClients.h:
        (WebCore::SVGEmptyFrameLoaderClient::download):
        (WebCore::SVGEmptyFrameLoaderClient::dispatchWillSendRequest):
        (WebCore::SVGEmptyFrameLoaderClient::dispatchDidReceiveResponse):
        (WebCore::SVGEmptyFrameLoaderClient::dispatchDidLoadResourceFromMemoryCache):
        (WebCore::SVGEmptyFrameLoaderClient::incrementProgress):
        * platform/network/ResourceHandle.h:
        * platform/network/ResourceHandleClient.h:
        * platform/network/ResourceResponse.cpp:
        (WebCore::ResourceResponse::isHTTP):
        * platform/network/ResourceResponse.h:
        (WebCore::ResourceResponse::ResourceResponse):
        (WebCore::ResourceResponse::isNull):
        * platform/network/mac/ResourceResponseMac.mm:
        (WebCore::ResourceResponse::nsURLResponse):
        (WebCore::ResourceResponse::doUpdateResourceResponse):

2007-01-03  Adele Peterson  <adele@apple.com>

        Reviewed by Darin.

        - Fix for <rdar://problem/4887422>
        http://bugs.webkit.org/show_bug.cgi?id=11848
        REGRESSION (SearchField): Search field on developer.apple.com not drawn with top/bottom borders (11848)

        Test: fast/forms/searchfield-heights.html

        Override the border and the height for search fields that use -webkit-appearance: searchfield.

        * css/html4.css: Use box-sizing: border-box for search fields.  We don't need to have the border-box quirk
          that we use for the other text fields for this control.
        * rendering/RenderThemeMac.h:
        * rendering/RenderThemeMac.mm:
        (WebCore::RenderThemeMac::searchFieldSizes): Added.
        (WebCore::RenderThemeMac::setSearchFieldSize): Added.
        (WebCore::RenderThemeMac::adjustSearchFieldStyle): Override the border and the height of the search field.

2007-01-04  Lars Knoll <lars@trolltech.com>

        * platform/qt/TemporaryLinkStubs.cpp:
        (WebCore::inputElementAltText):
        (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):
            Added missing stubs.

2007-01-04  Don Gibson  <dgibson77@gmail.com>

        Reviewed by Alexey.

        http://bugs.webkit.org/show_bug.cgi?id=11900:
        Windows build bustage

        * WebCore.vcproj/WebCore/WebCore.vcproj:
        * bridge/win/FrameWin.cpp:
        (WebCore::FrameWin::FrameWin):
        * platform/graphics/BitmapImage.h:
        * platform/graphics/GraphicsContext.cpp:
        (WebCore::GraphicsContext::setPlatformStrokeColor):
        * platform/graphics/Image.h:
        * platform/graphics/cairo/GraphicsContextCairo.cpp:
        (WebCore::GraphicsContext::drawRect):
        (WebCore::adjustLineToPixelBoundaries):
        (WebCore::GraphicsContext::drawLine):
        (WebCore::GraphicsContext::drawEllipse):
        (WebCore::GraphicsContext::strokeArc):
        (WebCore::GraphicsContext::drawConvexPolygon):
        * platform/graphics/cairo/ImageCairo.cpp:
        (WebCore::BitmapImage::checkForSolidColor):
        (WebCore::BitmapImage::draw):
        (WebCore::BitmapImage::drawTiled):
        * platform/graphics/win/ImageWin.cpp:
        (WebCore::BitmapImage::initPlatformData):
        (WebCore::BitmapImage::invalidatePlatformData):
        (WebCore::Image::loadPlatformResource):
        * platform/win/FontWin.cpp:
        (WebCore::Font::drawGlyphs):
        * platform/win/TemporaryLinkStubs.cpp:
        (WebCore::userIdleTime):
        (WebCore::BitmapImage::drawTiled):
        (WebCore::BitmapImage::getHBITMAP):
        (WebCore::ContextMenu::~ContextMenu):
        (WebCore::ContextMenu::appendItem):
        (WebCore::ContextMenuItem::ContextMenuItem):
        (WebCore::ContextMenuItem::releasePlatformDescription):
        (WebCore::ContextMenuItem::type):
        (WebCore::ContextMenuItem::setType):
        (WebCore::ContextMenuItem::setAction):
        (WebCore::ContextMenuItem::setTitle):
        (WebCore::ContextMenuItem::setSubMenu):
        (WebCore::ContextMenuItem::setChecked):
        (WebCore::ContextMenuItem::setEnabled):
        (WebCore::DocumentLoader::originalRequest):
        (WebCore::DocumentLoader::request):
        (WebCore::DocumentLoader::unreachableURL):
        (WebCore::DocumentLoader::getResponseRefreshAndModifiedHeaders):
        (WebCore::DocumentLoader::replaceRequestURLForAnchorScroll):
        (WebCore::DocumentLoader::setCommitted):
        (WebCore::DocumentLoader::isLoading):
        (WebCore::DocumentLoader::prepareForLoadStart):
        (WebCore::DocumentLoader::isClientRedirect):
        (WebCore::DocumentLoader::title):
        (WebCore::DocumentLoader::urlForHistory):
        (WebCore::Editor::markMisspellingsAfterTypingToPosition):
        (WebCore::FrameLoader::load):
        (WebCore::FrameLoader::referrer):
        (WebCore::FrameLoader::dataURLBaseFromRequest):
        (WebCore::FrameLoader::opened):
        (WebCore::FrameLoader::applyUserAgent):
        (WebCore::GraphicsContext::strokeRect):
        (WebCore::IconDatabase::iconForPageURL):
        (WebCore::IconDatabase::defaultIcon):
        (WebCore::IconDatabase::retainIconForPageURL):
        (WebCore::IconDatabase::releaseIconForPageURL):
        (WebCore::PageCache::close):
        (WebCore::ResourceHandle::willLoadFromCache):
        (WebCore::SearchPopupMenu::saveRecentSearches):
        (WebCore::SearchPopupMenu::loadRecentSearches):
        (WebCore::SearchPopupMenu::SearchPopupMenu):

2007-01-04  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Darin.

        http://bugs.webkit.org/show_bug.cgi?id=11611
        REGRESSION: No http referer header sent on XMLHttpRequest

        Test: http/tests/xmlhttprequest/referer.html

        * loader/FrameLoader.h: Removed FrameLoader::addExtraFieldsToRequest(NSMutableURLRequest*, bool, bool),
        which is no longer used.
        * loader/mac/FrameLoaderMac.mm: Ditto.
        * WebCore.exp: Do not export this method (WebKit doesn't use it).

        * loader/mac/SubresourceLoaderMac.mm:
        (WebCore::SubresourceLoader::create): Rewrote to create the request with ResourceRequest::nsURLRequest.

        * platform/PlatformString.h:
        (WebCore::operator!): Added. Previously, attempts to use operator! on a String would result 
        with an NSString* conversion, which never returns nil. This was causing a problem in SubresourceLoader::create().

2007-01-04  Lars Knoll <lars@trolltech.com>


        Make the Qt build compile again.

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

2007-01-03  Mitz Pettel  <mitz@webkit.org>

        Reviewed by Hyatt.

        - fix http://bugs.webkit.org/show_bug.cgi?id=5164
          Non-integer percentages are incorrectly rounded down in Safari

        Test: fast/css/percentage-non-integer.html

        Added floating point constructor and accessors to Length for use with
        Percent lengths only. The raw value of a percent length is the integer
        part of a constant multiple of the original double value. The constant
        is percentScaleFactor, which is currently 128.
        
        Added assertions that the correct constructors and accessors are used
        depending on the type: the double-based percent(), setValue() and Length()
        for the Percent type, and the integer-based value(), setValue() and Length()
        for all other types.
        
        calcValue() and calcMinValue() work the same as before, regardless of the
        type.

        Added helpers for testing if the value is 0, positive, negative or undefined
        without having to check the type first.
        
        Added raw value accessors. These are useful for doing integer math and
        comparisons with scaled percent values or doing Length type-agnostic math.

        Changed the rest of the code to use the appropriate accessors and helpers.

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::valueForLength):
        (WebCore::primitiveValueFromLength):
        (WebCore::CSSComputedStyleDeclaration::getPropertyCSSValue):
        * css/cssstyleselector.cpp:
        (WebCore::convertToLength):
        (WebCore::CSSStyleSelector::applyProperty):
        (WebCore::CSSStyleSelector::mapBackgroundSize):
        (WebCore::CSSStyleSelector::mapBackgroundXPosition):
        (WebCore::CSSStyleSelector::mapBackgroundYPosition):
        * platform/StringImpl.cpp:
        (WebCore::parseLength):
        * rendering/AutoTableLayout.cpp:
        (WebCore::AutoTableLayout::recalcColumn):
        (WebCore::AutoTableLayout::fullRecalc):
        (WebCore::AutoTableLayout::calcMinMaxWidth):
        (WebCore::AutoTableLayout::calcEffectiveWidth):
        (WebCore::AutoTableLayout::layout):
        (WebCore::AutoTableLayout::calcPercentages):
        * rendering/FixedTableLayout.cpp:
        (WebCore::FixedTableLayout::calcWidthArray):
        (WebCore::FixedTableLayout::layout):
        * rendering/Length.h:
        (WebCore::Length::Length):
        (WebCore::Length::value):
        (WebCore::Length::rawValue):
        (WebCore::Length::percent):
        (WebCore::Length::setValue):
        (WebCore::Length::setRawValue):
        (WebCore::Length::calcValue):
        (WebCore::Length::calcMinValue):
        (WebCore::Length::isUndefined):
        (WebCore::Length::isZero):
        (WebCore::Length::isPositive):
        (WebCore::Length::isNegative):
        * rendering/RenderBR.cpp:
        (WebCore::RenderBR::lineHeight):
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::isSelfCollapsingBlock):
        * rendering/RenderBox.cpp:
        (WebCore::cacluateBackgroundSize):
        (WebCore::RenderBox::calcWidth):
        (WebCore::RenderBox::calcHeight):
        (WebCore::RenderBox::calcReplacedWidth):
        (WebCore::RenderBox::calcReplacedHeight):
        (WebCore::RenderBox::calcAbsoluteHorizontal):
        (WebCore::RenderBox::calcAbsoluteVertical):
        * rendering/RenderFlexibleBox.cpp:
        (WebCore::RenderFlexibleBox::allowedChildFlex):
        * rendering/RenderFlow.cpp:
        (WebCore::RenderFlow::lineHeight):
        * rendering/RenderImage.cpp:
        (WebCore::RenderImage::calcReplacedWidth):
        (WebCore::RenderImage::calcReplacedHeight):
        * rendering/RenderLayer.cpp:
        (WebCore::Marquee::direction):
        (WebCore::Marquee::start):
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::mustRepaintBackgroundOrBorder):
        (WebCore::RenderObject::lineHeight):
        * rendering/RenderSlider.cpp:
        (WebCore::RenderSlider::layout): Added FIXMEs.
        * rendering/RenderStyle.h:
        (WebCore::LengthBox::nonZero):
        (WebCore::RenderStyle::initialLineHeight):
        * rendering/RenderTable.cpp:
        (WebCore::RenderTable::calcWidth):
        * rendering/RenderTableSection.cpp:
        (WebCore::RenderTableSection::addCell):
        (WebCore::RenderTableSection::layoutRows):

2007-01-03  Mitz Pettel  <mitz@webkit.org>

        Reviewed by Hyatt.

        - fix http://bugs.webkit.org/show_bug.cgi?id=11744
          Setting the 'content' property dynamically has no effect

        Test: fast/css/content-dynamic.html

        * dom/Node.cpp:
        (WebCore::Node::diff): Changed to return 'Detach' if the styles' content
        data are not equivalent.

2007-01-03  Mitz Pettel  <mitz@webkit.org>

        Reviewed by Darin.

        - fix http://bugs.webkit.org/show_bug.cgi?id=12082
          REGRESSION (r18333): Crash in RenderFrameSet::layOutAxis()

        Test: fast/frames/negative-remaining-length-crash.html

        * rendering/RenderFrameSet.cpp:
        (WebCore::RenderFrameSet::layOutAxis): Treat negative availableLength
        as zero.

2007-01-03  John Sullivan  <sullivan@apple.com>

        Written by Darin over my shoulder; reviewed by me

        - fixed <rdar://problem/4907437> Find doesn't work if invoked when a form field is focused

        * page/Frame.cpp:
        (WebCore::isInShadowTree):
        new helper function used by findString
        (WebCore::Frame::findString):
        when deciding whether to start from the selection, ignore selections that are in
        a shadow tree (i.e. in a form control)

2007-01-03  Brady Eidson  <beidson@apple.com>

        Reviewed by Mark Rowe

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

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::updateHistoryForCommit): Null check the documentLoader

2007-01-03  David Hyatt  <hyatt@apple.com>

        Relax the display type restriction a little bit for generated content inside
        inlines.  We still don't allow block display types like we should (since this
        will cause a crash), but we at least handle inline-table and inline-block now.

        Reviewed by beth

        fast/css-generated-content/inline-display-types.html

        * rendering/RenderContainer.cpp:
        (WebCore::RenderContainer::updatePseudoChildForObject):

2007-01-03  Justin Garcia  <justin.garcia@apple.com>

        Reviewed by john
        
        <rdar://problem/4663571> Spell checking won't cross boundary of individual To-Do item
        
        No layout tests because advanceToNextMisspelling isn't yet exposed to automated tests.

        * editing/mac/EditorMac.mm:
        (WebCore::Editor::advanceToNextMisspelling): Confine spell checking to
        the highest editable root, instead of the lowest.  Use firstEditablePosition...
        to look for an editable position.

2007-01-03  Beth Dakin  <bdakin@apple.com>

        Fixing silly mistake. 

        * platform/ContextMenu.cpp:
        (WebCore::ContextMenu::checkOrEnableIfNeeded): Called wrong string 
        function.

2007-01-03  Brady Eidson  <beidson@apple.com>

        Reviewed by Anders

        http://bugs.webkit.org/show_bug.cgi?id=12093 - Assertion in certain SVG layout tests
        I can't really think of a cleaner way to fix this then to help these SVG cases avoid
        the ASSERT - hopefully we can clean up the svg-as-image situation as the loader stabilizes 
        and we find better ways to handle it...

        * loader/mac/DocumentLoaderMac.mm:
        (WebCore::DocumentLoader::urlForHistory): empty-check the url before passing it to the
        ASSERTing method

2007-01-03  Darin Adler  <darin@apple.com>

        Reviewed by Adele.

        - removed some obsolete source files

        * CMakeLists.txt: Removed obsolete files.
        * WebCore.pro: Ditto.
        * WebCore.vcproj/WebCore/WebCore.vcproj: Ditto.
        * WebCore.xcodeproj/project.pbxproj: Ditto.
        * WebCoreSources.bkl: Ditto.

        * html/HTMLGenericFormElement.h: Removed reference to RenderFormElement.

        * platform/qt/ComboBoxQt.cpp: Removed.
        * platform/qt/LineEditQt.cpp: Removed.
        * platform/qt/ListBoxQt.cpp: Removed.
        * platform/qt/TextEditQt.cpp: Removed.
        * rendering/RenderFormElement.cpp: Removed.
        * rendering/RenderFormElement.h: Removed.
        * rendering/RenderLabel.cpp: Removed.
        * rendering/RenderLabel.h: Removed.

2007-01-03  Darin Adler  <darin@apple.com>

        Reviewed by Hyatt.

        - fix bug where :after content appears backwards

        Test: fast/css-generated-content/after-order.html

        * rendering/RenderBlock.cpp:
        (WebCore::isAfterContent): Added.
        (WebCore::RenderBlock::addChildToFlow): Use isAfterContent.
        * rendering/RenderInline.cpp:
        (WebCore::isAfterContent): Added.
        (WebCore::RenderInline::addChildToFlow): Use isAfterContent.

2007-01-03  David Hyatt  <hyatt@apple.com>

        Implement box-shadow parsing... getting it all into the RenderStyle.

        Reviewed by beth

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::CSSComputedStyleDeclaration::getPropertyCSSValue):
        * css/CSSPropertyNames.in:
        * css/cssparser.cpp:
        (WebCore::CSSParser::parseValue):
        * css/cssstyleselector.cpp:
        (WebCore::CSSStyleSelector::applyProperty):
        * rendering/RenderStyle.cpp:
        (WebCore::StyleCSS3NonInheritedData::StyleCSS3NonInheritedData):
        (WebCore::StyleCSS3NonInheritedData::operator==):
        (WebCore::StyleCSS3NonInheritedData::shadowDataEquivalent):
        (WebCore::RenderStyle::diff):
        (WebCore::RenderStyle::setBoxShadow):
        * rendering/RenderStyle.h:
        (WebCore::RenderStyle::boxShadow):

2007-01-03  Beth Dakin  <bdakin@apple.com>

        Reviewed by John.

        Call into WebKit to get localized strings for all of the context 
        menu item titles.

        * page/mac/WebCoreViewFactory.h:
        * platform/ContextMenu.cpp:
        (WebCore::createAndAppendFontSubMenu):
        (WebCore::createAndAppendSpellingAndGrammarSubMenu):
        (WebCore::createAndAppendSpellingSubMenu):
        (WebCore::createAndAppendSpeechSubMenu):
        (WebCore::createAndAppendWritingDirectionSubMenu):
        (WebCore::ContextMenu::populate):
        (WebCore::ContextMenu::checkOrEnableIfNeeded):
        * platform/LocalizedStrings.h:
        * platform/mac/LocalizedStringsMac.mm:
        (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::contextMenuItemTagSearchInSpotlight):
        (WebCore::contextMenuItemTagSearchWeb):
        (WebCore::contextMenuItemTagLookUpInDictionary):
        (WebCore::contextMenuItemTagOpenLink):
        (WebCore::contextMenuItemTagIgnoreGrammar):
        (WebCore::contextMenuItemTagSpellingMenu):
        (WebCore::contextMenuItemTagShowSpellingPanel):
        (WebCore::contextMenuItemTagCheckSpelling):
        (WebCore::contextMenuItemTagCheckSpellingWhileTyping):
        (WebCore::contextMenuItemTagCheckGrammarWithSpelling):
        (WebCore::contextMenuItemTagFontMenu):
        (WebCore::contextMenuItemTagShowFonts):
        (WebCore::contextMenuItemTagBold):
        (WebCore::contextMenuItemTagItalic):
        (WebCore::contextMenuItemTagUnderline):
        (WebCore::contextMenuItemTagOutline):
        (WebCore::contextMenuItemTagStyles):
        (WebCore::contextMenuItemTagShowColors):
        (WebCore::contextMenuItemTagSpeechMenu):
        (WebCore::contextMenuItemTagStartSpeaking):
        (WebCore::contextMenuItemTagStopSpeaking):
        (WebCore::contextMenuItemTagWritingDirectionMenu):
        (WebCore::contextMenuItemTagDefaultDirection):
        (WebCore::contextMenuItemTagLeftToRight):
        (WebCore::contextMenuItemTagRightToLeft):

2007-01-03  Brady Eidson  <beidson@apple.com>

        Reviewed by Darin and Geoff

        http://bugs.webkit.org/show_bug.cgi?id=12105 - Crash visiting Acid2 test page
        -Replace lost "free nil checking" in the WebKit->WebCore conversion of the BackForwardList
        -Changed ::createItem and ::createItemTree to ::createHistoryItem and ::createHistoryItemTree

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::createHistoryItem):
        (WebCore::FrameLoader::addBackForwardItemClippedAtTarget):
        (WebCore::FrameLoader::createHistoryItemTree):
        (WebCore::FrameLoader::updateHistoryForInternalLoad):
        * loader/FrameLoader.h:

2007-01-03  Anders Carlsson  <acarlsson@apple.com>

        Reviewed by Geoff.
        
        Allow plugin elements to handle off events to their widgets.
        
        * html/HTMLPlugInElement.cpp:
        (WebCore::HTMLPlugInElement::defaultEventHandler):
        * html/HTMLPlugInElement.h:
        * platform/Widget.h:
        (WebCore::Widget::handleEvent):

2007-01-03  Lars Knoll <lars@trolltech.com>

        Fix the Qt build

        * WebCore.pro:
        * history/qt/PageCacheQt.cpp: Added.
        (WebCore::PageCache::close):
        * loader/qt/DocumentLoaderQt.cpp:
        (WebCore::DocumentLoader::getResponseRefreshAndModifiedHeaders):
        (WebCore::DocumentLoader::urlForHistory):
        * loader/qt/FrameLoaderQt.cpp:
        (WebCore::FrameLoader::checkLoadCompleteForThisFrame):
        (WebCore::FrameLoader::didFirstLayout):
        (WebCore::FrameLoader::load):
        (WebCore::FrameLoader::opened):
        (WebCore::FrameLoader::dataURLBaseFromRequest):
        (WebCore::FrameLoader::applyUserAgent):
        * platform/network/qt/ResourceHandleQt.cpp:
        (WebCore::ResourceHandle::loadsBlocked):
        (WebCore::ResourceHandle::willLoadFromCache):

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

        Reviewed extensively and repeatedly by Darin

        <rdar://problem/4887137> - WebCore Back/Forward Cache

        * WebCore.exp:
        * WebCore.xcodeproj/project.pbxproj:

        * bridge/mac/WebCorePageState.h: Removed.
        * bridge/mac/WebCorePageState.mm: Removed.

        * history/BackForwardList.cpp: Added - This largely emulates the design of WebBackForwardList
        (WebCore::BackForwardList::BackForwardList):
        (WebCore::BackForwardList::~BackForwardList):
        (WebCore::BackForwardList::addItem):
        (WebCore::BackForwardList::goBack):
        (WebCore::BackForwardList::goForward):
        (WebCore::BackForwardList::goToItem):
        (WebCore::BackForwardList::backItem):
        (WebCore::BackForwardList::currentItem):
        (WebCore::BackForwardList::forwardItem):
        (WebCore::BackForwardList::backListWithLimit):
        (WebCore::BackForwardList::forwardListWithLimit):
        (WebCore::BackForwardList::capacity):
        (WebCore::BackForwardList::setCapacity):
        (WebCore::BackForwardList::setPageCacheSize):
        (WebCore::BackForwardList::pageCacheSize):
        (WebCore::BackForwardList::clearPageCache):
        (WebCore::BackForwardList::usesPageCache):
        (WebCore::BackForwardList::backListCount):
        (WebCore::BackForwardList::forwardListCount):
        (WebCore::BackForwardList::itemAtIndex):
        (WebCore::BackForwardList::entries):
        (WebCore::BackForwardList::close):
        (WebCore::BackForwardList::closed):
        (WebCore::BackForwardList::removeItem):
        (WebCore::BackForwardList::containsItem):
        (WebCore::BackForwardList::setDefaultPageCacheSize):
        (WebCore::BackForwardList::defaultPageCacheSize):
        * history/BackForwardList.h: Added.

        * history/HistoryItem.cpp: Added - This largely emulates the design of WebBackForwardList
        (WebCore::defaultNotifyHistoryItemChanged):
        (WebCore::HistoryItem::HistoryItem):
        (WebCore::HistoryItem::~HistoryItem):
        (WebCore::HistoryItem::copy):
        (WebCore::HistoryItem::setHasPageCache):
        (WebCore::HistoryItem::retainIconInDatabase):
        (WebCore::HistoryItem::urlString):
        (WebCore::HistoryItem::originalURLString):
        (WebCore::HistoryItem::title):
        (WebCore::HistoryItem::alternateTitle):
        (WebCore::HistoryItem::icon):
        (WebCore::HistoryItem::lastVisitedTime):
        (WebCore::HistoryItem::url):
        (WebCore::HistoryItem::originalURL):
        (WebCore::HistoryItem::target):
        (WebCore::HistoryItem::parent):
        (WebCore::HistoryItem::setAlternateTitle):
        (WebCore::HistoryItem::setURLString):
        (WebCore::HistoryItem::setURL):
        (WebCore::HistoryItem::setOriginalURLString):
        (WebCore::HistoryItem::setTitle):
        (WebCore::HistoryItem::setTarget):
        (WebCore::HistoryItem::setParent):
        (WebCore::HistoryItem::setLastVisitedTime):
        (WebCore::HistoryItem::visitCount):
        (WebCore::HistoryItem::setVisitCount):
        (WebCore::HistoryItem::scrollPoint):
        (WebCore::HistoryItem::setScrollPoint):
        (WebCore::HistoryItem::clearScrollPoint):
        (WebCore::HistoryItem::setDocumentState):
        (WebCore::HistoryItem::documentState):
        (WebCore::HistoryItem::clearDocumentState):
        (WebCore::HistoryItem::isTargetItem):
        (WebCore::HistoryItem::setIsTargetItem):
        (WebCore::HistoryItem::alwaysAttemptToUsePageCache):
        (WebCore::HistoryItem::setAlwaysAttemptToUsePageCache):
        (WebCore::HistoryItem::addChildItem):
        (WebCore::HistoryItem::childItemWithName):
        (WebCore::HistoryItem::recurseToFindTargetItem):
        (WebCore::HistoryItem::targetItem):
        (WebCore::HistoryItem::pageCache):
        (WebCore::HistoryItem::children):
        (WebCore::HistoryItem::hasChildren):
        (WebCore::HistoryItem::formContentType):
        (WebCore::HistoryItem::formReferrer):
        (WebCore::HistoryItem::rssFeedReferrer):
        (WebCore::HistoryItem::setRSSFeedReferrer):
        (WebCore::HistoryItem::setFormInfoFromRequest):
        (WebCore::HistoryItem::formData):
        (WebCore::HistoryItem::mergeAutoCompleteHints):
        (WebCore::HistoryItem::hasPageCache):
        (WebCore::timer): Function to manage the global release timer
        (WebCore::pendingPageCacheToRelease): Function to manage the global queue of caches to be released
        (WebCore::HistoryItem::releasePageCache):
        (WebCore::closeObjectsInPendingPageCaches):
        (WebCore::HistoryItem::releaseAllPendingPageCaches):
        (WebCore::HistoryItem::scheduleRelease):
        (WebCore::HistoryItem::print):
        * history/HistoryItem.h: Added.
        * history/mac/HistoryItemMac.mm: Added.
        (WebCore::HistoryItem::viewState): In the future we need a platform agnostic way to manage the view state
        (WebCore::HistoryItem::setViewState):
        (WebCore::HistoryItem::getTransientProperty): Transient properties are, for now, only a Mac concept
        (WebCore::HistoryItem::setTransientProperty):

        * history/HistoryItemTimer.cpp: Added
        (WebCore::HistoryItemTimer::HistoryItemTimer): We need a specific class to be the history item timer because
        WebCore::Timers only work when you have an instance of an object, but the caches pending release is a static concept
        (WebCore::HistoryItemTimer::isActive):
        (WebCore::HistoryItemTimer::schedule):
        (WebCore::HistoryItemTimer::invalidate):
        (WebCore::HistoryItemTimer::callReleasePageCache):
        * history/HistoryItemTimer.h: Added.

        * history/PageCache.cpp Added - This is a class that contains the fields that used to be in an NSDictionary in WebKit
        (WebCore::PageCache::PageCache):
        (WebCore::PageCache::setPageState):
        (WebCore::PageCache::~PageCache):
        (WebCore::PageCache::pageState):
        (WebCore::PageCache::setDocumentLoader):
        (WebCore::PageCache::documentLoader):
        (WebCore::PageCache::setTimeStamp):
        (WebCore::PageCache::setTimeStampToNow):
        (WebCore::PageCache::timeStamp):
        * history/PageCache.h: Added.
        * history/mac/PageCacheMac.mm: Added.
        (WebCore::PageCache::close):
        (WebCore::PageCache::setDocumentView): In the future we need a platform agnostic way to manage the documentView
        (WebCore::PageCache::documentView):

        * loader/DocumentLoader.cpp:
        (WebCore::DocumentLoader::loadFromPageCache):
        (WebCore::DocumentLoader::setLoadingFromPageCache): 
        (WebCore::DocumentLoader::isLoadingFromPageCache):
        (WebCore::DocumentLoader::originalURL):
        (WebCore::DocumentLoader::requestURL):
        (WebCore::DocumentLoader::responseURL):
        (WebCore::DocumentLoader::responseMIMEType):
        * loader/DocumentLoader.h:

        * loader/FrameLoader.cpp: Responsibilities previously scattered in WebKit but concentrated in WebView and WebFrame 
          are now here, where they should be.
        (WebCore::FrameLoader::clear):
        (WebCore::FrameLoader::restoreDocumentState):
        (WebCore::FrameLoader::goBackOrForward):
        (WebCore::FrameLoader::provisionalLoadStarted):
        (WebCore::FrameLoader::canCachePage):
        (WebCore::FrameLoader::commitProvisionalLoad):
        (WebCore::FrameLoader::transitionToCommitted):
        (WebCore::FrameLoader::open):
        (WebCore::FrameLoader::didFirstLayout):
        (WebCore::FrameLoader::dispatchDidChangeLocationWithinPage):
        (WebCore::FrameLoader::dispatchDidFinishLoadToClient):
        (WebCore::FrameLoader::updateGlobalHistoryForStandardLoad): Marked for usage in future GlobalHistory (uses client for now)
        (WebCore::FrameLoader::updateGlobalHistoryForReload): Ditto
        (WebCore::FrameLoader::shouldGoToHistoryItem):
        (WebCore::FrameLoader::addExtraFieldsToRequest):
        (WebCore::FrameLoader::addHistoryItemForFragmentScroll):
        (WebCore::FrameLoader::loadProvisionalItemFromPageCache):
        (WebCore::FrameLoader::createPageCache):
        (WebCore::FrameLoader::shouldTreatURLAsSameAsCurrent):
        (WebCore::FrameLoader::createItem):
        (WebCore::FrameLoader::addBackForwardItemClippedAtTarget):
        (WebCore::FrameLoader::createItemTree):
        (WebCore::FrameLoader::saveScrollPositionAndViewStateToItem):
        (WebCore::FrameLoader::restoreScrollPositionAndViewState):
        (WebCore::FrameLoader::purgePageCache):
        (WebCore::FrameLoader::invalidateCurrentItemPageCache):
        (WebCore::FrameLoader::saveDocumentState):
        (WebCore::FrameLoader::loadItem):
        (WebCore::FrameLoader::urlsMatchItem):
        (WebCore::FrameLoader::goToItem):
        (WebCore::FrameLoader::recursiveGoToItem):
        (WebCore::FrameLoader::childFramesMatchItem):
        (WebCore::FrameLoader::updateHistoryForStandardLoad):
        (WebCore::FrameLoader::updateHistoryForClientRedirect):
        (WebCore::FrameLoader::updateHistoryForBackForwardNavigation):
        (WebCore::FrameLoader::updateHistoryForReload):
        (WebCore::FrameLoader::updateHistoryForInternalLoad):
        (WebCore::FrameLoader::updateHistoryForCommit):
        (WebCore::FrameLoader::saveDocumentAndScrollState):
        (WebCore::FrameLoader::currentHistoryItem):
        (WebCore::FrameLoader::previousHistoryItem):
        (WebCore::FrameLoader::provisionalHistoryItem):
        (WebCore::FrameLoader::setCurrentHistoryItem):
        (WebCore::FrameLoader::setPreviousHistoryItem):
        (WebCore::FrameLoader::setProvisionalHistoryItem):
        * loader/FrameLoader.h:

        * loader/FrameLoaderClient.h:

        * loader/mac/DocumentLoaderMac.mm:
        (WebCore::DocumentLoader::DocumentLoader):
        (WebCore::DocumentLoader::getResponseRefreshAndModifiedHeaders):
        (WebCore::DocumentLoader::commitIfReady):
        (WebCore::DocumentLoader::urlForHistory):

        * loader/mac/FrameLoaderMac.mm:
        (WebCore::FrameLoader::load):
        (WebCore::FrameLoader::startLoading):
        (WebCore::FrameLoader::receivedMainResourceError):
        (WebCore::FrameLoader::continueFragmentScrollAfterNavigationPolicy):
        (WebCore::FrameLoader::opened):
        (WebCore::FrameLoader::dataURLBaseFromRequest):
        (WebCore::FrameLoader::didChangeTitle):
        (WebCore::FrameLoader::continueLoadAfterNavigationPolicy):
        (WebCore::FrameLoader::checkLoadCompleteForThisFrame):

        * page/FrameTree.cpp:
        (WebCore::FrameTree::removeChild):

        * page/Page.cpp: Transfered a handful of concepts from WebView
        (WebCore::Page::Page):
        (WebCore::Page::~Page):
        (WebCore::Page::backForwardList):
        (WebCore::Page::goBack):
        (WebCore::Page::goForward):
        (WebCore::Page::goToItem):
        * page/Page.h:

        * page/PageState.h:
        * page/mac/FrameMac.h:
        * page/mac/FrameMac.mm:
        * page/mac/WebCoreFrameBridge.h:
        * page/mac/WebCoreFrameBridge.mm:

        * platform/KURL.cpp:
        (WebCore::KURL::print):  Added debug only method for debugging convenience
        * platform/KURL.h:

        * platform/Logging.cpp:
        (WebCore::): Added some logging channels
        * platform/Logging.h:

        * platform/PlatformString.h:
        (WebCore::nsStringNilIfEmpty): Added for WebKit use

        * platform/SystemTime.h: Added userIdleTime()

        * platform/graphics/svg/SVGImage.cpp:
        * platform/graphics/svg/SVGImageEmptyClients.h: Updated for new FrameLoaderClient methods
        (WebCore::SVGEmptyFrameLoaderClient::setDocumentViewFromPageCache):
        (WebCore::SVGEmptyFrameLoaderClient::updateGlobalHistoryForStandardLoad):
        (WebCore::SVGEmptyFrameLoaderClient::updateGlobalHistoryForReload):
        (WebCore::SVGEmptyFrameLoaderClient::shouldGoToHistoryItem):
        (WebCore::SVGEmptyFrameLoaderClient::saveScrollPositionAndViewStateToItem):
        (WebCore::SVGEmptyFrameLoaderClient::saveDocumentViewToPageCache):
        (WebCore::SVGEmptyFrameLoaderClient::canCachePage):
        (WebCore::SVGEmptyEditorClient::~SVGEmptyEditorClient):

        * platform/mac/LoggingMac.mm:
        (WebCore::InitializeLoggingChannelsIfNecessary):

        * platform/mac/SystemTimeMac.cpp:
        (WebCore::userIdleTime):

        * platform/mac/WebCoreSystemInterface.h: Added wkSecondsSinceLastInput for use in userIdleTime
        * platform/mac/WebCoreSystemInterface.mm:

        * platform/network/FormData.cpp:
        (WebCore::FormData::FormData):
        (WebCore::FormData::copy):
        * platform/network/FormData.h:

        * platform/network/ResourceHandle.h:
        * platform/network/mac/ResourceHandleMac.mm:
        (WebCore::ResourceHandle::willLoadFromCache): For "are you sure you want to resubmit?" nag

        * platform/qt/TemporaryLinkStubs.cpp:
        (WebCore::userIdleTime):
        * rendering/RenderPart.h:

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

        Rubber stamped by Mitz.

        Rename isRenderSVGContainer to isSVGContainer.

        * platform/graphics/ImageBuffer.cpp:
        (WebCore::ImageBuffer::renderSubtreeToImage):
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::containingBlock):
        * rendering/RenderObject.h:
        (WebCore::RenderObject::isSVGContainer):
        * rendering/RenderSVGContainer.cpp:
        (WebCore::RenderSVGContainer::viewportTransform):
        * rendering/RenderSVGContainer.h:
        (WebCore::RenderSVGContainer::isSVGContainer):
        * rendering/RenderTreeAsText.cpp:
        (WebCore::write):

2007-01-03  Nikolas Zimmermann  <zimmermann@kde.org>

        Reviewed by Mitz.

        Rename isKCanvasContainer to isRenderSVGContainer.

        * platform/graphics/ImageBuffer.cpp:
        (WebCore::ImageBuffer::renderSubtreeToImage):
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::containingBlock):
        * rendering/RenderObject.h:
        (WebCore::RenderObject::isRenderSVGContainer):
        * rendering/RenderSVGContainer.cpp:
        (WebCore::RenderSVGContainer::viewportTransform):
        * rendering/RenderSVGContainer.h:
        (WebCore::RenderSVGContainer::isRenderSVGContainer):
        * rendering/RenderTreeAsText.cpp:
        (WebCore::write):

2007-01-02  Beth Dakin  <bdakin@apple.com>

        Reviewed by Darin.

        Fix assertion failure with WebCore context menus by getting "Copy 
        Image" item added in.

        * platform/ContextMenu.cpp:
        (WebCore::ContextMenu::populate): Check if the image url is a local 
        file or if we have an image in the cache.

2007-01-02  Sam Weinig  <sam@webkit.org>

        Reviewed by Anders.

        Patch for http://bugs.webkit.org/show_bug.cgi?id=12072
        select with align attribute should not affect contained text

        Don't map align for select elements.

        Test: fast/forms/select-align.html

        * html/HTMLSelectElement.cpp:
        (WebCore::HTMLSelectElement::parseMappedAttribute):

2007-01-02  Sam Weinig  <sam@webkit.org>

        Reviewed by Mitz.

        Patch for http://bugs.webkit.org/show_bug.cgi?id=12071
        button with align attribute should not affect contained text

        Don't map align for button elements.

        Test: fast/forms/button-align.html

        * html/HTMLButtonElement.cpp:
        (WebCore::HTMLButtonElement::parseMappedAttribute):

2007-01-02  Sam Weinig  <sam@webkit.org>

        Reviewed by Mitz and Anders.

        Patch for http://bugs.webkit.org/show_bug.cgi?id=7075
        textarea with align=right should not cause contained text to 
        be right-justified

        Don't map align for textarea elements.

        Test: fast/forms/textarea-align.html

        * html/HTMLTextAreaElement.cpp:
        (WebCore::HTMLTextAreaElement::parseMappedAttribute):

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

        Reviewed by mitz.

        Implement SVGSVGElement::deselectAll()

        * ksvg2/svg/SVGAnimationElement.h:
        (WebCore::SVGAnimationElement::updateLastValueWithCurrent): add comment
        * ksvg2/svg/SVGSVGElement.cpp:
        (WebCore::SVGSVGElement::deselectAll): implement
        (WebCore::SVGSVGElement::setCurrentTime): add comment about bug
        * ksvg2/svg/SVGSVGElement.idl: remove unnecessary comment

2007-01-02  Sam Weinig  <sam@webkit.org>

        Reviewed by Darin.

        Patch for http://bugs.webkit.org/show_bug.cgi?id=3360
        align="right" on a text input aligns the input field to the right

        Don't map align if input type is not 'image'.

        Test: fast/forms/input-align-image.html
        Test: fast/forms/input-align.html

        * WebCore.xcodeproj/project.pbxproj:
        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::setInputType):
        (WebCore::HTMLInputElement::mapToEntry):
        (WebCore::HTMLInputElement::parseMappedAttribute):

2007-01-02  Nikolas Zimmermann  <zimmermann@kde.org>

        Reviewed by Eric.

        Fixes: http://bugs.webkit.org/show_bug.cgi?id=12013
        Fixes: http://bugs.webkit.org/show_bug.cgi?id=11980
        Partly fixes: http://bugs.webkit.org/show_bug.cgi?id=6000 (pattern/gradient recursion works now)

        Fixed testcases:
        coords-units-01-b.svg (<pattern> in objectBoundingBoxMode were broken.)
        pattern-in-defs.svg (clip pattern size against target size, to avoid excessive mallocs)
        js-update-pattern.svg (live updating really works now!)
        js-late-gradient-and-object-creation.svg (objectBoundingBoxMode gradients-on-text work now)
        js-late-gradient-creation.svg (same)

        Added testcases:
        js-late-pattern-and-object-creation.svg (objectBoundingBoxMode patterns-on-text work now)
        js-late-pattern-creation.svg (same)
        gradient-cycle-detection.svg (tests that cyclic gradients are ignored)
        gradient-deep-referencing.svg
        pattern-cycle-detection.svg (tests that cyclic patterns are ignored)
        pattern-deep-referencing.svg

        Rewrite gradient & pattern code, fixing all known bugs & regressions.

        -> Remove SVGResourceListener completly (the ugly resourceNotification() hack is gone now)

        -> Make patterns operate in all possible combinations of patternUnits / patternContentunits
           The SVGPaintServerPattern now asks the SVGPatternElement to build the pattern tile, passing
           the target object's bbox rectangle -> objectBoundingBox calculations can be done, so SVGPaintServerPattern
           itself doesn't need to know anything about "bounding box mode". Same could be done for gradients.

        -> SVGLength::valueAsPercentage() returns again fractional values, saves some "/ 100.0" statements.

        -> Deep references (gradientA -> gradientB -> gradientC...) work now. Previously only one reference worked.
           Adding GradientAttributes.h / PatternAttributes.h helper structures for the property collection.
           Cycle detection is implemented and won't kill us anymore :-)

        JS updates on gradients/patterns only cause one repaint of the client's now. Gradient drawing
        does not cause the target object to be redrawn immediately afterwards anymore.

        * WebCore.xcodeproj/project.pbxproj:
        * ksvg2/misc/KCanvasRenderingStyle.cpp:
        (WebCore::KSVGPainterFactory::fillPaintServer):
        (WebCore::KSVGPainterFactory::strokePaintServer):
        * ksvg2/misc/KCanvasRenderingStyle.h:
        * ksvg2/misc/SVGDocumentExtensions.cpp:
        (WebCore::SVGDocumentExtensions::addPendingResource):
        (WebCore::SVGDocumentExtensions::isPendingResource):
        (WebCore::SVGDocumentExtensions::removePendingResource):
        * ksvg2/misc/SVGDocumentExtensions.h:
        * ksvg2/svg/GradientAttributes.h: Added.
        (WebCore::GradientAttributes::GradientAttributes):
        (WebCore::GradientAttributes::spreadMethod):
        (WebCore::GradientAttributes::boundingBoxMode):
        (WebCore::GradientAttributes::gradientTransform):
        (WebCore::GradientAttributes::stops):
        (WebCore::GradientAttributes::setSpreadMethod):
        (WebCore::GradientAttributes::setBoundingBoxMode):
        (WebCore::GradientAttributes::setGradientTransform):
        (WebCore::GradientAttributes::setStops):
        (WebCore::GradientAttributes::hasSpreadMethod):
        (WebCore::GradientAttributes::hasBoundingBoxMode):
        (WebCore::GradientAttributes::hasGradientTransform):
        (WebCore::GradientAttributes::hasStops):
        * ksvg2/svg/LinearGradientAttributes.h: Added.
        (WebCore::LinearGradientAttributes::LinearGradientAttributes):
        (WebCore::LinearGradientAttributes::x1):
        (WebCore::LinearGradientAttributes::y1):
        (WebCore::LinearGradientAttributes::x2):
        (WebCore::LinearGradientAttributes::y2):
        (WebCore::LinearGradientAttributes::setX1):
        (WebCore::LinearGradientAttributes::setY1):
        (WebCore::LinearGradientAttributes::setX2):
        (WebCore::LinearGradientAttributes::setY2):
        (WebCore::LinearGradientAttributes::hasX1):
        (WebCore::LinearGradientAttributes::hasY1):
        (WebCore::LinearGradientAttributes::hasX2):
        (WebCore::LinearGradientAttributes::hasY2):
        * ksvg2/svg/PatternAttributes.h: Added.
        (WebCore::PatternAttributes::PatternAttributes):
        (WebCore::PatternAttributes::x):
        (WebCore::PatternAttributes::y):
        (WebCore::PatternAttributes::width):
        (WebCore::PatternAttributes::height):
        (WebCore::PatternAttributes::boundingBoxMode):
        (WebCore::PatternAttributes::boundingBoxModeContent):
        (WebCore::PatternAttributes::patternTransform):
        (WebCore::PatternAttributes::patternContentElement):
        (WebCore::PatternAttributes::setX):
        (WebCore::PatternAttributes::setY):
        (WebCore::PatternAttributes::setWidth):
        (WebCore::PatternAttributes::setHeight):
        (WebCore::PatternAttributes::setBoundingBoxMode):
        (WebCore::PatternAttributes::setBoundingBoxModeContent):
        (WebCore::PatternAttributes::setPatternTransform):
        (WebCore::PatternAttributes::setPatternContentElement):
        (WebCore::PatternAttributes::hasX):
        (WebCore::PatternAttributes::hasY):
        (WebCore::PatternAttributes::hasWidth):
        (WebCore::PatternAttributes::hasHeight):
        (WebCore::PatternAttributes::hasBoundingBoxMode):
        (WebCore::PatternAttributes::hasBoundingBoxModeContent):
        (WebCore::PatternAttributes::hasPatternTransform):
        (WebCore::PatternAttributes::hasPatternContentElement):
        * ksvg2/svg/RadialGradientAttributes.h: Added.
        (WebCore::RadialGradientAttributes::RadialGradientAttributes):
        (WebCore::RadialGradientAttributes::cx):
        (WebCore::RadialGradientAttributes::cy):
        (WebCore::RadialGradientAttributes::r):
        (WebCore::RadialGradientAttributes::fx):
        (WebCore::RadialGradientAttributes::fy):
        (WebCore::RadialGradientAttributes::setCx):
        (WebCore::RadialGradientAttributes::setCy):
        (WebCore::RadialGradientAttributes::setR):
        (WebCore::RadialGradientAttributes::setFx):
        (WebCore::RadialGradientAttributes::setFy):
        (WebCore::RadialGradientAttributes::hasCx):
        (WebCore::RadialGradientAttributes::hasCy):
        (WebCore::RadialGradientAttributes::hasR):
        (WebCore::RadialGradientAttributes::hasFx):
        (WebCore::RadialGradientAttributes::hasFy):
        * ksvg2/svg/SVGGradientElement.cpp:
        (WebCore::SVGGradientElement::notifyAttributeChange):
        (WebCore::SVGGradientElement::canvasResource):
        (WebCore::SVGGradientElement::buildStops):
        (WebCore::SVGGradientElement::insertedIntoDocument):
        * ksvg2/svg/SVGGradientElement.h:
        * ksvg2/svg/SVGLength.cpp:
        (WebCore::SVGLength::valueAsPercentage):
        * ksvg2/svg/SVGLinearGradientElement.cpp:
        (WebCore::SVGLinearGradientElement::buildGradient):
        (WebCore::SVGLinearGradientElement::collectGradientProperties):
        * ksvg2/svg/SVGLinearGradientElement.h:
        * ksvg2/svg/SVGLocatable.cpp:
        (WebCore::SVGLocatable::getScreenCTM):
        * ksvg2/svg/SVGPatternElement.cpp:
        (WebCore::SVGPatternElement::SVGPatternElement):
        (WebCore::SVGPatternElement::buildPattern):
        (WebCore::SVGPatternElement::notifyAttributeChange):
        (WebCore::SVGPatternElement::canvasResource):
        (WebCore::SVGPatternElement::insertedIntoDocument):
        (WebCore::SVGPatternElement::collectPatternProperties):
        * ksvg2/svg/SVGPatternElement.h:
        * ksvg2/svg/SVGRadialGradientElement.cpp:
        (WebCore::SVGRadialGradientElement::buildGradient):
        (WebCore::SVGRadialGradientElement::collectGradientProperties):
        * ksvg2/svg/SVGRadialGradientElement.h:
        * platform/graphics/svg/SVGPaintServerGradient.cpp:
        (WebCore::SVGPaintServerGradient::SVGPaintServerGradient):
        (WebCore::SVGPaintServerGradient::externalRepresentation):
        * platform/graphics/svg/SVGPaintServerGradient.h:
        (WebCore::):
        * platform/graphics/svg/SVGPaintServerLinearGradient.cpp:
        (WebCore::SVGPaintServerLinearGradient::SVGPaintServerLinearGradient):
        * platform/graphics/svg/SVGPaintServerLinearGradient.h:
        * platform/graphics/svg/SVGPaintServerPattern.cpp:
        (WebCore::SVGPaintServerPattern::SVGPaintServerPattern):
        (WebCore::SVGPaintServerPattern::patternBoundaries):
        (WebCore::SVGPaintServerPattern::setPatternBoundaries):
        (WebCore::SVGPaintServerPattern::setTile):
        (WebCore::SVGPaintServerPattern::externalRepresentation):
        * platform/graphics/svg/SVGPaintServerPattern.h:
        * platform/graphics/svg/SVGPaintServerRadialGradient.cpp:
        (WebCore::SVGPaintServerRadialGradient::SVGPaintServerRadialGradient):
        * platform/graphics/svg/SVGPaintServerRadialGradient.h:
        * platform/graphics/svg/SVGResource.cpp:
        (WebCore::SVGResource::invalidate):
        (WebCore::SVGResource::repaintClients):
        * platform/graphics/svg/SVGResource.h:
        * platform/graphics/svg/SVGResourceListener.h:
        * platform/graphics/svg/cg/SVGPaintServerGradientCg.cpp:
        (WebCore::cgGradientCallback):
        (WebCore::CGShadingRefForRadialGradient):
        (WebCore::SVGPaintServerGradient::updateQuartzGradientStopsCache):
        (WebCore::SVGPaintServerGradient::updateQuartzGradientCache):
        (WebCore::SVGPaintServerGradient::teardown):
        (WebCore::SVGPaintServerGradient::renderPath):
        (WebCore::SVGPaintServerGradient::handleBoundingBoxModeAndGradientTransformation):
        (WebCore::SVGPaintServerGradient::setup):
        (WebCore::SVGPaintServerGradient::invalidate):
        * platform/graphics/svg/cg/SVGPaintServerPatternCg.cpp:
        (WebCore::SVGPaintServerPattern::setup):
        (WebCore::SVGPaintServerPattern::teardown):
        * platform/graphics/svg/qt/SVGPaintServerLinearGradientQt.cpp:
        (WebCore::SVGPaintServerLinearGradient::setup):
        * platform/graphics/svg/qt/SVGPaintServerPatternQt.cpp:
        (WebCore::SVGPaintServerPattern::setup):
        * platform/graphics/svg/qt/SVGPaintServerRadialGradientQt.cpp:
        (WebCore::SVGPaintServerRadialGradient::setup):

2007-01-02  Zack Rusin  <zack@kde.org>

        Compilation fix. File names are case-sensitive.

        * ksvg2/svg/SVGPathSegList.cpp:

2007-01-02  Zack Rusin  <zack@kde.org>

        Compilation fixes for the Qt port.

        * WebCore.pro:
        * platform/qt/FrameQt.cpp:
        (WebCore::FrameQt::bindingRootObject):
        (WebCore::FrameQt::addPluginRootObject):

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

        Reviewed by rwlbuis.

        Refactor more animation code for better sharing between SVGAnimate*Element classes.
        - replace handleEndCondition with resetValues() and updateLastValueWithCurrent()
        - move initialTransform() function down into SVGTimer (eventually to AnimationCompositor)
        Add non-functional (only parses) SVGAnimateMotionElement
        Improve precision of getPointAtLength calculations and add support for "getNormalAtLength" functionality (needed for rotate='auto' support in animateMotion)
        Move add getSegmentAtLength functionality to SVGPathSegList, move toPathData into SVGPathSegList as well.
        Add SVGAnimationElement::hasValidTarget() for future better/simpler ASSERT checking
        change transformMatrix() to currentTransform() to match AffineTransform class name

        * WebCore.xcodeproj/project.pbxproj:
        * ksvg2/misc/SVGTimer.cpp:
        (WebCore::SVGTimer::animationsByElement):
        (WebCore::baseValueTransformList):
        (WebCore::SVGTimer::applyAnimations):
        * ksvg2/svg/SVGAnimateColorElement.cpp:
        (WebCore::SVGAnimateColorElement::updateLastValueWithCurrent):
        * ksvg2/svg/SVGAnimateColorElement.h:
        * ksvg2/svg/SVGAnimateMotionElement.cpp: Added.
        (WebCore::SVGAnimateMotionElement::SVGAnimateMotionElement):
        (WebCore::SVGAnimateMotionElement::~SVGAnimateMotionElement):
        (WebCore::SVGAnimateMotionElement::hasValidTarget): added.
        (WebCore::SVGAnimateMotionElement::parseMappedAttribute):
        (WebCore::SVGAnimateMotionElement::animationPath): fetch path from <mpath> or d attribute
        (WebCore::SVGAnimateMotionElement::updateCurrentValue):
        (WebCore::SVGAnimateMotionElement::handleStartCondition):
        (WebCore::SVGAnimateMotionElement::applyAnimationToValue):
        * ksvg2/svg/SVGAnimateMotionElement.h: Added.
        (WebCore::SVGAnimateMotionElement::contextElement):
        (WebCore::SVGAnimateMotionElement::):
        * ksvg2/svg/SVGAnimateTransformElement.cpp:
        (WebCore::SVGAnimateTransformElement::hasValidTarget): added.
        (WebCore::SVGAnimateTransformElement::storeInitialValue):
        (WebCore::SVGAnimateTransformElement::updateCurrentValue):
        (WebCore::SVGAnimateTransformElement::updateLastValueWithCurrent):
        (WebCore::SVGAnimateTransformElement::applyAnimationToValue):
        (WebCore::SVGAnimateTransformElement::currentTransform):
        * ksvg2/svg/SVGAnimateTransformElement.h:
        * ksvg2/svg/SVGAnimationElement.cpp:
        (WebCore::SVGAnimationElement::hasValidTarget): added.
        (WebCore::SVGAnimationElement::parseMappedAttribute):
        (WebCore::SVGAnimationElement::isAdditive):
        (WebCore::SVGAnimationElement::isAccumulated):
        (WebCore::SVGAnimationElement::handleTimerEvent):
        * ksvg2/svg/SVGAnimationElement.h:
        (WebCore::SVGAnimationElement::updateLastValueWithCurrent):
        (WebCore::SVGAnimationElement::resetValues):
        * ksvg2/svg/SVGPathElement.cpp:
        (WebCore::SVGPathElement::getPointAtLength):
        (WebCore::SVGPathElement::getPathSegAtLength):
        (WebCore::SVGPathElement::parseMappedAttribute):
        (WebCore::SVGPathElement::toPathData):
        * ksvg2/svg/SVGPathSegList.cpp:
        (WebCore::SVGPathSegList::getPathSegAtLength): added.
        (WebCore::SVGPathSegList::toPathData): added.
        * ksvg2/svg/SVGPathSegList.h:
        * ksvg2/svg/svgtags.in: add animateMotion
        * platform/graphics/Path.cpp:
        (WebCore::pathLengthApplierFunction): add support for TraversalNormalAngleAtLength
        * platform/graphics/PathTraversalState.cpp:
        (WebCore::curveLength): support higher precision pointAtLength calculations, and add normalAtLength support
        (WebCore::PathTraversalState::quadraticBezierTo):
        (WebCore::PathTraversalState::cubicBezierTo):
        * platform/graphics/PathTraversalState.h:
        (WebCore::PathTraversalState::): add TraversalNormalAngleAtLength mode

2007-01-01  Mitz Pettel  <mitz@webkit.org>

        Reviewed by Darin.

        - WebCore changes for http://bugs.webkit.org/show_bug.cgi?id=11849
          REGRESSION (r18182): Google Calendar is broken (a regular expression containing a null character is not parsed correctly)

        * platform/RegularExpression.cpp:
        (WebCore::RegularExpression::Private::compile): Changed to not null-terminate
        the pattern string and instead pass its length to pcre_compile.

2007-01-01  Mitz Pettel  <mitz@webkit.org>

        Reviewed by Darin.

        - fix http://bugs.webkit.org/show_bug.cgi?id=11359
          Incomplete repaint of table cell's collapsed border when changing only the cell

        Test: fast/repaint/table-cell-collapsed-border.html

        * rendering/RenderTable.h:
        Added needsSectionRecalc() accessor.
        * rendering/RenderTableCell.cpp:
        (WebCore::RenderTableCell::getAbsoluteRepaintRect): Overloaded to add the
        outer half of any collapsed borders. This function checks the cell's borders'
        widths but also the widths of the adjoining cells' borders, since they can
        contribute to the length of this cell's borders perpendicular to them, making
        such a border overflow the cell in both dimensions.
        (WebCore::RenderTableCell::borderLeft): Split the collapsing borders case off to
        borderHalfLeft().
        (WebCore::RenderTableCell::borderRight): Ditto.
        (WebCore::RenderTableCell::borderTop): Ditto.
        (WebCore::RenderTableCell::borderBottom): Ditto.
        (WebCore::RenderTableCell::borderHalfLeft): Added. Takes an 'outer' boolean
        parameter. When true, this function returns the width of the part of the border
        that is outside the cell (different from the inner width when the total width is odd).
        (WebCore::RenderTableCell::borderHalfRight): Ditto.
        (WebCore::RenderTableCell::borderHalfTop): Ditto.
        (WebCore::RenderTableCell::borderHalfBottom): Ditto.
        * rendering/RenderTableCell.h:

2007-01-01  David Kilzer  <ddkilzer@webkit.org>

        WebCore.vcproj change reviewed by Darin.  Additional build files updated by ddkilzer.

        * CMakeLists.txt: Removed RenderLineEdit.cpp.
        * WebCore.vcproj/WebCore/WebCore.vcproj: Removed RenderLineEdit.cpp and RenderLineEdit.h.
        * WebCoreSources.bkl: Removed RenderLineEdit.cpp.

2007-01-01  Mitz Pettel  <mitz@webkit.org>

        Reviewed by Mark Rowe.

        - fix http://bugs.webkit.org/show_bug.cgi?id=12042
          Assertion failure in WebCore::RenderObject::drawBorder

        Test: fast/borders/outline-offset-min-assert.html

        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::paintOutline): Bail out if the width or height is
        smaller than twice the outline inset.
        
2007-01-01  Mark Rowe  <bdash@webkit.org>

        Reviewed by Eric.

        http://bugs.webkit.org/show_bug.cgi?id=12061
        Bug 12061: Crash in WebCore::Shared<WebCore::StringImpl>::deref

        * rendering/RenderStyle.cpp:
        (WebCore::ContentData::clearContent): Reset _contentType to CONTENT_NONE to ensure repeated calls to clearContent
        do not result in derefing deallocated members.

2007-01-01  Eric Seidel  <eric@webkit.org>

        Reviewed by andersca.

        Begin pushing code down into SVGAnimateElement

        * ksvg2/svg/SVGAnimateColorElement.cpp:
        (WebCore::SVGAnimateColorElement::handleStartCondition):
        * ksvg2/svg/SVGAnimateColorElement.h:
        * ksvg2/svg/SVGAnimateElement.h:
        (WebCore::SVGAnimateElement::updateCurrentValue):
        (WebCore::SVGAnimateElement::handleStartCondition):
        (WebCore::SVGAnimateElement::handleEndCondition):
        * ksvg2/svg/SVGAnimateTransformElement.cpp:
        (WebCore::SVGAnimateTransformElement::handleStartCondition):
        * ksvg2/svg/SVGAnimateTransformElement.h:
        * ksvg2/svg/SVGAnimationElement.cpp:
        (WebCore::SVGAnimationElement::handleTimerEvent):
        * ksvg2/svg/SVGAnimationElement.h:
        * ksvg2/svg/SVGSetElement.cpp:
        (WebCore::SVGSetElement::updateCurrentValue):
        (WebCore::SVGSetElement::handleStartCondition):
        (WebCore::SVGSetElement::handleEndCondition):
        * ksvg2/svg/SVGSetElement.h:

2007-01-01  Eric Seidel  <eric@webkit.org>

        Reviewed by andersca.

        Add static function SVGColor::colorFromRGBColorString to allow parsing Colors from SVG color strings w/o creating an SVGColor object.

        * ksvg2/svg/SVGAnimateColorElement.cpp:
        (WebCore::SVGAnimateColorElement::storeInitialValue): use colorFromRGBColorString
        (WebCore::SVGAnimateColorElement::startIfNecessary): use colorFromRGBColorString
        * ksvg2/svg/SVGColor.cpp:
        (WebCore::SVGColor::setRGBColor): use colorFromRGBColorString
        (WebCore::parseNumberOrPercent): new color parsing helper
        (WebCore::SVGColor::colorFromRGBColorString): cleaned up version of setRGBColor parsing logic
        * ksvg2/svg/SVGColor.h:

2007-01-01  Eric Seidel  <eric@webkit.org>

        Reviewed by andersca.

        Split handleTimerEvent logic into separate functions in preparation for moving down into SVGAnimationElement

        * ksvg2/svg/SVGAnimateColorElement.cpp:
        (WebCore::SVGAnimateColorElement::storeInitialValue):
        (WebCore::SVGAnimateColorElement::resetValues):
        (WebCore::SVGAnimateColorElement::updateCurrentValue):
        (WebCore::SVGAnimateColorElement::startIfNecessary):
        (WebCore::SVGAnimateColorElement::handleEndCondition):
        (WebCore::SVGAnimateColorElement::handleTimerEvent):
        * ksvg2/svg/SVGAnimateColorElement.h:
        * ksvg2/svg/SVGAnimateTransformElement.cpp:
        (WebCore::SVGAnimateTransformElement::storeInitialValue):
        (WebCore::SVGAnimateTransformElement::resetValues):
        (WebCore::SVGAnimateTransformElement::updateCurrentValue):
        (WebCore::SVGAnimateTransformElement::startIfNecessary):
        (WebCore::SVGAnimateTransformElement::handleEndCondition):
        (WebCore::SVGAnimateTransformElement::handleTimerEvent):
        * ksvg2/svg/SVGAnimateTransformElement.h:

2007-01-01  Rob Buis  <buis@kde.org>

        Reviewed by Eric.

        Simple cleanups, removing unused color table, copyright and include guard fixes.

        * ksvg2/svg/SVGColor.cpp:
        * ksvg2/svg/SVGColor.h:

2007-01-01  Eric Seidel  <eric@webkit.org>

        Reviewed by andersca.

        More animation code cleanup.

        * ksvg2/svg/SVGAnimateColorElement.cpp:
        (WebCore::SVGAnimateColorElement::handleTimerEvent):
        * ksvg2/svg/SVGAnimateTransformElement.cpp:
        (WebCore::SVGAnimateTransformElement::handleTimerEvent):
        * ksvg2/svg/SVGAnimationElement.cpp:
        (WebCore::SVGAnimationElement::SVGAnimationElement):
        (WebCore::SVGAnimationElement::connectedToTimer):
        (WebCore::SVGAnimationElement::connectTimer):
        (WebCore::SVGAnimationElement::disconnectTimer):
        (WebCore::SVGAnimationElement::updateForElapsedSeconds):
        * ksvg2/svg/SVGAnimationElement.h:
        * ksvg2/svg/SVGSetElement.cpp:
        (WebCore::SVGSetElement::handleTimerEvent):
        * ksvg2/svg/SVGSetElement.h:

2007-01-01  Eric Seidel  <eric@webkit.org>

        Reviewed by mitz.

        More clean-up to animation code.

        * ksvg2/svg/SVGAnimateColorElement.cpp:
        (WebCore::SVGAnimateColorElement::handleTimerEvent):
        * ksvg2/svg/SVGAnimateTransformElement.cpp:
        (WebCore::SVGAnimateTransformElement::handleTimerEvent):
        (WebCore::SVGAnimateTransformElement::parseTransformValue):
        (WebCore::SVGAnimateTransformElement::calculateRotationFromMatrix):

2007-01-01  Eric Seidel  <eric@webkit.org>

        Reviewed by olliej.

        Begin pushing more animation logic out of SVGTimer and into the SVGAnimate* classes.
        
        * ksvg2/misc/SVGTimer.cpp:
        (WebCore::SVGTimer::animationsByElement): add comment
        (WebCore::SVGTimer::notifyAll): push logic into SVGAnimte* classes
        * ksvg2/svg/SVGAnimateColorElement.cpp:
        (WebCore::SVGAnimateColorElement::applyAnimationToValue): added.
        * ksvg2/svg/SVGAnimateColorElement.h:
        * ksvg2/svg/SVGAnimateElement.cpp:
        * ksvg2/svg/SVGAnimateTransformElement.cpp:
        (WebCore::SVGAnimateTransformElement::applyAnimationToValue): added.
        * ksvg2/svg/SVGAnimateTransformElement.h:
        * ksvg2/svg/SVGAnimationElement.cpp:
        (WebCore::calculateTimePercentage): logic moved from SVGTimer
        (WebCore::SVGAnimationElement::updateForElapsedSeconds): logic moved from SVGTimer
        * ksvg2/svg/SVGAnimationElement.h:
        * ksvg2/svg/SVGTransformList.cpp:
        (SVGTransformList::concatenate): fixed spacing

2007-01-01  Eric Seidel  <eric@webkit.org>

        Reviewed by olliej.

        Split out animationsByElement() logic in preparation for adding AnimationCompositor class
        Add addColorsAndClamp helper (since adding and clamping is the common case)

        * ksvg2/misc/SVGTimer.cpp:
        (WebCore::SVGTimer::animationsByElement): split out from notifyAll
        (WebCore::SVGTimer::notifyAll):
        * ksvg2/misc/SVGTimer.h:
        * ksvg2/svg/SVGAnimateColorElement.cpp:
        (WebCore::SVGAnimateColorElement::addColorsAndClamp): added.
        * ksvg2/svg/SVGAnimateColorElement.h:

2006-12-31  Eric Seidel  <eric@webkit.org>

        Reviewed by olliej.

        Split KSVGTimeScheduler into SVGTimer and TimeScheduler.
        (Basic clean-up before re-working animation system)

        * WebCore.xcodeproj/project.pbxproj:
        * ksvg2/misc/KSVGTimeScheduler.cpp: Removed.
        * ksvg2/misc/KSVGTimeScheduler.h: Removed.
        * ksvg2/misc/SVGTimer.cpp: Added.
        (WebCore::SVGTimer::SVGTimer):
        (WebCore::SVGTimer::calculateTimePercentage):
        (WebCore::SVGTimer::notifyAll):
        * ksvg2/misc/SVGTimer.h: Added.
        * ksvg2/misc/TimeScheduler.cpp: Added.
        (WebCore::TimeScheduler::TimeScheduler):

2006-12-31  Eric Seidel  <eric@webkit.org>

        Reviewed by olliej.

        Re-enable animateTransform (now that SVGList is fixed)
        (Things are only "less broken" not totally fixed yet.)

        * ksvg2/misc/KSVGTimeScheduler.cpp:
        (WebCore::SVGTimer::notifyAll):

2006-12-31  Mitz Pettel  <mitz@webkit.org>

        Reviewed by Hyatt.

        - http://bugs.webkit.org/show_bug.cgi?id=12049
          RenderBlock::calcMinMaxWidth() should not examine children of fixed-width blocks

        No test possible (no change to functionality).

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::calcMinMaxWidth): Call calc{Inline,Block}MinMaxWidth()
        only if their result is needed.

== Rolled over to ChangeLog-2006-12-31 ==
